ETH Price: $2,619.07 (-0.22%)

Contract

0xaDDE73498902F61BfCB702e94C31c13C534879AC
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...144434932022-03-23 15:56:45922 days ago1648051005IN
0xaDDE7349...C534879AC
0 ETH0.0011467240
Set NFT Permit144434122022-03-23 15:40:18922 days ago1648050018IN
0xaDDE7349...C534879AC
0 ETH0.0023841240
Set NFT Permits144434092022-03-23 15:39:39922 days ago1648049979IN
0xaDDE7349...C534879AC
0 ETH0.0046514840
Set NFT Permits144433972022-03-23 15:36:43922 days ago1648049803IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433962022-03-23 15:36:21922 days ago1648049781IN
0xaDDE7349...C534879AC
0 ETH0.0058081640
Set NFT Permits144433952022-03-23 15:36:10922 days ago1648049770IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433942022-03-23 15:35:54922 days ago1648049754IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433932022-03-23 15:35:46922 days ago1648049746IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433912022-03-23 15:35:35922 days ago1648049735IN
0xaDDE7349...C534879AC
0 ETH0.0058081640
Set NFT Permits144433882022-03-23 15:35:04922 days ago1648049704IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433872022-03-23 15:34:56922 days ago1648049696IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433842022-03-23 15:34:27922 days ago1648049667IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433722022-03-23 15:31:56922 days ago1648049516IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433682022-03-23 15:30:24922 days ago1648049424IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433672022-03-23 15:30:06922 days ago1648049406IN
0xaDDE7349...C534879AC
0 ETH0.0058081640
Set NFT Permits144433652022-03-23 15:29:56922 days ago1648049396IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433512022-03-23 15:26:57922 days ago1648049217IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433412022-03-23 15:24:21922 days ago1648049061IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433332022-03-23 15:22:43922 days ago1648048963IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433322022-03-23 15:21:54922 days ago1648048914IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144433272022-03-23 15:21:06922 days ago1648048866IN
0xaDDE7349...C534879AC
0 ETH0.0058081640
Set NFT Permits144433262022-03-23 15:20:58922 days ago1648048858IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144432622022-03-23 15:04:34922 days ago1648047874IN
0xaDDE7349...C534879AC
0 ETH0.0058081640
Set NFT Permits144432612022-03-23 15:04:16922 days ago1648047856IN
0xaDDE7349...C534879AC
0 ETH0.0058086440
Set NFT Permits144432592022-03-23 15:03:52922 days ago1648047832IN
0xaDDE7349...C534879AC
0 ETH0.0058081640
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PermittedNFTsAndTypeRegistry

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion
File 1 of 7 : PermittedNFTsAndTypeRegistry.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.4;

import "../interfaces/IPermittedNFTs.sol";
import "../interfaces/INftTypeRegistry.sol";
import "../interfaces/INftfiHub.sol";

import "../utils/Ownable.sol";
import "../utils/ContractKeys.sol";

/**
 * @title  PermittedNFTsAndTypeRegistry
 * @author NFTfi
 * @dev Registry for NFT contracts supported by NFTfi.
 * Each NFT is associated with an NFT Type.
 */
