28 txs
49 calls
constructor
constructor(address _vrfConsumer, uint256 _fee, address _feeRecipient, address _factoryWrapper, address _singleFactoryWrapper)
functions
allowedSenders
viewfunction allowedSenders(address) view returns (bool)
allowListHook
viewfunction allowListHook() view returns (address)
calculateBuyOrSell
viewfunction calculateBuyOrSell(address _pair, uint256 _nftAmount, bool _isBuy, bool _isSingleBuy) view returns (uint256 finalPrice, uint256 wrapperFee, uint256 royaltyAmount)
CANCELLATION_DELAY
viewfunction CANCELLATION_DELAY() view returns (uint256)
collectionToFeeSingle
viewfunction collectionToFeeSingle(address) view returns (uint256)
factoryWrapper
viewfunction factoryWrapper() view returns (address)
fee
viewfunction fee() view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
getBuyRequests
viewfunction getBuyRequests(address _user) view returns (tuple[] requests)
MAX_FEE
viewfunction MAX_FEE() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
singleFactoryWrapper
viewfunction singleFactoryWrapper() view returns (address)
vrfConsumer
viewfunction vrfConsumer() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
buyNFTsCallback
nonpayablefunction buyNFTsCallback(uint256 _requestId, uint256[] _randomWords)
buyRandomNFTs
nonpayablefunction buyRandomNFTs(address _pair, uint256 _nftAmount, uint256 _maxExpectedTokenInput) returns (uint256 requestId)
buySingleNFT
nonpayablefunction buySingleNFT(address _pair, uint256 _nftId, uint256 _maxExpectedTokenInput)
cancelUnfulfilledRequest
nonpayablefunction cancelUnfulfilledRequest(uint256 requestId)
onERC721Received
nonpayablefunction onERC721Received(address, address from, uint256, bytes) returns (bytes4)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(bool _isERC20, address _token, uint256[] _amountOrIds)
sellNFTs
nonpayablefunction sellNFTs(address _pair, uint256[] _nftIds, uint256 _minExpectedTokenOutput) returns (uint256 outputAmount)
setAllowListHook
nonpayablefunction setAllowListHook(address _newAllowListHook)
setCollectionFee
nonpayablefunction setCollectionFee(address _nft, uint256 _newFee)
setFeeConfig
nonpayablefunction setFeeConfig(uint256 _newFee, address _newFeeRecipient)
setVRFConsumer
nonpayablefunction setVRFConsumer(address _newVRFConsumer)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AllowListHookUpdated
event AllowListHookUpdated(address newAllowListHook)
CollectionFeeUpdated
event CollectionFeeUpdated(address indexed nft, uint256 newFee)
FeeConfigUpdated
event FeeConfigUpdated(uint256 fee, address feeRecipient)
FeeTransferred
event FeeTransferred(address indexed recipient, uint256 amount, address indexed pair)
NFTsBought
event NFTsBought(address indexed pair, address indexed buyer, uint256[] nftIds, uint256 finalPrice, uint256 indexed requestId)
NFTsSold
event NFTsSold(address indexed pair, address indexed seller, uint256[] nftIds, uint256 outputAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Refunded
event Refunded(address indexed to, uint256 amount, address indexed pair)
RequestCancelled
event RequestCancelled(address indexed user, uint256 indexed requestId)
RequestFailed
event RequestFailed(address indexed user, uint256 indexed requestId)
RequestSubmitted
event RequestSubmitted(address indexed user, uint256 indexed requestId)
VRFConsumerUpdated
event VRFConsumerUpdated(address newVRFConsumer)
errors
No errors.
creation bytecode
0x60c060405234801562000010575f80fd5b5060405162004bb138038062004bb183398101604081905262000033916200020a565b6200003e3362000181565b60016002556001600160a01b038516158015906200006457506001600160a01b03831615155b80156200007957506001600160a01b03821615155b80156200008e57506001600160a01b03811615155b620000d45760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b60448201526064015b60405180910390fd5b66b1a2bc2ec500008411156200013b5760405162461bcd60e51b815260206004820152602560248201527f57726170706572206665652063616e6e6f742062652067726561746572207468604482015264616e20352560d81b6064820152608401620000cb565b600380546001600160a01b03199081166001600160a01b039788161790915560059490945560068054909416928516929092179092559082166080521660a0526200026d565b600180546001600160a01b03191690556200019c816200019f565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811462000205575f80fd5b919050565b5f805f805f60a086880312156200021f575f80fd5b6200022a86620001ee565b9450602086015193506200024160408701620001ee565b92506200025160608701620001ee565b91506200026160808701620001ee565b90509295509295909350565b60805160a0516148e3620002ce5f395f81816102a90152818161072d015281816108aa015261096001525f818161030101528181611e1501528181611eca015281816120540152818161243001528181612f8d015261311501526148e35ff3fe6080604052600436106101b2575f3560e01c806388ba19e6116100e7578063d86fd2e611610087578063e30c397811610062578063e30c3978146105d3578063f2fde38b146105fd578063f6ea20601461061c578063fadbcf481461063b575f80fd5b8063d86fd2e614610559578063ddca3f4314610584578063e2796f7514610599575f80fd5b8063bc063e1a116100c2578063bc063e1a146104d5578063bf0afe50146104ef578063c3deca1f1461050e578063cfd6aa901461053a575f80fd5b806388ba19e61461046e5780638da5cb5b1461048d5780639de96081146104b6575f80fd5b806346904840116101525780636468af341161012d5780636468af3414610404578063715018a614610423578063762187a61461043757806379ba50971461045a575f80fd5b8063469048401461039a5780634aa2fd4b146103c65780635d7fe94e146103e5575f80fd5b80631d08cbb71161018d5780631d08cbb7146102f05780631ef4d1fd146103235780632ac03e6d1461034f57806345f918f91461036e575f80fd5b8063108a344c14610222578063150b7a021461024357806316ee3e0b14610298575f80fd5b3661021e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f742070617961626c6500000000000000000000000000000000000000000060448201526064015b60405180910390fd5b5f80fd5b34801561022d575f80fd5b5061024161023c366004613ffb565b610679565b005b34801561024e575f80fd5b5061026261025d3660046140a9565b610df0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156102a3575f80fd5b506102cb7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161028f565b3480156102fb575f80fd5b506102cb7f000000000000000000000000000000000000000000000000000000000000000081565b34801561032e575f80fd5b506003546102cb9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035a575f80fd5b50610241610369366004614184565b610ea8565b348015610379575f80fd5b5061038d610388366004614184565b610fa7565b60405161028f91906141df565b3480156103a5575f80fd5b506006546102cb9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103d1575f80fd5b506102416103e03660046142bf565b6111ac565b3480156103f0575f80fd5b506102416103ff366004614331565b611307565b34801561040f575f80fd5b5061024161041e366004614379565b611af6565b34801561042e575f80fd5b50610241611c98565b348015610442575f80fd5b5061044c61012c81565b60405190815260200161028f565b348015610465575f80fd5b50610241611cab565b348015610479575f80fd5b5061044c6104883660046143a7565b611d60565b348015610498575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166102cb565b3480156104c1575f80fd5b506102416104d036600461440c565b61254b565b3480156104e0575f80fd5b5061044c66b1a2bc2ec5000081565b3480156104fa575f80fd5b5061024161050936600461446d565b6127e2565b348015610519575f80fd5b506004546102cb9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610545575f80fd5b50610241610554366004614184565b612a8a565b348015610564575f80fd5b5061044c610573366004614184565b60076020525f908152604090205481565b34801561058f575f80fd5b5061044c60055481565b3480156105a4575f80fd5b506105b86105b3366004614484565b612b82565b6040805193845260208401929092529082015260600161028f565b3480156105de575f80fd5b5060015473ffffffffffffffffffffffffffffffffffffffff166102cb565b348015610608575f80fd5b50610241610617366004614184565b612e29565b348015610627575f80fd5b5061044c610636366004613ffb565b612ed8565b348015610646575f80fd5b50610669610655366004614184565b600a6020525f908152604090205460ff1681565b604051901515815260200161028f565b60028054036106e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610215565b600280556040517fe5e31b1300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e5e31b1390602401602060405180830381865afa158015610772573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079691906144d4565b6107fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f50616972206973206e6f7420612073696e676c652d61737365742070616972006044820152606401610215565b5f8111610865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e76616c6964205f6d61784578706563746564546f6b656e496e70757400006044820152606401610215565b6040517fdbed1e8800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbed1e8890602401602060405180830381865afa1580156108ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091391906144ef565b4210806109cb57506040517fdbed1e8800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbed1e8890602401602060405180830381865afa1580156109a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906144ef565b155b610a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f43616e206f6e6c7920627579206265666f7265207061697220697320756e6c6f908201527f636b6564206f722066726f6d20696e697469616c6c7920756e6c6f636b65642060648201527f7061697200000000000000000000000000000000000000000000000000000000608482015260a401610215565b5f80610a8e856001806001612b82565b509150915081831015610afd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e73756666696369656e742066756e647320746f20627579204e46540000006044820152606401610215565b5f8590505f8173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6f9190614506565b6040805160018082528183019092529192505f91906020808301908036833701905050905086815f81518110610ba757610ba7614521565b6020908102919091010152610bd473ffffffffffffffffffffffffffffffffffffffff831633308961387b565b610bf573ffffffffffffffffffffffffffffffffffffffff83168988613936565b5f610c00858861457b565b73ffffffffffffffffffffffffffffffffffffffff808b165f908152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f6d8b99f70000000000000000000000000000000000000000000000000000000081529293509190861690636d8b99f790610c97908690869030908790829060040161458e565b6020604051808303815f875af1158015610cb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd791906144ef565b73ffffffffffffffffffffffffffffffffffffffff8b165f908152600a6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055909150610d359030903390889087906139eb565b600654610d5a9073ffffffffffffffffffffffffffffffffffffffff1687875f613bc6565b81811015610d7757610d7733610d70838561457b565b875f613bc6565b5f3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fac8224ca3190239213ed3924f2424a0903e6ccab69c947c39851aab300185d59868b604051610dd79291906145dc565b60405180910390a4505060016002555050505050505050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600a602052604081205460ff16610e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5472616e73666572206e6f7420616c6c6f7765640000000000000000000000006044820152606401610215565b507f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b610eb0613d44565b73ffffffffffffffffffffffffffffffffffffffff8116610f2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610215565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f50eed5d17c3958132639d1eb8d255302fa6abf78793e21b42c31734c3099efd0906020015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260086020526040902080546060919067ffffffffffffffff811115610fe957610fe961402d565b60405190808252806020026020018201604052801561108257816020015b61106f6040518060e001604052805f151581526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f8152602001606081525090565b8152602001906001900390816110075790505b5091505f5b81548110156111a5575f60095f8484815481106110a6576110a6614521565b5f91825260208083209091015483528281019390935260409182019020815160e081018352815460ff81161515825273ffffffffffffffffffffffffffffffffffffffff610100909104811682860152600183015416818401526002820154606082015260038201546080820152600482015460a0820152600582018054845181870281018701909552808552929550909360c0850193929083018282801561116c57602002820191905f5260205f20905b815481526020019060010190808311611158575b505050505081525084838151811061118657611186614521565b602002602001018190525050808061119d906145fd565b915050611087565b5050919050565b6111b4613d44565b73ffffffffffffffffffffffffffffffffffffffff8216611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610215565b66b1a2bc2ec500008111156112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f466565206d757374206265206c657373207468616e20352500000000000000006044820152606401610215565b73ffffffffffffffffffffffffffffffffffffffff82165f8181526007602052604090819020839055517f58588ce3cc3e3a79fabf58f2c4fcd6da5882fa2484373b312c6892dd14696f4b906112fb9084815260200190565b60405180910390a25050565b6002805403611372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610215565b6002805560035473ffffffffffffffffffffffffffffffffffffffff16331461141d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792074686520565246436f6e73756d65722063616e2063616c6c20746860448201527f69732066756e6374696f6e0000000000000000000000000000000000000000006064820152608401610215565b5f8381526009602052604090208054600582015461010090910473ffffffffffffffffffffffffffffffffffffffff169015158061145c5750815460ff165b156114aa57604051859073ffffffffffffffffffffffffffffffffffffffff8316907f46ebe0af49f89024c3b8027ab0ce86868a711518de91039dc27e914904f90457905f90a35050611aec565b6001820154604080517faaa44e5c000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216915f91839163aaa44e5c9160048082019286929091908290030181865afa15801561151d573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526115629190810190614634565b905080518460020154118061157a5750600284015485105b156116085783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117855560038501546115bd918591908590613bc6565b604051879073ffffffffffffffffffffffffffffffffffffffff8516907f46ebe0af49f89024c3b8027ab0ce86868a711518de91039dc27e914904f90457905f90a350505050611aec565b60018085015460028601545f92839261163a9273ffffffffffffffffffffffffffffffffffffffff9091169184612b82565b509150915081866003015410156116d65785547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811787556003870154611689918791908790613bc6565b604051899073ffffffffffffffffffffffffffffffffffffffff8716907f46ebe0af49f89024c3b8027ab0ce86868a711518de91039dc27e914904f90457905f90a3505050505050611aec565b5f8187600301546116e7919061457b565b90505f876002015467ffffffffffffffff8111156117075761170761402d565b604051908082528060200260200182016040528015611730578160200160208202803683370190505b5085519091505f5b89600201548110156117f8575f828d8d8481811061175857611758614521565b9050602002013561176991906146d5565b905087818151811061177d5761177d614521565b602002602001015184838151811061179757611797614521565b6020908102919091010152826117ac8161470d565b9350508281146117ef578783815181106117c8576117c8614521565b60200260200101518882815181106117e2576117e2614521565b6020026020010181815250505b50600101611738565b5060018981015473ffffffffffffffffffffffffffffffffffffffff9081165f908152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690941790935591517f6d8b99f700000000000000000000000000000000000000000000000000000000815290891691636d8b99f79161189291869188913091829060040161458e565b6020604051808303815f875af19250505080156118ea575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526118e7918101906144ef565b60015b6119aa576001808a015473ffffffffffffffffffffffffffffffffffffffff165f908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009081169091558a541681178a5560038a015461195a918a91908a90613bc6565b6040518c9073ffffffffffffffffffffffffffffffffffffffff8a16907f46ebe0af49f89024c3b8027ab0ce86868a711518de91039dc27e914904f90457905f90a3505050505050505050611aec565b60018a015473ffffffffffffffffffffffffffffffffffffffff165f908152600a6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611a099030908b908b9087906139eb565b600654611a2e9073ffffffffffffffffffffffffffffffffffffffff16868a5f613bc6565b83811015611a68578954611a6890610100900473ffffffffffffffffffffffffffffffffffffffff16611a61838761457b565b8a5f613bc6565b508151611a7e9060058b01906020850190613f7d565b50885460018a01546040518e9273ffffffffffffffffffffffffffffffffffffffff61010090910481169216907fac8224ca3190239213ed3924f2424a0903e6ccab69c947c39851aab300185d5990611ada9087908b906145dc565b60405180910390a45050505050505050505b5050600160025550565b611afe613d44565b66b1a2bc2ec50000821115611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4164646974696f6e616c20666565206d757374206265206c657373207468616e60448201527f20352500000000000000000000000000000000000000000000000000000000006064820152608401610215565b73ffffffffffffffffffffffffffffffffffffffff8116611c12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610215565b6005829055600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040805184815260208101929092527fe125ae54d7ba2b06e6f44852861516acb2dd2692cf41fb127fa03252f15b334e910160405180910390a15050565b611ca0613d44565b611ca95f613dc4565b565b600154339073ffffffffffffffffffffffffffffffffffffffff168114611d54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610215565b611d5d81613dc4565b50565b5f6002805403611dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610215565b600280556040517fe5e31b1300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e5e31b1390602401602060405180830381865afa158015611e5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7e91906144d4565b8015611f3557506040517fe1a304e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e1a304e790602401602060405180830381865afa158015611f0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f3391906144d4565b155b611f9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4d75737420626520612076616c6964206e6f6e2d72616e646f6d2070616972006044820152606401610215565b8215801590611fa957505f82115b61200f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420696e707574000000000000000000000000000000000000006044820152606401610215565b6040517fdbed1e8800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbed1e8890602401602060405180830381865afa158015612099573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120bd91906144ef565b421061214b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f43616e206f6e6c792073656c6c206265666f7265207061697220697320756e6c60448201527f6f636b65640000000000000000000000000000000000000000000000000000006064820152608401610215565b845f8173ffffffffffffffffffffffffffffffffffffffff1663b1dd61b66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612196573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ba919061476e565b60028111156121cb576121cb614741565b14612232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616972206973206e6f7420612062757920706f6f6c000000000000000000006044820152606401610215565b6122733330838888808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250600192506139eb915050565b73ffffffffffffffffffffffffffffffffffffffff8087165f908152600a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fb1d3f1c1000000000000000000000000000000000000000000000000000000008152909183169063b1d3f1c190612309908990899089903090889082906004016147d5565b6020604051808303815f875af1158015612325573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234991906144ef565b73ffffffffffffffffffffffffffffffffffffffff88165f908152600a6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690559091506123a288878380612b82565b5091506123b19050818361457b565b6006549094506123d99073ffffffffffffffffffffffffffffffffffffffff1682855f613bc6565b6123e53385855f613bc6565b6040517f0cdae8a800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301526124d29130917f00000000000000000000000000000000000000000000000000000000000000001690630cdae8a890602401602060405180830381865afa158015612475573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124999190614506565b858a8a808060200260200160405190810160405280939291908181526020018383602002808284375f92018290525092506139eb915050565b3373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f8df60af6be8fe38dab6f8c7d8b025c131ea0e7b9ee1affdfb61a2acb21e4712789898860405161253393929190614825565b60405180910390a35050600160025550949350505050565b612553613d44565b73ffffffffffffffffffffffffffffffffffffffff83166125d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610215565b831561269f575f82825f8181106125e9576125e9614521565b9050602002013511612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420696e707574000000000000000000000000000000000000006044820152606401610215565b61269a3383835f81811061266d5761266d614521565b905060200201358573ffffffffffffffffffffffffffffffffffffffff16613df59092919063ffffffff16565b6127dc565b80612706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c696420696e707574000000000000000000000000000000000000006044820152606401610215565b5f5b818110156127da578373ffffffffffffffffffffffffffffffffffffffff166323b872dd303386868681811061274057612740614521565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff9586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b1580156127b9575f80fd5b505af11580156127cb573d5f803e3d5ffd5b50505050806001019050612708565b505b50505050565b600280540361284d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610215565b600280555f8181526009602052604090208054610100900473ffffffffffffffffffffffffffffffffffffffff1633146128e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f7420796f75722072657175657374000000000000000000000000000000006044820152606401610215565b805460ff161580156128f757506005810154155b612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f5265717565737420616c72656164792066756c66696c6c6564206f722063616e60448201527f63656c6c656400000000000000000000000000000000000000000000000000006064820152608401610215565b61012c81600401546129959190614848565b4210156129fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f57616974206265666f72652063616e63656c6c696e67000000000000000000006044820152606401610215565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081178255600382015482820154612a559233929173ffffffffffffffffffffffffffffffffffffffff1690613bc6565b604051829033907f1bdb4261b8cc605afbfe72b63a1f1f08ab6eb83dce866bdbed9ba6fc9c74d004905f90a350506001600255565b612a92613d44565b73ffffffffffffffffffffffffffffffffffffffff8116612b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610215565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f4f3e6f07dad6bec012f6e3f2812f7fa90c5c17477bc3222c6b9f2296906a220c90602001610f9c565b5f8080868515612d37576040517f1afd78c500000000000000000000000000000000000000000000000000000000815260016004820152602481018890525f908190819073ffffffffffffffffffffffffffffffffffffffff851690631afd78c59060440160c060405180830381865afa158015612c02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c26919061485b565b9550955095505050505f818385612c3d919061457b565b612c47919061457b565b90505f60055490505f60075f8873ffffffffffffffffffffffffffffffffffffffff166347ccca026040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc09190614506565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508a8015612d0857505f81115b15612d11578091505b612d1b8383613eaa565b9850612d278987614848565b9950839750505050505050612e1e565b6040517f33b24a3a00000000000000000000000000000000000000000000000000000000815260016004820152602481018890525f908190819073ffffffffffffffffffffffffffffffffffffffff8516906333b24a3a9060440160c060405180830381865afa158015612dad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dd1919061485b565b9550955095505050505f818385612de89190614848565b612df29190614848565b9050612e0960055482613eaa90919063ffffffff16565b9650612e15878561457b565b97509094505050505b509450945094915050565b612e31613d44565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155612e935f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6002805403612f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610215565b600280556040517fe1a304e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e1a304e790602401602060405180830381865afa158015612fd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff691906144d4565b61305c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50616972206973206e6f7420612072616e646f6d2070616972000000000000006044820152606401610215565b5f8311801561306a57505f82115b6130d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c696420616d6f756e747300000000000000000000000000000000006044820152606401610215565b6040517fdbed1e8800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063dbed1e8890602401602060405180830381865afa15801561315a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061317e91906144ef565b421061320b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f43616e206f6e6c7920627579206265666f7265207061697220697320756e6c6f60448201527f636b6564000000000000000000000000000000000000000000000000000000006064820152608401610215565b335f9081526008602090815260408083208054825181850281018501909352808352919290919083018282801561325f57602002820191905f5260205f20905b81548152602001906001019080831161324b575b505050505090505f8151111561335a575f816001835161327f919061457b565b8151811061328f5761328f614521565b6020026020010151905060095f8281526020019081526020015f20600501805490505f1415806132cc57505f8181526009602052604090205460ff165b613358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f557365722068617320616e20756e66756c66696c6c656420627579207265717560448201527f657374207768696368206973206e6f742063616e63656c6c65640000000000006064820152608401610215565b505b5f8590508073ffffffffffffffffffffffffffffffffffffffff1663aaa44e5c6040518163ffffffff1660e01b81526004015f60405180830381865afa1580156133a6573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526133eb9190810190614634565b51851115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420656e6f756768204e46547300000000000000000000000000000000006044820152606401610215565b5f613463878760015f612b82565b50509050808510156134d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f20627579204e46547300006044820152606401610215565b5f8273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061353f9190614506565b905061356373ffffffffffffffffffffffffffffffffffffffff821633308961387b565b6135f288878573ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d59190614506565b73ffffffffffffffffffffffffffffffffffffffff169190613936565b6003546040517fe726f2e100000000000000000000000000000000000000000000000000000000815263ffffffff8916600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e726f2e1906024016020604051808303815f875af1158015613665573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061368991906144ef565b94506040518060e001604052805f151581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020014281526020015f67ffffffffffffffff8111156137015761370161402d565b60405190808252806020026020018201604052801561372a578160200160208202803683370190505b5090525f8681526009602090815260409182902083518154858401517fffffffffffffffffffffff0000000000000000000000000000000000000000009091169115157fffffffffffffffffffffff0000000000000000000000000000000000000000ff169190911761010073ffffffffffffffffffffffffffffffffffffffff92831602178255928401516001820180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190941617909255606083015160028301556080830151600383015560a0830151600483015560c0830151805161381b9260058501920190613f7d565b5050335f8181526008602090815260408083208054600181018255908452918320909101899055518893507f82f70092e3775aae27ccfd7a1699040c0d3e7a2d8c0a3434285163fc228dc6e09190a3505060016002555090949350505050565b5f6040517f23b872dd00000000000000000000000000000000000000000000000000000000815284600482015283602482015282604482015260205f6064835f8a5af13d15601f3d1160015f5114161716915050806127da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610215565b5f6040517f095ea7b300000000000000000000000000000000000000000000000000000000815283600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806127dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f415050524f56455f4641494c45440000000000000000000000000000000000006044820152606401610215565b5f8373ffffffffffffffffffffffffffffffffffffffff166347ccca026040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a599190614506565b90505f5b8351811015613b33578173ffffffffffffffffffffffffffffffffffffffff166323b872dd8888878581518110613a9657613a96614521565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201526064015f604051808303815f87803b158015613b12575f80fd5b505af1158015613b24573d5f803e3d5ffd5b50505050806001019050613a5d565b508115613bbe576040517fa22cb46500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526001602483015282169063a22cb465906044015f604051808303815f87803b158015613ba7575f80fd5b505af1158015613bb9573d5f803e3d5ffd5b505050505b505050505050565b5f8273ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c349190614506565b9050613c5773ffffffffffffffffffffffffffffffffffffffff82168686613df5565b8115613cc9578273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fb44b3631755227290f8fbd7b248fa4be405129d15351313e3c332a3fb991941786604051613cbc91815260200190565b60405180910390a36127da565b60065473ffffffffffffffffffffffffffffffffffffffff908116908616036127da5760065460405185815273ffffffffffffffffffffffffffffffffffffffff8581169216907fd52250dfc6eb77b7820776d8bdc107715bf1dd34767f2759ef9ad1630865d49a9060200160405180910390a35050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314611ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610215565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055611d5d81613ec7565b5f6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815283600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806127dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610215565b5f613ebe8383670de0b6b3a7640000613f3b565b90505b92915050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484118302158202613f6e575f80fd5b50910281810615159190040190565b828054828255905f5260205f20908101928215613fb6579160200282015b82811115613fb6578251825591602001919060010190613f9b565b50613fc2929150613fc6565b5090565b5b80821115613fc2575f8155600101613fc7565b73ffffffffffffffffffffffffffffffffffffffff81168114611d5d575f80fd5b5f805f6060848603121561400d575f80fd5b833561401881613fda565b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156140a1576140a161402d565b604052919050565b5f805f80608085870312156140bc575f80fd5b84356140c781613fda565b93506020858101356140d881613fda565b935060408601359250606086013567ffffffffffffffff808211156140fb575f80fd5b818801915088601f83011261410e575f80fd5b8135818111156141205761412061402d565b614150847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161405a565b91508082528984828501011115614165575f80fd5b80848401858401375f8482840101525080935050505092959194509250565b5f60208284031215614194575f80fd5b813561419f81613fda565b9392505050565b5f8151808452602080850194508084015f5b838110156141d4578151875295820195908201906001016141b8565b509495945050505050565b5f6020808301818452808551808352604092508286019150828160051b8701018488015f5b838110156142b1578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051151584528781015173ffffffffffffffffffffffffffffffffffffffff90811689860152878201511687850152606080820151908501526080808201519085015260a0808201519085015260c09081015160e09185018290529061429d818601836141a6565b968901969450505090860190600101614204565b509098975050505050505050565b5f80604083850312156142d0575f80fd5b82356142db81613fda565b946020939093013593505050565b5f8083601f8401126142f9575f80fd5b50813567ffffffffffffffff811115614310575f80fd5b6020830191508360208260051b850101111561432a575f80fd5b9250929050565b5f805f60408486031215614343575f80fd5b83359250602084013567ffffffffffffffff811115614360575f80fd5b61436c868287016142e9565b9497909650939450505050565b5f806040838503121561438a575f80fd5b82359150602083013561439c81613fda565b809150509250929050565b5f805f80606085870312156143ba575f80fd5b84356143c581613fda565b9350602085013567ffffffffffffffff8111156143e0575f80fd5b6143ec878288016142e9565b9598909750949560400135949350505050565b8015158114611d5d575f80fd5b5f805f806060858703121561441f575f80fd5b843561442a816143ff565b9350602085013561443a81613fda565b9250604085013567ffffffffffffffff811115614455575f80fd5b614461878288016142e9565b95989497509550505050565b5f6020828403121561447d575f80fd5b5035919050565b5f805f8060808587031215614497575f80fd5b84356144a281613fda565b93506020850135925060408501356144b9816143ff565b915060608501356144c9816143ff565b939692955090935050565b5f602082840312156144e4575f80fd5b815161419f816143ff565b5f602082840312156144ff575f80fd5b5051919050565b5f60208284031215614516575f80fd5b815161419f81613fda565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115613ec157613ec161454e565b60a081525f6145a060a08301886141a6565b60208301969096525073ffffffffffffffffffffffffffffffffffffffff93841660408201529115156060830152909116608090910152919050565b604081525f6145ee60408301856141a6565b90508260208301529392505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361462d5761462d61454e565b5060010190565b5f6020808385031215614645575f80fd5b825167ffffffffffffffff8082111561465c575f80fd5b818501915085601f83011261466f575f80fd5b8151818111156146815761468161402d565b8060051b915061469284830161405a565b81815291830184019184810190888411156146ab575f80fd5b938501935b838510156146c9578451825293850193908501906146b0565b98975050505050505050565b5f82614708577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b5f8161471b5761471b61454e565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f6020828403121561477e575f80fd5b81516003811061419f575f80fd5b8183525f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156147bc575f80fd5b8260051b80836020870137939093016020019392505050565b60a081525f6147e860a08301888a61478c565b60208301969096525073ffffffffffffffffffffffffffffffffffffffff9384166040820152911515606083015290911660809091015292915050565b604081525f61483860408301858761478c565b9050826020830152949350505050565b80820180821115613ec157613ec161454e565b5f805f805f8060c08789031215614870575f80fd5b86516005811061487e575f80fd5b6020880151604089015160608a015160808b015160a0909b0151939c929b50909990985096509094509250505056fea2646970667358221220f3859c9a9796efc70122329956a4e0a27f59b3236fbaa7742625a30a781d8f1264736f6c634300081400330000000000000000000000000af5346ea7fc30d1c19626fc8ad7a73c9b7c47270000000000000000000000000000000000000000000000000031bced02db0000000000000000000000000000b720da1307d62e6c55ff30568657db753e5af11b00000000000000000000000013918a541e129a7ef210183e5e9c54486da3fb040000000000000000000000008e4ecbc8ecae876d61efeb17dbf908e6acb796f0