2 txs
3 calls
constructor
constructor(address swapConfig)
functions
getDelegateCount
viewfunction getDelegateCount(address user) view returns (uint256)
getDelegates
viewfunction getDelegates(address user, uint256 index) view returns (address)
getDelegates
viewfunction getDelegates(address user) view returns (address[])
getJoinedPoolAt
viewfunction getJoinedPoolAt(address user, address token, uint256 index) view returns (address)
getJoinedPoolCount
viewfunction getJoinedPoolCount(address user, address token) view returns (uint256)
getJoinedPools
viewfunction getJoinedPools(address user, address token) view returns (address[])
getListedPoolAt
viewfunction getListedPoolAt(address token, uint256 index) view returns (address)
getListedPoolCount
viewfunction getListedPoolCount(address token) view returns (uint256)
getListedPools
viewfunction getListedPools(address token) view returns (address[])
getListedTokenAt
viewfunction getListedTokenAt(uint256 index) view returns (address)
getListedTokenCount
viewfunction getListedTokenCount() view returns (uint256)
getListedTokens
viewfunction getListedTokens() view returns (address[])
getPool
viewfunction getPool(address pool) view returns (tuple)
getPoolAddress
viewfunction getPoolAddress(address stakeToken, address rewardToken, uint256 rewardDurationDays) view returns (address)
getPoolAddressUnchecked
viewfunction getPoolAddressUnchecked(address stakeToken, address rewardToken, uint256 rewardDurationDays) view returns (address)
getPoolDestructured
viewfunction getPoolDestructured(address pool) view returns (address stakeToken, address rewardToken, uint256 rewardDuration, uint256 stakes, bool errors)
getPoolTemplate
viewfunction getPoolTemplate() view returns (address)
getStake
viewfunction getStake(address user, address token) view returns (uint256)
getStakeAt
viewfunction getStakeAt(address user, uint256 index) view returns (address, uint256)
getStakeCount
viewfunction getStakeCount(address user) view returns (uint256)
getStakeCredit
viewfunction getStakeCredit(address token) view returns (address)
getStakeCreditTemplate
viewfunction getStakeCreditTemplate() view returns (address)
getStakerAt
viewfunction getStakerAt(address token, uint256 index) view returns (address)
getStakerCount
viewfunction getStakerCount(address token) view returns (uint256)
getStakers
viewfunction getStakers(address token) view returns (address[])
getStakes
viewfunction getStakes(address user) view returns (address[] tokens, uint256[] stakes)
hasJoinedPool
viewfunction hasJoinedPool(address user, address token, address pool) view returns (bool)
isDelegate
viewfunction isDelegate(address user, address delegate) view returns (bool)
isListedPool
viewfunction isListedPool(address token, address pool) view returns (bool)
isListedToken
viewfunction isListedToken(address token) view returns (bool)
isStaker
viewfunction isStaker(address token, address user) view returns (bool)
owner
viewfunction owner() view returns (address)
SWAP_CONFIG
viewfunction SWAP_CONFIG() view returns (address)
WETH
viewfunction WETH() view returns (address)
addDelegate
nonpayablefunction addDelegate(address delegate)
claimPoolRewards
nonpayablefunction claimPoolRewards(address user, address[] pools, bool useGasCap)
claimRewards
nonpayablefunction claimRewards(address user, address token)
createPool
nonpayablefunction createPool(address stakeToken, address rewardToken, uint256 rewardDurationDays) returns (address)
delistPool
nonpayablefunction delistPool(address pool)
forceClaimRewards
nonpayablefunction forceClaimRewards(address user, address token)
forceUnstake
nonpayablefunction forceUnstake(address user, address token)
joinPools
nonpayablefunction joinPools(address user, address[] pools)
leavePools
nonpayablefunction leavePools(address user, address[] pools, bool useGasCap)
listPool
nonpayablefunction listPool(address pool)
removeDelegate
nonpayablefunction removeDelegate(address delegate)
renounceOwnership
nonpayablefunction renounceOwnership()
setPoolTemplate
nonpayablefunction setPoolTemplate(address poolTemplate)
setStakeCreditTemplate
nonpayablefunction setStakeCreditTemplate(address stakeCreditTemplate)
stake
nonpayablefunction stake(address user, address token, uint256 quantity, bool customize, address[] customPools)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unstake
nonpayablefunction unstake(address user, address token, uint256 quantity)
events
ClaimReward
event ClaimReward(address indexed account, address indexed pool, address indexed token, uint256 quantity, uint256 timestamp)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Stake
event Stake(address indexed user, address indexed token, uint256 quantity, uint256 timestamp)
Unstake
event Unstake(address indexed user, address indexed token, uint256 quantity, uint256 timestamp)
errors
No errors.
creation bytecode
0x60a060405234801561000f575f80fd5b50604051615cb6380380615cb683398101604081905261002e91610170565b61003733610107565b600180556001600160a01b0381166080526040513090829061005890610156565b6001600160a01b03928316815291166020820152604001604051809103905ff080158015610088573d5f803e3d5ffd5b50600280546001600160a01b0319166001600160a01b039290921691909117905560405130906100b790610163565b6001600160a01b039091168152602001604051809103905ff0801580156100e0573d5f803e3d5ffd5b50600380546001600160a01b0319166001600160a01b03929092169190911790555061019d565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118eb80612dc083390190565b61160b806146ab83390190565b5f60208284031215610180575f80fd5b81516001600160a01b0381168114610196575f80fd5b9392505050565b608051612c0b6101b55f395f6105f50152612c0b5ff3fe608060405234801561000f575f80fd5b50600436106102e4575f3560e01c806382dda22d11610195578063cf57ee69116100e4578063ebd6bb851161009e578063f4e0e09b11610079578063f4e0e09b146107f5578063f5846fb614610820578063f60b0d5c14610833578063f712e12e14610846575f80fd5b8063ebd6bb85146107bc578063f1e42ccd146107cf578063f2fde38b146107e2575f80fd5b8063cf57ee6914610747578063d1a163e21461075a578063d6ba1e5d1461076d578063d9e7f9321461078e578063e3ae9f6e146107a1578063e71bdf41146107a9575f80fd5b8063ad5c46481161014f578063b9ae67911161012a578063b9ae67911461062a578063bb1b611e1461063b578063bbe4f6db1461064e578063c0f5eae214610734575f80fd5b8063ad5c4648146105e2578063b1c9f7cd146105f0578063b5e363b714610617575f80fd5b806382dda22d14610573578063843da3f9146105865780638c309135146105995780638da5cb5b146105ac5780639cf31c60146105bc578063ad475a7b146105cf575f80fd5b806351810fb51161025157806367529f731161020b57806376c1db2c116101e657806376c1db2c14610519578063791936101461052c5780637ba6f4581461053f5780637f855ff014610560575f80fd5b806367529f73146104eb57806367e7646f146104fe578063715018a614610511575f80fd5b806351810fb51461046b5780635a25dcb21461047e5780635fec5d0b1461048f57806360829f8a146104b2578063638c5da9146104c557806365a2404f146104d8575f80fd5b80631cdf2a07116102a25780631cdf2a07146103f65780631d765732146104095780632ba996a51461041c578063306faf4a146104245780633b971c11146104375780633fbd253c14610458575f80fd5b8062163618146102e8578063129e30f9146102fd5780631571d29414610310578063169db77d1461034057806318b78754146103605780631a11c2e814610373575b5f80fd5b6102fb6102f636600461272e565b610859565b005b6102fb61030b366004612749565b610883565b61032361031e366004612780565b610942565b6040516001600160a01b0390911681526020015b60405180910390f35b61035361034e36600461272e565b61096c565b60405161033791906127ed565b61032361036e366004612780565b61098f565b6103c161038136600461272e565b6001600160a01b039081165f908152600b602052604090208054600182015460028301546003840154600490940154928516959190941693929160ff1690565b604080516001600160a01b0396871681529590941660208601529284019190915260608301521515608082015260a001610337565b6102fb6104043660046128b6565b6109b0565b610323610417366004612903565b610b3e565b610353610b4a565b6102fb61043236600461272e565b610b5b565b61044a61044536600461272e565b610bcf565b604051908152602001610337565b6102fb610466366004612749565b610bef565b61032361047936600461291a565b610c30565b6003546001600160a01b0316610323565b6104a261049d366004612749565b610e85565b6040519015158152602001610337565b6102fb6104c036600461291a565b610ea6565b6104a26104d336600461272e565b611282565b6103236104e6366004612780565b61128e565b61044a6104f9366004612749565b6112af565b6102fb61050c36600461272e565b6112e2565b6102fb6112fa565b6104a2610527366004612749565b61130d565b61035361053a36600461272e565b61132e565b61055261054d36600461272e565b611351565b604051610337929190612958565b61032361056e36600461291a565b611424565b61044a610581366004612749565b611460565b61044a61059436600461272e565b61148f565b6102fb6105a73660046129bd565b6114af565b5f546001600160a01b0316610323565b6103536105ca366004612749565b61175b565b6102fb6105dd36600461272e565b61178f565b6103236006602160991b0181565b6103237f000000000000000000000000000000000000000000000000000000000000000081565b6102fb61062536600461272e565b6117b9565b6002546001600160a01b0316610323565b61044a61064936600461272e565b611846565b6106e761065c36600461272e565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506001600160a01b039081165f908152600b6020908152604091829020825160a081018452815485168152600182015490941691840191909152600281015491830191909152600381015460608301526004015460ff161515608082015290565b604051610337919081516001600160a01b03908116825260208084015190911690820152604080830151908201526060808301519082015260809182015115159181019190915260a00190565b61032361074236600461291a565b611866565b61044a61075536600461272e565b611893565b61035361076836600461272e565b6118b6565b61078061077b366004612780565b6118d9565b604051610337929190612a1d565b6102fb61079c3660046129bd565b61190b565b61044a611b58565b6102fb6107b736600461272e565b611b63565b6103236107ca36600461291a565b611b7b565b6102fb6107dd366004612749565b611be0565b6102fb6107f036600461272e565b611c20565b61032361080336600461272e565b6001600160a01b039081165f908152600760205260409020541690565b6104a261082e366004612a36565b611c99565b6104a2610841366004612749565b611ccd565b6102fb610854366004612a73565b611cee565b610861612097565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382165f908152600a602052604081206108a790600201836120f0565b90505f81116108f05760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881b9bdd081cdd185ad95960821b60448201526064015b60405180910390fd5b6001600160a01b038084165f908152600a6020908152604080832093861683526005909301905290812061092390612104565b90506109318482600161190b565b61093c848484610ea6565b50505050565b6001600160a01b0382165f9081526008602052604081206109639083612117565b90505b92915050565b6001600160a01b0381165f908152600a6020526040902060609061096690612104565b6001600160a01b0382165f9081526009602052604081206109639083612117565b816001600160a01b0381163314806109e457506001600160a01b0381165f908152600a602052604090206109e49033612122565b610a005760405162461bcd60e51b81526004016108e790612aed565b6001600160a01b0383165f908152600a60205260408120905b8351811015610b37575f848281518110610a3557610a35612b15565b6020908102919091018101516001600160a01b038082165f908152600b90935260408320549193501690610a6c6002860183612143565b9150505f81118015610a9c57506001600160a01b0382165f9081526005860160205260409020610a9c9084612167565b15610b2c576040516356e4bb9760e11b81526001600160a01b0384169063adc9772e90610acf908b908590600401612a1d565b5f604051808303815f87803b158015610ae6575f80fd5b505af1158015610af8573d5f803e3d5ffd5b505050506001600160a01b0383165f908152600b602052604081206003018054839290610b26908490612b3d565b90915550505b505050600101610a19565b5050505050565b5f610966600483612117565b6060610b566004612104565b905090565b610b63612097565b6001600160a01b038082165f908152600b60209081526040808320549093168083526008909152919020610b97908361217b565b506001600160a01b0381165f908152600860205260409020610bb89061218f565b5f03610bcb57610bc960048261217b565b505b5050565b6001600160a01b0381165f908152600a602052604081206109669061218f565b6001600160a01b038083165f908152600a60209081526040808320938516835260059093019052908120610c2290612104565b9050610bc9838260016114af565b5f6001600160a01b038416610c7d5760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21029ba30b5b2902a37b5b2b760691b60448201526064016108e7565b6001600160a01b038316610c96576006602160991b0192505b5f610ca2858585612198565b5f818152600660205260409020549091506001600160a01b031615610cff5760405162461bcd60e51b8152602060048201526013602482015272506f6f6c20616c72656164792065786973747360681b60448201526064016108e7565b6002545f90610d16906001600160a01b03166121f8565b90506001600160a01b03811663399ae72486610d358762015180612b50565b6040518363ffffffff1660e01b8152600401610d52929190612a1d565b5f604051808303815f87803b158015610d69575f80fd5b505af1158015610d7b573d5f803e3d5ffd5b50506040516356e4bb9760e11b81526001600160a01b038416925063adc9772e9150610dae903090600190600401612a1d565b5f604051808303815f87803b158015610dc5575f80fd5b505af1158015610dd7573d5f803e3d5ffd5b5050505f9283525060066020908152604080842080546001600160a01b03199081166001600160a01b03868116918217909355835160a0810185529a83168b529882168a85019081528a840198895260608b0187815260808c018881529a8852600b909552929095209851895486169082161789559051600189018054909516911617909255925160028601555160038501555090516004909201805460ff19169215159290921790915590565b6001600160a01b0382165f908152600a602052604081206109639083612122565b610eae61228f565b826001600160a01b038116331480610ee257506001600160a01b0381165f908152600a60205260409020610ee29033612122565b610efe5760405162461bcd60e51b81526004016108e790612aed565b6001600160a01b0384165f908152600a6020526040812090610f2360028301866120f0565b905083811484610f6e5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420746f6b656e207175616e7469747960501b60448201526064016108e7565b81851115610fb75760405162461bcd60e51b81526020600482015260166024820152755175616e746974792065786365656473207374616b6560501b60448201526064016108e7565b610fc0866122e8565b6001600160a01b0316639dc29fac88876040518363ffffffff1660e01b8152600401610fed929190612a1d565b5f604051808303815f87803b158015611004575f80fd5b505af1158015611016573d5f803e3d5ffd5b505050506001600160a01b0386165f908152600584016020526040812061103c90612104565b905081156110765761104f88825f61190b565b6001600160a01b0387165f908152600960205260409020611070908961217b565b50611158565b5f5b8151811015611156575f82828151811061109457611094612b15565b60200260200101519050806001600160a01b031663c2a672e08b8a6040518363ffffffff1660e01b81526004016110cc929190612a1d565b5f604051808303815f87803b1580156110e3575f80fd5b505af19250505080156110f4575060015b61111e576001600160a01b0381165f908152600b60205260409020600401805460ff191660011790555b6001600160a01b0381165f908152600b6020526040812060030180548a9290611148908490612b67565b909155505050600101611078565b505b611171876111668886612b67565b6002870191906123ab565b5060405163a9059cbb60e01b81526001600160a01b0388169063a9059cbb906111a0908b908a90600401612a1d565b6020604051808303815f875af11580156111bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e09190612b7a565b61122c5760405162461bcd60e51b815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e730000000000000060448201526064016108e7565b604080518781524260208201526001600160a01b03808a1692908b16917f18edd09e80386cd99df397e2e0d87d2bb259423eae08645e776321a36fe680ef910160405180910390a35050505050610bc960018055565b5f610966600483612122565b6001600160a01b0382165f908152600a602052604081206109639083612117565b6001600160a01b038083165f908152600a602090815260408083209385168352600590930190529081206109639061218f565b335f908152600a60205260409020610bcb908261217b565b611302612097565b61130b5f6123c0565b565b6001600160a01b0382165f9081526008602052604081206109639083612122565b6001600160a01b0381165f90815260096020526040902060609061096690612104565b6001600160a01b0381165f908152600a6020526040902060609081906002016113798161240f565b9250825167ffffffffffffffff811115611395576113956127ff565b6040519080825280602002602001820160405280156113be578160200160208202803683370190505b5091505f5b835181101561141d576113f88482815181106113e1576113e1612b15565b6020026020010151836120f090919063ffffffff16565b83828151811061140a5761140a612b15565b60209081029190910101526001016113c3565b5050915091565b6001600160a01b038084165f908152600a602090815260408083209386168352600590930190529081206114589083612117565b949350505050565b6001600160a01b0382165f908152600a6020526040812081906114869060020184612143565b95945050505050565b6001600160a01b0381165f9081526008602052604081206109669061218f565b826001600160a01b0381163314806114e357506001600160a01b0381165f908152600a602052604090206114e39033612122565b8061150a57506001600160a01b0381163014801561150a57505f546001600160a01b031633145b6115265760405162461bcd60e51b81526004016108e790612aed565b5f5b8351811015610b37575f84828151811061154457611544612b15565b6020026020010151905083156116585760405163d279c19160e01b81526001600160a01b03878116600483015282169063d279c19190620f42409060240160408051808303815f8887f1935050505080156115bc575060408051601f3d908101601f191682019092526115b991810190612b95565b60015b6115ea576001600160a01b0381165f908152600b60205260409020600401805460ff19166001179055611752565b801561165157816001600160a01b0316836001600160a01b0316896001600160a01b03167f5851a97698094c5d791e338d27e18159e3f87a49ccfa02aa6c16d16e4e2f52388442604051611648929190918252602082015260400190565b60405180910390a45b5050611752565b60405163d279c19160e01b81526001600160a01b03878116600483015282169063d279c1919060240160408051808303815f875af19250505080156116ba575060408051601f3d908101601f191682019092526116b791810190612b95565b60015b6116e8576001600160a01b0381165f908152600b60205260409020600401805460ff19166001179055611752565b801561174f57816001600160a01b0316836001600160a01b0316896001600160a01b03167f5851a97698094c5d791e338d27e18159e3f87a49ccfa02aa6c16d16e4e2f52388442604051611746929190918252602082015260400190565b60405180910390a45b50505b50600101611528565b6001600160a01b038083165f908152600a602090815260408083209385168352600590930190522060609061096390612104565b611797612097565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6117c1612097565b6001600160a01b038082165f908152600b602052604090205416806118195760405162461bcd60e51b815260206004820152600e60248201526d141bdbdb081b9bdd08199bdd5b9960921b60448201526064016108e7565b6001600160a01b0381165f90815260086020526040902061183a9083612167565b50610bc9600482612167565b6001600160a01b0381165f9081526009602052604081206109669061218f565b5f80611873858585612198565b5f908152600660205260409020546001600160a01b031695945050505050565b6001600160a01b0381165f908152600a602052604081206109669060020161241b565b6001600160a01b0381165f90815260086020526040902060609061096690612104565b6001600160a01b0382165f908152600a6020526040812081906118ff9060020184612425565b915091505b9250929050565b826001600160a01b03811633148061193f57506001600160a01b0381165f908152600a6020526040902061193f9033612122565b61195b5760405162461bcd60e51b81526004016108e790612aed565b6001600160a01b0384165f908152600a60205260408120905b8451811015611b4c575f85828151811061199057611990612b15565b6020908102919091018101516001600160a01b038082165f908152600b909352604083205491935016906119c76002860183612143565b9150505f811180156119f757506001600160a01b0382165f90815260058601602052604090206119f7908461217b565b15611b41578615611a9157604051630615339760e51b81526001600160a01b0384169063c2a672e090620f424090611a35908d908690600401612a1d565b5f604051808303815f88803b158015611a4c575f80fd5b5087f193505050508015611a5e575060015b611a8c576001600160a01b0383165f908152600b60205260409020600401805460ff19166001179055611b11565b611b11565b604051630615339760e51b81526001600160a01b0384169063c2a672e090611abf908c908590600401612a1d565b5f604051808303815f87803b158015611ad6575f80fd5b505af1925050508015611ae7575060015b611b11576001600160a01b0383165f908152600b60205260409020600401805460ff191660011790555b6001600160a01b0383165f908152600b602052604081206003018054839290611b3b908490612b67565b90915550505b505050600101611974565b50610b378585856114af565b5f610b56600461218f565b335f908152600a60205260409020610bcb9082612167565b5f80611b88858585612198565b5f818152600660205260409020549091506001600160a01b0316806114865760405162461bcd60e51b815260206004820152600e60248201526d141bdbdb081b9bdd08199bdd5b9960921b60448201526064016108e7565b6001600160a01b038083165f908152600a60209081526040808320938516835260059093019052908120611c1390612104565b9050610bc983825f6114af565b611c28612097565b6001600160a01b038116611c8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108e7565b611c96816123c0565b50565b6001600160a01b038084165f908152600a602090815260408083209386168352600590930190529081206114589083612122565b6001600160a01b0382165f9081526009602052604081206109639083612122565b611cf661228f565b846001600160a01b038116331480611d2a57506001600160a01b0381165f908152600a60205260409020611d2a9033612122565b611d465760405162461bcd60e51b81526004016108e790612aed565b5f8411611d8e5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420746f6b656e207175616e7469747960501b60448201526064016108e7565b6040516323b872dd60e01b81526001600160a01b038781166004830152306024830152604482018690528616906323b872dd906064016020604051808303815f875af1158015611de0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e049190612b7a565b611e485760405162461bcd60e51b81526020600482015260156024820152742ab730b13632903a379039ba30b5b2903a37b5b2b760591b60448201526064016108e7565b611e51856122e8565b6001600160a01b03166340c10f1987866040518363ffffffff1660e01b8152600401611e7e929190612a1d565b5f604051808303815f87803b158015611e95575f80fd5b505af1158015611ea7573d5f803e3d5ffd5b5050506001600160a01b0387165f908152600a60205260408120915080611ed16002840189612143565b9092509050611eef88611ee48984612b3d565b6002860191906123ab565b508115611fdc576001600160a01b0388165f9081526005840160205260408120611f1890612104565b90505f5b8151811015611fd5575f828281518110611f3857611f38612b15565b60200260200101519050806001600160a01b031663adc9772e8d8c6040518363ffffffff1660e01b8152600401611f70929190612a1d565b5f604051808303815f87803b158015611f87575f80fd5b505af1158015611f99573d5f803e3d5ffd5b505050506001600160a01b0381165f908152600b6020526040812060030180548c9290611fc7908490612b3d565b909155505050600101611f1c565b5050611fff565b6001600160a01b0388165f908152600960205260409020611ffd908a612167565b505b85156120145761200f89866109b0565b612042565b6001600160a01b0388165f90815260086020526040812061203490612104565b90506120408a826109b0565b505b604080518881524260208201526001600160a01b03808b1692908c16917f63602d0ecc7b3a0ef7ff1a116e23056662d64280355ba8031b6d0d767c4b4458910160405180910390a350505050610b3760018055565b5f546001600160a01b0316331461130b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e7565b5f610963836001600160a01b038416612433565b60605f612110836124a2565b9392505050565b5f61096383836124fb565b6001600160a01b0381165f9081526001830160205260408120541515610963565b5f80808061215a866001600160a01b038716612521565b9097909650945050505050565b5f610963836001600160a01b038416612559565b5f610963836001600160a01b0384166125a5565b5f610966825490565b5f6001600160a01b0383166121b2576006602160991b0192505b604080516001600160a01b038087166020830152851691810191909152606081018390526080016040516020818303038152906040528051906020012090509392505050565b5f763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c175f526e5af43d82803e903d91602b57fd5bf38260781b17602052603760095ff090506001600160a01b03811661228a5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b60448201526064016108e7565b919050565b6002600154036122e15760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600155565b6001600160a01b038082165f90815260076020526040812054909116806109665760035461231e906001600160a01b03166121f8565b60405163189acdbd60e31b81526001600160a01b0385811660048301529192509082169063c4d66de8906024015f604051808303815f87803b158015612362575f80fd5b505af1158015612374573d5f803e3d5ffd5b505050506001600160a01b038381165f90815260076020526040902080546001600160a01b03191691831691909117905592915050565b5f611458846001600160a01b03851684612688565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60605f612110836126a4565b5f610966826126af565b5f80808061215a86866126b9565b5f81815260028301602052604081205480151580612456575061245684846126e2565b6109635760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016108e7565b6060815f018054806020026020016040519081016040528092919081815260200182805480156124ef57602002820191905f5260205f20905b8154815260200190600101908083116124db575b50505050509050919050565b5f825f01828154811061251057612510612b15565b905f5260205f200154905092915050565b5f81815260028301602052604081205481908061254e5761254285856126e2565b92505f91506119049050565b600192509050611904565b5f81815260018301602052604081205461259e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610966565b505f610966565b5f818152600183016020526040812054801561267f575f6125c7600183612b67565b85549091505f906125da90600190612b67565b9050818114612639575f865f0182815481106125f8576125f8612b15565b905f5260205f200154905080875f01848154811061261857612618612b15565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061264a5761264a612bc1565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610966565b5f915050610966565b5f828152600284016020526040812082905561145884846126ed565b606061096682612104565b5f6109668261218f565b5f80806126c68585612117565b5f81815260029690960160205260409095205494959350505050565b5f61096383836126f8565b5f6109638383612559565b5f8181526001830160205260408120541515610963565b6001600160a01b0381168114611c96575f80fd5b803561228a8161270f565b5f6020828403121561273e575f80fd5b81356109638161270f565b5f806040838503121561275a575f80fd5b82356127658161270f565b915060208301356127758161270f565b809150509250929050565b5f8060408385031215612791575f80fd5b823561279c8161270f565b946020939093013593505050565b5f8151808452602084019350602083015f5b828110156127e35781516001600160a01b03168652602095860195909101906001016127bc565b5093949350505050565b602081525f61096360208301846127aa565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612822575f80fd5b813567ffffffffffffffff81111561283c5761283c6127ff565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715612869576128696127ff565b604052918252602081850181019290810186841115612886575f80fd5b6020860192505b838310156128ac5761289e83612723565b81526020928301920161288d565b5095945050505050565b5f80604083850312156128c7575f80fd5b82356128d28161270f565b9150602083013567ffffffffffffffff8111156128ed575f80fd5b6128f985828601612813565b9150509250929050565b5f60208284031215612913575f80fd5b5035919050565b5f805f6060848603121561292c575f80fd5b83356129378161270f565b925060208401356129478161270f565b929592945050506040919091013590565b604081525f61296a60408301856127aa565b82810360208401528084518083526020830191506020860192505f5b818110156129a4578351835260209384019390920191600101612986565b50909695505050505050565b8015158114611c96575f80fd5b5f805f606084860312156129cf575f80fd5b83356129da8161270f565b9250602084013567ffffffffffffffff8111156129f5575f80fd5b612a0186828701612813565b9250506040840135612a12816129b0565b809150509250925092565b6001600160a01b03929092168252602082015260400190565b5f805f60608486031215612a48575f80fd5b8335612a538161270f565b92506020840135612a638161270f565b91506040840135612a128161270f565b5f805f805f60a08688031215612a87575f80fd5b8535612a928161270f565b94506020860135612aa28161270f565b9350604086013592506060860135612ab9816129b0565b9150608086013567ffffffffffffffff811115612ad4575f80fd5b612ae088828901612813565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561096657610966612b29565b808202811582820484141761096657610966612b29565b8181038181111561096657610966612b29565b5f60208284031215612b8a575f80fd5b8151610963816129b0565b5f8060408385031215612ba6575f80fd5b8251612bb18161270f565b6020939093015192949293505050565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212201f643cf899a95c7e785e6f98fb790f299cd29ed502421aa1182de40daf1f98cb64736f6c634300081a003360e06040525f6003555f600455348015610017575f80fd5b506040516118eb3803806118eb83398101604081905261003691610068565b3060a0526001600160a01b039182166080521660c0526100a0565b6001600160a01b0381168114610065575f80fd5b50565b5f8060408385031215610079575f80fd5b825161008481610051565b602084015190925061009581610051565b809150509250929050565b60805160a05160c0516117f76100f45f395f81816102de01528181610a620152610e9901525f61033001525f81816102ab015281816107a801528181610c5801528181610dc00152610e5a01526117f75ff3fe608060405260043610610164575f3560e01c8063bdf16036116100cd578063df136d6511610087578063f520e7e511610062578063f520e7e514610469578063f7c618c11461047e578063fcb4da911461049c578063feca3900146104b1575f80fd5b8063df136d651461042c578063ebe2b12b14610441578063f2c5db1714610456575f80fd5b8063bdf1603614610352578063bf2e595014610386578063bf9befb1146103a5578063c2a672e0146103ba578063c8f33c91146103d9578063d279c191146103ee575f80fd5b8063ad5c46481161011e578063ad5c464814610249578063adc9772e1461027b578063b0df4cab1461029a578063b1c9f7cd146102cd578063b93e34db14610300578063bba3b1881461031f575f80fd5b80631c1f78eb14610190578063399ae724146101b75780636b2741ff146101d65780637b0a47ee146101ea5780638da7ad23146101ff578063aada9c381461022a575f80fd5b3661018c57600c5460ff1661018a57604080515f81526020810190915261018a906104c5565b005b5f80fd5b34801561019b575f80fd5b506101a4610555565b6040519081526020015b60405180910390f35b3480156101c2575f80fd5b5061018a6101d136600461140d565b610578565b3480156101e1575f80fd5b506101a46106fb565b3480156101f5575f80fd5b506101a460045481565b34801561020a575f80fd5b506101a4610219366004611437565b60086020525f908152604090205481565b348015610235575f80fd5b506101a4610244366004611437565b610711565b348015610254575f80fd5b506102636006602160991b0181565b6040516001600160a01b0390911681526020016101ae565b348015610286575f80fd5b5061018a61029536600461140d565b61079d565b3480156102a5575f80fd5b506102637f000000000000000000000000000000000000000000000000000000000000000081565b3480156102d8575f80fd5b506102637f000000000000000000000000000000000000000000000000000000000000000081565b34801561030b575f80fd5b5061018a61031a3660046114e4565b61090a565b34801561032a575f80fd5b506102637f000000000000000000000000000000000000000000000000000000000000000081565b34801561035d575f80fd5b506101a461036c366004611437565b6001600160a01b03165f908152600a602052604090205490565b348015610391575f80fd5b5061018a6103a03660046114e4565b6109f3565b3480156103b0575f80fd5b506101a460075481565b3480156103c5575f80fd5b5061018a6103d436600461140d565b610c4d565b3480156103e4575f80fd5b506101a460055481565b3480156103f9575f80fd5b5061040d610408366004611437565b610db3565b604080516001600160a01b0390931683526020830191909152016101ae565b348015610437575f80fd5b506101a460065481565b34801561044c575f80fd5b506101a460035481565b61018a610464366004611539565b6104c5565b348015610474575f80fd5b506101a460025481565b348015610489575f80fd5b505f54610263906001600160a01b031681565b3480156104a7575f80fd5b506101a460015481565b3480156104bc575f80fd5b506101a4611145565b6006602160991b016001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610505575f80fd5b505af1158015610517573d5f803e3d5ffd5b50505f546001600160a01b03166005602160991b011901925061054391505057610540346111a4565b50565b6105406006602160991b0134836109f3565b5f6001546002546004546105699190611587565b610573919061159e565b905090565b600254156105c35760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48125b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160a01b0382166106095760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064016105ba565b5f811161064b5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210223ab930ba34b7b760811b60448201526064016105ba565b60028190555f80546001600160a01b0319166001600160a01b03841690811782556040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa1580156106a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c991906115bd565b60ff169050601281106106dd5760016106f3565b6106e88160126115dd565b6106f390600a6116d3565b600155505050565b5f600354421061070c575060035490565b504290565b6001600160a01b0381165f908152600b6020908152604080832054600154600990935290832054909190670de0b6b3a76400009061074d611145565b61075791906115dd565b6001600160a01b0386165f908152600860205260409020546107799190611587565b610783919061159e565b61078d919061159e565b61079791906116de565b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107e55760405162461bcd60e51b81526004016105ba906116f1565b816107ee611145565b6006556107f96106fb565b6005556001600160a01b0381161561083f5761081481610711565b6001600160a01b0382165f908152600b60209081526040808320939093556006546009909152919020555b5f821161087f5760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b60448201526064016105ba565b8160075f82825461089091906116de565b90915550506001600160a01b0383165f90815260086020526040812080548492906108bc9084906116de565b9091555050604080518381524260208201526001600160a01b038516917f5af417134f72a9d41143ace85b0a26dce6f550f894f2cbc1eeee8810603d91b691015b60405180910390a2505050565b6040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b038416906323b872dd906064016020604051808303815f875af115801561095a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097e9190611716565b6109ca5760405162461bcd60e51b815260206004820152601860248201527f556e61626c6520746f207472616e7366657220746f6b656e000000000000000060448201526064016105ba565b5f546001600160a01b038085169116036109ec576109e7826111a4565b505050565b6109e78383835b5f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610a39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5d9190611735565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b0f479a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610abc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae0919061174c565b60405163095ea7b360e01b81526001600160a01b038083166004830152602482018790529192509086169063095ea7b3906044016020604051808303815f875af1158015610b30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b549190611716565b506040516321d053f960e11b81526001600160a01b038216906343a0a7f290610b87903090899089908990600401611767565b6020604051808303815f875af1158015610ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc79190611735565b505f546040516370a0823160e01b8152306004820152610c469184916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c379190611735565b610c4191906115dd565b6111a4565b5050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c955760405162461bcd60e51b81526004016105ba906116f1565b81610c9e611145565b600655610ca96106fb565b6005556001600160a01b03811615610cef57610cc481610711565b6001600160a01b0382165f908152600b60209081526040808320939093556006546009909152919020555b5f8211610d315760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f7420756e7374616b6520360841b60448201526064016105ba565b8160075f828254610d4291906115dd565b90915550506001600160a01b0383165f9081526008602052604081208054849290610d6e9084906115dd565b9091555050604080518381524260208201526001600160a01b038516917ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb28091016108fd565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dfd5760405162461bcd60e51b81526004016105ba906116f1565b82610e06611145565b600655610e116106fb565b6005556001600160a01b03811615610e5757610e2c81610711565b6001600160a01b0382165f908152600b60209081526040808320939093556006546009909152919020555b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614610e975784610eb9565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b0386165f908152600b6020526040902054909150801561112f576001600160a01b0386165f908152600b60209081526040808320839055600a90915281208054839290610f0e9084906116de565b90915550505f546001600160a01b03166005602160991b01190161102c57600c805460ff19166001179055604051632e1a7d4d60e01b8152600481018290526006602160991b0190632e1a7d4d906024015f604051808303815f87803b158015610f76575f80fd5b505af1158015610f88573d5f803e3d5ffd5b5050600c805460ff1916905550506040515f906001600160a01b0384169083908381818185875af1925050503d805f8114610fde576040519150601f19603f3d011682016040523d82523d5f602084013e610fe3565b606091505b50509050806110265760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016105ba565b506110eb565b5f5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af115801561107b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109f9190611716565b6110eb5760405162461bcd60e51b815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e730000000000000060448201526064016105ba565b604080518281524260208201526001600160a01b038816917fe74e5c9d4ac1fc33412485f18c159a0a391efe287ab3fd271123f30e6bacf4e3910160405180910390a25b5f546001600160a01b0316945092505050915091565b5f6007545f03611156575060065490565b6007546004546005546111676106fb565b61117191906115dd565b61117b9190611587565b61118d90670de0b6b3a7640000611587565b611197919061159e565b60065461057391906116de565b5f6111ad611145565b6006556111b86106fb565b6005556001600160a01b038116156111fe576111d381610711565b6001600160a01b0382165f908152600b60209081526040808320939093556006546009909152919020555b5f821161123e5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081c995dd85c9960921b60448201526064016105ba565b60015461124b9083611587565b9150600354421061126b57600254611263908361159e565b6004556112ab565b5f4260035461127a91906115dd565b90505f6004548261128b9190611587565b60025490915061129b82866116de565b6112a5919061159e565b60045550505b6001545f80546040516370a0823160e01b81523060048201529192916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156112f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131b9190611735565b6113259190611587565b905060025481611335919061159e565b60045411156113865760405162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f2068696768000000000000000060448201526064016105ba565b426005819055600254611398916116de565b6003556001547ff397555a45e165ae1e67ccf80e2333d5e8905c4bad48a3127dc9373df8069859906113ca908561159e565b604080519182524260208301520160405180910390a1505050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b0381168114610540575f80fd5b5f806040838503121561141e575f80fd5b8235611429816113f9565b946020939093013593505050565b5f60208284031215611447575f80fd5b8135611452816113f9565b9392505050565b5f82601f830112611468575f80fd5b813567ffffffffffffffff811115611482576114826113e5565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156114b1576114b16113e5565b6040528181528382016020018510156114c8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f606084860312156114f6575f80fd5b8335611501816113f9565b925060208401359150604084013567ffffffffffffffff811115611523575f80fd5b61152f86828701611459565b9150509250925092565b5f60208284031215611549575f80fd5b813567ffffffffffffffff81111561155f575f80fd5b61156b84828501611459565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761079757610797611573565b5f826115b857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156115cd575f80fd5b815160ff81168114611452575f80fd5b8181038181111561079757610797611573565b6001815b600184111561162b5780850481111561160f5761160f611573565b600184161561161d57908102905b60019390931c9280026115f4565b935093915050565b5f8261164157506001610797565b8161164d57505f610797565b8160018114611663576002811461166d57611689565b6001915050610797565b60ff84111561167e5761167e611573565b50506001821b610797565b5060208310610133831016604e8410600b84101617156116ac575081810a610797565b6116b85f1984846115f0565b805f19048211156116cb576116cb611573565b029392505050565b5f6114528383611633565b8082018082111561079757610797611573565b6020808252600b908201526a27b7363c9029ba30b5b2b960a91b604082015260600190565b5f60208284031215611726575f80fd5b81518015158114611452575f80fd5b5f60208284031215611745575f80fd5b5051919050565b5f6020828403121561175c575f80fd5b8151611452816113f9565b60018060a01b038516815260018060a01b0384166020820152826040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f8301168401019150509594505050505056fea2646970667358221220feb8cd5d7f41fe03c7ab4133e8565171e22bcee9f845e750200c7be7a86b886564736f6c634300081a003360a060405234801561000f575f80fd5b5060405161160b38038061160b83398101604081905261002e91610076565b60408051602080820183525f8083528351918201909352918252906003610055838261013b565b506004610062828261013b565b5050506001600160a01b03166080526101f5565b5f60208284031215610086575f80fd5b81516001600160a01b038116811461009c575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806100cb57607f821691505b6020821081036100e957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561013657805f5260205f20601f840160051c810160208510156101145750805b601f840160051c820191505b81811015610133575f8155600101610120565b50505b505050565b81516001600160401b03811115610154576101546100a3565b6101688161016284546100b7565b846100ef565b6020601f82116001811461019a575f83156101835750848201515b5f19600385901b1c1916600184901b178455610133565b5f84815260208120601f198516915b828110156101c957878501518255602094850194600190920191016101a9565b50848210156101e657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6080516113e96102225f395f81816102a701528181610478015281816105fc01526106d501526113e95ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c806370a08231116100b4578063a457c2d711610079578063a457c2d71461027c578063a9059cbb1461028f578063b0df4cab146102a2578063c4d66de8146102c9578063dd62ed3e146102dc578063eb5710d8146102ef575f80fd5b806370a082311461021e57806395d89b41146102465780639711715a1461024e578063981b24d0146102565780639dc29fac14610269575f80fd5b8063313ce567116100fa578063313ce567146101c157806339509351146101db57806340c10f19146101ee5780634ee2cd7e146102035780635439ad8614610216575f80fd5b806306fdde0314610136578063095ea7b31461015457806318160ddd1461017757806321df0da71461018957806323b872dd146101ae575b5f80fd5b61013e61030e565b60405161014b91906110e4565b60405180910390f35b61016761016236600461112f565b6103a0565b604051901515815260200161014b565b6002545b60405190815260200161014b565b6009546001600160a01b03165b6040516001600160a01b03909116815260200161014b565b6101676101bc366004611157565b6103b9565b6101c96103dc565b60405160ff909116815260200161014b565b6101676101e936600461112f565b61044c565b6102016101fc36600461112f565b61046d565b005b61017b61021136600461112f565b6104cc565b61017b610523565b61017b61022c366004611191565b6001600160a01b03165f9081526020819052604090205490565b61013e61052c565b61017b6105aa565b61017b6102643660046111aa565b6105c8565b61020161027736600461112f565b6105f1565b61016761028a36600461112f565b610643565b61016761029d36600461112f565b6106bd565b6101967f000000000000000000000000000000000000000000000000000000000000000081565b6102016102d7366004611191565b6106ca565b61017b6102ea3660046111c1565b6107d1565b61017b6102fd3660046111aa565b5f908152600a602052604090205490565b600954604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301925f9291908290030181865afa158015610355573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261037c9190810190611206565b60405160200161038c91906112d0565b604051602081830303815290604052905090565b5f336103ad8185856107fb565b60019150505b92915050565b5f336103c685828561091f565b6103d1858585610997565b506001949350505050565b6009546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610423573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044791906112eb565b905090565b5f336103ad81858561045e83836107d1565b610468919061131f565b6107fb565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104be5760405162461bcd60e51b81526004016104b590611332565b60405180910390fd5b6104c88282610b44565b5050565b6001600160a01b0382165f908152600560205260408120819081906104f2908590610c0c565b9150915081610518576001600160a01b0385165f9081526020819052604090205461051a565b805b95945050505050565b5f610447610cfc565b600954604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301925f9291908290030181865afa158015610573573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261059a9190810190611206565b60405160200161038c9190611357565b5f6105b3610d06565b5f818152600a60205260409020429055919050565b5f805f6105d6846006610c0c565b91509150816105e7576002546105e9565b805b949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106395760405162461bcd60e51b81526004016104b590611332565b6104c88282610d5e565b5f338161065082866107d1565b9050838110156106b05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104b5565b6103d182868684036107fb565b5f336103ad818585610997565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107125760405162461bcd60e51b81526004016104b590611332565b6009546001600160a01b0316156107615760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064016104b5565b6001600160a01b0381166107af5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b60448201526064016104b5565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b03831661085d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b5565b6001600160a01b0382166108be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b5565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f61092a84846107d1565b90505f19811461099157818110156109845760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b5565b61099184848484036107fb565b50505050565b6001600160a01b0383166109fb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b5565b6001600160a01b038216610a5d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b5565b610a68838383610e96565b6001600160a01b0383165f9081526020819052604090205481811015610adf5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b5565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610991565b6001600160a01b038216610b9a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b5565b610ba55f8383610e96565b8060025f828254610bb6919061131f565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b5f805f8411610c565760405162461bcd60e51b815260206004820152601660248201527504552433230536e617073686f743a20696420697320360541b60448201526064016104b5565b610c5e610cfc565b841115610cad5760405162461bcd60e51b815260206004820152601d60248201527f4552433230536e617073686f743a206e6f6e6578697374656e7420696400000060448201526064016104b5565b5f610cb88486610f03565b84549091508103610ccf575f809250925050610cf5565b6001846001018281548110610ce657610ce661136d565b905f5260205f20015492509250505b9250929050565b5f61044760085490565b5f610d15600880546001019055565b5f610d1e610cfc565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb6781604051610d5191815260200190565b60405180910390a1919050565b6001600160a01b038216610dbe5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b5565b610dc9825f83610e96565b6001600160a01b0382165f9081526020819052604090205481811015610e3c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b5565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610912565b505050565b610ea1838383610fa9565b6001600160a01b03831615801590610ec157506001600160a01b03821615155b15610e915760405162461bcd60e51b8152602060048201526012602482015271151c985b9cd9995c9cc8191a5cd8589b195960721b60448201526064016104b5565b81545f908103610f1457505f6103b3565b82545f905b80821015610f5e575f610f2c8383610ff1565b5f8781526020902090915085908201541115610f4a57809150610f58565b610f5581600161131f565b92505b50610f19565b5f82118015610f88575083610f8586610f78600186611381565b5f91825260209091200190565b54145b15610fa157610f98600183611381565b925050506103b3565b5090506103b3565b6001600160a01b038316610fc857610fc082611012565b610e91611046565b6001600160a01b038216610fdf57610fc083611012565b610fe883611012565b610e9182611012565b5f610fff6002848418611394565b61100b9084841661131f565b9392505050565b6001600160a01b0381165f90815260056020908152604080832091839052909120546110439190611056565b611056565b50565b611054600661103e60025490565b565b5f61105f610cfc565b90508061106b8461109e565b1015610e91578254600180820185555f858152602080822090930193909355938401805494850181558252902090910155565b80545f9081036110af57505f919050565b815482906110bf90600190611381565b815481106110cf576110cf61136d565b905f5260205f2001549050919050565b919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146110df575f80fd5b5f8060408385031215611140575f80fd5b61114983611119565b946020939093013593505050565b5f805f60608486031215611169575f80fd5b61117284611119565b925061118060208501611119565b929592945050506040919091013590565b5f602082840312156111a1575f80fd5b61100b82611119565b5f602082840312156111ba575f80fd5b5035919050565b5f80604083850312156111d2575f80fd5b6111db83611119565b91506111e960208401611119565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611216575f80fd5b815167ffffffffffffffff81111561122c575f80fd5b8201601f8101841361123c575f80fd5b805167ffffffffffffffff811115611256576112566111f2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611285576112856111f2565b60405281815282820160200186101561129c575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b66029ba30b5b2b2160cd1b81525f61100b60078301846112b9565b5f602082840312156112fb575f80fd5b815160ff8116811461100b575f80fd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156103b3576103b361130b565b6020808252600b908201526a27b7363c9029ba30b5b2b960a91b604082015260600190565b611cdd60f21b81525f61100b60028301846112b9565b634e487b7160e01b5f52603260045260245ffd5b818103818111156103b3576103b361130b565b5f826113ae57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220f696d851dd07536739e271378e7f4f777a8d80995661561a19088f3a93978a5f64736f6c634300081a00330000000000000000000000007c4299647e3fbd9f7f40a2b39372fedd7ced3f4d