contract PermittedNFTsAndTypeRegistry is Ownable, IPermittedNFTs {
    INftfiHub public hub;
    mapping(bytes32 => address) private nftTypes;

    /**
     * @notice A mapping from an NFT contract's address to the Token type of that contract. A zero Token Type indicates
     * non-permitted.
     */
    mapping(address => bytes32) private nftPermits;

    /* ****** */
    /* EVENTS */
    /* ****** */

    /**
     * @notice This event is fired whenever the admins register a ntf type.
     *
     * @param nftType - Nft type represented by keccak256('nft type').
     * @param nftWrapper - Address of the wrapper contract.
     */
    event TypeUpdated(bytes32 indexed nftType, address indexed nftWrapper);

    /**
     * @notice This event is fired whenever the admin sets a NFT's permit.
     *
     * @param nftContract - Address of the NFT contract.
     * @param nftType - NTF type e.g. bytes32("CRYPTO_KITTIES")
     */
    event NFTPermit(address indexed nftContract, bytes32 indexed nftType);

    /* ********* */
    /* MODIFIERS */
    /* ********* */

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwnerOrAirdropFactory(string memory _nftType) {
        if (
            ContractKeys.getIdFromStringKey(_nftType) ==
            ContractKeys.getIdFromStringKey(ContractKeys.AIRDROP_WRAPPER_STRING)
        ) {
            require(hub.getContract(ContractKeys.AIRDROP_FACTORY) == _msgSender(), "caller is not AirdropFactory");
        } else {
            require(owner() == _msgSender(), "caller is not owner");
        }
        _;
    }

    /* *********** */
    /* CONSTRUCTOR */
    /* *********** */

    /**
     * @dev Sets `nftTypeRegistry`
     * Initialize `nftPermits` with a batch of permitted NFTs
     *
     * @param _admin - Initial admin of this contract.
     * @param _nftfiHub - Address of the NftfiHub contract
     * @param _definedNftTypes - All the ossible nft types
     * @param _definedNftWrappers - All the possible wrappers for the types
     * @param _permittedNftContracts - The addresses of the NFT contracts.
     * @param _permittedNftTypes - The NFT Types. e.g. "CRYPTO_KITTIES"
     * - "" means "disable this permit"
     * - != "" means "enable permit with the given NFT Type"
     */
    constructor(
        address _admin,
        address _nftfiHub,
        string[] memory _definedNftTypes,
        address[] memory _definedNftWrappers,
        address[] memory _permittedNftContracts,
        string[] memory _permittedNftTypes
    ) Ownable(_admin) {
        hub = INftfiHub(_nftfiHub);
        _setNftTypes(_definedNftTypes, _definedNftWrappers);
        _setNFTPermits(_permittedNftContracts, _permittedNftTypes);
    }

    /* ********* */
    /* FUNCTIONS */
    /* ********* */

    /**
     * @notice This function can be called by admins to change the permitted list status of an NFT contract. This
     * includes both adding an NFT contract to the permitted list and removing it.
     * `_nftContract` can not be zero address.
     *
     * @param _nftContract - The address of the NFT contract.
     * @param _nftType - The NFT Type. e.g. "CRYPTO_KITTIES"
     * - "" means "disable this permit"
     * - != "" means "enable permit with the given NFT Type"
     */
    function setNFTPermit(address _nftContract, string memory _nftType)
        external
        override
        onlyOwnerOrAirdropFactory(_nftType)
    {
        _setNFTPermit(_nftContract, _nftType);
    }

    /**
     * @notice This function can be called by admins to change the permitted list status of a batch NFT contracts. This
     * includes both adding an NFT contract to the permitted list and removing it.
     * `_nftContract` can not be zero address.
     *
     * @param _nftContracts - The addresses of the NFT contracts.
     * @param _nftTypes - The NFT Types. e.g. "CRYPTO_KITTIES"
     * - "" means "disable this permit"
     * - != "" means "enable permit with the given NFT Type"
     */
    function setNFTPermits(address[] memory _nftContracts, string[] memory _nftTypes) external onlyOwner {
        _setNFTPermits(_nftContracts, _nftTypes);
    }

    /**
     * @notice This function can be called by anyone to lookup the Nft Type associated with the contract.
     * @param  _nftContract - The address of the NFT contract.
     * @notice Returns the NFT Type:
     * - bytes32("") means "not permitted"
     * - != bytes32("") means "permitted with the given NFT Type"
     */
    function getNFTPermit(address _nftContract) external view override returns (bytes32) {
        return nftPermits[_nftContract];
    }

    /**
     * @notice This function can be called by anyone to lookup the address of the NftWrapper associated to the
     * `_nftContract` type.
     * @param _nftContract - The address of the NFT contract.
     */
    function getNFTWrapper(address _nftContract) external view override returns (address) {
        bytes32 nftType = nftPermits[_nftContract];
        return getNftTypeWrapper(nftType);
    }

    /**
     * @notice Set or update the wrapper contract address for the given NFT Type.
     * Set address(0) for a nft type for un-register such type.
     *
     * @param _nftType - The nft type, e.g. "ERC721", or "ERC1155".
     * @param _nftWrapper - The address of the wrapper contract that implements INftWrapper behaviour for dealing with
     * NFTs.
     */
    function setNftType(string memory _nftType, address _nftWrapper) external onlyOwner {
        _setNftType(_nftType, _nftWrapper);
    }

    /**
     * @notice Batch set or update the wrappers contract address for the given batch of NFT Types.
     * Set address(0) for a nft type for un-register such type.
     *
     * @param _nftTypes - The nft types, e.g. "ERC721", or "ERC1155".
     * @param _nftWrappers - The addresses of the wrapper contract that implements INftWrapper behaviour for dealing
     * with NFTs.
     */
    function setNftTypes(string[] memory _nftTypes, address[] memory _nftWrappers) external onlyOwner {
        _setNftTypes(_nftTypes, _nftWrappers);
    }

    /**
     * @notice This function can be called by anyone to get the contract address that implements the given nft type.
     *
     * @param  _nftType - The nft type, e.g. bytes32("ERC721"), or bytes32("ERC1155").
     */
    function getNftTypeWrapper(bytes32 _nftType) public view returns (address) {
        return nftTypes[_nftType];
    }

    /**
     * @notice Set or update the wrapper contract address for the given NFT Type.
     * Set address(0) for a nft type for un-register such type.
     *
     * @param _nftType - The nft type, e.g. "ERC721", or "ERC1155".
     * @param _nftWrapper - The address of the wrapper contract that implements INftWrapper behaviour for dealing with
     * NFTs.
     */
    function _setNftType(string memory _nftType, address _nftWrapper) internal {
        require(bytes(_nftType).length != 0, "nftType is empty");
        bytes32 nftTypeKey = ContractKeys.getIdFromStringKey(_nftType);

        nftTypes[nftTypeKey] = _nftWrapper;

        emit TypeUpdated(nftTypeKey, _nftWrapper);
    }

    /**
     * @notice Batch set or update the wrappers contract address for the given batch of NFT Types.
     * Set address(0) for a nft type for un-register such type.
     *
     * @param _nftTypes - The nft types, e.g. keccak256("ERC721"), or keccak256("ERC1155").
     * @param _nftWrappers - The addresses of the wrapper contract that implements INftWrapper behaviour for dealing
     * with NFTs.
     */
    function _setNftTypes(string[] memory _nftTypes, address[] memory _nftWrappers) internal {
        require(_nftTypes.length == _nftWrappers.length, "setNftTypes function information arity mismatch");

        for (uint256 i = 0; i < _nftWrappers.length; i++) {
            _setNftType(_nftTypes[i], _nftWrappers[i]);
        }
    }

    /**
     * @notice This function changes the permitted list status of an NFT contract. This includes both adding an NFT
     * contract to the permitted list and removing it.
     * @param _nftContract - The address of the NFT contract.
     * @param _nftType - The NFT Type. e.g. bytes32("CRYPTO_KITTIES")
     * - bytes32("") means "disable this permit"
     * - != bytes32("") means "enable permit with the given NFT Type"
     */
    function _setNFTPermit(address _nftContract, string memory _nftType) internal {
        require(_nftContract != address(0), "nftContract is zero address");
        bytes32 nftTypeKey = ContractKeys.getIdFromStringKey(_nftType);

        if (nftTypeKey != 0) {
            require(getNftTypeWrapper(nftTypeKey) != address(0), "NFT type not registered");
        }

        require(
            nftPermits[_nftContract] != ContractKeys.getIdFromStringKey(ContractKeys.AIRDROP_WRAPPER_STRING),
            "AirdropWrapper can't be modified"
        );
        nftPermits[_nftContract] = nftTypeKey;
        emit NFTPermit(_nftContract, nftTypeKey);
    }

    /**
     * @notice This function changes the permitted list status of a batch NFT contracts. This includes both adding an
     * NFT contract to the permitted list and removing it.
     * @param _nftContracts - The addresses of the NFT contracts.
     * @param _nftTypes - The NFT Types. e.g. "CRYPTO_KITTIES"
     * - "" means "disable this permit"
     * - != "" means "enable permit with the given NFT Type"
     */
    function _setNFTPermits(address[] memory _nftContracts, string[] memory _nftTypes) internal {
        require(_nftContracts.length == _nftTypes.length, "setNFTPermits function information arity mismatch");

        for (uint256 i = 0; i < _nftContracts.length; i++) {
            _setNFTPermit(_nftContracts[i], _nftTypes[i]);
        }
    }
}

