ETH Price: $3,594.18 (+4.87%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Transfer160153432022-11-21 2:16:11775 days ago1668996971IN
0xf45C0d38...c34E14C04
0 ETH0.0002801413.34011263
Buy Box Payable151908982022-07-22 6:59:09897 days ago1658473149IN
0xf45C0d38...c34E14C04
0.08 ETH0.0005849210.16597714
Buy Box Payable150567772022-07-01 13:09:11917 days ago1656680951IN
0xf45C0d38...c34E14C04
0.09 ETH0.0015734827.3468562
Buy Box Payable150180952022-06-24 11:41:20924 days ago1656070880IN
0xf45C0d38...c34E14C04
0.06 ETH0.0023203443.66141957
Buy Box Payable150180302022-06-24 11:21:32924 days ago1656069692IN
0xf45C0d38...c34E14C04
0.06 ETH0.0011434621.51635486
Buy Box Payable150030542022-06-21 15:54:33927 days ago1655826873IN
0xf45C0d38...c34E14C04
0.12 ETH0.0017965133.80460761
Buy Box Payable150030542022-06-21 15:54:33927 days ago1655826873IN
0xf45C0d38...c34E14C04
0.12 ETH0.0018496534.80460761
Buy Box Payable150030532022-06-21 15:54:16927 days ago1655826856IN
0xf45C0d38...c34E14C04
0.12 ETH0.001666331.35446998
Buy Box Payable150030512022-06-21 15:53:48927 days ago1655826828IN
0xf45C0d38...c34E14C04
0.12 ETH0.001607430.24621996
Buy Box Payable150030492022-06-21 15:53:36927 days ago1655826816IN
0xf45C0d38...c34E14C04
0.12 ETH0.0016928531.85413131
Buy Box Payable150030482022-06-21 15:53:33927 days ago1655826813IN
0xf45C0d38...c34E14C04
0.12 ETH0.0014901628.04021658
Buy Box Payable150030462022-06-21 15:53:02927 days ago1655826782IN
0xf45C0d38...c34E14C04
0.12 ETH0.0016395330.85076292
Buy Box Payable150030442022-06-21 15:52:49927 days ago1655826769IN
0xf45C0d38...c34E14C04
0.12 ETH0.0017742733.38615346
Buy Box Payable150030442022-06-21 15:52:49927 days ago1655826769IN
0xf45C0d38...c34E14C04
0.12 ETH0.001747732.88615346
Buy Box Payable150030442022-06-21 15:52:49927 days ago1655826769IN
0xf45C0d38...c34E14C04
0.12 ETH0.0017742733.38615346
Buy Box Payable150030442022-06-21 15:52:49927 days ago1655826769IN
0xf45C0d38...c34E14C04
0.12 ETH0.001747732.88615346
Buy Box Payable150030442022-06-21 15:52:49927 days ago1655826769IN
0xf45C0d38...c34E14C04
0.12 ETH0.0017713133.33045871
Buy Box Payable150030442022-06-21 15:52:49927 days ago1655826769IN
0xf45C0d38...c34E14C04
0.12 ETH0.0017478732.88933314
Buy Box Payable150025342022-06-21 13:32:08927 days ago1655818328IN
0xf45C0d38...c34E14C04
0.12 ETH0.0028066252.81163233
Buy Box Payable150025332022-06-21 13:32:02927 days ago1655818322IN
0xf45C0d38...c34E14C04
0.12 ETH0.00294955.49078354
Buy Box Payable150025322022-06-21 13:31:26927 days ago1655818286IN
0xf45C0d38...c34E14C04
0.12 ETH0.0027613451.95974265
Buy Box Payable148749932022-05-30 21:46:07949 days ago1653947167IN
0xf45C0d38...c34E14C04
0.06 ETH0.0012266621.31921176
Update Box Time ...148117382022-05-20 14:55:23959 days ago1653058523IN
0xf45C0d38...c34E14C04
0 ETH0.0013684840
Buy Box Payable148116772022-05-20 14:40:42959 days ago1653057642IN
0xf45C0d38...c34E14C04
0.12 ETH0.006786340.47706742
Buy Box Payable148108782022-05-20 11:34:05959 days ago1653046445IN
0xf45C0d38...c34E14C04
0.12 ETH0.0041757624.90643485
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
148116772022-05-20 14:40:42959 days ago1653057642
0xf45C0d38...c34E14C04
0.12 ETH
148108782022-05-20 11:34:05959 days ago1653046445
0xf45C0d38...c34E14C04
0.12 ETH
148077042022-05-19 23:13:36960 days ago1653002016
0xf45C0d38...c34E14C04
0.12 ETH
148058502022-05-19 16:02:07960 days ago1652976127
0xf45C0d38...c34E14C04
0.12 ETH
148053232022-05-19 13:54:29960 days ago1652968469
0xf45C0d38...c34E14C04
0.12 ETH
148041852022-05-19 9:24:18960 days ago1652952258
0xf45C0d38...c34E14C04
0.12 ETH
148037052022-05-19 7:28:23961 days ago1652945303
0xf45C0d38...c34E14C04
0.12 ETH
147734302022-05-14 11:45:52965 days ago1652528752
0xf45C0d38...c34E14C04
0.12 ETH
147734012022-05-14 11:38:10965 days ago1652528290
0xf45C0d38...c34E14C04
0.12 ETH
147733562022-05-14 11:28:36965 days ago1652527716
0xf45C0d38...c34E14C04
0.12 ETH
147733512022-05-14 11:27:52965 days ago1652527672
0xf45C0d38...c34E14C04
0.12 ETH
147733412022-05-14 11:24:40965 days ago1652527480
0xf45C0d38...c34E14C04
0.12 ETH
147730502022-05-14 10:18:53965 days ago1652523533
0xf45C0d38...c34E14C04
0.12 ETH
147729852022-05-14 10:05:46965 days ago1652522746
0xf45C0d38...c34E14C04
0.12 ETH
147728202022-05-14 9:31:25965 days ago1652520685
0xf45C0d38...c34E14C04
0.12 ETH
147728172022-05-14 9:30:40965 days ago1652520640
0xf45C0d38...c34E14C04
0.12 ETH
147728152022-05-14 9:30:30965 days ago1652520630
0xf45C0d38...c34E14C04
0.12 ETH
147728112022-05-14 9:28:43965 days ago1652520523
0xf45C0d38...c34E14C04
0.12 ETH
147727492022-05-14 9:13:25965 days ago1652519605
0xf45C0d38...c34E14C04
0.12 ETH
147727182022-05-14 9:06:40965 days ago1652519200
0xf45C0d38...c34E14C04
0.12 ETH
147727162022-05-14 9:06:07965 days ago1652519167
0xf45C0d38...c34E14C04
0.12 ETH
147727122022-05-14 9:05:24965 days ago1652519124
0xf45C0d38...c34E14C04
0.12 ETH
147726802022-05-14 8:57:54965 days ago1652518674
0xf45C0d38...c34E14C04
0.12 ETH
147726412022-05-14 8:47:07965 days ago1652518027
0xf45C0d38...c34E14C04
0.12 ETH
147726262022-05-14 8:43:17965 days ago1652517797
0xf45C0d38...c34E14C04
0.12 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlindboxProxy

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 13 : BlindboxProxy.sol
pragma solidity ^0.8.0;

import "./IERC1538.sol";
import "./ProxyBaseStorage.sol";
import './BlindboxStorage.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

///////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * @title ProxyReceiver Contract
 * @dev Handles forwarding calls to receiver delegates while offering transparency of updates.
 *      Follows ERC-1538 standard.
 *
 *    NOTE: Not recommended for direct use in a production contract, as no security control.
 *          Provided as simple example only.
 */
///////////////////////////////////////////////////////////////////////////////////////////////////

contract BlindboxProxy is ProxyBaseStorage, IERC1538,  BlindboxStorage, Ownable {


    constructor() public {

        proxy = address(this);

        //Adding ERC1538 updateContract function
        bytes memory signature = "updateContract(address,string,string)";
        bytes4 funcId = bytes4(keccak256(signature));
        delegates[funcId] = proxy;
        funcSignatures.push(signature);
        funcSignatureToIndex[signature] = funcSignatures.length;
        emit FunctionUpdate(funcId, address(0), proxy, string(signature));
        emit CommitMessage("Added ERC1538 updateContract function at contract creation");
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////

    fallback() external payable {
        if (msg.sig == bytes4(0) && msg.value != uint(0)) { // skipping ethers/BNB received to delegate
            return;
        }
        address delegate = delegates[msg.sig];
        require(delegate != address(0), "Function does not exist.");
        assembly {
            let ptr := mload(0x40)
            calldatacopy(ptr, 0, calldatasize())
            let result := delegatecall(gas(), delegate, ptr, calldatasize(), 0, 0)
            let size := returndatasize()
            returndatacopy(ptr, 0, size)
            switch result
            case 0 {revert(ptr, size)}
            default {return (ptr, size)}
        }
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////

    /// @notice Updates functions in a transparent contract.
    /// @dev If the value of _delegate is zero then the functions specified
    ///  in _functionSignatures are removed.
    ///  If the value of _delegate is a delegate contract address then the functions
    ///  specified in _functionSignatures will be delegated to that address.
    /// @param _delegate The address of a delegate contract to delegate to or zero
    /// @param _functionSignatures A list of function signatures listed one after the other
    /// @param _commitMessage A short description of the change and why it is made
    ///        This message is passed to the CommitMessage event.
    function updateContract(address _delegate, string calldata _functionSignatures, string calldata _commitMessage) override onlyOwner external {
        // pos is first used to check the size of the delegate contract.
        // After that pos is the current memory location of _functionSignatures.
        // It is used to move through the characters of _functionSignatures
        uint256 pos;
        if(_delegate != address(0)) {
            assembly {
                pos := extcodesize(_delegate)
            }
            require(pos > 0, "_delegate address is not a contract and is not address(0)");
        }

        // creates a bytes version of _functionSignatures
        bytes memory signatures = bytes(_functionSignatures);
        // stores the position in memory where _functionSignatures ends.
        uint256 signaturesEnd;
        // stores the starting position of a function signature in _functionSignatures
        uint256 start;
        assembly {
            pos := add(signatures,32)
            start := pos
            signaturesEnd := add(pos,mload(signatures))
        }
        // the function id of the current function signature
        bytes4 funcId;
        // the delegate address that is being replaced or address(0) if removing functions
        address oldDelegate;
        // the length of the current function signature in _functionSignatures
        uint256 num;
        // the current character in _functionSignatures
        uint256 char;
        // the position of the current function signature in the funcSignatures array
        uint256 index;
        // the last position in the funcSignatures array
        uint256 lastIndex;
        // parse the _functionSignatures string and handle each function
        for (; pos < signaturesEnd; pos++) {
            assembly {char := byte(0,mload(pos))}
            // 0x29 == )
            if (char == 0x29) {
                pos++;
                num = (pos - start);
                start = pos;
                assembly {
                    mstore(signatures,num)
                }
                funcId = bytes4(keccak256(signatures));
                oldDelegate = delegates[funcId];
                if(_delegate == address(0)) {
                    index = funcSignatureToIndex[signatures];
                    require(index != 0, "Function does not exist.");
                    index--;
                    lastIndex = funcSignatures.length - 1;
                    if (index != lastIndex) {
                        funcSignatures[index] = funcSignatures[lastIndex];
                        funcSignatureToIndex[funcSignatures[lastIndex]] = index + 1;
                    }
                    funcSignatures.pop();
                    delete funcSignatureToIndex[signatures];
                    delete delegates[funcId];
                    emit FunctionUpdate(funcId, oldDelegate, address(0), string(signatures));
                }
                else if (funcSignatureToIndex[signatures] == 0) {
                    require(oldDelegate == address(0), "FuncId clash.");
                    delegates[funcId] = _delegate;
                    funcSignatures.push(signatures);
                    funcSignatureToIndex[signatures] = funcSignatures.length;
                    emit FunctionUpdate(funcId, address(0), _delegate, string(signatures));
                }
                else if (delegates[funcId] != _delegate) {
                    delegates[funcId] = _delegate;
                    emit FunctionUpdate(funcId, oldDelegate, _delegate, string(signatures));

                }
                assembly {signatures := add(signatures,num)}
            }
        }
        emit CommitMessage(_commitMessage);
    }

    ///////////////////////////////////////////////////////////////////////////////////////////////

}

///////////////////////////////////////////////////////////////////////////////////////////////////

File 2 of 13 : IRand.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


interface IRand {
    function getRandomNumber() external returns (bytes32 requestId);
    function getRandomVal() external view returns (uint256); 

}

File 3 of 13 : ProxyBaseStorage.sol
pragma solidity ^0.8.0;

///////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * @title ProxyBaseStorage
 * @dev Defining base storage for the proxy contract.
 */
///////////////////////////////////////////////////////////////////////////////////////////////////

contract ProxyBaseStorage {

    //////////////////////////////////////////// VARS /////////////////////////////////////////////

    // maps functions to the delegate contracts that execute the functions.
    // funcId => delegate contract
    mapping(bytes4 => address) public delegates;

    // array of function signatures supported by the contract.
    bytes[] public funcSignatures;

    // maps each function signature to its position in the funcSignatures array.
    // signature => index+1
    mapping(bytes => uint256) internal funcSignatureToIndex;

    // proxy address of itself, can be used for cross-delegate calls but also safety checking.
    address proxy;

    ///////////////////////////////////////////////////////////////////////////////////////////////

}

File 4 of 13 : IERC1538.sol
pragma solidity ^0.8.0;

/// @title ERC1538 Transparent Contract Standard
/// @dev Required interface
///  Note: the ERC-165 identifier for this interface is 0x61455567
interface IERC1538 {

    /// @dev This emits when one or a set of functions are updated in a transparent contract.
    ///  The message string should give a short description of the change and why
    ///  the change was made.
    event CommitMessage(string message);

    /// @dev This emits for each function that is updated in a transparent contract.
    ///  functionId is the bytes4 of the keccak256 of the function signature.
    ///  oldDelegate is the delegate contract address of the old delegate contract if
    ///  the function is being replaced or removed.
    ///  oldDelegate is the zero value address(0) if a function is being added for the
    ///  first time.
    ///  newDelegate is the delegate contract address of the new delegate contract if
    ///  the function is being added for the first time or if the function is being
    ///  replaced.
    ///  newDelegate is the zero value address(0) if the function is being removed.
    event FunctionUpdate(bytes4 indexed functionId, address indexed oldDelegate, address indexed newDelegate, string functionSignature);

    /// @notice Updates functions in a transparent contract.
    /// @dev If the value of _delegate is zero then the functions specified
    ///  in _functionSignatures are removed.
    ///  If the value of _delegate is a delegate contract address then the functions
    ///  specified in _functionSignatures will be delegated to that address.
    /// @param _delegate The address of a delegate contract to delegate to or zero
    ///        to remove functions.
    /// @param _functionSignatures A list of function signatures listed one after the other
    /// @param _commitMessage A short description of the change and why it is made
    ///        This message is passed to the CommitMessage event.
    function updateContract(address _delegate, string calldata _functionSignatures, string calldata _commitMessage) external;
}

File 5 of 13 : BlindboxStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


import '@openzeppelin/contracts/utils/Counters.sol';
import '@openzeppelin/contracts/utils/math/SafeMath.sol';
import '../IERC20.sol';
import '../VRF/IRand.sol';
import '../INFT.sol';
import '../IDEX.sol';
import "../LPInterface.sol";

///////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * @title DexStorage
 * @dev Defining dex storage for the proxy contract.
 */
///////////////////////////////////////////////////////////////////////////////////////////////////

contract BlindboxStorage {
 using Counters for Counters.Counter;
    using SafeMath for uint256;

    address a;
    address b;
    address c;

    IRand vrf;
    IERC20 ALIA;
    IERC20 ETH;
    IERC20 USD;
    IERC20 MATIC;
    INFT nft;
    IDEX dex;
    address platform;
    IERC20 internal token;
    
    Counters.Counter internal _boxId;

 Counters.Counter public generativeSeriesId;

    struct Attribute {
        string name;
        string uri;
        uint256 rarity;
    }

    struct GenerativeBox {
        string name;
        string boxURI;
        uint256 series; // to track start end Time
        uint256 countNFTs;
        // uint256[] attributes;
        // uint256 attributesRarity;
        bool isOpened;
    }

    struct GenSeries {
        string name;
        string seriesURI;
        string boxName;
        string boxURI;
        uint256 startTime;
        uint256 endTime;
        uint256 maxBoxes;
        uint256 perBoxNftMint;
        uint256 price; // in ALIA
        Counters.Counter boxId; // to track series's boxId (upto minted so far)
        Counters.Counter attrType; // attribute Type IDs
        Counters.Counter attrId; // attribute's ID
        // attributeType => attributeId => Attribute
        mapping ( uint256 => mapping( uint256 => Attribute)) attributes;
        // attributes combination hash => flag
        mapping ( bytes32 => bool) blackList;
    }

    struct NFT {
        // attrType => attrId
        mapping (uint256 => uint256) attribute;
    }

    // seriesId => Series
    mapping ( uint256 => GenSeries) public genSeries;
   mapping ( uint256 => uint256) public genseriesRoyalty;
    mapping ( uint256 => uint256[]) _allowedCurrenciesGen;
    mapping ( uint256 => address) public bankAddressGen;
    mapping ( uint256 => uint256) public baseCurrencyGen;
    mapping (uint256=>string) public genCollection;
    // boxId => attributeType => attributeId => Attribute
    // mapping( uint256 => mapping ( uint256 => mapping( uint256 => Attribute))) public attributes;
    // boxId => Box
    mapping ( uint256 => GenerativeBox) public boxesGen;
    // attributes combination => flag
    // mapping ( bytes => bool) public blackList;
    // boxId => boxOpener => array of combinations to be minted
    // mapping ( uint256 => mapping ( address => bytes[] )) public nftToMint;
    // boxId => owner
    mapping ( uint256 => address ) public genBoxOwner;
    // boxId => NFT index => attrType => attribute
    mapping (uint256 => mapping( uint256 => mapping (uint256 => uint256))) public nftsToMint;
  

    Counters.Counter public nonGenerativeSeriesId;
    // mapping(address => Counters.Counter) public nonGenerativeSeriesIdByAddress;
    struct URI {
        string name;
        string uri;
        uint256 rarity;
        uint256 copies;
    }

    struct NonGenerativeBox {
        string name;
        string boxURI;
        uint256 series; // to track start end Time
        uint256 countNFTs;
        // uint256[] attributes;
        // uint256 attributesRarity;
        bool isOpened;
    }

    struct NonGenSeries {
        string collection;
        string name;
        string seriesURI;
        string boxName;
        string boxURI;
        uint256 startTime;
        uint256 endTime;
        uint256 maxBoxes;
        uint256 perBoxNftMint;
        uint256 price; 
        Counters.Counter boxId; // to track series's boxId (upto minted so far)
        Counters.Counter attrId; 
        // uriId => URI 
        mapping ( uint256 => URI) uris;
    }

    struct IDs {
        Counters.Counter attrType;
        Counters.Counter attrId;
    }

    struct CopiesData{
        
        uint256 total;
        mapping(uint256 => uint256) nftCopies;
    }
    mapping (uint256 => CopiesData) public _CopiesData;
    
    // seriesId => NonGenSeries
    mapping ( uint256 => NonGenSeries) public nonGenSeries;

   mapping ( uint256 => uint256[]) _allowedCurrencies;
   mapping ( uint256 => address) public bankAddress;
   mapping ( uint256 => uint256) public nonGenseriesRoyalty;
   mapping ( uint256 => uint256) public baseCurrency;
    // boxId => IDs
    // mapping (uint256 => IDs) boxIds;
    // boxId => attributeType => attributeId => Attribute
    // mapping( uint256 => mapping ( uint256 => mapping( uint256 => Attribute))) public attributes;
    // boxId => Box
    mapping ( uint256 => NonGenerativeBox) public boxesNonGen;
    // attributes combination => flag
    // mapping ( bytes => bool) public blackList;
    // boxId => boxOpener => array of combinations to be minted
    // mapping ( uint256 => mapping ( address => bytes[] )) public nftToMint;
    // boxId => owner
    mapping ( uint256 => address ) public nonGenBoxOwner;
    // boxId => NFT index => attrType => attribute
    // mapping (uint256 => mapping( uint256 => mapping (uint256 => uint256))) public nfts;
    mapping(string => mapping(bool => uint256[])) seriesIdsByCollection;
    uint256 deployTime;
     LPInterface LPAlia;
    LPInterface LPWETH;
    LPInterface LPMATIC;
     mapping(bytes32 => mapping(uint256 => bool)) _whitelisted;
    mapping(uint256 => bool) _isWhiteListed;
    mapping(address => mapping (uint256=>uint256)) _boxesCrytpoUser;
    mapping( string => mapping (uint256=>uint256)) _boxesNoncryptoUser;
    mapping (uint256 => uint256) _perBoxUserLimit;
    mapping (uint256 => bool) _isCryptoAllowed;
    mapping (uint256 => uint256) _registrationFee;
}

File 6 of 13 : LPInterface.sol
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface LPInterface {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

   
}

File 7 of 13 : INFT.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


interface INFT {
    function mintWithTokenURI(address to, string calldata tokenURI) external returns (uint256);
    function transferFrom(address owner, address to, uint256 tokenId) external;
    function mint(address to_, uint256 countNFTs_) external returns (uint256, uint256);
}

File 8 of 13 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
     function withdraw(uint) external;
    function deposit() payable external;
}

File 9 of 13 : IDEX.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


interface IDEX {
   function calculatePrice(uint256 _price, uint256 base, uint256 currencyType, uint256 tokenId, address seller, address nft_a) external view returns(uint256);
   function mintWithCollection(address collection, address to, string memory tokesnURI, uint256 royalty ) external returns(uint256);
   function createCollection(string calldata name_, string calldata symbol_) external;
   function transferCollectionOwnership(address collection, address newOwner) external;
   function mintNFT(uint256 count) external returns(uint256,uint256);
   function mintBlindbox(address collection, address to, uint256 quantity, address from, uint256 royalty) external returns(uint256 fromIndex,uint256 toIndex);
}

File 10 of 13 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 11 of 13 : Counters.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 12 of 13 : Context.sol
// SPDX-License-Identifier: MIT

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;
    }
}

