1.9k txs
435.4k calls
constructor
constructor(address _posm, address _permit2, address _poolManager, address _universalRouter, address _router, address _feeAddress)
functions
collectionOwnerLaunches
viewfunction collectionOwnerLaunches() view returns (bool)
collectionToNFTStrategy
viewfunction collectionToNFTStrategy(address) view returns (address)
DEADADDRESS
viewfunction DEADADDRESS() view returns (address)
deployerBuying
viewfunction deployerBuying() view returns (bool)
feeAddress
viewfunction feeAddress() view returns (address)
feeToLaunch
viewfunction feeToLaunch() view returns (uint256)
hookAddress
viewfunction hookAddress() view returns (address)
lastTwapBlock
viewfunction lastTwapBlock() view returns (uint256)
listOfRouters
viewfunction listOfRouters(address) view returns (bool)
loadingLiquidity
viewfunction loadingLiquidity() view returns (bool)
nftStrategyToCollection
viewfunction nftStrategyToCollection(address) view returns (address)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
PNKSTR_ADDRESS
viewfunction PNKSTR_ADDRESS() view returns (address)
PNKSTR_HOOK_ADDRESS
viewfunction PNKSTR_HOOK_ADDRESS() view returns (address)
publicLaunches
viewfunction publicLaunches() view returns (bool)
routerRestrict
viewfunction routerRestrict() view returns (bool)
twapDelayInBlocks
viewfunction twapDelayInBlocks() view returns (uint256)
twapIncrement
viewfunction twapIncrement() view returns (uint256)
validTransfer
viewfunction validTransfer(address from, address to, address tokenAddress) view returns (bool)
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
launchNFTStrategy
payablefunction launchNFTStrategy(address collection, string tokenName, string tokenSymbol) payable returns (address)
ownerLaunchNFTStrategy
payablefunction ownerLaunchNFTStrategy(address collection, string tokenName, string tokenSymbol, address collectionOwner) payable returns (address)
processTokenTwap
nonpayablefunction processTokenTwap()
renounceOwnership
payablefunction renounceOwnership() payable
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
setCollectionOwnerLaunches
nonpayablefunction setCollectionOwnerLaunches(bool _collectionOwnerLaunches)
setPublicLaunches
nonpayablefunction setPublicLaunches(bool _publicLaunches)
setRouter
nonpayablefunction setRouter(address _router, bool status)
setRouterRestrict
nonpayablefunction setRouterRestrict(bool status)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
updateFeeToLaunch
nonpayablefunction updateFeeToLaunch(uint256 _feeToLaunch)
updateHookAddress
nonpayablefunction updateHookAddress(address _hookAddress)
updatePriceMultiplier
nonpayablefunction updatePriceMultiplier(address nftStrategy, uint256 newMultiplier)
updateTokenName
nonpayablefunction updateTokenName(address nftStrategy, string tokenName)
updateTokenSymbol
nonpayablefunction updateTokenSymbol(address nftStrategy, string tokenSymbol)
events
NFTStrategyLaunched
event NFTStrategyLaunched(address indexed collection, address indexed nftStrategy, string tokenName, string tokenSymbol)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
errors
AlreadyInitialized
error AlreadyInitialized()
CannotLaunch
error CannotLaunch()
CollectionAlreadyLaunched
error CollectionAlreadyLaunched()
GatedByCollectionOwner
error GatedByCollectionOwner()
HookNotSet
error HookNotSet()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NoETHToTwap
error NoETHToTwap()
NoHandoverRequest
error NoHandoverRequest()
NotERC721
error NotERC721()
Reentrancy
error Reentrancy()
TwapDelayNotMet
error TwapDelayNotMet()
Unauthorized
error Unauthorized()
WrongEthAmount
error WrongEthAmount()
creation bytecode
0x610100346101e457601f61400938819003918201601f19168301916001600160401b038311848410176101e85780849260c0946040528339810103126101e457610048816101fc565b90610055602082016101fc565b90610062604082016101fc565b61006e606083016101fc565b608083015190936001600160a01b0382169390918490036101e45760a061009591016101fc565b670de0b6b3a76400006005556001600681905560c08590526001600160a01b03968716608081905292871660a081905260e094909452305f90815260096020526040808220805460ff1990811685179091559482528082208054861684179055948152848120805485168317905594855283852080548416821790559486168452918320805482168517905561dead83527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb193075003785805482168517905560088054909116909317909255600480546001600160a01b0319169390921692909217905533638b78c6d819819055907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3604051613df89081610211823960805181611a07015260a051816119e3015260c0518181816109e901528181610c50015261119b015260e051816115320152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101e45756fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630b6fe6e11461131b575080630ff3c28b146112f95780631157e189146110c957806312dda99a14610b185780631803e28414610afb5780631832e35a14610aba5780631db52755146108c45780632175a1d414610895578063256929621461084a57806332a3cf9614610821578063363a346a146107df5780634094bb02146107bc5780634127535814610793578063451d29d5146107395780635289bcb11461071357806354d1f13d146106cd57806355fd00e814610674578063715018a614610629578063844b4bc3146105e95780638da5cb5b146105bc578063a1a2497d14610566578063a88dfec814610531578063bd2273da146104ef578063c2fa867b146104d1578063c3b9e0f014610492578063c3c646741461043b578063c8c04a09146103d0578063ce0cbf7f146103aa578063d645d4331461037b578063e6c693131461035d578063e94dfcdf14610337578063ec07882114610319578063f04e283e146102cb578063f2fde38b1461028c578063f5a7383e1461026e578063f838eace146101f05763fee81cf40361000f57346101ed5760203660031901126101ed576101d461133d565b9063389a75e1600c5252602080600c2054604051908152f35b80fd5b50346101ed5760403660031901126101ed578061020b61133d565b610213611635565b6001600160a01b0316803b1561026b57818091602460405180948193631040e27560e11b8352833560048401525af180156102605761024f5750f35b816102599161136e565b6101ed5780f35b6040513d84823e3d90fd5b50fd5b50346101ed57806003193601126101ed576020600254604051908152f35b5060203660031901126101ed576102a161133d565b6102a9611635565b8060601b156102be576102bb90611c43565b80f35b637448fbae82526004601cfd5b5060203660031901126101ed576102e061133d565b6102e8611635565b63389a75e1600c528082526020600c208054421161030c5790826102bb9255611c43565b636f5e881883526004601cfd5b50346101ed57806003193601126101ed576020600554604051908152f35b50346101ed57806003193601126101ed57602060ff60045460b01c166040519015158152f35b50346101ed57806003193601126101ed576020600754604051908152f35b50346101ed57806003193601126101ed57602060405173faaad5b731f52cdc9746f2414c823eca9b06e8448152f35b50346101ed57806003193601126101ed57602060ff60045460b81c166040519015158152f35b50346101ed57806103e0366113ff565b906103e9611635565b6001600160a01b0316803b15610437576040516329bfa98960e11b8152602060048201529183918391829084908290610426906024830190611441565b03925af180156102605761024f5750f35b5050fd5b50346101ed5760403660031901126101ed5761045561133d565b6024359081151580920361048e5761046b611635565b60018060a01b031682526009602052604082209060ff8019835416911617905580f35b8280fd5b50346101ed5760203660031901126101ed5760209060ff906040906001600160a01b036104bd61133d565b168152600984522054166040519015158152f35b50346101ed57806003193601126101ed576020600654604051908152f35b50346101ed5760203660031901126101ed576105096113f0565b610511611635565b6004805460ff60b01b191691151560b01b60ff60b01b1691909117905580f35b50346101ed5760203660031901126101ed5761054b6113f0565b610553611635565b60ff801960085416911515161760085580f35b50346101ed5780610576366113ff565b9061057f611635565b6001600160a01b0316803b15610437576040516384da92a760e01b8152602060048201529183918391829084908290610426906024830190611441565b50346101ed57806003193601126101ed57638b78c6d819546040516001600160a01b039091168152602090f35b50346101ed5760203660031901126101ed576020906001600160a01b0361060e61133d565b168152808252604060018060a01b0391205416604051908152f35b50806003193601126101ed5761063d611635565b80638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380638b78c6d8195580f35b50346101ed5760603660031901126101ed5761068e61133d565b602435906001600160a01b038216820361048e57604435926001600160a01b03841684036101ed5760206106c38585856114ef565b6040519015158152f35b50806003193601126101ed5763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b50346101ed57806003193601126101ed57602060ff60045460a01c166040519015158152f35b50346101ed5760203660031901126101ed5761075361133d565b61075b611635565b600380546001600160a01b0319166001600160a01b039290921691821790558152600960205260408120805460ff1916600117905580f35b50346101ed57806003193601126101ed576004546040516001600160a01b039091168152602090f35b50346101ed5760203660031901126101ed576107d6611635565b60043560025580f35b50346101ed5760203660031901126101ed576107f96113f0565b610801611635565b6004805460ff60b81b191691151560b81b60ff60b81b1691909117905580f35b50346101ed57806003193601126101ed576003546040516001600160a01b039091168152602090f35b50806003193601126101ed5763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b50346101ed57806003193601126101ed57602060405173c50673edb3a7b94e8cad8a7d4e0cd68864e33edf8152f35b50346101ed57806003193601126101ed573068929eee149b4bd212685414610aad573068929eee149b4bd2126855478015610a9e576007546006548101809111610a73574310610a8f5760055490818110610a87575b506005810281810460051482151715610a73576103e89004808203918211610a73574360075560206109c661018460405161095481611353565b86815273c50673edb3a7b94e8cad8a7d4e0cd68864e33edf84820152866040820152603c606082015273faaad5b731f52cdc9746f2414c823eca9b06e8446080820152604051958693849263b1a0d57160e01b84528260048501528960248501526001604485015260648401906116a2565b610160610104830152610164820188905261dead610124830152426101448301527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1918215610a6857610a2a92610a39575b5033611bfe565b3868929eee149b4bd212685580f35b610a5a9060203d602011610a61575b610a52818361136e565b810190611bef565b505f610a23565b503d610a48565b6040513d85823e3d90fd5b634e487b7160e01b83526011600452602483fd5b90505f61091a565b6353f77c5b60e01b8252600482fd5b631863d7fb60e01b8252600482fd5b63ab143c0690526004601cfd5b50346101ed5760203660031901126101ed576020906001600160a01b03610adf61133d565b16815260018252604060018060a01b0391205416604051908152f35b50346101ed57806003193601126101ed57602060405161dead8152f35b5060603660031901126101ed57610b2d61133d565b906024356001600160401b038111610f0a57610b4d9036906004016113aa565b6044356001600160401b03811161048e57610b6c9036906004016113aa565b903068929eee149b4bd2126854146110bc573068929eee149b4bd21268556003546001600160a01b03169283156110ad576001600160a01b03858116808352602083905260408320549096911661109e57600254340361108f576004549460ff8660b01c161580968197611080575b50611071576040516301ffc9a760e01b81526380ac58cd60e01b60048201526020816024818b5afa908115611066578491611037575b50158061101e575b61100f57604051638da5cb5b60e01b81526020816004818b5afa849181610fc7575b50610fc1575082955b80610fae575b610f9f577f00000000000000000000000000000000000000000000000000000000000000009160405191612142808401908482106001600160401b03831117610f8b57849386610ca4948b948b94611c8189393090611465565b039083f08015610260578683526020838152604080852080546001600160a01b03199081166001600160a01b03959095169485179091558386526001909252842080549091168817905594610cf88661176e565b6001600160a01b03811615610f12576003546001600160a01b031690813b15610f0e57604051637534ba6160e11b81526001600160a01b0388811660048301529190911660248201529083908290604490829084905af18015610a6857908391610ef5575b50505b6004805460ff60a81b1916600160a81b179055600354604051602091610de891610184916001600160a01b0316610d9682611353565b8682528985830152866040830152603c606083015260808201526701bc16d674ec8000604051958694859363b1a0d57160e01b85528360048601528960248601526001604486015260648501906116a2565b610160610104840152610164830188905233610124840152426101448401526001600160a01b03165af1801561026057610ec2575b506004805460ff60a81b19811690915534600119810192908311610eae57346701bc16d674ec80011901928311610eae57509260209592610e887fb21b33691d96c9afed29d52f5c03e912785d0fb36b91a4658534f7c8d408e9b893879660018060a01b0316611bfe565b610e97604051928392836114b2565b0390a33868929eee149b4bd2126855604051908152f35b634e487b7160e01b81526011600452602490fd5b6020813d602011610eed575b81610edb6020938361136e565b81010312610ee95751610e1d565b5f80fd5b3d9150610ece565b81610eff9161136e565b610f0a57815f610d5d565b5080fd5b8380fd5b506003546004546001600160a01b039182169116813b15610f0e57604051637534ba6160e11b81526001600160a01b0388811660048301529190911660248201529083908290604490829084905af18015610a6857908391610f76575b5050610d60565b81610f809161136e565b610f0a57815f610f6f565b634e487b7160e01b87526041600452602487fd5b631b5e0fd160e11b8352600483fd5b50336001600160a01b0387161415610c4a565b95610c44565b9091506020813d602011611007575b81610fe36020938361136e565b8101031261100357516001600160a01b038116810361100357905f610c3b565b8480fd5b3d9150610fd6565b635444e56f60e01b8352600483fd5b50638b78c6d819546001600160a01b0316331415610c19565b611059915060203d60201161105f575b611051818361136e565b8101906114d7565b5f610c11565b503d611047565b6040513d86823e3d90fd5b633cc0b12f60e21b8352600483fd5b60ff915060b81c16155f610bdb565b633acace0160e01b8252600482fd5b6306b8f26360e41b8252600482fd5b630869729360e41b8152600490fd5b63ab143c0683526004601cfd5b6080366003190112610ee9576110dd61133d565b6024356001600160401b038111610ee9576110fc9036906004016113aa565b906044356001600160401b038111610ee95761111c9036906004016113aa565b90606435906001600160a01b0382168203610ee957611139611635565b6003546001600160a01b031680156112ea576001600160a01b038281165f81815260208190526040902054909391166112db576040519161214290818401918483106001600160401b038411176112c75784936111c29389938b93611c8188397f0000000000000000000000000000000000000000000000000000000000000000913090611465565b03905ff080156112bc575f8281526020818152604080832080546001600160a01b03199081166001600160a01b03969096169586179091558484526001909252909120805490911683179055926112188461176e565b6003546001600160a01b0316803b15610ee957604051637534ba6160e11b81526001600160a01b0386811660048301529490941660248501525f908490604490829084905af19081156112bc5760209585947fb21b33691d96c9afed29d52f5c03e912785d0fb36b91a4658534f7c8d408e9b8936112ac575b506112a1604051928392836114b2565b0390a3604051908152f35b5f6112b69161136e565b5f611291565b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b6306b8f26360e41b5f5260045ffd5b630869729360e41b5f5260045ffd5b34610ee9575f366003190112610ee957602060ff600854166040519015158152f35b34610ee9575f366003190112610ee95760209060ff60045460a81c1615158152f35b600435906001600160a01b0382168203610ee957565b60a081019081106001600160401b038211176112c757604052565b90601f801991011681019081106001600160401b038211176112c757604052565b6001600160401b0381116112c757601f01601f191660200190565b81601f82011215610ee9578035906113c18261138f565b926113cf604051948561136e565b82845260208383010111610ee957815f926020809301838601378301015290565b600435908115158203610ee957565b906040600319830112610ee9576004356001600160a01b0381168103610ee95791602435906001600160401b038211610ee95761143e916004016113aa565b90565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b6001600160a01b039182168152918116602083015291821660408201529116606082015260c06080820181905261143e9391926114a491840190611441565b9160a0818403910152611441565b90916114c961143e93604084526040840190611441565b916020818403910152611441565b90816020910312610ee957518015158103610ee95790565b60ff60085416156115db576001600160a01b03165f8181526009602052604090205490919060ff161580611613575b806115e3575b61153057505050600190565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169182146115db576001600160a01b03161461157457505f90565b604051630716cd1160e01b815290602090829060049082906001600160a01b03165afa9081156112bc575f916115bc575b5080156115af5790565b5060ff60045460a01c1690565b6115d5915060203d60201161105f57611051818361136e565b5f6115a5565b505050600190565b506001600160a01b0383168281141590816115ff575b50611524565b6001600160a01b038316141590505f6115f9565b506001600160a01b0381165f9081526009602052604090205460ff161561151e565b638b78c6d81954330361164457565b6382b429005f526004601cfd5b6001600160401b0381116112c75760051b60200190565b60405160609190611679838261136e565b6002815291601f1901825f5b82811061169157505050565b806060602080938501015201611685565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b8051156116f25760200190565b634e487b7160e01b5f52603260045260245ffd5b8051600110156116f25760400190565b9080602083519182815201916020808360051b8301019401925f915b83831061174157505050505090565b909192939460208061175f600193601f198682030187528951611441565b97019301930191939290611732565b6004805460ff60a01b1916600160a01b17905560035460405161193f925f926001600160a01b03918216916119699161197b91166117ab85611353565b5f855260208501908482525f6040870152603c6060870152608086015261188d602095611919604051998a926117e18a8561136e565b5f8452601f198a01368b860137604051600160f91b8b820152600d60f81b6021820152600281529561181460228861136e565b61183561189b8c61188d611826611668565b986040519485938401886116a2565b620d89b31960c08401526202abac60e0840152692189600cb9f61418ad9761010084015260026101208401526b033b2e3c9fd0803ce800000161014084015230610160840152610180808401526101a0830190611441565b03601f19810183528261136e565b6118a4866116e5565b526118ae856116e5565b5081519051604080516001600160a01b039384168e820152929091168282015281526118db60608261136e565b6118e485611706565b526118ee84611706565b5061188d6118fa611668565b60405163f702040560e01b8d820152909d9094859360248501906116a2565b6d18b48e29793d2f0000000000000060c484015260e060e4840152610104830190611441565b6119488a6116e5565b52611952896116e5565b506040519485936040898601526060850190611441565b838103601f1901604085015290611716565b603c4201804211611bdb576119b1916119c59160405193849263dd46508f60e01b88850152604060248501526064840190611441565b90604483015203601f19810183528261136e565b6119ce85611706565b526119d884611706565b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116947f000000000000000000000000000000000000000000000000000000000000000090911691853b15610ee9576040516387517c4560e01b81526004810191909152602481018390526001600160a01b03604482015265ffffffffffff6064820152945f908690608490829084905af19485156112bc57600295611bc2575b508391611aad91604051968780948193631592ca1b60e31b83528860048401526024830190611716565b03925af1801561026057611ace575b50506004805460ff60a01b1916905550565b3d8083853e611add818561136e565b830192818185031261048e578051906001600160401b038211610f0e570183601f8201121561048e578051611b1181611651565b94611b1f604051968761136e565b818652838087019260051b84010192818411611bbe57848101925b848410611b4f57505050505050505f80611abc565b83516001600160401b038111611bba57820183603f82011215611bba5786810151611b798161138f565b91611b87604051938461136e565b818352858980848401010111611bb6579189898381969460408397018386015e83010152815201930192611b3a565b8980fd5b8780fd5b8580fd5b611bd0919294505f9061136e565b5f9290611aad611a83565b634e487b7160e01b5f52601160045260245ffd5b90816020910312610ee9575190565b814710611c36575f3881808585620186a0f115611c19575050565b601691600b915f526073825360ff602053f015611c3257565b3838fd5b63b12d13eb5f526004601cfd5b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d8195556fe610100806040523461049157612142803803809161001d8285610495565b833981019060c08183031261049157610035816104b8565b90610042602082016104b8565b60408201516001600160a01b038116810361049157610063606084016104b8565b60808401519093906001600160401b03811161049157866100859183016104cc565b60a08201519096906001600160401b038111610491576100a592016104cc565b6104b0600255670de0b6b3a7640000600655600160075560c09490945260805260a0526001600160a01b031660e05281516001600160401b0381116103a7575f54600181811c91168015610487575b602082101461038957601f8111610425575b50602092601f82116001146103c657928192935f926103bb575b50508160011b915f199060031b1c1916175f555b80516001600160401b0381116103a757600154600181811c9116801561039d575b602082101461038957601f8111610326575b50602091601f82116001146102c6579181925f926102bb575b50508160011b915f199060031b1c1916176001555b60c0516805345cdf77eb68f44c546b033b2e3c9fd0803ce80000008101916001600160a01b03169082106102ae57610235916805345cdf77eb68f44c556387a211a2600c52805f526020600c206b033b2e3c9fd0803ce800000081540190556b033b2e3c9fd0803ce8000000602052600c5160601c5f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3610539565b604051611b0090816106428239608051816113d5015260a0518181816108e201528181610ec50152818161132e01526114dd015260c0518181816107da01528181610a4401528181610c9e015281816112060152611981015260e05181818161021001528181610c0c01528181610f6d01526115bf0152f35b63e5cfe9575f526004601cfd5b015190505f80610180565b601f1982169260015f52805f20915f5b85811061030e575083600195106102f6575b505050811b01600155610195565b01515f1960f88460031b161c191690555f80806102e8565b919260206001819286850151815501940192016102d6565b60015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f830160051c8101916020841061037f575b601f0160051c01905b8181106103745750610167565b5f8155600101610367565b909150819061035e565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610155565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610120565b601f198216935f8052805f20915f5b86811061040d57508360019596106103f5575b505050811b015f55610134565b01515f1960f88460031b161c191690555f80806103e8565b919260206001819286850151815501940192016103d5565b5f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c8101916020841061047d575b601f0160051c01905b8181106104725750610106565b5f8155600101610465565b909150819061045c565b90607f16906100f4565b5f80fd5b601f909101601f19168101906001600160401b038211908210176103a757604052565b51906001600160a01b038216820361049157565b81601f82011215610491578051906001600160401b0382116103a75760405192610500601f8401601f191660200185610495565b8284526020838301011161049157815f9260208093018386015e8301015290565b90816020910312610491575180151581036104915790565b60c051604051630ff3c28b60e01b815290602090829060049082906001600160a01b03165afa908115610608575f91610622575b50158015610616575b6106135760c051604051630abfa01d60e31b81525f60048201526001600160a01b0392831660248201523060448201529160209183916064918391165afa908115610608575f916105d9575b50156105ca57565b631e8272b760e11b5f5260045ffd5b6105fb915060203d602011610601575b6105f38183610495565b810190610521565b5f6105c2565b503d6105e9565b6040513d5f823e3d90fd5b50565b5060ff60095416610576565b61063b915060203d602011610601576105f38183610495565b5f61056d56fe6080604052600436101561001a575b3615610018575f80fd5b005b5f5f3560e01c806306fdde03146116cc5780630716cd11146116aa578063095ea7b31461160e578063150b7a02146115785780631803e2841461155c57806318160ddd1461153757806319d6150d146114bf5780631db52755146112725780632081c4ea146111f057806323b2f392146111d357806323b872dd146110d157806324abf96214610f10578063313ce56714610ef457806332a3cf9614610eaf57806332cb6b0c14610e885780633644e51514610dff578063537f531214610c8c5780635d9644c414610c6e57806370a0823114610c3b5780637de1e53614610bf65780637ecebe0014610bc357806384da92a714610a3257806390ba7a3214610a0857806395d89b4114610934578063a6ee3a84146108c1578063a9059cbb14610827578063c2fa867b14610809578063c45a0155146107c4578063d505accf146105fc578063d50cb88b146105de578063dd62ed3e146105a9578063e6c693131461058b578063ec0788211461056d5763f392c7161461019b575061000e565b3461056a57608036600319011261056a5760043560243567ffffffffffffffff8111610568576101cf903690600401611737565b6044359290916064356001600160a01b0381168103610564573068929eee149b4bd212685414610557573068929eee149b4bd2126855479360018060a01b037f00000000000000000000000000000000000000000000000000000000000000001693604051936370a0823160e01b8552306004860152602085602481895afa94851561054c578995610518575b506040516331a9108f60e11b8152600481018990526020816024818a5afa90811561050d578a916104ee575b506001600160a01b031630146104df5760045482116104d057918893918493826040519384928337810185815203925af13d156104c8573d906102ca82611787565b916102d86040519384611765565b82523d87602084013e5b1561049f57506040516370a0823160e01b8152306004820152602081602481865afa90811561049457869161045e575b506001820180921161044a570361043b576020602491604051928380926331a9108f60e11b82528760048301525afa908115610430578491610401575b50306001600160a01b03909116036103f25761036c9047906118f1565b610378816004546118f1565b6004556002548082029082820414821517156103de577f272af40a157c8d1a7d3bf7ff2920db021097ec61b7e260f97bb50144520ad177916103e8604092048486526003602052808387205582519182526020820152a23868929eee149b4bd212685580f35b634e487b7160e01b84526011600452602484fd5b631022318760e21b8352600483fd5b610423915060203d602011610429575b61041b8183611765565b8101906118fe565b5f61034f565b503d610411565b6040513d86823e3d90fd5b630b7cb52160e41b8452600484fd5b634e487b7160e01b86526011600452602486fd5b90506020813d60201161048c575b8161047960209383611765565b8101031261048857515f610312565b5f80fd5b3d915061046c565b6040513d88823e3d90fd5b604051632cd7eb6360e11b8152602060048201529081906104c49060248301906116e7565b0390fd5b6060906102e2565b63f14a42b760e01b8952600489fd5b63085cf94760e41b8952600489fd5b610507915060203d6020116104295761041b8183611765565b5f610288565b6040513d8c823e3d90fd5b9094506020813d602011610544575b8161053460209383611765565b810103126104885751935f61025c565b3d9150610527565b6040513d8b823e3d90fd5b63ab143c0686526004601cfd5b8580fd5b825b80fd5b503461056a578060031936011261056a576020600654604051908152f35b503461056a578060031936011261056a576020600854604051908152f35b503461056a57604036600319011261056a5760206105d66105c861170b565b6105d0611721565b9061191d565b604051908152f35b503461056a578060031936011261056a576020600254604051908152f35b503461056a5760e036600319011261056a5761061661170b565b61061e611721565b604435606435906084359260ff84168403610564576001600160a01b0316936e22d473030f116ddee9f6b43ac78ba3851882191517156107b757610660611843565b60208151910120928042116107aa576040519160018060a01b03169465383775081901600e5285885260c06020600c20938454937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8252602082019788528460408301987fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc68a528b606085019a468c528c608087019330855260a08820602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988525252888a525260a082015220604e526042602c20885260ff1660205260a43560405260c43560605260208060808960015afa90853d510361079d570190556303faf4f960a51b84176040526034602c20557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a380f35b63ddafbaef88526004601cfd5b631a15a3cc87526004601cfd5b633f68539a86526004601cfd5b503461056a578060031936011261056a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461056a578060031936011261056a576020600754604051908152f35b503461056a57604036600319011261056a5761084161170b565b6024356387a211a2600c523383526020600c2080548083116108b457938391836108a996039055526020600c20818154019055602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a333611972565b602060405160018152f35b63f4d678b885526004601cfd5b503461056a57602036600319011261056a57600435801515809103610930577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036109215760ff80196009541691161760095580f35b635a91834f60e01b8252600482fd5b5080fd5b503461056a578060031936011261056a576040519080600154906109578261180b565b80855291600181169081156109e15750600114610997575b6109938461097f81860382611765565b6040519182916020835260208301906116e7565b0390f35b600181525f516020611aab5f395f51905f52939250905b8082106109c75750909150810160200161097f8261096f565b9192600181602092548385880101520191019092916109ae565b60ff191660208087019190915292151560051b8501909201925061097f915083905061096f565b503461056a57602036600319011261056a5760406020916004358152600383522054604051908152f35b503461056a57610a41366117a3565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610bb457815167ffffffffffffffff8111610ba057610a8d825461180b565b601f8111610b39575b50602092601f8211600114610ad157928293829392610ac6575b50508160011b915f199060031b1c191617815580f35b015190505f80610ab0565b828052601f198216935f516020611a8b5f395f51905f5291845b868110610b215750836001959610610b09575b505050811b01815580f35b01515f1960f88460031b161c191690555f8080610afe565b91926020600181928685015181550194019201610aeb565b828052601f820160051c5f516020611a8b5f395f51905f52019060208310610b8b575b601f0160051c5f516020611a8b5f395f51905f5201905b818110610b805750610a96565b838155600101610b73565b5f516020611a8b5f395f51905f529150610b5c565b634e487b7160e01b82526041600452602482fd5b631966391b60e11b8152600490fd5b503461056a57602036600319011261056a57610bdd61170b565b906338377508600c5252602080600c2054604051908152f35b503461056a578060031936011261056a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461056a57602036600319011261056a57610c5561170b565b906387a211a2600c5252602080600c2054604051908152f35b503461056a578060031936011261056a576020600454604051908152f35b503461056a57610c9b366117a3565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610bb457815167ffffffffffffffff8111610ba057610ce860015461180b565b601f8111610d97575b50602092601f8211600114610d2d57928293829392610d22575b50508160011b915f199060031b1c19161760015580f35b015190505f80610d0b565b60018352601f198216935f516020611aab5f395f51905f5291845b868110610d7f5750836001959610610d67575b505050811b0160015580f35b01515f1960f88460031b161c191690555f8080610d5b565b91926020600181928685015181550194019201610d48565b60018352601f820160051c5f516020611aab5f395f51905f52019060208310610dea575b601f0160051c5f516020611aab5f395f51905f5201905b818110610ddf5750610cf1565b838155600101610dd2565b5f516020611aab5f395f51905f529150610dbb565b503461056a578060031936011261056a57602060a0610e1c611843565b828151910120604051907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8252838201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6604082015246606082015230608082015220604051908152f35b503461056a578060031936011261056a5760206040516b033b2e3c9fd0803ce80000008152f35b503461056a578060031936011261056a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461056a578060031936011261056a57602060405160128152f35b506020366003190112610488576004353068929eee149b4bd2126854146110c4573068929eee149b4bd2126855805f52600360205260405f205480156110b5578034036110a6576040516331a9108f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa90811561106d575f91611087575b50306001600160a01b039091160361107857803b15610488575f80916064604051809481936323b872dd60e01b83523060048401523360248401528860448401525af1801561106d57611057575b5060407f89c3b465a41d0ab0891833425d7da4f89bafffceffba56a40bfafff01d68d51e9183855260036020528482812055611039816005546118e4565b6005558151908152336020820152a23868929eee149b4bd212685580f35b6110649193505f90611765565b5f916040610ffb565b6040513d5f823e3d90fd5b631022318760e21b5f5260045ffd5b6110a0915060203d6020116104295761041b8183611765565b5f610fad565b633c0cc37960e11b5f5260045ffd5b63d135e8bd60e01b5f5260045ffd5b63ab143c065f526004601cfd5b34610488576060366003190112610488576110ea61170b565b6110f2611721565b604435918060601b6e22d473030f116ddee9f6b43ac78ba33303611189575b6387a211a217600c526020600c209283549384821161117c57816108a995039055825f526020600c20818154019055602052600c5160601c60018060a01b0382167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3611972565b63f4d678b85f526004601cfd5b33602052637f5e9f208117600c526034600c209081549182196111af575b509050611111565b8286116111c657856387a211a293039055856111a7565b6313be252b5f526004601cfd5b34610488575f366003190112610488576020600554604051908152f35b34610488576020366003190112610488576004357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036112635761044c81108015611258575b61124957600255005b631bc4bcf760e21b5f5260045ffd5b506127108111611240565b631966391b60e11b5f5260045ffd5b34610488575f3660031901126104885760055480156114b05761129a600854600754906118e4565b43106114a15760065490818110611499575b6005820282810460051483151715611485576112d06103e86112e1920480946118f1565b916112db84846118e4565b906118f1565b6005554360085560405160a081019080821067ffffffffffffffff8311176114715760409182525f808252306020808401918252838501838152603c606086019081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660808801908152975163b1a0d57160e01b8152600481018a90526024810187905260016044820152965181166064880152935184166084870152905162ffffff1660a48601525160020b60c48501529351811660e484015261016061010484015261016483019190915261dead61012483015242610144830152909283916101849183917f0000000000000000000000000000000000000000000000000000000000000000165af1801561106d57611446575b50804710611439575f3881808433620186a0f11561141c57005b600b601691335f526073825360ff602053f01561143557005b3838fd5b63b12d13eb5f526004601cfd5b602090813d831161146a575b61145c8183611765565b810103126104885781611402565b503d611452565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b9050806112ac565b6353f77c5b60e01b5f5260045ffd5b631863d7fb60e01b5f5260045ffd5b5f366003190112610488573068929eee149b4bd2126854146110c4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361152857611517346004546118e4565b6004553868929eee149b4bd2126855005b635a91834f60e01b5f5260045ffd5b34610488575f3660031901126104885760206805345cdf77eb68f44c54604051908152f35b34610488575f36600319011261048857602060405161dead8152f35b346104885760803660031901126104885761159161170b565b5061159a611721565b5060643567ffffffffffffffff8111610488576115bb903690600401611737565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036115ff57604051630a85bd0160e11b8152602090f35b63517172a160e11b5f5260045ffd5b346104885760403660031901126104885761162761170b565b602435906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba318821915171561169d57602052637f5e9f20600c52335f52806034600c20555f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b633f68539a5f526004601cfd5b34610488575f36600319011261048857602060ff600954166040519015158152f35b34610488575f3660031901126104885761099361097f611843565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361048857565b602435906001600160a01b038216820361048857565b9181601f840112156104885782359167ffffffffffffffff8311610488576020838186019501011161048857565b90601f8019910116810190811067ffffffffffffffff82111761147157604052565b67ffffffffffffffff811161147157601f01601f191660200190565b60206003198201126104885760043567ffffffffffffffff81116104885781602382011215610488578060040135906117db82611787565b926117e96040519485611765565b8284526024838301011161048857815f92602460209301838601378301015290565b90600182811c92168015611839575b602083101461182557565b634e487b7160e01b5f52602260045260245ffd5b91607f169161181a565b604051905f825f54916118558361180b565b80835292600181169081156118c5575060011461187b575b61187992500383611765565b565b505f80805290915f516020611a8b5f395f51905f525b8183106118a95750509060206118799282010161186d565b6020919350806001915483858901015201910190918492611891565b6020925061187994915060ff191682840152151560051b82010161186d565b9190820180921161148557565b9190820391821161148557565b9081602091031261048857516001600160a01b03811681036104885790565b906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba31461195357602052637f5e9f20600c525f526034600c205490565b50505f1990565b90816020910312610488575180151581036104885790565b604051630ff3c28b60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169290602081600481875afa90811561106d575f91611a6b575b50158015611a5f575b611a5a57604051630abfa01d60e31b81526001600160a01b0392831660048201529116602482015230604482015290602090829060649082905afa90811561106d575f91611a2b575b5015611a1c57565b631e8272b760e11b5f5260045ffd5b611a4d915060203d602011611a53575b611a458183611765565b81019061195a565b5f611a14565b503d611a3b565b505050565b5060ff600954166119cb565b611a84915060203d602011611a5357611a458183611765565b5f6119c256fe290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a26469706673582212201e57d04480b7af89c986336c4d579c8d85eebd26c32a832e8d33563cdab778c364736f6c634300081e0033a26469706673582212203abc263bd69c6fe71b42ec2c5cd223833fe24b136d6c6d49a2d207e7d7d5e58764736f6c634300081e0033000000000000000000000000bd216513d74c8cf14cf4747e6aaa6420ff64ee9e000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000000000000004444c5dc75cb358380d2e3de08a9000000000000000000000000066a9893cc07d91d95644aedd05d03f95e1dba8af00000000000000000000000000000000000044a361ae3cac094c9d1b14eece97000000000000000000000000019817ad02a31b990433542097be29d97613e8cb