ETH Price: $2,069.62 (-4.28%)

Contract

0x709ED5Ead4fA5F2DDd91F4d30d3fb409c4a5C0be
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Claim134871602021-10-25 14:32:141613 days ago1635172334IN
0x709ED5Ea...9c4a5C0be
0 ETH0.0022723374.71338112
Buy134425172021-10-18 15:04:101620 days ago1634569450IN
0x709ED5Ea...9c4a5C0be
0.0775 ETH0.0037148689
Buy134425172021-10-18 15:04:101620 days ago1634569450IN
0x709ED5Ea...9c4a5C0be
0.129 ETH0.0040145296.17927705
Buy134425152021-10-18 15:03:481620 days ago1634569428IN
0x709ED5Ea...9c4a5C0be
0.0387 ETH0.010395494.31075318
Buy134425142021-10-18 15:03:261620 days ago1634569406IN
0x709ED5Ea...9c4a5C0be
0.0387 ETH0.0097303384.59323226
Buy134425142021-10-18 15:03:261620 days ago1634569406IN
0x709ED5Ea...9c4a5C0be
0.0387 ETH0.0097435284.70788626
Buy134425142021-10-18 15:03:261620 days ago1634569406IN
0x709ED5Ea...9c4a5C0be
0.0775 ETH0.0035382184.76788626
Buy134425142021-10-18 15:03:261620 days ago1634569406IN
0x709ED5Ea...9c4a5C0be
0.0775 ETH0.0093435484.76788626
Buy134425142021-10-18 15:03:261620 days ago1634569406IN
0x709ED5Ea...9c4a5C0be
0.0775 ETH0.0097504284.76788626
Buy134425142021-10-18 15:03:261620 days ago1634569406IN
0x709ED5Ea...9c4a5C0be
0.129 ETH0.00662727158.77505554
Buy134425122021-10-18 15:03:031620 days ago1634569383IN
0x709ED5Ea...9c4a5C0be
0.0387 ETH0.0108826694.61134322
Buy134425122021-10-18 15:03:031620 days ago1634569383IN
0x709ED5Ea...9c4a5C0be
0.0387 ETH0.0109265894.99314322
Buy134425122021-10-18 15:03:031620 days ago1634569383IN
0x709ED5Ea...9c4a5C0be
0.129 ETH0.0039699495.11134322
Buy134425112021-10-18 15:02:461620 days ago1634569366IN
0x709ED5Ea...9c4a5C0be
0.0387 ETH0.0102766589.34282539
Buy134425112021-10-18 15:02:461620 days ago1634569366IN
0x709ED5Ea...9c4a5C0be
0.0387 ETH0.0102766589.34282539
Buy134425112021-10-18 15:02:461620 days ago1634569366IN
0x709ED5Ea...9c4a5C0be
0.0387 ETH0.0102766589.34282539
Buy134425112021-10-18 15:02:461620 days ago1634569366IN
0x709ED5Ea...9c4a5C0be
0.129 ETH0.0037316789.40282539
Buy134425112021-10-18 15:02:461620 days ago1634569366IN
0x709ED5Ea...9c4a5C0be
0.0775 ETH0.0113187898.40282539
Buy134425102021-10-18 15:02:421620 days ago1634569362IN
0x709ED5Ea...9c4a5C0be
0.129 ETH0.0042297101.3346881
Buy134425092021-10-18 15:02:211620 days ago1634569341IN
0x709ED5Ea...9c4a5C0be
0.129 ETH0.0103205793.63188773
Buy134425092021-10-18 15:02:211620 days ago1634569341IN
0x709ED5Ea...9c4a5C0be
0.129 ETH0.0108206194.07188773
Buy134425092021-10-18 15:02:211620 days ago1634569341IN
0x709ED5Ea...9c4a5C0be
0.129 ETH0.01955425170
Set White List134425062021-10-18 15:02:091620 days ago1634569329IN
0x709ED5Ea...9c4a5C0be
0 ETH0.0739505492.23514435
Set White List134425062021-10-18 15:02:091620 days ago1634569329IN
0x709ED5Ea...9c4a5C0be
0 ETH0.0444367792.23514435
Set White List134425052021-10-18 15:02:031620 days ago1634569323IN
0x709ED5Ea...9c4a5C0be
0 ETH0.0320888682.20914613
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-134871602021-10-25 14:32:141613 days ago1635172334
0x709ED5Ea...9c4a5C0be
12.9202 ETH
-134274582021-10-16 6:40:511622 days ago1634366451  Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x35CDB713...E5424Dd5A
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
GenMarket

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-06
*/

// File: @openzeppelin/contracts/introspection/IERC165.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol



pragma solidity >=0.6.2 <0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol



pragma solidity >=0.6.0 <0.8.0;


/**
 * _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {

    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

// File: @openzeppelin/contracts/introspection/ERC165.sol



pragma solidity >=0.6.0 <0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts may inherit from this and call {_registerInterface} to declare
 * their support of an interface.
 */
