Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 10,700 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Mini NF Tto... | 21467000 | 11 hrs ago | IN | 0 ETH | 0.00131568 | ||||
Swap Mini NF Tto... | 21439828 | 4 days ago | IN | 0 ETH | 0.00209662 | ||||
Swap Mini NF Tto... | 21428144 | 5 days ago | IN | 0 ETH | 0.00097864 | ||||
Swap FF Tto Mini... | 21428132 | 5 days ago | IN | 0 ETH | 0.00101542 | ||||
Swap Mini NF Tto... | 21407659 | 8 days ago | IN | 0 ETH | 0.00082869 | ||||
Swap Mini NF Tto... | 21407653 | 8 days ago | IN | 0 ETH | 0.00088356 | ||||
Swap Mini NF Tto... | 21407648 | 8 days ago | IN | 0 ETH | 0.00087954 | ||||
Swap Mini NF Tto... | 21407643 | 8 days ago | IN | 0 ETH | 0.00078504 | ||||
Swap Mini NF Tto... | 21407638 | 8 days ago | IN | 0 ETH | 0.00084384 | ||||
Swap Mini NF Tto... | 21407636 | 8 days ago | IN | 0 ETH | 0.0008182 | ||||
Swap Mini NF Tto... | 21407633 | 8 days ago | IN | 0 ETH | 0.0009197 | ||||
Swap Mini NF Tto... | 21407628 | 8 days ago | IN | 0 ETH | 0.00088556 | ||||
Swap Mini NF Tto... | 21407625 | 8 days ago | IN | 0 ETH | 0.00085294 | ||||
Swap Mini NF Tto... | 21407623 | 8 days ago | IN | 0 ETH | 0.00069756 | ||||
Swap Mini NF Tto... | 21407617 | 8 days ago | IN | 0 ETH | 0.00079356 | ||||
Swap Mini NF Tto... | 21407611 | 8 days ago | IN | 0 ETH | 0.0008673 | ||||
Swap Mini NF Tto... | 21264378 | 28 days ago | IN | 0 ETH | 0.00205504 | ||||
Swap Mini NF Tto... | 21264345 | 28 days ago | IN | 0 ETH | 0.00184483 | ||||
Swap Mini NF Tto... | 21264335 | 28 days ago | IN | 0 ETH | 0.00191539 | ||||
Swap Mini NF Tto... | 21264331 | 28 days ago | IN | 0 ETH | 0.00192346 | ||||
Swap Mini NF Tto... | 21264329 | 28 days ago | IN | 0 ETH | 0.00199904 | ||||
Swap Mini NF Tto... | 21264324 | 28 days ago | IN | 0 ETH | 0.00201677 | ||||
Swap Mini NF Tto... | 21264322 | 28 days ago | IN | 0 ETH | 0.00208423 | ||||
Swap Mini NF Tto... | 21264316 | 28 days ago | IN | 0 ETH | 0.00209881 | ||||
Swap Mini NF Tto... | 21264314 | 28 days ago | IN | 0 ETH | 0.0020589 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FractonSwap
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import '@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol'; import '@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol'; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; import '@openzeppelin/contracts/token/ERC721/IERC721.sol'; import '@openzeppelin/contracts/token/ERC1155/IERC1155.sol'; import '@openzeppelin/contracts/access/Ownable.sol'; import '@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol'; import '@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol'; import '../interface/IFractonMiniNFT.sol'; import '../interface/IFractonFFT.sol'; import '../interface/IFractonSwap.sol'; import '../interface/IFractonTokenFactory.sol'; contract FractonSwap is ERC721Holder, ERC1155Holder, Ownable, IFractonSwap, VRFConsumerBaseV2 { uint256 public swapRate = 1E21; uint256 public fftTax = 3E18; uint256 public nftTax = 3; address public tokenFactory; address public vrfRescuer; mapping(uint256 => ChainLinkRequest) public chainLinkRequests; mapping(address => uint256[]) public NFTIds; mapping(address => address) public NFTtoMiniNFT; mapping(address => address) public miniNFTtoFFT; // Chinlink VRF VRFCoordinatorV2Interface COORDINATOR; bytes32 public keyHash; uint32 public callbackGasLimit = 1000000; uint32 public numWords = 1; uint16 public requestConfirmations = 3; uint64 public subscriptionId; uint256[] public s_randomWords; constructor( address vrfCoordinator_, address vrfRescuer_, bytes32 keyHash_, uint64 subscriptionId_ ) VRFConsumerBaseV2(vrfCoordinator_) { COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator_); vrfRescuer = vrfRescuer_; keyHash = keyHash_; subscriptionId = subscriptionId_; } modifier onlyDAO() { address dao = IFractonTokenFactory(tokenFactory).getDAOAddress(); require(msg.sender == dao, 'Fracton: caller is not Fracton DAO'); _; } modifier onlyFactoryOrOwner() { require( msg.sender == tokenFactory || msg.sender == owner(), 'Invalid Caller' ); _; } function updatePoolRelation( address miniNFT, address FFT, address NFT ) external virtual override onlyFactoryOrOwner returns (bool) { miniNFTtoFFT[miniNFT] = FFT; NFTtoMiniNFT[NFT] = miniNFT; emit UpdatePoolRelation(msg.sender, miniNFT, FFT, NFT); return true; } function poolClaim(address miniNFTContract, uint256 tokenID) external virtual override returns (bool) { require( miniNFTtoFFT[miniNFTContract] != address(0), 'swap: invalid contract' ); require(IFractonMiniNFT(miniNFTContract).claimBlindBox(tokenID) > 0); emit PoolClaim(msg.sender, miniNFTContract, tokenID); return true; } function swapMiniNFTtoFFT( address miniNFTContract, uint256 tokenID, uint256 amount ) external virtual override returns (bool) { require( miniNFTtoFFT[miniNFTContract] != address(0), 'swap: invalid contract' ); uint256 miniNFTBalance = IERC1155(miniNFTContract).balanceOf( msg.sender, tokenID ); require(miniNFTBalance >= amount, 'swap: balance insufficient'); IERC1155(miniNFTContract).safeTransferFrom( msg.sender, address(this), tokenID, amount, '' ); require( IFractonFFT(miniNFTtoFFT[miniNFTContract]).swapmint( amount * swapRate, msg.sender ) ); emit SwapMiniNFTtoFFT(msg.sender, miniNFTContract, tokenID, amount); return true; } function swapFFTtoMiniNFT(address miniNFTContract, uint256 miniNFTAmount) external virtual override returns (bool) { require( miniNFTtoFFT[miniNFTContract] != address(0), 'swap: invalid contract' ); require( IERC1155(miniNFTContract).balanceOf(address(this), 0) >= miniNFTAmount, 'swap:insufficient miniNFT in pool' ); uint256 FFTamount = miniNFTAmount * swapRate; uint256 taxfee = miniNFTAmount * fftTax; require( IFractonFFT(miniNFTtoFFT[miniNFTContract]).burnFrom(msg.sender, FFTamount) ); require( IFractonFFT(miniNFTtoFFT[miniNFTContract]).transferFrom( msg.sender, IFractonTokenFactory(tokenFactory).getVaultAddress(), taxfee ) ); IERC1155(miniNFTContract).safeTransferFrom( address(this), msg.sender, 0, miniNFTAmount, '' ); emit SwapFFTtoMiniNFT(msg.sender, miniNFTContract, miniNFTAmount); return true; } function swapMiniNFTtoNFT(address NFTContract) external virtual override returns (bool) { address miniNFTContract = NFTtoMiniNFT[NFTContract]; require(miniNFTContract != address(0), 'swap: invalid contract'); require(NFTIds[NFTContract].length > 0, 'swap: no NFT left'); uint256 requestId = COORDINATOR.requestRandomWords( keyHash, subscriptionId, requestConfirmations, callbackGasLimit, numWords ); chainLinkRequests[requestId] = ChainLinkRequest(msg.sender, NFTContract); emit SendChainlinkVRF(requestId, msg.sender, NFTContract); return true; } function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual override { address sender = chainLinkRequests[requestId].sender; address NFTContract = chainLinkRequests[requestId].nft; address miniNFTContract = NFTtoMiniNFT[NFTContract]; uint256 NFTNumber = NFTIds[NFTContract].length; require(NFTNumber > 0, 'swap: no NFT left'); uint256 NFTIndex = randomWords[0] % NFTNumber; uint256 NFTID = NFTIds[NFTContract][NFTIndex]; NFTIds[NFTContract][NFTIndex] = NFTIds[NFTContract][NFTNumber - 1]; NFTIds[NFTContract].pop(); IERC1155(miniNFTContract).safeTransferFrom( sender, address(this), 0, 1000, '' ); IFractonMiniNFT(miniNFTContract).burn(1000); IERC1155(miniNFTContract).safeTransferFrom( sender, IFractonTokenFactory(tokenFactory).getVaultAddress(), 0, nftTax, '' ); IERC721(NFTContract).transferFrom(address(this), sender, NFTID); emit SwapMiniNFTtoNFT(sender, NFTContract, NFTID); } function swapNFTtoMiniNFT( address NFTContract, address fromOwner, uint256 tokenId ) external virtual override onlyDAO returns (bool) { address miniNFTContract = NFTtoMiniNFT[NFTContract]; require(miniNFTContract != address(0), 'swap: invalid contract'); IERC721(NFTContract).safeTransferFrom(fromOwner, address(this), tokenId); require(IFractonMiniNFT(miniNFTContract).swapmint(1000, fromOwner)); return true; } function withdrawERC20(address project, uint256 amount) external onlyDAO returns (bool) { require( IERC20(project).transfer(msg.sender, amount), 'swap: withdraw failed' ); return true; } function withdrawERC721(address airdropContract, uint256 tokenId) external onlyDAO returns (bool) { require( NFTtoMiniNFT[airdropContract] == address(0), 'swap: cannot withdraw ProjectNFT' ); IERC721(airdropContract).safeTransferFrom( address(this), msg.sender, tokenId ); return true; } function withdrawERC1155( address airdropContract, uint256 tokenId, uint256 amount ) external onlyDAO returns (bool) { require( miniNFTtoFFT[airdropContract] == address(0), 'swap: cannot withdraw ProjectNFT' ); IERC1155(airdropContract).safeTransferFrom( address(this), msg.sender, tokenId, amount, '' ); return true; } function updateFactory(address factory_) external onlyOwner returns (bool) { require(tokenFactory == address(0), 'swap: factory has been set'); require(factory_ != address(0), 'swap: factory can not be 0 address'); tokenFactory = factory_; emit UpdateFactory(factory_); return true; } function updateTax(uint256 fftTax_, uint256 nftTax_) external onlyDAO returns (bool) { fftTax = fftTax_; nftTax = nftTax_; emit UpdateTax(fftTax_, nftTax_); return true; } function updateCallbackGasLimit(uint32 gasLimit_) external override onlyDAO returns (bool) { callbackGasLimit = gasLimit_; return true; } // only used when Chainlink VRF Service is down function emergencyUpdateVrf(address vrfCoordinator_) external { require(msg.sender == vrfRescuer, 'swap: invalid caller'); require(vrfCoordinator_ != address(0), 'swap: invaild coordiantor address'); COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator_); } function updateVrfSubscriptionId(uint64 subscriptionId_) external override onlyDAO returns (bool) { subscriptionId = subscriptionId_; return true; } function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) public virtual override returns (bytes4) { NFTIds[msg.sender].push(tokenId); return super.onERC721Received(operator, from, tokenId, data); } function numberOfNFT(address NFTContract) external view returns (uint256) { return NFTIds[NFTContract].length; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; import "../IERC721Receiver.sol"; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol) pragma solidity ^0.8.0; import "./ERC1155Receiver.sol"; /** * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens. * * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be * stuck. * * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns ( uint16, uint32, bytes32[] memory ); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription(uint64 subId) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. It ensures 2 things: * @dev 1. The fulfillment came from the VRFCoordinator * @dev 2. The consumer contract implements fulfillRandomWords. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash). Create subscription, fund it * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface * @dev subscription management functions). * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, * @dev callbackGasLimit, numWords), * @dev see (VRFCoordinatorInterface for a description of the arguments). * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomWords method. * * @dev The randomness argument to fulfillRandomWords is a set of random words * @dev generated from your requestId and the blockHash of the request. * * @dev If your contract could have concurrent requests open, you can use the * @dev requestId returned from requestRandomWords to track which response is associated * @dev with which randomness request. * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously. * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. It is for this reason that * @dev that you can signal to an oracle you'd like them to wait longer before * @dev responding to the request (however this is not enforced in the contract * @dev and so remains effective only in the case of unmodified oracle software). */ abstract contract VRFConsumerBaseV2 { error OnlyCoordinatorCanFulfill(address have, address want); address private immutable vrfCoordinator; /** * @param _vrfCoordinator address of VRFCoordinator contract */ constructor(address _vrfCoordinator) { vrfCoordinator = _vrfCoordinator; } /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomWords the VRF output expanded to the requested number of words */ function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual; // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external { if (msg.sender != vrfCoordinator) { revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator); } fulfillRandomWords(requestId, randomWords); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; interface IFractonMiniNFT { event StartNewRound(uint256 blockNumber, uint256 sellingPrice); event CloseRound(uint256 blockNumber); event ClaimBlindBox(address owner, uint256 tokenID, uint256 amount); event WithdrawEther(address caller, uint256 amount); event UpdateRoundSucceed(uint256 round, uint256 blockNumber); event UpdateBlindBoxPrice(uint256 price); function startNewRound(uint256 sellingPrice) external returns (bool); function closeRound() external returns (bool); function mintBlindBox(uint256 amount) external payable returns (uint256); function claimBlindBox(uint256 tokenID) external returns (uint256); function withdrawEther() external returns (bool); function updateRoundSucceed(uint256 round) external returns (bool); function updateBlindBoxPrice(uint256 BBoxPrice) external returns (bool); function totalSupply(uint256 id) external view returns (uint256); function burn(uint256 amount) external; function swapmint(uint256 amount, address to) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; interface IFractonFFT is IERC20 { event SetPercent(uint256 vaultPercent, uint256 pfVaultPercent); function swapmint(uint256 amount, address to) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function multiTransfer(address[] memory receivers, uint256[] memory amounts) external; function transferFrom( address from, address to, uint256 value ) external returns (bool); function burnFrom(address from, uint256 value) external returns (bool); function isExcludedFromFee(address account) external view returns (bool); function updateFee(uint256 vaultPercent_, uint256 pfVaultPercent_) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; interface IFractonSwap { event UpdatePoolRelation( address editor, address miniNFT, address FFT, address NFT ); event PoolClaim(address owner, address miniNFTcontract, uint256 tokenID); event SwapMiniNFTtoFFT( address owner, address miniNFTcontract, uint256 tokenID, uint256 miniNFTAmount ); event SwapFFTtoMiniNFT( address owner, address miniNFTcontract, uint256 miniNFTAmount ); event SendChainlinkVRF( uint256 requestId, address sender, address NFTContract ); event SwapMiniNFTtoNFT(address owner, address NFTContract, uint256 NFTID); event UpdateFactory(address factory); event UpdateTax(uint256 fftTax, uint256 nftTax); struct ChainLinkRequest { address sender; address nft; } function updatePoolRelation( address miniNFT, address FFT, address NFT ) external returns (bool); function poolClaim(address miniNFTcontract, uint256 tokenID) external returns (bool); function swapMiniNFTtoFFT( address miniNFTcontract, uint256 tokenID, uint256 amount ) external returns (bool); function swapFFTtoMiniNFT(address miniNFTcontract, uint256 miniNFTamount) external returns (bool); function swapMiniNFTtoNFT(address NFTContract) external returns (bool); function swapNFTtoMiniNFT( address NFTContract, address fromOwner, uint256 tokenId ) external returns (bool); function updateCallbackGasLimit(uint32 gasLimit_) external returns (bool); function updateVrfSubscriptionId(uint64 subscriptionId_) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; interface IFractonTokenFactory { function getowner() external view returns (address); function getDAOAddress() external view returns (address); function getVaultAddress() external view returns (address); function getSwapAddress() external view returns (address); function getPoolFundingVaultAddress() external view returns (address); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol) pragma solidity ^0.8.0; import "../IERC1155Receiver.sol"; import "../../../utils/introspection/ERC165.sol"; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"vrfCoordinator_","type":"address"},{"internalType":"address","name":"vrfRescuer_","type":"address"},{"internalType":"bytes32","name":"keyHash_","type":"bytes32"},{"internalType":"uint64","name":"subscriptionId_","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"miniNFTcontract","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"PoolClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"NFTContract","type":"address"}],"name":"SendChainlinkVRF","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"miniNFTcontract","type":"address"},{"indexed":false,"internalType":"uint256","name":"miniNFTAmount","type":"uint256"}],"name":"SwapFFTtoMiniNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"miniNFTcontract","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"miniNFTAmount","type":"uint256"}],"name":"SwapMiniNFTtoFFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"NFTContract","type":"address"},{"indexed":false,"internalType":"uint256","name":"NFTID","type":"uint256"}],"name":"SwapMiniNFTtoNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"factory","type":"address"}],"name":"UpdateFactory","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"editor","type":"address"},{"indexed":false,"internalType":"address","name":"miniNFT","type":"address"},{"indexed":false,"internalType":"address","name":"FFT","type":"address"},{"indexed":false,"internalType":"address","name":"NFT","type":"address"}],"name":"UpdatePoolRelation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fftTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftTax","type":"uint256"}],"name":"UpdateTax","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NFTtoMiniNFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callbackGasLimit","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"chainLinkRequests","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"nft","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"vrfCoordinator_","type":"address"}],"name":"emergencyUpdateVrf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fftTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"miniNFTtoFFT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numWords","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"NFTContract","type":"address"}],"name":"numberOfNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miniNFTContract","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"poolClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requestConfirmations","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_randomWords","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subscriptionId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"miniNFTContract","type":"address"},{"internalType":"uint256","name":"miniNFTAmount","type":"uint256"}],"name":"swapFFTtoMiniNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"miniNFTContract","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapMiniNFTtoFFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NFTContract","type":"address"}],"name":"swapMiniNFTtoNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"NFTContract","type":"address"},{"internalType":"address","name":"fromOwner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"swapNFTtoMiniNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"gasLimit_","type":"uint32"}],"name":"updateCallbackGasLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory_","type":"address"}],"name":"updateFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"miniNFT","type":"address"},{"internalType":"address","name":"FFT","type":"address"},{"internalType":"address","name":"NFT","type":"address"}],"name":"updatePoolRelation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fftTax_","type":"uint256"},{"internalType":"uint256","name":"nftTax_","type":"uint256"}],"name":"updateTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"subscriptionId_","type":"uint64"}],"name":"updateVrfSubscriptionId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vrfRescuer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"airdropContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC1155","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"project","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"airdropContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"withdrawERC721","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052683635c9adc5dea000006001556729a2241af62c000060025560038055620f4240600c60006101000a81548163ffffffff021916908363ffffffff1602179055506001600c60046101000a81548163ffffffff021916908363ffffffff1602179055506003600c60086101000a81548161ffff021916908361ffff1602179055503480156200009257600080fd5b506040516200511e3803806200511e8339818101604052810190620000b8919062000380565b83620000d9620000cd620001ca60201b60201c565b620001d260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b8190555080600c600a6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050505050620003f2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002c8826200029b565b9050919050565b620002da81620002bb565b8114620002e657600080fd5b50565b600081519050620002fa81620002cf565b92915050565b6000819050919050565b620003158162000300565b81146200032157600080fd5b50565b60008151905062000335816200030a565b92915050565b600067ffffffffffffffff82169050919050565b6200035a816200033b565b81146200036657600080fd5b50565b6000815190506200037a816200034f565b92915050565b600080600080608085870312156200039d576200039c62000296565b5b6000620003ad87828801620002e9565b9450506020620003c087828801620002e9565b9350506040620003d38782880162000324565b9250506060620003e68782880162000369565b91505092959194509250565b608051614d0962000415600039600081816109d50152610a290152614d096000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80639c4da5ef11610130578063c309f024116100b8578063e77772fe1161007c578063e77772fe14610766578063f23a6e6114610784578063f2fde38b146107b4578063f3e414f8146107d0578063f6eaffc81461080057610232565b8063c309f0241461068a578063c3fde3db146106ba578063cd29e6da146106ea578063d453623a14610706578063d9f165dc1461073657610232565b8063b03e36e0116100ff578063b03e36e0146105be578063b0e8d086146105dc578063b0fb162f1461060c578063b7177fad1461062a578063bc197c811461065a57610232565b80639c4da5ef14610510578063a16ea0d414610540578063a1db978214610570578063a27a74e6146105a057610232565b80633e468757116101be57806370805f221161018257806370805f221461047c578063715018a6146104ac5780637ccfd7fc146104b65780638da5cb5b146104d45780639211dbe6146104f257610232565b80633e468757146103b057806347e9d074146103e057806355334ea71461041057806361728f3914610440578063698518e51461045e57610232565b80631fe543e3116102055780631fe543e3146102e557806324f74697146103015780632f37aa6d1461031f57806331d2ddd31461034f57806339ead7201461038057610232565b806301ffc9a71461023757806309c1ba2e14610267578063150b7a021461028557806315c93910146102b5575b600080fd5b610251600480360381019061024c9190613618565b610830565b60405161025e9190613660565b60405180910390f35b61026f6108aa565b60405161027c919061369e565b60405180910390f35b61029f600480360381019061029a91906137b2565b6108c4565b6040516102ac9190613849565b60405180910390f35b6102cf60048036038101906102ca9190613864565b610987565b6040516102dc91906138a0565b60405180910390f35b6102ff60048036038101906102fa9190613a0a565b6109d3565b005b610309610a93565b6040516103169190613a85565b60405180910390f35b61033960048036038101906103349190613aa0565b610aa9565b6040516103469190613660565b60405180910390f35b61036960048036038101906103649190613ae0565b610c0e565b604051610377929190613b1c565b60405180910390f35b61039a60048036038101906103959190613b45565b610c72565b6040516103a79190613660565b60405180910390f35b6103ca60048036038101906103c59190613b98565b610ed0565b6040516103d79190613660565b60405180910390f35b6103fa60048036038101906103f59190613bd8565b61107c565b6040516104079190613660565b60405180910390f35b61042a60048036038101906104259190613864565b61128f565b6040516104379190613660565b60405180910390f35b610448611619565b6040516104559190613c44565b60405180910390f35b61046661161f565b60405161047391906138a0565b60405180910390f35b61049660048036038101906104919190613864565b611625565b6040516104a39190613c5f565b60405180910390f35b6104b4611658565b005b6104be6116e0565b6040516104cb9190613a85565b60405180910390f35b6104dc6116f6565b6040516104e99190613c5f565b60405180910390f35b6104fa61171f565b6040516105079190613c5f565b60405180910390f35b61052a60048036038101906105259190613864565b611745565b6040516105379190613c5f565b60405180910390f35b61055a60048036038101906105559190613b45565b611778565b6040516105679190613660565b60405180910390f35b61058a60048036038101906105859190613b98565b611ad5565b6040516105979190613660565b60405180910390f35b6105a8611cbf565b6040516105b591906138a0565b60405180910390f35b6105c6611cc5565b6040516105d391906138a0565b60405180910390f35b6105f660048036038101906105f19190613ca6565b611ccb565b6040516106039190613660565b60405180910390f35b610614611e09565b6040516106219190613cf0565b60405180910390f35b610644600480360381019061063f9190613b98565b611e1d565b6040516106519190613660565b60405180910390f35b610674600480360381019061066f9190613dc0565b612322565b6040516106819190613849565b60405180910390f35b6106a4600480360381019061069f9190613b98565b612337565b6040516106b191906138a0565b60405180910390f35b6106d460048036038101906106cf9190613ebb565b612368565b6040516106e19190613660565b60405180910390f35b61070460048036038101906106ff9190613864565b6124ae565b005b610720600480360381019061071b9190613ee8565b6125f2565b60405161072d9190613660565b60405180910390f35b610750600480360381019061074b9190613864565b6128ed565b60405161075d9190613660565b60405180910390f35b61076e612aed565b60405161077b9190613c5f565b60405180910390f35b61079e60048036038101906107999190613f3b565b612b13565b6040516107ab9190613849565b60405180910390f35b6107ce60048036038101906107c99190613864565b612b28565b005b6107ea60048036038101906107e59190613b98565b612c20565b6040516107f79190613660565b60405180910390f35b61081a60048036038101906108159190613ae0565b612e7b565b60405161082791906138a0565b60405180910390f35b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a357506108a282612e9f565b5b9050919050565b600c600a9054906101000a900467ffffffffffffffff1681565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084908060018154018082558091505060019003906000526020600020016000909190919091505561097c86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f09565b905095945050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8557337f00000000000000000000000000000000000000000000000000000000000000006040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401610a7c929190613b1c565b60405180910390fd5b610a8f8282612f1d565b5050565b600c60009054906101000a900463ffffffff1681565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c9190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390614097565b60405180910390fd5b83600281905550826003819055507f7240b53819d9ad591da2c6d5cc4317bfb99daeaa5deb5d86e5266b4ddda730f48484604051610bfb9291906140b7565b60405180910390a1600191505092915050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cdd57600080fd5b505afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d159190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a9061412c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663f242432a303387876040518563ffffffff1660e01b8152600401610e929493929190614183565b600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b5050505060019150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790614227565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff16635e7ff0cc846040518263ffffffff1660e01b8152600401610fdb91906138a0565b602060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102d919061425c565b1161103757600080fd5b7fbf6457deb9cf573fcf1d02fe7d69b9252eb93234c206ca1aa5460d49ca6d0f2033848460405161106a93929190614289565b60405180910390a16001905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061110c57506110dd6116f6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61114b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111429061430c565b60405180910390fd5b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffb79fd7a650dfff8beb67431543907435e816299415c6d6c6c219f8628547d1b3385858560405161127c949392919061432c565b60405180910390a1600190509392505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90614227565b60405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050116113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906143bd565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600b54600c600a9054906101000a900467ffffffffffffffff16600c60089054906101000a900461ffff16600c60009054906101000a900463ffffffff16600c60049054906101000a900463ffffffff166040518663ffffffff1660e01b815260040161149a9594939291906143dd565b602060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ec919061425c565b905060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f5170fc66ae1e649942b5dc289f0ee22f9b88be08fd8834c6e014398628e625ad81338660405161160693929190614430565b60405180910390a1600192505050919050565b600b5481565b60015481565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116606134e0565b73ffffffffffffffffffffffffffffffffffffffff1661167e6116f6565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb906144b3565b60405180910390fd5b6116de60006134e8565b565b600c60049054906101000a900463ffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90614227565b60405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1662fdd58e33866040518363ffffffff1660e01b81526004016118849291906144d3565b60206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d4919061425c565b905082811015611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090614548565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663f242432a333087876040518563ffffffff1660e01b81526004016119589493929190614183565b600060405180830381600087803b15801561197257600080fd5b505af1158015611986573d6000803e3d6000fd5b50505050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663937eb61a60015485611a139190614597565b336040518363ffffffff1660e01b8152600401611a319291906145f1565b602060405180830381600087803b158015611a4b57600080fd5b505af1158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a839190614646565b611a8c57600080fd5b7f6df6997c537d5ddf7d8c92e0ac7eebab95ae55405a098df89dc529054f14c77e33868686604051611ac19493929190614673565b60405180910390a160019150509392505050565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b4057600080fd5b505afa158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b789190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90614097565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401611c239291906144d3565b602060405180830381600087803b158015611c3d57600080fd5b505af1158015611c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c759190614646565b611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab90614704565b60405180910390fd5b600191505092915050565b60025481565b60035481565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3657600080fd5b505afa158015611d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6e9190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590614097565b60405180910390fd5b82600c60006101000a81548163ffffffff021916908363ffffffff1602179055506001915050919050565b600c60089054906101000a900461ffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee490614227565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff1662fdd58e3060006040518363ffffffff1660e01b8152600401611f29929190614769565b60206040518083038186803b158015611f4157600080fd5b505afa158015611f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f79919061425c565b1015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614804565b60405180910390fd5b600060015483611fca9190614597565b9050600060025484611fdc9190614597565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033846040518363ffffffff1660e01b81526004016120789291906144d3565b602060405180830381600087803b15801561209257600080fd5b505af11580156120a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ca9190614646565b6120d357600080fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365cacaa46040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b757600080fd5b505afa1580156121cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ef9190613fe7565b846040518463ffffffff1660e01b815260040161220e93929190614289565b602060405180830381600087803b15801561222857600080fd5b505af115801561223c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122609190614646565b61226957600080fd5b8473ffffffffffffffffffffffffffffffffffffffff1663f242432a30336000886040518563ffffffff1660e01b81526004016122a99493929190614824565b600060405180830381600087803b1580156122c357600080fd5b505af11580156122d7573d6000803e3d6000fd5b505050507f236f5c62767c43336cff7989303208f7897ab3c998c40937b3f5831f74f9782933868660405161230e93929190614289565b60405180910390a160019250505092915050565b600063bc197c8160e01b905095945050505050565b6007602052816000526040600020818154811061235357600080fd5b90600052602060002001600091509150505481565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123d357600080fd5b505afa1580156123e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240b9190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290614097565b60405180910390fd5b82600c600a6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001915050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461253e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612535906148c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a59061495a565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561265d57600080fd5b505afa158015612671573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126959190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc90614097565b60405180910390fd5b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614227565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166342842e0e8630876040518463ffffffff1660e01b815260040161281693929190614289565b600060405180830381600087803b15801561283057600080fd5b505af1158015612844573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663937eb61a6103e8876040518363ffffffff1660e01b81526004016128859291906149b5565b602060405180830381600087803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d79190614646565b6128e057600080fd5b6001925050509392505050565b60006128f76134e0565b73ffffffffffffffffffffffffffffffffffffffff166129156116f6565b73ffffffffffffffffffffffffffffffffffffffff161461296b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612962906144b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f390614a2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614abc565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f20690ae37b722d1d6265acdad124822baeb394891cc396d0722cbdb5fa2a683d82604051612adc9190613c5f565b60405180910390a160019050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063f23a6e6160e01b905095945050505050565b612b306134e0565b73ffffffffffffffffffffffffffffffffffffffff16612b4e6116f6565b73ffffffffffffffffffffffffffffffffffffffff1614612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b906144b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614b4e565b60405180910390fd5b612c1d816134e8565b50565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8b57600080fd5b505afa158015612c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc39190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a90614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df89061412c565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e3033866040518463ffffffff1660e01b8152600401612e3e93929190614289565b600060405180830381600087803b158015612e5857600080fd5b505af1158015612e6c573d6000803e3d6000fd5b50505050600191505092915050565b600d8181548110612e8b57600080fd5b906000526020600020016000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600063150b7a0260e01b9050949350505050565b60006006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006006600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008111613081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613078906143bd565b60405180910390fd5b6000818660008151811061309857613097614b6e565b5b60200260200101516130aa9190614bcc565b90506000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106130ff576130fe614b6e565b5b90600052602060002001549050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846131589190614bfd565b8154811061316957613168614b6e565b5b9060005260206000200154600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106131c5576131c4614b6e565b5b9060005260206000200181905550600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061322257613221614c31565b5b600190038181906000526020600020016000905590558373ffffffffffffffffffffffffffffffffffffffff1663f242432a873060006103e86040518563ffffffff1660e01b815260040161327a9493929190614c60565b600060405180830381600087803b15801561329457600080fd5b505af11580156132a8573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff166342966c686103e86040518263ffffffff1660e01b81526004016132e79190614cb8565b600060405180830381600087803b15801561330157600080fd5b505af1158015613315573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663f242432a87600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365cacaa46040518163ffffffff1660e01b815260040160206040518083038186803b15801561339e57600080fd5b505afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d69190613fe7565b60006003546040518563ffffffff1660e01b81526004016133fa9493929190614824565b600060405180830381600087803b15801561341457600080fd5b505af1158015613428573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff166323b872dd3088846040518463ffffffff1660e01b815260040161346993929190614289565b600060405180830381600087803b15801561348357600080fd5b505af1158015613497573d6000803e3d6000fd5b505050507fa88be4b765383f2318ac178576a49a6f941e847e2121fbe1c044be72290212fb8686836040516134ce93929190614289565b60405180910390a15050505050505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135f5816135c0565b811461360057600080fd5b50565b600081359050613612816135ec565b92915050565b60006020828403121561362e5761362d6135b6565b5b600061363c84828501613603565b91505092915050565b60008115159050919050565b61365a81613645565b82525050565b60006020820190506136756000830184613651565b92915050565b600067ffffffffffffffff82169050919050565b6136988161367b565b82525050565b60006020820190506136b3600083018461368f565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136e4826136b9565b9050919050565b6136f4816136d9565b81146136ff57600080fd5b50565b600081359050613711816136eb565b92915050565b6000819050919050565b61372a81613717565b811461373557600080fd5b50565b60008135905061374781613721565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137725761377161374d565b5b8235905067ffffffffffffffff81111561378f5761378e613752565b5b6020830191508360018202830111156137ab576137aa613757565b5b9250929050565b6000806000806000608086880312156137ce576137cd6135b6565b5b60006137dc88828901613702565b95505060206137ed88828901613702565b94505060406137fe88828901613738565b935050606086013567ffffffffffffffff81111561381f5761381e6135bb565b5b61382b8882890161375c565b92509250509295509295909350565b613843816135c0565b82525050565b600060208201905061385e600083018461383a565b92915050565b60006020828403121561387a576138796135b6565b5b600061388884828501613702565b91505092915050565b61389a81613717565b82525050565b60006020820190506138b56000830184613891565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613904826138bb565b810181811067ffffffffffffffff82111715613923576139226138cc565b5b80604052505050565b60006139366135ac565b905061394282826138fb565b919050565b600067ffffffffffffffff821115613962576139616138cc565b5b602082029050602081019050919050565b600061398661398184613947565b61392c565b905080838252602082019050602084028301858111156139a9576139a8613757565b5b835b818110156139d257806139be8882613738565b8452602084019350506020810190506139ab565b5050509392505050565b600082601f8301126139f1576139f061374d565b5b8135613a01848260208601613973565b91505092915050565b60008060408385031215613a2157613a206135b6565b5b6000613a2f85828601613738565b925050602083013567ffffffffffffffff811115613a5057613a4f6135bb565b5b613a5c858286016139dc565b9150509250929050565b600063ffffffff82169050919050565b613a7f81613a66565b82525050565b6000602082019050613a9a6000830184613a76565b92915050565b60008060408385031215613ab757613ab66135b6565b5b6000613ac585828601613738565b9250506020613ad685828601613738565b9150509250929050565b600060208284031215613af657613af56135b6565b5b6000613b0484828501613738565b91505092915050565b613b16816136d9565b82525050565b6000604082019050613b316000830185613b0d565b613b3e6020830184613b0d565b9392505050565b600080600060608486031215613b5e57613b5d6135b6565b5b6000613b6c86828701613702565b9350506020613b7d86828701613738565b9250506040613b8e86828701613738565b9150509250925092565b60008060408385031215613baf57613bae6135b6565b5b6000613bbd85828601613702565b9250506020613bce85828601613738565b9150509250929050565b600080600060608486031215613bf157613bf06135b6565b5b6000613bff86828701613702565b9350506020613c1086828701613702565b9250506040613c2186828701613702565b9150509250925092565b6000819050919050565b613c3e81613c2b565b82525050565b6000602082019050613c596000830184613c35565b92915050565b6000602082019050613c746000830184613b0d565b92915050565b613c8381613a66565b8114613c8e57600080fd5b50565b600081359050613ca081613c7a565b92915050565b600060208284031215613cbc57613cbb6135b6565b5b6000613cca84828501613c91565b91505092915050565b600061ffff82169050919050565b613cea81613cd3565b82525050565b6000602082019050613d056000830184613ce1565b92915050565b600080fd5b600067ffffffffffffffff821115613d2b57613d2a6138cc565b5b613d34826138bb565b9050602081019050919050565b82818337600083830152505050565b6000613d63613d5e84613d10565b61392c565b905082815260208101848484011115613d7f57613d7e613d0b565b5b613d8a848285613d41565b509392505050565b600082601f830112613da757613da661374d565b5b8135613db7848260208601613d50565b91505092915050565b600080600080600060a08688031215613ddc57613ddb6135b6565b5b6000613dea88828901613702565b9550506020613dfb88828901613702565b945050604086013567ffffffffffffffff811115613e1c57613e1b6135bb565b5b613e28888289016139dc565b935050606086013567ffffffffffffffff811115613e4957613e486135bb565b5b613e55888289016139dc565b925050608086013567ffffffffffffffff811115613e7657613e756135bb565b5b613e8288828901613d92565b9150509295509295909350565b613e988161367b565b8114613ea357600080fd5b50565b600081359050613eb581613e8f565b92915050565b600060208284031215613ed157613ed06135b6565b5b6000613edf84828501613ea6565b91505092915050565b600080600060608486031215613f0157613f006135b6565b5b6000613f0f86828701613702565b9350506020613f2086828701613702565b9250506040613f3186828701613738565b9150509250925092565b600080600080600060a08688031215613f5757613f566135b6565b5b6000613f6588828901613702565b9550506020613f7688828901613702565b9450506040613f8788828901613738565b9350506060613f9888828901613738565b925050608086013567ffffffffffffffff811115613fb957613fb86135bb565b5b613fc588828901613d92565b9150509295509295909350565b600081519050613fe1816136eb565b92915050565b600060208284031215613ffd57613ffc6135b6565b5b600061400b84828501613fd2565b91505092915050565b600082825260208201905092915050565b7f46726163746f6e3a2063616c6c6572206973206e6f742046726163746f6e204460008201527f414f000000000000000000000000000000000000000000000000000000000000602082015250565b6000614081602283614014565b915061408c82614025565b604082019050919050565b600060208201905081810360008301526140b081614074565b9050919050565b60006040820190506140cc6000830185613891565b6140d96020830184613891565b9392505050565b7f737761703a2063616e6e6f742077697468647261772050726f6a6563744e4654600082015250565b6000614116602083614014565b9150614121826140e0565b602082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b600082825260208201905092915050565b50565b600061416d60008361414c565b91506141788261415d565b600082019050919050565b600060a0820190506141986000830187613b0d565b6141a56020830186613b0d565b6141b26040830185613891565b6141bf6060830184613891565b81810360808301526141d081614160565b905095945050505050565b7f737761703a20696e76616c696420636f6e747261637400000000000000000000600082015250565b6000614211601683614014565b915061421c826141db565b602082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b60008151905061425681613721565b92915050565b600060208284031215614272576142716135b6565b5b600061428084828501614247565b91505092915050565b600060608201905061429e6000830186613b0d565b6142ab6020830185613b0d565b6142b86040830184613891565b949350505050565b7f496e76616c69642043616c6c6572000000000000000000000000000000000000600082015250565b60006142f6600e83614014565b9150614301826142c0565b602082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b60006080820190506143416000830187613b0d565b61434e6020830186613b0d565b61435b6040830185613b0d565b6143686060830184613b0d565b95945050505050565b7f737761703a206e6f204e4654206c656674000000000000000000000000000000600082015250565b60006143a7601183614014565b91506143b282614371565b602082019050919050565b600060208201905081810360008301526143d68161439a565b9050919050565b600060a0820190506143f26000830188613c35565b6143ff602083018761368f565b61440c6040830186613ce1565b6144196060830185613a76565b6144266080830184613a76565b9695505050505050565b60006060820190506144456000830186613891565b6144526020830185613b0d565b61445f6040830184613b0d565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061449d602083614014565b91506144a882614467565b602082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b60006040820190506144e86000830185613b0d565b6144f56020830184613891565b9392505050565b7f737761703a2062616c616e636520696e73756666696369656e74000000000000600082015250565b6000614532601a83614014565b915061453d826144fc565b602082019050919050565b6000602082019050818103600083015261456181614525565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145a282613717565b91506145ad83613717565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e6576145e5614568565b5b828202905092915050565b60006040820190506146066000830185613891565b6146136020830184613b0d565b9392505050565b61462381613645565b811461462e57600080fd5b50565b6000815190506146408161461a565b92915050565b60006020828403121561465c5761465b6135b6565b5b600061466a84828501614631565b91505092915050565b60006080820190506146886000830187613b0d565b6146956020830186613b0d565b6146a26040830185613891565b6146af6060830184613891565b95945050505050565b7f737761703a207769746864726177206661696c65640000000000000000000000600082015250565b60006146ee601583614014565b91506146f9826146b8565b602082019050919050565b6000602082019050818103600083015261471d816146e1565b9050919050565b6000819050919050565b6000819050919050565b600061475361474e61474984614724565b61472e565b613717565b9050919050565b61476381614738565b82525050565b600060408201905061477e6000830185613b0d565b61478b602083018461475a565b9392505050565b7f737761703a696e73756666696369656e74206d696e694e465420696e20706f6f60008201527f6c00000000000000000000000000000000000000000000000000000000000000602082015250565b60006147ee602183614014565b91506147f982614792565b604082019050919050565b6000602082019050818103600083015261481d816147e1565b9050919050565b600060a0820190506148396000830187613b0d565b6148466020830186613b0d565b614853604083018561475a565b6148606060830184613891565b818103608083015261487181614160565b905095945050505050565b7f737761703a20696e76616c69642063616c6c6572000000000000000000000000600082015250565b60006148b2601483614014565b91506148bd8261487c565b602082019050919050565b600060208201905081810360008301526148e1816148a5565b9050919050565b7f737761703a20696e7661696c6420636f6f726469616e746f722061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614944602183614014565b915061494f826148e8565b604082019050919050565b6000602082019050818103600083015261497381614937565b9050919050565b6000819050919050565b600061499f61499a6149958461497a565b61472e565b613717565b9050919050565b6149af81614984565b82525050565b60006040820190506149ca60008301856149a6565b6149d76020830184613b0d565b9392505050565b7f737761703a20666163746f727920686173206265656e20736574000000000000600082015250565b6000614a14601a83614014565b9150614a1f826149de565b602082019050919050565b60006020820190508181036000830152614a4381614a07565b9050919050565b7f737761703a20666163746f72792063616e206e6f74206265203020616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa6602283614014565b9150614ab182614a4a565b604082019050919050565b60006020820190508181036000830152614ad581614a99565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b38602683614014565b9150614b4382614adc565b604082019050919050565b60006020820190508181036000830152614b6781614b2b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bd782613717565b9150614be283613717565b925082614bf257614bf1614b9d565b5b828206905092915050565b6000614c0882613717565b9150614c1383613717565b925082821015614c2657614c25614568565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060a082019050614c756000830187613b0d565b614c826020830186613b0d565b614c8f604083018561475a565b614c9c60608301846149a6565b8181036080830152614cad81614160565b905095945050505050565b6000602082019050614ccd60008301846149a6565b9291505056fea26469706673582212206a39c0a078e8eba9317cecc90cc0c63fd53b8104008a673238d809c810cc2a3364736f6c63430008090033000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990900000000000000000000000087374cd9258dd964390608cc30b4bdc71597e9629fe0eebf5e446e3c998ec9bb19951541aee00bb90ea201ae456421a2ded8680500000000000000000000000000000000000000000000000000000000000000cc
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c80639c4da5ef11610130578063c309f024116100b8578063e77772fe1161007c578063e77772fe14610766578063f23a6e6114610784578063f2fde38b146107b4578063f3e414f8146107d0578063f6eaffc81461080057610232565b8063c309f0241461068a578063c3fde3db146106ba578063cd29e6da146106ea578063d453623a14610706578063d9f165dc1461073657610232565b8063b03e36e0116100ff578063b03e36e0146105be578063b0e8d086146105dc578063b0fb162f1461060c578063b7177fad1461062a578063bc197c811461065a57610232565b80639c4da5ef14610510578063a16ea0d414610540578063a1db978214610570578063a27a74e6146105a057610232565b80633e468757116101be57806370805f221161018257806370805f221461047c578063715018a6146104ac5780637ccfd7fc146104b65780638da5cb5b146104d45780639211dbe6146104f257610232565b80633e468757146103b057806347e9d074146103e057806355334ea71461041057806361728f3914610440578063698518e51461045e57610232565b80631fe543e3116102055780631fe543e3146102e557806324f74697146103015780632f37aa6d1461031f57806331d2ddd31461034f57806339ead7201461038057610232565b806301ffc9a71461023757806309c1ba2e14610267578063150b7a021461028557806315c93910146102b5575b600080fd5b610251600480360381019061024c9190613618565b610830565b60405161025e9190613660565b60405180910390f35b61026f6108aa565b60405161027c919061369e565b60405180910390f35b61029f600480360381019061029a91906137b2565b6108c4565b6040516102ac9190613849565b60405180910390f35b6102cf60048036038101906102ca9190613864565b610987565b6040516102dc91906138a0565b60405180910390f35b6102ff60048036038101906102fa9190613a0a565b6109d3565b005b610309610a93565b6040516103169190613a85565b60405180910390f35b61033960048036038101906103349190613aa0565b610aa9565b6040516103469190613660565b60405180910390f35b61036960048036038101906103649190613ae0565b610c0e565b604051610377929190613b1c565b60405180910390f35b61039a60048036038101906103959190613b45565b610c72565b6040516103a79190613660565b60405180910390f35b6103ca60048036038101906103c59190613b98565b610ed0565b6040516103d79190613660565b60405180910390f35b6103fa60048036038101906103f59190613bd8565b61107c565b6040516104079190613660565b60405180910390f35b61042a60048036038101906104259190613864565b61128f565b6040516104379190613660565b60405180910390f35b610448611619565b6040516104559190613c44565b60405180910390f35b61046661161f565b60405161047391906138a0565b60405180910390f35b61049660048036038101906104919190613864565b611625565b6040516104a39190613c5f565b60405180910390f35b6104b4611658565b005b6104be6116e0565b6040516104cb9190613a85565b60405180910390f35b6104dc6116f6565b6040516104e99190613c5f565b60405180910390f35b6104fa61171f565b6040516105079190613c5f565b60405180910390f35b61052a60048036038101906105259190613864565b611745565b6040516105379190613c5f565b60405180910390f35b61055a60048036038101906105559190613b45565b611778565b6040516105679190613660565b60405180910390f35b61058a60048036038101906105859190613b98565b611ad5565b6040516105979190613660565b60405180910390f35b6105a8611cbf565b6040516105b591906138a0565b60405180910390f35b6105c6611cc5565b6040516105d391906138a0565b60405180910390f35b6105f660048036038101906105f19190613ca6565b611ccb565b6040516106039190613660565b60405180910390f35b610614611e09565b6040516106219190613cf0565b60405180910390f35b610644600480360381019061063f9190613b98565b611e1d565b6040516106519190613660565b60405180910390f35b610674600480360381019061066f9190613dc0565b612322565b6040516106819190613849565b60405180910390f35b6106a4600480360381019061069f9190613b98565b612337565b6040516106b191906138a0565b60405180910390f35b6106d460048036038101906106cf9190613ebb565b612368565b6040516106e19190613660565b60405180910390f35b61070460048036038101906106ff9190613864565b6124ae565b005b610720600480360381019061071b9190613ee8565b6125f2565b60405161072d9190613660565b60405180910390f35b610750600480360381019061074b9190613864565b6128ed565b60405161075d9190613660565b60405180910390f35b61076e612aed565b60405161077b9190613c5f565b60405180910390f35b61079e60048036038101906107999190613f3b565b612b13565b6040516107ab9190613849565b60405180910390f35b6107ce60048036038101906107c99190613864565b612b28565b005b6107ea60048036038101906107e59190613b98565b612c20565b6040516107f79190613660565b60405180910390f35b61081a60048036038101906108159190613ae0565b612e7b565b60405161082791906138a0565b60405180910390f35b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108a357506108a282612e9f565b5b9050919050565b600c600a9054906101000a900467ffffffffffffffff1681565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084908060018154018082558091505060019003906000526020600020016000909190919091505561097c86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612f09565b905095945050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b7f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8557337f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699096040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401610a7c929190613b1c565b60405180910390fd5b610a8f8282612f1d565b5050565b600c60009054906101000a900463ffffffff1681565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c9190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390614097565b60405180910390fd5b83600281905550826003819055507f7240b53819d9ad591da2c6d5cc4317bfb99daeaa5deb5d86e5266b4ddda730f48484604051610bfb9291906140b7565b60405180910390a1600191505092915050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cdd57600080fd5b505afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d159190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4a9061412c565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663f242432a303387876040518563ffffffff1660e01b8152600401610e929493929190614183565b600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b5050505060019150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610fa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9790614227565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff16635e7ff0cc846040518263ffffffff1660e01b8152600401610fdb91906138a0565b602060405180830381600087803b158015610ff557600080fd5b505af1158015611009573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102d919061425c565b1161103757600080fd5b7fbf6457deb9cf573fcf1d02fe7d69b9252eb93234c206ca1aa5460d49ca6d0f2033848460405161106a93929190614289565b60405180910390a16001905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061110c57506110dd6116f6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61114b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111429061430c565b60405180910390fd5b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ffb79fd7a650dfff8beb67431543907435e816299415c6d6c6c219f8628547d1b3385858560405161127c949392919061432c565b60405180910390a1600190509392505050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90614227565b60405180910390fd5b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050116113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e0906143bd565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600b54600c600a9054906101000a900467ffffffffffffffff16600c60089054906101000a900461ffff16600c60009054906101000a900463ffffffff16600c60049054906101000a900463ffffffff166040518663ffffffff1660e01b815260040161149a9594939291906143dd565b602060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ec919061425c565b905060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507f5170fc66ae1e649942b5dc289f0ee22f9b88be08fd8834c6e014398628e625ad81338660405161160693929190614430565b60405180910390a1600192505050919050565b600b5481565b60015481565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116606134e0565b73ffffffffffffffffffffffffffffffffffffffff1661167e6116f6565b73ffffffffffffffffffffffffffffffffffffffff16146116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb906144b3565b60405180910390fd5b6116de60006134e8565b565b600c60049054906101000a900463ffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f90614227565b60405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1662fdd58e33866040518363ffffffff1660e01b81526004016118849291906144d3565b60206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d4919061425c565b905082811015611919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191090614548565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663f242432a333087876040518563ffffffff1660e01b81526004016119589493929190614183565b600060405180830381600087803b15801561197257600080fd5b505af1158015611986573d6000803e3d6000fd5b50505050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663937eb61a60015485611a139190614597565b336040518363ffffffff1660e01b8152600401611a319291906145f1565b602060405180830381600087803b158015611a4b57600080fd5b505af1158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a839190614646565b611a8c57600080fd5b7f6df6997c537d5ddf7d8c92e0ac7eebab95ae55405a098df89dc529054f14c77e33868686604051611ac19493929190614673565b60405180910390a160019150509392505050565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b4057600080fd5b505afa158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b789190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90614097565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401611c239291906144d3565b602060405180830381600087803b158015611c3d57600080fd5b505af1158015611c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c759190614646565b611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab90614704565b60405180910390fd5b600191505092915050565b60025481565b60035481565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3657600080fd5b505afa158015611d4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6e9190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd590614097565b60405180910390fd5b82600c60006101000a81548163ffffffff021916908363ffffffff1602179055506001915050919050565b600c60089054906101000a900461ffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee490614227565b60405180910390fd5b818373ffffffffffffffffffffffffffffffffffffffff1662fdd58e3060006040518363ffffffff1660e01b8152600401611f29929190614769565b60206040518083038186803b158015611f4157600080fd5b505afa158015611f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f79919061425c565b1015611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190614804565b60405180910390fd5b600060015483611fca9190614597565b9050600060025484611fdc9190614597565b9050600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379cc679033846040518363ffffffff1660e01b81526004016120789291906144d3565b602060405180830381600087803b15801561209257600080fd5b505af11580156120a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ca9190614646565b6120d357600080fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365cacaa46040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b757600080fd5b505afa1580156121cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ef9190613fe7565b846040518463ffffffff1660e01b815260040161220e93929190614289565b602060405180830381600087803b15801561222857600080fd5b505af115801561223c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122609190614646565b61226957600080fd5b8473ffffffffffffffffffffffffffffffffffffffff1663f242432a30336000886040518563ffffffff1660e01b81526004016122a99493929190614824565b600060405180830381600087803b1580156122c357600080fd5b505af11580156122d7573d6000803e3d6000fd5b505050507f236f5c62767c43336cff7989303208f7897ab3c998c40937b3f5831f74f9782933868660405161230e93929190614289565b60405180910390a160019250505092915050565b600063bc197c8160e01b905095945050505050565b6007602052816000526040600020818154811061235357600080fd5b90600052602060002001600091509150505481565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123d357600080fd5b505afa1580156123e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240b9190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461247b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247290614097565b60405180910390fd5b82600c600a6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001915050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461253e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612535906148c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a59061495a565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561265d57600080fd5b505afa158015612671573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126959190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fc90614097565b60405180910390fd5b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614227565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166342842e0e8630876040518463ffffffff1660e01b815260040161281693929190614289565b600060405180830381600087803b15801561283057600080fd5b505af1158015612844573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663937eb61a6103e8876040518363ffffffff1660e01b81526004016128859291906149b5565b602060405180830381600087803b15801561289f57600080fd5b505af11580156128b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d79190614646565b6128e057600080fd5b6001925050509392505050565b60006128f76134e0565b73ffffffffffffffffffffffffffffffffffffffff166129156116f6565b73ffffffffffffffffffffffffffffffffffffffff161461296b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612962906144b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f390614a2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390614abc565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f20690ae37b722d1d6265acdad124822baeb394891cc396d0722cbdb5fa2a683d82604051612adc9190613c5f565b60405180910390a160019050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063f23a6e6160e01b905095945050505050565b612b306134e0565b73ffffffffffffffffffffffffffffffffffffffff16612b4e6116f6565b73ffffffffffffffffffffffffffffffffffffffff1614612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b906144b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614b4e565b60405180910390fd5b612c1d816134e8565b50565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad9b44cd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8b57600080fd5b505afa158015612c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc39190613fe7565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a90614097565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df89061412c565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342842e0e3033866040518463ffffffff1660e01b8152600401612e3e93929190614289565b600060405180830381600087803b158015612e5857600080fd5b505af1158015612e6c573d6000803e3d6000fd5b50505050600191505092915050565b600d8181548110612e8b57600080fd5b906000526020600020016000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600063150b7a0260e01b9050949350505050565b60006006600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006006600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008111613081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613078906143bd565b60405180910390fd5b6000818660008151811061309857613097614b6e565b5b60200260200101516130aa9190614bcc565b90506000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106130ff576130fe614b6e565b5b90600052602060002001549050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846131589190614bfd565b8154811061316957613168614b6e565b5b9060005260206000200154600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106131c5576131c4614b6e565b5b9060005260206000200181905550600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061322257613221614c31565b5b600190038181906000526020600020016000905590558373ffffffffffffffffffffffffffffffffffffffff1663f242432a873060006103e86040518563ffffffff1660e01b815260040161327a9493929190614c60565b600060405180830381600087803b15801561329457600080fd5b505af11580156132a8573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff166342966c686103e86040518263ffffffff1660e01b81526004016132e79190614cb8565b600060405180830381600087803b15801561330157600080fd5b505af1158015613315573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663f242432a87600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166365cacaa46040518163ffffffff1660e01b815260040160206040518083038186803b15801561339e57600080fd5b505afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d69190613fe7565b60006003546040518563ffffffff1660e01b81526004016133fa9493929190614824565b600060405180830381600087803b15801561341457600080fd5b505af1158015613428573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff166323b872dd3088846040518463ffffffff1660e01b815260040161346993929190614289565b600060405180830381600087803b15801561348357600080fd5b505af1158015613497573d6000803e3d6000fd5b505050507fa88be4b765383f2318ac178576a49a6f941e847e2121fbe1c044be72290212fb8686836040516134ce93929190614289565b60405180910390a15050505050505050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135f5816135c0565b811461360057600080fd5b50565b600081359050613612816135ec565b92915050565b60006020828403121561362e5761362d6135b6565b5b600061363c84828501613603565b91505092915050565b60008115159050919050565b61365a81613645565b82525050565b60006020820190506136756000830184613651565b92915050565b600067ffffffffffffffff82169050919050565b6136988161367b565b82525050565b60006020820190506136b3600083018461368f565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136e4826136b9565b9050919050565b6136f4816136d9565b81146136ff57600080fd5b50565b600081359050613711816136eb565b92915050565b6000819050919050565b61372a81613717565b811461373557600080fd5b50565b60008135905061374781613721565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137725761377161374d565b5b8235905067ffffffffffffffff81111561378f5761378e613752565b5b6020830191508360018202830111156137ab576137aa613757565b5b9250929050565b6000806000806000608086880312156137ce576137cd6135b6565b5b60006137dc88828901613702565b95505060206137ed88828901613702565b94505060406137fe88828901613738565b935050606086013567ffffffffffffffff81111561381f5761381e6135bb565b5b61382b8882890161375c565b92509250509295509295909350565b613843816135c0565b82525050565b600060208201905061385e600083018461383a565b92915050565b60006020828403121561387a576138796135b6565b5b600061388884828501613702565b91505092915050565b61389a81613717565b82525050565b60006020820190506138b56000830184613891565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613904826138bb565b810181811067ffffffffffffffff82111715613923576139226138cc565b5b80604052505050565b60006139366135ac565b905061394282826138fb565b919050565b600067ffffffffffffffff821115613962576139616138cc565b5b602082029050602081019050919050565b600061398661398184613947565b61392c565b905080838252602082019050602084028301858111156139a9576139a8613757565b5b835b818110156139d257806139be8882613738565b8452602084019350506020810190506139ab565b5050509392505050565b600082601f8301126139f1576139f061374d565b5b8135613a01848260208601613973565b91505092915050565b60008060408385031215613a2157613a206135b6565b5b6000613a2f85828601613738565b925050602083013567ffffffffffffffff811115613a5057613a4f6135bb565b5b613a5c858286016139dc565b9150509250929050565b600063ffffffff82169050919050565b613a7f81613a66565b82525050565b6000602082019050613a9a6000830184613a76565b92915050565b60008060408385031215613ab757613ab66135b6565b5b6000613ac585828601613738565b9250506020613ad685828601613738565b9150509250929050565b600060208284031215613af657613af56135b6565b5b6000613b0484828501613738565b91505092915050565b613b16816136d9565b82525050565b6000604082019050613b316000830185613b0d565b613b3e6020830184613b0d565b9392505050565b600080600060608486031215613b5e57613b5d6135b6565b5b6000613b6c86828701613702565b9350506020613b7d86828701613738565b9250506040613b8e86828701613738565b9150509250925092565b60008060408385031215613baf57613bae6135b6565b5b6000613bbd85828601613702565b9250506020613bce85828601613738565b9150509250929050565b600080600060608486031215613bf157613bf06135b6565b5b6000613bff86828701613702565b9350506020613c1086828701613702565b9250506040613c2186828701613702565b9150509250925092565b6000819050919050565b613c3e81613c2b565b82525050565b6000602082019050613c596000830184613c35565b92915050565b6000602082019050613c746000830184613b0d565b92915050565b613c8381613a66565b8114613c8e57600080fd5b50565b600081359050613ca081613c7a565b92915050565b600060208284031215613cbc57613cbb6135b6565b5b6000613cca84828501613c91565b91505092915050565b600061ffff82169050919050565b613cea81613cd3565b82525050565b6000602082019050613d056000830184613ce1565b92915050565b600080fd5b600067ffffffffffffffff821115613d2b57613d2a6138cc565b5b613d34826138bb565b9050602081019050919050565b82818337600083830152505050565b6000613d63613d5e84613d10565b61392c565b905082815260208101848484011115613d7f57613d7e613d0b565b5b613d8a848285613d41565b509392505050565b600082601f830112613da757613da661374d565b5b8135613db7848260208601613d50565b91505092915050565b600080600080600060a08688031215613ddc57613ddb6135b6565b5b6000613dea88828901613702565b9550506020613dfb88828901613702565b945050604086013567ffffffffffffffff811115613e1c57613e1b6135bb565b5b613e28888289016139dc565b935050606086013567ffffffffffffffff811115613e4957613e486135bb565b5b613e55888289016139dc565b925050608086013567ffffffffffffffff811115613e7657613e756135bb565b5b613e8288828901613d92565b9150509295509295909350565b613e988161367b565b8114613ea357600080fd5b50565b600081359050613eb581613e8f565b92915050565b600060208284031215613ed157613ed06135b6565b5b6000613edf84828501613ea6565b91505092915050565b600080600060608486031215613f0157613f006135b6565b5b6000613f0f86828701613702565b9350506020613f2086828701613702565b9250506040613f3186828701613738565b9150509250925092565b600080600080600060a08688031215613f5757613f566135b6565b5b6000613f6588828901613702565b9550506020613f7688828901613702565b9450506040613f8788828901613738565b9350506060613f9888828901613738565b925050608086013567ffffffffffffffff811115613fb957613fb86135bb565b5b613fc588828901613d92565b9150509295509295909350565b600081519050613fe1816136eb565b92915050565b600060208284031215613ffd57613ffc6135b6565b5b600061400b84828501613fd2565b91505092915050565b600082825260208201905092915050565b7f46726163746f6e3a2063616c6c6572206973206e6f742046726163746f6e204460008201527f414f000000000000000000000000000000000000000000000000000000000000602082015250565b6000614081602283614014565b915061408c82614025565b604082019050919050565b600060208201905081810360008301526140b081614074565b9050919050565b60006040820190506140cc6000830185613891565b6140d96020830184613891565b9392505050565b7f737761703a2063616e6e6f742077697468647261772050726f6a6563744e4654600082015250565b6000614116602083614014565b9150614121826140e0565b602082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b600082825260208201905092915050565b50565b600061416d60008361414c565b91506141788261415d565b600082019050919050565b600060a0820190506141986000830187613b0d565b6141a56020830186613b0d565b6141b26040830185613891565b6141bf6060830184613891565b81810360808301526141d081614160565b905095945050505050565b7f737761703a20696e76616c696420636f6e747261637400000000000000000000600082015250565b6000614211601683614014565b915061421c826141db565b602082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b60008151905061425681613721565b92915050565b600060208284031215614272576142716135b6565b5b600061428084828501614247565b91505092915050565b600060608201905061429e6000830186613b0d565b6142ab6020830185613b0d565b6142b86040830184613891565b949350505050565b7f496e76616c69642043616c6c6572000000000000000000000000000000000000600082015250565b60006142f6600e83614014565b9150614301826142c0565b602082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b60006080820190506143416000830187613b0d565b61434e6020830186613b0d565b61435b6040830185613b0d565b6143686060830184613b0d565b95945050505050565b7f737761703a206e6f204e4654206c656674000000000000000000000000000000600082015250565b60006143a7601183614014565b91506143b282614371565b602082019050919050565b600060208201905081810360008301526143d68161439a565b9050919050565b600060a0820190506143f26000830188613c35565b6143ff602083018761368f565b61440c6040830186613ce1565b6144196060830185613a76565b6144266080830184613a76565b9695505050505050565b60006060820190506144456000830186613891565b6144526020830185613b0d565b61445f6040830184613b0d565b949350505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061449d602083614014565b91506144a882614467565b602082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b60006040820190506144e86000830185613b0d565b6144f56020830184613891565b9392505050565b7f737761703a2062616c616e636520696e73756666696369656e74000000000000600082015250565b6000614532601a83614014565b915061453d826144fc565b602082019050919050565b6000602082019050818103600083015261456181614525565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145a282613717565b91506145ad83613717565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145e6576145e5614568565b5b828202905092915050565b60006040820190506146066000830185613891565b6146136020830184613b0d565b9392505050565b61462381613645565b811461462e57600080fd5b50565b6000815190506146408161461a565b92915050565b60006020828403121561465c5761465b6135b6565b5b600061466a84828501614631565b91505092915050565b60006080820190506146886000830187613b0d565b6146956020830186613b0d565b6146a26040830185613891565b6146af6060830184613891565b95945050505050565b7f737761703a207769746864726177206661696c65640000000000000000000000600082015250565b60006146ee601583614014565b91506146f9826146b8565b602082019050919050565b6000602082019050818103600083015261471d816146e1565b9050919050565b6000819050919050565b6000819050919050565b600061475361474e61474984614724565b61472e565b613717565b9050919050565b61476381614738565b82525050565b600060408201905061477e6000830185613b0d565b61478b602083018461475a565b9392505050565b7f737761703a696e73756666696369656e74206d696e694e465420696e20706f6f60008201527f6c00000000000000000000000000000000000000000000000000000000000000602082015250565b60006147ee602183614014565b91506147f982614792565b604082019050919050565b6000602082019050818103600083015261481d816147e1565b9050919050565b600060a0820190506148396000830187613b0d565b6148466020830186613b0d565b614853604083018561475a565b6148606060830184613891565b818103608083015261487181614160565b905095945050505050565b7f737761703a20696e76616c69642063616c6c6572000000000000000000000000600082015250565b60006148b2601483614014565b91506148bd8261487c565b602082019050919050565b600060208201905081810360008301526148e1816148a5565b9050919050565b7f737761703a20696e7661696c6420636f6f726469616e746f722061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614944602183614014565b915061494f826148e8565b604082019050919050565b6000602082019050818103600083015261497381614937565b9050919050565b6000819050919050565b600061499f61499a6149958461497a565b61472e565b613717565b9050919050565b6149af81614984565b82525050565b60006040820190506149ca60008301856149a6565b6149d76020830184613b0d565b9392505050565b7f737761703a20666163746f727920686173206265656e20736574000000000000600082015250565b6000614a14601a83614014565b9150614a1f826149de565b602082019050919050565b60006020820190508181036000830152614a4381614a07565b9050919050565b7f737761703a20666163746f72792063616e206e6f74206265203020616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa6602283614014565b9150614ab182614a4a565b604082019050919050565b60006020820190508181036000830152614ad581614a99565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b38602683614014565b9150614b4382614adc565b604082019050919050565b60006020820190508181036000830152614b6781614b2b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bd782613717565b9150614be283613717565b925082614bf257614bf1614b9d565b5b828206905092915050565b6000614c0882613717565b9150614c1383613717565b925082821015614c2657614c25614568565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060a082019050614c756000830187613b0d565b614c826020830186613b0d565b614c8f604083018561475a565b614c9c60608301846149a6565b8181036080830152614cad81614160565b905095945050505050565b6000602082019050614ccd60008301846149a6565b9291505056fea26469706673582212206a39c0a078e8eba9317cecc90cc0c63fd53b8104008a673238d809c810cc2a3364736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990900000000000000000000000087374cd9258dd964390608cc30b4bdc71597e9629fe0eebf5e446e3c998ec9bb19951541aee00bb90ea201ae456421a2ded8680500000000000000000000000000000000000000000000000000000000000000cc
-----Decoded View---------------
Arg [0] : vrfCoordinator_ (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
Arg [1] : vrfRescuer_ (address): 0x87374CD9258Dd964390608Cc30B4Bdc71597E962
Arg [2] : keyHash_ (bytes32): 0x9fe0eebf5e446e3c998ec9bb19951541aee00bb90ea201ae456421a2ded86805
Arg [3] : subscriptionId_ (uint64): 204
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Arg [1] : 00000000000000000000000087374cd9258dd964390608cc30b4bdc71597e962
Arg [2] : 9fe0eebf5e446e3c998ec9bb19951541aee00bb90ea201ae456421a2ded86805
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000cc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BASE | 98.42% | $0.018685 | 950,000 | $17,751.06 | |
BASE | 0.05% | $0.02989 | 304.51 | $9.1 | |
BASE | 0.03% | $0.000194 | 28,000 | $5.43 | |
BASE | <0.01% | $0.00066 | 1,761.4937 | $1.16 | |
BASE | <0.01% | <$0.000001 | 29,577,464 | $1.11 | |
BASE | <0.01% | $0.000257 | 1,000 | $0.2571 | |
ETH | 1.44% | $0.000069 | 3,750,000 | $260.59 | |
ETH | 0.02% | $0.000496 | 7,000 | $3.47 | |
ETH | 0.02% | $0.000002 | 2,000,000 | $3.38 | |
ETH | <0.01% | $0.015315 | 20 | $0.3062 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.