98 txs
28.7k calls
constructor
constructor(address nftManager_, address feeReceiver_, address customFeeSigner_)
functions
customFeeSigner
viewfunction customFeeSigner() view returns (address)
disabledSigs
viewfunction disabledSigs(bytes) view returns (bool)
FEE_DENOMINATOR
viewfunction FEE_DENOMINATOR() view returns (uint256)
feeReceiver
viewfunction feeReceiver() view returns (address)
fees
viewfunction fees(bytes32 nameHash) view returns (string name, uint256 lpFee, uint256 collectFee, uint256 lockFee, address lockFeeToken)
getFee
viewfunction getFee(string name_) view returns (tuple)
getUserLocks
viewfunction getUserLocks(address user) view returns (uint256[] lockIds)
isSupportedFeeName
viewfunction isSupportedFeeName(string name_) view returns (bool)
locks
viewfunction locks(uint256 lockId) view returns (uint256 lockId, address nftPositionManager, address pendingOwner, address owner, address collector, address pool, uint256 collectFee, uint256 nftId, uint256 startTime, uint256 endTime)
nextLockId
viewfunction nextLockId() view returns (uint256)
onERC721Received
purefunction onERC721Received(address operator, address from, uint256 tokenId, bytes data) pure returns (bytes4)
owner
viewfunction owner() view returns (address)
supportedNftManager
viewfunction supportedNftManager(address nftManager_) view returns (bool)
acceptLock
nonpayablefunction acceptLock(uint256 lockId_)
addOrUpdateFee
nonpayablefunction addOrUpdateFee(string name_, uint256 lpFee_, uint256 collectFee_, uint256 lockFee_, address lockFeeToken_)
addSupportedNftManager
nonpayablefunction addSupportedNftManager(address nftManager_)
adminRefundERC20
nonpayablefunction adminRefundERC20(address token_, address receiver_, uint256 amount_)
adminRefundEth
nonpayablefunction adminRefundEth(uint256 amount_, address receiver_)
collect
nonpayablefunction collect(uint256 lockId_, address recipient_, uint128 amount0Max_, uint128 amount1Max_) returns (uint256 amount0, uint256 amount1, uint256 fee0, uint256 fee1)
decreaseLiquidity
payablefunction decreaseLiquidity(uint256 lockId_, tuple params) payable returns (uint256 amount0, uint256 amount1)
disableSig
nonpayablefunction disableSig(bytes sig)
increaseLiquidity
payablefunction increaseLiquidity(uint256 lockId_, tuple params) payable returns (uint128 liquidity, uint256 amount0, uint256 amount1)
lock
payablefunction lock(address nftManager_, uint256 nftId_, address owner_, address collector_, uint256 endTime_, string feeName_) payable returns (uint256 lockId)
lockWithCustomFee
payablefunction lockWithCustomFee(address nftManager_, uint256 nftId_, address owner_, address collector_, uint256 endTime_, bytes signature_, tuple feeObj_) payable returns (uint256 lockId)
relock
nonpayablefunction relock(uint256 lockId_, uint256 endTime_)
removeFee
nonpayablefunction removeFee(string name_)
renounceOwnership
nonpayablefunction renounceOwnership()
setCollectAddress
nonpayablefunction setCollectAddress(uint256 lockId_, address collector_)
transferLock
nonpayablefunction transferLock(uint256 lockId_, address newOwner_)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unlock
nonpayablefunction unlock(uint256 lockId_)
updateFeeReceiver
nonpayablefunction updateFeeReceiver(address feeReceiver_)
updateFeeSigner
nonpayablefunction updateFeeSigner(address feeSigner_)
events
OnAddFee
event OnAddFee(bytes32 nameHash, string name, uint256 lpFee, uint256 collectFee, uint256 lockFee, address lockFeeToken)
OnAddNftManger
event OnAddNftManger(address nftManger)
OnDecreaseLiquidity
event OnDecreaseLiquidity(uint256 indexed lockId)
OnEditFee
event OnEditFee(bytes32 nameHash, string name, uint256 lpFee, uint256 collectFee, uint256 lockFee, address lockFeeToken)
OnFeeReceiverUpdated
event OnFeeReceiverUpdated(address oldReceiver, address newReceiver)
OnFeeSignerUpdated
event OnFeeSignerUpdated(address oldSigner, address newSigner)
OnIncreaseLiquidity
event OnIncreaseLiquidity(uint256 indexed lockId)
OnLock
event OnLock(uint256 indexed lockId, address nftPositionManager, address owner, uint256 nftId, uint256 endTime)
OnLockPendingTransfer
event OnLockPendingTransfer(uint256 indexed lockId, address previousOwner, address newOwner)
OnLockTransferred
event OnLockTransferred(uint256 indexed lockId, address previousOwner, address newOwner)
OnRelock
event OnRelock(uint256 indexed lockId, uint256 endTime)
OnRemoveFee
event OnRemoveFee(bytes32 nameHash)
OnSetCollector
event OnSetCollector(uint256 indexed lockId, address collector)
OnSignatureDisabled
event OnSignatureDisabled(bytes sig)
OnUnlock
event OnUnlock(uint256 indexed lockId, address owner, uint256 nftId, uint256 unlockedTime)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
errors
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
creation bytecode
0x608060405260016007553480156200001657600080fd5b5060405162004b4338038062004b438339810160408190526200003991620003fd565b33806200006157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200006c8162000141565b50600180556200007e60088462000191565b50600580546001600160a01b038085166001600160a01b03199283161790925560068054928416929091169190911790556040805180820190915260078152661111519055531560ca1b6020820152620000df90603260c8600080620001b1565b60408051808201909152600381526204c56560ec1b60208201526200010b9060506064600080620001b1565b60408051808201909152600381526204c4c560ec1b60208201526200013890601e61015e600080620001b1565b5050506200065d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620001a8836001600160a01b03841662000336565b90505b92915050565b620001bb62000388565b600085604051602001620001d091906200046d565b60408051601f19818403018152828252805160209182012060a084018352898452838201899052838301889052606084018790526001600160a01b03861660808501526000818152600490925291902082519193508291819062000235908262000530565b5060208201516001820155604082015160028083019190915560608301516003830155608090920151600490910180546001600160a01b0319166001600160a01b039092169190911790556200028c9083620003b9565b15620002db577fcef0ac813efcf2b70c3ca9407cb4b9c7a2c13f88069eb984681924530d733714828888888888604051620002cd96959493929190620005fc565b60405180910390a16200032d565b620002e8600283620003d2565b507f57c45aa395835adc7c2b2cacb6fcce511da0c9e4ef3887a310645a944161ad3f8288888888886040516200032496959493929190620005fc565b60405180910390a15b50505050505050565b60008181526001830160205260408120546200037f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001ab565b506000620001ab565b6000546001600160a01b03163314620003b75760405163118cdaa760e01b815233600482015260240162000058565b565b60008181526001830160205260408120541515620001a8565b6000620001a8838362000336565b80516001600160a01b0381168114620003f857600080fd5b919050565b6000806000606084860312156200041357600080fd5b6200041e84620003e0565b92506200042e60208501620003e0565b91506200043e60408501620003e0565b90509250925092565b60005b83811015620004645781810151838201526020016200044a565b50506000910152565b600082516200048181846020870162000447565b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004b657607f821691505b602082108103620004d757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200052b57600081815260208120601f850160051c81016020861015620005065750805b601f850160051c820191505b81811015620005275782815560010162000512565b5050505b505050565b81516001600160401b038111156200054c576200054c6200048b565b62000564816200055d8454620004a1565b84620004dd565b602080601f8311600181146200059c5760008415620005835750858301515b600019600386901b1c1916600185901b17855562000527565b600085815260208120601f198616915b82811015620005cd57888601518255948401946001909101908401620005ac565b5085821015620005ec5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600086518060c0840152620006238160e0850160208b0162000447565b604083019690965250606081019390935260808301919091526001600160a01b031660a082015260e0601f909201601f1916010192915050565b6144d6806200066d6000396000f3fe6080604052600436106101ee5760003560e01c806387d8de3d1161010d578063c69bebe4116100a0578063ed1eee681161006f578063ed1eee681461060b578063f0582e1414610638578063f11478f814610658578063f2fde38b14610680578063f4dadc61146106a057600080fd5b8063c69bebe414610584578063cdb5661f146105a4578063d5fdb732146105d5578063d73792a9146105f557600080fd5b8063b2fb30cb116100dc578063b2fb30cb14610504578063b3f0067414610524578063b48dd3be14610544578063b707a2881461056457600080fd5b806387d8de3d146104935780638da5cb5b146104a6578063ab9ae180146104c4578063b0834893146104e457600080fd5b80632473a6b2116101855780636518a0b3116101545780636518a0b3146104275780636850cb241461044b5780636ec3af851461046b578063715018a61461047e57600080fd5b80632473a6b21461036c578063260e12b0146103a7578063280f3867146103e75780636198e3391461040757600080fd5b8063150b7a02116101c1578063150b7a021461029257806317d616a0146102d7578063186941551461030757806323a35de91461033f57600080fd5b806306f9b07a146101f3578063093cf391146102155780630d12033114610235578063100fc94314610272575b600080fd5b3480156101ff57600080fd5b5061021361020e3660046138ac565b61077e565b005b34801561022157600080fd5b506102136102303660046138c9565b6107d2565b34801561024157600080fd5b50600654610255906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561027e57600080fd5b5061021361028d3660046139ae565b61094c565b34801561029e57600080fd5b506102be6102ad366004613a1d565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610269565b3480156102e357600080fd5b506102f76102f2366004613abc565b610ac1565b6040519015158152602001610269565b61031a610315366004613af9565b610b01565b604080516001600160801b039094168452602084019290925290820152606001610269565b34801561034b57600080fd5b5061035f61035a3660046138ac565b610f96565b6040516102699190613b31565b34801561037857600080fd5b506102f7610387366004613abc565b8051602081830181018051600c8252928201919093012091525460ff1681565b3480156103b357600080fd5b506103c76103c2366004613b8a565b610fc0565b604080519485526020850193909352918301526060820152608001610269565b3480156103f357600080fd5b50610213610402366004613bdd565b610ff8565b34801561041357600080fd5b506102136104223660046138c9565b611021565b34801561043357600080fd5b5061043d60075481565b604051908152602001610269565b34801561045757600080fd5b50610213610466366004613abc565b6112c2565b61043d610479366004613c1e565b61132a565b34801561048a57600080fd5b5061021361143c565b61043d6104a1366004613d31565b611450565b3480156104b257600080fd5b506000546001600160a01b0316610255565b3480156104d057600080fd5b506102136104df366004613db8565b6115a0565b3480156104f057600080fd5b506102136104ff3660046138ac565b611661565b34801561051057600080fd5b5061021361051f366004613de8565b6116d2565b34801561053057600080fd5b50600554610255906001600160a01b031681565b34801561055057600080fd5b5061021361055f366004613db8565b61181d565b34801561057057600080fd5b5061021361057f366004613db8565b6118ec565b34801561059057600080fd5b5061021361059f3660046138ac565b6119f6565b3480156105b057600080fd5b506105c46105bf3660046138c9565b611a67565b604051610269959493929190613e5a565b3480156105e157600080fd5b506102136105f0366004613abc565b611b27565b34801561060157600080fd5b5061043d61271081565b34801561061757600080fd5b5061062b610626366004613abc565b611c90565b6040516102699190613e9a565b34801561064457600080fd5b506102f76106533660046138ac565b611e1e565b61066b610666366004613ef2565b611e2b565b60408051928352602083019190915201610269565b34801561068c57600080fd5b5061021361069b3660046138ac565b612116565b3480156106ac57600080fd5b5061071e6106bb3660046138c9565b600a60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460099099015497986001600160a01b039788169896881697958616969486169590931693919290918a565b604080519a8b526001600160a01b03998a1660208c0152978916978a019790975294871660608901529286166080880152941660a086015260c085019390935260e084019290925261010083019190915261012082015261014001610269565b610786612154565b610791600882612181565b506040516001600160a01b03821681527fff6127f8243e336003b53caa06a61be0a98e6a527cfd0b071872424c5d916e4a906020015b60405180910390a150565b60075481106107fc5760405162461bcd60e51b81526004016107f390613f1c565b60405180910390fd5b6000818152600a602052604090206002015433906001600160a01b0316811461085a5760405162461bcd60e51b815260206004820152601060248201526f2737ba103832b73234b733a7bbb732b960811b60448201526064016107f3565b6000828152600a60209081526040918290206003015482516001600160a01b0391821681529084169181019190915283917f977f200b2646b170d74b50cb3968700a2cc1884b0f7918d49efdb96302cb1854910160405180910390a26000828152600a60209081526040808320600301546001600160a01b03168352600b90915290206108e79083612196565b506001600160a01b0381166000908152600b6020526040902061090a90836121a2565b506000918252600a60205260409091206002810180546001600160a01b0319908116909155600390910180549091166001600160a01b03909216919091179055565b610954612154565b6000856040516020016109679190613f44565b60408051601f19818403018152828252805160209182012060a084018352898452838201899052838301889052606084018790526001600160a01b0386166080850152600081815260049092529190208251919350829181906109ca9082613fe0565b5060208201516001820155604082015160028083019190915560608301516003830155608090920151600490910180546001600160a01b0319166001600160a01b03909216919091179055610a1f90836121ae565b15610a6a577fcef0ac813efcf2b70c3ca9407cb4b9c7a2c13f88069eb984681924530d733714828888888888604051610a5d969594939291906140a0565b60405180910390a1610ab8565b610a756002836121a2565b507f57c45aa395835adc7c2b2cacb6fcce511da0c9e4ef3887a310645a944161ad3f828888888888604051610aaf969594939291906140a0565b60405180910390a15b50505050505050565b60008082604051602001610ad59190613f44565b60408051601f1981840301815291905280516020909101209050610afa6002826121ae565b9392505050565b6000806000610b0e6121c6565b6000858152600a60209081526040918290208251610140810184528154815260018201546001600160a01b03908116938201939093526002820154831693810193909352600381015482166060840152600481015482166080840152600581015490911660a0830152600681015460c0830152600781015460e083018190526008820154610100840152600990910154610120830152853514610be45760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a590813919517d25160921b60448201526064016107f3565b60008082602001516001600160a01b03166399fbab888460e001516040518263ffffffff1660e01b8152600401610c1d91815260200190565b61018060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f9190614127565b50506040516370a0823160e01b8152306004820152979b5095995060009850506001600160a01b038a1696506370a08231956024019450610ca09350505050565b602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190614208565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190614208565b9050610d618433308c602001356121f0565b610d718333308c604001356121f0565b610d848486602001518b602001356122fa565b610d978386602001518b604001356122fa565b6020808601516040805163219f5d1760e01b81528c356004820152928c013560248401528b0135604483015260608b0135606483015260808b0135608483015260a08b013560a48301526001600160a01b03169063219f5d179060c4016060604051808303816000875af1158015610e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e379190614221565b6040516370a0823160e01b8152306004820152929a50909850965060009083906001600160a01b038716906370a0823190602401602060405180830381865afa158015610e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eac9190614208565b610eb6919061426e565b6040516370a0823160e01b815230600482015290915060009083906001600160a01b038716906370a0823190602401602060405180830381865afa158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f269190614208565b610f30919061426e565b90508115610f4357610f438633846123fa565b8015610f5457610f548533836123fa565b6040518c907f94c501c466d590ed97ef3d786c5fa1a7a4a5227f599f2546df3ea86389b534f990600090a250505050505050610f8f60018055565b9250925092565b6001600160a01b0381166000908152600b60205260409020606090610fba906124f3565b92915050565b600080600080610fce6121c6565b610fda88888888612500565b92965090945092509050610fed60018055565b945094509450949050565b611000612154565b6110086121c6565b6110138383836123fa565b61101c60018055565b505050565b8060075481106110435760405162461bcd60e51b81526004016107f390613f1c565b6000818152600a60205260409020600301546001600160a01b0316331461107c5760405162461bcd60e51b81526004016107f390614281565b6000828152600a60209081526040918290208251610140810184528154815260018201546001600160a01b03908116938201939093526002820154831693810193909352600381015482166060840152600481015482166080840152600581015490911660a0830152600681015460c0830152600781015460e0830152600881015461010083015260090154610120820181905242116111485760405162461bcd60e51b8152602060048201526007602482015266139bdd081e595d60ca1b60448201526064016107f3565b61115f8382606001516001600160801b0380612500565b5050506020820151606083015160e0840151604051632142170760e11b81523060048201526001600160a01b0392831660248201526044810191909152911691506342842e0e90606401600060405180830381600087803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b50505060608201516001600160a01b03166000908152600b60205260409020611201915084612196565b5060608181015160e0830151604080516001600160a01b039093168352602083019190915242828201525185927f462608836dd129ef58f79f0a556fe285515f86287c758ea37a6d2f0a052e3f9d928290030190a250506000908152600a602052604081208181556001810180546001600160a01b0319908116909155600282018054821690556003820180548216905560048201805482169055600582018054909116905560068101829055600781018290556008810182905560090155565b6112ca612154565b6001600c826040516112dc9190613f44565b908152604051908190036020018120805492151560ff19909316929092179091557fc19cc6d72b61c6ab50ce499b71c09e6c79b65906c65247abc661980f5e142b22906107c79083906142a9565b60006001600160a01b03851661137b5760405162461bcd60e51b815260206004820152601660248201527510dbdb1b1958dd1059191c995cdcc81a5b9d985b1a5960521b60448201526064016107f3565b4284116113c35760405162461bcd60e51b8152602060048201526016602482015275456e6454696d65203c3d2063757272656e7454696d6560501b60448201526064016107f3565b6113cc88611e1e565b6114185760405162461bcd60e51b815260206004820181905260248201527f6e6674506f736974696f6e4d616e61676572206e6f7420737570706f7274656460448201526064016107f3565b6114228284612a79565b611430888888888887612bc4565b98975050505050505050565b611444612154565b61144e600061310c565b565b60006001600160a01b0384166114a15760405162461bcd60e51b815260206004820152601660248201527510dbdb1b1958dd1059191c995cdcc81a5b9d985b1a5960521b60448201526064016107f3565b4283116114e95760405162461bcd60e51b8152602060048201526016602482015275456e6454696d65203c3d2063757272656e7454696d6560501b60448201526064016107f3565b6114f282610ac1565b6115305760405162461bcd60e51b815260206004820152600f60248201526e11995953985b59481a5b9d985b1a59608a1b60448201526064016107f3565b61153987611e1e565b6115855760405162461bcd60e51b815260206004820181905260248201527f6e6674506f736974696f6e4d616e61676572206e6f7420737570706f7274656460448201526064016107f3565b600061159083611c90565b9050611430888888888886612bc4565b6115a8612154565b6115b06121c6565b6000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146115fd576040519150601f19603f3d011682016040523d82523d6000602084013e611602565b606091505b50509050806116535760405162461bcd60e51b815260206004820152601960248201527f47617320746f6b656e207472616e73666572206661696c65640000000000000060448201526064016107f3565b5061165d60018055565b5050565b611669612154565b600654604080516001600160a01b03928316815291831660208301527f32e004fe7121682349ed511e2414e25e6dc53f3a6db355f0af4724b4dc17c810910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b8160075481106116f45760405162461bcd60e51b81526004016107f390613f1c565b6000818152600a60205260409020600301546001600160a01b0316331461172d5760405162461bcd60e51b81526004016107f390614281565b6117356121c6565b6000838152600a60205260409020600981015483116117965760405162461bcd60e51b815260206004820152601960248201527f456e6454696d65203c3d2063757272656e74456e645469656d0000000000000060448201526064016107f3565b4283116117d65760405162461bcd60e51b815260206004820152600e60248201526d456e6454696d65203c3d206e6f7760901b60448201526064016107f3565b6009810183905560405183815284907f34fc5c313b2fd97c2b528805434c6cb36ab482f72af6117a52208cf18874fdf4906020015b60405180910390a25061101c60018055565b81600754811061183f5760405162461bcd60e51b81526004016107f390613f1c565b6000818152600a60205260409020600301546001600160a01b031633146118785760405162461bcd60e51b81526004016107f390614281565b6000838152600a6020526040902060020180546001600160a01b0319166001600160a01b038416179055827f2ab916445cd7f71b7d22f037187a5e1b6086c455fa944619946ca72b62030ca233604080516001600160a01b03928316815291861660208301520160405180910390a2505050565b81600754811061190e5760405162461bcd60e51b81526004016107f390613f1c565b6000818152600a60205260409020600301546001600160a01b031633146119475760405162461bcd60e51b81526004016107f390614281565b61194f6121c6565b6001600160a01b0382166119945760405162461bcd60e51b815260206004820152600c60248201526b21a7a62622a1aa2fa0a2222960a11b60448201526064016107f3565b6000838152600a60209081526040918290206004810180546001600160a01b0319166001600160a01b03871690811790915592519283529185917fbf72678a283f17a2d52bd1bd823f5fcd1f921056005db4c2ac6e29f88da5b754910161180b565b6119fe612154565b600554604080516001600160a01b03928316815291831660208301527f02cbe864dd291b617018e5a2181cfd770c54bf3fba21fc323434c694b3b2ad1f910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b600460205260009081526040902080548190611a8290613f60565b80601f0160208091040260200160405190810160405280929190818152602001828054611aae90613f60565b8015611afb5780601f10611ad057610100808354040283529160200191611afb565b820191906000526020600020905b815481529060010190602001808311611ade57829003601f168201915b50505050600183015460028401546003850154600490950154939491939092506001600160a01b031685565b611b2f612154565b600081604051602001611b429190613f44565b604051602081830303815290604052805190602001209050604051602001611b7790661111519055531560ca1b815260070190565b604051602081830303815290604052805190602001208103611bc55760405162461bcd60e51b81526020600482015260076024820152661111519055531560ca1b60448201526064016107f3565b611bd06002826121ae565b611c0d5760405162461bcd60e51b815260206004820152600e60248201526d466565206e6f742065786973747360901b60448201526064016107f3565b611c18600282612196565b50600081815260046020526040812090611c328282613849565b5060006001820181905560028201819055600382015560040180546001600160a01b03191690556040518181527fb2c474098bd86300759342af0b60dbf39dcf9552246e0b7ffd3c19a4e3e906059060200160405180910390a15050565b611ccb6040518060a001604052806060815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b600082604051602001611cde9190613f44565b60408051601f1981840301815291905280516020909101209050611d036002826121ae565b611d3b5760405162461bcd60e51b81526020600482015260096024820152681393d5081193d5539160ba1b60448201526064016107f3565b60008181526004602052604090819020815160a08101909252805482908290611d6390613f60565b80601f0160208091040260200160405190810160405280929190818152602001828054611d8f90613f60565b8015611ddc5780601f10611db157610100808354040283529160200191611ddc565b820191906000526020600020905b815481529060010190602001808311611dbf57829003601f168201915b50505091835250506001820154602082015260028201546040820152600382015460608201526004909101546001600160a01b03166080909101529392505050565b6000610fba60088361315c565b600080836007548110611e505760405162461bcd60e51b81526004016107f390613f1c565b6000818152600a60205260409020600301546001600160a01b03163314611e895760405162461bcd60e51b81526004016107f390614281565b611e916121c6565b6000858152600a60209081526040918290208251610140810184528154815260018201546001600160a01b03908116938201939093526002820154831693810193909352600381015482166060840152600481015482166080840152600581015490911660a0830152600681015460c0830152600781015460e083018190526008820154610100840152600990910154610120830152853514611f675760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a590813919517d25160921b60448201526064016107f3565b4281610120015110611fa55760405162461bcd60e51b81526020600482015260076024820152661393d50816515560ca1b60448201526064016107f3565b611fb886336001600160801b0380612500565b5050505080602001516001600160a01b0316630c49ccbe866040518263ffffffff1660e01b8152600401611fec91906142bc565b60408051808303816000875af115801561200a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202e9190614306565b6020808401516040805160808101825260e087015181526060808801516001600160a01b03908116958301959095526001600160801b0382840181905290820152905163fc6f786560e01b8152949850929650169163fc6f7865916120959160040161432a565b60408051808303816000875af11580156120b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d79190614306565b505060405186907fabcec736cf7ffb1e2406a7d4f50174d68847773bd8bf43d6f9ee131a24121a7d90600090a25061210e60018055565b509250929050565b61211e612154565b6001600160a01b03811661214857604051631e4fbdf760e01b8152600060048201526024016107f3565b6121518161310c565b50565b6000546001600160a01b0316331461144e5760405163118cdaa760e01b81523360048201526024016107f3565b6000610afa836001600160a01b03841661317e565b6000610afa83836131cd565b6000610afa838361317e565b60008181526001830160205260408120541515610afa565b6002600154036121e957604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916122549190613f44565b6000604051808303816000865af19150503d8060008114612291576040519150601f19603f3d011682016040523d82523d6000602084013e612296565b606091505b50915091508180156122c05750805115806122c05750808060200190518101906122c0919061436d565b6122f25760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b60448201526064016107f3565b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916123569190613f44565b6000604051808303816000865af19150503d8060008114612393576040519150601f19603f3d011682016040523d82523d6000602084013e612398565b606091505b50915091508180156123c25750805115806123c25750808060200190518101906123c2919061436d565b6123f35760405162461bcd60e51b8152602060048201526002602482015261534160f01b60448201526064016107f3565b5050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916124569190613f44565b6000604051808303816000865af19150503d8060008114612493576040519150601f19603f3d011682016040523d82523d6000602084013e612498565b606091505b50915091508180156124c25750805115806124c25750808060200190518101906124c2919061436d565b6123f35760405162461bcd60e51b815260206004820152600260248201526114d560f21b60448201526064016107f3565b60606000610afa836132c0565b6000848152600a602090815260408083208151610140810183528154815260018201546001600160a01b039081169482019490945260028201548416928101929092526003810154831660608301819052600482015484166080840152600582015490931660a0830152600681015460c0830152600781015460e08301526008810154610100830152600901546101208201528291829182913314806125b2575060808101516001600160a01b031633145b6125ea5760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b60448201526064016107f3565b8060c001516000036126b15780602001516001600160a01b031663fc6f786560405180608001604052808460e0015181526020018b6001600160a01b031681526020018a6001600160801b03168152602001896001600160801b03168152506040518263ffffffff1660e01b8152600401612665919061432a565b60408051808303816000875af1158015612683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a79190614306565b9095509350612a6d565b60008082602001516001600160a01b03166399fbab888460e001516040518263ffffffff1660e01b81526004016126ea91815260200190565b61018060405180830381865afa158015612708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272c9190614127565b50506040516370a0823160e01b8152306004820152979b5095995060009850506001600160a01b038a1696506370a0823195602401945061276d9350505050565b602060405180830381865afa15801561278a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ae9190614208565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156127f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281c9190614208565b905084602001516001600160a01b031663fc6f786560405180608001604052808860e001518152602001306001600160a01b031681526020018e6001600160801b031681526020018d6001600160801b03168152506040518263ffffffff1660e01b815260040161288d919061432a565b60408051808303816000875af11580156128ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cf9190614306565b50506040516370a0823160e01b815230600482015282906001600160a01b038616906370a0823190602401602060405180830381865afa158015612917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293b9190614208565b612945919061426e565b6040516370a0823160e01b815230600482015290925081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561298e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b29190614208565b6129bc919061426e565b90508115612a13576127108560c00151836129d7919061438f565b6129e191906143a6565b6005549097506129fc9085906001600160a01b0316896123fa565b612a06878361426e565b9850612a13848d8b6123fa565b8015612a68576127108560c0015182612a2c919061438f565b612a3691906143a6565b600554909650612a519084906001600160a01b0316886123fa565b612a5b868261426e565b9750612a68838d8a6123fa565b505050505b50945094509450949050565b600c81604051612a899190613f44565b9081526040519081900360200190205460ff1615612ade5760405162461bcd60e51b815260206004820152601260248201527114da59db985d1d5c9948191a5cd8589b195960721b60448201526064016107f3565b60004633845160208087015160408089015160608a015160808b01519251612b0d9897969592939192016143c8565b6040516020818303038152906040528051906020012090506000612b5e827f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b90506000612b6c828561331c565b6006549091506001600160a01b038083169116146123f35760405162461bcd60e51b815260206004820152601560248201527411995954da59db995c881b9bdd08185b1b1bddd959605a1b60448201526064016107f3565b606081015160009015612bda57612bda82613346565b6001600160a01b0387166342842e0e336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101899052606401600060405180830381600087803b158015612c3857600080fd5b505af1158015612c4c573d6000803e3d6000fd5b505050506000612c5c88886133dc565b604080516080810182528981526001600160a01b0389811660208301526001600160801b038284018190526060830152915163fc6f786560e01b8152929350908a169163fc6f786591612cb19160040161432a565b60408051808303816000875af1158015612ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf39190614306565b5050602083015115612eac576000612d0b8989613551565b9050886001600160a01b0316630c49ccbe6040518060a001604052808b81526020016127108860200151866001600160801b0316612d49919061438f565b612d5391906143a6565b6001600160801b031681526020016000815260200160008152602001428152506040518263ffffffff1660e01b8152600401612dcd9190600060a082019050825182526001600160801b03602084015116602083015260408301516040830152606083015160608301526080830151608083015292915050565b60408051808303816000875af1158015612deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0f9190614306565b5050604080516080810182528981526005546001600160a01b0390811660208301526001600160801b038284018190526060830152915163fc6f786560e01b8152918b169163fc6f786591612e669160040161432a565b60408051808303816000875af1158015612e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea89190614306565b5050505b600060405180610140016040528060075481526020018a6001600160a01b0316815260200160006001600160a01b03168152602001886001600160a01b03168152602001876001600160a01b03168152602001836001600160a01b031681526020018560400151815260200189815260200142815260200186815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c0820151816006015560e08201518160070155610100820151816008015561012082015181600901559050506130958160000151600b60008a6001600160a01b03166001600160a01b031681526020019081526020016000206121a290919063ffffffff16565b50600780549060006130a683614428565b90915550508051604080516001600160a01b03808d1682528a1660208201529081018a9052606081018790527fc1d62c166ce7dbf25ddb2c2746bfe7d0a3a9c465f1190f5b2c1148177508b6619060800160405180910390a25198975050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811660009081526001830160205260408120541515610afa565b60008181526001830160205260408120546131c557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610fba565b506000610fba565b600081815260018301602052604081205480156132b65760006131f160018361426e565b85549091506000906132059060019061426e565b905080821461326a57600086600001828154811061322557613225614441565b906000526020600020015490508087600001848154811061324857613248614441565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061327b5761327b614457565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610fba565b6000915050610fba565b60608160000180548060200260200160405190810160405280929190818152602001828054801561331057602002820191906000526020600020905b8154815260200190600101908083116132fc575b50505050509050919050565b60008060008061332c86866135d4565b92509250925061333c828261361e565b5090949350505050565b60808101516001600160a01b03166133b4578060600151341461339e5760405162461bcd60e51b815260206004820152601060248201526f496e73756666696369656e742046656560801b60448201526064016107f3565b600554612151906001600160a01b0316346136d7565b61215181608001516133c33390565b60055460608501516001600160a01b03909116906121f0565b600080600080856001600160a01b03166399fbab88866040518263ffffffff1660e01b815260040161341091815260200190565b61018060405180830381865afa15801561342e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134529190614127565b5050505050505094509450945050506000866001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c5919061446d565b604051630b4c774160e11b81526001600160a01b038681166004830152858116602483015262ffffff8516604483015291925090821690631698ee8290606401602060405180830381865afa158015613522573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613546919061446d565b979650505050505050565b60405163133f757160e31b81526004810182905260009081906001600160a01b038516906399fbab889060240161018060405180830381865afa15801561359c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c09190614127565b50929e9d5050505050505050505050505050565b6000806000835160410361360e5760208401516040850151606086015160001a6136008882858561377a565b955095509550505050610f8f565b5050815160009150600290610f8f565b60008260038111156136325761363261448a565b0361363b575050565b600182600381111561364f5761364f61448a565b0361366d5760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156136815761368161448a565b036136a25760405163fce698f760e01b8152600481018290526024016107f3565b60038260038111156136b6576136b661448a565b0361165d576040516335e2f38360e21b8152600481018290526024016107f3565b604080516000808252602082019092526001600160a01b0384169083906040516137019190613f44565b60006040518083038185875af1925050503d806000811461373e576040519150601f19603f3d011682016040523d82523d6000602084013e613743565b606091505b505090508061101c5760405162461bcd60e51b815260206004820152600360248201526253544560e81b60448201526064016107f3565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156137b5575060009150600390508261383f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613809573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166138355750600092506001915082905061383f565b9250600091508190505b9450945094915050565b50805461385590613f60565b6000825580601f10613865575050565b601f01602090049060005260206000209081019061215191905b80821115613893576000815560010161387f565b5090565b6001600160a01b038116811461215157600080fd5b6000602082840312156138be57600080fd5b8135610afa81613897565b6000602082840312156138db57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561391b5761391b6138e2565b60405290565b600082601f83011261393257600080fd5b813567ffffffffffffffff8082111561394d5761394d6138e2565b604051601f8301601f19908116603f01168101908282118183101715613975576139756138e2565b8160405283815286602085880101111561398e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156139c657600080fd5b853567ffffffffffffffff8111156139dd57600080fd5b6139e988828901613921565b9550506020860135935060408601359250606086013591506080860135613a0f81613897565b809150509295509295909350565b600080600080600060808688031215613a3557600080fd5b8535613a4081613897565b94506020860135613a5081613897565b935060408601359250606086013567ffffffffffffffff80821115613a7457600080fd5b818801915088601f830112613a8857600080fd5b813581811115613a9757600080fd5b896020828501011115613aa957600080fd5b9699959850939650602001949392505050565b600060208284031215613ace57600080fd5b813567ffffffffffffffff811115613ae557600080fd5b613af184828501613921565b949350505050565b60008082840360e0811215613b0d57600080fd5b8335925060c0601f1982011215613b2357600080fd5b506020830190509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613b6957835183529284019291840191600101613b4d565b50909695505050505050565b6001600160801b038116811461215157600080fd5b60008060008060808587031215613ba057600080fd5b843593506020850135613bb281613897565b92506040850135613bc281613b75565b91506060850135613bd281613b75565b939692955090935050565b600080600060608486031215613bf257600080fd5b8335613bfd81613897565b92506020840135613c0d81613897565b929592945050506040919091013590565b600080600080600080600060e0888a031215613c3957600080fd5b8735613c4481613897565b9650602088013595506040880135613c5b81613897565b94506060880135613c6b81613897565b93506080880135925060a088013567ffffffffffffffff80821115613c8f57600080fd5b613c9b8b838c01613921565b935060c08a0135915080821115613cb157600080fd5b9089019060a0828c031215613cc557600080fd5b613ccd6138f8565b823582811115613cdc57600080fd5b613ce88d828601613921565b82525060208301356020820152604083013560408201526060830135606082015260808301359250613d1983613897565b82608082015280935050505092959891949750929550565b60008060008060008060c08789031215613d4a57600080fd5b8635613d5581613897565b9550602087013594506040870135613d6c81613897565b93506060870135613d7c81613897565b92506080870135915060a087013567ffffffffffffffff811115613d9f57600080fd5b613dab89828a01613921565b9150509295509295509295565b60008060408385031215613dcb57600080fd5b823591506020830135613ddd81613897565b809150509250929050565b60008060408385031215613dfb57600080fd5b50508035926020909101359150565b60005b83811015613e25578181015183820152602001613e0d565b50506000910152565b60008151808452613e46816020860160208601613e0a565b601f01601f19169290920160200192915050565b60a081526000613e6d60a0830188613e2e565b602083019690965250604081019390935260608301919091526001600160a01b0316608090910152919050565b602081526000825160a06020840152613eb660c0840182613e2e565b905060208401516040840152604084015160608401526060840151608084015260018060a01b0360808501511660a08401528091505092915050565b60008082840360c0811215613f0657600080fd5b8335925060a0601f1982011215613b2357600080fd5b6020808252600e908201526d125b9d985b1a59081b1bd8dad25960921b604082015260600190565b60008251613f56818460208701613e0a565b9190910192915050565b600181811c90821680613f7457607f821691505b602082108103613f9457634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561101c57600081815260208120601f850160051c81016020861015613fc15750805b601f850160051c820191505b818110156122f257828155600101613fcd565b815167ffffffffffffffff811115613ffa57613ffa6138e2565b61400e816140088454613f60565b84613f9a565b602080601f831160018114614043576000841561402b5750858301515b600019600386901b1c1916600185901b1785556122f2565b600085815260208120601f198616915b8281101561407257888601518255948401946001909101908401614053565b50858210156140905787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c0602082015260006140b960c0830188613e2e565b604083019690965250606081019390935260808301919091526001600160a01b031660a09091015292915050565b80516140f281613897565b919050565b805162ffffff811681146140f257600080fd5b8051600281900b81146140f257600080fd5b80516140f281613b75565b6000806000806000806000806000806000806101808d8f03121561414a57600080fd5b8c516bffffffffffffffffffffffff8116811461416657600080fd5b9b5061417460208e016140e7565b9a5061418260408e016140e7565b995061419060608e016140e7565b985061419e60808e016140f7565b97506141ac60a08e0161410a565b96506141ba60c08e0161410a565b95506141c860e08e0161411c565b94506101008d015193506101208d015192506141e76101408e0161411c565b91506141f66101608e0161411c565b90509295989b509295989b509295989b565b60006020828403121561421a57600080fd5b5051919050565b60008060006060848603121561423657600080fd5b835161424181613b75565b602085015160409095015190969495509392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610fba57610fba614258565b6020808252600e908201526d2737ba103637b1b59037bbb732b960911b604082015260600190565b602081526000610afa6020830184613e2e565b8135815260a0810160208301356142d281613b75565b6001600160801b03811660208401525060408301356040830152606083013560608301526080830135608083015292915050565b6000806040838503121561431957600080fd5b505080516020909101519092909150565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b60006020828403121561437f57600080fd5b81518015158114610afa57600080fd5b8082028115828204841417610fba57610fba614258565b6000826143c357634e487b7160e01b600052601260045260246000fd5b500490565b87815260006bffffffffffffffffffffffff19808960601b16602084015287516143f9816034860160208c01613e0a565b9092016034810196909652506054850193909352607484019190915260601b16609482015260a8019392505050565b60006001820161443a5761443a614258565b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561447f57600080fd5b8151610afa81613897565b634e487b7160e01b600052602160045260246000fdfea26469706673582212204e999769b525f32269b473cc97c3fce5e04b4e5633adfdd2270a7e7912eaff9f64736f6c6343000814003300000000000000000000000003a520b32c04bf3beef7beb72e919cf822ed34f1000000000000000000000000521faacdfa097ad35a32387727e468f7fd032fd6000000000000000000000000333a16307d8bef80616f719e958af5c76290ca85