File 13 of 13 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"CommitMessage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"functionId","type":"bytes4"},{"indexed":true,"internalType":"address","name":"oldDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"newDelegate","type":"address"},{"indexed":false,"internalType":"string","name":"functionSignature","type":"string"}],"name":"FunctionUpdate","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_CopiesData","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bankAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bankAddressGen","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"baseCurrency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"baseCurrencyGen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"boxesGen","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"boxURI","type":"string"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"uint256","name":"countNFTs","type":"uint256"},{"internalType":"bool","name":"isOpened","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"boxesNonGen","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"boxURI","type":"string"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"uint256","name":"countNFTs","type":"uint256"},{"internalType":"bool","name":"isOpened","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"funcSignatures","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"genBoxOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"genCollection","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"genSeries","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"seriesURI","type":"string"},{"internalType":"string","name":"boxName","type":"string"},{"internalType":"string","name":"boxURI","type":"string"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"maxBoxes","type":"uint256"},{"internalType":"uint256","name":"perBoxNftMint","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"components":[{"internalType":"uint256","name":"_value","type":"uint256"}],"internalType":"struct Counters.Counter","name":"boxId","type":"tuple"},{"components":[{"internalType":"uint256","name":"_value","type":"uint256"}],"internalType":"struct Counters.Counter","name":"attrType","type":"tuple"},{"components":[{"internalType":"uint256","name":"_value","type":"uint256"}],"internalType":"struct Counters.Counter","name":"attrId","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generativeSeriesId","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"genseriesRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftsToMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonGenBoxOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonGenSeries","outputs":[{"internalType":"string","name":"collection","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"seriesURI","type":"string"},{"internalType":"string","name":"boxName","type":"string"},{"internalType":"string","name":"boxURI","type":"string"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"maxBoxes","type":"uint256"},{"internalType":"uint256","name":"perBoxNftMint","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"components":[{"internalType":"uint256","name":"_value","type":"uint256"}],"internalType":"struct Counters.Counter","name":"boxId","type":"tuple"},{"components":[{"internalType":"uint256","name":"_value","type":"uint256"}],"internalType":"struct Counters.Counter","name":"attrId","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonGenerativeSeriesId","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonGenseriesRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"string","name":"_functionSignatures","type":"string"},{"internalType":"string","name":"_commitMessage","type":"string"}],"name":"updateContract","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50620000266200002062000195565b62000199565b600380546001600160a01b031916301790556040805160608101909152602580825260009190620020766020830139805160208083019182206003546001600160e01b031982166000908152928390526040832080546001600160a01b0319166001600160a01b039092169190911790556001805480820182559252835193945092620000d9927fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69092019190620001eb565b50600154604051600290620000f090859062000291565b908152604051908190036020018120919091556003546001600160a01b0316906000906001600160e01b03198416907f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f5353906200014e908790620002af565b60405180910390a47faa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de6040516200018590620002e4565b60405180910390a15050620003b1565b3390565b603080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001f99062000374565b90600052602060002090601f0160209004810192826200021d576000855562000268565b82601f106200023857805160ff191683800117855562000268565b8280016001018555821562000268579182015b82811115620002685782518255916020019190600101906200024b565b50620002769291506200027a565b5090565b5b808211156200027657600081556001016200027b565b60008251620002a581846020870162000341565b9190910192915050565b6000602082528251806020840152620002d081604085016020870162000341565b601f01601f19169190910160400192915050565b6020808252603a908201527f4164646564204552433135333820757064617465436f6e74726163742066756e60408201527f6374696f6e20617420636f6e7472616374206372656174696f6e000000000000606082015260800190565b60005b838110156200035e57818101518382015260200162000344565b838111156200036e576000848401525b50505050565b6002810460018216806200038957607f821691505b60208210811415620003ab57634e487b7160e01b600052602260045260246000fd5b50919050565b611cb580620003c16000396000f3fe6080604052600436106101405760003560e01c8063715018a6116100b6578063ad453ea81161006f578063ad453ea81461044e578063d118ea9b1461046e578063d6e0583814610483578063e49f46e3146104a3578063e833dce5146104c3578063f2fde38b146104d857610140565b8063715018a6146103a457806372c1f42e146103b95780637c24420c146103d95780638d124c58146103f95780638da5cb5b14610419578063a0a2daf01461042e57610140565b8063437865151161010857806343786515146102bf57806361455567146102df5780636431ab98146102ff5780636595c945146103375780636aba019b146103575780637123e6d91461038457610140565b8063236e3509146101d3578063261a423b1461020957806326a6860a146102365780632fccb87b14610256578063429bf2a714610287575b6000356001600160e01b03191615801561015957503415155b15610163576101d1565b600080356001600160e01b0319168152602081905260409020546001600160a01b0316806101ac5760405162461bcd60e51b81526004016101a390611a52565b60405180910390fd5b60405136600082376000803683855af43d806000843e8180156101cd578184f35b8184fd5b005b3480156101df57600080fd5b506101f36101ee366004611747565b6104f8565b6040516102009190611872565b60405180910390f35b34801561021557600080fd5b50610229610224366004611747565b610513565b6040516102009190611886565b34801561024257600080fd5b50610229610251366004611747565b6105ad565b34801561026257600080fd5b50610276610271366004611747565b6105d8565b604051610200959493929190611a0d565b34801561029357600080fd5b506102a76102a2366004611747565b61071b565b6040516102009c9b9a99989796959493929190611975565b3480156102cb57600080fd5b506102766102da366004611747565b6109b8565b3480156102eb57600080fd5b506101d16102fa3660046116a1565b6109d3565b34801561030b57600080fd5b5061031f61031a366004611747565b610f9f565b6040516102009c9b9a999897969594939291906118c8565b34801561034357600080fd5b506101f3610352366004611747565b6112b8565b34801561036357600080fd5b50610377610372366004611747565b6112d3565b6040516102009190611b88565b34801561039057600080fd5b5061037761039f366004611747565b6112e5565b3480156103b057600080fd5b506101d16112f7565b3480156103c557600080fd5b506101f36103d4366004611747565b611342565b3480156103e557600080fd5b506103776103f4366004611747565b61135d565b34801561040557600080fd5b50610377610414366004611747565b61136e565b34801561042557600080fd5b506101f3611380565b34801561043a57600080fd5b506101f361044936600461171f565b61138f565b34801561045a57600080fd5b5061037761046936600461175f565b6113aa565b34801561047a57600080fd5b506103776113cd565b34801561048f57600080fd5b506101f361049e366004611747565b6113d3565b3480156104af57600080fd5b506103776104be366004611747565b6113ee565b3480156104cf57600080fd5b50610377611400565b3480156104e457600080fd5b506101d16104f3366004611680565b611406565b601f602052600090815260409020546001600160a01b031681565b6017602052600090815260409020805461052c90611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461055890611c13565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b505050505081565b600181815481106105bd57600080fd5b90600052602060002001600091509050805461052c90611c13565b6022602052600090815260409020805481906105f390611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461061f90611c13565b801561066c5780601f106106415761010080835404028352916020019161066c565b820191906000526020600020905b81548152906001019060200180831161064f57829003601f168201915b50505050509080600101805461068190611c13565b80601f01602080910402602001604051908101604052809291908181526020018280546106ad90611c13565b80156106fa5780601f106106cf576101008083540402835291602001916106fa565b820191906000526020600020905b8154815290600101906020018083116106dd57829003601f168201915b50505050600283015460038401546004909401549293909290915060ff1685565b60126020526000908152604090208054819061073690611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461076290611c13565b80156107af5780601f10610784576101008083540402835291602001916107af565b820191906000526020600020905b81548152906001019060200180831161079257829003601f168201915b5050505050908060010180546107c490611c13565b80601f01602080910402602001604051908101604052809291908181526020018280546107f090611c13565b801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b50505050509080600201805461085290611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461087e90611c13565b80156108cb5780601f106108a0576101008083540402835291602001916108cb565b820191906000526020600020905b8154815290600101906020018083116108ae57829003601f168201915b5050505050908060030180546108e090611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461090c90611c13565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b50505060048401546005850154600686015460078701546008880154604080516020808201835260098c0154825282518082018452600a8d015481528351918201909352600b909b01548b52989995989497509295509093909291908c565b6018602052600090815260409020805481906105f390611c13565b6109db611477565b6001600160a01b03166109ec611380565b6001600160a01b031614610a125760405162461bcd60e51b81526004016101a390611b53565b60006001600160a01b03861615610a435750843b80610a435760405162461bcd60e51b81526004016101a390611af6565b600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870198509596508601909401938693509150819050808080805b878a1015610f5557895160001a92508260291415610f435789610ab881611c4e565b9a50610ac69050878b611bb5565b808a526020808b018290206001600160e01b031981166000908152918290526040909120548c99509097506001600160a01b0390811696509094508f16610d0057600289604051610b1791906117bb565b90815260200160405180910390205491508160001415610b495760405162461bcd60e51b81526004016101a390611a52565b81610b5381611bfc565b60018054919450610b65925090611bb5565b9050808214610c325760018181548110610b8f57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160018381548110610bba57634e487b7160e01b600052603260045260246000fd5b90600052602060002001908054610bd090611c13565b610bdb9291906114cd565b50610be7826001611b9d565b600260018381548110610c0a57634e487b7160e01b600052603260045260246000fd5b90600052602060002001604051610c2191906117d7565b908152604051908190036020019020555b6001805480610c5157634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000610c6d9190611558565b9055600289604051610c7f91906117bb565b90815260408051602092819003830181206000908190556001600160e01b03198a168082529381905291822080546001600160a01b031916905590916001600160a01b038816917f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f535390610cf3908e90611886565b60405180910390a4610f3e565b600289604051610d1091906117bb565b90815260200160405180910390205460001415610e4a576001600160a01b03851615610d4e5760405162461bcd60e51b81526004016101a390611acf565b8e600080886001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600189908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190610dd4929190611594565b50600154604051600290610de9908c906117bb565b9081526020016040518091039020819055508e6001600160a01b031660006001600160a01b0316876001600160e01b0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c604051610cf39190611886565b8e6001600160a01b0316600080886001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031614610f3e578e600080886001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508e6001600160a01b0316856001600160a01b0316876001600160e01b0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c604051610f359190611886565b60405180910390a45b978301975b89610f4d81611c4e565b9a5050610a96565b7faa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de8c8c604051610f86929190611899565b60405180910390a1505050505050505050505050505050565b601d60205260009081526040902080548190610fba90611c13565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe690611c13565b80156110335780601f1061100857610100808354040283529160200191611033565b820191906000526020600020905b81548152906001019060200180831161101657829003601f168201915b50505050509080600101805461104890611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461107490611c13565b80156110c15780601f10611096576101008083540402835291602001916110c1565b820191906000526020600020905b8154815290600101906020018083116110a457829003601f168201915b5050505050908060020180546110d690611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461110290611c13565b801561114f5780601f106111245761010080835404028352916020019161114f565b820191906000526020600020905b81548152906001019060200180831161113257829003601f168201915b50505050509080600301805461116490611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461119090611c13565b80156111dd5780601f106111b2576101008083540402835291602001916111dd565b820191906000526020600020905b8154815290600101906020018083116111c057829003601f168201915b5050505050908060040180546111f290611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461121e90611c13565b801561126b5780601f106112405761010080835404028352916020019161126b565b820191906000526020600020905b81548152906001019060200180831161124e57829003601f168201915b50505050600583015460068401546007850154600886015460098701546040805160208082018352600a8b015482528251908101909252600b90990154815296979496939550919390928c565b6015602052600090815260409020546001600160a01b031681565b60136020526000908152604090205481565b60216020526000908152604090205481565b6112ff611477565b6001600160a01b0316611310611380565b6001600160a01b0316146113365760405162461bcd60e51b81526004016101a390611b53565b611340600061147b565b565b6019602052600090815260409020546001600160a01b031681565b602080526000908152604090205481565b60166020526000908152604090205481565b6030546001600160a01b031690565b6000602081905290815260409020546001600160a01b031681565b601a60209081526000938452604080852082529284528284209052825290205481565b601b5481565b6023602052600090815260409020546001600160a01b031681565b601c6020526000908152604090205481565b60115481565b61140e611477565b6001600160a01b031661141f611380565b6001600160a01b0316146114455760405162461bcd60e51b81526004016101a390611b53565b6001600160a01b03811661146b5760405162461bcd60e51b81526004016101a390611a89565b6114748161147b565b50565b3390565b603080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546114d990611c13565b90600052602060002090601f0160209004810192826114fb5760008555611548565b82601f1061150c5780548555611548565b8280016001018555821561154857600052602060002091601f016020900482015b8281111561154857825482559160010191906001019061152d565b50611554929150611608565b5090565b50805461156490611c13565b6000825580601f106115765750611474565b601f0160209004906000526020600020908101906114749190611608565b8280546115a090611c13565b90600052602060002090601f0160209004810192826115c25760008555611548565b82601f106115db57805160ff1916838001178555611548565b82800160010185558215611548579182015b828111156115485782518255916020019190600101906115ed565b5b808211156115545760008155600101611609565b80356001600160a01b038116811461163457600080fd5b919050565b60008083601f84011261164a578182fd5b50813567ffffffffffffffff811115611661578182fd5b60208301915083602082850101111561167957600080fd5b9250929050565b600060208284031215611691578081fd5b61169a8261161d565b9392505050565b6000806000806000606086880312156116b8578081fd5b6116c18661161d565b9450602086013567ffffffffffffffff808211156116dd578283fd5b6116e989838a01611639565b90965094506040880135915080821115611701578283fd5b5061170e88828901611639565b969995985093965092949392505050565b600060208284031215611730578081fd5b81356001600160e01b03198116811461169a578182fd5b600060208284031215611758578081fd5b5035919050565b600080600060608486031215611773578283fd5b505081359360208301359350604090920135919050565b600081518084526117a2816020860160208601611bcc565b601f01601f19169290920160200192915050565b519052565b600082516117cd818460208701611bcc565b9190910192915050565b81546000908190600281046001808316806117f357607f831692505b602080841082141561181357634e487b7160e01b87526022600452602487fd5b818015611827576001811461183857611864565b60ff19861689528489019650611864565b6118418a611b91565b885b8681101561185c5781548b820152908501908301611843565b505084890196505b509498975050505050505050565b6001600160a01b0391909116815260200190565b60006020825261169a602083018461178a565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b600061018082526118dd61018083018f61178a565b82810360208401526118ef818f61178a565b90508281036040840152611903818e61178a565b90508281036060840152611917818d61178a565b9050828103608084015261192b818c61178a565b9150508860a08301528760c08301528660e0830152856101008301528461012083015283516101408301526119646101608301846117b6565b9d9c50505050505050505050505050565b6000610180825261198a61018083018f61178a565b828103602084015261199c818f61178a565b905082810360408401526119b0818e61178a565b905082810360608401526119c4818d61178a565b608084019b909b52505060a081019790975260c087019590955260e086019390935261010085019190915251610120840152516101408301525161016090910152949350505050565b600060a08252611a2060a083018861178a565b8281036020840152611a32818861178a565b604084019690965250506060810192909252151560809091015292915050565b60208082526018908201527f46756e6374696f6e20646f6573206e6f742065786973742e0000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600d908201526c233ab731a4b21031b630b9b41760991b604082015260600190565b60208082526039908201527f5f64656c65676174652061646472657373206973206e6f74206120636f6e747260408201527f61637420616e64206973206e6f74206164647265737328302900000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b60009081526020902090565b60008219821115611bb057611bb0611c69565b500190565b600082821015611bc757611bc7611c69565b500390565b60005b83811015611be7578181015183820152602001611bcf565b83811115611bf6576000848401525b50505050565b600081611c0b57611c0b611c69565b506000190190565b600281046001821680611c2757607f821691505b60208210811415611c4857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611c6257611c62611c69565b5060010190565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220f6ac69379310328b4f66f00ae4cbe0d198f14f0aee69543832365f0a4503d98464736f6c63430008010033757064617465436f6e747261637428616464726573732c737472696e672c737472696e6729

