ETH Price: $3,341.50 (-1.00%)

Token

dokidoki.momiji (MOMIJI)
 

Overview

Max Total Supply

0 MOMIJI

Holders

1,903

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
tappy.eth
0xC40dF87e16339f21fBB2E59FB38bF2A957A16FfD
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Doki Doki is a permissionless web3 platform that enables the creation of provably-fair NFT Gacha machines, which simplifies the process of launching a randomized NFT sale for projects, artists, and collectors. Visit dokidoki.com to play or create your own NFT Gacha!

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MomijiToken

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-14
*/

pragma solidity ^0.7.0;


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.3._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.3._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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, 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) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * 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);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/*
 * @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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @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);
}


/**
 * @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 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;
    }
}


/**
 * _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);
}


/**
 * @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;
}


/**
 *
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155 {
    using SafeMath for uint256;
    using Address for address;

    // Mapping from token ID to account balances
    mapping (uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping (address => mapping(address => bool)) private _operatorApprovals;

    /*
     *     bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e
     *     bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
     *     bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a
     *     bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6
     *
     *     => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^
     *        0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26
     */
    bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;

    /*
     *     bytes4(keccak256('uri(uint256)')) == 0x0e89341c
     */
    bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;

    constructor () public {
        // register the supported interfaces to conform to ERC1155 via ERC165
        _registerInterface(_INTERFACE_ID_ERC1155);

        // register the supported interfaces to conform to ERC1155MetadataURI via ERC165
        _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    )
        public
        view
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][from] = _balances[id][from].sub(amount, "ERC1155: insufficient balance for transfer");
        _balances[id][to] = _balances[id][to].add(amount);

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            _balances[id][from] = _balances[id][from].sub(
                amount,
                "ERC1155: insufficient balance for transfer"
            );
            _balances[id][to] = _balances[id][to].add(amount);
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] = _balances[id][account].add(amount);
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(address account, uint256 id, uint256 amount) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        _balances[id][account] = _balances[id][account].sub(
            amount,
            "ERC1155: burn amount exceeds balance"
        );

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint i = 0; i < ids.length; i++) {
            _balances[ids[i]][account] = _balances[ids[i]][account].sub(
                amounts[i],
                "ERC1155: burn amount exceeds balance"
            );
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        internal virtual
    { }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

library UintLibrary {
    function toString(uint256 _i) internal pure returns (string memory) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }
}

library StringLibrary {
    using UintLibrary for uint256;

    function append(string memory _a, string memory _b) internal pure returns (string memory) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory bab = new bytes(_ba.length + _bb.length);
        uint k = 0;
        for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i];
        for (uint i = 0; i < _bb.length; i++) bab[k++] = _bb[i];
        return string(bab);
    }

    function append(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory bbb = new bytes(_ba.length + _bb.length + _bc.length);
        uint k = 0;
        for (uint i = 0; i < _ba.length; i++) bbb[k++] = _ba[i];
        for (uint i = 0; i < _bb.length; i++) bbb[k++] = _bb[i];
        for (uint i = 0; i < _bc.length; i++) bbb[k++] = _bc[i];
        return string(bbb);
    }

    function recover(string memory message, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        bytes memory msgBytes = bytes(message);
        bytes memory fullMessage = concat(
            bytes("\x19Ethereum Signed Message:\n"),
            bytes(msgBytes.length.toString()),
            msgBytes,
            new bytes(0), new bytes(0), new bytes(0), new bytes(0)
        );
        return ecrecover(keccak256(fullMessage), v, r, s);
    }

    function concat(bytes memory _ba, bytes memory _bb, bytes memory _bc, bytes memory _bd, bytes memory _be, bytes memory _bf, bytes memory _bg) internal pure returns (bytes memory) {
        bytes memory resultBytes = new bytes(_ba.length + _bb.length + _bc.length + _bd.length + _be.length + _bf.length + _bg.length);
        uint k = 0;
        for (uint i = 0; i < _ba.length; i++) resultBytes[k++] = _ba[i];
        for (uint i = 0; i < _bb.length; i++) resultBytes[k++] = _bb[i];
        for (uint i = 0; i < _bc.length; i++) resultBytes[k++] = _bc[i];
        for (uint i = 0; i < _bd.length; i++) resultBytes[k++] = _bd[i];
        for (uint i = 0; i < _be.length; i++) resultBytes[k++] = _be[i];
        for (uint i = 0; i < _bf.length; i++) resultBytes[k++] = _bf[i];
        for (uint i = 0; i < _bg.length; i++) resultBytes[k++] = _bg[i];
        return resultBytes;
    }
}