File 2 of 7 : IPermittedNFTs.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.4;

interface IPermittedNFTs {
    function setNFTPermit(address _nftContract, string memory _nftType) external;

    function getNFTPermit(address _nftContract) external view returns (bytes32);

    function getNFTWrapper(address _nftContract) external view returns (address);
}

File 3 of 7 : INftTypeRegistry.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.4;

/**
 * @title INftTypeRegistry
 * @author NFTfi
 * @dev Interface for NFT Types Registry supported by NFTfi.
 */
interface INftTypeRegistry {
    function setNftType(bytes32 _nftType, address _nftWrapper) external;

    function getNftTypeWrapper(bytes32 _nftType) external view returns (address);
}

File 4 of 7 : INftfiHub.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.4;

/**
 * @title INftfiHub
 * @author NFTfi
 * @dev NftfiHub interface
 */
interface INftfiHub {
    function setContract(string calldata _contractKey, address _contractAddress) external;

    function getContract(bytes32 _contractKey) external view returns (address);
}

File 5 of 7 : Ownable.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.4;

import "@openzeppelin/contracts/utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 *
 * Modified version from openzeppelin/contracts/access/Ownable.sol that allows to
 * initialize the owner using a parameter in the constructor
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor(address _initialOwner) {
        _setOwner(_initialOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address _newOwner) public virtual onlyOwner {
        require(_newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(_newOwner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Sets the owner.
     */
    function _setOwner(address _newOwner) private {
        address oldOwner = _owner;
        _owner = _newOwner;
        emit OwnershipTransferred(oldOwner, _newOwner);
    }
}

File 6 of 7 : ContractKeys.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.4;

/**
 * @title ContractKeys
 * @author NFTfi
 * @dev Common library for contract keys
 */
library ContractKeys {
    bytes32 public constant PERMITTED_ERC20S = bytes32("PERMITTED_ERC20S");
    bytes32 public constant PERMITTED_NFTS = bytes32("PERMITTED_NFTS");
    bytes32 public constant PERMITTED_PARTNERS = bytes32("PERMITTED_PARTNERS");
    bytes32 public constant NFT_TYPE_REGISTRY = bytes32("NFT_TYPE_REGISTRY");
    bytes32 public constant LOAN_REGISTRY = bytes32("LOAN_REGISTRY");
    bytes32 public constant PERMITTED_SNFT_RECEIVER = bytes32("PERMITTED_SNFT_RECEIVER");
    bytes32 public constant PERMITTED_BUNDLE_ERC20S = bytes32("PERMITTED_BUNDLE_ERC20S");
    bytes32 public constant PERMITTED_AIRDROPS = bytes32("PERMITTED_AIRDROPS");
    bytes32 public constant AIRDROP_RECEIVER = bytes32("AIRDROP_RECEIVER");
    bytes32 public constant AIRDROP_FACTORY = bytes32("AIRDROP_FACTORY");
    bytes32 public constant AIRDROP_FLASH_LOAN = bytes32("AIRDROP_FLASH_LOAN");
    bytes32 public constant NFTFI_BUNDLER = bytes32("NFTFI_BUNDLER");

    string public constant AIRDROP_WRAPPER_STRING = "AirdropWrapper";

    /**
     * @notice Returns the bytes32 representation of a string
     * @param _key the string key
     * @return id bytes32 representation
     */
    function getIdFromStringKey(string memory _key) external pure returns (bytes32 id) {
        require(bytes(_key).length <= 32, "invalid key");

        // solhint-disable-next-line no-inline-assembly
        assembly {
            id := mload(add(_key, 32))
        }
    }
}

File 7 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 100
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {
    "contracts/utils/ContractKeys.sol": {
      "ContractKeys": "0xc0691b4bb84f05ec8e2255a50487c8d67bac7539"
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_nftfiHub","type":"address"},{"internalType":"string[]","name":"_definedNftTypes","type":"string[]"},{"internalType":"address[]","name":"_definedNftWrappers","type":"address[]"},{"internalType":"address[]","name":"_permittedNftContracts","type":"address[]"},{"internalType":"string[]","name":"_permittedNftTypes","type":"string[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":true,"internalType":"bytes32","name":"nftType","type":"bytes32"}],"name":"NFTPermit","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":"bytes32","name":"nftType","type":"bytes32"},{"indexed":true,"internalType":"address","name":"nftWrapper","type":"address"}],"name":"TypeUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_nftContract","type":"address"}],"name":"getNFTPermit","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_nftContract","type":"address"}],"name":"getNFTWrapper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nftType","type":"bytes32"}],"name":"getNftTypeWrapper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hub","outputs":[{"internalType":"contract INftfiHub","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_nftContract","type":"address"},{"internalType":"string","name":"_nftType","type":"string"}],"name":"setNFTPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_nftContracts","type":"address[]"},{"internalType":"string[]","name":"_nftTypes","type":"string[]"}],"name":"setNFTPermits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_nftType","type":"string"},{"internalType":"address","name":"_nftWrapper","type":"address"}],"name":"setNftType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_nftTypes","type":"string[]"},{"internalType":"address[]","name":"_nftWrappers","type":"address[]"}],"name":"setNftTypes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001a1738038062001a1783398101604081905262000034916200082d565b85620000408162000080565b50600180546001600160a01b0319166001600160a01b038716179055620000688484620000d0565b620000748282620001c8565b50505050505062000a1e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80518251146200013f5760405162461bcd60e51b815260206004820152602f60248201527f7365744e667454797065732066756e6374696f6e20696e666f726d6174696f6e60448201526e040c2e4d2e8f240dad2e6dac2e8c6d608b1b60648201526084015b60405180910390fd5b60005b8151811015620001c357620001ae8382815181106200017157634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106200019a57634e487b7160e01b600052603260045260246000fd5b6020026020010151620002b960201b60201c565b80620001ba81620009e0565b91505062000142565b505050565b8051825114620002355760405162461bcd60e51b815260206004820152603160248201527f7365744e46545065726d6974732066756e6374696f6e20696e666f726d6174696044820152700dedc40c2e4d2e8f240dad2e6dac2e8c6d607b1b606482015260840162000136565b60005b8251811015620001c357620002a48382815181106200026757634e487b7160e01b600052603260045260246000fd5b60200260200101518383815181106200029057634e487b7160e01b600052603260045260246000fd5b6020026020010151620003e760201b60201c565b80620002b081620009e0565b91505062000238565b8151620002fc5760405162461bcd60e51b815260206004820152601060248201526f6e66745479706520697320656d70747960801b604482015260640162000136565b60405163f99a8ffb60e01b815260009073c0691b4bb84f05ec8e2255a50487c8d67bac75399063f99a8ffb90620003389086906004016200091f565b60206040518083038186803b1580156200035157600080fd5b505af415801562000366573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038c919062000906565b60008181526002602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519293509183917f22be69269c1f7d73e73dcb25b710dd88c7aa1cf374c16d945def98df2107c2f891a3505050565b6001600160a01b0382166200043f5760405162461bcd60e51b815260206004820152601b60248201527f6e6674436f6e7472616374206973207a65726f20616464726573730000000000604482015260640162000136565b60405163f99a8ffb60e01b815260009073c0691b4bb84f05ec8e2255a50487c8d67bac75399063f99a8ffb906200047b9085906004016200091f565b60206040518083038186803b1580156200049457600080fd5b505af4158015620004a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cf919062000906565b905080156200053e576000818152600260205260409020546001600160a01b03166200053e5760405162461bcd60e51b815260206004820152601760248201527f4e46542074797065206e6f742072656769737465726564000000000000000000604482015260640162000136565b604080518082018252600e81526d20b4b9323937b82bb930b83832b960911b6020820152905163f99a8ffb60e01b815273c0691b4bb84f05ec8e2255a50487c8d67bac75399163f99a8ffb916200059991906004016200091f565b60206040518083038186803b158015620005b257600080fd5b505af4158015620005c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ed919062000906565b6001600160a01b0384166000908152600360205260409020541415620006565760405162461bcd60e51b815260206004820181905260248201527f41697264726f70577261707065722063616e2774206265206d6f646966696564604482015260640162000136565b6001600160a01b038316600081815260036020526040808220849055518392917f903a211c8bcdc0ab18afc116fc4776504a9aac5c0121be0fda712d399017bd2291a3505050565b80516001600160a01b0381168114620006b657600080fd5b919050565b600082601f830112620006cc578081fd5b81516020620006e5620006df8362000987565b62000954565b80838252828201915082860187848660051b890101111562000705578586fd5b855b858110156200072e576200071b826200069e565b8452928401929084019060010162000707565b5090979650505050505050565b6000601f83818401126200074d578182fd5b8251602062000760620006df8362000987565b80838252828201915082870188848660051b8a0101111562000780578687fd5b865b858110156200081f5781516001600160401b0380821115620007a257898afd5b818b0191508b603f830112620007b657898afd5b86820151604082821115620007cf57620007cf62000a08565b620007e2828c01601f19168a0162000954565b92508183528d81838601011115620007f8578b8cfd5b62000809828a8501838701620009ad565b5050855250928401929084019060010162000782565b509098975050505050505050565b60008060008060008060c0878903121562000846578182fd5b62000851876200069e565b955062000861602088016200069e565b60408801519095506001600160401b03808211156200087e578384fd5b6200088c8a838b016200073b565b95506060890151915080821115620008a2578384fd5b620008b08a838b01620006bb565b94506080890151915080821115620008c6578384fd5b620008d48a838b01620006bb565b935060a0890151915080821115620008ea578283fd5b50620008f989828a016200073b565b9150509295509295509295565b60006020828403121562000918578081fd5b5051919050565b602081526000825180602084015262000940816040850160208701620009ad565b601f01601f19169190910160400192915050565b604051601f8201601f191681016001600160401b03811182821017156200097f576200097f62000a08565b604052919050565b60006001600160401b03821115620009a357620009a362000a08565b5060051b60200190565b60005b83811015620009ca578181015183820152602001620009b0565b83811115620009da576000848401525b50505050565b600060001982141562000a0157634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b610fe98062000a2e6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806395244b941161006657806395244b941461013a578063b8c8aff81461014d578063c88641a214610160578063d8e4e93e14610173578063f2fde38b1461018657600080fd5b80630a21cc43146100a35780631a3dd0a5146100b8578063365a86fc146100e85780636651f11d146100fb5780638da5cb5b14610132575b600080fd5b6100b66100b1366004610dda565b610199565b005b6100cb6100c6366004610e30565b6101df565b6040516001600160a01b0390911681526020015b60405180910390f35b6001546100cb906001600160a01b031681565b610124610109366004610cff565b6001600160a01b031660009081526003602052604090205490565b6040519081526020016100df565b6100cb6101fa565b6100b6610148366004610d84565b610209565b6100cb61015b366004610cff565b610242565b6100b661016e366004610d37565b61026b565b6100b6610181366004610e60565b6104f3565b6100b6610194366004610cff565b61052c565b336101a26101fa565b6001600160a01b0316146101d15760405162461bcd60e51b81526004016101c890610f02565b60405180910390fd5b6101db82826105cc565b5050565b6000908152600260205260409020546001600160a01b031690565b6000546001600160a01b031690565b336102126101fa565b6001600160a01b0316146102385760405162461bcd60e51b81526004016101c890610f02565b6101db82826106ab565b6001600160a01b038116600090815260036020526040812054610264816101df565b9392505050565b604080518082018252600e81526d20b4b9323937b82bb930b83832b960911b6020820152905163f99a8ffb60e01b8152829173c0691b4bb84f05ec8e2255a50487c8d67bac75399163f99a8ffb916102c591600401610eaf565b60206040518083038186803b1580156102dd57600080fd5b505af41580156102f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103159190610e48565b60405163f99a8ffb60e01b815273c0691b4bb84f05ec8e2255a50487c8d67bac75399063f99a8ffb9061034c908590600401610eaf565b60206040518083038186803b15801561036457600080fd5b505af4158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c9190610e48565b141561048f5733600154604051631c2d8fb360e31b81526e41495244524f505f464143544f525960881b60048201526001600160a01b03928316929091169063e16c7d989060240160206040518083038186803b1580156103fc57600080fd5b505afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190610d1b565b6001600160a01b03161461048a5760405162461bcd60e51b815260206004820152601c60248201527f63616c6c6572206973206e6f742041697264726f70466163746f72790000000060448201526064016101c8565b6104e4565b336104986101fa565b6001600160a01b0316146104e45760405162461bcd60e51b815260206004820152601360248201527231b0b63632b91034b9903737ba1037bbb732b960691b60448201526064016101c8565b6104ee838361078c565b505050565b336104fc6101fa565b6001600160a01b0316146105225760405162461bcd60e51b81526004016101c890610f02565b6101db8282610a28565b336105356101fa565b6001600160a01b03161461055b5760405162461bcd60e51b81526004016101c890610f02565b6001600160a01b0381166105c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101c8565b6105c981610b4e565b50565b80518251146106355760405162461bcd60e51b815260206004820152602f60248201527f7365744e667454797065732066756e6374696f6e20696e666f726d6174696f6e60448201526e040c2e4d2e8f240dad2e6dac2e8c6d608b1b60648201526084016101c8565b60005b81518110156104ee5761069983828151811061066457634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061068c57634e487b7160e01b600052603260045260246000fd5b6020026020010151610a28565b806106a381610f8a565b915050610638565b80518251146107165760405162461bcd60e51b815260206004820152603160248201527f7365744e46545065726d6974732066756e6374696f6e20696e666f726d6174696044820152700dedc40c2e4d2e8f240dad2e6dac2e8c6d607b1b60648201526084016101c8565b60005b82518110156104ee5761077a83828151811061074557634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061076d57634e487b7160e01b600052603260045260246000fd5b602002602001015161078c565b8061078481610f8a565b915050610719565b6001600160a01b0382166107e25760405162461bcd60e51b815260206004820152601b60248201527f6e6674436f6e7472616374206973207a65726f2061646472657373000000000060448201526064016101c8565b60405163f99a8ffb60e01b815260009073c0691b4bb84f05ec8e2255a50487c8d67bac75399063f99a8ffb9061081c908590600401610eaf565b60206040518083038186803b15801561083457600080fd5b505af4158015610848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c9190610e48565b905080156108d057600061087f826101df565b6001600160a01b031614156108d05760405162461bcd60e51b8152602060048201526017602482015276139195081d1e5c19481b9bdd081c9959da5cdd195c9959604a1b60448201526064016101c8565b604080518082018252600e81526d20b4b9323937b82bb930b83832b960911b6020820152905163f99a8ffb60e01b815273c0691b4bb84f05ec8e2255a50487c8d67bac75399163f99a8ffb916109299190600401610eaf565b60206040518083038186803b15801561094157600080fd5b505af4158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190610e48565b6001600160a01b03841660009081526003602052604090205414156109e05760405162461bcd60e51b815260206004820181905260248201527f41697264726f70577261707065722063616e2774206265206d6f64696669656460448201526064016101c8565b6001600160a01b038316600081815260036020526040808220849055518392917f903a211c8bcdc0ab18afc116fc4776504a9aac5c0121be0fda712d399017bd2291a3505050565b8151610a695760405162461bcd60e51b815260206004820152601060248201526f6e66745479706520697320656d70747960801b60448201526064016101c8565b60405163f99a8ffb60e01b815260009073c0691b4bb84f05ec8e2255a50487c8d67bac75399063f99a8ffb90610aa3908690600401610eaf565b60206040518083038186803b158015610abb57600080fd5b505af4158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af39190610e48565b60008181526002602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519293509183917f22be69269c1f7d73e73dcb25b710dd88c7aa1cf374c16d945def98df2107c2f891a3505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082601f830112610bae578081fd5b81356020610bc3610bbe83610f67565b610f37565b80838252828201915082860187848660051b8901011115610be2578586fd5b855b85811015610c09578135610bf781610fc7565b84529284019290840190600101610be4565b5090979650505050505050565b600082601f830112610c26578081fd5b81356020610c36610bbe83610f67565b80838252828201915082860187848660051b8901011115610c55578586fd5b855b85811015610c095781356001600160401b03811115610c74578788fd5b610c828a87838c0101610c95565b8552509284019290840190600101610c57565b600082601f830112610ca5578081fd5b81356001600160401b03811115610cbe57610cbe610fb1565b610cd1601f8201601f1916602001610f37565b818152846020838601011115610ce5578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215610d10578081fd5b813561026481610fc7565b600060208284031215610d2c578081fd5b815161026481610fc7565b60008060408385031215610d49578081fd5b8235610d5481610fc7565b915060208301356001600160401b03811115610d6e578182fd5b610d7a85828601610c95565b9150509250929050565b60008060408385031215610d96578182fd5b82356001600160401b0380821115610dac578384fd5b610db886838701610b9e565b93506020850135915080821115610dcd578283fd5b50610d7a85828601610c16565b60008060408385031215610dec578182fd5b82356001600160401b0380821115610e02578384fd5b610e0e86838701610c16565b93506020850135915080821115610e23578283fd5b50610d7a85828601610b9e565b600060208284031215610e41578081fd5b5035919050565b600060208284031215610e59578081fd5b5051919050565b60008060408385031215610e72578182fd5b82356001600160401b03811115610e87578283fd5b610e9385828601610c95565b9250506020830135610ea481610fc7565b809150509250929050565b6000602080835283518082850152825b81811015610edb57858101830151858201604001528201610ebf565b81811115610eec5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715610f5f57610f5f610fb1565b604052919050565b60006001600160401b03821115610f8057610f80610fb1565b5060051b60200190565b6000600019821415610faa57634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146105c957600080fdfea164736f6c6343000804000a000000000000000000000000214a4bc7c7843918ddbef45ee47ebed1688b0ff2000000000000000000000000d99b8075cb583fde8f60a2c3ac84ee37c701a57800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000064552433732310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d43727970746f4b6974746965730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074552433131353500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e41697264726f70577261707065720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000b2c2fce38a0b7a89ab51f046b7052892ba55eb2b00000000000000000000000080d6540b88ea6c7ae2e229b900fc6542182cf9420000000000000000000000003d40ff88d532721d44594ca4f062e94556b9cc9b000000000000000000000000b2c2fce38a0b7a89ab51f046b7052892ba55eb2b0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000f87e31492faf9a91b02ee0deaad50d51d56d5d4d00000000000000000000000079986af15539de2db9a5086382daeda917a9cf0c000000000000000000000000913ae503153d9a335398d0785ba60a2d63ddb4e200000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000064552433732310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000645524337323100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006455243373231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064552433732310000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806395244b941161006657806395244b941461013a578063b8c8aff81461014d578063c88641a214610160578063d8e4e93e14610173578063f2fde38b1461018657600080fd5b80630a21cc43146100a35780631a3dd0a5146100b8578063365a86fc146100e85780636651f11d146100fb5780638da5cb5b14610132575b600080fd5b6100b66100b1366004610dda565b610199565b005b6100cb6100c6366004610e30565b6101df565b6040516001600160a01b0390911681526020015b60405180910390f35b6001546100cb906001600160a01b031681565b610124610109366004610cff565b6001600160a01b031660009081526003602052604090205490565b6040519081526020016100df565b6100cb6101fa565b6100b6610148366004610d84565b610209565b6100cb61015b366004610cff565b610242565b6100b661016e366004610d37565b61026b565b6100b6610181366004610e60565b6104f3565b6100b6610194366004610cff565b61052c565b336101a26101fa565b6001600160a01b0316146101d15760405162461bcd60e51b81526004016101c890610f02565b60405180910390fd5b6101db82826105cc565b5050565b6000908152600260205260409020546001600160a01b031690565b6000546001600160a01b031690565b336102126101fa565b6001600160a01b0316146102385760405162461bcd60e51b81526004016101c890610f02565b6101db82826106ab565b6001600160a01b038116600090815260036020526040812054610264816101df565b9392505050565b604080518082018252600e81526d20b4b9323937b82bb930b83832b960911b6020820152905163f99a8ffb60e01b8152829173c0691b4bb84f05ec8e2255a50487c8d67bac75399163f99a8ffb916102c591600401610eaf565b60206040518083038186803b1580156102dd57600080fd5b505af41580156102f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103159190610e48565b60405163f99a8ffb60e01b815273c0691b4bb84f05ec8e2255a50487c8d67bac75399063f99a8ffb9061034c908590600401610eaf565b60206040518083038186803b15801561036457600080fd5b505af4158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c9190610e48565b141561048f5733600154604051631c2d8fb360e31b81526e41495244524f505f464143544f525960881b60048201526001600160a01b03928316929091169063e16c7d989060240160206040518083038186803b1580156103fc57600080fd5b505afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190610d1b565b6001600160a01b03161461048a5760405162461bcd60e51b815260206004820152601c60248201527f63616c6c6572206973206e6f742041697264726f70466163746f72790000000060448201526064016101c8565b6104e4565b336104986101fa565b6001600160a01b0316146104e45760405162461bcd60e51b815260206004820152601360248201527231b0b63632b91034b9903737ba1037bbb732b960691b60448201526064016101c8565b6104ee838361078c565b505050565b336104fc6101fa565b6001600160a01b0316146105225760405162461bcd60e51b81526004016101c890610f02565b6101db8282610a28565b336105356101fa565b6001600160a01b03161461055b5760405162461bcd60e51b81526004016101c890610f02565b6001600160a01b0381166105c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101c8565b6105c981610b4e565b50565b80518251146106355760405162461bcd60e51b815260206004820152602f60248201527f7365744e667454797065732066756e6374696f6e20696e666f726d6174696f6e60448201526e040c2e4d2e8f240dad2e6dac2e8c6d608b1b60648201526084016101c8565b60005b81518110156104ee5761069983828151811061066457634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061068c57634e487b7160e01b600052603260045260246000fd5b6020026020010151610a28565b806106a381610f8a565b915050610638565b80518251146107165760405162461bcd60e51b815260206004820152603160248201527f7365744e46545065726d6974732066756e6374696f6e20696e666f726d6174696044820152700dedc40c2e4d2e8f240dad2e6dac2e8c6d607b1b60648201526084016101c8565b60005b82518110156104ee5761077a83828151811061074557634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061076d57634e487b7160e01b600052603260045260246000fd5b602002602001015161078c565b8061078481610f8a565b915050610719565b6001600160a01b0382166107e25760405162461bcd60e51b815260206004820152601b60248201527f6e6674436f6e7472616374206973207a65726f2061646472657373000000000060448201526064016101c8565b60405163f99a8ffb60e01b815260009073c0691b4bb84f05ec8e2255a50487c8d67bac75399063f99a8ffb9061081c908590600401610eaf565b60206040518083038186803b15801561083457600080fd5b505af4158015610848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c9190610e48565b905080156108d057600061087f826101df565b6001600160a01b031614156108d05760405162461bcd60e51b8152602060048201526017602482015276139195081d1e5c19481b9bdd081c9959da5cdd195c9959604a1b60448201526064016101c8565b604080518082018252600e81526d20b4b9323937b82bb930b83832b960911b6020820152905163f99a8ffb60e01b815273c0691b4bb84f05ec8e2255a50487c8d67bac75399163f99a8ffb916109299190600401610eaf565b60206040518083038186803b15801561094157600080fd5b505af4158015610955573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109799190610e48565b6001600160a01b03841660009081526003602052604090205414156109e05760405162461bcd60e51b815260206004820181905260248201527f41697264726f70577261707065722063616e2774206265206d6f64696669656460448201526064016101c8565b6001600160a01b038316600081815260036020526040808220849055518392917f903a211c8bcdc0ab18afc116fc4776504a9aac5c0121be0fda712d399017bd2291a3505050565b8151610a695760405162461bcd60e51b815260206004820152601060248201526f6e66745479706520697320656d70747960801b60448201526064016101c8565b60405163f99a8ffb60e01b815260009073c0691b4bb84f05ec8e2255a50487c8d67bac75399063f99a8ffb90610aa3908690600401610eaf565b60206040518083038186803b158015610abb57600080fd5b505af4158015610acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af39190610e48565b60008181526002602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519293509183917f22be69269c1f7d73e73dcb25b710dd88c7aa1cf374c16d945def98df2107c2f891a3505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082601f830112610bae578081fd5b81356020610bc3610bbe83610f67565b610f37565b80838252828201915082860187848660051b8901011115610be2578586fd5b855b85811015610c09578135610bf781610fc7565b84529284019290840190600101610be4565b5090979650505050505050565b600082601f830112610c26578081fd5b81356020610c36610bbe83610f67565b80838252828201915082860187848660051b8901011115610c55578586fd5b855b85811015610c095781356001600160401b03811115610c74578788fd5b610c828a87838c0101610c95565b8552509284019290840190600101610c57565b600082601f830112610ca5578081fd5b81356001600160401b03811115610cbe57610cbe610fb1565b610cd1601f8201601f1916602001610f37565b818152846020838601011115610ce5578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215610d10578081fd5b813561026481610fc7565b600060208284031215610d2c578081fd5b815161026481610fc7565b60008060408385031215610d49578081fd5b8235610d5481610fc7565b915060208301356001600160401b03811115610d6e578182fd5b610d7a85828601610c95565b9150509250929050565b60008060408385031215610d96578182fd5b82356001600160401b0380821115610dac578384fd5b610db886838701610b9e565b93506020850135915080821115610dcd578283fd5b50610d7a85828601610c16565b60008060408385031215610dec578182fd5b82356001600160401b0380821115610e02578384fd5b610e0e86838701610c16565b93506020850135915080821115610e23578283fd5b50610d7a85828601610b9e565b600060208284031215610e41578081fd5b5035919050565b600060208284031215610e59578081fd5b5051919050565b60008060408385031215610e72578182fd5b82356001600160401b03811115610e87578283fd5b610e9385828601610c95565b9250506020830135610ea481610fc7565b809150509250929050565b6000602080835283518082850152825b81811015610edb57858101830151858201604001528201610ebf565b81811115610eec5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715610f5f57610f5f610fb1565b604052919050565b60006001600160401b03821115610f8057610f80610fb1565b5060051b60200190565b6000600019821415610faa57634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146105c957600080fdfea164736f6c6343000804000a

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000214a4bc7c7843918ddbef45ee47ebed1688b0ff2000000000000000000000000d99b8075cb583fde8f60a2c3ac84ee37c701a57800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003a00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000064552433732310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d43727970746f4b6974746965730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074552433131353500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e41697264726f70577261707065720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000b2c2fce38a0b7a89ab51f046b7052892ba55eb2b00000000000000000000000080d6540b88ea6c7ae2e229b900fc6542182cf9420000000000000000000000003d40ff88d532721d44594ca4f062e94556b9cc9b000000000000000000000000b2c2fce38a0b7a89ab51f046b7052892ba55eb2b0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000f87e31492faf9a91b02ee0deaad50d51d56d5d4d00000000000000000000000079986af15539de2db9a5086382daeda917a9cf0c000000000000000000000000913ae503153d9a335398d0785ba60a2d63ddb4e200000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000064552433732310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000645524337323100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006455243373231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064552433732310000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _admin (address): 0x214a4bC7C7843918DDbeF45EE47EBEd1688B0ff2
Arg [1] : _nftfiHub (address): 0xd99b8075Cb583FdE8F60A2C3aC84eE37c701a578
Arg [2] : _definedNftTypes (string[]): ERC721,CryptoKitties,ERC1155,AirdropWrapper
Arg [3] : _definedNftWrappers (address[]): 0xB2C2fCe38a0B7A89aB51F046B7052892Ba55EB2B,0x80D6540B88EA6C7Ae2e229b900fc6542182Cf942,0x3d40fF88D532721D44594Ca4F062e94556b9Cc9B,0xB2C2fCe38a0B7A89aB51F046B7052892Ba55EB2B
Arg [4] : _permittedNftContracts (address[]): 0xF87E31492Faf9A91B02Ee0dEAAd50d51d56D5d4d,0x79986aF15539de2db9A5086382daEdA917A9CF0C,0x913ae503153d9A335398D0785Ba60A2d63dDB4e2,0x50f5474724e0Ee42D9a4e711ccFB275809Fd6d4a
Arg [5] : _permittedNftTypes (string[]): ERC721,ERC721,ERC721,ERC721

-----Encoded View---------------
42 Constructor Arguments found :
Arg [0] : 000000000000000000000000214a4bc7c7843918ddbef45ee47ebed1688b0ff2
Arg [1] : 000000000000000000000000d99b8075cb583fde8f60a2c3ac84ee37c701a578
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000260
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000300
Arg [5] : 00000000000000000000000000000000000000000000000000000000000003a0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [8] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [12] : 4552433732310000000000000000000000000000000000000000000000000000
Arg [13] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [14] : 43727970746f4b69747469657300000000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [16] : 4552433131353500000000000000000000000000000000000000000000000000
Arg [17] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [18] : 41697264726f7057726170706572000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [20] : 000000000000000000000000b2c2fce38a0b7a89ab51f046b7052892ba55eb2b
Arg [21] : 00000000000000000000000080d6540b88ea6c7ae2e229b900fc6542182cf942
Arg [22] : 0000000000000000000000003d40ff88d532721d44594ca4f062e94556b9cc9b
Arg [23] : 000000000000000000000000b2c2fce38a0b7a89ab51f046b7052892ba55eb2b
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [25] : 000000000000000000000000f87e31492faf9a91b02ee0deaad50d51d56d5d4d
Arg [26] : 00000000000000000000000079986af15539de2db9a5086382daeda917a9cf0c
Arg [27] : 000000000000000000000000913ae503153d9a335398d0785ba60a2d63ddb4e2
Arg [28] : 00000000000000000000000050f5474724e0ee42d9a4e711ccfb275809fd6d4a
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [31] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [35] : 4552433732310000000000000000000000000000000000000000000000000000
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [37] : 4552433732310000000000000000000000000000000000000000000000000000
Arg [38] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [39] : 4552433732310000000000000000000000000000000000000000000000000000
Arg [40] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [41] : 4552433732310000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.