Deployed Bytecode

0x6080604052600436106101405760003560e01c8063715018a6116100b6578063ad453ea81161006f578063ad453ea81461044e578063d118ea9b1461046e578063d6e0583814610483578063e49f46e3146104a3578063e833dce5146104c3578063f2fde38b146104d857610140565b8063715018a6146103a457806372c1f42e146103b95780637c24420c146103d95780638d124c58146103f95780638da5cb5b14610419578063a0a2daf01461042e57610140565b8063437865151161010857806343786515146102bf57806361455567146102df5780636431ab98146102ff5780636595c945146103375780636aba019b146103575780637123e6d91461038457610140565b8063236e3509146101d3578063261a423b1461020957806326a6860a146102365780632fccb87b14610256578063429bf2a714610287575b6000356001600160e01b03191615801561015957503415155b15610163576101d1565b600080356001600160e01b0319168152602081905260409020546001600160a01b0316806101ac5760405162461bcd60e51b81526004016101a390611a52565b60405180910390fd5b60405136600082376000803683855af43d806000843e8180156101cd578184f35b8184fd5b005b3480156101df57600080fd5b506101f36101ee366004611747565b6104f8565b6040516102009190611872565b60405180910390f35b34801561021557600080fd5b50610229610224366004611747565b610513565b6040516102009190611886565b34801561024257600080fd5b50610229610251366004611747565b6105ad565b34801561026257600080fd5b50610276610271366004611747565b6105d8565b604051610200959493929190611a0d565b34801561029357600080fd5b506102a76102a2366004611747565b61071b565b6040516102009c9b9a99989796959493929190611975565b3480156102cb57600080fd5b506102766102da366004611747565b6109b8565b3480156102eb57600080fd5b506101d16102fa3660046116a1565b6109d3565b34801561030b57600080fd5b5061031f61031a366004611747565b610f9f565b6040516102009c9b9a999897969594939291906118c8565b34801561034357600080fd5b506101f3610352366004611747565b6112b8565b34801561036357600080fd5b50610377610372366004611747565b6112d3565b6040516102009190611b88565b34801561039057600080fd5b5061037761039f366004611747565b6112e5565b3480156103b057600080fd5b506101d16112f7565b3480156103c557600080fd5b506101f36103d4366004611747565b611342565b3480156103e557600080fd5b506103776103f4366004611747565b61135d565b34801561040557600080fd5b50610377610414366004611747565b61136e565b34801561042557600080fd5b506101f3611380565b34801561043a57600080fd5b506101f361044936600461171f565b61138f565b34801561045a57600080fd5b5061037761046936600461175f565b6113aa565b34801561047a57600080fd5b506103776113cd565b34801561048f57600080fd5b506101f361049e366004611747565b6113d3565b3480156104af57600080fd5b506103776104be366004611747565b6113ee565b3480156104cf57600080fd5b50610377611400565b3480156104e457600080fd5b506101d16104f3366004611680565b611406565b601f602052600090815260409020546001600160a01b031681565b6017602052600090815260409020805461052c90611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461055890611c13565b80156105a55780601f1061057a576101008083540402835291602001916105a5565b820191906000526020600020905b81548152906001019060200180831161058857829003601f168201915b505050505081565b600181815481106105bd57600080fd5b90600052602060002001600091509050805461052c90611c13565b6022602052600090815260409020805481906105f390611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461061f90611c13565b801561066c5780601f106106415761010080835404028352916020019161066c565b820191906000526020600020905b81548152906001019060200180831161064f57829003601f168201915b50505050509080600101805461068190611c13565b80601f01602080910402602001604051908101604052809291908181526020018280546106ad90611c13565b80156106fa5780601f106106cf576101008083540402835291602001916106fa565b820191906000526020600020905b8154815290600101906020018083116106dd57829003601f168201915b50505050600283015460038401546004909401549293909290915060ff1685565b60126020526000908152604090208054819061073690611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461076290611c13565b80156107af5780601f10610784576101008083540402835291602001916107af565b820191906000526020600020905b81548152906001019060200180831161079257829003601f168201915b5050505050908060010180546107c490611c13565b80601f01602080910402602001604051908101604052809291908181526020018280546107f090611c13565b801561083d5780601f106108125761010080835404028352916020019161083d565b820191906000526020600020905b81548152906001019060200180831161082057829003601f168201915b50505050509080600201805461085290611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461087e90611c13565b80156108cb5780601f106108a0576101008083540402835291602001916108cb565b820191906000526020600020905b8154815290600101906020018083116108ae57829003601f168201915b5050505050908060030180546108e090611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461090c90611c13565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b50505060048401546005850154600686015460078701546008880154604080516020808201835260098c0154825282518082018452600a8d015481528351918201909352600b909b01548b52989995989497509295509093909291908c565b6018602052600090815260409020805481906105f390611c13565b6109db611477565b6001600160a01b03166109ec611380565b6001600160a01b031614610a125760405162461bcd60e51b81526004016101a390611b53565b60006001600160a01b03861615610a435750843b80610a435760405162461bcd60e51b81526004016101a390611af6565b600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052508451602080870198509596508601909401938693509150819050808080805b878a1015610f5557895160001a92508260291415610f435789610ab881611c4e565b9a50610ac69050878b611bb5565b808a526020808b018290206001600160e01b031981166000908152918290526040909120548c99509097506001600160a01b0390811696509094508f16610d0057600289604051610b1791906117bb565b90815260200160405180910390205491508160001415610b495760405162461bcd60e51b81526004016101a390611a52565b81610b5381611bfc565b60018054919450610b65925090611bb5565b9050808214610c325760018181548110610b8f57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160018381548110610bba57634e487b7160e01b600052603260045260246000fd5b90600052602060002001908054610bd090611c13565b610bdb9291906114cd565b50610be7826001611b9d565b600260018381548110610c0a57634e487b7160e01b600052603260045260246000fd5b90600052602060002001604051610c2191906117d7565b908152604051908190036020019020555b6001805480610c5157634e487b7160e01b600052603160045260246000fd5b600190038181906000526020600020016000610c6d9190611558565b9055600289604051610c7f91906117bb565b90815260408051602092819003830181206000908190556001600160e01b03198a168082529381905291822080546001600160a01b031916905590916001600160a01b038816917f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f535390610cf3908e90611886565b60405180910390a4610f3e565b600289604051610d1091906117bb565b90815260200160405180910390205460001415610e4a576001600160a01b03851615610d4e5760405162461bcd60e51b81526004016101a390611acf565b8e600080886001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600189908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190610dd4929190611594565b50600154604051600290610de9908c906117bb565b9081526020016040518091039020819055508e6001600160a01b031660006001600160a01b0316876001600160e01b0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c604051610cf39190611886565b8e6001600160a01b0316600080886001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031614610f3e578e600080886001600160e01b0319166001600160e01b031916815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508e6001600160a01b0316856001600160a01b0316876001600160e01b0319167f3234040ce3bd4564874e44810f198910133a1b24c4e84aac87edbf6b458f53538c604051610f359190611886565b60405180910390a45b978301975b89610f4d81611c4e565b9a5050610a96565b7faa1c0a0a78cec2470f9652e5d29540752e7a64d70f926933cebf13afaeda45de8c8c604051610f86929190611899565b60405180910390a1505050505050505050505050505050565b601d60205260009081526040902080548190610fba90611c13565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe690611c13565b80156110335780601f1061100857610100808354040283529160200191611033565b820191906000526020600020905b81548152906001019060200180831161101657829003601f168201915b50505050509080600101805461104890611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461107490611c13565b80156110c15780601f10611096576101008083540402835291602001916110c1565b820191906000526020600020905b8154815290600101906020018083116110a457829003601f168201915b5050505050908060020180546110d690611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461110290611c13565b801561114f5780601f106111245761010080835404028352916020019161114f565b820191906000526020600020905b81548152906001019060200180831161113257829003601f168201915b50505050509080600301805461116490611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461119090611c13565b80156111dd5780601f106111b2576101008083540402835291602001916111dd565b820191906000526020600020905b8154815290600101906020018083116111c057829003601f168201915b5050505050908060040180546111f290611c13565b80601f016020809104026020016040519081016040528092919081815260200182805461121e90611c13565b801561126b5780601f106112405761010080835404028352916020019161126b565b820191906000526020600020905b81548152906001019060200180831161124e57829003601f168201915b50505050600583015460068401546007850154600886015460098701546040805160208082018352600a8b015482528251908101909252600b90990154815296979496939550919390928c565b6015602052600090815260409020546001600160a01b031681565b60136020526000908152604090205481565b60216020526000908152604090205481565b6112ff611477565b6001600160a01b0316611310611380565b6001600160a01b0316146113365760405162461bcd60e51b81526004016101a390611b53565b611340600061147b565b565b6019602052600090815260409020546001600160a01b031681565b602080526000908152604090205481565b60166020526000908152604090205481565b6030546001600160a01b031690565b6000602081905290815260409020546001600160a01b031681565b601a60209081526000938452604080852082529284528284209052825290205481565b601b5481565b6023602052600090815260409020546001600160a01b031681565b601c6020526000908152604090205481565b60115481565b61140e611477565b6001600160a01b031661141f611380565b6001600160a01b0316146114455760405162461bcd60e51b81526004016101a390611b53565b6001600160a01b03811661146b5760405162461bcd60e51b81526004016101a390611a89565b6114748161147b565b50565b3390565b603080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546114d990611c13565b90600052602060002090601f0160209004810192826114fb5760008555611548565b82601f1061150c5780548555611548565b8280016001018555821561154857600052602060002091601f016020900482015b8281111561154857825482559160010191906001019061152d565b50611554929150611608565b5090565b50805461156490611c13565b6000825580601f106115765750611474565b601f0160209004906000526020600020908101906114749190611608565b8280546115a090611c13565b90600052602060002090601f0160209004810192826115c25760008555611548565b82601f106115db57805160ff1916838001178555611548565b82800160010185558215611548579182015b828111156115485782518255916020019190600101906115ed565b5b808211156115545760008155600101611609565b80356001600160a01b038116811461163457600080fd5b919050565b60008083601f84011261164a578182fd5b50813567ffffffffffffffff811115611661578182fd5b60208301915083602082850101111561167957600080fd5b9250929050565b600060208284031215611691578081fd5b61169a8261161d565b9392505050565b6000806000806000606086880312156116b8578081fd5b6116c18661161d565b9450602086013567ffffffffffffffff808211156116dd578283fd5b6116e989838a01611639565b90965094506040880135915080821115611701578283fd5b5061170e88828901611639565b969995985093965092949392505050565b600060208284031215611730578081fd5b81356001600160e01b03198116811461169a578182fd5b600060208284031215611758578081fd5b5035919050565b600080600060608486031215611773578283fd5b505081359360208301359350604090920135919050565b600081518084526117a2816020860160208601611bcc565b601f01601f19169290920160200192915050565b519052565b600082516117cd818460208701611bcc565b9190910192915050565b81546000908190600281046001808316806117f357607f831692505b602080841082141561181357634e487b7160e01b87526022600452602487fd5b818015611827576001811461183857611864565b60ff19861689528489019650611864565b6118418a611b91565b885b8681101561185c5781548b820152908501908301611843565b505084890196505b509498975050505050505050565b6001600160a01b0391909116815260200190565b60006020825261169a602083018461178a565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b600061018082526118dd61018083018f61178a565b82810360208401526118ef818f61178a565b90508281036040840152611903818e61178a565b90508281036060840152611917818d61178a565b9050828103608084015261192b818c61178a565b9150508860a08301528760c08301528660e0830152856101008301528461012083015283516101408301526119646101608301846117b6565b9d9c50505050505050505050505050565b6000610180825261198a61018083018f61178a565b828103602084015261199c818f61178a565b905082810360408401526119b0818e61178a565b905082810360608401526119c4818d61178a565b608084019b909b52505060a081019790975260c087019590955260e086019390935261010085019190915251610120840152516101408301525161016090910152949350505050565b600060a08252611a2060a083018861178a565b8281036020840152611a32818861178a565b604084019690965250506060810192909252151560809091015292915050565b60208082526018908201527f46756e6374696f6e20646f6573206e6f742065786973742e0000000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600d908201526c233ab731a4b21031b630b9b41760991b604082015260600190565b60208082526039908201527f5f64656c65676174652061646472657373206973206e6f74206120636f6e747260408201527f61637420616e64206973206e6f74206164647265737328302900000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b60009081526020902090565b60008219821115611bb057611bb0611c69565b500190565b600082821015611bc757611bc7611c69565b500390565b60005b83811015611be7578181015183820152602001611bcf565b83811115611bf6576000848401525b50505050565b600081611c0b57611c0b611c69565b506000190190565b600281046001821680611c2757607f821691505b60208210811415611c4857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611c6257611c62611c69565b5060010190565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220f6ac69379310328b4f66f00ae4cbe0d198f14f0aee69543832365f0a4503d98464736f6c63430008010033

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  ]
[ 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.