More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
No addresses found
Latest 25 from a total of 53,605 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18158322 | 3 days ago | IN | 0 ETH | 0.00000002 | ||||
Set Approval For... | 17668813 | 14 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 17041830 | 28 days ago | IN | 0 ETH | 0.00000004 | ||||
Set Approval For... | 17016543 | 29 days ago | IN | 0 ETH | 0.00000009 | ||||
Set Approval For... | 16898304 | 32 days ago | IN | 0 ETH | 0.00000002 | ||||
Set Approval For... | 16838132 | 33 days ago | IN | 0 ETH | 0.00000002 | ||||
Set Approval For... | 16793628 | 34 days ago | IN | 0 ETH | 0.00000004 | ||||
Set Approval For... | 16724085 | 36 days ago | IN | 0 ETH | 0.00000002 | ||||
Set Approval For... | 16712917 | 36 days ago | IN | 0 ETH | 0.00000002 | ||||
Set Approval For... | 16700637 | 36 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 16610750 | 38 days ago | IN | 0 ETH | 0.00000003 | ||||
Set Approval For... | 16419444 | 43 days ago | IN | 0 ETH | 0.00000005 | ||||
Set Approval For... | 16403031 | 43 days ago | IN | 0 ETH | 0.00000005 | ||||
Set Approval For... | 16391080 | 44 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 16380883 | 44 days ago | IN | 0 ETH | 0.00000001 | ||||
Set Approval For... | 16351687 | 44 days ago | IN | 0 ETH | 0.00000005 | ||||
Set Approval For... | 16318166 | 45 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 16290171 | 46 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 16288691 | 46 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 16288666 | 46 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 16288607 | 46 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 16288451 | 46 days ago | IN | 0 ETH | 0 | ||||
Set Approval For... | 16241288 | 47 days ago | IN | 0 ETH | 0.00000032 | ||||
Set Approval For... | 16221199 | 47 days ago | IN | 0 ETH | 0.00000001 | ||||
Set Approval For... | 16145934 | 49 days ago | IN | 0 ETH | 0.00000005 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
onlyBlastNFT
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at blastscan.io on 2024-03-05 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(msg.sender); } /** * @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() == msg.sender, "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() external virtual onlyOwner { _setOwner(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) external virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: Strings.sol /** * Source: Openzeppelin */ /** * @dev String operations. */ library Strings { /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } // File: ECDSA.sol // OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol) /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File: Address.sol0 /** * Source: Openzeppelin */ /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } } // File: IERC721Receiver.sol /** * @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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: IERC165.sol // https://eips.ethereum.org/EIPS/eip-165 interface IERC165 { /// @notice Query if a contract implements an interface /// @param interfaceID The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceID` and /// `interfaceID` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceID) external view returns (bool); } // File: IERC2981.sol /** * Source: Openzeppelin */ /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } enum YieldMode { AUTOMATIC, VOID, CLAIMABLE } enum GasMode { VOID, CLAIMABLE } interface IBlast { // configure function configureContract(address contractAddress, YieldMode _yield, GasMode gasMode, address governor) external; function configure(YieldMode _yield, GasMode gasMode, address governor) external; // base configuration options function configureClaimableYield() external; function configureClaimableYieldOnBehalf(address contractAddress) external; function configureAutomaticYield() external; function configureAutomaticYieldOnBehalf(address contractAddress) external; function configureVoidYield() external; function configureVoidYieldOnBehalf(address contractAddress) external; function configureClaimableGas() external; function configureClaimableGasOnBehalf(address contractAddress) external; function configureVoidGas() external; function configureVoidGasOnBehalf(address contractAddress) external; function configureGovernor(address _governor) external; function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external; // claim yield function claimYield(address contractAddress, address recipientOfYield, uint256 amount) external returns (uint256); function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256); // claim gas function claimAllGas(address contractAddress, address recipientOfGas) external returns (uint256); function claimGasAtMinClaimRate(address contractAddress, address recipientOfGas, uint256 minClaimRateBips) external returns (uint256); function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256); function claimGas(address contractAddress, address recipientOfGas, uint256 gasToClaim, uint256 gasSecondsToConsume) external returns (uint256); // read functions function readClaimableYield(address contractAddress) external view returns (uint256); function readYieldConfiguration(address contractAddress) external view returns (uint8); function readGasParams(address contractAddress) external view returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode); } // File: ERC165.sol /** * Source: Openzeppelin */ /** * @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; } } // File: IERC721.sol // https://eips.ethereum.org/EIPS/eip-721, http://erc721.org/ /// @title ERC-721 Non-Fungible Token Standard /// @dev See https://eips.ethereum.org/EIPS/eip-721 /// Note: the ERC-165 identifier for this interface is 0x80ac58cd. interface IERC721 is IERC165 { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to "". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external; /// @notice Enable or disable approval for a third party ("operator") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT. /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); } // File: IERC721Metadata.sol /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension * Made for efficiancy! */ contract ERC721 is ERC165, IERC721, IERC721Metadata, Ownable { using Address for address; using Strings for uint256; uint16 public totalSupply; address public proxyRegistryAddress; string public baseURI; // Mapping from token ID to owner address mapping(uint256 => address) internal _owners; // Mapping owner address to token count mapping(address => uint256) internal _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(address _openseaProxyRegistry, string memory _baseURI) { proxyRegistryAddress = _openseaProxyRegistry; baseURI = _baseURI; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) external view override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() external pure override returns (string memory) { return "Only Blast: Proof of Contribution"; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() external pure override returns (string memory) { return "POC"; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) external view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(baseURI, tokenId.toString(), ".json")); } function setBaseURI(string memory uri) external onlyOwner { baseURI = uri; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) external override { address owner = _owners[tokenId]; require(to != owner, "ERC721: approval to current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) external override { _setApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view override returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return _operatorApprovals[owner][operator]; } function setOpenseaProxyRegistry(address addr) external onlyOwner { proxyRegistryAddress = addr; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) external override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = _owners[tokenId]; return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(uint256 amount, address to, uint tokenId) internal { _balances[to] += amount; for (uint i; i < amount; i++) { tokenId++; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } totalSupply += uint16(amount); require( _checkOnERC721Received(address(0), to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer" ); // checking it once will make sure that the address can recieve NFTs } function _mint(address to, uint tokenId) internal { _balances[to]++; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); totalSupply++; require( _checkOnERC721Received(address(0), to, tokenId, ""), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(_owners[tokenId] == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from]--; _balances[to]++; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) internal returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } } contract OwnableDelegateProxy {} contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract onlyBlastNFT is Ownable, IERC2981, ERC721 { bool private _mintingEnabled; uint private EIP2981RoyaltyPercent = 0; // 0% IBlast public constant BLAST = IBlast(0x4300000000000000000000000000000000000002); mapping (address => bool) public minted; uint32 maxSupply = 121238; constructor( address _openseaProxyRegistry, string memory _tempBaseURI ) ERC721(_openseaProxyRegistry, _tempBaseURI) { BLAST.configureClaimableGas(); BLAST.configureGovernor(msg.sender); } function mint() external { require(_mintingEnabled, "Minting is not enabled!"); uint tokenId = totalSupply; require(totalSupply < maxSupply, "Request exceeds max supply!"); require(!minted[msg.sender], "Request exceeds max per wallet!"); minted[msg.sender] = true; _mint(1, msg.sender, tokenId); } function getSalesStatus() external view returns(bool mintingEnabled) { mintingEnabled = _mintingEnabled; } /** * @notice returns royalty info for EIP2981 supporting marketplaces * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint tokenId, uint salePrice) external view override returns(address receiver, uint256 royaltyAmount) { require(_exists(tokenId), "Royality querry for non-existant token!"); return(owner(), salePrice * EIP2981RoyaltyPercent / 10000); } /** * @notice sets the royalty percentage for EIP2981 supporting marketplaces * @dev percentage is in bassis points (parts per 10,000). Example: 5% = 500, 0.5% = 50 * @param amount - percent amount */ function setRoyaltyPercent(uint256 amount) external onlyOwner { EIP2981RoyaltyPercent = amount; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function withdraw() onlyOwner external { uint bal = address(this).balance; bool success; (success, ) = payable(msg.sender).call{value: bal, gas: 3000}(""); require(success, "Transfer to contract owner failed!"); } function togglePublicSale() external onlyOwner { _mintingEnabled = !_mintingEnabled; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_openseaProxyRegistry","type":"address"},{"internalType":"string","name":"_tempBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"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":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSalesStatus","outputs":[{"internalType":"bool","name":"mintingEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setOpenseaProxyRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRoyaltyPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"togglePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040525f600855600a805463ffffffff19166201d99617905534801562000026575f80fd5b5060405162002174380380620021748339810160408190526200004991620001b2565b818162000056336200014f565b600180546001600160a01b0319166001600160a01b03841617905560026200007f82826200032a565b5050507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b158015620000cf575f80fd5b505af1158015620000e2573d5f803e3d5ffd5b5050604051631d70c8d360e31b8152336004820152734300000000000000000000000000000000000002925063eb86469891506024015f604051808303815f87803b15801562000130575f80fd5b505af115801562000143573d5f803e3d5ffd5b505050505050620003f6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215620001c4575f80fd5b82516001600160a01b0381168114620001db575f80fd5b602084810151919350906001600160401b0380821115620001fa575f80fd5b818601915086601f8301126200020e575f80fd5b8151818111156200022357620002236200019e565b604051601f8201601f19908116603f011681019083821181831017156200024e576200024e6200019e565b81604052828152898684870101111562000266575f80fd5b5f93505b828410156200028957848401860151818501870152928501926200026a565b5f8684830101528096505050505050509250929050565b600181811c90821680620002b557607f821691505b602082108103620002d457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200032557805f5260205f20601f840160051c81016020851015620003015750805b601f840160051c820191505b8181101562000322575f81556001016200030d565b50505b505050565b81516001600160401b038111156200034657620003466200019e565b6200035e81620003578454620002a0565b84620002da565b602080601f83116001811462000394575f84156200037c5750858301515b5f19600386901b1c1916600185901b178555620003ee565b5f85815260208120601f198616915b82811015620003c457888601518255948401946001909101908401620003a3565b5085821015620003e257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b611d7080620004045f395ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c806370a08231116100fe578063a22cb4651161009e578063cd7c03261161006e578063cd7c0326146103f6578063e222c7f914610409578063e985e9c514610411578063f2fde38b14610424575f80fd5b8063a22cb465146103aa578063b88d4fde146103bd578063bd2f5244146103d0578063c87b56dd146103e3575f80fd5b80638da5cb5b116100d95780638da5cb5b1461035a57806395d89b411461036a57806397d75776146103895780639a4fc64014610397575f80fd5b806370a0823114610326578063715018a6146103475780638b2c92ab1461034f575f80fd5b806323b872dd1161016957806342842e0e1161014457806342842e0e146102e557806355f804b3146102f85780636352211e1461030b5780636c0360eb1461031e575f80fd5b806323b872dd146102985780632a55205a146102ab5780633ccfd60b146102dd575f80fd5b8063095ea7b3116101a4578063095ea7b3146102325780631249c58b1461024757806318160ddd1461024f5780631e7269c514610276575f80fd5b806301ffc9a7146101ca57806306fdde03146101f2578063081812fc14610207575b5f80fd5b6101dd6101d836600461160e565b610437565b60405190151581526020015b60405180910390f35b6101fa610461565b6040516101e9919061167d565b61021a61021536600461168f565b610481565b6040516001600160a01b0390911681526020016101e9565b6102456102403660046116ba565b610519565b005b61024561062b565b5f5461026390600160a01b900461ffff1681565b60405161ffff90911681526020016101e9565b6101dd6102843660046116e4565b60096020525f908152604090205460ff1681565b6102456102a63660046116ff565b61076b565b6102be6102b936600461173d565b61079c565b604080516001600160a01b0390931683526020830191909152016101e9565b610245610842565b6102456102f33660046116ff565b610927565b6102456103063660046117e4565b610941565b61021a61031936600461168f565b610985565b6101fa6109fb565b6103396103343660046116e4565b610a87565b6040519081526020016101e9565b610245610b0c565b60075460ff166101dd565b5f546001600160a01b031661021a565b604080518082019091526003815262504f4360e81b60208201526101fa565b61021a6002604360981b0181565b6102456103a536600461168f565b610b4f565b6102456103b8366004611829565b610b8c565b6102456103cb366004611864565b610b97565b6102456103de3660046116e4565b610bcf565b6101fa6103f136600461168f565b610c29565b60015461021a906001600160a01b031681565b610245610cd9565b6101dd61041f3660046118df565b610d25565b6102456104323660046116e4565b610ddf565b5f6001600160e01b0319821663152a902d60e11b148061045b575061045b82610e85565b92915050565b6060604051806060016040528060218152602001611d1a60219139905090565b5f818152600360205260408120546001600160a01b03166104fe5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b505f908152600560205260409020546001600160a01b031690565b5f818152600360205260409020546001600160a01b0390811690831681900361058e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104f5565b336001600160a01b03821614806105aa57506105aa8133610d25565b61061c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016104f5565b6106268383610ed4565b505050565b60075460ff1661067d5760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f7420656e61626c65642100000000000000000060448201526064016104f5565b5f54600a54600160a01b90910461ffff169063ffffffff1681106106e35760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c7921000000000060448201526064016104f5565b335f9081526009602052604090205460ff16156107425760405162461bcd60e51b815260206004820152601f60248201527f526571756573742065786365656473206d6178207065722077616c6c6574210060448201526064016104f5565b335f818152600960205260409020805460ff191660019081179091556107689183610f41565b50565b6107753382611051565b6107915760405162461bcd60e51b81526004016104f59061190b565b610626838383611123565b5f8281526003602052604081205481906001600160a01b03166108115760405162461bcd60e51b815260206004820152602760248201527f526f79616c6974792071756572727920666f72206e6f6e2d6578697374616e7460448201526620746f6b656e2160c81b60648201526084016104f5565b5f546001600160a01b03166127106008548561082d9190611970565b610837919061199b565b915091509250929050565b336108545f546001600160a01b031690565b6001600160a01b03161461087a5760405162461bcd60e51b81526004016104f5906119ae565b60405147905f903390610bb890849084818181858888f193505050503d805f81146108c0576040519150601f19603f3d011682016040523d82523d5f602084013e6108c5565b606091505b505080915050806109235760405162461bcd60e51b815260206004820152602260248201527f5472616e7366657220746f20636f6e7472616374206f776e6572206661696c65604482015261642160f01b60648201526084016104f5565b5050565b61062683838360405180602001604052805f815250610b97565b336109535f546001600160a01b031690565b6001600160a01b0316146109795760405162461bcd60e51b81526004016104f5906119ae565b60026109238282611a66565b5f818152600360205260408120546001600160a01b03168061045b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016104f5565b60028054610a08906119e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a34906119e3565b8015610a7f5780601f10610a5657610100808354040283529160200191610a7f565b820191905f5260205f20905b815481529060010190602001808311610a6257829003601f168201915b505050505081565b5f6001600160a01b038216610af15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016104f5565b506001600160a01b03165f9081526004602052604090205490565b33610b1e5f546001600160a01b031690565b6001600160a01b031614610b445760405162461bcd60e51b81526004016104f5906119ae565b610b4d5f6112b0565b565b33610b615f546001600160a01b031690565b6001600160a01b031614610b875760405162461bcd60e51b81526004016104f5906119ae565b600855565b6109233383836112ff565b610ba13383611051565b610bbd5760405162461bcd60e51b81526004016104f59061190b565b610bc9848484846113cc565b50505050565b33610be15f546001600160a01b031690565b6001600160a01b031614610c075760405162461bcd60e51b81526004016104f5906119ae565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f818152600360205260409020546060906001600160a01b0316610ca75760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016104f5565b6002610cb2836113ff565b604051602001610cc3929190611b26565b6040516020818303038152906040529050919050565b33610ceb5f546001600160a01b031690565b6001600160a01b031614610d115760405162461bcd60e51b81526004016104f5906119ae565b6007805460ff19811660ff90911615179055565b60015460405163c455279160e01b81526001600160a01b0384811660048301525f9281169190841690829063c455279190602401602060405180830381865afa158015610d74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d989190611bb9565b6001600160a01b031603610db057600191505061045b565b50506001600160a01b039182165f90815260066020908152604080832093909416825291909152205460ff1690565b33610df15f546001600160a01b031690565b6001600160a01b031614610e175760405162461bcd60e51b81526004016104f5906119ae565b6001600160a01b038116610e7c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104f5565b610768816112b0565b5f6001600160e01b031982166380ac58cd60e01b1480610eb557506001600160e01b03198216635b5e139f60e01b145b8061045b57506301ffc9a760e01b6001600160e01b031983161461045b565b5f81815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610f0882610985565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b0382165f9081526004602052604081208054859290610f68908490611bd4565b909155505f90505b83811015610fe25781610f8281611be7565b5f8181526003602052604080822080546001600160a01b0319166001600160a01b0389169081179091559051929550859350917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101610f70565b50825f60148282829054906101000a900461ffff166110019190611bff565b92506101000a81548161ffff021916908361ffff1602179055506110355f838360405180602001604052805f8152506114fc565b6106265760405162461bcd60e51b81526004016104f590611c21565b5f818152600360205260408120546001600160a01b03166110c95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104f5565b5f828152600360205260409020546001600160a01b0390811690841681148061110b5750836001600160a01b031661110084610481565b6001600160a01b0316145b8061111b575061111b8185610d25565b949350505050565b5f818152600360205260409020546001600160a01b038481169116146111995760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016104f5565b6001600160a01b0382166111fb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104f5565b6112055f82610ed4565b6001600160a01b0383165f90815260046020526040812080549161122883611c73565b90915550506001600160a01b0382165f90815260046020526040812080549161125083611be7565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b0316036113605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104f5565b6001600160a01b038381165f81815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6113d7848484611123565b6113e3848484846114fc565b610bc95760405162461bcd60e51b81526004016104f590611c21565b6060815f036114255750506040805180820190915260018152600360fc1b602082015290565b815f5b811561144e578061143881611be7565b91506114479050600a8361199b565b9150611428565b5f8167ffffffffffffffff8111156114685761146861175d565b6040519080825280601f01601f191660200182016040528015611492576020820181803683370190505b5090505b841561111b576114a7600183611c88565b91506114b4600a86611c9b565b6114bf906030611bd4565b60f81b8183815181106114d4576114d4611cae565b60200101906001600160f81b03191690815f1a9053506114f5600a8661199b565b9450611496565b5f6001600160a01b0384163b156115ee57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061153f903390899088908890600401611cc2565b6020604051808303815f875af1925050508015611579575060408051601f3d908101601f1916820190925261157691810190611cfe565b60015b6115d4573d8080156115a6576040519150601f19603f3d011682016040523d82523d5f602084013e6115ab565b606091505b5080515f036115cc5760405162461bcd60e51b81526004016104f590611c21565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061111b565b506001949350505050565b6001600160e01b031981168114610768575f80fd5b5f6020828403121561161e575f80fd5b8135611629816115f9565b9392505050565b5f5b8381101561164a578181015183820152602001611632565b50505f910152565b5f8151808452611669816020860160208601611630565b601f01601f19169290920160200192915050565b602081525f6116296020830184611652565b5f6020828403121561169f575f80fd5b5035919050565b6001600160a01b0381168114610768575f80fd5b5f80604083850312156116cb575f80fd5b82356116d6816116a6565b946020939093013593505050565b5f602082840312156116f4575f80fd5b8135611629816116a6565b5f805f60608486031215611711575f80fd5b833561171c816116a6565b9250602084013561172c816116a6565b929592945050506040919091013590565b5f806040838503121561174e575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561178b5761178b61175d565b604051601f8501601f19908116603f011681019082821181831017156117b3576117b361175d565b816040528093508581528686860111156117cb575f80fd5b858560208301375f602087830101525050509392505050565b5f602082840312156117f4575f80fd5b813567ffffffffffffffff81111561180a575f80fd5b8201601f8101841361181a575f80fd5b61111b84823560208401611771565b5f806040838503121561183a575f80fd5b8235611845816116a6565b915060208301358015158114611859575f80fd5b809150509250929050565b5f805f8060808587031215611877575f80fd5b8435611882816116a6565b93506020850135611892816116a6565b925060408501359150606085013567ffffffffffffffff8111156118b4575f80fd5b8501601f810187136118c4575f80fd5b6118d387823560208401611771565b91505092959194509250565b5f80604083850312156118f0575f80fd5b82356118fb816116a6565b91506020830135611859816116a6565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761045b5761045b61195c565b634e487b7160e01b5f52601260045260245ffd5b5f826119a9576119a9611987565b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806119f757607f821691505b602082108103611a1557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561062657805f5260205f20601f840160051c81016020851015611a405750805b601f840160051c820191505b81811015611a5f575f8155600101611a4c565b5050505050565b815167ffffffffffffffff811115611a8057611a8061175d565b611a9481611a8e84546119e3565b84611a1b565b602080601f831160018114611ac7575f8415611ab05750858301515b5f19600386901b1c1916600185901b178555611b1e565b5f85815260208120601f198616915b82811015611af557888601518255948401946001909101908401611ad6565b5085821015611b1257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f808454611b33816119e3565b60018281168015611b4b5760018114611b6057611b8c565b60ff1984168752821515830287019450611b8c565b885f526020805f205f5b85811015611b835781548a820152908401908201611b6a565b50505082870194505b505050508351611ba0818360208801611630565b64173539b7b760d91b9101908152600501949350505050565b5f60208284031215611bc9575f80fd5b8151611629816116a6565b8082018082111561045b5761045b61195c565b5f60018201611bf857611bf861195c565b5060010190565b61ffff818116838216019080821115611c1a57611c1a61195c565b5092915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f81611c8157611c8161195c565b505f190190565b8181038181111561045b5761045b61195c565b5f82611ca957611ca9611987565b500690565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611cf490830184611652565b9695505050505050565b5f60208284031215611d0e575f80fd5b8151611629816115f956fe4f6e6c7920426c6173743a2050726f6f66206f6620436f6e747269627574696f6ea26469706673582212208f9acf70480aa6af1f325d4cd25500832a74df9005f0f67b89b657b7660e97e264736f6c634300081800330000000000000000000000004196b39157659bf0de9ebf6e505648b7889a39ce0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d62584775787a644d774d3442586d737957335875704648397144554273445043686d44567832784a625a544b2f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101c6575f3560e01c806370a08231116100fe578063a22cb4651161009e578063cd7c03261161006e578063cd7c0326146103f6578063e222c7f914610409578063e985e9c514610411578063f2fde38b14610424575f80fd5b8063a22cb465146103aa578063b88d4fde146103bd578063bd2f5244146103d0578063c87b56dd146103e3575f80fd5b80638da5cb5b116100d95780638da5cb5b1461035a57806395d89b411461036a57806397d75776146103895780639a4fc64014610397575f80fd5b806370a0823114610326578063715018a6146103475780638b2c92ab1461034f575f80fd5b806323b872dd1161016957806342842e0e1161014457806342842e0e146102e557806355f804b3146102f85780636352211e1461030b5780636c0360eb1461031e575f80fd5b806323b872dd146102985780632a55205a146102ab5780633ccfd60b146102dd575f80fd5b8063095ea7b3116101a4578063095ea7b3146102325780631249c58b1461024757806318160ddd1461024f5780631e7269c514610276575f80fd5b806301ffc9a7146101ca57806306fdde03146101f2578063081812fc14610207575b5f80fd5b6101dd6101d836600461160e565b610437565b60405190151581526020015b60405180910390f35b6101fa610461565b6040516101e9919061167d565b61021a61021536600461168f565b610481565b6040516001600160a01b0390911681526020016101e9565b6102456102403660046116ba565b610519565b005b61024561062b565b5f5461026390600160a01b900461ffff1681565b60405161ffff90911681526020016101e9565b6101dd6102843660046116e4565b60096020525f908152604090205460ff1681565b6102456102a63660046116ff565b61076b565b6102be6102b936600461173d565b61079c565b604080516001600160a01b0390931683526020830191909152016101e9565b610245610842565b6102456102f33660046116ff565b610927565b6102456103063660046117e4565b610941565b61021a61031936600461168f565b610985565b6101fa6109fb565b6103396103343660046116e4565b610a87565b6040519081526020016101e9565b610245610b0c565b60075460ff166101dd565b5f546001600160a01b031661021a565b604080518082019091526003815262504f4360e81b60208201526101fa565b61021a6002604360981b0181565b6102456103a536600461168f565b610b4f565b6102456103b8366004611829565b610b8c565b6102456103cb366004611864565b610b97565b6102456103de3660046116e4565b610bcf565b6101fa6103f136600461168f565b610c29565b60015461021a906001600160a01b031681565b610245610cd9565b6101dd61041f3660046118df565b610d25565b6102456104323660046116e4565b610ddf565b5f6001600160e01b0319821663152a902d60e11b148061045b575061045b82610e85565b92915050565b6060604051806060016040528060218152602001611d1a60219139905090565b5f818152600360205260408120546001600160a01b03166104fe5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b505f908152600560205260409020546001600160a01b031690565b5f818152600360205260409020546001600160a01b0390811690831681900361058e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104f5565b336001600160a01b03821614806105aa57506105aa8133610d25565b61061c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016104f5565b6106268383610ed4565b505050565b60075460ff1661067d5760405162461bcd60e51b815260206004820152601760248201527f4d696e74696e67206973206e6f7420656e61626c65642100000000000000000060448201526064016104f5565b5f54600a54600160a01b90910461ffff169063ffffffff1681106106e35760405162461bcd60e51b815260206004820152601b60248201527f526571756573742065786365656473206d617820737570706c7921000000000060448201526064016104f5565b335f9081526009602052604090205460ff16156107425760405162461bcd60e51b815260206004820152601f60248201527f526571756573742065786365656473206d6178207065722077616c6c6574210060448201526064016104f5565b335f818152600960205260409020805460ff191660019081179091556107689183610f41565b50565b6107753382611051565b6107915760405162461bcd60e51b81526004016104f59061190b565b610626838383611123565b5f8281526003602052604081205481906001600160a01b03166108115760405162461bcd60e51b815260206004820152602760248201527f526f79616c6974792071756572727920666f72206e6f6e2d6578697374616e7460448201526620746f6b656e2160c81b60648201526084016104f5565b5f546001600160a01b03166127106008548561082d9190611970565b610837919061199b565b915091509250929050565b336108545f546001600160a01b031690565b6001600160a01b03161461087a5760405162461bcd60e51b81526004016104f5906119ae565b60405147905f903390610bb890849084818181858888f193505050503d805f81146108c0576040519150601f19603f3d011682016040523d82523d5f602084013e6108c5565b606091505b505080915050806109235760405162461bcd60e51b815260206004820152602260248201527f5472616e7366657220746f20636f6e7472616374206f776e6572206661696c65604482015261642160f01b60648201526084016104f5565b5050565b61062683838360405180602001604052805f815250610b97565b336109535f546001600160a01b031690565b6001600160a01b0316146109795760405162461bcd60e51b81526004016104f5906119ae565b60026109238282611a66565b5f818152600360205260408120546001600160a01b03168061045b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016104f5565b60028054610a08906119e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a34906119e3565b8015610a7f5780601f10610a5657610100808354040283529160200191610a7f565b820191905f5260205f20905b815481529060010190602001808311610a6257829003601f168201915b505050505081565b5f6001600160a01b038216610af15760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016104f5565b506001600160a01b03165f9081526004602052604090205490565b33610b1e5f546001600160a01b031690565b6001600160a01b031614610b445760405162461bcd60e51b81526004016104f5906119ae565b610b4d5f6112b0565b565b33610b615f546001600160a01b031690565b6001600160a01b031614610b875760405162461bcd60e51b81526004016104f5906119ae565b600855565b6109233383836112ff565b610ba13383611051565b610bbd5760405162461bcd60e51b81526004016104f59061190b565b610bc9848484846113cc565b50505050565b33610be15f546001600160a01b031690565b6001600160a01b031614610c075760405162461bcd60e51b81526004016104f5906119ae565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f818152600360205260409020546060906001600160a01b0316610ca75760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016104f5565b6002610cb2836113ff565b604051602001610cc3929190611b26565b6040516020818303038152906040529050919050565b33610ceb5f546001600160a01b031690565b6001600160a01b031614610d115760405162461bcd60e51b81526004016104f5906119ae565b6007805460ff19811660ff90911615179055565b60015460405163c455279160e01b81526001600160a01b0384811660048301525f9281169190841690829063c455279190602401602060405180830381865afa158015610d74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d989190611bb9565b6001600160a01b031603610db057600191505061045b565b50506001600160a01b039182165f90815260066020908152604080832093909416825291909152205460ff1690565b33610df15f546001600160a01b031690565b6001600160a01b031614610e175760405162461bcd60e51b81526004016104f5906119ae565b6001600160a01b038116610e7c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104f5565b610768816112b0565b5f6001600160e01b031982166380ac58cd60e01b1480610eb557506001600160e01b03198216635b5e139f60e01b145b8061045b57506301ffc9a760e01b6001600160e01b031983161461045b565b5f81815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610f0882610985565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b0382165f9081526004602052604081208054859290610f68908490611bd4565b909155505f90505b83811015610fe25781610f8281611be7565b5f8181526003602052604080822080546001600160a01b0319166001600160a01b0389169081179091559051929550859350917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600101610f70565b50825f60148282829054906101000a900461ffff166110019190611bff565b92506101000a81548161ffff021916908361ffff1602179055506110355f838360405180602001604052805f8152506114fc565b6106265760405162461bcd60e51b81526004016104f590611c21565b5f818152600360205260408120546001600160a01b03166110c95760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104f5565b5f828152600360205260409020546001600160a01b0390811690841681148061110b5750836001600160a01b031661110084610481565b6001600160a01b0316145b8061111b575061111b8185610d25565b949350505050565b5f818152600360205260409020546001600160a01b038481169116146111995760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016104f5565b6001600160a01b0382166111fb5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104f5565b6112055f82610ed4565b6001600160a01b0383165f90815260046020526040812080549161122883611c73565b90915550506001600160a01b0382165f90815260046020526040812080549161125083611be7565b90915550505f8181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b0316036113605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104f5565b6001600160a01b038381165f81815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6113d7848484611123565b6113e3848484846114fc565b610bc95760405162461bcd60e51b81526004016104f590611c21565b6060815f036114255750506040805180820190915260018152600360fc1b602082015290565b815f5b811561144e578061143881611be7565b91506114479050600a8361199b565b9150611428565b5f8167ffffffffffffffff8111156114685761146861175d565b6040519080825280601f01601f191660200182016040528015611492576020820181803683370190505b5090505b841561111b576114a7600183611c88565b91506114b4600a86611c9b565b6114bf906030611bd4565b60f81b8183815181106114d4576114d4611cae565b60200101906001600160f81b03191690815f1a9053506114f5600a8661199b565b9450611496565b5f6001600160a01b0384163b156115ee57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061153f903390899088908890600401611cc2565b6020604051808303815f875af1925050508015611579575060408051601f3d908101601f1916820190925261157691810190611cfe565b60015b6115d4573d8080156115a6576040519150601f19603f3d011682016040523d82523d5f602084013e6115ab565b606091505b5080515f036115cc5760405162461bcd60e51b81526004016104f590611c21565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061111b565b506001949350505050565b6001600160e01b031981168114610768575f80fd5b5f6020828403121561161e575f80fd5b8135611629816115f9565b9392505050565b5f5b8381101561164a578181015183820152602001611632565b50505f910152565b5f8151808452611669816020860160208601611630565b601f01601f19169290920160200192915050565b602081525f6116296020830184611652565b5f6020828403121561169f575f80fd5b5035919050565b6001600160a01b0381168114610768575f80fd5b5f80604083850312156116cb575f80fd5b82356116d6816116a6565b946020939093013593505050565b5f602082840312156116f4575f80fd5b8135611629816116a6565b5f805f60608486031215611711575f80fd5b833561171c816116a6565b9250602084013561172c816116a6565b929592945050506040919091013590565b5f806040838503121561174e575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff8084111561178b5761178b61175d565b604051601f8501601f19908116603f011681019082821181831017156117b3576117b361175d565b816040528093508581528686860111156117cb575f80fd5b858560208301375f602087830101525050509392505050565b5f602082840312156117f4575f80fd5b813567ffffffffffffffff81111561180a575f80fd5b8201601f8101841361181a575f80fd5b61111b84823560208401611771565b5f806040838503121561183a575f80fd5b8235611845816116a6565b915060208301358015158114611859575f80fd5b809150509250929050565b5f805f8060808587031215611877575f80fd5b8435611882816116a6565b93506020850135611892816116a6565b925060408501359150606085013567ffffffffffffffff8111156118b4575f80fd5b8501601f810187136118c4575f80fd5b6118d387823560208401611771565b91505092959194509250565b5f80604083850312156118f0575f80fd5b82356118fb816116a6565b91506020830135611859816116a6565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761045b5761045b61195c565b634e487b7160e01b5f52601260045260245ffd5b5f826119a9576119a9611987565b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806119f757607f821691505b602082108103611a1557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561062657805f5260205f20601f840160051c81016020851015611a405750805b601f840160051c820191505b81811015611a5f575f8155600101611a4c565b5050505050565b815167ffffffffffffffff811115611a8057611a8061175d565b611a9481611a8e84546119e3565b84611a1b565b602080601f831160018114611ac7575f8415611ab05750858301515b5f19600386901b1c1916600185901b178555611b1e565b5f85815260208120601f198616915b82811015611af557888601518255948401946001909101908401611ad6565b5085821015611b1257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f808454611b33816119e3565b60018281168015611b4b5760018114611b6057611b8c565b60ff1984168752821515830287019450611b8c565b885f526020805f205f5b85811015611b835781548a820152908401908201611b6a565b50505082870194505b505050508351611ba0818360208801611630565b64173539b7b760d91b9101908152600501949350505050565b5f60208284031215611bc9575f80fd5b8151611629816116a6565b8082018082111561045b5761045b61195c565b5f60018201611bf857611bf861195c565b5060010190565b61ffff818116838216019080821115611c1a57611c1a61195c565b5092915050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b5f81611c8157611c8161195c565b505f190190565b8181038181111561045b5761045b61195c565b5f82611ca957611ca9611987565b500690565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611cf490830184611652565b9695505050505050565b5f60208284031215611d0e575f80fd5b8151611629816115f956fe4f6e6c7920426c6173743a2050726f6f66206f6620436f6e747269627574696f6ea26469706673582212208f9acf70480aa6af1f325d4cd25500832a74df9005f0f67b89b657b7660e97e264736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004196b39157659bf0de9ebf6e505648b7889a39ce0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d62584775787a644d774d3442586d737957335875704648397144554273445043686d44567832784a625a544b2f00000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _openseaProxyRegistry (address): 0x4196b39157659BF0De9ebF6E505648B7889a39cE
Arg [1] : _tempBaseURI (string): https://ipfs.io/ipfs/QmbXGuxzdMwM4BXmsyW3XupFH9qDUBsDPChmDVx2xJbZTK/
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000004196b39157659bf0de9ebf6e505648b7889a39ce
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [3] : 68747470733a2f2f697066732e696f2f697066732f516d62584775787a644d77
Arg [4] : 4d3442586d737957335875704648397144554273445043686d44567832784a62
Arg [5] : 5a544b2f00000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
35175:2867:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37428:241;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;37428:241:0;;;;;;;;25437:124;;;:::i;:::-;;;;;;;:::i;26676:213::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;26676:213:0;1533:203:1;26216:394:0;;;;;;:::i;:::-;;:::i;:::-;;35734:358;;;:::i;23726:25::-;;;;;-1:-1:-1;;;23726:25:0;;;;;;;;;2371:6:1;2359:19;;;2341:38;;2329:2;2314:18;23726:25:0;2197:188:1;35410:39:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27766:331;;;;;;:::i;:::-;;:::i;36715:279::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3548:32:1;;;3530:51;;3612:2;3597:18;;3590:34;;;;3503:18;36715:279:0;3356:274:1;37677:254:0;;;:::i;28168:179::-;;;;;;:::i;:::-;;:::i;26064:90::-;;;;;;:::i;:::-;;:::i;25139:231::-;;;;;;:::i;:::-;;:::i;23804:21::-;;;:::i;24875:202::-;;;;;;:::i;:::-;;:::i;:::-;;;5006:25:1;;;4994:2;4979:18;24875:202:0;4860:177:1;1102:96:0;;;:::i;36100:120::-;36197:15;;;;36100:120;;453:87;499:7;526:6;-1:-1:-1;;;;;526:6:0;453:87;;25630:96;25706:12;;;;;;;;;;;;-1:-1:-1;;;25706:12:0;;;;25630:96;;35320:81;;-1:-1:-1;;;;;35320:81:0;;37245:111;;;;;;:::i;:::-;;:::i;26961:147::-;;;;;;:::i;:::-;;:::i;28418:318::-;;;;;;:::i;:::-;;:::i;27587:112::-;;;;;;:::i;:::-;;:::i;25797:259::-;;;;;;:::i;:::-;;:::i;23760:35::-;;;;;-1:-1:-1;;;;;23760:35:0;;;37939:100;;;:::i;27179:400::-;;;;;;:::i;:::-;;:::i;1353:194::-;;;;;;:::i;:::-;;:::i;37428:241::-;37530:4;-1:-1:-1;;;;;;37567:41:0;;-1:-1:-1;;;37567:41:0;;:94;;;37625:36;37649:11;37625:23;:36::i;:::-;37547:114;37428:241;-1:-1:-1;;37428:241:0:o;25437:124::-;25485:13;25511:42;;;;;;;;;;;;;;;;;;;25437:124;:::o;26676:213::-;26744:7;30266:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30266:16:0;26764:73;;;;-1:-1:-1;;;26764:73:0;;7080:2:1;26764:73:0;;;7062:21:1;7119:2;7099:18;;;7092:30;7158:34;7138:18;;;7131:62;-1:-1:-1;;;7209:18:1;;;7202:42;7261:19;;26764:73:0;;;;;;;;;-1:-1:-1;26857:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26857:24:0;;26676:213::o;26216:394::-;26291:13;26307:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26307:16:0;;;;26342:11;;;;;26334:57;;;;-1:-1:-1;;;26334:57:0;;7493:2:1;26334:57:0;;;7475:21:1;7532:2;7512:18;;;7505:30;7571:34;7551:18;;;7544:62;-1:-1:-1;;;7622:18:1;;;7615:31;7663:19;;26334:57:0;7291:397:1;26334:57:0;26426:10;-1:-1:-1;;;;;26426:19:0;;;;:58;;;26449:35;26466:5;26473:10;26449:16;:35::i;:::-;26404:164;;;;-1:-1:-1;;;26404:164:0;;7895:2:1;26404:164:0;;;7877:21:1;7934:2;7914:18;;;7907:30;7973:34;7953:18;;;7946:62;8044:26;8024:18;;;8017:54;8088:19;;26404:164:0;7693:420:1;26404:164:0;26581:21;26590:2;26594:7;26581:8;:21::i;:::-;26280:330;26216:394;;:::o;35734:358::-;35778:15;;;;35770:51;;;;-1:-1:-1;;;35770:51:0;;8320:2:1;35770:51:0;;;8302:21:1;8359:2;8339:18;;;8332:30;8398:25;8378:18;;;8371:53;8441:18;;35770:51:0;8118:347:1;35770:51:0;35832:12;35847:11;35891:9;;-1:-1:-1;;;35847:11:0;;;;;;35891:9;;35877:23;;35869:63;;;;-1:-1:-1;;;35869:63:0;;8672:2:1;35869:63:0;;;8654:21:1;8711:2;8691:18;;;8684:30;8750:29;8730:18;;;8723:57;8797:18;;35869:63:0;8470:351:1;35869:63:0;35959:10;35952:18;;;;:6;:18;;;;;;;;35951:19;35943:63;;;;-1:-1:-1;;;35943:63:0;;9028:2:1;35943:63:0;;;9010:21:1;9067:2;9047:18;;;9040:30;9106:33;9086:18;;;9079:61;9157:18;;35943:63:0;8826:355:1;35943:63:0;36026:10;36019:18;;;;:6;:18;;;;;:25;;-1:-1:-1;;36019:25:0;36040:4;36019:25;;;;;;36055:29;;36076:7;36055:5;:29::i;:::-;35759:333;35734:358::o;27766:331::-;27955:39;27974:10;27986:7;27955:18;:39::i;:::-;27947:101;;;;-1:-1:-1;;;27947:101:0;;;;;;;:::i;:::-;28061:28;28071:4;28077:2;28081:7;28061:9;:28::i;36715:279::-;36797:16;30266;;;:7;:16;;;;;;36797;;-1:-1:-1;;;;;30266:16:0;36849:68;;;;-1:-1:-1;;;36849:68:0;;9806:2:1;36849:68:0;;;9788:21:1;9845:2;9825:18;;;9818:30;9884:34;9864:18;;;9857:62;-1:-1:-1;;;9935:18:1;;;9928:37;9982:19;;36849:68:0;9604:403:1;36849:68:0;499:7;526:6;-1:-1:-1;;;;;526:6:0;36980:5;36956:21;;36944:9;:33;;;;:::i;:::-;:41;;;;:::i;:::-;36928:58;;;;36715:279;;;;;:::o;37677:254::-;684:10;673:7;499;526:6;-1:-1:-1;;;;;526:6:0;;453:87;673:7;-1:-1:-1;;;;;673:21:0;;665:66;;;;-1:-1:-1;;;665:66:0;;;;;;;:::i;:::-;37807:51:::1;::::0;37738:21:::1;::::0;37727:8:::1;::::0;37815:10:::1;::::0;37849:4:::1;::::0;37738:21;;37727:8;37807:51;37727:8;37807:51;37738:21;37815:10;37849:4;37807:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37793:65;;;;;37877:7;37869:54;;;::::0;-1:-1:-1;;;37869:54:0;;11347:2:1;37869:54:0::1;::::0;::::1;11329:21:1::0;11386:2;11366:18;;;11359:30;11425:34;11405:18;;;11398:62;-1:-1:-1;;;11476:18:1;;;11469:32;11518:19;;37869:54:0::1;11145:398:1::0;37869:54:0::1;37716:215;;37677:254::o:0;28168:179::-;28300:39;28317:4;28323:2;28327:7;28300:39;;;;;;;;;;;;:16;:39::i;26064:90::-;684:10;673:7;499;526:6;-1:-1:-1;;;;;526:6:0;;453:87;673:7;-1:-1:-1;;;;;673:21:0;;665:66;;;;-1:-1:-1;;;665:66:0;;;;;;;:::i;:::-;26133:7:::1;:13;26143:3:::0;26133:7;:13:::1;:::i;25139:231::-:0;25203:7;25239:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25239:16:0;;25266:73;;;;-1:-1:-1;;;25266:73:0;;14305:2:1;25266:73:0;;;14287:21:1;14344:2;14324:18;;;14317:30;14383:34;14363:18;;;14356:62;-1:-1:-1;;;14434:18:1;;;14427:39;14483:19;;25266:73:0;14103:405:1;23804:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24875:202::-;24941:7;-1:-1:-1;;;;;24969:19:0;;24961:74;;;;-1:-1:-1;;;24961:74:0;;14715:2:1;24961:74:0;;;14697:21:1;14754:2;14734:18;;;14727:30;14793:34;14773:18;;;14766:62;-1:-1:-1;;;14844:18:1;;;14837:40;14894:19;;24961:74:0;14513:406:1;24961:74:0;-1:-1:-1;;;;;;25053:16:0;;;;;:9;:16;;;;;;;24875:202::o;1102:96::-;684:10;673:7;499;526:6;-1:-1:-1;;;;;526:6:0;;453:87;673:7;-1:-1:-1;;;;;673:21:0;;665:66;;;;-1:-1:-1;;;665:66:0;;;;;;;:::i;:::-;1169:21:::1;1187:1;1169:9;:21::i;:::-;1102:96::o:0;37245:111::-;684:10;673:7;499;526:6;-1:-1:-1;;;;;526:6:0;;453:87;673:7;-1:-1:-1;;;;;673:21:0;;665:66;;;;-1:-1:-1;;;665:66:0;;;;;;;:::i;:::-;37318:21:::1;:30:::0;37245:111::o;26961:147::-;27050:50;27069:10;27081:8;27091;27050:18;:50::i;28418:318::-;28585:39;28604:10;28616:7;28585:18;:39::i;:::-;28577:101;;;;-1:-1:-1;;;28577:101:0;;;;;;;:::i;:::-;28689:39;28703:4;28709:2;28713:7;28722:5;28689:13;:39::i;:::-;28418:318;;;;:::o;27587:112::-;684:10;673:7;499;526:6;-1:-1:-1;;;;;526:6:0;;453:87;673:7;-1:-1:-1;;;;;673:21:0;;665:66;;;;-1:-1:-1;;;665:66:0;;;;;;;:::i;:::-;27664:20:::1;:27:::0;;-1:-1:-1;;;;;;27664:27:0::1;-1:-1:-1::0;;;;;27664:27:0;;;::::1;::::0;;;::::1;::::0;;27587:112::o;25797:259::-;30242:4;30266:16;;;:7;:16;;;;;;25864:13;;-1:-1:-1;;;;;30266:16:0;25890:76;;;;-1:-1:-1;;;25890:76:0;;15126:2:1;25890:76:0;;;15108:21:1;15165:2;15145:18;;;15138:30;15204:34;15184:18;;;15177:62;-1:-1:-1;;;15255:18:1;;;15248:45;15310:19;;25890:76:0;14924:411:1;25890:76:0;26010:7;26019:18;:7;:16;:18::i;:::-;25993:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25979:69;;25797:259;;;:::o;37939:100::-;684:10;673:7;499;526:6;-1:-1:-1;;;;;526:6:0;;453:87;673:7;-1:-1:-1;;;;;673:21:0;;665:66;;;;-1:-1:-1;;;665:66:0;;;;;;;:::i;:::-;38016:15:::1;::::0;;-1:-1:-1;;37997:34:0;::::1;38016:15;::::0;;::::1;38015:16;37997:34;::::0;;37939:100::o;27179:400::-;27392:20;;27436:28;;-1:-1:-1;;;27436:28:0;;-1:-1:-1;;;;;1697:32:1;;;27436:28:0;;;1679:51:1;27268:4:0;;27392:20;;;27428:49;;;;27392:20;;27436:21;;1652:18:1;;27436:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27428:49:0;;27424:93;;27501:4;27494:11;;;;;27424:93;-1:-1:-1;;;;;;;27536:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27179:400::o;1353:194::-;684:10;673:7;499;526:6;-1:-1:-1;;;;;526:6:0;;453:87;673:7;-1:-1:-1;;;;;673:21:0;;665:66;;;;-1:-1:-1;;;665:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1444:22:0;::::1;1436:73;;;::::0;-1:-1:-1;;;1436:73:0;;17020:2:1;1436:73:0::1;::::0;::::1;17002:21:1::0;17059:2;17039:18;;;17032:30;17098:34;17078:18;;;17071:62;-1:-1:-1;;;17149:18:1;;;17142:36;17195:19;;1436:73:0::1;16818:402:1::0;1436:73:0::1;1520:19;1530:8;1520:9;:19::i;24506:305::-:0;24608:4;-1:-1:-1;;;;;;24645:40:0;;-1:-1:-1;;;24645:40:0;;:105;;-1:-1:-1;;;;;;;24702:48:0;;-1:-1:-1;;;24702:48:0;24645:105;:158;;;-1:-1:-1;;;;;;;;;;16800:40:0;;;24767:36;16691:157;33041:174;33116:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33116:29:0;-1:-1:-1;;;;;33116:29:0;;;;;;;;:24;;33170:23;33116:24;33170:14;:23::i;:::-;-1:-1:-1;;;;;33161:46:0;;;;;;;;;;;33041:174;;:::o;31148:554::-;-1:-1:-1;;;;;31227:13:0;;;;;;:9;:13;;;;;:23;;31244:6;;31227:13;:23;;31244:6;;31227:23;:::i;:::-;;;;-1:-1:-1;31268:6:0;;-1:-1:-1;31263:157:0;31280:6;31276:1;:10;31263:157;;;31308:9;;;;:::i;:::-;31334:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31334:21:0;-1:-1:-1;;;;;31334:21:0;;;;;;;;31375:33;;31334:16;;-1:-1:-1;31334:16:0;;-1:-1:-1;31334:21:0;31375:33;;31334:16;;31375:33;31288:3;;31263:157;;;;31454:6;31432:11;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31496:51;31527:1;31531:2;31535:7;31496:51;;;;;;;;;;;;:22;:51::i;:::-;31474:151;;;;-1:-1:-1;;;31474:151:0;;;;;;;:::i;30471:341::-;30564:4;30266:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30266:16:0;30581:73;;;;-1:-1:-1;;;30581:73:0;;18289:2:1;30581:73:0;;;18271:21:1;18328:2;18308:18;;;18301:30;18367:34;18347:18;;;18340:62;-1:-1:-1;;;18418:18:1;;;18411:42;18470:19;;30581:73:0;18087:408:1;30581:73:0;30665:13;30681:16;;;:7;:16;;;;;;-1:-1:-1;;;;;30681:16:0;;;;30716;;;;;:51;;;30760:7;-1:-1:-1;;;;;30736:31:0;:20;30748:7;30736:11;:20::i;:::-;-1:-1:-1;;;;;30736:31:0;;30716:51;:87;;;;30771:32;30788:5;30795:7;30771:16;:32::i;:::-;30708:96;30471:341;-1:-1:-1;;;;30471:341:0:o;32412:511::-;32544:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;32544:24:0;;;:16;;:24;32536:74;;;;-1:-1:-1;;;32536:74:0;;18702:2:1;32536:74:0;;;18684:21:1;18741:2;18721:18;;;18714:30;18780:34;18760:18;;;18753:62;-1:-1:-1;;;18831:18:1;;;18824:35;18876:19;;32536:74:0;18500:401:1;32536:74:0;-1:-1:-1;;;;;32629:16:0;;32621:65;;;;-1:-1:-1;;;32621:65:0;;19108:2:1;32621:65:0;;;19090:21:1;19147:2;19127:18;;;19120:30;19186:34;19166:18;;;19159:62;-1:-1:-1;;;19237:18:1;;;19230:34;19281:19;;32621:65:0;18906:400:1;32621:65:0;32751:29;32768:1;32772:7;32751:8;:29::i;:::-;-1:-1:-1;;;;;32793:15:0;;;;;;:9;:15;;;;;:17;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;32821:13:0;;;;;;:9;:13;;;;;:15;;;;;;:::i;:::-;;;;-1:-1:-1;;32849:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32849:21:0;-1:-1:-1;;;;;32849:21:0;;;;;;;;;32888:27;;32849:16;;32888:27;;;;;;;32412:511;;;:::o;1555:173::-;1611:16;1630:6;;-1:-1:-1;;;;;1647:17:0;;;-1:-1:-1;;;;;;1647:17:0;;;;;;1680:40;;1630:6;;;;;;;1680:40;;1611:16;1680:40;1600:128;1555:173;:::o;33357:315::-;33512:8;-1:-1:-1;;;;;33503:17:0;:5;-1:-1:-1;;;;;33503:17:0;;33495:55;;;;-1:-1:-1;;;33495:55:0;;19654:2:1;33495:55:0;;;19636:21:1;19693:2;19673:18;;;19666:30;19732:27;19712:18;;;19705:55;19777:18;;33495:55:0;19452:349:1;33495:55:0;-1:-1:-1;;;;;33561:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33561:46:0;;;;;;;;;;33623:41;;540::1;;;33623::0;;513:18:1;33623:41:0;;;;;;;33357:315;;;:::o;29618:::-;29775:28;29785:4;29791:2;29795:7;29775:9;:28::i;:::-;29822:48;29845:4;29851:2;29855:7;29864:5;29822:22;:48::i;:::-;29814:111;;;;-1:-1:-1;;;29814:111:0;;;;;;;:::i;1957:723::-;2013:13;2234:5;2243:1;2234:10;2230:53;;-1:-1:-1;;2261:10:0;;;;;;;;;;;;-1:-1:-1;;;2261:10:0;;;;;1957:723::o;2230:53::-;2308:5;2293:12;2349:78;2356:9;;2349:78;;2382:8;;;;:::i;:::-;;-1:-1:-1;2405:10:0;;-1:-1:-1;2413:2:0;2405:10;;:::i;:::-;;;2349:78;;;2437:19;2469:6;2459:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2459:17:0;;2437:39;;2487:154;2494:10;;2487:154;;2521:11;2531:1;2521:11;;:::i;:::-;;-1:-1:-1;2590:10:0;2598:2;2590:5;:10;:::i;:::-;2577:24;;:2;:24;:::i;:::-;2564:39;;2547:6;2554;2547:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2547:56:0;;;;;;;;-1:-1:-1;2618:11:0;2627:2;2618:11;;:::i;:::-;;;2487:154;;34237:798;34393:4;-1:-1:-1;;;;;34414:13:0;;11360:20;11408:8;34410:618;;34450:70;;-1:-1:-1;;;34450:70:0;;-1:-1:-1;;;;;34450:36:0;;;;;:70;;34487:10;;34499:4;;34505:7;;34514:5;;34450:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34450:70:0;;;;;;;;-1:-1:-1;;34450:70:0;;;;;;;;;;;;:::i;:::-;;;34446:527;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34690:6;:13;34707:1;34690:18;34686:272;;34733:60;;-1:-1:-1;;;34733:60:0;;;;;;;:::i;34686:272::-;34908:6;34902:13;34893:6;34889:2;34885:15;34878:38;34446:527;-1:-1:-1;;;;;;34571:51:0;-1:-1:-1;;;34571:51:0;;-1:-1:-1;34564:58:0;;34410:618;-1:-1:-1;35012:4:0;34237:798;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:131::-;-1:-1:-1;;;;;1816:31:1;;1806:42;;1796:70;;1862:1;1859;1852:12;1877:315;1945:6;1953;2006:2;1994:9;1985:7;1981:23;1977:32;1974:52;;;2022:1;2019;2012:12;1974:52;2061:9;2048:23;2080:31;2105:5;2080:31;:::i;:::-;2130:5;2182:2;2167:18;;;;2154:32;;-1:-1:-1;;;1877:315:1:o;2390:247::-;2449:6;2502:2;2490:9;2481:7;2477:23;2473:32;2470:52;;;2518:1;2515;2508:12;2470:52;2557:9;2544:23;2576:31;2601:5;2576:31;:::i;2642:456::-;2719:6;2727;2735;2788:2;2776:9;2767:7;2763:23;2759:32;2756:52;;;2804:1;2801;2794:12;2756:52;2843:9;2830:23;2862:31;2887:5;2862:31;:::i;:::-;2912:5;-1:-1:-1;2969:2:1;2954:18;;2941:32;2982:33;2941:32;2982:33;:::i;:::-;2642:456;;3034:7;;-1:-1:-1;;;3088:2:1;3073:18;;;;3060:32;;2642:456::o;3103:248::-;3171:6;3179;3232:2;3220:9;3211:7;3207:23;3203:32;3200:52;;;3248:1;3245;3238:12;3200:52;-1:-1:-1;;3271:23:1;;;3341:2;3326:18;;;3313:32;;-1:-1:-1;3103:248:1:o;3635:127::-;3696:10;3691:3;3687:20;3684:1;3677:31;3727:4;3724:1;3717:15;3751:4;3748:1;3741:15;3767:632;3832:5;3862:18;3903:2;3895:6;3892:14;3889:40;;;3909:18;;:::i;:::-;3984:2;3978:9;3952:2;4038:15;;-1:-1:-1;;4034:24:1;;;4060:2;4030:33;4026:42;4014:55;;;4084:18;;;4104:22;;;4081:46;4078:72;;;4130:18;;:::i;:::-;4170:10;4166:2;4159:22;4199:6;4190:15;;4229:6;4221;4214:22;4269:3;4260:6;4255:3;4251:16;4248:25;4245:45;;;4286:1;4283;4276:12;4245:45;4336:6;4331:3;4324:4;4316:6;4312:17;4299:44;4391:1;4384:4;4375:6;4367;4363:19;4359:30;4352:41;;;;3767:632;;;;;:::o;4404:451::-;4473:6;4526:2;4514:9;4505:7;4501:23;4497:32;4494:52;;;4542:1;4539;4532:12;4494:52;4582:9;4569:23;4615:18;4607:6;4604:30;4601:50;;;4647:1;4644;4637:12;4601:50;4670:22;;4723:4;4715:13;;4711:27;-1:-1:-1;4701:55:1;;4752:1;4749;4742:12;4701:55;4775:74;4841:7;4836:2;4823:16;4818:2;4814;4810:11;4775:74;:::i;5264:416::-;5329:6;5337;5390:2;5378:9;5369:7;5365:23;5361:32;5358:52;;;5406:1;5403;5396:12;5358:52;5445:9;5432:23;5464:31;5489:5;5464:31;:::i;:::-;5514:5;-1:-1:-1;5571:2:1;5556:18;;5543:32;5613:15;;5606:23;5594:36;;5584:64;;5644:1;5641;5634:12;5584:64;5667:7;5657:17;;;5264:416;;;;;:::o;5685:795::-;5780:6;5788;5796;5804;5857:3;5845:9;5836:7;5832:23;5828:33;5825:53;;;5874:1;5871;5864:12;5825:53;5913:9;5900:23;5932:31;5957:5;5932:31;:::i;:::-;5982:5;-1:-1:-1;6039:2:1;6024:18;;6011:32;6052:33;6011:32;6052:33;:::i;:::-;6104:7;-1:-1:-1;6158:2:1;6143:18;;6130:32;;-1:-1:-1;6213:2:1;6198:18;;6185:32;6240:18;6229:30;;6226:50;;;6272:1;6269;6262:12;6226:50;6295:22;;6348:4;6340:13;;6336:27;-1:-1:-1;6326:55:1;;6377:1;6374;6367:12;6326:55;6400:74;6466:7;6461:2;6448:16;6443:2;6439;6435:11;6400:74;:::i;:::-;6390:84;;;5685:795;;;;;;;:::o;6485:388::-;6553:6;6561;6614:2;6602:9;6593:7;6589:23;6585:32;6582:52;;;6630:1;6627;6620:12;6582:52;6669:9;6656:23;6688:31;6713:5;6688:31;:::i;:::-;6738:5;-1:-1:-1;6795:2:1;6780:18;;6767:32;6808:33;6767:32;6808:33;:::i;9186:413::-;9388:2;9370:21;;;9427:2;9407:18;;;9400:30;9466:34;9461:2;9446:18;;9439:62;-1:-1:-1;;;9532:2:1;9517:18;;9510:47;9589:3;9574:19;;9186:413::o;10012:127::-;10073:10;10068:3;10064:20;10061:1;10054:31;10104:4;10101:1;10094:15;10128:4;10125:1;10118:15;10144:168;10217:9;;;10248;;10265:15;;;10259:22;;10245:37;10235:71;;10286:18;;:::i;10317:127::-;10378:10;10373:3;10369:20;10366:1;10359:31;10409:4;10406:1;10399:15;10433:4;10430:1;10423:15;10449:120;10489:1;10515;10505:35;;10520:18;;:::i;:::-;-1:-1:-1;10554:9:1;;10449:120::o;10574:356::-;10776:2;10758:21;;;10795:18;;;10788:30;10854:34;10849:2;10834:18;;10827:62;10921:2;10906:18;;10574:356::o;11548:380::-;11627:1;11623:12;;;;11670;;;11691:61;;11745:4;11737:6;11733:17;11723:27;;11691:61;11798:2;11790:6;11787:14;11767:18;11764:38;11761:161;;11844:10;11839:3;11835:20;11832:1;11825:31;11879:4;11876:1;11869:15;11907:4;11904:1;11897:15;11761:161;;11548:380;;;:::o;12059:518::-;12161:2;12156:3;12153:11;12150:421;;;12197:5;12194:1;12187:16;12241:4;12238:1;12228:18;12311:2;12299:10;12295:19;12292:1;12288:27;12282:4;12278:38;12347:4;12335:10;12332:20;12329:47;;;-1:-1:-1;12370:4:1;12329:47;12425:2;12420:3;12416:12;12413:1;12409:20;12403:4;12399:31;12389:41;;12480:81;12498:2;12491:5;12488:13;12480:81;;;12557:1;12543:16;;12524:1;12513:13;12480:81;;;12484:3;;12059:518;;;:::o;12753:1345::-;12879:3;12873:10;12906:18;12898:6;12895:30;12892:56;;;12928:18;;:::i;:::-;12957:97;13047:6;13007:38;13039:4;13033:11;13007:38;:::i;:::-;13001:4;12957:97;:::i;:::-;13109:4;;13166:2;13155:14;;13183:1;13178:663;;;;13885:1;13902:6;13899:89;;;-1:-1:-1;13954:19:1;;;13948:26;13899:89;-1:-1:-1;;12710:1:1;12706:11;;;12702:24;12698:29;12688:40;12734:1;12730:11;;;12685:57;14001:81;;13148:944;;13178:663;12006:1;11999:14;;;12043:4;12030:18;;-1:-1:-1;;13214:20:1;;;13332:236;13346:7;13343:1;13340:14;13332:236;;;13435:19;;;13429:26;13414:42;;13527:27;;;;13495:1;13483:14;;;;13362:19;;13332:236;;;13336:3;13596:6;13587:7;13584:19;13581:201;;;13657:19;;;13651:26;-1:-1:-1;;13740:1:1;13736:14;;;13752:3;13732:24;13728:37;13724:42;13709:58;13694:74;;13581:201;;;13828:1;13819:6;13816:1;13812:14;13808:22;13802:4;13795:36;13148:944;;;;;12753:1345;;:::o;15340:1188::-;15617:3;15646:1;15679:6;15673:13;15709:36;15735:9;15709:36;:::i;:::-;15764:1;15781:17;;;15807:133;;;;15954:1;15949:358;;;;15774:533;;15807:133;-1:-1:-1;;15840:24:1;;15828:37;;15913:14;;15906:22;15894:35;;15885:45;;;-1:-1:-1;15807:133:1;;15949:358;15980:6;15977:1;15970:17;16010:4;16055;16052:1;16042:18;16082:1;16096:165;16110:6;16107:1;16104:13;16096:165;;;16188:14;;16175:11;;;16168:35;16231:16;;;;16125:10;;16096:165;;;16100:3;;;16290:6;16285:3;16281:16;16274:23;;15774:533;;;;;16338:6;16332:13;16354:68;16413:8;16408:3;16401:4;16393:6;16389:17;16354:68;:::i;:::-;-1:-1:-1;;;16444:18:1;;16471:22;;;16520:1;16509:13;;15340:1188;-1:-1:-1;;;;15340:1188:1:o;16533:280::-;16632:6;16685:2;16673:9;16664:7;16660:23;16656:32;16653:52;;;16701:1;16698;16691:12;16653:52;16733:9;16727:16;16752:31;16777:5;16752:31;:::i;17225:125::-;17290:9;;;17311:10;;;17308:36;;;17324:18;;:::i;17355:135::-;17394:3;17415:17;;;17412:43;;17435:18;;:::i;:::-;-1:-1:-1;17482:1:1;17471:13;;17355:135::o;17495:168::-;17562:6;17588:10;;;17600;;;17584:27;;17623:11;;;17620:37;;;17637:18;;:::i;:::-;17620:37;17495:168;;;;:::o;17668:414::-;17870:2;17852:21;;;17909:2;17889:18;;;17882:30;17948:34;17943:2;17928:18;;17921:62;-1:-1:-1;;;18014:2:1;17999:18;;17992:48;18072:3;18057:19;;17668:414::o;19311:136::-;19350:3;19378:5;19368:39;;19387:18;;:::i;:::-;-1:-1:-1;;;19423:18:1;;19311:136::o;19806:128::-;19873:9;;;19894:11;;;19891:37;;;19908:18;;:::i;19939:112::-;19971:1;19997;19987:35;;20002:18;;:::i;:::-;-1:-1:-1;20036:9:1;;19939:112::o;20056:127::-;20117:10;20112:3;20108:20;20105:1;20098:31;20148:4;20145:1;20138:15;20172:4;20169:1;20162:15;20188:489;-1:-1:-1;;;;;20457:15:1;;;20439:34;;20509:15;;20504:2;20489:18;;20482:43;20556:2;20541:18;;20534:34;;;20604:3;20599:2;20584:18;;20577:31;;;20382:4;;20625:46;;20651:19;;20643:6;20625:46;:::i;:::-;20617:54;20188:489;-1:-1:-1;;;;;;20188:489:1:o;20682:249::-;20751:6;20804:2;20792:9;20783:7;20779:23;20775:32;20772:52;;;20820:1;20817;20810:12;20772:52;20852:9;20846:16;20871:30;20895:5;20871:30;:::i
Swarm Source
ipfs://8f9acf70480aa6af1f325d4cd25500832a74df9005f0f67b89b657b7660e97e2
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.