0 txs
159 calls
constructor
constructor(address _serviceManager, address _olas, address _stakingFactory, uint256 _agentId, bytes32 _configHash)
functions
agentId
viewfunction agentId() view returns (uint256)
configHash
viewfunction configHash() view returns (bytes32)
CONTRIBUTORS_PROXY
viewfunction CONTRIBUTORS_PROXY() view returns (bytes32)
fallbackHandler
viewfunction fallbackHandler() view returns (address)
mapAccountServiceInfo
viewfunction mapAccountServiceInfo(address) view returns (uint256 socialId, uint256 serviceId, address multisig, address stakingInstance)
mapContributeAgents
viewfunction mapContributeAgents(address) view returns (bool)
mapMutisigActivities
viewfunction mapMutisigActivities(address) view returns (uint256)
NUM_AGENT_INSTANCES
viewfunction NUM_AGENT_INSTANCES() view returns (uint256)
olas
viewfunction olas() view returns (address)
owner
viewfunction owner() view returns (address)
safeMultisig
viewfunction safeMultisig() view returns (address)
safeSameAddressMultisig
viewfunction safeSameAddressMultisig() view returns (address)
serviceManager
viewfunction serviceManager() view returns (address)
serviceRegistry
viewfunction serviceRegistry() view returns (address)
serviceRegistryTokenUtility
viewfunction serviceRegistryTokenUtility() view returns (address)
stakingFactory
viewfunction stakingFactory() view returns (address)
THRESHOLD
viewfunction THRESHOLD() view returns (uint256)
VERSION
viewfunction VERSION() view returns (string)
changeImplementation
nonpayablefunction changeImplementation(address newImplementation)
changeOwner
nonpayablefunction changeOwner(address newOwner)
changeSafeContracts
nonpayablefunction changeSafeContracts(address newSafeMultisig, address newSafeSameAddressMultisig, address newFallbackHandler)
claim
nonpayablefunction claim() returns (uint256 reward)
createAndStake
payablefunction createAndStake(uint256 socialId, address stakingInstance) payable
increaseActivity
nonpayablefunction increaseActivity(address[] multisigs, uint256[] activityChanges)
initialize
nonpayablefunction initialize(address _safeMultisig, address _safeSameAddressMultisig, address _fallbackHandler)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
pullUnbondedService
nonpayablefunction pullUnbondedService()
reStake
payablefunction reStake(address nextStakingInstance) payable
setContributeServiceStatuses
nonpayablefunction setContributeServiceStatuses(address[] contributeServices, bool[] statuses)
stake
payablefunction stake(uint256 socialId, uint256 serviceId, address stakingInstance) payable
unstake
nonpayablefunction unstake(bool pullService)
events
Claimed
event Claimed(uint256 indexed socialId, address indexed serviceOwner, uint256 serviceId, address indexed multisig, address stakingInstance)
CreatedAndStaked
event CreatedAndStaked(uint256 indexed socialId, address indexed serviceOwner, uint256 serviceId, address indexed multisig, address stakingInstance)
ImplementationUpdated
event ImplementationUpdated(address indexed implementation)
MultisigActivityChanged
event MultisigActivityChanged(address indexed senderAgent, address[] multisigs, uint256[] activityChanges)
OwnerUpdated
event OwnerUpdated(address indexed owner)
Restaked
event Restaked(uint256 indexed socialId, address indexed serviceOwner, uint256 serviceId, address indexed multisig, address stakingInstance)
SafeContractsChanged
event SafeContractsChanged(address indexed safeMultisig, address indexed safeSameAddressMultisig, address indexed fallbackHandler)
ServicePulled
event ServicePulled(address indexed sender, uint256 indexed serviceId)
SetContributeServiceStatuses
event SetContributeServiceStatuses(address[] contributeServices, bool[] statuses)
Staked
event Staked(uint256 indexed socialId, address indexed serviceOwner, uint256 serviceId, address indexed multisig, address stakingInstance)
Unstaked
event Unstaked(uint256 indexed socialId, address indexed serviceOwner, uint256 serviceId, address indexed multisig, address stakingInstance)
errors
AlreadyInitialized
error AlreadyInitialized()
OwnerOnly
error OwnerOnly(address sender, address owner)
ReentrancyGuard
error ReentrancyGuard()
ServiceAlreadyStaked
error ServiceAlreadyStaked(uint256 socialId, uint256 serviceId, address multisig)
ServiceNotDefined
error ServiceNotDefined(uint256 socialId)
UnauthorizedAccount
error UnauthorizedAccount(address account)
WrongArrayLength
error WrongArrayLength(uint256 numValues1, uint256 numValues2)
WrongServiceSetup
error WrongServiceSetup(uint256 socialId, uint256 serviceId, address multisig)
WrongServiceState
error WrongServiceState(uint256 socialId, uint256 serviceId, uint8 state)
WrongStakingInstance
error WrongStakingInstance(address stakingInstance)
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x6101606040526001600455348015610015575f5ffd5b5060405161452c38038061452c833981016040819052610034916101dd565b6001600160a01b038516158061005157506001600160a01b038416155b8061006357506001600160a01b038316155b156100815760405163d92e233d60e01b815260040160405180910390fd5b81158061008c575080155b156100aa57604051637c946ed760e01b815260040160405180910390fd5b608082905260a08190526001600160a01b0380861660c081905285821660e05290841661014052604080516365e7929560e11b8152905163cbcf252a9160048082019260209290919082900301815f875af115801561010b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061012f919061022f565b6001600160a01b0316610100816001600160a01b031681525050846001600160a01b031663287140516040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610186573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101aa919061022f565b6001600160a01b0316610120525061024f9350505050565b80516001600160a01b03811681146101d8575f5ffd5b919050565b5f5f5f5f5f60a086880312156101f1575f5ffd5b6101fa866101c2565b9450610208602087016101c2565b9350610216604087016101c2565b6060870151608090970151959894975095949392505050565b5f6020828403121561023f575f5ffd5b610248826101c2565b9392505050565b60805160a05160c05160e0516101005161012051610140516141d66103565f395f8181610348015261109401525f8181610315015261311a01525f818161060b015281816115b50152818161180a015281816118e201528181611d6801528181611ecf015281816125670152818161279b01528181612aa001526133fd01525f81816101e40152818161292d01528181612dab0152818161305d015261314901525f818161037b015281816111630152818161139b015281816126d901528181612863015281816131e3015281816132a4015281816134f2015261364201525f8181610695015281816111a1015261352f01525f81816106c80152612e6801526141d65ff3fe6080604052600436106101cf575f3560e01c8063785ffb37116100fd578063cbcf252a11610092578063e1f1176d11610062578063e1f1176d14610684578063e84f43b7146106b7578063eed2f252146106ea578063ffa1ad7414610716575f5ffd5b8063cbcf252a146105fa578063ce5304721461062d578063d67f743d146104a0578063df1f774314610659575f5ffd5b8063a6f9dae1116100cd578063a6f9dae114610589578063abcfe299146105a8578063c0c53b8b146105c7578063cacd0a92146105e6575f5ffd5b8063785ffb37146104a05780638b494a39146104b45780638da5cb5b1461054a5780639c5cb6a314610576575f5ffd5b80633998fdd3116101735780634e71d92d116101435780634e71d92d146104285780636000cadf1461043c5780636859d1d81461044f5780637628a37d1461048d575f5ffd5b80633998fdd31461036a5780633db25aab1461039d57806341c952a4146103de5780634990408f146103fd575f5ffd5b8063150b7a02116101ae578063150b7a021461027057806317a68dd8146102e557806328714051146103045780632913476814610337575f5ffd5b806231d115146101d35780630223b1dc14610230578063088abb8d14610251575b5f5ffd5b3480156101de575f5ffd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023b575f5ffd5b5061024f61024a3660046138fc565b61076b565b005b34801561025c575f5ffd5b5061024f61026b3660046139c3565b610991565b34801561027b575f5ffd5b506102b461028a3660046139e5565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610227565b3480156102f0575f5ffd5b5061024f6102ff366004613a7e565b610a7b565b34801561030f575f5ffd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b348015610342575f5ffd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b348015610375575f5ffd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a8575f5ffd5b506103d07f8f33b4c48c4f3159dc130f2111086160da6c94439c147bd337ecee0aa81518c781565b604051908152602001610227565b3480156103e9575f5ffd5b5061024f6103f8366004613a99565b610ba2565b348015610408575f5ffd5b506103d0610417366004613a7e565b60076020525f908152604090205481565b348015610433575f5ffd5b506103d0610d2b565b61024f61044a366004613b49565b610f43565b34801561045a575f5ffd5b5061047d610469366004613a7e565b60086020525f908152604090205460ff1681565b6040519015158152602001610227565b61024f61049b366004613b77565b61149a565b3480156104ab575f5ffd5b506103d0600181565b3480156104bf575f5ffd5b5061050e6104ce366004613a7e565b60066020525f908152604090208054600182015460028301546003909301549192909173ffffffffffffffffffffffffffffffffffffffff918216911684565b60408051948552602085019390935273ffffffffffffffffffffffffffffffffffffffff91821692840192909252166060820152608001610227565b348015610555575f5ffd5b506005546102069073ffffffffffffffffffffffffffffffffffffffff1681565b61024f610584366004613a7e565b611a5e565b348015610594575f5ffd5b5061024f6105a3366004613a7e565b6120b7565b3480156105b3575f5ffd5b5061024f6105c2366004613bad565b6121e5565b3480156105d2575f5ffd5b5061024f6105e1366004613bad565b6122d9565b3480156105f1575f5ffd5b5061024f612363565b348015610605575f5ffd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b348015610638575f5ffd5b506001546102069073ffffffffffffffffffffffffffffffffffffffff1681565b348015610664575f5ffd5b505f546102069073ffffffffffffffffffffffffffffffffffffffff1681565b34801561068f575f5ffd5b506103d07f000000000000000000000000000000000000000000000000000000000000000081565b3480156106c2575f5ffd5b506103d07f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f5575f5ffd5b506002546102069073ffffffffffffffffffffffffffffffffffffffff1681565b348015610721575f5ffd5b5061075e6040518060400160405280600581526020017f302e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102279190613c36565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107e3576005546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044015b60405180910390fd5b815115806107f357508051825114155b1561083757815181516040517f8151c110000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016107da565b5f5b8251811015610953575f73ffffffffffffffffffffffffffffffffffffffff1683828151811061086b5761086b613c48565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036108c0576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181815181106108d2576108d2613c48565b602002602001015160085f8584815181106108ef576108ef613c48565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101610839565b507fafc178bdde9ecf8a42dd2be4f8ac43dd8f06ab6909716d130d9e8d1d9688d1078282604051610985929190613cc5565b60405180910390a15050565b600160045411156109ce576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026004819055335f90815260066020908152604080832081516080810183528154815260018201549381018490529481015473ffffffffffffffffffffffffffffffffffffffff90811692860192909252600301541660608401529003610a685780516040517fe2e8d5b500000000000000000000000000000000000000000000000000000000815260048101919091526024016107da565b610a7281836125f5565b50506001600455565b60055473ffffffffffffffffffffffffffffffffffffffff163314610aee576005546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016107da565b73ffffffffffffffffffffffffffffffffffffffff8116610b3b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f8f33b4c48c4f3159dc130f2111086160da6c94439c147bd337ecee0aa81518c781905560405173ffffffffffffffffffffffffffffffffffffffff8216907f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03905f90a250565b335f9081526008602052604090205460ff16610bec576040517f32b2baa30000000000000000000000000000000000000000000000000000000081523360048201526024016107da565b81511580610bfc57508051825114155b15610c4057815181516040517f8151c110000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016107da565b5f5b8251811015610cd657818181518110610c5d57610c5d613c48565b602002602001015160075f858481518110610c7a57610c7a613c48565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610cc99190613d4c565b9091555050600101610c42565b503373ffffffffffffffffffffffffffffffffffffffff167fa979bfa637f10d403f5b074e0ee52626618f5969e71d33fa0f5daf0caa2206568383604051610d1f929190613d65565b60405180910390a25050565b5f60016004541115610d69576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026004819055335f90815260066020908152604080832081516080810183528154815260018201549381018490529481015473ffffffffffffffffffffffffffffffffffffffff90811692860192909252600301541660608401529003610e035780516040517fe2e8d5b500000000000000000000000000000000000000000000000000000000815260048101919091526024016107da565b606081015160208201516040517f379607f500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9092169163379607f591610e629160040190815260200190565b6020604051808303815f875af1158015610e7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea29190613db1565b9150806040015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16825f01517fe14b5e030aa5b458c65a405e8cf88687ddc2dc52b7253577ec01edad49236bd784602001518560600151604051610f3292919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a450600160045590565b60016004541115610f80576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026004555f829003610fbf576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600660205260409020600281015473ffffffffffffffffffffffffffffffffffffffff161561104f57600181015460028201546040517f7861264100000000000000000000000000000000000000000000000000000000815260048101869052602481019290925273ffffffffffffffffffffffffffffffffffffffff1660448201526064016107da565b6040517f479e372e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063479e372e90602401602060405180830381865afa1580156110d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110fd9190613dc8565b61114b576040517f080ae8fe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107da565b5f5f5f5f61115886612be0565b93509350935093505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e42cdd7c30877f0000000000000000000000000000000000000000000000000000000000000000878760016040518763ffffffff1660e01b81526004016111e596959493929190613e69565b6020604051808303815f875af1158015611201573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112259190613db1565b9050611232818585612faf565b600354604080514260208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1691810191909152605481018290525f90607401604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020918201206002545f92840183905260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016603484015260488301829052605c830182905260708301829052609083018190527f307800000000000000000000000000000000000000000000000000000000000060b084015292509060b201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290525f80547f0d0d57a80000000000000000000000000000000000000000000000000000000084529193509173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692630d0d57a8926113d5928a9216908790600401613ee5565b6020604051808303815f875af11580156113f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114159190613f22565b9050611422846001613d4c565b6003556114318c86838e613329565b6040805186815273ffffffffffffffffffffffffffffffffffffffff8d8116602083015283169133918f917ff1c69b12e526d2d4145f47d216fa261c6f468d177601c9081a0bcd86a4fa744f910160405180910390a45050600160045550505050505050505050565b600160045411156114d7576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026004819055335f9081526006602052604090209081015473ffffffffffffffffffffffffffffffffffffffff161561156d57600181015460028201546040517f7861264100000000000000000000000000000000000000000000000000000000815260048101879052602481019290925273ffffffffffffffffffffffffffffffffffffffff1660448201526064016107da565b6040517f4236aff8000000000000000000000000000000000000000000000000000000008152600481018490525f90819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634236aff89060240160e060405180830381865afa1580156115fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061161e9190613f55565b9650505050509250505f8473ffffffffffffffffffffffffffffffffffffffff16635829c5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190613db1565b90505f8373ffffffffffffffffffffffffffffffffffffffff1663a0e67e2b6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156116e0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526117259190810190613fec565b905081815114158061177c57503373ffffffffffffffffffffffffffffffffffffffff16815f8151811061175b5761175b613c48565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b156117d9576040517f9e5b6c93000000000000000000000000000000000000000000000000000000008152600481018990526024810188905273ffffffffffffffffffffffffffffffffffffffff851660448201526064016107da565b6040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018890525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636352211e90602401602060405180830381865afa158015611864573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118889190613f22565b905073ffffffffffffffffffffffffffffffffffffffff8116301461194f576040517f42842e0e000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018990527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342842e0e906064015f604051808303815f87803b158015611938575f5ffd5b505af115801561194a573d5f5f3e3d5ffd5b505050505b600184600581111561196357611963614086565b03611979576119748888875f6134d5565b6119ec565b600484600581111561198d5761198d614086565b146119ec5788888560058111156119a6576119a6614086565b6040517fc0c7069a0000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915260ff1660448201526064016107da565b6119f88989878a613329565b6040805189815273ffffffffffffffffffffffffffffffffffffffff898116602083015287169133918c917f2214e1dc25e1fb063be46520c4b1e3bba2c25de96b7de8bdd2b1e35f871200e5910160405180910390a45050600160045550505050505050565b60016004541115611a9b576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026004819055335f90815260066020908152604080832081516080810183528154815260018201549381018490529481015473ffffffffffffffffffffffffffffffffffffffff90811692860192909252600301541660608401529003611b355780516040517fe2e8d5b500000000000000000000000000000000000000000000000000000000815260048101919091526024016107da565b8173ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1603611e5e57606081015160208201516040517ffd0bba8c000000000000000000000000000000000000000000000000000000008152600481019190915260029173ffffffffffffffffffffffffffffffffffffffff169063fd0bba8c90602401602060405180830381865afa158015611be2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0691906140b3565b6002811115611c1757611c17614086565b14611c81578051602082015160408084015190517f786126410000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915273ffffffffffffffffffffffffffffffffffffffff1660448201526064016107da565b606081015160208201516040517f2e17de7800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691632e17de7891611ce09160040190815260200190565b6020604051808303815f875af1158015611cfc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d209190613db1565b50606081015160208201516040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263095ea7b392611dbc9260040173ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b5f604051808303815f87803b158015611dd3575f5ffd5b505af1158015611de5573d5f5f3e3d5ffd5b50505050806060015173ffffffffffffffffffffffffffffffffffffffff1663a694fc3a82602001516040518263ffffffff1660e01b8152600401611e2c91815260200190565b5f604051808303815f87803b158015611e43575f5ffd5b505af1158015611e55573d5f5f3e3d5ffd5b5050505061201c565b611e68815f6125f5565b611e7d816020015183836040015160016134d5565b60208101516040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044015f604051808303815f87803b158015611f12575f5ffd5b505af1158015611f24573d5f5f3e3d5ffd5b50505060208201516040517fa694fc3a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516925063a694fc3a91611f819160040190815260200190565b5f604051808303815f87803b158015611f98575f5ffd5b505af1158015611faa573d5f5f3e3d5ffd5b50505050604081810151335f9081526006602052919091206002810180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff94851617909155600390910180549091169184169190911790555b806040015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16825f01517ff06ec4421dd03d74c0e7bdb75befa828300bb367bc3c48cff47ec4f70715c09a8460200151866040516120a692919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a450506001600455565b60055473ffffffffffffffffffffffffffffffffffffffff16331461212a576005546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016107da565b73ffffffffffffffffffffffffffffffffffffffff8116612177576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b60055473ffffffffffffffffffffffffffffffffffffffff163314612258576005546040517fa43d6ada00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248201526044016107da565b6122638383836136c9565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167ffa039393c44936d4c76bf485d23abcb5891012d5e9b7b69e08dbe2b18cbf108260405160405180910390a4505050565b60055473ffffffffffffffffffffffffffffffffffffffff1615612329576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123348383836136c9565b5050600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905550565b600160045411156123a0576040517f8beb9d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026004819055335f90815260066020908152604080832081516080810183528154815260018201549381018490529481015473ffffffffffffffffffffffffffffffffffffffff9081169286019290925260030154166060840152900361243a5780516040517fe2e8d5b500000000000000000000000000000000000000000000000000000000815260048101919091526024016107da565b604081015173ffffffffffffffffffffffffffffffffffffffff16156124bf578051602082015160408084015190517f9e5b6c930000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915273ffffffffffffffffffffffffffffffffffffffff1660448201526064016107da565b335f81815260066020908152604080832083815560018101939093556002830180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556003909301805490931690925583015190517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201526024810192909252604482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b1580156125a8575f5ffd5b505af11580156125ba573d5f5f3e3d5ffd5b50505050602081015160405133907f2b225f1dbe5660af23047df9a9527651f89ee1eec129fa833186a94f586da856905f90a3506001600455565b606082015160208301516040517f2e17de7800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90921691632e17de78916126549160040190815260200190565b6020604051808303815f875af1158015612670573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126949190613db1565b5060208201516040517f7a828b280000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691637a828b28916127109160040190815260200190565b60408051808303815f875af115801561272b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061274f91906140d1565b6040517f4eb780da00000000000000000000000000000000000000000000000000000000815233600482015290925060019150309073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634eb780da90602401602060405180830381865afa1580156127e0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128049190613f22565b73ffffffffffffffffffffffffffffffffffffffff16036128f85760208401516040517f27de9e320000000000000000000000000000000000000000000000000000000081525f9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916327de9e329161289a9160040190815260200190565b60408051808303815f875af11580156128b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d991906140d1565b91506128e790508184613d4c565b92506128f4600183613d4c565b9150505b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af1158015612988573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ac9190613dc8565b50604051339082905f81818185875af1925050503d805f81146129ea576040519150601f19603f3d011682016040523d82523d5f602084013e6129ef565b606091505b5050508215612afc57335f81815260066020908152604080832083815560018101939093556002830180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556003909301805490931690925586015190517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201526024810192909252604482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064015f604051808303815f87803b158015612ae1575f5ffd5b505af1158015612af3573d5f5f3e3d5ffd5b50505050612b44565b335f9081526006602052604090206002810180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556003909101805490911690555b836040015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16855f01517f102557fcd0cecdd74a9640a69bd331464531d49cf1584a864e6a8bf139b37e0087602001518860600151604051612bd292919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a450505050565b5f5f6060805f8573ffffffffffffffffffffffffffffffffffffffff16635829c5ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c539190613db1565b90505f8673ffffffffffffffffffffffffffffffffffffffff166342cde4e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc39190613db1565b90505f82118015612cd5575060018214155b80612ceb57505f81118015612ceb575060018114155b15612d3a576040517f080ae8fe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526024016107da565b8673ffffffffffffffffffffffffffffffffffffffff166372f702f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612da79190613f22565b95507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612e46576040517f080ae8fe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526024016107da565b60408051600180825281830190925290602080830190803683370190505093507f0000000000000000000000000000000000000000000000000000000000000000845f81518110612e9957612e99613c48565b602002602001019063ffffffff16908163ffffffff16815250508673ffffffffffffffffffffffffffffffffffffffff1663e77cdcc96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612efc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f209190613db1565b604080516001808252818301909252919650816020015b604080518082019091525f8082526020820152815260200190600190039081612f375790505092506040518060400160405280600163ffffffff168152602001866bffffffffffffffffffffffff16815250835f81518110612f9b57612f9b613c48565b602002602001018190525050509193509193565b6040805160018082528183019092525f916020808301908036833701905050905033815f81518110612fe357612fe3613c48565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101525f83613015600180613d4c565b61301f91906140fd565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af11580156130b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130dc9190613dc8565b506040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af115801561318f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b39190613dc8565b506040517f4d5a5827000000000000000000000000000000000000000000000000000000008152600481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634d5a58279060019060240160206040518083038185885af1158015613241573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132669190613dc8565b506040517fd03ca40a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d03ca40a906001906132e090899087908990600401614114565b60206040518083038185885af11580156132fc573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906133219190613dc8565b505050505050565b60408051608081018252858152602080820186815273ffffffffffffffffffffffffffffffffffffffff86811684860190815286821660608601818152335f9081526006909652948790209551865592516001860155516002850180549183167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055925160039094018054948216949093169390931790915591517f095ea7b30000000000000000000000000000000000000000000000000000000081526004810192909252602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044015f604051808303815f87803b15801561343e575f5ffd5b505af1158015613450573d5f5f3e3d5ffd5b50506040517fa694fc3a0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff8416925063a694fc3a91506024015f604051808303815f87803b1580156134b9575f5ffd5b505af11580156134cb573d5f5f3e3d5ffd5b5050505050505050565b5f5f5f5f6134e287612be0565b935093509350935084156135b6577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cbf994f8857f0000000000000000000000000000000000000000000000000000000000000000858560018e6040518763ffffffff1660e01b81526004016135749695949392919061413e565b6020604051808303815f875af1158015613590573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b49190613dc8565b505b6135c1888484612faf565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606089901b1660208201528151808203601401815260348201928390526001547f0d0d57a8000000000000000000000000000000000000000000000000000000009093529173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692630d0d57a89261367d928e929116908690603801613ee5565b6020604051808303815f875af1158015613699573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136bd9190613f22565b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83161580613700575073ffffffffffffffffffffffffffffffffffffffff8216155b8061371f575073ffffffffffffffffffffffffffffffffffffffff8116155b15613756576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805473ffffffffffffffffffffffffffffffffffffffff9485167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600180549385169382169390931790925560028054919093169116179055565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561382d5761382d6137b9565b604052919050565b5f67ffffffffffffffff82111561384e5761384e6137b9565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114613879575f5ffd5b50565b5f82601f83011261388b575f5ffd5b813561389e61389982613835565b6137e6565b8082825260208201915060208360051b8601019250858311156138bf575f5ffd5b602085015b838110156138e55780356138d781613858565b8352602092830192016138c4565b5095945050505050565b8015158114613879575f5ffd5b5f5f6040838503121561390d575f5ffd5b823567ffffffffffffffff811115613923575f5ffd5b61392f8582860161387c565b925050602083013567ffffffffffffffff81111561394b575f5ffd5b8301601f8101851361395b575f5ffd5b803561396961389982613835565b8082825260208201915060208360051b85010192508783111561398a575f5ffd5b6020840193505b828410156139b55783356139a4816138ef565b825260209384019390910190613991565b809450505050509250929050565b5f602082840312156139d3575f5ffd5b81356139de816138ef565b9392505050565b5f5f5f5f5f608086880312156139f9575f5ffd5b8535613a0481613858565b94506020860135613a1481613858565b935060408601359250606086013567ffffffffffffffff811115613a36575f5ffd5b8601601f81018813613a46575f5ffd5b803567ffffffffffffffff811115613a5c575f5ffd5b886020828401011115613a6d575f5ffd5b959894975092955050506020019190565b5f60208284031215613a8e575f5ffd5b81356139de81613858565b5f5f60408385031215613aaa575f5ffd5b823567ffffffffffffffff811115613ac0575f5ffd5b613acc8582860161387c565b925050602083013567ffffffffffffffff811115613ae8575f5ffd5b8301601f81018513613af8575f5ffd5b8035613b0661389982613835565b8082825260208201915060208360051b850101925087831115613b27575f5ffd5b6020840193505b828410156139b5578335825260209384019390910190613b2e565b5f5f60408385031215613b5a575f5ffd5b823591506020830135613b6c81613858565b809150509250929050565b5f5f5f60608486031215613b89575f5ffd5b83359250602084013591506040840135613ba281613858565b809150509250925092565b5f5f5f60608486031215613bbf575f5ffd5b8335613bca81613858565b92506020840135613bda81613858565b91506040840135613ba281613858565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6139de6020830184613bea565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151808452602084019350602083015f5b82811015613cbb57815173ffffffffffffffffffffffffffffffffffffffff16865260209586019590910190600101613c87565b5093949350505050565b604081525f613cd76040830185613c75565b82810360208401528084518083526020830191506020860192505f5b81811015613d135783511515835260209384019390920191600101613cf3565b50909695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115613d5f57613d5f613d1f565b92915050565b604081525f613d776040830185613c75565b82810360208401528084518083526020830191506020860192505f5b81811015613d13578351835260209384019390920191600101613d93565b5f60208284031215613dc1575f5ffd5b5051919050565b5f60208284031215613dd8575f5ffd5b81516139de816138ef565b5f8151808452602084019350602083015f5b82811015613cbb57815163ffffffff16865260209586019590910190600101613df5565b5f8151808452602084019350602083015f5b82811015613cbb578151805163ffffffff1687526020908101516bffffffffffffffffffffffff168188015260409096019590910190600101613e2b565b73ffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8616602082015284604082015260c060608201525f613eb960c0830186613de3565b8281036080840152613ecb8186613e19565b91505063ffffffff831660a0830152979650505050505050565b83815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f613f196060830184613bea565b95945050505050565b5f60208284031215613f32575f5ffd5b81516139de81613858565b805163ffffffff81168114613f50575f5ffd5b919050565b5f5f5f5f5f5f5f60e0888a031215613f6b575f5ffd5b87516bffffffffffffffffffffffff81168114613f86575f5ffd5b6020890151909750613f9781613858565b60408901519096509450613fad60608901613f3d565b9350613fbb60808901613f3d565b9250613fc960a08901613f3d565b915060c088015160068110613fdc575f5ffd5b8091505092959891949750929550565b5f60208284031215613ffc575f5ffd5b815167ffffffffffffffff811115614012575f5ffd5b8201601f81018413614022575f5ffd5b805161403061389982613835565b8082825260208201915060208360051b850101925086831115614051575f5ffd5b6020840193505b8284101561407c57835161406b81613858565b825260209384019390910190614058565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f602082840312156140c3575f5ffd5b8151600381106139de575f5ffd5b5f5f604083850312156140e2575f5ffd5b82516140ed816138ef565b6020939093015192949293505050565b8082028115828204841417613d5f57613d5f613d1f565b838152606060208201525f61412c6060830185613c75565b828103604084015261407c8185613de3565b73ffffffffffffffffffffffffffffffffffffffff8716815285602082015260c060408201525f61417260c0830187613de3565b82810360608401526141848187613e19565b63ffffffff959095166080840152505060a0015294935050505056fea26469706673582212209a1fee3305ec31148e9fefe0237f322c94707b5888edbf2e8e8d12fc7410ea9a64736f6c634300081c003300000000000000000000000063e66d7ad413c01a7b49c7ff4e3bb765c4e4bd1b00000000000000000000000054330d28ca3357f294334bdc454a032e7f3534160000000000000000000000001cee30d08943eb58eff84dd1ab44a6ee6feff63a0000000000000000000000000000000000000000000000000000000000000029d984ec4ebedd513d8132366f2525aa2258eaddb1cf5abdafb0d0fb7dd87ce1a1