abstract contract ERC165 is IERC165 {
    /*
     * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
     */
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;

    /**
     * @dev Mapping of interface ids to whether or not it's supported.
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        // Derived contracts need only register support for their own interfaces,
        // we register support for ERC165 itself here
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     *
     * Time complexity O(1), guaranteed to always use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev Registers the contract as an implementer of the interface defined by
     * `interfaceId`. Support of the actual ERC165 interface is automatic and
     * registering its interface id is not required.
     *
     * See {IERC165-supportsInterface}.
     *
     * Requirements:
     *
     * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
     */
    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol



pragma solidity >=0.6.0 <0.8.0;



/**
 * @dev _Available since v3.1._
 */
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    constructor() internal {
        _registerInterface(
            ERC1155Receiver(address(0)).onERC1155Received.selector ^
            ERC1155Receiver(address(0)).onERC1155BatchReceived.selector
        );
    }
}

// File: @openzeppelin/contracts/math/SafeMath.sol



pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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) {
        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) {
        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) {
        // 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) {
        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) {
        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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @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. 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) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b > 0, "SafeMath: modulo by zero");
        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) {
        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.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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) {
        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) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

// File: contracts/interfaces/IGenMarketFactory.sol

pragma solidity >=0.5.0;

interface IGenMarketFactory {
    event MarketCreated(address indexed caller, address indexed genMarket);

    function feeTo() external view returns (address);
    function feeDivisor() external view returns (uint256);
    function feeToSetter() external view returns (address);

    function getGenMarket(address) external view returns (uint);
    function ticketToMarket(address) external view returns (address);
    function genMarkets(uint) external view returns (address);
    function genMarketsLength() external view returns (uint);

    function createGenMarket(
        address _genTicket,
        // Prices are in ETH
        uint256[] memory _prices,
        // Number of each ticket type being sold
        uint256[] memory _numTickets,
        uint256[] memory _purchaseLimits
    ) external returns (address);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setFeeDivisor(uint256) external;
}

// File: contracts/GenMarket.sol

pragma solidity 0.6.12;