contract TokenURI {
    using StringLibrary for string;

    string public tokenBaseURI;
    mapping (uint256 => string) private _tokenURIs;

    constructor(string memory uri) {
        tokenBaseURI = uri;
    }

    function _setBaseURI(string memory uri) internal {
        tokenBaseURI = uri;
    }

    function _tokenURI(uint256 tokenId) internal view returns (string memory) {
        return tokenBaseURI.append(_tokenURIs[tokenId]);
    }

    function _setTokenURI(uint256 tokenId, string memory uri) internal {
        bytes memory tokenUri = bytes(_tokenURIs[tokenId]);
        require(tokenUri.length == 0, "Uri has existed.");
        _tokenURIs[tokenId] = uri;
    }

    function _clearTokenURI(uint256 tokenId) internal {
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

/**
 * @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 () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(address account, uint256 id, uint256 value) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

contract MomijiToken is ERC1155, TokenURI, ERC1155Burnable, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string public name;
    string public symbol;

    // Count of duplication of every token.
    mapping(uint256 => uint256) public tokenQuantityWithId;
    mapping(uint256 => uint256) public tokenMaxQuantityWithId;
    mapping(uint256 => uint256) public mintManuallyQuantityWithId;

    mapping(uint256 => address) public creators;
    mapping(uint256 => mapping(address => bool)) public minters;
    uint256 [] public tokenIds;
    uint256 public tokenIdAmount;

    bool public onlyWhitelist = true;
    mapping(address => bool) public whitelist;

    event Create(uint256 maxSupply, uint256 tokenId, string indexed uri, bytes indexed data);
    event Mint(uint256 tokenId, address to, uint256 quantity, bytes indexed data, uint256 tokenMaxQuantity, uint256 tokenCurrentQuantity);

    constructor(string memory tokenName, string memory tokenSymbol, string memory baseUri) TokenURI(baseUri) {
        name = tokenName;
        symbol = tokenSymbol;
    }

    function setBaseURI(string memory baseUri) public onlyOwner {
        _setBaseURI(baseUri);
    }

    /**
      @dev create a new NFT token.
      @param maxSupply max supply allow
     */
    function create(uint256 tokenId, uint256 maxSupply, string memory uri, bytes calldata data) external {
        if (onlyWhitelist) {
            require(whitelist[msg.sender], "Open to only whitelist.");
        }
        tokenQuantityWithId[tokenId] = 0;
        tokenMaxQuantityWithId[tokenId] = maxSupply;
        tokenIds.push(tokenId);
        tokenIdAmount = tokenIdAmount.add(1);
        _setTokenURI(tokenId, uri);
        creators[tokenId] = msg.sender;
        mintManuallyQuantityWithId[tokenId] = maxSupply;
        emit Create(maxSupply, tokenId, uri, data);
    }

    function mint(uint256 tokenId, address to, uint256 quantity, bytes memory data) public {
        require(creators[tokenId] == msg.sender || minters[tokenId][msg.sender], "You are not the creator or minter of this NFT.");
        require(_isTokenIdExist(tokenId), "Token is is not exist.");
        require(tokenMaxQuantityWithId[tokenId] >= tokenQuantityWithId[tokenId] + quantity, "NFT quantity is greater than max supply.");
        if (!address(msg.sender).isContract()) {
            require(mintManuallyQuantityWithId[tokenId] >= quantity, "You mint too many cards manually" );
            mintManuallyQuantityWithId[tokenId] = mintManuallyQuantityWithId[tokenId].sub(quantity);
        }
        _mint(to, tokenId, quantity, data);
        tokenQuantityWithId[tokenId] = tokenQuantityWithId[tokenId].add(quantity);
        emit Mint(tokenId, to, quantity, data, tokenMaxQuantityWithId[tokenId], tokenQuantityWithId[tokenId]);
    }

    function uri(uint256 id) public view returns(string memory) {
        return _tokenURI(id);
    }

    function _isTokenIdExist(uint256 tokenId) private view returns(bool) {
        return creators[tokenId] != address(0);
    }

    function addMintManuallyQuantity(uint256 tokenId, uint256 amount) public {
        require(creators[tokenId] == msg.sender || minters[tokenId][msg.sender], "You are not the creator or minter of this NFT.");
        mintManuallyQuantityWithId[tokenId] = mintManuallyQuantityWithId[tokenId].add(amount);
    }

    function removeMintManuallyQuantity(uint256 tokenId, uint256 amount) public {
        require(creators[tokenId] == msg.sender || minters[tokenId][msg.sender], "You are not the creator or minter of this NFT.");
        mintManuallyQuantityWithId[tokenId] = mintManuallyQuantityWithId[tokenId].sub(amount);
    }

    function addToWhitelist(address account) public onlyOwner {
        whitelist[account] = true;
    }

    function removeFromWhitelist(address account) public onlyOwner {
        whitelist[account] = false;
    }

    function openToEveryone() public onlyOwner {
        onlyWhitelist = false;
    }

    function openOnlyToWhitelist() public onlyOwner {
        onlyWhitelist = true;
    }

    function addMinter(uint256 id, address account) public onlyCreator(id) {
        minters[id][account] = true;
    }

    function removeMinter(uint256 id, address account) public onlyCreator(id) {
        minters[id][account] = false;
    }

    function transferCreator(uint256 id, address account) public onlyCreator(id) {
        creators[id] = account;
    }

    modifier onlyCreator(uint256 id) {
        require(msg.sender == creators[id], "only for creator of this NFT.");
        _;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"string","name":"baseUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"string","name":"uri","type":"string"},{"indexed":true,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Create","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":true,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"tokenMaxQuantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenCurrentQuantity","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addMintManuallyQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintManuallyQuantityWithId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openOnlyToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openToEveryone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeMintManuallyQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenMaxQuantityWithId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenQuantityWithId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"transferCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526001600f60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162005a9938038062005a99833981810160405260608110156200005257600080fd5b81019080805160405193929190846401000000008211156200007357600080fd5b838201915060208201858111156200008a57600080fd5b8251866001820283011164010000000082111715620000a857600080fd5b8083526020830192505050908051906020019080838360005b83811015620000de578082015181840152602081019050620000c1565b50505050905090810190601f1680156200010c5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013057600080fd5b838201915060208201858111156200014757600080fd5b82518660018202830111640100000000821117156200016557600080fd5b8083526020830192505050908051906020019080838360005b838110156200019b5780820151818401526020810190506200017e565b50505050905090810190601f168015620001c95780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001ed57600080fd5b838201915060208201858111156200020457600080fd5b82518660018202830111640100000000821117156200022257600080fd5b8083526020830192505050908051906020019080838360005b83811015620002585780820151818401526020810190506200023b565b50505050905090810190601f168015620002865780820380516001836020036101000a031916815260200191505b5060405250505080620002a66301ffc9a760e01b620003dc60201b60201c565b620002be63d9b67a2660e01b620003dc60201b60201c565b620002d6630e89341c60e01b620003dc60201b60201c565b8060039080519060200190620002ee929190620004ed565b5050600062000302620004e560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508260069080519060200190620003b9929190620004ed565b508160079080519060200190620003d2929190620004ed565b50505050620005a3565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000525576000855562000571565b82601f106200054057805160ff191683800117855562000571565b8280016001018555821562000571579182015b828111156200057057825182559160200191906001019062000553565b5b50905062000580919062000584565b5090565b5b808211156200059f57600081600090555060010162000585565b5090565b6154e680620005b36000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063903f95dc11610130578063cd53d08e116100b8578063e942bdd21161007c578063e942bdd21461119a578063e985e9c5146111fe578063f242432a14611278578063f2fde38b14611387578063f5298aca146113cb57610226565b8063cd53d08e1461102c578063d4b40b0614611084578063d58778d6146110c6578063d70b01c114611108578063e43252d71461115657610226565b8063a87787a7116100ff578063a87787a714610db7578063a88e099614610def578063ad2396e314610e0f578063b09ddf7b14610e19578063c77b66c214610f3d57610226565b8063903f95dc14610c8057806395d89b4114610c8a5780639b19251a14610d0d578063a22cb46514610d6757610226565b80634e99b800116101b3578063715018a611610182578063715018a614610b6e578063890ffd4014610b785780638ab1d68114610bc65780638cf5d36f14610c0a5780638da5cb5b14610c4c57610226565b80634e99b8001461088257806355f804b3146109055780635a26734c146109c05780636b20c45414610a0257610226565b80631cc9bb21116101fa5780631cc9bb211461041a5780632eb2c2d6146104685780633187c4591461068b5780633e3d92d3146106a95780634e1273f4146106e157610226565b8062fdd58e1461022b57806301ffc9a71461028d57806306fdde03146102f05780630e89341c14610373575b600080fd5b6102776004803603604081101561024157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611423565b6040518082815260200191505060405180910390f35b6102d8600480360360208110156102a357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611503565b60405180821515815260200191505060405180910390f35b6102f861156a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033857808201518184015260208101905061031d565b50505050905090810190601f1680156103655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61039f6004803603602081101561038957600080fd5b8101908080359060200190929190505050611608565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103df5780820151818401526020810190506103c4565b50505050905090810190601f16801561040c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104666004803603604081101561043057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061161a565b005b610689600480360360a081101561047e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104db57600080fd5b8201836020820111156104ed57600080fd5b8035906020019184602083028401116401000000008311171561050f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460208302840111640100000000831117156105a357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561060357600080fd5b82018360208201111561061557600080fd5b8035906020019184600183028401116401000000008311171561063757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611746565b005b610693611bd1565b6040518082815260200191505060405180910390f35b6106df600480360360408110156106bf57600080fd5b810190808035906020019092919080359060200190929190505050611bd7565b005b61082b600480360360408110156106f757600080fd5b810190808035906020019064010000000081111561071457600080fd5b82018360208201111561072657600080fd5b8035906020019184602083028401116401000000008311171561074857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107a857600080fd5b8201836020820111156107ba57600080fd5b803590602001918460208302840111640100000000831117156107dc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611d34565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561086e578082015181840152602081019050610853565b505050509050019250505060405180910390f35b61088a611f26565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108ca5780820151818401526020810190506108af565b50505050905090810190601f1680156108f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109be6004803603602081101561091b57600080fd5b810190808035906020019064010000000081111561093857600080fd5b82018360208201111561094a57600080fd5b8035906020019184600183028401116401000000008311171561096c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611fc4565b005b6109ec600480360360208110156109d657600080fd5b810190808035906020019092919050505061209a565b6040518082815260200191505060405180910390f35b610b6c60048036036060811015610a1857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610a5557600080fd5b820183602082011115610a6757600080fd5b80359060200191846020830284011164010000000083111715610a8957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ae957600080fd5b820183602082011115610afb57600080fd5b80359060200191846020830284011164010000000083111715610b1d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506120b2565b005b610b76612165565b005b610bc460048036036040811015610b8e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122f0565b005b610c0860048036036020811015610bdc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612433565b005b610c3660048036036020811015610c2057600080fd5b8101908080359060200190929190505050612558565b6040518082815260200191505060405180910390f35b610c54612570565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c8861259a565b005b610c92612681565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd2578082015181840152602081019050610cb7565b50505050905090810190601f168015610cff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d4f60048036036020811015610d2357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061271f565b60405180821515815260200191505060405180910390f35b610db560048036036040811015610d7d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061273f565b005b610ded60048036036040811015610dcd57600080fd5b8101908080359060200190929190803590602001909291905050506128d8565b005b610df7612a35565b60405180821515815260200191505060405180910390f35b610e17612a48565b005b610f3b60048036036080811015610e2f57600080fd5b81019080803590602001909291908035906020019092919080359060200190640100000000811115610e6057600080fd5b820183602082011115610e7257600080fd5b80359060200191846001830284011164010000000083111715610e9457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ef757600080fd5b820183602082011115610f0957600080fd5b80359060200191846001830284011164010000000083111715610f2b57600080fd5b9091929391929390505050612b2f565b005b61102a60048036036080811015610f5357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fa457600080fd5b820183602082011115610fb657600080fd5b80359060200191846001830284011164010000000083111715610fd857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612db4565b005b6110586004803603602081101561104257600080fd5b81019080803590602001909291905050506131f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110b06004803603602081101561109a57600080fd5b810190808035906020019092919050505061322c565b6040518082815260200191505060405180910390f35b6110f2600480360360208110156110dc57600080fd5b8101908080359060200190929190505050613244565b6040518082815260200191505060405180910390f35b6111546004803603604081101561111e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613268565b005b6111986004803603602081101561116c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133ab565b005b6111e6600480360360408110156111b057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134d0565b60405180821515815260200191505060405180910390f35b6112606004803603604081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134ff565b60405180821515815260200191505060405180910390f35b611385600480360360a081101561128e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156112ff57600080fd5b82018360208201111561131157600080fd5b8035906020019184600183028401116401000000008311171561133357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613593565b005b6113c96004803603602081101561139d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613908565b005b611421600480360360608110156113e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613b18565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061524d602b913960400191505060405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b505050505081565b606061161382613bcb565b9050919050565b81600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f6e6c7920666f722063726561746f72206f662074686973204e46542e00000081525060200191505060405180910390fd5b81600b600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b81518351146117a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806154406028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061531c6025913960400191505060405180910390fd5b61182e613d2c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061187457506118738561186e613d2c565b6134ff565b5b6118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806153416032913960400191505060405180910390fd5b60006118d3613d2c565b90506118e3818787878787613d34565b60005b8451811015611ab45760008582815181106118fd57fe5b60200260200101519050600085838151811061191557fe5b6020026020010151905061199c816040518060600160405280602a81526020016153c4602a91396001600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d3c9092919063ffffffff16565b6001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a53816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfc90919063ffffffff16565b6001600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050508060010190506118e6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611b64578082015181840152602081019050611b49565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611ba6578082015181840152602081019050611b8b565b5050505090500194505050505060405180910390a4611bc9818787878787613e84565b505050505050565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611c9e5750600c600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615396602e913960400191505060405180910390fd5b611d1981600a600085815260200190815260200160002054613dfc90919063ffffffff16565b600a6000848152602001908152602001600020819055505050565b60608151835114611d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154176029913960400191505060405180910390fd5b6060835167ffffffffffffffff81118015611daa57600080fd5b50604051908082528060200260200182016040528015611dd95781602001602082028036833780820191505090505b50905060005b8451811015611f1b57600073ffffffffffffffffffffffffffffffffffffffff16858281518110611e0c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611e81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806152786031913960400191505060405180910390fd5b60016000858381518110611e9157fe5b602002602001015181526020019081526020016000206000868381518110611eb557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611f0457fe5b602002602001018181525050806001019050611ddf565b508091505092915050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fbc5780601f10611f9157610100808354040283529160200191611fbc565b820191906000526020600020905b815481529060010190602001808311611f9f57829003601f168201915b505050505081565b611fcc613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461208e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61209781614213565b50565b60086020528060005260406000206000915090505481565b6120ba613d2c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061210057506120ff836120fa613d2c565b6134ff565b5b612155576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152f36029913960400191505060405180910390fd5b61216083838361422d565b505050565b61216d613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b81600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f6e6c7920666f722063726561746f72206f662074686973204e46542e00000081525060200191505060405180910390fd5b6000600c600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b61243b613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915090505481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6125a2613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612664576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127175780601f106126ec57610100808354040283529160200191612717565b820191906000526020600020905b8154815290600101906020018083116126fa57829003601f168201915b505050505081565b60106020528060005260406000206000915054906101000a900460ff1681565b8173ffffffffffffffffffffffffffffffffffffffff1661275e613d2c565b73ffffffffffffffffffffffffffffffffffffffff1614156127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153ee6029913960400191505060405180910390fd5b80600260006127d8613d2c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612885613d2c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061299f5750600c600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6129f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615396602e913960400191505060405180910390fd5b612a1a81600a60008581526020019081526020016000205461456890919063ffffffff16565b600a6000848152602001908152602001600020819055505050565b600f60009054906101000a900460ff1681565b612a50613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550565b600f60009054906101000a900460ff1615612c0457601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f70656e20746f206f6e6c792077686974656c6973742e00000000000000000081525060200191505060405180910390fd5b5b60006008600087815260200190815260200160002081905550836009600087815260200190815260200160002081905550600d859080600181540180825580915050600190039060005260206000200160009091909190915055612c746001600e54613dfc90919063ffffffff16565b600e81905550612c8485846145b2565b33600b600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60008781526020019081526020016000208190555081816040518083838082843780830192505050925050506040518091039020836040518082805190602001908083835b60208310612d415780518252602082019150602081019050602083039250612d1e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f5e46762da9d370544623d7281bdab65845cf5c0904f6e100ad68187786a852488688604051808381526020018281526020019250505060405180910390a35050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600b600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612e7b5750600c600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615396602e913960400191505060405180910390fd5b612ed984614706565b612f4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f546f6b656e206973206973206e6f742065786973742e0000000000000000000081525060200191505060405180910390fd5b8160086000868152602001908152602001600020540160096000868152602001908152602001600020541015612fcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806154896028913960400191505060405180910390fd5b612feb3373ffffffffffffffffffffffffffffffffffffffff16614772565b6130b65781600a6000868152602001908152602001600020541015613078576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f596f75206d696e7420746f6f206d616e79206361726473206d616e75616c6c7981525060200191505060405180910390fd5b61309e82600a60008781526020019081526020016000205461456890919063ffffffff16565b600a6000868152602001908152602001600020819055505b6130c283858484614785565b6130e8826008600087815260200190815260200160002054613dfc90919063ffffffff16565b6008600086815260200190815260200160002081905550806040518082805190602001908083835b602083106131335780518252602082019150602081019050602083039250613110565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f352ed921c31b731ecb4b1dc63edaced62e46df7225b8ff4010aced433982d02e858585600960008a815260200190815260200160002054600860008b815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390a250505050565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b600d818154811061325457600080fd5b906000526020600020016000915090505481565b81600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461333d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f6e6c7920666f722063726561746f72206f662074686973204e46542e00000081525060200191505060405180910390fd5b6001600c600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6133b3613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613475576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061531c6025913960400191505060405180910390fd5b613621613d2c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480613667575061366685613661613d2c565b6134ff565b5b6136bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152f36029913960400191505060405180910390fd5b60006136c6613d2c565b90506136e68187876136d788614988565b6136e088614988565b87613d34565b613763836040518060600160405280602a81526020016153c4602a91396001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d3c9092919063ffffffff16565b6001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381a836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfc90919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a46139008187878787876149f8565b505050505050565b613910613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613a58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806152a96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613b20613d2c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480613b665750613b6583613b60613d2c565b6134ff565b5b613bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152f36029913960400191505060405180910390fd5b613bc6838383614d05565b505050565b6060613d25600460008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613c775780601f10613c4c57610100808354040283529160200191613c77565b820191906000526020600020905b815481529060010190602001808311613c5a57829003601f168201915b505050505060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613d125780601f10613ce757610100808354040283529160200191613d12565b820191906000526020600020905b815481529060010190602001808311613cf557829003601f168201915b5050505050614f2190919063ffffffff16565b9050919050565b600033905090565b505050505050565b6000838311158290613de9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dae578082015181840152602081019050613d93565b50505050905090810190601f168015613ddb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613ea38473ffffffffffffffffffffffffffffffffffffffff16614772565b1561420b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015613f5b578082015181840152602081019050613f40565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015613f9d578082015181840152602081019050613f82565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613fdc578082015181840152602081019050613fc1565b50505050905090810190601f1680156140095780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561402e57600080fd5b505af192505050801561406257506040513d602081101561404e57600080fd5b810190808051906020019092919050505060015b61416c5761406e61513a565b80614079575061411b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140e05780820151818401526020810190506140c5565b50505050905090810190601f16801561410d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806151f16034913960400191505060405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614614209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806152256028913960400191505060405180910390fd5b505b505050505050565b8060039080519060200190614229929190615071565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156142b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153736023913960400191505060405180910390fd5b805182511461430d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806154406028913960400191505060405180910390fd5b6000614317613d2c565b905061433781856000868660405180602001604052806000815250613d34565b60005b835181101561445a576143e683828151811061435257fe5b60200260200101516040518060600160405280602481526020016152cf602491396001600088868151811061438357fe5b6020026020010151815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d3c9092919063ffffffff16565b600160008684815181106143f657fe5b6020026020010151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808060010191505061433a565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561450b5780820151818401526020810190506144f0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561454d578082015181840152602081019050614532565b5050505090500194505050505060405180910390a450505050565b60006145aa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d3c565b905092915050565b6060600460008481526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561465b5780601f106146305761010080835404028352916020019161465b565b820191906000526020600020905b81548152906001019060200180831161463e57829003601f168201915b5050505050905060008151146146d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5572692068617320657869737465642e0000000000000000000000000000000081525060200191505060405180910390fd5b81600460008581526020019081526020016000209080519060200190614700929190615071565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561480b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154686021913960400191505060405180910390fd5b6000614815613d2c565b90506148368160008761482788614988565b61483088614988565b87613d34565b614899836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfc90919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4614981816000878787876149f8565b5050505050565b606080600167ffffffffffffffff811180156149a357600080fd5b506040519080825280602002602001820160405280156149d25781602001602082028036833780820191505090505b50905082816000815181106149e357fe5b60200260200101818152505080915050919050565b614a178473ffffffffffffffffffffffffffffffffffffffff16614772565b15614cfd578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614ad0578082015181840152602081019050614ab5565b50505050905090810190601f168015614afd5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015614b2057600080fd5b505af1925050508015614b5457506040513d6020811015614b4057600080fd5b810190808051906020019092919050505060015b614c5e57614b6061513a565b80614b6b5750614c0d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bd2578082015181840152602081019050614bb7565b50505050905090810190601f168015614bff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806151f16034913960400191505060405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614614cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806152256028913960400191505060405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614d8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153736023913960400191505060405180910390fd5b6000614d95613d2c565b9050614dc581856000614da787614988565b614db087614988565b60405180602001604052806000815250613d34565b614e42826040518060600160405280602481526020016152cf602491396001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d3c9092919063ffffffff16565b6001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a450505050565b60608083905060608390506060815183510167ffffffffffffffff81118015614f4957600080fd5b506040519080825280601f01601f191660200182016040528015614f7c5781602001600182028036833780820191505090505b5090506000805b8451811015614ff157848181518110614f9857fe5b602001015160f81c60f81b838380600101945081518110614fb557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050614f83565b5060005b83518110156150635783818151811061500a57fe5b602001015160f81c60f81b83838060010194508151811061502757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050614ff5565b508194505050505092915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826150a757600085556150ee565b82601f106150c057805160ff19168380011785556150ee565b828001600101855582156150ee579182015b828111156150ed5782518255916020019190600101906150d2565b5b5090506150fb91906150ff565b5090565b5b80821115615118576000816000905550600101615100565b5090565b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d101561514a576151ed565b60046000803e61515b60005161512d565b6308c379a0811461516c57506151ed565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715615198575050506151ed565b808201805167ffffffffffffffff8111156151b75750505050506151ed565b8060208301013d85018111156151d2575050505050506151ed565b6151db8261511c565b60208401016040528296505050505050505b9056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373596f7520617265206e6f74207468652063726561746f72206f72206d696e746572206f662074686973204e46542e455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f20616464726573734e4654207175616e746974792069732067726561746572207468616e206d617820737570706c792ea2646970667358221220549fdf8c5424081eaeeb8dd7f32f3a0fa117a502f6831445260abb16eba475d264736f6c63430007040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f646f6b69646f6b692e6d6f6d696a69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d4f4d494a4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102265760003560e01c8063903f95dc11610130578063cd53d08e116100b8578063e942bdd21161007c578063e942bdd21461119a578063e985e9c5146111fe578063f242432a14611278578063f2fde38b14611387578063f5298aca146113cb57610226565b8063cd53d08e1461102c578063d4b40b0614611084578063d58778d6146110c6578063d70b01c114611108578063e43252d71461115657610226565b8063a87787a7116100ff578063a87787a714610db7578063a88e099614610def578063ad2396e314610e0f578063b09ddf7b14610e19578063c77b66c214610f3d57610226565b8063903f95dc14610c8057806395d89b4114610c8a5780639b19251a14610d0d578063a22cb46514610d6757610226565b80634e99b800116101b3578063715018a611610182578063715018a614610b6e578063890ffd4014610b785780638ab1d68114610bc65780638cf5d36f14610c0a5780638da5cb5b14610c4c57610226565b80634e99b8001461088257806355f804b3146109055780635a26734c146109c05780636b20c45414610a0257610226565b80631cc9bb21116101fa5780631cc9bb211461041a5780632eb2c2d6146104685780633187c4591461068b5780633e3d92d3146106a95780634e1273f4146106e157610226565b8062fdd58e1461022b57806301ffc9a71461028d57806306fdde03146102f05780630e89341c14610373575b600080fd5b6102776004803603604081101561024157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611423565b6040518082815260200191505060405180910390f35b6102d8600480360360208110156102a357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611503565b60405180821515815260200191505060405180910390f35b6102f861156a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033857808201518184015260208101905061031d565b50505050905090810190601f1680156103655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61039f6004803603602081101561038957600080fd5b8101908080359060200190929190505050611608565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103df5780820151818401526020810190506103c4565b50505050905090810190601f16801561040c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104666004803603604081101561043057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061161a565b005b610689600480360360a081101561047e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104db57600080fd5b8201836020820111156104ed57600080fd5b8035906020019184602083028401116401000000008311171561050f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460208302840111640100000000831117156105a357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561060357600080fd5b82018360208201111561061557600080fd5b8035906020019184600183028401116401000000008311171561063757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611746565b005b610693611bd1565b6040518082815260200191505060405180910390f35b6106df600480360360408110156106bf57600080fd5b810190808035906020019092919080359060200190929190505050611bd7565b005b61082b600480360360408110156106f757600080fd5b810190808035906020019064010000000081111561071457600080fd5b82018360208201111561072657600080fd5b8035906020019184602083028401116401000000008311171561074857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107a857600080fd5b8201836020820111156107ba57600080fd5b803590602001918460208302840111640100000000831117156107dc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611d34565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561086e578082015181840152602081019050610853565b505050509050019250505060405180910390f35b61088a611f26565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108ca5780820151818401526020810190506108af565b50505050905090810190601f1680156108f75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109be6004803603602081101561091b57600080fd5b810190808035906020019064010000000081111561093857600080fd5b82018360208201111561094a57600080fd5b8035906020019184600183028401116401000000008311171561096c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611fc4565b005b6109ec600480360360208110156109d657600080fd5b810190808035906020019092919050505061209a565b6040518082815260200191505060405180910390f35b610b6c60048036036060811015610a1857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610a5557600080fd5b820183602082011115610a6757600080fd5b80359060200191846020830284011164010000000083111715610a8957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ae957600080fd5b820183602082011115610afb57600080fd5b80359060200191846020830284011164010000000083111715610b1d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506120b2565b005b610b76612165565b005b610bc460048036036040811015610b8e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122f0565b005b610c0860048036036020811015610bdc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612433565b005b610c3660048036036020811015610c2057600080fd5b8101908080359060200190929190505050612558565b6040518082815260200191505060405180910390f35b610c54612570565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c8861259a565b005b610c92612681565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd2578082015181840152602081019050610cb7565b50505050905090810190601f168015610cff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d4f60048036036020811015610d2357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061271f565b60405180821515815260200191505060405180910390f35b610db560048036036040811015610d7d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061273f565b005b610ded60048036036040811015610dcd57600080fd5b8101908080359060200190929190803590602001909291905050506128d8565b005b610df7612a35565b60405180821515815260200191505060405180910390f35b610e17612a48565b005b610f3b60048036036080811015610e2f57600080fd5b81019080803590602001909291908035906020019092919080359060200190640100000000811115610e6057600080fd5b820183602082011115610e7257600080fd5b80359060200191846001830284011164010000000083111715610e9457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ef757600080fd5b820183602082011115610f0957600080fd5b80359060200191846001830284011164010000000083111715610f2b57600080fd5b9091929391929390505050612b2f565b005b61102a60048036036080811015610f5357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610fa457600080fd5b820183602082011115610fb657600080fd5b80359060200191846001830284011164010000000083111715610fd857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612db4565b005b6110586004803603602081101561104257600080fd5b81019080803590602001909291905050506131f9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110b06004803603602081101561109a57600080fd5b810190808035906020019092919050505061322c565b6040518082815260200191505060405180910390f35b6110f2600480360360208110156110dc57600080fd5b8101908080359060200190929190505050613244565b6040518082815260200191505060405180910390f35b6111546004803603604081101561111e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613268565b005b6111986004803603602081101561116c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133ab565b005b6111e6600480360360408110156111b057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134d0565b60405180821515815260200191505060405180910390f35b6112606004803603604081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134ff565b60405180821515815260200191505060405180910390f35b611385600480360360a081101561128e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156112ff57600080fd5b82018360208201111561131157600080fd5b8035906020019184600183028401116401000000008311171561133357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613593565b005b6113c96004803603602081101561139d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613908565b005b611421600480360360608110156113e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613b18565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061524d602b913960400191505060405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116005780601f106115d557610100808354040283529160200191611600565b820191906000526020600020905b8154815290600101906020018083116115e357829003601f168201915b505050505081565b606061161382613bcb565b9050919050565b81600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f6e6c7920666f722063726561746f72206f662074686973204e46542e00000081525060200191505060405180910390fd5b81600b600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b81518351146117a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806154406028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061531c6025913960400191505060405180910390fd5b61182e613d2c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061187457506118738561186e613d2c565b6134ff565b5b6118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806153416032913960400191505060405180910390fd5b60006118d3613d2c565b90506118e3818787878787613d34565b60005b8451811015611ab45760008582815181106118fd57fe5b60200260200101519050600085838151811061191557fe5b6020026020010151905061199c816040518060600160405280602a81526020016153c4602a91396001600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d3c9092919063ffffffff16565b6001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a53816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfc90919063ffffffff16565b6001600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050508060010190506118e6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611b64578082015181840152602081019050611b49565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611ba6578082015181840152602081019050611b8b565b5050505090500194505050505060405180910390a4611bc9818787878787613e84565b505050505050565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611c9e5750600c600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615396602e913960400191505060405180910390fd5b611d1981600a600085815260200190815260200160002054613dfc90919063ffffffff16565b600a6000848152602001908152602001600020819055505050565b60608151835114611d90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154176029913960400191505060405180910390fd5b6060835167ffffffffffffffff81118015611daa57600080fd5b50604051908082528060200260200182016040528015611dd95781602001602082028036833780820191505090505b50905060005b8451811015611f1b57600073ffffffffffffffffffffffffffffffffffffffff16858281518110611e0c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611e81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806152786031913960400191505060405180910390fd5b60016000858381518110611e9157fe5b602002602001015181526020019081526020016000206000868381518110611eb557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611f0457fe5b602002602001018181525050806001019050611ddf565b508091505092915050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fbc5780601f10611f9157610100808354040283529160200191611fbc565b820191906000526020600020905b815481529060010190602001808311611f9f57829003601f168201915b505050505081565b611fcc613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461208e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61209781614213565b50565b60086020528060005260406000206000915090505481565b6120ba613d2c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061210057506120ff836120fa613d2c565b6134ff565b5b612155576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152f36029913960400191505060405180910390fd5b61216083838361422d565b505050565b61216d613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461222f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b81600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f6e6c7920666f722063726561746f72206f662074686973204e46542e00000081525060200191505060405180910390fd5b6000600c600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b61243b613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60096020528060005260406000206000915090505481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6125a2613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612664576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127175780601f106126ec57610100808354040283529160200191612717565b820191906000526020600020905b8154815290600101906020018083116126fa57829003601f168201915b505050505081565b60106020528060005260406000206000915054906101000a900460ff1681565b8173ffffffffffffffffffffffffffffffffffffffff1661275e613d2c565b73ffffffffffffffffffffffffffffffffffffffff1614156127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153ee6029913960400191505060405180910390fd5b80600260006127d8613d2c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612885613d2c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061299f5750600c600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6129f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615396602e913960400191505060405180910390fd5b612a1a81600a60008581526020019081526020016000205461456890919063ffffffff16565b600a6000848152602001908152602001600020819055505050565b600f60009054906101000a900460ff1681565b612a50613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550565b600f60009054906101000a900460ff1615612c0457601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4f70656e20746f206f6e6c792077686974656c6973742e00000000000000000081525060200191505060405180910390fd5b5b60006008600087815260200190815260200160002081905550836009600087815260200190815260200160002081905550600d859080600181540180825580915050600190039060005260206000200160009091909190915055612c746001600e54613dfc90919063ffffffff16565b600e81905550612c8485846145b2565b33600b600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600a60008781526020019081526020016000208190555081816040518083838082843780830192505050925050506040518091039020836040518082805190602001908083835b60208310612d415780518252602082019150602081019050602083039250612d1e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f5e46762da9d370544623d7281bdab65845cf5c0904f6e100ad68187786a852488688604051808381526020018281526020019250505060405180910390a35050505050565b3373ffffffffffffffffffffffffffffffffffffffff16600b600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612e7b5750600c600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615396602e913960400191505060405180910390fd5b612ed984614706565b612f4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f546f6b656e206973206973206e6f742065786973742e0000000000000000000081525060200191505060405180910390fd5b8160086000868152602001908152602001600020540160096000868152602001908152602001600020541015612fcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806154896028913960400191505060405180910390fd5b612feb3373ffffffffffffffffffffffffffffffffffffffff16614772565b6130b65781600a6000868152602001908152602001600020541015613078576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f596f75206d696e7420746f6f206d616e79206361726473206d616e75616c6c7981525060200191505060405180910390fd5b61309e82600a60008781526020019081526020016000205461456890919063ffffffff16565b600a6000868152602001908152602001600020819055505b6130c283858484614785565b6130e8826008600087815260200190815260200160002054613dfc90919063ffffffff16565b6008600086815260200190815260200160002081905550806040518082805190602001908083835b602083106131335780518252602082019150602081019050602083039250613110565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f352ed921c31b731ecb4b1dc63edaced62e46df7225b8ff4010aced433982d02e858585600960008a815260200190815260200160002054600860008b815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390a250505050565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b600d818154811061325457600080fd5b906000526020600020016000915090505481565b81600b600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461333d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6f6e6c7920666f722063726561746f72206f662074686973204e46542e00000081525060200191505060405180910390fd5b6001600c600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6133b3613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613475576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061531c6025913960400191505060405180910390fd5b613621613d2c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480613667575061366685613661613d2c565b6134ff565b5b6136bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152f36029913960400191505060405180910390fd5b60006136c6613d2c565b90506136e68187876136d788614988565b6136e088614988565b87613d34565b613763836040518060600160405280602a81526020016153c4602a91396001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d3c9092919063ffffffff16565b6001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381a836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfc90919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a46139008187878787876149f8565b505050505050565b613910613d2c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613a58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806152a96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613b20613d2c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480613b665750613b6583613b60613d2c565b6134ff565b5b613bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806152f36029913960400191505060405180910390fd5b613bc6838383614d05565b505050565b6060613d25600460008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613c775780601f10613c4c57610100808354040283529160200191613c77565b820191906000526020600020905b815481529060010190602001808311613c5a57829003601f168201915b505050505060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613d125780601f10613ce757610100808354040283529160200191613d12565b820191906000526020600020905b815481529060010190602001808311613cf557829003601f168201915b5050505050614f2190919063ffffffff16565b9050919050565b600033905090565b505050505050565b6000838311158290613de9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dae578082015181840152602081019050613d93565b50505050905090810190601f168015613ddb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015613e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613ea38473ffffffffffffffffffffffffffffffffffffffff16614772565b1561420b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015613f5b578082015181840152602081019050613f40565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015613f9d578082015181840152602081019050613f82565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613fdc578082015181840152602081019050613fc1565b50505050905090810190601f1680156140095780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561402e57600080fd5b505af192505050801561406257506040513d602081101561404e57600080fd5b810190808051906020019092919050505060015b61416c5761406e61513a565b80614079575061411b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140e05780820151818401526020810190506140c5565b50505050905090810190601f16801561410d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806151f16034913960400191505060405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614614209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806152256028913960400191505060405180910390fd5b505b505050505050565b8060039080519060200190614229929190615071565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156142b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153736023913960400191505060405180910390fd5b805182511461430d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806154406028913960400191505060405180910390fd5b6000614317613d2c565b905061433781856000868660405180602001604052806000815250613d34565b60005b835181101561445a576143e683828151811061435257fe5b60200260200101516040518060600160405280602481526020016152cf602491396001600088868151811061438357fe5b6020026020010151815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d3c9092919063ffffffff16565b600160008684815181106143f657fe5b6020026020010151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808060010191505061433a565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561450b5780820151818401526020810190506144f0565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561454d578082015181840152602081019050614532565b5050505090500194505050505060405180910390a450505050565b60006145aa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d3c565b905092915050565b6060600460008481526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561465b5780601f106146305761010080835404028352916020019161465b565b820191906000526020600020905b81548152906001019060200180831161463e57829003601f168201915b5050505050905060008151146146d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5572692068617320657869737465642e0000000000000000000000000000000081525060200191505060405180910390fd5b81600460008581526020019081526020016000209080519060200190614700929190615071565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561480b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806154686021913960400191505060405180910390fd5b6000614815613d2c565b90506148368160008761482788614988565b61483088614988565b87613d34565b614899836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613dfc90919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4614981816000878787876149f8565b5050505050565b606080600167ffffffffffffffff811180156149a357600080fd5b506040519080825280602002602001820160405280156149d25781602001602082028036833780820191505090505b50905082816000815181106149e357fe5b60200260200101818152505080915050919050565b614a178473ffffffffffffffffffffffffffffffffffffffff16614772565b15614cfd578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614ad0578082015181840152602081019050614ab5565b50505050905090810190601f168015614afd5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015614b2057600080fd5b505af1925050508015614b5457506040513d6020811015614b4057600080fd5b810190808051906020019092919050505060015b614c5e57614b6061513a565b80614b6b5750614c0d565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614bd2578082015181840152602081019050614bb7565b50505050905090810190601f168015614bff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806151f16034913960400191505060405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614614cfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806152256028913960400191505060405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614d8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806153736023913960400191505060405180910390fd5b6000614d95613d2c565b9050614dc581856000614da787614988565b614db087614988565b60405180602001604052806000815250613d34565b614e42826040518060600160405280602481526020016152cf602491396001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d3c9092919063ffffffff16565b6001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a450505050565b60608083905060608390506060815183510167ffffffffffffffff81118015614f4957600080fd5b506040519080825280601f01601f191660200182016040528015614f7c5781602001600182028036833780820191505090505b5090506000805b8451811015614ff157848181518110614f9857fe5b602001015160f81c60f81b838380600101945081518110614fb557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050614f83565b5060005b83518110156150635783818151811061500a57fe5b602001015160f81c60f81b83838060010194508151811061502757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050614ff5565b508194505050505092915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826150a757600085556150ee565b82601f106150c057805160ff19168380011785556150ee565b828001600101855582156150ee579182015b828111156150ed5782518255916020019190600101906150d2565b5b5090506150fb91906150ff565b5090565b5b80821115615118576000816000905550600101615100565b5090565b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d101561514a576151ed565b60046000803e61515b60005161512d565b6308c379a0811461516c57506151ed565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715615198575050506151ed565b808201805167ffffffffffffffff8111156151b75750505050506151ed565b8060208301013d85018111156151d2575050505050506151ed565b6151db8261511c565b60208401016040528296505050505050505b9056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373596f7520617265206e6f74207468652063726561746f72206f72206d696e746572206f662074686973204e46542e455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f20616464726573734e4654207175616e746974792069732067726561746572207468616e206d617820737570706c792ea2646970667358221220549fdf8c5424081eaeeb8dd7f32f3a0fa117a502f6831445260abb16eba475d264736f6c63430007040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000f646f6b69646f6b692e6d6f6d696a69000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d4f4d494a4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : tokenName (string): dokidoki.momiji
Arg [1] : tokenSymbol (string): MOMIJI
Arg [2] : baseUri (string): ipfs://

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 646f6b69646f6b692e6d6f6d696a690000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 4d4f4d494a490000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [8] : 697066733a2f2f00000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42347:4688:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24748:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15820:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42489:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45228:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46774:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27460:1220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42932:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45469:310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25137:634;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38459:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43474:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42588:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42021:319;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40936:148;;;:::i;:::-;;46645:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46218:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42649:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40294:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46334:83;;;:::i;:::-;;42514:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43008:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25844:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45787:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42969:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46425:87;;;:::i;:::-;;43676:588;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44272:948;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42783:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42713:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42899:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46520:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46108:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42833:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26227:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26459:924;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41239:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41726:287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24748:223;24826:7;24873:1;24854:21;;:7;:21;;;;24846:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24941:9;:13;24951:2;24941:13;;;;;;;;;;;:22;24955:7;24941:22;;;;;;;;;;;;;;;;24934:29;;24748:223;;;;:::o;15820:142::-;15897:4;15921:20;:33;15942:11;15921:33;;;;;;;;;;;;;;;;;;;;;;;;;;;15914:40;;15820:142;;;:::o;42489:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45228:99::-;45273:13;45306;45316:2;45306:9;:13::i;:::-;45299:20;;45228:99;;;:::o;46774:118::-;46847:2;46966:8;:12;46975:2;46966:12;;;;;;;;;;;;;;;;;;;;;46952:26;;:10;:26;;;46944:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46877:7:::1;46862:8;:12;46871:2;46862:12;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;46774:118:::0;;;:::o;27460:1220::-;27725:7;:14;27711:3;:10;:28;27703:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27817:1;27803:16;;:2;:16;;;;27795:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27902:12;:10;:12::i;:::-;27894:20;;:4;:20;;;:60;;;;27918:36;27935:4;27941:12;:10;:12::i;:::-;27918:16;:36::i;:::-;27894:60;27872:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28045:16;28064:12;:10;:12::i;:::-;28045:31;;28089:60;28110:8;28120:4;28126:2;28130:3;28135:7;28144:4;28089:20;:60::i;:::-;28167:9;28162:358;28186:3;:10;28182:1;:14;28162:358;;;28218:10;28231:3;28235:1;28231:6;;;;;;;;;;;;;;28218:19;;28252:14;28269:7;28277:1;28269:10;;;;;;;;;;;;;;28252:27;;28318:126;28360:6;28318:126;;;;;;;;;;;;;;;;;:9;:13;28328:2;28318:13;;;;;;;;;;;:19;28332:4;28318:19;;;;;;;;;;;;;;;;:23;;:126;;;;;:::i;:::-;28296:9;:13;28306:2;28296:13;;;;;;;;;;;:19;28310:4;28296:19;;;;;;;;;;;;;;;:148;;;;28479:29;28501:6;28479:9;:13;28489:2;28479:13;;;;;;;;;;;:17;28493:2;28479:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;28459:9;:13;28469:2;28459:13;;;;;;;;;;;:17;28473:2;28459:17;;;;;;;;;;;;;;;:49;;;;28162:358;;28198:3;;;;;28162:358;;;;28567:2;28537:47;;28561:4;28537:47;;28551:8;28537:47;;;28571:3;28576:7;28537:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28597:75;28633:8;28643:4;28649:2;28653:3;28658:7;28667:4;28597:35;:75::i;:::-;27460:1220;;;;;;:::o;42932:28::-;;;;:::o;45469:310::-;45582:10;45561:31;;:8;:17;45570:7;45561:17;;;;;;;;;;;;;;;;;;;;;:31;;;:63;;;;45596:7;:16;45604:7;45596:16;;;;;;;;;;;:28;45613:10;45596:28;;;;;;;;;;;;;;;;;;;;;;;;;45561:63;45553:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45724:47;45764:6;45724:26;:35;45751:7;45724:35;;;;;;;;;;;;:39;;:47;;;;:::i;:::-;45686:26;:35;45713:7;45686:35;;;;;;;;;;;:85;;;;45469:310;;:::o;25137:634::-;25301:16;25362:3;:10;25343:8;:15;:29;25335:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25431:30;25478:8;:15;25464:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25431:63;;25512:9;25507:224;25531:8;:15;25527:1;:19;25507:224;;;25599:1;25576:25;;:8;25585:1;25576:11;;;;;;;;;;;;;;:25;;;;25568:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25689:9;:17;25699:3;25703:1;25699:6;;;;;;;;;;;;;;25689:17;;;;;;;;;;;:30;25707:8;25716:1;25707:11;;;;;;;;;;;;;;25689:30;;;;;;;;;;;;;;;;25670:13;25684:1;25670:16;;;;;;;;;;;;;:49;;;;;25548:3;;;;;25507:224;;;;25750:13;25743:20;;;25137:634;;;;:::o;38459:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43474:99::-;40516:12;:10;:12::i;:::-;40506:22;;:6;;;;;;;;;;;:22;;;40498:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43545:20:::1;43557:7;43545:11;:20::i;:::-;43474:99:::0;:::o;42588:54::-;;;;;;;;;;;;;;;;;:::o;42021:319::-;42163:12;:10;:12::i;:::-;42152:23;;:7;:23;;;:66;;;;42179:39;42196:7;42205:12;:10;:12::i;:::-;42179:16;:39::i;:::-;42152:66;42130:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42300:32;42311:7;42320:3;42325:6;42300:10;:32::i;:::-;42021:319;;;:::o;40936:148::-;40516:12;:10;:12::i;:::-;40506:22;;:6;;;;;;;;;;;:22;;;40498:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41043:1:::1;41006:40;;41027:6;;;;;;;;;;;41006:40;;;;;;;;;;;;41074:1;41057:6;;:19;;;;;;;;;;;;;;;;;;40936:148::o:0;46645:121::-;46715:2;46966:8;:12;46975:2;46966:12;;;;;;;;;;;;;;;;;;;;;46952:26;;:10;:26;;;46944:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46753:5:::1;46730:7;:11;46738:2;46730:11;;;;;;;;;;;:20;46742:7;46730:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;46645:121:::0;;;:::o;46218:108::-;40516:12;:10;:12::i;:::-;40506:22;;:6;;;;;;;;;;;:22;;;40498:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46313:5:::1;46292:9;:18;46302:7;46292:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46218:108:::0;:::o;42649:57::-;;;;;;;;;;;;;;;;;:::o;40294:79::-;40332:7;40359:6;;;;;;;;;;;40352:13;;40294:79;:::o;46334:83::-;40516:12;:10;:12::i;:::-;40506:22;;:6;;;;;;;;;;;:22;;;40498:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46404:5:::1;46388:13;;:21;;;;;;;;;;;;;;;;;;46334:83::o:0;42514:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43008:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;25844:311::-;25963:8;25947:24;;:12;:10;:12::i;:::-;:24;;;;25939:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26075:8;26030:18;:32;26049:12;:10;:12::i;:::-;26030:32;;;;;;;;;;;;;;;:42;26063:8;26030:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26128:8;26099:48;;26114:12;:10;:12::i;:::-;26099:48;;;26138:8;26099:48;;;;;;;;;;;;;;;;;;;;25844:311;;:::o;45787:313::-;45903:10;45882:31;;:8;:17;45891:7;45882:17;;;;;;;;;;;;;;;;;;;;;:31;;;:63;;;;45917:7;:16;45925:7;45917:16;;;;;;;;;;;:28;45934:10;45917:28;;;;;;;;;;;;;;;;;;;;;;;;;45882:63;45874:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46045:47;46085:6;46045:26;:35;46072:7;46045:35;;;;;;;;;;;;:39;;:47;;;;:::i;:::-;46007:26;:35;46034:7;46007:35;;;;;;;;;;;:85;;;;45787:313;;:::o;42969:32::-;;;;;;;;;;;;;:::o;46425:87::-;40516:12;:10;:12::i;:::-;40506:22;;:6;;;;;;;;;;;:22;;;40498:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46500:4:::1;46484:13;;:20;;;;;;;;;;;;;;;;;;46425:87::o:0;43676:588::-;43792:13;;;;;;;;;;;43788:103;;;43830:9;:21;43840:10;43830:21;;;;;;;;;;;;;;;;;;;;;;;;;43822:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43788:103;43932:1;43901:19;:28;43921:7;43901:28;;;;;;;;;;;:32;;;;43978:9;43944:22;:31;43967:7;43944:31;;;;;;;;;;;:43;;;;43998:8;44012:7;43998:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44047:20;44065:1;44047:13;;:17;;:20;;;;:::i;:::-;44031:13;:36;;;;44078:26;44091:7;44100:3;44078:12;:26::i;:::-;44135:10;44115:8;:17;44124:7;44115:17;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;44194:9;44156:26;:35;44183:7;44156:35;;;;;;;;;;;:47;;;;44251:4;;44219:37;;;;;;;;;;;;;;;;;;;;;;;;;;;44246:3;44219:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44226:9;44237:7;44219:37;;;;;;;;;;;;;;;;;;;;;;;;43676:588;;;;;:::o;44272:948::-;44399:10;44378:31;;:8;:17;44387:7;44378:17;;;;;;;;;;;;;;;;;;;;;:31;;;:63;;;;44413:7;:16;44421:7;44413:16;;;;;;;;;;;:28;44430:10;44413:28;;;;;;;;;;;;;;;;;;;;;;;;;44378:63;44370:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44511:24;44527:7;44511:15;:24::i;:::-;44503:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44647:8;44616:19;:28;44636:7;44616:28;;;;;;;;;;;;:39;44581:22;:31;44604:7;44581:31;;;;;;;;;;;;:74;;44573:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44716:32;44724:10;44716:30;;;:32::i;:::-;44711:261;;44812:8;44773:26;:35;44800:7;44773:35;;;;;;;;;;;;:47;;44765:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44911:49;44951:8;44911:26;:35;44938:7;44911:35;;;;;;;;;;;;:39;;:49;;;;:::i;:::-;44873:26;:35;44900:7;44873:35;;;;;;;;;;;:87;;;;44711:261;44982:34;44988:2;44992:7;45001:8;45011:4;44982:5;:34::i;:::-;45058:42;45091:8;45058:19;:28;45078:7;45058:28;;;;;;;;;;;;:32;;:42;;;;:::i;:::-;45027:19;:28;45047:7;45027:28;;;;;;;;;;;:73;;;;45144:4;45116:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45121:7;45130:2;45134:8;45150:22;:31;45173:7;45150:31;;;;;;;;;;;;45183:19;:28;45203:7;45183:28;;;;;;;;;;;;45116:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44272:948;;;;:::o;42783:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;42713:61::-;;;;;;;;;;;;;;;;;:::o;42899:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46520:117::-;46587:2;46966:8;:12;46975:2;46966:12;;;;;;;;;;;;;;;;;;;;;46952:26;;:10;:26;;;46944:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46625:4:::1;46602:7;:11;46610:2;46602:11;;;;;;;;;;;:20;46614:7;46602:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;46520:117:::0;;;:::o;46108:102::-;40516:12;:10;:12::i;:::-;40506:22;;:6;;;;;;;;;;;:22;;;40498:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46198:4:::1;46177:9;:18;46187:7;46177:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;46108:102:::0;:::o;42833:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26227:160::-;26318:4;26342:18;:27;26361:7;26342:27;;;;;;;;;;;;;;;:37;26370:8;26342:37;;;;;;;;;;;;;;;;;;;;;;;;;26335:44;;26227:160;;;;:::o;26459:924::-;26699:1;26685:16;;:2;:16;;;;26677:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26784:12;:10;:12::i;:::-;26776:20;;:4;:20;;;:60;;;;26800:36;26817:4;26823:12;:10;:12::i;:::-;26800:16;:36::i;:::-;26776:60;26754:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26918:16;26937:12;:10;:12::i;:::-;26918:31;;26962:96;26983:8;26993:4;26999:2;27003:21;27021:2;27003:17;:21::i;:::-;27026:25;27044:6;27026:17;:25::i;:::-;27053:4;26962:20;:96::i;:::-;27093:77;27117:6;27093:77;;;;;;;;;;;;;;;;;:9;:13;27103:2;27093:13;;;;;;;;;;;:19;27107:4;27093:19;;;;;;;;;;;;;;;;:23;;:77;;;;;:::i;:::-;27071:9;:13;27081:2;27071:13;;;;;;;;;;;:19;27085:4;27071:19;;;;;;;;;;;;;;;:99;;;;27201:29;27223:6;27201:9;:13;27211:2;27201:13;;;;;;;;;;;:17;27215:2;27201:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;27181:9;:13;27191:2;27181:13;;;;;;;;;;;:17;27195:2;27181:17;;;;;;;;;;;;;;;:49;;;;27279:2;27248:46;;27273:4;27248:46;;27263:8;27248:46;;;27283:2;27287:6;27248:46;;;;;;;;;;;;;;;;;;;;;;;;27307:68;27338:8;27348:4;27354:2;27358;27362:6;27370:4;27307:30;:68::i;:::-;26459:924;;;;;;:::o;41239:244::-;40516:12;:10;:12::i;:::-;40506:22;;:6;;;;;;;;;;;:22;;;40498:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41348:1:::1;41328:22;;:8;:22;;;;41320:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41438:8;41409:38;;41430:6;;;;;;;;;;;41409:38;;;;;;;;;;;;41467:8;41458:6;;:17;;;;;;;;;;;;;;;;;;41239:244:::0;:::o;41726:287::-;41843:12;:10;:12::i;:::-;41832:23;;:7;:23;;;:66;;;;41859:39;41876:7;41885:12;:10;:12::i;:::-;41859:16;:39::i;:::-;41832:66;41810:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41980:25;41986:7;41995:2;41999:5;41980;:25::i;:::-;41726:287;;;:::o;38717:140::-;38776:13;38809:40;38829:10;:19;38840:7;38829:19;;;;;;;;;;;38809:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;38802:47;;38717:140;;;:::o;13812:106::-;13865:15;13900:10;13893:17;;13812:106;:::o;33425:236::-;;;;;;;:::o;9712:192::-;9798:7;9831:1;9826;:6;;9834:12;9818:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9858:9;9874:1;9870;:5;9858:17;;9895:1;9888:8;;;9712:192;;;;;:::o;8809:181::-;8867:7;8887:9;8903:1;8899;:5;8887:17;;8928:1;8923;:6;;8915:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8981:1;8974:8;;;8809:181;;;;:::o;34439:799::-;34693:15;:2;:13;;;:15::i;:::-;34689:542;;;34746:2;34729:43;;;34773:8;34783:4;34789:3;34794:7;34803:4;34729:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34725:495;;;;:::i;:::-;;;;;;;;35093:6;35086:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34725:495;35142:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34725:495;34870:52;;;34858:64;;;:8;:64;;;;34854:163;;34947:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34854:163;34809:223;34689:542;34439:799;;;;;;:::o;38623:86::-;38698:3;38683:12;:18;;;;;;;;;;;;:::i;:::-;;38623:86;:::o;31748:721::-;31888:1;31869:21;;:7;:21;;;;31861:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31963:7;:14;31949:3;:10;:28;31941:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32035:16;32054:12;:10;:12::i;:::-;32035:31;;32079:69;32100:8;32110:7;32127:1;32131:3;32136:7;32079:69;;;;;;;;;;;;:20;:69::i;:::-;32166:6;32161:225;32182:3;:10;32178:1;:14;32161:225;;;32243:131;32292:7;32300:1;32292:10;;;;;;;;;;;;;;32243:131;;;;;;;;;;;;;;;;;:9;:17;32253:3;32257:1;32253:6;;;;;;;;;;;;;;32243:17;;;;;;;;;;;:26;32261:7;32243:26;;;;;;;;;;;;;;;;:30;;:131;;;;;:::i;:::-;32214:9;:17;32224:3;32228:1;32224:6;;;;;;;;;;;;;;32214:17;;;;;;;;;;;:26;32232:7;32214:26;;;;;;;;;;;;;;;:160;;;;32194:3;;;;;;;32161:225;;;;32444:1;32403:58;;32427:7;32403:58;;32417:8;32403:58;;;32448:3;32453:7;32403:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31748:721;;;;:::o;9273:136::-;9331:7;9358:43;9362:1;9365;9358:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9351:50;;9273:136;;;;:::o;38865:232::-;38943:21;38973:10;:19;38984:7;38973:19;;;;;;;;;;;38943:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39031:1;39012:8;:15;:20;39004:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39086:3;39064:10;:19;39075:7;39064:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;38865:232;;;:::o;45335:126::-;45398:4;45451:1;45422:31;;:8;:17;45431:7;45422:17;;;;;;;;;;;;;;;;;;;;;:31;;;;45415:38;;45335:126;;;:::o;710:422::-;770:4;978:12;1089:7;1077:20;1069:28;;1123:1;1116:4;:8;1109:15;;;710:422;;;:::o;29081:583::-;29215:1;29196:21;;:7;:21;;;;29188:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29268:16;29287:12;:10;:12::i;:::-;29268:31;;29312:107;29333:8;29351:1;29355:7;29364:21;29382:2;29364:17;:21::i;:::-;29387:25;29405:6;29387:17;:25::i;:::-;29414:4;29312:20;:107::i;:::-;29457:34;29484:6;29457:9;:13;29467:2;29457:13;;;;;;;;;;;:22;29471:7;29457:22;;;;;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;29432:9;:13;29442:2;29432:13;;;;;;;;;;;:22;29446:7;29432:22;;;;;;;;;;;;;;;:59;;;;29544:7;29507:57;;29540:1;29507:57;;29522:8;29507:57;;;29553:2;29557:6;29507:57;;;;;;;;;;;;;;;;;;;;;;;;29577:79;29608:8;29626:1;29630:7;29639:2;29643:6;29651:4;29577:30;:79::i;:::-;29081:583;;;;;:::o;35246:198::-;35312:16;35341:22;35380:1;35366:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35341:41;;35404:7;35393:5;35399:1;35393:8;;;;;;;;;;;;;:18;;;;;35431:5;35424:12;;;35246:198;;;:::o;33669:762::-;33898:15;:2;:13;;;:15::i;:::-;33894:530;;;33951:2;33934:38;;;33973:8;33983:4;33989:2;33993:6;34001:4;33934:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33930:483;;;;:::i;:::-;;;;;;;;34286:6;34279:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33930:483;34335:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33930:483;34068:47;;;34056:59;;;:8;:59;;;;34052:158;;34140:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34052:158;34007:218;33894:530;33669:762;;;;;;:::o;30994:551::-;31109:1;31090:21;;:7;:21;;;;31082:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31164:16;31183:12;:10;:12::i;:::-;31164:31;;31208:105;31229:8;31239:7;31256:1;31260:21;31278:2;31260:17;:21::i;:::-;31283:25;31301:6;31283:17;:25::i;:::-;31208:105;;;;;;;;;;;;:20;:105::i;:::-;31351:111;31392:6;31351:111;;;;;;;;;;;;;;;;;:9;:13;31361:2;31351:13;;;;;;;;;;;:22;31365:7;31351:22;;;;;;;;;;;;;;;;:26;;:111;;;;;:::i;:::-;31326:9;:13;31336:2;31326:13;;;;;;;;;;;:22;31340:7;31326:22;;;;;;;;;;;;;;;:136;;;;31522:1;31480:57;;31505:7;31480:57;;31495:8;31480:57;;;31526:2;31530:6;31480:57;;;;;;;;;;;;;;;;;;;;;;;;30994:551;;;;:::o;36023:422::-;36098:13;36124:16;36149:2;36124:28;;36163:16;36188:2;36163:28;;36202:16;36244:3;:10;36231:3;:10;:23;36221:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36202:53;;36266:6;36292;36287:55;36308:3;:10;36304:1;:14;36287:55;;;36336:3;36340:1;36336:6;;;;;;;;;;;;;;;;36325:3;36329;;;;;;36325:8;;;;;;;;;;;:17;;;;;;;;;;;36320:3;;;;;;;36287:55;;;;36358:6;36353:55;36374:3;:10;36370:1;:14;36353:55;;;36402:3;36406:1;36402:6;;;;;;;;;;;;;;;;36391:3;36395;;;;;;36391:8;;;;;;;;;;;:17;;;;;;;;;;;36386:3;;;;;;;36353:55;;;;36433:3;36419:18;;;;;;36023:422;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:102:1:-;;99:2;95:7;90:2;83:5;79:14;75:28;65:38;;55:54;;;:::o;115:106::-;;208:5;203:3;199:15;178:36;;168:53;;;:::o;227:833::-;;304:4;286:16;283:26;280:2;;;312:5;;280:2;350:1;347;344;329:23;372:34;403:1;397:8;372:34;:::i;:::-;433:10;428:3;425:19;415:2;;448:5;;;415:2;483;477:9;541:1;523:16;519:24;516:1;510:4;495:49;574:4;568:11;673:16;666:4;658:6;654:17;651:39;618:18;610:6;607:30;591:113;588:2;;;719:5;;;;;588:2;765:6;759:4;755:17;801:3;795:10;828:18;820:6;817:30;814:2;;;850:5;;;;;;;814:2;898:6;891:4;886:3;882:14;878:27;935:16;929:4;925:27;920:3;917:36;914:2;;;956:5;;;;;;;;914:2;1004:29;1026:6;1004:29;:::i;:::-;997:4;992:3;988:14;984:50;980:2;973:62;1051:3;1044:10;;270:790;;;;;;;;:::o

Swarm Source

ipfs://549fdf8c5424081eaeeb8dd7f32f3a0fa117a502f6831445260abb16eba475d2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.