0 txs
0 calls
constructor
constructor(address emissionManager)
functions
EMISSION_MANAGER
viewfunction EMISSION_MANAGER() view returns (address)
getAllUserRewards
viewfunction getAllUserRewards(address[] assets, address user) view returns (address[] rewardsList, uint256[] unclaimedAmounts)
getAssetDecimals
viewfunction getAssetDecimals(address asset) view returns (uint8)
getAssetIndex
viewfunction getAssetIndex(address asset, address reward) view returns (uint256, uint256)
getClaimer
viewfunction getClaimer(address user) view returns (address)
getDistributionEnd
viewfunction getDistributionEnd(address asset, address reward) view returns (uint256)
getEmissionManager
viewfunction getEmissionManager() view returns (address)
getRewardOracle
viewfunction getRewardOracle(address reward) view returns (address)
getRewardsByAsset
viewfunction getRewardsByAsset(address asset) view returns (address[])
getRewardsData
viewfunction getRewardsData(address asset, address reward) view returns (uint256, uint256, uint256, uint256)
getRewardsList
viewfunction getRewardsList() view returns (address[])
getTransferStrategy
viewfunction getTransferStrategy(address reward) view returns (address)
getUserAccruedRewards
viewfunction getUserAccruedRewards(address user, address reward) view returns (uint256)
getUserAssetIndex
viewfunction getUserAssetIndex(address user, address asset, address reward) view returns (uint256)
getUserRewards
viewfunction getUserRewards(address[] assets, address user, address reward) view returns (uint256)
REVISION
viewfunction REVISION() view returns (uint256)
temporaryOverrideAdmin
viewfunction temporaryOverrideAdmin() view returns (address)
claimAllRewards
nonpayablefunction claimAllRewards(address[] assets, address to) returns (address[] rewardsList, uint256[] claimedAmounts)
claimAllRewardsOnBehalf
nonpayablefunction claimAllRewardsOnBehalf(address[] assets, address user, address to) returns (address[] rewardsList, uint256[] claimedAmounts)
claimAllRewardsToSelf
nonpayablefunction claimAllRewardsToSelf(address[] assets) returns (address[] rewardsList, uint256[] claimedAmounts)
claimRewards
nonpayablefunction claimRewards(address[] assets, uint256 amount, address to, address reward) returns (uint256)
claimRewardsOnBehalf
nonpayablefunction claimRewardsOnBehalf(address[] assets, uint256 amount, address user, address to, address reward) returns (uint256)
claimRewardsToSelf
nonpayablefunction claimRewardsToSelf(address[] assets, uint256 amount, address reward) returns (uint256)
configureAssets
nonpayablefunction configureAssets(tuple[] config)
handleAction
nonpayablefunction handleAction(address user, uint256 totalSupply, uint256 userBalance)
initialize
nonpayablefunction initialize(address)
setClaimer
nonpayablefunction setClaimer(address user, address caller)
setDistributionEnd
nonpayablefunction setDistributionEnd(address asset, address reward, uint32 newDistributionEnd)
setEmissionPerSecond
nonpayablefunction setEmissionPerSecond(address asset, address[] rewards, uint88[] newEmissionsPerSecond)
setRewardOracle
nonpayablefunction setRewardOracle(address reward, address rewardOracle)
setTransferStrategy
nonpayablefunction setTransferStrategy(address reward, address transferStrategy)
setUserData
nonpayablefunction setUserData(address asset, address reward, address user, uint256 index, uint128 accrued)
events
Accrued
event Accrued(address indexed asset, address indexed reward, address indexed user, uint256 assetIndex, uint256 userIndex, uint256 rewardsAccrued)
AssetConfigUpdated
event AssetConfigUpdated(address indexed asset, address indexed reward, uint256 oldEmission, uint256 newEmission, uint256 oldDistributionEnd, uint256 newDistributionEnd, uint256 assetIndex)
ClaimerSet
event ClaimerSet(address indexed user, address indexed claimer)
RewardOracleUpdated
event RewardOracleUpdated(address indexed reward, address indexed rewardOracle)
RewardsClaimed
event RewardsClaimed(address indexed user, address indexed reward, address indexed to, address claimer, uint256 amount)
TransferStrategyInstalled
event TransferStrategyInstalled(address indexed reward, address indexed transferStrategy)
errors
No errors.
creation bytecode
0x60a060405260006005553480156200001657600080fd5b5060405162004d7a38038062004d7a83398101604081905262000039916200004b565b6001600160a01b03166080526200007d565b6000602082840312156200005e57600080fd5b81516001600160a01b03811681146200007657600080fd5b9392505050565b608051614cb0620000ca600039600081816104d0015281816105fb01528181610df0015281816110e4015281816117c901528181611ad901528181611b820152611c9d0152614cb06000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806392074b081161010f578063c4d66de8116100a2578063dde43cba11610071578063dde43cba1461061d578063e15ac62314610625578063f5cf673b14610638578063f996868b1461064b57600080fd5b8063c4d66de8146105bd578063c5a7b538146105d0578063ca2d94f8146105e3578063cbcbb507146105f657600080fd5b8063b022418c116100de578063b022418c1461057c578063b45ac1a91461058f578063bb492bf514610597578063bf90f63a146105aa57600080fd5b806392074b08146104ce578063955c2ad7146104f45780639efd6f72146105075780639ff55db91461056957600080fd5b806357b898831161018757806374d945ec1161015657806374d945ec1461037a5780637eff4ba8146103b3578063886fe70b146104865780639085c503146104ae57600080fd5b806357b89883146102fb5780635f130b241461030e5780636657732f1461034757806370674ab91461036757600080fd5b806333028b99116101c357806333028b99146102a15780634c0369c3146102b4578063533f542a146102d55780635453ba10146102e857600080fd5b80631b839c77146101f5578063236300dc1461021b5780632a17bf601461022e57806331873e2e1461028c575b600080fd5b6102086102033660046141eb565b61065e565b6040519081526020015b60405180910390f35b610208610229366004614269565b6106be565b61026761023c3660046142dd565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603b60205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610212565b61029f61029a366004614301565b61075b565b005b6102086102af366004614336565b61076c565b6102c76102c23660046143bb565b610918565b604051610212929190614463565b6102086102e33660046144ba565b610c68565b61029f6102f63660046141eb565b610dd8565b6102086103093660046144fa565b610e85565b61026761031c3660046142dd565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603a60205260409020541690565b61035a6103553660046142dd565b610e9f565b6040516102129190614559565b61020861037536600461456c565b610ff1565b6102676103883660046142dd565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603960205260409020541690565b6104666103c13660046141eb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152206002810154905490916affffffffffffffffffffff6d01000000000000000000000000008304169163ffffffff780100000000000000000000000000000000000000000000000082048116927c01000000000000000000000000000000000000000000000000000000009092041690565b604080519485526020850193909352918301526060820152608001610212565b6104996104943660046141eb565b611008565b60408051928352602083019190915201610212565b603c546102679073ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000000000000000000000000000000000000000000000610267565b61029f6105023660046146a4565b6110cc565b6105576105153660046142dd565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902060020154700100000000000000000000000000000000900460ff1690565b60405160ff9091168152602001610212565b6102c761057736600461456c565b6112cc565b61020861058a3660046141eb565b61147b565b61035a611534565b6102c76105a53660046143bb565b6115a3565b6102c76105b83660046147d2565b61163c565b61029f6105cb3660046142dd565b611657565b61029f6105de366004614808565b6117b1565b61029f6105f136600461484f565b611956565b6102677f000000000000000000000000000000000000000000000000000000000000000081565b610208600381565b61029f6106333660046141eb565b611ac1565b61029f6106463660046141eb565b611b6a565b61029f6106593660046148be565b611c85565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600160209081526040808320938516835292905220547c0100000000000000000000000000000000000000000000000000000000900463ffffffff165b92915050565b600073ffffffffffffffffffffffffffffffffffffffff8316610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f41444452455353000000000000000000000000000060448201526064015b60405180910390fd5b610751868686333388886120ee565b9695505050505050565b61076733848385612385565b505050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260396020526040812054909133918691168214610802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f434c41494d45525f554e415554484f52495a45440000000000000000000000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff861661087f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f555345525f414444524553530000000000000000000000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff85166108fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f4144445245535300000000000000000000000000006044820152606401610739565b61090b898989338a8a8a6120ee565b9998505050505050505050565b606080600061092886868661253c565b60035490915067ffffffffffffffff811115610946576109466145c9565b60405190808252806020026020018201604052801561096f578160200160208202803683370190505b509250825167ffffffffffffffff81111561098c5761098c6145c9565b6040519080825280602002602001820160405280156109b5578160200160208202803683370190505b50915060005b8151811015610c5e5760005b8451811015610c4b57600381815481106109e3576109e3614941565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858281518110610a2057610a20614941565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060016000848481518110610a7057610a70614941565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868381518110610acd57610acd614941565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600d9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16848281518110610b9357610b93614941565b60200260200101818151610ba7919061499f565b9052508251839083908110610bbe57610bbe614941565b60200260200101516020015160000315610c3957610c0f86868381518110610be857610be8614941565b6020026020010151858581518110610c0257610c02614941565b602002602001015161273a565b848281518110610c2157610c21614941565b60200260200101818151610c35919061499f565b9052505b80610c43816149b2565b9150506109c7565b5080610c56816149b2565b9150506109bb565b5050935093915050565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260016020818152604080842086861685528252808420948816845293820190529181209091015480158015610d07575073ffffffffffffffffffffffffffffffffffffffff808516600090815260016020818152604080842088861685528252808420948a16845293909101905220546cffffffffffffffffffffffffff1615155b15610dd05773ffffffffffffffffffffffffffffffffffffffff8416600090815260016020526040812060020154610d5790700100000000000000000000000000000000900460ff16600a614b0a565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526001602081815260408084208a861685528252808420948c16845293909101905220549091508190610dc2906b033b2e3c9fd0803ce8000000906cffffffffffffffffffffffffff16614b19565b610dcc9190614b30565b9150505b949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e4147455200000000000000000000006044820152606401610739565b610e8182826128b8565b5050565b6000610e96858585333333886120ee565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120600201546060916fffffffffffffffffffffffffffffffff909116908167ffffffffffffffff811115610ef957610ef96145c9565b604051908082528060200260200182016040528015610f22578160200160208202803683370190505b50905060005b826fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff161015610fe95773ffffffffffffffffffffffffffffffffffffffff80861660009081526001602081815260408084206fffffffffffffffffffffffffffffffff871680865293019091529091205484519216918491908110610fb257610fb2614941565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015280610fe181614b6b565b915050610f28565b509392505050565b6000610e96838361100388888861253c565b612a0c565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600160209081526040808320948616835293815283822084517fb1bf962d00000000000000000000000000000000000000000000000000000000815294519294859491936110bf9385939263b1bf962d92600480830193928290030181865afa158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba9190614b9a565b612baa565b92509250505b9250929050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461116b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e4147455200000000000000000000006044820152606401610739565b60005b81518110156112bf5781818151811061118957611189614941565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112039190614b9a565b82828151811061121557611215614941565b6020026020010151602001818152505061126982828151811061123a5761123a614941565b60200260200101516080015183838151811061125857611258614941565b602002602001015160a00151612cb5565b6112ad82828151811061127e5761127e614941565b60200260200101516080015183838151811061129c5761129c614941565b602002602001015160c001516128b8565b806112b7816149b2565b91505061116e565b506112c981612e1b565b50565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260396020526040902054606091829133918691168214611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f434c41494d45525f554e415554484f52495a45440000000000000000000000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff86166113e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f555345525f414444524553530000000000000000000000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff851661145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f4144445245535300000000000000000000000000006044820152606401610739565b61146c88883389896136cc565b93509350505094509492505050565b60008060005b600454811015610fe95760016000600483815481106114a2576114a2614941565b60009182526020808320919091015473ffffffffffffffffffffffffffffffffffffffff908116845283820194909452604092830182208885168352815282822093891682526001909301909252902054611520906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff168361499f565b91508061152c816149b2565b915050611481565b6060600380548060200260200160405190810160405280929190818152602001828054801561159957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161156e575b5050505050905090565b60608073ffffffffffffffffffffffffffffffffffffffff8316611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f4144445245535300000000000000000000000000006044820152606401610739565b61163085853333876136cc565b91509150935093915050565b60608061164c84843333336136cc565b915091509250929050565b60065460039060ff168061166a5750303b155b80611676575060055481115b611702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a65640000000000000000000000000000000000006064820152608401610739565b60065460ff1615801561174057600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560058290555b603c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673a1b5f2cc9b407177cd8a4acf1699fa0b99955a22179055801561076757600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e4147455200000000000000000000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff838116600081815260016020908152604080832094871680845294825291829020805463ffffffff8781167c01000000000000000000000000000000000000000000000000000000008181027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff85161780865560029095015487516affffffffffffffffffffff6d010000000000000000000000000090970496909616808752968601969096529092041693820184905260608201526080810191909152909291907fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc59060a00160405180910390a350505050565b603c5473ffffffffffffffffffffffffffffffffffffffff1633146119d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4f4e4c595f54454d504f524152595f4f564552524944455f41444d494e0000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff85811660008181526001602081815260408084208a8716808652908352818520968a1680865287850184529482902093840189905583547fffffff00000000000000000000000000000000ffffffffffffffffffffffffff166d01000000000000000000000000006fffffffffffffffffffffffffffffffff8a16908102919091179094556002870154825190815292830189905290820192909252919290917f3303facd24627943a92e9dc87cfbb34b15c49b726eec3ad3487c16be9ab8efe89060600160405180910390a4505050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611b60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e4147455200000000000000000000006044820152606401610739565b610e818282612cb5565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611c09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e4147455200000000000000000000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526039602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f4925eafc82d0c4d67889898eeed64b18488ab19811e61620f387026dec126a289190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611d24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e4147455200000000000000000000006044820152606401610739565b828114611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f494e505554000000000000000000000000000000000000006044820152606401610739565b60005b838110156120e65773ffffffffffffffffffffffffffffffffffffffff86166000908152600160205260408120908181888886818110611dd257611dd2614941565b9050602002016020810190611de791906142dd565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000206002830154909150700100000000000000000000000000000000900460ff168015801590611e5d575081547801000000000000000000000000000000000000000000000000900463ffffffff1615155b611ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f444953545249425554494f4e5f444f45535f4e4f545f455849535400000000006044820152606401610739565b6000611f3d838b73ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f389190614b9a565b613bb3565b5083549091506d010000000000000000000000000090046affffffffffffffffffffff16878787818110611f7357611f73614941565b9050602002016020810190611f889190614bb3565b84546affffffffffffffffffffff919091166d0100000000000000000000000000027fffffffffffffffff0000000000000000000000ffffffffffffffffffffffffff909116178455898987818110611fe357611fe3614941565b9050602002016020810190611ff891906142dd565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc5838b8b8b81811061205957612059614941565b905060200201602081019061206e9190614bb3565b8854604080519384526affffffffffffffffffffff90921660208401527c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690820181905260608201526080810186905260a00160405180910390a3505050505080806120de906149b2565b915050611d90565b505050505050565b6000856000036121005750600061237a565b6000612116856121118b8b8961253c565b613c98565b60005b888110156122fd5760008a8a8381811061213557612135614941565b905060200201602081019061214a91906142dd565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602081815260408084208b861685528252808420948d16845293909101905220549091506121ba906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff168461499f565b925088831161222d5773ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208a861685528252808420948c1684529390910190522080547fffffff00000000000000000000000000000000ffffffffffffffffffffffffff1690556122ea565b60006122398a85614bce565b90506122458185614bce565b935061225081613d19565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526001602081815260408084208b881685528252808420968d1684529590910190529290922080546fffffffffffffffffffffffffffffffff939093166d0100000000000000000000000000027fffffff00000000000000000000000000000000ffffffffffffffffffffffffff90931692909217909155506122fd565b50806122f5816149b2565b915050612119565b508060000361231057600091505061237a565b61231b848483613dbf565b6040805173ffffffffffffffffffffffffffffffffffffffff8881168252602082018490528087169286821692918916917fc052130bc4ef84580db505783484b067ea8b71b3bca78a7e12db7aea8658f004910160405180910390a490505b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081206002015460ff700100000000000000000000000000000000820416600a0a916fffffffffffffffffffffffffffffffff909116908190036123ec575050612536565b60005b81816fffffffffffffffffffffffffffffffff1610156125325773ffffffffffffffffffffffffffffffffffffffff80881660009081526001602081815260408084206fffffffffffffffffffffffffffffffff8716855292830182528084205490941680845291905291812090806124688389613bb3565b9150915060008061247c858d8d878d613eeb565b9150915082806124895750805b15612520578b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f3303facd24627943a92e9dc87cfbb34b15c49b726eec3ad3487c16be9ab8efe8878887604051612517939291909283526020830191909152604082015260600190565b60405180910390a45b5050600190940193506123ef92505050565b5050505b50505050565b60608267ffffffffffffffff811115612557576125576145c9565b6040519080825280602002602001820160405280156125c257816020015b6125af6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b8152602001906001900390816125755790505b50905060005b83811015610fe9578484828181106125e2576125e2614941565b90506020020160208101906125f791906142dd565b82828151811061260957612609614941565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff909116905284848281811061264057612640614941565b905060200201602081019061265591906142dd565b6040517f0afbcdc900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529190911690630afbcdc9906024016040805180830381865afa1580156126c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e69190614be1565b8383815181106126f8576126f8614941565b602002602001015160200184848151811061271557612715614941565b6020908102919091010151604001919091525280612732816149b2565b9150506125c8565b805173ffffffffffffffffffffffffffffffffffffffff90811660009081526001602090815260408083209386168352929052818120918301519091908290612784908390612baa565b73ffffffffffffffffffffffffffffffffffffffff881660009081526001808601602052604090912001549092509050801580156127f7575073ffffffffffffffffffffffffffffffffffffffff871660009081526001840160205260409020546cffffffffffffffffffffffffff1615155b156128a957845173ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604081206002015461284890700100000000000000000000000000000000900460ff16600a614b0a565b73ffffffffffffffffffffffffffffffffffffffff89166000908152600186016020526040902054909150819061289b906b033b2e3c9fd0803ce8000000906cffffffffffffffffffffffffff16614b19565b6128a59190614b30565b9150505b61237a85602001518383614104565b60008173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129299190614b9a565b13612990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f5241434c455f4d5553545f52455455524e5f505249434500000000000000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603b602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f1a1cd5483e52e60b9ff7f3b9d1db3bbd9e9d21c6324ad3a8c79dba9b75e62f4d9190a35050565b6000805b8251811015610fe957828181518110612a2b57612a2b614941565b602002602001015160200151600003612ad95760016000848381518110612a5457612a54614941565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff9081168352828201939093526040918201600090812088851682528252828120938916815260019093019052902054612ad2906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff168361499f565b9150612b98565b60016000848381518110612aef57612aef614941565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff908116835282820193909352604091820160009081208885168252825282812093891681526001909301905290205483516d01000000000000000000000000009091046fffffffffffffffffffffffffffffffff1690612b819087908790879086908110610c0257610c02614941565b612b8b919061499f565b612b95908361499f565b91505b80612ba2816149b2565b915050612a10565b60028201548254600091829163ffffffff7c010000000000000000000000000000000000000000000000000000000082048116916affffffffffffffffffffff6d010000000000000000000000000082041691780100000000000000000000000000000000000000000000000090910416811580612c26575086155b80612c3057504281145b80612c3b5750828110155b15612c4f57838495509550505050506110c5565b6000834211612c5e5742612c60565b835b90506000612c6e8383614bce565b905060006b033b2e3c9fd0803ce8000000612c898387614b19565b612c939190614b19565b8a9004905086612ca3818361499f565b98509850505050505050509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116612d32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53545241544547595f43414e5f4e4f545f42455f5a45524f00000000000000006044820152606401610739565b6001813b151514612d9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53545241544547595f4d5553545f42455f434f4e5452414354000000000000006044820152606401610739565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603a602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f8ca1d928f1d72493a6b78c4f74aabde976bc37ffe2570f2a1ce5a8abd3dde0aa9190a35050565b60005b8151811015610e815760016000838381518110612e3d57612e3d614941565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160109054906101000a900460ff1660ff16600003612f17576004828281518110612eb257612eb2614941565b6020908102919091018101516060015182546001810184556000938452919092200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b818181518110612f2957612f29614941565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa39190614c05565b60016000848481518110612fb957612fb9614941565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160106101000a81548160ff021916908360ff16021790555060006001600084848151811061303257613032614941565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084848151811061308f5761308f614941565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160189054906101000a900463ffffffff1663ffffffff166000036133095782828151811061310b5761310b614941565b6020026020010151608001516001600085858151811061312d5761312d614941565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006001600087878151811061318e5761318e614941565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600084848151811061327a5761327a614941565b6020908102919091018101516060015173ffffffffffffffffffffffffffffffffffffffff168252810191909152604001600090812060020180546fffffffffffffffffffffffffffffffff16916132d183614b6b565b91906101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b6002600084848151811061331f5761331f614941565b6020908102919091018101516080015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160009081205460ff161515900361344f5760016002600085858151811061337957613379614941565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060038383815181106133ea576133ea614941565b6020908102919091018101516080015182546001810184556000938452919092200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b60006134788285858151811061346757613467614941565b602002602001015160200151613bb3565b50825485519192506d010000000000000000000000000081046affffffffffffffffffffff16917c010000000000000000000000000000000000000000000000000000000090910463ffffffff16908690869081106134d9576134d9614941565b60209081029190910101515184546affffffffffffffffffffff9091166d0100000000000000000000000000027fffffffffffffffff0000000000000000000000ffffffffffffffffffffffffff909116178455855186908690811061354157613541614941565b602090810291909101015160400151845463ffffffff9091167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617845585518690869081106135b0576135b0614941565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff168686815181106135e4576135e4614941565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff167fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc58489898151811061363a5761363a614941565b602002602001015160000151858b8b8151811061365957613659614941565b602002602001015160400151896040516136ad9594939291906affffffffffffffffffffff958616815293909416602084015263ffffffff9182166040840152166060820152608081019190915260a00190565b60405180910390a35050505080806136c4906149b2565b915050612e1e565b60035460609081908067ffffffffffffffff8111156136ed576136ed6145c9565b604051908082528060200260200182016040528015613716578160200160208202803683370190505b5092508067ffffffffffffffff811115613732576137326145c9565b60405190808252806020026020018201604052801561375b578160200160208202803683370190505b50915061376d856121118a8a8961253c565b60005b87811015613a7b57600089898381811061378c5761378c614941565b90506020020160208101906137a191906142dd565b905060005b83811015613a6657600073ffffffffffffffffffffffffffffffffffffffff168682815181106137d8576137d8614941565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603613886576003818154811061380e5761380e614941565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686828151811061384b5761384b614941565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120875182908990859081106138c1576138c1614941565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff90811683528282019390935260409182016000908120938d168152600190930190529020546d010000000000000000000000000090046fffffffffffffffffffffffffffffffff1690508015613a53578086838151811061394557613945614941565b60200260200101818151613959919061499f565b90525073ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120885182908a908690811061399757613997614941565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600d6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b5080613a5e816149b2565b9150506137a6565b50508080613a73906149b2565b915050613770565b5060005b81811015613ba757613ac485858381518110613a9d57613a9d614941565b6020026020010151858481518110613ab757613ab7614941565b6020026020010151613dbf565b8473ffffffffffffffffffffffffffffffffffffffff16848281518110613aed57613aed614941565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fc052130bc4ef84580db505783484b067ea8b71b3bca78a7e12db7aea8658f0048a878681518110613b5657613b56614941565b6020026020010151604051613b8d92919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a480613b9f816149b2565b915050613a7f565b50509550959350505050565b600080600080613bc38686612baa565b915091506000828214613c355750600286018190556001613be342614133565b875463ffffffff919091167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff909116178755613c8c565b613c3e42614133565b875463ffffffff919091167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9091161787555b90969095509350505050565b60005b815181101561076757613d07828281518110613cb957613cb9614941565b60200260200101516000015184848481518110613cd857613cd8614941565b602002602001015160200151858581518110613cf657613cf6614941565b602002602001015160400151612385565b80613d11816149b2565b915050613c9b565b60006fffffffffffffffffffffffffffffffff821115613dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610739565b5090565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603a60205260408082205490517f16beb9820000000000000000000000000000000000000000000000000000000081528785166004820152602481019390935260448301859052909216919082906316beb982906064016020604051808303816000875af1158015613e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e769190614c28565b9050600181151514613ee4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5452414e534645525f4552524f520000000000000000000000000000000000006044820152606401610739565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001808701602052604082200154819080158015613f5a575073ffffffffffffffffffffffffffffffffffffffff871660009081526001890160205260409020546cffffffffffffffffffffffffff1615155b1561400f5773ffffffffffffffffffffffffffffffffffffffff871660009081526001890160205260409020548490613faf906b033b2e3c9fd0803ce8000000906cffffffffffffffffffffffffff16614b19565b613fb99190614b30565b73ffffffffffffffffffffffffffffffffffffffff881660009081526001808b01602052604090912080547fffffffffffffffffffffffffffffffffffffff000000000000000000000000001681550181905590505b60008186148015906140f55773ffffffffffffffffffffffffffffffffffffffff891660009081526001808c0160205260409091200187905587156140f557614059888885614104565b915061406482613d19565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260018c01602052604090208054600d906140be9084906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16614c4a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b90999098509650505050505050565b6000806141118385614bce565b61411b9086614b19565b6b033b2e3c9fd0803ce8000000900495945050505050565b600063ffffffff821115613dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610739565b73ffffffffffffffffffffffffffffffffffffffff811681146112c957600080fd5b600080604083850312156141fe57600080fd5b8235614209816141c9565b91506020830135614219816141c9565b809150509250929050565b60008083601f84011261423657600080fd5b50813567ffffffffffffffff81111561424e57600080fd5b6020830191508360208260051b85010111156110c557600080fd5b60008060008060006080868803121561428157600080fd5b853567ffffffffffffffff81111561429857600080fd5b6142a488828901614224565b9096509450506020860135925060408601356142bf816141c9565b915060608601356142cf816141c9565b809150509295509295909350565b6000602082840312156142ef57600080fd5b81356142fa816141c9565b9392505050565b60008060006060848603121561431657600080fd5b8335614321816141c9565b95602085013595506040909401359392505050565b60008060008060008060a0878903121561434f57600080fd5b863567ffffffffffffffff81111561436657600080fd5b61437289828a01614224565b90975095505060208701359350604087013561438d816141c9565b9250606087013561439d816141c9565b915060808701356143ad816141c9565b809150509295509295509295565b6000806000604084860312156143d057600080fd5b833567ffffffffffffffff8111156143e757600080fd5b6143f386828701614224565b9094509250506020840135614407816141c9565b809150509250925092565b600081518084526020808501945080840160005b8381101561445857815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614426565b509495945050505050565b6040815260006144766040830185614412565b82810360208481019190915284518083528582019282019060005b818110156144ad57845183529383019391830191600101614491565b5090979650505050505050565b6000806000606084860312156144cf57600080fd5b83356144da816141c9565b925060208401356144ea816141c9565b91506040840135614407816141c9565b6000806000806060858703121561451057600080fd5b843567ffffffffffffffff81111561452757600080fd5b61453387828801614224565b90955093505060208501359150604085013561454e816141c9565b939692955090935050565b6020815260006142fa6020830184614412565b6000806000806060858703121561458257600080fd5b843567ffffffffffffffff81111561459957600080fd5b6145a587828801614224565b90955093505060208501356145b9816141c9565b9150604085013561454e816141c9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561461b5761461b6145c9565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614668576146686145c9565b604052919050565b80356affffffffffffffffffffff8116811461468b57600080fd5b919050565b803563ffffffff8116811461468b57600080fd5b600060208083850312156146b757600080fd5b823567ffffffffffffffff808211156146cf57600080fd5b818501915085601f8301126146e357600080fd5b8135818111156146f5576146f56145c9565b614703848260051b01614621565b818152848101925060e091820284018501918883111561472257600080fd5b938501935b828510156147c65780858a03121561473f5760008081fd5b6147476145f8565b61475086614670565b815286860135878201526040614767818801614690565b9082015260608681013561477a816141c9565b9082015260808681013561478d816141c9565b9082015260a0868101356147a0816141c9565b9082015260c0868101356147b3816141c9565b9082015284529384019392850192614727565b50979650505050505050565b600080602083850312156147e557600080fd5b823567ffffffffffffffff8111156147fc57600080fd5b613c8c85828601614224565b60008060006060848603121561481d57600080fd5b8335614828816141c9565b92506020840135614838816141c9565b915061484660408501614690565b90509250925092565b600080600080600060a0868803121561486757600080fd5b8535614872816141c9565b94506020860135614882816141c9565b93506040860135614892816141c9565b92506060860135915060808601356fffffffffffffffffffffffffffffffff811681146142cf57600080fd5b6000806000806000606086880312156148d657600080fd5b85356148e1816141c9565b9450602086013567ffffffffffffffff808211156148fe57600080fd5b61490a89838a01614224565b9096509450604088013591508082111561492357600080fd5b5061493088828901614224565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156106b8576106b8614970565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149e3576149e3614970565b5060010190565b600181815b80851115614a4357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614a2957614a29614970565b80851615614a3657918102915b93841c93908002906149ef565b509250929050565b600082614a5a575060016106b8565b81614a67575060006106b8565b8160018114614a7d5760028114614a8757614aa3565b60019150506106b8565b60ff841115614a9857614a98614970565b50506001821b6106b8565b5060208310610133831016604e8410600b8410161715614ac6575081810a6106b8565b614ad083836149ea565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614b0257614b02614970565b029392505050565b60006142fa60ff841683614a4b565b80820281158282048414176106b8576106b8614970565b600082614b66577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006fffffffffffffffffffffffffffffffff808316818103614b9057614b90614970565b6001019392505050565b600060208284031215614bac57600080fd5b5051919050565b600060208284031215614bc557600080fd5b6142fa82614670565b818103818111156106b8576106b8614970565b60008060408385031215614bf457600080fd5b505080516020909101519092909150565b600060208284031215614c1757600080fd5b815160ff811681146142fa57600080fd5b600060208284031215614c3a57600080fd5b815180151581146142fa57600080fd5b6fffffffffffffffffffffffffffffffff818116838216019080821115614c7357614c73614970565b509291505056fea2646970667358221220aa74be29a67492a844dd5846f4b36fbcaa6ce4b825496bc280ea1d9f1ae0392464736f6c634300081500330000000000000000000000006e081f9ebb2b2f07c2f771074ebb32ddac141d14