contract GenMarket is ERC1155Receiver {
    using SafeMath for uint;

    address public genTicket;

    uint256[] public prices;
    uint256[] public numTickets;
    uint256[] public purchaseLimits;
    IGenMarketFactory public factory;
    address public creator;
    bool public active = false;
    mapping(uint256 => mapping(address => bool)) public whitelist;
    mapping(uint256 => mapping(address => uint256)) public purchases;
    mapping(uint256 => uint256) public ticketsPurchased;
    // Expected start time, start at max uint256
    uint public startTime = type(uint).max;

    bytes private constant VALIDATOR = bytes('JC');
    
    constructor (
        address _genTicket,
        uint256[] memory _prices,
        uint256[] memory _numTickets,
        uint256[] memory _purchaseLimits,
        IGenMarketFactory _factory,
        address _creator
    ) 
        public 
    {
        genTicket = _genTicket;
        prices = _prices;
        numTickets = _numTickets;
        purchaseLimits = _purchaseLimits;
        factory = _factory;
        creator = _creator;
    }

    function ticketTypes() external view returns (uint) {
        return numTickets.length;
    }

    function updateStartTime(uint timestamp) external {
        require(msg.sender == creator, "GenMarket: Only creator can update start time");
        require(getBlockTimestamp() < startTime, "GenMarket: Start time already occurred");
        require(getBlockTimestamp() < timestamp, "GenMarket: New start time must be in the future");

        startTime = timestamp;
    }

    function setWhiteList(uint256 id, address[] memory addresses, bool whiteListOn) external {
        require(msg.sender == creator, "GenMarket: Only creator can update whitelist");
        require(addresses.length < 200, "GenMarket: Whitelist less than 200 at a time");

        for (uint8 i=0; i<200; i++) {
            if (i == addresses.length) {
                break;
            }

            whitelist[id][addresses[i]] = whiteListOn;
        }
    }

    function deposit() external {
        require(msg.sender == creator, "GenMarket: Only the creator can deposit the tickets");
        require(!active, "GenMarket: Market is already active");

        uint256[] memory tokenIDs = new uint256[](numTickets.length);
        for (uint8 i = 0; i < numTickets.length; i++)
            tokenIDs[i] = i;

        IERC1155(genTicket).safeBatchTransferFrom(msg.sender, address(this), tokenIDs, numTickets, VALIDATOR);

        active = true;
    }

    function buy(uint256 _id, uint256 _amount) external payable {
        require(active, "GenMarket: Market is not active");
        require(getBlockTimestamp() >= startTime, "GenMarket: Start time must pass");
        require(whitelist[_id][msg.sender], "GenMarket: User not on whitelist");
        require(purchases[_id][msg.sender].add(_amount) <= purchaseLimits[_id], "GenMarket: User will exceed purchase limit");
        require(ticketsPurchased[_id].add(_amount) <= numTickets[_id], "GenMarket: Not enough tickets remaining");
        require(prices[_id].mul(_amount) <= msg.value, "GenMarket: Insufficient payment");

        purchases[_id][msg.sender] = purchases[_id][msg.sender].add(_amount);
        ticketsPurchased[_id] = ticketsPurchased[_id].add(_amount);

        if (factory.feeTo() != address(0)) {
            // Send fees to fee address
            (bool sent, bytes memory data) = factory.feeTo().call{value: msg.value.div(factory.feeDivisor())}("");
            require(sent, "GenMarket: Failed to send Ether");
        }
        
        bytes memory data;
        IERC1155(genTicket).safeTransferFrom(address(this), msg.sender, _id, _amount, data);
    }

    function claim() external {
        require(msg.sender == creator, "GenMarket: Only the creator can claim");

        (bool sent, bytes memory data) = msg.sender.call{value: address(this).balance}("");
        require(sent, "GenMarket: Failed to send Ether");
    }

    function getBlockTimestamp() internal view returns (uint) {
        // solium-disable-next-line security/no-block-members
        return block.timestamp;
    }

    /**
     * ERC1155 Token ERC1155Receiver
     */
    function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _value, bytes calldata _data) override external returns(bytes4) {
        if(keccak256(_data) == keccak256(VALIDATOR)){
            return 0xf23a6e61;
        }
    }

    function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) override external returns(bytes4) {
        if(keccak256(_data) == keccak256(VALIDATOR)){
            return 0xbc197c81;
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_genTicket","type":"address"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"},{"internalType":"uint256[]","name":"_numTickets","type":"uint256[]"},{"internalType":"uint256[]","name":"_purchaseLimits","type":"uint256[]"},{"internalType":"contract IGenMarketFactory","name":"_factory","type":"address"},{"internalType":"address","name":"_creator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IGenMarketFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genTicket","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"numTickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"prices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"purchaseLimits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"purchases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"whiteListOn","type":"bool"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ticketTypes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ticketsPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"updateStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

0x60806040526000600660146101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a553480156200005057600080fd5b506040516200263f3803806200263f833981810160405260c08110156200007657600080fd5b810190808051906020019092919080516040519392919084640100000000821115620000a157600080fd5b83820191506020820185811115620000b857600080fd5b8251866020820283011164010000000082111715620000d657600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200010f578082015181840152602081019050620000f2565b50505050905001604052602001805160405193929190846401000000008211156200013957600080fd5b838201915060208201858111156200015057600080fd5b82518660208202830111640100000000821117156200016e57600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620001a75780820151818401526020810190506200018a565b5050505090500160405260200180516040519392919084640100000000821115620001d157600080fd5b83820191506020820185811115620001e857600080fd5b82518660208202830111640100000000821117156200020657600080fd5b8083526020830192505050908051906020019060200280838360005b838110156200023f57808201518184015260208101905062000222565b5050505090500160405260200180519060200190929190805190602001909291905050506200027b6301ffc9a760e01b620003b660201b60201c565b6200029c63bc197c8160e01b63f23a6e6160e01b18620003b660201b60201c565b85600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460029080519060200190620002f5929190620004bf565b5083600390805190602001906200030e929190620004bf565b50826004908051906020019062000327929190620004bf565b5081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000530565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054828255906000526020600020908101928215620004fe579160200282015b82811115620004fd578251825591602001919060010190620004e0565b5b5090506200050d919062000511565b5090565b5b808211156200052c57600081600090555060010162000512565b5090565b6120ff80620005406000396000f3fe60806040526004361061011f5760003560e01c806378e97925116100a0578063c45a015511610064578063c45a015514610736578063ce339d5b14610777578063d0e30db0146107c6578063d6febde8146107dd578063f23a6e61146108155761011f565b806378e97925146103ef5780639d648f9b1461041a578063ba5ef736146104f5578063bc197c8114610544578063bc31c1c1146106e75761011f565b80631c09e5c6116100e75780631c09e5c61461027e5780632fbbe937146102ed5780634b25bfce146103185780634e71d92d146103895780635685235b146103a05761011f565b806301ffc9a71461012457806302d05d3f1461019457806302fb0c5e146101d557806306bcf02f1461020257806307fc6e511461023d575b600080fd5b34801561013057600080fd5b5061017c6004803603602081101561014757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610922565b60405180821515815260200191505060405180910390f35b3480156101a057600080fd5b506101a9610989565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101e157600080fd5b506101ea6109af565b60405180821515815260200191505060405180910390f35b34801561020e57600080fd5b5061023b6004803603602081101561022557600080fd5b81019080803590602001909291905050506109c2565b005b34801561024957600080fd5b50610252610b32565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028a57600080fd5b506102d7600480360360408110156102a157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b58565b6040518082815260200191505060405180910390f35b3480156102f957600080fd5b50610302610b7d565b6040518082815260200191505060405180910390f35b34801561032457600080fd5b506103716004803603604081101561033b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b8a565b60405180821515815260200191505060405180910390f35b34801561039557600080fd5b5061039e610bb9565b005b3480156103ac57600080fd5b506103d9600480360360208110156103c357600080fd5b8101908080359060200190929190505050610d42565b6040518082815260200191505060405180910390f35b3480156103fb57600080fd5b50610404610d63565b6040518082815260200191505060405180910390f35b34801561042657600080fd5b506104f36004803603606081101561043d57600080fd5b81019080803590602001909291908035906020019064010000000081111561046457600080fd5b82018360208201111561047657600080fd5b8035906020019184602083028401116401000000008311171561049857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803515159060200190929190505050610d69565b005b34801561050157600080fd5b5061052e6004803603602081101561051857600080fd5b8101908080359060200190929190505050610f1a565b6040518082815260200191505060405180910390f35b34801561055057600080fd5b506106b2600480360360a081101561056757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156105c457600080fd5b8201836020820111156105d657600080fd5b803590602001918460208302840111640100000000831117156105f857600080fd5b90919293919293908035906020019064010000000081111561061957600080fd5b82018360208201111561062b57600080fd5b8035906020019184602083028401116401000000008311171561064d57600080fd5b90919293919293908035906020019064010000000081111561066e57600080fd5b82018360208201111561068057600080fd5b803590602001918460018302840111640100000000831117156106a257600080fd5b9091929391929390505050610f32565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156106f357600080fd5b506107206004803603602081101561070a57600080fd5b8101908080359060200190929190505050610fb2565b6040518082815260200191505060405180910390f35b34801561074257600080fd5b5061074b610fd3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078357600080fd5b506107b06004803603602081101561079a57600080fd5b8101908080359060200190929190505050610ff9565b6040518082815260200191505060405180910390f35b3480156107d257600080fd5b506107db61101a565b005b610813600480360360408110156107f357600080fd5b8101908080359060200190929190803590602001909291905050506113c7565b005b34801561082157600080fd5b506108ed600480360360a081101561083857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156108a957600080fd5b8201836020820111156108bb57600080fd5b803590602001918460018302840111640100000000831117156108dd57600080fd5b9091929391929390505050611ce5565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660149054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180611fab602d913960400191505060405180910390fd5b600a54610a73611d63565b10610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611f596026913960400191505060405180910390fd5b80610ad2611d63565b10610b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612076602f913960400191505060405180910390fd5b80600a8190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600380549050905090565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806120a56025913960400191505060405180910390fd5b600060603373ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d8060008114610cc1576040519150601f19603f3d011682016040523d82523d6000602084013e610cc6565b606091505b509150915081610d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a204661696c656420746f2073656e642045746865720081525060200191505060405180910390fd5b5050565b60048181548110610d4f57fe5b906000526020600020016000915090505481565b600a5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611f7f602c913960400191505060405180910390fd5b60c8825110610e69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611f03602c913960400191505060405180910390fd5b60005b60c88160ff161015610f145782518160ff161415610e8957610f14565b81600760008681526020019081526020016000206000858460ff1681518110610eae57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610e6c565b50505050565b60096020528060005260406000206000915090505481565b60006040518060400160405280600281526020017f4a4300000000000000000000000000000000000000000000000000000000000081525080519060200120838360405180838380828437808301925050509250505060405180910390201415610fa55763bc197c8160e01b9050610fa6565b5b98975050505050505050565b60028181548110610fbf57fe5b906000526020600020016000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061100657fe5b906000526020600020016000915090505481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180611ffb6033913960400191505060405180910390fd5b600660149054906101000a900460ff1615611126576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611fd86023913960400191505060405180910390fd5b606060038054905067ffffffffffffffff8111801561114457600080fd5b506040519080825280602002602001820160405280156111735781602001602082028036833780820191505090505b50905060005b6003805490508160ff1610156111b5578060ff16828260ff168151811061119c57fe5b6020026020010181815250508080600101915050611179565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d633308460036040518060400160405280600281526020017f4a430000000000000000000000000000000000000000000000000000000000008152506040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156112c15780820151818401526020810190506112a6565b50505050905001848103835286818154815260200191508054801561130557602002820191906000526020600020905b8154815260200190600101908083116112f1575b5050848103825285818151815260200191508051906020019080838360005b8381101561133f578082015181840152602081019050611324565b50505050905090810190601f16801561136c5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b505050506001600660146101000a81548160ff02191690831515021790555050565b600660149054906101000a900460ff16611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a204d61726b6574206973206e6f74206163746976650081525060200191505060405180910390fd5b600a54611454611d63565b10156114c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a2053746172742074696d65206d75737420706173730081525060200191505060405180910390fd5b6007600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611598576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f47656e4d61726b65743a2055736572206e6f74206f6e2077686974656c69737481525060200191505060405180910390fd5b600482815481106115a557fe5b9060005260206000200154611613826008600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6b90919063ffffffff16565b111561166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611f2f602a913960400191505060405180910390fd5b6003828154811061167757fe5b90600052602060002001546116a8826009600086815260200190815260200160002054611d6b90919063ffffffff16565b11156116ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061204f6027913960400191505060405180910390fd5b3461172a826002858154811061171157fe5b9060005260206000200154611df390919063ffffffff16565b111561179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a20496e73756666696369656e74207061796d656e740081525060200191505060405180910390fd5b611801816008600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6b90919063ffffffff16565b6008600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061187b816009600085815260200190815260200160002054611d6b90919063ffffffff16565b6009600084815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561191257600080fd5b505afa158015611926573d6000803e3d6000fd5b505050506040513d602081101561193c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611ba05760006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156119d457600080fd5b505afa1580156119e8573d6000803e3d6000fd5b505050506040513d60208110156119fe57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16611ada600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639a36f9326040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9057600080fd5b505afa158015611aa4573d6000803e3d6000fd5b505050506040513d6020811015611aba57600080fd5b810190808051906020019092919050505034611e7990919063ffffffff16565b60405180600001905060006040518083038185875af1925050503d8060008114611b20576040519150601f19603f3d011682016040523d82523d6000602084013e611b25565b606091505b509150915081611b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a204661696c656420746f2073656e642045746865720081525060200191505060405180910390fd5b50505b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30338686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c78578082015181840152602081019050611c5d565b50505050905090810190601f168015611ca55780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015611cc857600080fd5b505af1158015611cdc573d6000803e3d6000fd5b50505050505050565b60006040518060400160405280600281526020017f4a4300000000000000000000000000000000000000000000000000000000000081525080519060200120838360405180838380828437808301925050509250505060405180910390201415611d585763f23a6e6160e01b9050611d59565b5b9695505050505050565b600042905090565b600080828401905083811015611de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415611e065760009050611e73565b6000828402905082848281611e1757fe5b0414611e6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061202e6021913960400191505060405180910390fd5b809150505b92915050565b6000808211611ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b818381611ef957fe5b0490509291505056fe47656e4d61726b65743a2057686974656c697374206c657373207468616e2032303020617420612074696d6547656e4d61726b65743a20557365722077696c6c20657863656564207075726368617365206c696d697447656e4d61726b65743a2053746172742074696d6520616c7265616479206f6363757272656447656e4d61726b65743a204f6e6c792063726561746f722063616e207570646174652077686974656c69737447656e4d61726b65743a204f6e6c792063726561746f722063616e207570646174652073746172742074696d6547656e4d61726b65743a204d61726b657420697320616c72656164792061637469766547656e4d61726b65743a204f6e6c79207468652063726561746f722063616e206465706f73697420746865207469636b657473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7747656e4d61726b65743a204e6f7420656e6f756768207469636b6574732072656d61696e696e6747656e4d61726b65743a204e65772073746172742074696d65206d75737420626520696e207468652066757475726547656e4d61726b65743a204f6e6c79207468652063726561746f722063616e20636c61696da2646970667358221220587ad23e600cf9659a27545e6d3b2cfe09cb97ccfe6f36afcc0f80408331ed1464736f6c634300060c0033000000000000000000000000ab45c53c164ac8c2a657bd74d75bf205661cc40e00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000200000000000000000000000000f2bc3fcea7ef3e72e645925a8823863faf33a0330000000000000000000000009c4808c005f3f48d765d65475dae47c59ac3bd72000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000002b139f8de6d000000000000000000000000000000000000000000000000000001ca4cd108068000000000000000000000000000000000000000000000000000011355d6e217c00000000000000000000000000000000000000000000000000000897d71e8cec0000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001

Deployed Bytecode

0x60806040526004361061011f5760003560e01c806378e97925116100a0578063c45a015511610064578063c45a015514610736578063ce339d5b14610777578063d0e30db0146107c6578063d6febde8146107dd578063f23a6e61146108155761011f565b806378e97925146103ef5780639d648f9b1461041a578063ba5ef736146104f5578063bc197c8114610544578063bc31c1c1146106e75761011f565b80631c09e5c6116100e75780631c09e5c61461027e5780632fbbe937146102ed5780634b25bfce146103185780634e71d92d146103895780635685235b146103a05761011f565b806301ffc9a71461012457806302d05d3f1461019457806302fb0c5e146101d557806306bcf02f1461020257806307fc6e511461023d575b600080fd5b34801561013057600080fd5b5061017c6004803603602081101561014757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610922565b60405180821515815260200191505060405180910390f35b3480156101a057600080fd5b506101a9610989565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101e157600080fd5b506101ea6109af565b60405180821515815260200191505060405180910390f35b34801561020e57600080fd5b5061023b6004803603602081101561022557600080fd5b81019080803590602001909291905050506109c2565b005b34801561024957600080fd5b50610252610b32565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028a57600080fd5b506102d7600480360360408110156102a157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b58565b6040518082815260200191505060405180910390f35b3480156102f957600080fd5b50610302610b7d565b6040518082815260200191505060405180910390f35b34801561032457600080fd5b506103716004803603604081101561033b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b8a565b60405180821515815260200191505060405180910390f35b34801561039557600080fd5b5061039e610bb9565b005b3480156103ac57600080fd5b506103d9600480360360208110156103c357600080fd5b8101908080359060200190929190505050610d42565b6040518082815260200191505060405180910390f35b3480156103fb57600080fd5b50610404610d63565b6040518082815260200191505060405180910390f35b34801561042657600080fd5b506104f36004803603606081101561043d57600080fd5b81019080803590602001909291908035906020019064010000000081111561046457600080fd5b82018360208201111561047657600080fd5b8035906020019184602083028401116401000000008311171561049857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803515159060200190929190505050610d69565b005b34801561050157600080fd5b5061052e6004803603602081101561051857600080fd5b8101908080359060200190929190505050610f1a565b6040518082815260200191505060405180910390f35b34801561055057600080fd5b506106b2600480360360a081101561056757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156105c457600080fd5b8201836020820111156105d657600080fd5b803590602001918460208302840111640100000000831117156105f857600080fd5b90919293919293908035906020019064010000000081111561061957600080fd5b82018360208201111561062b57600080fd5b8035906020019184602083028401116401000000008311171561064d57600080fd5b90919293919293908035906020019064010000000081111561066e57600080fd5b82018360208201111561068057600080fd5b803590602001918460018302840111640100000000831117156106a257600080fd5b9091929391929390505050610f32565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156106f357600080fd5b506107206004803603602081101561070a57600080fd5b8101908080359060200190929190505050610fb2565b6040518082815260200191505060405180910390f35b34801561074257600080fd5b5061074b610fd3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078357600080fd5b506107b06004803603602081101561079a57600080fd5b8101908080359060200190929190505050610ff9565b6040518082815260200191505060405180910390f35b3480156107d257600080fd5b506107db61101a565b005b610813600480360360408110156107f357600080fd5b8101908080359060200190929190803590602001909291905050506113c7565b005b34801561082157600080fd5b506108ed600480360360a081101561083857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156108a957600080fd5b8201836020820111156108bb57600080fd5b803590602001918460018302840111640100000000831117156108dd57600080fd5b9091929391929390505050611ce5565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660149054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180611fab602d913960400191505060405180910390fd5b600a54610a73611d63565b10610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611f596026913960400191505060405180910390fd5b80610ad2611d63565b10610b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612076602f913960400191505060405180910390fd5b80600a8190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600380549050905090565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806120a56025913960400191505060405180910390fd5b600060603373ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d8060008114610cc1576040519150601f19603f3d011682016040523d82523d6000602084013e610cc6565b606091505b509150915081610d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a204661696c656420746f2073656e642045746865720081525060200191505060405180910390fd5b5050565b60048181548110610d4f57fe5b906000526020600020016000915090505481565b600a5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611f7f602c913960400191505060405180910390fd5b60c8825110610e69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611f03602c913960400191505060405180910390fd5b60005b60c88160ff161015610f145782518160ff161415610e8957610f14565b81600760008681526020019081526020016000206000858460ff1681518110610eae57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610e6c565b50505050565b60096020528060005260406000206000915090505481565b60006040518060400160405280600281526020017f4a4300000000000000000000000000000000000000000000000000000000000081525080519060200120838360405180838380828437808301925050509250505060405180910390201415610fa55763bc197c8160e01b9050610fa6565b5b98975050505050505050565b60028181548110610fbf57fe5b906000526020600020016000915090505481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061100657fe5b906000526020600020016000915090505481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180611ffb6033913960400191505060405180910390fd5b600660149054906101000a900460ff1615611126576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611fd86023913960400191505060405180910390fd5b606060038054905067ffffffffffffffff8111801561114457600080fd5b506040519080825280602002602001820160405280156111735781602001602082028036833780820191505090505b50905060005b6003805490508160ff1610156111b5578060ff16828260ff168151811061119c57fe5b6020026020010181815250508080600101915050611179565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d633308460036040518060400160405280600281526020017f4a430000000000000000000000000000000000000000000000000000000000008152506040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156112c15780820151818401526020810190506112a6565b50505050905001848103835286818154815260200191508054801561130557602002820191906000526020600020905b8154815260200190600101908083116112f1575b5050848103825285818151815260200191508051906020019080838360005b8381101561133f578082015181840152602081019050611324565b50505050905090810190601f16801561136c5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b505050506001600660146101000a81548160ff02191690831515021790555050565b600660149054906101000a900460ff16611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a204d61726b6574206973206e6f74206163746976650081525060200191505060405180910390fd5b600a54611454611d63565b10156114c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a2053746172742074696d65206d75737420706173730081525060200191505060405180910390fd5b6007600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611598576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f47656e4d61726b65743a2055736572206e6f74206f6e2077686974656c69737481525060200191505060405180910390fd5b600482815481106115a557fe5b9060005260206000200154611613826008600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6b90919063ffffffff16565b111561166a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611f2f602a913960400191505060405180910390fd5b6003828154811061167757fe5b90600052602060002001546116a8826009600086815260200190815260200160002054611d6b90919063ffffffff16565b11156116ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061204f6027913960400191505060405180910390fd5b3461172a826002858154811061171157fe5b9060005260206000200154611df390919063ffffffff16565b111561179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a20496e73756666696369656e74207061796d656e740081525060200191505060405180910390fd5b611801816008600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6b90919063ffffffff16565b6008600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061187b816009600085815260200190815260200160002054611d6b90919063ffffffff16565b6009600084815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561191257600080fd5b505afa158015611926573d6000803e3d6000fd5b505050506040513d602081101561193c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611ba05760006060600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b1580156119d457600080fd5b505afa1580156119e8573d6000803e3d6000fd5b505050506040513d60208110156119fe57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16611ada600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639a36f9326040518163ffffffff1660e01b815260040160206040518083038186803b158015611a9057600080fd5b505afa158015611aa4573d6000803e3d6000fd5b505050506040513d6020811015611aba57600080fd5b810190808051906020019092919050505034611e7990919063ffffffff16565b60405180600001905060006040518083038185875af1925050503d8060008114611b20576040519150601f19603f3d011682016040523d82523d6000602084013e611b25565b606091505b509150915081611b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f47656e4d61726b65743a204661696c656420746f2073656e642045746865720081525060200191505060405180910390fd5b50505b6060600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30338686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611c78578082015181840152602081019050611c5d565b50505050905090810190601f168015611ca55780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015611cc857600080fd5b505af1158015611cdc573d6000803e3d6000fd5b50505050505050565b60006040518060400160405280600281526020017f4a4300000000000000000000000000000000000000000000000000000000000081525080519060200120838360405180838380828437808301925050509250505060405180910390201415611d585763f23a6e6160e01b9050611d59565b5b9695505050505050565b600042905090565b600080828401905083811015611de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415611e065760009050611e73565b6000828402905082848281611e1757fe5b0414611e6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061202e6021913960400191505060405180910390fd5b809150505b92915050565b6000808211611ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b818381611ef957fe5b0490509291505056fe47656e4d61726b65743a2057686974656c697374206c657373207468616e2032303020617420612074696d6547656e4d61726b65743a20557365722077696c6c20657863656564207075726368617365206c696d697447656e4d61726b65743a2053746172742074696d6520616c7265616479206f6363757272656447656e4d61726b65743a204f6e6c792063726561746f722063616e207570646174652077686974656c69737447656e4d61726b65743a204f6e6c792063726561746f722063616e207570646174652073746172742074696d6547656e4d61726b65743a204d61726b657420697320616c72656164792061637469766547656e4d61726b65743a204f6e6c79207468652063726561746f722063616e206465706f73697420746865207469636b657473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7747656e4d61726b65743a204e6f7420656e6f756768207469636b6574732072656d61696e696e6747656e4d61726b65743a204e65772073746172742074696d65206d75737420626520696e207468652066757475726547656e4d61726b65743a204f6e6c79207468652063726561746f722063616e20636c61696da2646970667358221220587ad23e600cf9659a27545e6d3b2cfe09cb97ccfe6f36afcc0f80408331ed1464736f6c634300060c0033

Deployed Bytecode Sourcemap

18113:4849:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8294:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18364:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18393:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19347:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18190:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18494:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19244:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18426:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21914:270;;;;;;;;;;;;;:::i;:::-;;18287:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18673:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19732:467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18565:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22678:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;18223:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18325:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18253:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20207:496;;;;;;;;;;;;;:::i;:::-;;20711:1195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22418:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;8294:150;8379:4;8403:20;:33;8424:11;8403:33;;;;;;;;;;;;;;;;;;;;;;;;;;;8396:40;;8294:150;;;:::o;18364:22::-;;;;;;;;;;;;;:::o;18393:26::-;;;;;;;;;;;;;:::o;19347:377::-;19430:7;;;;;;;;;;;19416:21;;:10;:21;;;19408:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19528:9;;19506:19;:17;:19::i;:::-;:31;19498:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19621:9;19599:19;:17;:19::i;:::-;:31;19591:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19707:9;19695;:21;;;;19347:377;:::o;18190:24::-;;;;;;;;;;;;;:::o;18494:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19244:95::-;19290:4;19314:10;:17;;;;19307:24;;19244:95;:::o;18426:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21914:270::-;21973:7;;;;;;;;;;;21959:21;;:10;:21;;;21951:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22036:9;22047:17;22068:10;:15;;22091:21;22068:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22035:82;;;;22136:4;22128:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21914:270;;:::o;18287:31::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18673:38::-;;;;:::o;19732:467::-;19854:7;;;;;;;;;;;19840:21;;:10;:21;;;19832:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19948:3;19929:9;:16;:22;19921:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20018:7;20013:179;20031:3;20029:1;:5;;;20013:179;;;20065:9;:16;20060:1;:21;;;20056:67;;;20102:5;;20056:67;20169:11;20139:9;:13;20149:2;20139:13;;;;;;;;;;;:27;20153:9;20163:1;20153:12;;;;;;;;;;;;;;;;20139:27;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;20036:3;;;;;;;20013:179;;;;19732:467;;;:::o;18565:51::-;;;;;;;;;;;;;;;;;:::o;22678:281::-;22845:6;18755:11;;;;;;;;;;;;;;;;;22887:20;;;;;;22877:5;;22867:16;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;22864:88;;;22930:10;22923:17;;;;;;22864:88;22678:281;;;;;;;;;;;:::o;18223:23::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18325:32::-;;;;;;;;;;;;;:::o;18253:27::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20207:496::-;20268:7;;;;;;;;;;;20254:21;;:10;:21;;;20246:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20351:6;;;;;;;;;;;20350:7;20342:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20410:25;20452:10;:17;;;;20438:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20410:60;;20486:7;20481:74;20503:10;:17;;;;20499:1;:21;;;20481:74;;;20554:1;20540:15;;:8;20549:1;20540:11;;;;;;;;;;;;;;;:15;;;;;20522:3;;;;;;;20481:74;;;;20577:9;;;;;;;;;;;20568:41;;;20610:10;20630:4;20637:8;20647:10;18755:11;;;;;;;;;;;;;;;;;20568:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20691:4;20682:6;;:13;;;;;;;;;;;;;;;;;;20207:496;:::o;20711:1195::-;20790:6;;;;;;;;;;;20782:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20874:9;;20851:19;:17;:19::i;:::-;:32;;20843:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20938:9;:14;20948:3;20938:14;;;;;;;;;;;:26;20953:10;20938:26;;;;;;;;;;;;;;;;;;;;;;;;;20930:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21063:14;21078:3;21063:19;;;;;;;;;;;;;;;;21020:39;21051:7;21020:9;:14;21030:3;21020:14;;;;;;;;;;;:26;21035:10;21020:26;;;;;;;;;;;;;;;;:30;;:39;;;;:::i;:::-;:62;;21012:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21186:10;21197:3;21186:15;;;;;;;;;;;;;;;;21148:34;21174:7;21148:16;:21;21165:3;21148:21;;;;;;;;;;;;:25;;:34;;;;:::i;:::-;:53;;21140:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21292:9;21264:24;21280:7;21264:6;21271:3;21264:11;;;;;;;;;;;;;;;;:15;;:24;;;;:::i;:::-;:37;;21256:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21379:39;21410:7;21379:9;:14;21389:3;21379:14;;;;;;;;;;;:26;21394:10;21379:26;;;;;;;;;;;;;;;;:30;;:39;;;;:::i;:::-;21350:9;:14;21360:3;21350:14;;;;;;;;;;;:26;21365:10;21350:26;;;;;;;;;;;;;;;:68;;;;21453:34;21479:7;21453:16;:21;21470:3;21453:21;;;;;;;;;;;;:25;;:34;;;;:::i;:::-;21429:16;:21;21446:3;21429:21;;;;;;;;;;;:58;;;;21531:1;21504:29;;:7;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;21500:267;;21592:9;21603:17;21624:7;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;;21652:35;21666:7;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21652:9;:13;;:35;;;;:::i;:::-;21624:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21591:101;;;;21715:4;21707:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21500:267;;;21787:17;21824:9;;;;;;;;;;;21815:36;;;21860:4;21867:10;21879:3;21884:7;21893:4;21815:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20711:1195;;;:::o;22418:252::-;22556:6;18755:11;;;;;;;;;;;;;;;;;22598:20;;;;;;22588:5;;22578:16;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;22575:88;;;22641:10;22634:17;;;;;;22575:88;22418:252;;;;;;;;;:::o;22192:162::-;22244:4;22331:15;22324:22;;22192:162;:::o;12303:179::-;12361:7;12381:9;12397:1;12393;:5;12381:17;;12422:1;12417;:6;;12409:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12473:1;12466:8;;;12303:179;;;;:::o;13182:220::-;13240:7;13269:1;13264;:6;13260:20;;;13279:1;13272:8;;;;13260:20;13291:9;13307:1;13303;:5;13291:17;;13336:1;13331;13327;:5;;;;;;:10;13319:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13393:1;13386:8;;;13182:220;;;;;:::o;13880:153::-;13938:7;13970:1;13966;:5;13958:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14024:1;14020;:5;;;;;;14013:12;;13880:153;;;;:::o

Swarm Source

ipfs://587ad23e600cf9659a27545e6d3b2cfe09cb97ccfe6f36afcc0f80408331ed14

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.