0 txs
35.3k 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)
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)
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
0x60a060405260006005553480156200001657600080fd5b5060405162004cff38038062004cff83398101604081905262000039916200004b565b6001600160a01b03166080526200007d565b6000602082840312156200005e57600080fd5b81516001600160a01b03811681146200007657600080fd5b9392505050565b608051614c35620000ca6000396000818161049a015281816105b201528181610da70152818161109b0152818161174a015281816118ef015281816119980152611ab30152614c356000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806392074b0811610104578063bf90f63a116100a2578063dde43cba11610071578063dde43cba146105d4578063e15ac623146105dc578063f5cf673b146105ef578063f996868b1461060257600080fd5b8063bf90f63a14610574578063c4d66de814610587578063c5a7b5381461059a578063cbcbb507146105ad57600080fd5b80639ff55db9116100de5780639ff55db914610533578063b022418c14610546578063b45ac1a914610559578063bb492bf51461056157600080fd5b806392074b0814610498578063955c2ad7146104be5780639efd6f72146104d157600080fd5b80635453ba101161017c57806370674ab91161014b57806370674ab91461035157806374d945ec146103645780637eff4ba81461039d578063886fe70b1461047057600080fd5b80635453ba10146102d257806357b89883146102e55780635f130b24146102f85780636657732f1461033157600080fd5b806331873e2e116101b857806331873e2e1461027657806333028b991461028b5780634c0369c31461029e578063533f542a146102bf57600080fd5b80631b839c77146101df578063236300dc146102055780632a17bf6014610218575b600080fd5b6101f26101ed3660046141df565b610615565b6040519081526020015b60405180910390f35b6101f261021336600461425d565b610675565b6102516102263660046142d1565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603b60205260409020541690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fc565b6102896102843660046142f5565b610712565b005b6101f261029936600461432a565b610723565b6102b16102ac3660046143af565b6108cf565b6040516101fc929190614457565b6101f26102cd3660046144ae565b610c1f565b6102896102e03660046141df565b610d8f565b6101f26102f33660046144ee565b610e3c565b6102516103063660046142d1565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603a60205260409020541690565b61034461033f3660046142d1565b610e56565b6040516101fc919061454d565b6101f261035f366004614560565b610fa8565b6102516103723660046142d1565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152603960205260409020541690565b6104506103ab3660046141df565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152206002810154905490916affffffffffffffffffffff6d01000000000000000000000000008304169163ffffffff780100000000000000000000000000000000000000000000000082048116927c01000000000000000000000000000000000000000000000000000000009092041690565b6040805194855260208501939093529183015260608201526080016101fc565b61048361047e3660046141df565b610fbf565b604080519283526020830191909152016101fc565b7f0000000000000000000000000000000000000000000000000000000000000000610251565b6102896104cc366004614698565b611083565b6105216104df3660046142d1565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902060020154700100000000000000000000000000000000900460ff1690565b60405160ff90911681526020016101fc565b6102b1610541366004614560565b611283565b6101f26105543660046141df565b611432565b6103446114eb565b6102b161056f3660046143af565b61155a565b6102b16105823660046147c6565b6115f3565b6102896105953660046142d1565b61160e565b6102896105a83660046147fc565b611732565b6102517f000000000000000000000000000000000000000000000000000000000000000081565b6101f2600281565b6102896105ea3660046141df565b6118d7565b6102896105fd3660046141df565b611980565b610289610610366004614843565b611a9b565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600160209081526040808320938516835292905220547c0100000000000000000000000000000000000000000000000000000000900463ffffffff165b92915050565b600073ffffffffffffffffffffffffffffffffffffffff83166106f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f41444452455353000000000000000000000000000060448201526064015b60405180910390fd5b61070886868633338888611f04565b9695505050505050565b61071e3384838561219b565b505050565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152603960205260408120549091339186911682146107b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f434c41494d45525f554e415554484f52495a454400000000000000000000000060448201526064016106f0565b73ffffffffffffffffffffffffffffffffffffffff8616610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f555345525f4144445245535300000000000000000000000060448201526064016106f0565b73ffffffffffffffffffffffffffffffffffffffff85166108b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f41444452455353000000000000000000000000000060448201526064016106f0565b6108c2898989338a8a8a611f04565b9998505050505050505050565b60608060006108df868686612352565b60035490915067ffffffffffffffff8111156108fd576108fd6145bd565b604051908082528060200260200182016040528015610926578160200160208202803683370190505b509250825167ffffffffffffffff811115610943576109436145bd565b60405190808252806020026020018201604052801561096c578160200160208202803683370190505b50915060005b8151811015610c155760005b8451811015610c02576003818154811061099a5761099a6148c6565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168582815181106109d7576109d76148c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060016000848481518110610a2757610a276148c6565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000868381518110610a8457610a846148c6565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600d9054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16848281518110610b4a57610b4a6148c6565b60200260200101818151610b5e9190614924565b9052508251839083908110610b7557610b756148c6565b60200260200101516020015160000315610bf057610bc686868381518110610b9f57610b9f6148c6565b6020026020010151858581518110610bb957610bb96148c6565b6020026020010151612550565b848281518110610bd857610bd86148c6565b60200260200101818151610bec9190614924565b9052505b80610bfa81614937565b91505061097e565b5080610c0d81614937565b915050610972565b5050935093915050565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260016020818152604080842086861685528252808420948816845293820190529181209091015480158015610cbe575073ffffffffffffffffffffffffffffffffffffffff808516600090815260016020818152604080842088861685528252808420948a16845293909101905220546cffffffffffffffffffffffffff1615155b15610d875773ffffffffffffffffffffffffffffffffffffffff8416600090815260016020526040812060020154610d0e90700100000000000000000000000000000000900460ff16600a614a8f565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526001602081815260408084208a861685528252808420948c16845293909101905220549091508190610d79906b033b2e3c9fd0803ce8000000906cffffffffffffffffffffffffff16614a9e565b610d839190614ab5565b9150505b949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e41474552000000000000000000000060448201526064016106f0565b610e3882826126ce565b5050565b6000610e4d85858533333388611f04565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120600201546060916fffffffffffffffffffffffffffffffff909116908167ffffffffffffffff811115610eb057610eb06145bd565b604051908082528060200260200182016040528015610ed9578160200160208202803683370190505b50905060005b826fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff161015610fa05773ffffffffffffffffffffffffffffffffffffffff80861660009081526001602081815260408084206fffffffffffffffffffffffffffffffff871680865293019091529091205484519216918491908110610f6957610f696148c6565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015280610f9881614af0565b915050610edf565b509392505050565b6000610e4d8383610fba888888612352565b612822565b73ffffffffffffffffffffffffffffffffffffffff8083166000818152600160209081526040808320948616835293815283822084517fb1bf962d00000000000000000000000000000000000000000000000000000000815294519294859491936110769385939263b1bf962d92600480830193928290030181865afa15801561104d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110719190614b1f565b6129c0565b92509250505b9250929050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e41474552000000000000000000000060448201526064016106f0565b60005b815181101561127657818181518110611140576111406148c6565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ba9190614b1f565b8282815181106111cc576111cc6148c6565b602002602001015160200181815250506112208282815181106111f1576111f16148c6565b60200260200101516080015183838151811061120f5761120f6148c6565b602002602001015160a00151612acb565b611264828281518110611235576112356148c6565b602002602001015160800151838381518110611253576112536148c6565b602002602001015160c001516126ce565b8061126e81614937565b915050611125565b5061128081612c31565b50565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526039602052604090205460609182913391869116821461131c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f434c41494d45525f554e415554484f52495a454400000000000000000000000060448201526064016106f0565b73ffffffffffffffffffffffffffffffffffffffff8616611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f494e56414c49445f555345525f4144445245535300000000000000000000000060448201526064016106f0565b73ffffffffffffffffffffffffffffffffffffffff8516611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f41444452455353000000000000000000000000000060448201526064016106f0565b61142388883389896134e2565b93509350505094509492505050565b60008060005b600454811015610fa0576001600060048381548110611459576114596148c6565b60009182526020808320919091015473ffffffffffffffffffffffffffffffffffffffff9081168452838201949094526040928301822088851683528152828220938916825260019093019092529020546114d7906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff1683614924565b9150806114e381614937565b915050611438565b6060600380548060200260200160405190810160405280929190818152602001828054801561155057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611525575b5050505050905090565b60608073ffffffffffffffffffffffffffffffffffffffff83166115da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f544f5f41444452455353000000000000000000000000000060448201526064016106f0565b6115e785853333876134e2565b91509150935093915050565b60608061160384843333336134e2565b915091509250929050565b60065460029060ff16806116215750303b155b8061162d575060055481115b6116b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560448201527f656e20696e697469616c697a656400000000000000000000000000000000000060648201526084016106f0565b60065460ff161580156116f757600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560058290555b6116ff6139c9565b801561071e57600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146117d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e41474552000000000000000000000060448201526064016106f0565b73ffffffffffffffffffffffffffffffffffffffff838116600081815260016020908152604080832094871680845294825291829020805463ffffffff8781167c01000000000000000000000000000000000000000000000000000000008181027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff85161780865560029095015487516affffffffffffffffffffff6d010000000000000000000000000090970496909616808752968601969096529092041693820184905260608201526080810191909152909291907fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc59060a00160405180910390a350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e41474552000000000000000000000060448201526064016106f0565b610e388282612acb565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e41474552000000000000000000000060448201526064016106f0565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526039602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f4925eafc82d0c4d67889898eeed64b18488ab19811e61620f387026dec126a289190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611b3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f4e4c595f454d495353494f4e5f4d414e41474552000000000000000000000060448201526064016106f0565b828114611ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f494e5055540000000000000000000000000000000000000060448201526064016106f0565b60005b83811015611efc5773ffffffffffffffffffffffffffffffffffffffff86166000908152600160205260408120908181888886818110611be857611be86148c6565b9050602002016020810190611bfd91906142d1565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000206002830154909150700100000000000000000000000000000000900460ff168015801590611c73575081547801000000000000000000000000000000000000000000000000900463ffffffff1615155b611cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f444953545249425554494f4e5f444f45535f4e4f545f4558495354000000000060448201526064016106f0565b6000611d53838b73ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e9190614b1f565b613bad565b5083549091506d010000000000000000000000000090046affffffffffffffffffffff16878787818110611d8957611d896148c6565b9050602002016020810190611d9e9190614b38565b84546affffffffffffffffffffff919091166d0100000000000000000000000000027fffffffffffffffff0000000000000000000000ffffffffffffffffffffffffff909116178455898987818110611df957611df96148c6565b9050602002016020810190611e0e91906142d1565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc5838b8b8b818110611e6f57611e6f6148c6565b9050602002016020810190611e849190614b38565b8854604080519384526affffffffffffffffffffff90921660208401527c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690820181905260608201526080810186905260a00160405180910390a350505050508080611ef490614937565b915050611ba6565b505050505050565b600085600003611f1657506000612190565b6000611f2c85611f278b8b89612352565b613c92565b60005b888110156121135760008a8a83818110611f4b57611f4b6148c6565b9050602002016020810190611f6091906142d1565b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602081815260408084208b861685528252808420948d1684529390910190522054909150611fd0906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff1684614924565b92508883116120435773ffffffffffffffffffffffffffffffffffffffff80821660009081526001602081815260408084208a861685528252808420948c1684529390910190522080547fffffff00000000000000000000000000000000ffffffffffffffffffffffffff169055612100565b600061204f8a85614b53565b905061205b8185614b53565b935061206681613d13565b73ffffffffffffffffffffffffffffffffffffffff92831660009081526001602081815260408084208b881685528252808420968d1684529590910190529290922080546fffffffffffffffffffffffffffffffff939093166d0100000000000000000000000000027fffffff00000000000000000000000000000000ffffffffffffffffffffffffff9093169290921790915550612113565b508061210b81614937565b915050611f2f565b5080600003612126576000915050612190565b612131848483613db9565b6040805173ffffffffffffffffffffffffffffffffffffffff8881168252602082018490528087169286821692918916917fc052130bc4ef84580db505783484b067ea8b71b3bca78a7e12db7aea8658f004910160405180910390a490505b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604081206002015460ff700100000000000000000000000000000000820416600a0a916fffffffffffffffffffffffffffffffff9091169081900361220257505061234c565b60005b81816fffffffffffffffffffffffffffffffff1610156123485773ffffffffffffffffffffffffffffffffffffffff80881660009081526001602081815260408084206fffffffffffffffffffffffffffffffff87168552928301825280842054909416808452919052918120908061227e8389613bad565b91509150600080612292858d8d878d613ee5565b91509150828061229f5750805b15612336578b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff167f3303facd24627943a92e9dc87cfbb34b15c49b726eec3ad3487c16be9ab8efe887888760405161232d939291909283526020830191909152604082015260600190565b60405180910390a45b50506001909401935061220592505050565b5050505b50505050565b60608267ffffffffffffffff81111561236d5761236d6145bd565b6040519080825280602002602001820160405280156123d857816020015b6123c56040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b81526020019060019003908161238b5790505b50905060005b83811015610fa0578484828181106123f8576123f86148c6565b905060200201602081019061240d91906142d1565b82828151811061241f5761241f6148c6565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff9091169052848482818110612456576124566148c6565b905060200201602081019061246b91906142d1565b6040517f0afbcdc900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529190911690630afbcdc9906024016040805180830381865afa1580156124d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fc9190614b66565b83838151811061250e5761250e6148c6565b602002602001015160200184848151811061252b5761252b6148c6565b602090810291909101015160400191909152528061254881614937565b9150506123de565b805173ffffffffffffffffffffffffffffffffffffffff9081166000908152600160209081526040808320938616835292905281812091830151909190829061259a9083906129c0565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260018086016020526040909120015490925090508015801561260d575073ffffffffffffffffffffffffffffffffffffffff871660009081526001840160205260409020546cffffffffffffffffffffffffff1615155b156126bf57845173ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604081206002015461265e90700100000000000000000000000000000000900460ff16600a614a8f565b73ffffffffffffffffffffffffffffffffffffffff8916600090815260018601602052604090205490915081906126b1906b033b2e3c9fd0803ce8000000906cffffffffffffffffffffffffff16614a9e565b6126bb9190614ab5565b9150505b612190856020015183836140f8565b60008173ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561271b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273f9190614b1f565b136127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f5241434c455f4d5553545f52455455524e5f5052494345000000000000000060448201526064016106f0565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603b602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f1a1cd5483e52e60b9ff7f3b9d1db3bbd9e9d21c6324ad3a8c79dba9b75e62f4d9190a35050565b6000805b8251811015610fa057828181518110612841576128416148c6565b6020026020010151602001516000036128ef576001600084838151811061286a5761286a6148c6565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff90811683528282019390935260409182016000908120888516825282528281209389168152600190930190529020546128e8906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff1683614924565b91506129ae565b60016000848381518110612905576129056148c6565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff908116835282820193909352604091820160009081208885168252825282812093891681526001909301905290205483516d01000000000000000000000000009091046fffffffffffffffffffffffffffffffff16906129979087908790879086908110610bb957610bb96148c6565b6129a19190614924565b6129ab9083614924565b91505b806129b881614937565b915050612826565b60028201548254600091829163ffffffff7c010000000000000000000000000000000000000000000000000000000082048116916affffffffffffffffffffff6d010000000000000000000000000082041691780100000000000000000000000000000000000000000000000090910416811580612a3c575086155b80612a4657504281145b80612a515750828110155b15612a65578384955095505050505061107c565b6000834211612a745742612a76565b835b90506000612a848383614b53565b905060006b033b2e3c9fd0803ce8000000612a9f8387614a9e565b612aa99190614a9e565b8a9004905086612ab98183614924565b98509850505050505050509250929050565b73ffffffffffffffffffffffffffffffffffffffff8116612b48576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53545241544547595f43414e5f4e4f545f42455f5a45524f000000000000000060448201526064016106f0565b6001813b151514612bb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53545241544547595f4d5553545f42455f434f4e54524143540000000000000060448201526064016106f0565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603a602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f8ca1d928f1d72493a6b78c4f74aabde976bc37ffe2570f2a1ce5a8abd3dde0aa9190a35050565b60005b8151811015610e385760016000838381518110612c5357612c536148c6565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160109054906101000a900460ff1660ff16600003612d2d576004828281518110612cc857612cc86148c6565b6020908102919091018101516060015182546001810184556000938452919092200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b818181518110612d3f57612d3f6148c6565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db99190614b8a565b60016000848481518110612dcf57612dcf6148c6565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160106101000a81548160ff021916908360ff160217905550600060016000848481518110612e4857612e486148c6565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000848481518110612ea557612ea56148c6565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160189054906101000a900463ffffffff1663ffffffff1660000361311f57828281518110612f2157612f216148c6565b60200260200101516080015160016000858581518110612f4357612f436148c6565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600060016000878781518110612fa457612fa46148c6565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000848481518110613090576130906148c6565b6020908102919091018101516060015173ffffffffffffffffffffffffffffffffffffffff168252810191909152604001600090812060020180546fffffffffffffffffffffffffffffffff16916130e783614af0565b91906101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505b60026000848481518110613135576131356148c6565b6020908102919091018101516080015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160009081205460ff16151590036132655760016002600085858151811061318f5761318f6148c6565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003838381518110613200576132006148c6565b6020908102919091018101516080015182546001810184556000938452919092200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b600061328e8285858151811061327d5761327d6148c6565b602002602001015160200151613bad565b50825485519192506d010000000000000000000000000081046affffffffffffffffffffff16917c010000000000000000000000000000000000000000000000000000000090910463ffffffff16908690869081106132ef576132ef6148c6565b60209081029190910101515184546affffffffffffffffffffff9091166d0100000000000000000000000000027fffffffffffffffff0000000000000000000000ffffffffffffffffffffffffff9091161784558551869086908110613357576133576148c6565b602090810291909101015160400151845463ffffffff9091167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617845585518690869081106133c6576133c66148c6565b60200260200101516080015173ffffffffffffffffffffffffffffffffffffffff168686815181106133fa576133fa6148c6565b60200260200101516060015173ffffffffffffffffffffffffffffffffffffffff167fac1777479f07f3e7c34da8402139d54027a6a260caaae168bdee825ca5580dc584898981518110613450576134506148c6565b602002602001015160000151858b8b8151811061346f5761346f6148c6565b602002602001015160400151896040516134c39594939291906affffffffffffffffffffff958616815293909416602084015263ffffffff9182166040840152166060820152608081019190915260a00190565b60405180910390a35050505080806134da90614937565b915050612c34565b60035460609081908067ffffffffffffffff811115613503576135036145bd565b60405190808252806020026020018201604052801561352c578160200160208202803683370190505b5092508067ffffffffffffffff811115613548576135486145bd565b604051908082528060200260200182016040528015613571578160200160208202803683370190505b50915061358385611f278a8a89612352565b60005b878110156138915760008989838181106135a2576135a26148c6565b90506020020160208101906135b791906142d1565b905060005b8381101561387c57600073ffffffffffffffffffffffffffffffffffffffff168682815181106135ee576135ee6148c6565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361369c5760038181548110613624576136246148c6565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868281518110613661576136616148c6565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120875182908990859081106136d7576136d76148c6565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff90811683528282019390935260409182016000908120938d168152600190930190529020546d010000000000000000000000000090046fffffffffffffffffffffffffffffffff1690508015613869578086838151811061375b5761375b6148c6565b6020026020010181815161376f9190614924565b90525073ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120885182908a90869081106137ad576137ad6148c6565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600d6101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b508061387481614937565b9150506135bc565b5050808061388990614937565b915050613586565b5060005b818110156139bd576138da858583815181106138b3576138b36148c6565b60200260200101518584815181106138cd576138cd6148c6565b6020026020010151613db9565b8473ffffffffffffffffffffffffffffffffffffffff16848281518110613903576139036148c6565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fc052130bc4ef84580db505783484b067ea8b71b3bca78a7e12db7aea8658f0048a87868151811061396c5761396c6148c6565b60200260200101516040516139a392919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a4806139b581614937565b915050613895565b50509550959350505050565b60005b600454811015611280576000600482815481106139eb576139eb6148c6565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600190915260408220909250905b60028201546fffffffffffffffffffffffffffffffff9081169082161015613b97576fffffffffffffffffffffffffffffffff8116600090815260018301602090815260408083205473ffffffffffffffffffffffffffffffffffffffff1683529084905290206002810154158015613aa8575080546cffffffffffffffffffffffffff1615155b15613b32576002830154613ad490700100000000000000000000000000000000900460ff16600a614a8f565b8154613afc906b033b2e3c9fd0803ce8000000906cffffffffffffffffffffffffff16614a9e565b613b069190614ab5565b600282015580547fffffffffffffffffffffffffffffffffffffff000000000000000000000000001681555b613b81818573ffffffffffffffffffffffffffffffffffffffff1663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d2a573d6000803e3d6000fd5b5050508080613b8f90614af0565b915050613a20565b5050508080613ba590614937565b9150506139cc565b600080600080613bbd86866129c0565b915091506000828214613c2f5750600286018190556001613bdd42614127565b875463ffffffff919091167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff909116178755613c86565b613c3842614127565b875463ffffffff919091167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9091161787555b90969095509350505050565b60005b815181101561071e57613d01828281518110613cb357613cb36148c6565b60200260200101516000015184848481518110613cd257613cd26148c6565b602002602001015160200151858581518110613cf057613cf06148c6565b60200260200101516040015161219b565b80613d0b81614937565b915050613c95565b60006fffffffffffffffffffffffffffffffff821115613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016106f0565b5090565b73ffffffffffffffffffffffffffffffffffffffff8281166000818152603a60205260408082205490517f16beb9820000000000000000000000000000000000000000000000000000000081528785166004820152602481019390935260448301859052909216919082906316beb982906064016020604051808303816000875af1158015613e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e709190614bad565b9050600181151514613ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5452414e534645525f4552524f5200000000000000000000000000000000000060448201526064016106f0565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001808701602052604082200154819080158015613f54575073ffffffffffffffffffffffffffffffffffffffff871660009081526001890160205260409020546cffffffffffffffffffffffffff1615155b156140035773ffffffffffffffffffffffffffffffffffffffff871660009081526001890160205260409020548490613fa9906b033b2e3c9fd0803ce8000000906cffffffffffffffffffffffffff16614a9e565b613fb39190614ab5565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260018a016020526040902080547fffffffffffffffffffffffffffffffffffffff0000000000000000000000000016905590505b60008186148015906140e95773ffffffffffffffffffffffffffffffffffffffff891660009081526001808c0160205260409091200187905587156140e95761404d8888856140f8565b915061405882613d13565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260018c01602052604090208054600d906140b29084906d010000000000000000000000000090046fffffffffffffffffffffffffffffffff16614bcf565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b90999098509650505050505050565b6000806141058385614b53565b61410f9086614a9e565b6b033b2e3c9fd0803ce8000000900495945050505050565b600063ffffffff821115613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f322062697473000000000000000000000000000000000000000000000000000060648201526084016106f0565b73ffffffffffffffffffffffffffffffffffffffff8116811461128057600080fd5b600080604083850312156141f257600080fd5b82356141fd816141bd565b9150602083013561420d816141bd565b809150509250929050565b60008083601f84011261422a57600080fd5b50813567ffffffffffffffff81111561424257600080fd5b6020830191508360208260051b850101111561107c57600080fd5b60008060008060006080868803121561427557600080fd5b853567ffffffffffffffff81111561428c57600080fd5b61429888828901614218565b9096509450506020860135925060408601356142b3816141bd565b915060608601356142c3816141bd565b809150509295509295909350565b6000602082840312156142e357600080fd5b81356142ee816141bd565b9392505050565b60008060006060848603121561430a57600080fd5b8335614315816141bd565b95602085013595506040909401359392505050565b60008060008060008060a0878903121561434357600080fd5b863567ffffffffffffffff81111561435a57600080fd5b61436689828a01614218565b909750955050602087013593506040870135614381816141bd565b92506060870135614391816141bd565b915060808701356143a1816141bd565b809150509295509295509295565b6000806000604084860312156143c457600080fd5b833567ffffffffffffffff8111156143db57600080fd5b6143e786828701614218565b90945092505060208401356143fb816141bd565b809150509250925092565b600081518084526020808501945080840160005b8381101561444c57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161441a565b509495945050505050565b60408152600061446a6040830185614406565b82810360208481019190915284518083528582019282019060005b818110156144a157845183529383019391830191600101614485565b5090979650505050505050565b6000806000606084860312156144c357600080fd5b83356144ce816141bd565b925060208401356144de816141bd565b915060408401356143fb816141bd565b6000806000806060858703121561450457600080fd5b843567ffffffffffffffff81111561451b57600080fd5b61452787828801614218565b909550935050602085013591506040850135614542816141bd565b939692955090935050565b6020815260006142ee6020830184614406565b6000806000806060858703121561457657600080fd5b843567ffffffffffffffff81111561458d57600080fd5b61459987828801614218565b90955093505060208501356145ad816141bd565b91506040850135614542816141bd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561460f5761460f6145bd565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561465c5761465c6145bd565b604052919050565b80356affffffffffffffffffffff8116811461467f57600080fd5b919050565b803563ffffffff8116811461467f57600080fd5b600060208083850312156146ab57600080fd5b823567ffffffffffffffff808211156146c357600080fd5b818501915085601f8301126146d757600080fd5b8135818111156146e9576146e96145bd565b6146f7848260051b01614615565b818152848101925060e091820284018501918883111561471657600080fd5b938501935b828510156147ba5780858a0312156147335760008081fd5b61473b6145ec565b61474486614664565b81528686013587820152604061475b818801614684565b9082015260608681013561476e816141bd565b90820152608086810135614781816141bd565b9082015260a086810135614794816141bd565b9082015260c0868101356147a7816141bd565b908201528452938401939285019261471b565b50979650505050505050565b600080602083850312156147d957600080fd5b823567ffffffffffffffff8111156147f057600080fd5b613c8685828601614218565b60008060006060848603121561481157600080fd5b833561481c816141bd565b9250602084013561482c816141bd565b915061483a60408501614684565b90509250925092565b60008060008060006060868803121561485b57600080fd5b8535614866816141bd565b9450602086013567ffffffffffffffff8082111561488357600080fd5b61488f89838a01614218565b909650945060408801359150808211156148a857600080fd5b506148b588828901614218565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561066f5761066f6148f5565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614968576149686148f5565b5060010190565b600181815b808511156149c857817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156149ae576149ae6148f5565b808516156149bb57918102915b93841c9390800290614974565b509250929050565b6000826149df5750600161066f565b816149ec5750600061066f565b8160018114614a025760028114614a0c57614a28565b600191505061066f565b60ff841115614a1d57614a1d6148f5565b50506001821b61066f565b5060208310610133831016604e8410600b8410161715614a4b575081810a61066f565b614a55838361496f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614a8757614a876148f5565b029392505050565b60006142ee60ff8416836149d0565b808202811582820484141761066f5761066f6148f5565b600082614aeb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006fffffffffffffffffffffffffffffffff808316818103614b1557614b156148f5565b6001019392505050565b600060208284031215614b3157600080fd5b5051919050565b600060208284031215614b4a57600080fd5b6142ee82614664565b8181038181111561066f5761066f6148f5565b60008060408385031215614b7957600080fd5b505080516020909101519092909150565b600060208284031215614b9c57600080fd5b815160ff811681146142ee57600080fd5b600060208284031215614bbf57600080fd5b815180151581146142ee57600080fd5b6fffffffffffffffffffffffffffffffff818116838216019080821115614bf857614bf86148f5565b509291505056fea2646970667358221220ac88f414dbc92c49de3d37268a281369496d507f5ddc70490a1ed1a5307dfa6b64736f6c634300081500330000000000000000000000006e081f9ebb2b2f07c2f771074ebb32ddac141d14