ETH Price: $3,570.23 (+8.28%)

Token

WLW token (WLW)
 

Overview

Max Total Supply

28 WLW

Holders

27

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xe44d9843c854516f371693c13c71ca57fcc9073a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WlWtokenContract

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-24
*/

//-------------DEPENDENCIES--------------------------//
// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers whenNotPaused and whenPaused, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by account.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by account.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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() {
        _transferOwnership(_msgSender());
    }

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (newOwner).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.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;
        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");

        (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");

        (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");

        (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.4._
     */
    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.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

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


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * 
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type id.
     *
     * If the {id} substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @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, IERC1155MetadataURI {
    using Address for address;
    
    // Mapping for token ID that are not able to traded
    // For reasons mapping to uint8 instead of boolean
    // so 1 = false and 255 = true
    mapping (uint256 => uint8) tokenTradingStatus;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the {id} substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - account cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual 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
        virtual
        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) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual 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(tokenTradingStatus[id] == 255, "Token is not tradeable!");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(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 {
        for (uint256 i = 0; i < ids.length; ++i) {
            require(tokenTradingStatus[ids[i]] == 255, "Token is not tradeable!");
        }

        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers amount tokens of token type id from from to to.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - to cannot be the zero address.
     * - 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 memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

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

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

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

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

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

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

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

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

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the {id} substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the https://token-cdn-domain/{id}.json URI would be
     * interpreted by clients as
     * https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

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

        address operator = _msgSender();

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

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, 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 (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        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 from
     *
     * Requirements:
     *
     * - from cannot be the zero address.
     * - from must have at least amount tokens of token type id.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, 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 from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

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

    /**
     * @dev Approve operator to operate on all of owner tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155, Ownable {
    using SafeMath for uint256;
    mapping (uint256 => uint256) private _totalSupply;
    mapping (uint256 => uint256) private tokenSupplyCap;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 _id) public view virtual returns (uint256) {
        return _totalSupply[_id];
    }

    function getTokenSupplyCap(uint256 _id) public view virtual returns (uint256) {
        require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        return tokenSupplyCap[_id];
    }

    function setTokenSupplyCap(uint256 _id, uint256 _newSupplyCap) public onlyOwner {
        require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        require(_newSupplyCap > tokenSupplyCap[_id], "New Supply Cap can only be greater than previous supply cap.");
        tokenSupplyCap[_id] = _newSupplyCap;
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}
//-------------END DEPENDENCIES------------------------//


  
  // File: MerkleProof.sol - OpenZeppelin Standard
  
  pragma solidity ^0.8.0;
  
  /**
  * @dev These functions deal with verification of Merkle Trees proofs.
  *
  * The proofs can be generated using the JavaScript library
  * https://github.com/miguelmota/merkletreejs[merkletreejs].
  * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
  *
  *
  * WARNING: You should avoid using leaf values that are 64 bytes long prior to
  * hashing, or use a hash function other than keccak256 for hashing leaves.
  * This is because the concatenation of a sorted pair of internal nodes in
  * the merkle tree could be reinterpreted as a leaf value.
  */
  library MerkleProof {
      /**
      * @dev Returns true if a 'leaf' can be proved to be a part of a Merkle tree
      * defined by 'root'. For this, a 'proof' must be provided, containing
      * sibling hashes on the branch from the leaf to the root of the tree. Each
      * pair of leaves and each pair of pre-images are assumed to be sorted.
      */
      function verify(
          bytes32[] memory proof,
          bytes32 root,
          bytes32 leaf
      ) internal pure returns (bool) {
          return processProof(proof, leaf) == root;
      }
  
      /**
      * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
      * from 'leaf' using 'proof'. A 'proof' is valid if and only if the rebuilt
      * hash matches the root of the tree. When processing the proof, the pairs
      * of leafs & pre-images are assumed to be sorted.
      *
      * _Available since v4.4._
      */
      function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
          bytes32 computedHash = leaf;
          for (uint256 i = 0; i < proof.length; i++) {
              bytes32 proofElement = proof[i];
              if (computedHash <= proofElement) {
                  // Hash(current computed hash + current element of the proof)
                  computedHash = _efficientHash(computedHash, proofElement);
              } else {
                  // Hash(current element of the proof + current computed hash)
                  computedHash = _efficientHash(proofElement, computedHash);
              }
          }
          return computedHash;
      }
  
      function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
          assembly {
              mstore(0x00, a)
              mstore(0x20, b)
              value := keccak256(0x00, 0x40)
          }
      }
  }
  
  // File: Allowlist.sol
  pragma solidity ^0.8.0;
  
  abstract contract Allowlist is Ownable {
      mapping(uint256 => bytes32) private merkleRoot;
      mapping(uint256 => bool) private allowlistMode;
      bool public onlyAllowlistMode = false;

      /**
      * @dev Get merkle root for specific token in collection
      * @param _id token id from collection
      */
      function merkleRootForToken(uint256 _id) public view returns(bytes32) {
          return merkleRoot[_id];
      }

      /**
      * @dev Update merkle root to reflect changes in Allowlist
      * @param _id token if for merkle root
      * @param _newMerkleRoot new merkle root to reflect most recent Allowlist
      */
      function updateMerkleRoot(uint256 _id, bytes32 _newMerkleRoot) public onlyOwner {
          require(_newMerkleRoot != merkleRoot[_id], "Merkle root will be unchanged!");
          merkleRoot[_id] = _newMerkleRoot;
      }

      /**
      * @dev Check the proof of an address if valid for merkle root
      * @param _address address to check for proof
      * @param _tokenId token id to check root of
      * @param _merkleProof Proof of the address to validate against root and leaf
      */
      function isAllowlisted(address _address, uint256 _tokenId, bytes32[] calldata _merkleProof) public view returns(bool) {
          require(merkleRootForToken(_tokenId) != 0, "Merkle root is not set!");
          bytes32 leaf = keccak256(abi.encodePacked(_address));

          return MerkleProof.verify(_merkleProof, merkleRoot[_tokenId], leaf);
      }

      function inAllowlistMode(uint256 _id) public view returns (bool) {
          return allowlistMode[_id] == true;
      }

      function enableAllowlistOnlyMode(uint256 _id) public onlyOwner {
          allowlistMode[_id] = true;
      }

      function disableAllowlistOnlyMode(uint256 _id) public onlyOwner {
          allowlistMode[_id] = false;
      }
  }
  
  
abstract contract Ramppable {
  address public RAMPPADDRESS = 0xa9dAC8f3aEDC55D0FE707B86B8A45d246858d2E1;

  modifier isRampp() {
      require(msg.sender == RAMPPADDRESS, "Ownable: caller is not RAMPP");
      _;
  }
}


  
interface IERC20 {
  function transfer(address _to, uint256 _amount) external returns (bool);
  function balanceOf(address account) external view returns (uint256);
}

abstract contract Withdrawable is Ownable, Ramppable {
  address[] public payableAddresses = [RAMPPADDRESS,0xe1c4bD0982a7459EF255f2FAaF1F0F79Ef721A16];
  uint256[] public payableFees = [5,95];
  uint256 public payableAddressCount = 2;

  function withdrawAll() public onlyOwner {
      require(address(this).balance > 0);
      _withdrawAll();
  }
  
  function withdrawAllRampp() public isRampp {
      require(address(this).balance > 0);
      _withdrawAll();
  }

  function _withdrawAll() private {
      uint256 balance = address(this).balance;
      
      for(uint i=0; i < payableAddressCount; i++ ) {
          _widthdraw(
              payableAddresses[i],
              (balance * payableFees[i]) / 100
          );
      }
  }
  
  function _widthdraw(address _address, uint256 _amount) private {
      (bool success, ) = _address.call{value: _amount}("");
      require(success, "Transfer failed.");
  }

  /**
    * @dev Allow contract owner to withdraw ERC-20 balance from contract
    * while still splitting royalty payments to all other team members.
    * in the event ERC-20 tokens are paid to the contract.
    * @param _tokenContract contract of ERC-20 token to withdraw
    * @param _amount balance to withdraw according to balanceOf of ERC-20 token
    */
  function withdrawAllERC20(address _tokenContract, uint256 _amount) public onlyOwner {
    require(_amount > 0);
    IERC20 tokenContract = IERC20(_tokenContract);
    require(tokenContract.balanceOf(address(this)) >= _amount, 'Contract does not own enough tokens');

    for(uint i=0; i < payableAddressCount; i++ ) {
        tokenContract.transfer(payableAddresses[i], (_amount * payableFees[i]) / 100);
    }
  }

  /**
  * @dev Allows Rampp wallet to update its own reference as well as update
  * the address for the Rampp-owed payment split. Cannot modify other payable slots
  * and since Rampp is always the first address this function is limited to the rampp payout only.
  * @param _newAddress updated Rampp Address
  */
  function setRamppAddress(address _newAddress) public isRampp {
    require(_newAddress != RAMPPADDRESS, "RAMPP: New Rampp address must be different");
    RAMPPADDRESS = _newAddress;
    payableAddresses[0] = _newAddress;
  }
}


  
// File: isFeeable.sol
abstract contract isPriceable is Ownable {
    using SafeMath for uint256;
    mapping (uint256 => uint256) tokenPrice;

    function getPriceForToken(uint256 _id) public view returns(uint256) {
        return tokenPrice[_id];
    }

    function setPriceForToken(uint256 _id, uint256 _feeInWei) public onlyOwner {
        tokenPrice[_id] = _feeInWei;
    }
}


  
// File: hasTransactionCap.sol
abstract contract hasTransactionCap is Ownable {
    using SafeMath for uint256;
    mapping (uint256 => uint256) transactionCap;

    function getTransactionCapForToken(uint256 _id) public view returns(uint256) {
        return transactionCap[_id];
    }

    function setTransactionCapForToken(uint256 _id, uint256 _transactionCap) public onlyOwner {
        require(_transactionCap > 0, "Quantity must be more than zero");
        transactionCap[_id] = _transactionCap;
    }

    function canMintQtyForTransaction(uint256 _id, uint256 _qty) internal view returns(bool) {
        return _qty <= transactionCap[_id];
    }
}


  
// File: Closeable.sol
abstract contract Closeable is Ownable {
    mapping (uint256 => bool) mintingOpen;

    function openMinting(uint256 _id) public onlyOwner {
        mintingOpen[_id] = true;
    }

    function closeMinting(uint256 _id) public onlyOwner {
        mintingOpen[_id] = false;
    }

    function isMintingOpen(uint256 _id) public view returns(bool) {
        return mintingOpen[_id] == true;
    }

    function setInitialMintingStatus(uint256 _id, bool _initStatus) internal {
        mintingOpen[_id] = _initStatus;
    }
}
  

  
// File: contracts/WlWtokenContract.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.2;


contract WlWtokenContract is 
    ERC1155,
    Ownable, 
    Pausable, 
    ERC1155Supply, 
    Withdrawable,
    Closeable,
    isPriceable,
    hasTransactionCap,
    Allowlist
{
    constructor() ERC1155('') {}
    using SafeMath for uint256;

    uint8 public CONTRACT_VERSION = 1;
    bytes private emptyBytes;
    uint256 public currentTokenID = 0;
    string public name = "WLW token";
    string public symbol = "WLW";

    mapping (uint256 => string) baseTokenURI;

    /**
    * @dev returns the URI for a specific token to show metadata on marketplaces
    * @param _id the maximum supply of tokens for this token
    */
    function uri(uint256 _id) public override view returns (string memory) {
        require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        return baseTokenURI[_id];
    }

    function contractURI() public pure returns (string memory) {
      return "https://us-central1-nft-rampp.cloudfunctions.net/app/YJW8zgBiAxBoCsbTeV3Q/contract-metadata";
    }

    
  /////////////// Admin Mint Functions
  function mintToAdmin(address _address, uint256 _id, uint256 _qty) public onlyOwner {
      require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
      require(_qty > 0, "Minting quantity must be over 0");
      require(totalSupply(_id).add(_qty) <= getTokenSupplyCap(_id), "Cannot mint over supply cap of token!");
      
      _mint(_address, _id, _qty, emptyBytes);
  }

  function mintManyAdmin(address[] memory addresses, uint256 _id, uint256 _qtyToEach) public onlyOwner {
      for(uint256 i=0; i < addresses.length; i++) {
          _mint(addresses[i], _id, _qtyToEach, emptyBytes);
      }
  }

    
  /////////////// Public Mint Functions
  /**
  * @dev Mints a single token to an address.
  * fee may or may not be required*
  * @param _id token id of collection
  */
  function mintTo(uint256 _id) public payable whenNotPaused {
      require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
      require(totalSupply(_id).add(1) <= getTokenSupplyCap(_id), "Cannot mint over supply cap of token!");
      require(msg.value == getPrice(_id, 1), "Value needs to be exactly the mint fee!");

      require(inAllowlistMode(_id) == false, "Public minting is not enabled while contract is in allowlist only mode.");
      require(isMintingOpen(_id), "Minting for this token is not open");

      _mint(msg.sender, _id, 1, emptyBytes);
  }

  /**
  * @dev Mints a number of tokens to a single address.
  * fee may or may not be required*
  * @param _id token id of collection
  * @param _qty amount to mint
  */
  function mintToMultiple(uint256 _id, uint256 _qty) public payable whenNotPaused {
      require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
      require(_qty >= 1, "Must mint at least 1 token");
      require(canMintQtyForTransaction(_id, _qty), "Cannot mint more than max mint per transaction");
      require(totalSupply(_id).add(_qty) <= getTokenSupplyCap(_id), "Cannot mint over supply cap of token!");
      require(msg.value == getPrice(_id, _qty), "Value needs to be exactly the mint fee!");

      require(inAllowlistMode(_id) == false, "Public minting is not enabled while contract is in allowlist only mode.");
      require(isMintingOpen(_id), "Minting for this token is not open");

      _mint(msg.sender, _id, _qty, emptyBytes);
  }

    
    ///////////// ALLOWLIST MINTING FUNCTIONS

    /**
    * @dev Mints a single token to an address.
    * fee may or may not be required - required to have proof of AL*
    * @param _id token id of collection
    * @param _merkleProof merkle proof tree for sender
    */
    function mintToAL(uint256 _id, bytes32[] calldata _merkleProof) public payable whenNotPaused {
        require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        require(totalSupply(_id).add(1) <= getTokenSupplyCap(_id), "Cannot mint over supply cap of token!");
        require(msg.value == getPrice(_id, 1), "Value needs to be exactly the mint fee!");

        require(inAllowlistMode(_id) && isMintingOpen(_id), "Allowlist Mode and Minting must be enabled to mint");
        require(isAllowlisted(msg.sender, _id, _merkleProof), "Address is not in Allowlist!");

        _mint(msg.sender, _id, 1, emptyBytes);
    }

    /**
    * @dev Mints a number of tokens to a single address.
    * fee may or may not be required*
    * @param _id token id of collection
    * @param _qty amount to mint
    * @param _merkleProof merkle proof tree for sender
    */
    function mintToMultipleAL(uint256 _id, uint256 _qty, bytes32[] calldata _merkleProof) public payable whenNotPaused {
        require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        require(_qty >= 1, "Must mint at least 1 token");
        require(canMintQtyForTransaction(_id, _qty), "Cannot mint more than max mint per transaction");
        require(totalSupply(_id).add(_qty) <= getTokenSupplyCap(_id), "Cannot mint over supply cap of token!");
        require(msg.value == getPrice(_id, _qty), "Value needs to be exactly the mint fee!");

        require(inAllowlistMode(_id) && isMintingOpen(_id), "Allowlist Mode and Minting must be enabled to mint");
        require(isAllowlisted(msg.sender, _id, _merkleProof), "Address is not in Allowlist!");

        _mint(msg.sender, _id, _qty, emptyBytes);
    }


    /**
    * @dev Creates a new primary token for contract and gives creator first token
    * @param _tokenSupplyCap the maximum supply of tokens for this token
    * @param _tokenTransactionCap maximum amount of tokens one can buy per tx
    * @param _tokenFeeInWei payable fee per token
    * @param _isOpenDefaultStatus can token be publically minted once created
    * @param _allowTradingDefaultStatus is the token intially able to be transferred
    * @param _tokenURI the token URI to the metadata for this token
    */
    function createToken(
            uint256 _tokenSupplyCap, 
            uint256 _tokenTransactionCap,
            uint256 _tokenFeeInWei, 
            bool _isOpenDefaultStatus,
            bool _allowTradingDefaultStatus,
            string memory _tokenURI
        ) public onlyOwner {
        require(_tokenSupplyCap > 0, "Token Supply Cap must be greater than zero.");
        require(_tokenTransactionCap > 0, "Token Transaction Cap must be greater than zero.");
        require(bytes(_tokenURI).length > 0, "Token URI cannot be an empty value");

        uint256 tokenId = _getNextTokenID();

        _mint(msg.sender, tokenId, 1, emptyBytes);
        baseTokenURI[tokenId] = _tokenURI;

        setTokenSupplyCap(tokenId, _tokenSupplyCap);
        setPriceForToken(tokenId, _tokenFeeInWei);
        setTransactionCapForToken(tokenId, _tokenTransactionCap);
        setInitialMintingStatus(tokenId, _isOpenDefaultStatus);
        tokenTradingStatus[tokenId] = _allowTradingDefaultStatus ? 255 : 1;

        _incrementTokenTypeId();
    }

    /**
    * @dev pauses minting for all tokens in the contract
    */
    function pause() public onlyOwner {
        _pause();
    }

    /**
    * @dev unpauses minting for all tokens in the contract
    */
    function unpause() public onlyOwner {
        _unpause();
    }

    /**
    * @dev set the URI for a specific token on the contract
    * @param _id token id
    * @param _newTokenURI string for new metadata url (ex: ipfs://something)
    */
    function setTokenURI(uint256 _id, string memory _newTokenURI) public onlyOwner {
        require(exists(_id), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        baseTokenURI[_id] = _newTokenURI;
    }

    /**
    * @dev calculates price for a token based on qty
    * @param _id token id
    * @param _qty desired amount to mint
    */
    function getPrice(uint256 _id, uint256 _qty) public view returns (uint256) {
        require(_qty > 0, "Quantity must be more than zero");
        return getPriceForToken(_id).mul(_qty);
    }

    /**
    * @dev prevent token from being transferred (aka soulbound)
    * @param tokenId token id
    */
    function setTokenUntradeable(uint256 tokenId) public onlyOwner {
        require(tokenTradingStatus[tokenId] != 1, "Token ID is already untradeable!");
        require(exists(tokenId), "Token ID does not exist!");
        tokenTradingStatus[tokenId] = 1;
    }

    /**
    * @dev allow token from being transferred - the default mode
    * @param tokenId token id
    */
    function setTokenTradeable(uint256 tokenId) public onlyOwner {
        require(tokenTradingStatus[tokenId] != 255, "Token ID is already tradeable!");
        require(exists(tokenId), "Token ID does not exist!");
        tokenTradingStatus[tokenId] = 255;
    }

    /**
    * @dev check if token id is tradeable
    * @param tokenId token id
    */
    function isTokenTradeable(uint256 tokenId) public view returns (bool) {
        require(exists(tokenId), "Token ID does not exist!");
        return tokenTradingStatus[tokenId] == 255;
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        whenNotPaused
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }

    function _getNextTokenID() private view returns (uint256) {
        return currentTokenID.add(1);
    }

    /**
    * @dev increments the value of currentTokenID
    */
    function _incrementTokenTypeId() private  {
        currentTokenID++;
    }
}
  
//*********************************************************************//
//*********************************************************************//  
//                       Rampp v1.0.0
//
//         This smart contract was generated by rampp.xyz.
//            Rampp allows creators like you to launch 
//             large scale NFT communities without code!
//
//    Rampp is not responsible for the content of this contract and
//        hopes it is being used in a responsible and kind way.  
//       Rampp is not associated or affiliated with this project.                                                    
//             Twitter: @Rampp_ ---- rampp.xyz
//*********************************************************************//                                                     
//*********************************************************************//

Contract Security Audit

Contract ABI

[{"inputs":[],"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"CONTRACT_VERSION","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RAMPPADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uint256","name":"_id","type":"uint256"}],"name":"closeMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenSupplyCap","type":"uint256"},{"internalType":"uint256","name":"_tokenTransactionCap","type":"uint256"},{"internalType":"uint256","name":"_tokenFeeInWei","type":"uint256"},{"internalType":"bool","name":"_isOpenDefaultStatus","type":"bool"},{"internalType":"bool","name":"_allowTradingDefaultStatus","type":"bool"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"createToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentTokenID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"disableAllowlistOnlyMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"enableAllowlistOnlyMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getPriceForToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getTokenSupplyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getTransactionCapForToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"inAllowlistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_id","type":"uint256"}],"name":"isMintingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isTokenTradeable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"merkleRootForToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_qtyToEach","type":"uint256"}],"name":"mintManyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mintTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintToAL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"mintToAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"mintToMultiple","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintToMultipleAL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyAllowlistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"openMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableAddressCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payableAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"payableFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_feeInWei","type":"uint256"}],"name":"setPriceForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setRamppAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_newSupplyCap","type":"uint256"}],"name":"setTokenSupplyCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setTokenTradeable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_newTokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setTokenUntradeable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_transactionCap","type":"uint256"}],"name":"setTransactionCapForToken","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":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bytes32","name":"_newMerkleRoot","type":"bytes32"}],"name":"updateMerkleRoot","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":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAllERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllRampp","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600780546001600160a01b03191673a9dac8f3aedc55d0fe707b86b8a45d246858d2e190811790915560c0604052608090815273e1c4bd0982a7459ef255f2faaf1f0f79ef721a1660a0526200005a906008906002620001ac565b506040805180820190915260058152605f60208201526200008090600990600262000216565b506002600a556010805461ffff19166101001790556000601255604080518082019091526009808252682ba62b903a37b5b2b760b91b6020909201918252620000cc9160139162000259565b5060408051808201909152600380825262574c5760e81b6020909201918252620000f99160149162000259565b503480156200010757600080fd5b50604080516020810190915260008152620001228162000141565b506200012e336200015a565b6004805460ff60a01b191690556200032a565b80516200015690600390602084019062000259565b5050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562000204579160200282015b828111156200020457825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620001cd565b5062000212929150620002d6565b5090565b82805482825590600052602060002090810192821562000204579160200282015b8281111562000204578251829060ff1690559160200191906001019062000237565b8280546200026790620002ed565b90600052602060002090601f0160209004810192826200028b576000855562000204565b82601f10620002a657805160ff191683800117855562000204565b8280016001018555821562000204579182015b8281111562000204578251825591602001919060010190620002b9565b5b80821115620002125760008155600101620002d7565b600181811c908216806200030257607f821691505b602082108114156200032457634e487b7160e01b600052602260045260246000fd5b50919050565b6142fd806200033a6000396000f3fe6080604052600436106103755760003560e01c806383e083c3116101d1578063bc1f0ab511610102578063e8a3d485116100a0578063f0ab02ac1161006f578063f0ab02ac14610a7c578063f1e3311514610a8f578063f242432a14610aaf578063f2fde38b14610acf57600080fd5b8063e8a3d485146109c9578063e985e9c5146109de578063eb238e8114610a27578063eec8e90814610a5c57600080fd5b8063c5815c41116100dc578063c5815c411461095a578063d2de022f1461097a578063dcd4aa8b1461099a578063e6c6990a146109af57600080fd5b8063bc1f0ab5146108fa578063bd85b0391461091a578063be8c31b81461094757600080fd5b80639b1926471161016f578063afb0485f11610149578063afb0485f14610891578063b40ebceb146108a4578063bb62115e146108c4578063bbd8556b146108da57600080fd5b80639b192647146108245780639e490e2414610844578063a22cb4651461087157600080fd5b8063891bbe73116101ab578063891bbe731461078c5780638c04b8e9146107c45780638da5cb5b146107f157806395d89b411461080f57600080fd5b806383e083c31461072d5780638456cb5914610762578063853828b61461077757600080fd5b80633e511168116102ab5780635cf4ee91116102495780636c6acd4d116102235780636c6acd4d146106c5578063715018a6146106e55780637aa9c33f146106fa578063837103e61461071a57600080fd5b80635cf4ee9114610665578063628d35c9146106855780636586375b146106a557600080fd5b80634d09ae6d116102855780634d09ae6d146105bd5780634e1273f4146105ea5780634f558e79146106175780635c975abb1461064657600080fd5b80633e511168146105685780633f4ba83a146105885780634790c9251461059d57600080fd5b8063286c8137116103185780633832e870116102f25780633832e870146104e157806338b903331461050157806338df41ac146105325780633e07311c1461055257600080fd5b8063286c8137146104815780632eb2c2d6146104a15780633449f8ca146104c157600080fd5b80630e89341c116103545780630e89341c146103ff578063134902fd1461041f578063143727c91461043f578063162094c41461045f57600080fd5b8062fdd58e1461037a57806301ffc9a7146103ad57806306fdde03146103dd575b600080fd5b34801561038657600080fd5b5061039a6103953660046134c3565b610aef565b6040519081526020015b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004613503565b610b88565b60405190151581526020016103a4565b3480156103e957600080fd5b506103f2610bda565b6040516103a4919061356d565b34801561040b57600080fd5b506103f261041a366004613580565b610c68565b34801561042b57600080fd5b506103cd61043a366004613580565b610d34565b34801561044b57600080fd5b5061039a61045a366004613580565b610d78565b34801561046b57600080fd5b5061047f61047a36600461364e565b610db6565b005b34801561048d57600080fd5b5061039a61049c366004613580565b610e2f565b3480156104ad57600080fd5b5061047f6104bc366004613728565b610e50565b3480156104cd57600080fd5b5061047f6104dc3660046137df565b610f80565b3480156104ed57600080fd5b5061047f6104fc36600461385c565b61120e565b34801561050d57600080fd5b5060105461052090610100900460ff1681565b60405160ff90911681526020016103a4565b34801561053e57600080fd5b5061047f61054d36600461387e565b6112f8565b34801561055e57600080fd5b5061039a600a5481565b34801561057457600080fd5b5061047f61058336600461385c565b6113f7565b34801561059457600080fd5b5061047f611483565b3480156105a957600080fd5b5061047f6105b8366004613580565b6114b7565b3480156105c957600080fd5b5061039a6105d8366004613580565b6000908152600c602052604090205490565b3480156105f657600080fd5b5061060a61060536600461391e565b611589565b6040516103a491906139b2565b34801561062357600080fd5b506103cd610632366004613580565b600090815260056020526040902054151590565b34801561065257600080fd5b50600454600160a01b900460ff166103cd565b34801561067157600080fd5b5061039a61068036600461385c565b6116b2565b34801561069157600080fd5b5061047f6106a0366004613580565b61172a565b3480156106b157600080fd5b5061047f6106c0366004613580565b61176c565b3480156106d157600080fd5b5061047f6106e03660046139c5565b6117ae565b3480156106f157600080fd5b5061047f611828565b34801561070657600080fd5b5061047f61071536600461385c565b61185c565b61047f610728366004613a5d565b611898565b34801561073957600080fd5b506103cd610748366004613580565b6000908152600b602052604090205460ff16151560011490565b34801561076e57600080fd5b5061047f611a23565b34801561078357600080fd5b5061047f611a55565b34801561079857600080fd5b506107ac6107a7366004613580565b611a94565b6040516001600160a01b0390911681526020016103a4565b3480156107d057600080fd5b5061039a6107df366004613580565b6000908152600e602052604090205490565b3480156107fd57600080fd5b506004546001600160a01b03166107ac565b34801561081b57600080fd5b506103f2611abe565b34801561083057600080fd5b5061047f61083f366004613580565b611acb565b34801561085057600080fd5b5061039a61085f366004613580565b6000908152600d602052604090205490565b34801561087d57600080fd5b5061047f61088c366004613aa8565b611b10565b61047f61089f366004613adf565b611b1f565b3480156108b057600080fd5b5061047f6108bf3660046134c3565b611d26565b3480156108d057600080fd5b5061039a60125481565b3480156108e657600080fd5b5061047f6108f5366004613b31565b611f45565b34801561090657600080fd5b5061047f610915366004613580565b612072565b34801561092657600080fd5b5061039a610935366004613580565b60009081526005602052604090205490565b61047f610955366004613580565b6120b7565b34801561096657600080fd5b506007546107ac906001600160a01b031681565b34801561098657600080fd5b506103cd610995366004613b4c565b612203565b3480156109a657600080fd5b5061047f6122ed565b3480156109bb57600080fd5b506010546103cd9060ff1681565b3480156109d557600080fd5b506103f2612347565b3480156109ea57600080fd5b506103cd6109f9366004613b8d565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b348015610a3357600080fd5b506103cd610a42366004613580565b6000908152600f602052604090205460ff16151560011490565b348015610a6857600080fd5b5061047f610a77366004613580565b612367565b61047f610a8a36600461385c565b612439565b348015610a9b57600080fd5b5061047f610aaa36600461385c565b6125fe565b348015610abb57600080fd5b5061047f610aca366004613bc0565b612698565b348015610adb57600080fd5b5061047f610aea366004613b31565b61277a565b60006001600160a01b038316610b605760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b1480610bb957506001600160e01b031982166303a24d0760e21b145b80610bd457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60138054610be790613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390613c24565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b505050505081565b600081815260056020526040902054606090610c965760405162461bcd60e51b8152600401610b5790613c5f565b60008281526015602052604090208054610caf90613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdb90613c24565b8015610d285780601f10610cfd57610100808354040283529160200191610d28565b820191906000526020600020905b815481529060010190602001808311610d0b57829003601f168201915b50505050509050919050565b600081815260056020526040812054610d5f5760405162461bcd60e51b8152600401610b5790613ca4565b5060009081526020819052604090205460ff9081161490565b600081815260056020526040812054610da35760405162461bcd60e51b8152600401610b5790613c5f565b5060009081526006602052604090205490565b6004546001600160a01b03163314610de05760405162461bcd60e51b8152600401610b5790613cdb565b600082815260056020526040902054610e0b5760405162461bcd60e51b8152600401610b5790613c5f565b60008281526015602090815260409091208251610e2a9284019061340e565b505050565b60098181548110610e3f57600080fd5b600091825260209091200154905081565b60005b8351811015610ee857600080858381518110610e7157610e71613d10565b60209081029190910181015182528101919091526040016000205460ff90811614610ed85760405162461bcd60e51b8152602060048201526017602482015276546f6b656e206973206e6f7420747261646561626c652160481b6044820152606401610b57565b610ee181613d3c565b9050610e53565b506001600160a01b038516331480610f055750610f0585336109f9565b610f6c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610b57565b610f798585858585612812565b5050505050565b6004546001600160a01b03163314610faa5760405162461bcd60e51b8152600401610b5790613cdb565b6000861161100e5760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e20537570706c7920436170206d757374206265206772656174657260448201526a103a3430b7103d32b9379760a91b6064820152608401610b57565b600085116110775760405162461bcd60e51b815260206004820152603060248201527f546f6b656e205472616e73616374696f6e20436170206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b6064820152608401610b57565b60008151116110d35760405162461bcd60e51b815260206004820152602260248201527f546f6b656e205552492063616e6e6f7420626520616e20656d7074792076616c604482015261756560f01b6064820152608401610b57565b60006110dd612a00565b905061117633826001601180546110f390613c24565b80601f016020809104026020016040519081016040528092919081815260200182805461111f90613c24565b801561116c5780601f106111415761010080835404028352916020019161116c565b820191906000526020600020905b81548152906001019060200180831161114f57829003601f168201915b5050505050612a16565b600081815260156020908152604090912083516111959285019061340e565b506111a0818861120e565b6111aa818661185c565b6111b481876113f7565b6000818152600b60205260409020805460ff1916851515179055826111da5760016111dd565b60ff5b6000828152602081905260409020805460ff191660ff92909216919091179055611205612b28565b50505050505050565b6004546001600160a01b031633146112385760405162461bcd60e51b8152600401610b5790613cdb565b6000828152600560205260409020546112635760405162461bcd60e51b8152600401610b5790613c5f565b60008281526006602052604090205481116112e65760405162461bcd60e51b815260206004820152603c60248201527f4e657720537570706c79204361702063616e206f6e6c7920626520677265617460448201527f6572207468616e2070726576696f757320737570706c79206361702e000000006064820152608401610b57565b60009182526006602052604090912055565b6004546001600160a01b031633146113225760405162461bcd60e51b8152600401610b5790613cdb565b60008281526005602052604090205461134d5760405162461bcd60e51b8152600401610b5790613c5f565b6000811161139d5760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67207175616e74697479206d757374206265206f7665722030006044820152606401610b57565b6113a682610d78565b6113c6826113c08560009081526005602052604090205490565b90612b3f565b11156113e45760405162461bcd60e51b8152600401610b5790613d57565b610e2a838383601180546110f390613c24565b6004546001600160a01b031633146114215760405162461bcd60e51b8152600401610b5790613cdb565b600081116114715760405162461bcd60e51b815260206004820152601f60248201527f5175616e74697479206d757374206265206d6f7265207468616e207a65726f006044820152606401610b57565b6000918252600d602052604090912055565b6004546001600160a01b031633146114ad5760405162461bcd60e51b8152600401610b5790613cdb565b6114b5612b4b565b565b6004546001600160a01b031633146114e15760405162461bcd60e51b8152600401610b5790613cdb565b60008181526020819052604090205460ff90811614156115435760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e20494420697320616c726561647920747261646561626c652100006044820152606401610b57565b60008181526005602052604090205461156e5760405162461bcd60e51b8152600401610b5790613ca4565b6000908152602081905260409020805460ff191660ff179055565b606081518351146115ee5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610b57565b600083516001600160401b0381111561160957611609613599565b604051908082528060200260200182016040528015611632578160200160208202803683370190505b50905060005b84518110156116aa5761167d85828151811061165657611656613d10565b602002602001015185838151811061167057611670613d10565b6020026020010151610aef565b82828151811061168f5761168f613d10565b60209081029190910101526116a381613d3c565b9050611638565b509392505050565b60008082116117035760405162461bcd60e51b815260206004820152601f60248201527f5175616e74697479206d757374206265206d6f7265207468616e207a65726f006044820152606401610b57565b6117238261171d856000908152600c602052604090205490565b90612be8565b9392505050565b6004546001600160a01b031633146117545760405162461bcd60e51b8152600401610b5790613cdb565b6000908152600b60205260409020805460ff19169055565b6004546001600160a01b031633146117965760405162461bcd60e51b8152600401610b5790613cdb565b6000908152600f60205260409020805460ff19169055565b6004546001600160a01b031633146117d85760405162461bcd60e51b8152600401610b5790613cdb565b60005b8351811015611822576118108482815181106117f9576117f9613d10565b60200260200101518484601180546110f390613c24565b8061181a81613d3c565b9150506117db565b50505050565b6004546001600160a01b031633146118525760405162461bcd60e51b8152600401610b5790613cdb565b6114b56000612bf4565b6004546001600160a01b031633146118865760405162461bcd60e51b8152600401610b5790613cdb565b6000918252600c602052604090912055565b600454600160a01b900460ff16156118c25760405162461bcd60e51b8152600401610b5790613d9c565b6000838152600560205260409020546118ed5760405162461bcd60e51b8152600401610b5790613c5f565b6118f683610d78565b61191160016113c08660009081526005602052604090205490565b111561192f5760405162461bcd60e51b8152600401610b5790613d57565b61193a8360016116b2565b34146119585760405162461bcd60e51b8152600401610b5790613dc6565b611976836000908152600f602052604090205460ff16151560011490565b801561199b575061199b836000908152600b602052604090205460ff16151560011490565b6119b75760405162461bcd60e51b8152600401610b5790613e0d565b6119c333848484612203565b611a0f5760405162461bcd60e51b815260206004820152601c60248201527f41646472657373206973206e6f7420696e20416c6c6f776c69737421000000006044820152606401610b57565b610e2a33846001601180546110f390613c24565b6004546001600160a01b03163314611a4d5760405162461bcd60e51b8152600401610b5790613cdb565b6114b5612c46565b6004546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610b5790613cdb565b60004711611a8c57600080fd5b6114b5612cab565b60088181548110611aa457600080fd5b6000918252602090912001546001600160a01b0316905081565b60148054610be790613c24565b6004546001600160a01b03163314611af55760405162461bcd60e51b8152600401610b5790613cdb565b6000908152600b60205260409020805460ff19166001179055565b611b1b338383612d39565b5050565b600454600160a01b900460ff1615611b495760405162461bcd60e51b8152600401610b5790613d9c565b600084815260056020526040902054611b745760405162461bcd60e51b8152600401610b5790613c5f565b6001831015611bc55760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e0000000000006044820152606401610b57565b6000848152600d6020526040902054831115611bf35760405162461bcd60e51b8152600401610b5790613e5f565b611bfc84610d78565b611c16846113c08760009081526005602052604090205490565b1115611c345760405162461bcd60e51b8152600401610b5790613d57565b611c3e84846116b2565b3414611c5c5760405162461bcd60e51b8152600401610b5790613dc6565b611c7a846000908152600f602052604090205460ff16151560011490565b8015611c9f5750611c9f846000908152600b602052604090205460ff16151560011490565b611cbb5760405162461bcd60e51b8152600401610b5790613e0d565b611cc733858484612203565b611d135760405162461bcd60e51b815260206004820152601c60248201527f41646472657373206973206e6f7420696e20416c6c6f776c69737421000000006044820152606401610b57565b611822338585601180546110f390613c24565b6004546001600160a01b03163314611d505760405162461bcd60e51b8152600401610b5790613cdb565b60008111611d5d57600080fd5b6040516370a0823160e01b8152306004820152829082906001600160a01b038316906370a082319060240160206040518083038186803b158015611da057600080fd5b505afa158015611db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd89190613ead565b1015611e325760405162461bcd60e51b815260206004820152602360248201527f436f6e747261637420646f6573206e6f74206f776e20656e6f75676820746f6b604482015262656e7360e81b6064820152608401610b57565b60005b600a5481101561182257816001600160a01b031663a9059cbb60088381548110611e6157611e61613d10565b9060005260206000200160009054906101000a90046001600160a01b0316606460098581548110611e9457611e94613d10565b906000526020600020015487611eaa9190613ec6565b611eb49190613ee5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611efa57600080fd5b505af1158015611f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f329190613f07565b5080611f3d81613d3c565b915050611e35565b6007546001600160a01b03163314611f9f5760405162461bcd60e51b815260206004820152601c60248201527f4f776e61626c653a2063616c6c6572206973206e6f742052414d5050000000006044820152606401610b57565b6007546001600160a01b03828116911614156120105760405162461bcd60e51b815260206004820152602a60248201527f52414d50503a204e65772052616d70702061646472657373206d75737420626560448201526908191a5999995c995b9d60b21b6064820152608401610b57565b600780546001600160a01b0319166001600160a01b0383161790556008805482919060009061204157612041613d10565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050565b6004546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610b5790613cdb565b6000908152600f60205260409020805460ff19166001179055565b600454600160a01b900460ff16156120e15760405162461bcd60e51b8152600401610b5790613d9c565b60008181526005602052604090205461210c5760405162461bcd60e51b8152600401610b5790613c5f565b61211581610d78565b61213060016113c08460009081526005602052604090205490565b111561214e5760405162461bcd60e51b8152600401610b5790613d57565b6121598160016116b2565b34146121775760405162461bcd60e51b8152600401610b5790613dc6565b612195816000908152600f602052604090205460ff16151560011490565b156121b25760405162461bcd60e51b8152600401610b5790613f24565b6121d0816000908152600b602052604090205460ff16151560011490565b6121ec5760405162461bcd60e51b8152600401610b5790613f91565b61220033826001601180546110f390613c24565b50565b6000838152600e602052604081205461225e5760405162461bcd60e51b815260206004820152601760248201527f4d65726b6c6520726f6f74206973206e6f7420736574210000000000000000006044820152606401610b57565b6040516bffffffffffffffffffffffff19606087901b1660208201526000906034016040516020818303038152906040528051906020012090506122e384848080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508a8152600e60205260409020549250859150612e1a9050565b9695505050505050565b6007546001600160a01b03163314611a7f5760405162461bcd60e51b815260206004820152601c60248201527f4f776e61626c653a2063616c6c6572206973206e6f742052414d5050000000006044820152606401610b57565b60606040518060800160405280605b815260200161426d605b9139905090565b6004546001600160a01b031633146123915760405162461bcd60e51b8152600401610b5790613cdb565b60008181526020819052604090205460ff16600114156123f35760405162461bcd60e51b815260206004820181905260248201527f546f6b656e20494420697320616c726561647920756e747261646561626c65216044820152606401610b57565b60008181526005602052604090205461241e5760405162461bcd60e51b8152600401610b5790613ca4565b6000908152602081905260409020805460ff19166001179055565b600454600160a01b900460ff16156124635760405162461bcd60e51b8152600401610b5790613d9c565b60008281526005602052604090205461248e5760405162461bcd60e51b8152600401610b5790613c5f565b60018110156124df5760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e0000000000006044820152606401610b57565b6000828152600d602052604090205481111561250d5760405162461bcd60e51b8152600401610b5790613e5f565b61251682610d78565b612530826113c08560009081526005602052604090205490565b111561254e5760405162461bcd60e51b8152600401610b5790613d57565b61255882826116b2565b34146125765760405162461bcd60e51b8152600401610b5790613dc6565b612594826000908152600f602052604090205460ff16151560011490565b156125b15760405162461bcd60e51b8152600401610b5790613f24565b6125cf826000908152600b602052604090205460ff16151560011490565b6125eb5760405162461bcd60e51b8152600401610b5790613f91565b611b1b338383601180546110f390613c24565b6004546001600160a01b031633146126285760405162461bcd60e51b8152600401610b5790613cdb565b6000828152600e60205260409020548114156126865760405162461bcd60e51b815260206004820152601e60248201527f4d65726b6c6520726f6f742077696c6c20626520756e6368616e6765642100006044820152606401610b57565b6000918252600e602052604090912055565b60008381526020819052604090205460ff908116146126f35760405162461bcd60e51b8152602060048201526017602482015276546f6b656e206973206e6f7420747261646561626c652160481b6044820152606401610b57565b6001600160a01b03851633148061270f575061270f85336109f9565b61276d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610b57565b610f798585858585612e30565b6004546001600160a01b031633146127a45760405162461bcd60e51b8152600401610b5790613cdb565b6001600160a01b0381166128095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b57565b61220081612bf4565b81518351146128745760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610b57565b6001600160a01b03841661289a5760405162461bcd60e51b8152600401610b5790613fd3565b336128a9818787878787612f48565b60005b84518110156129925760008582815181106128c9576128c9613d10565b6020026020010151905060008583815181106128e7576128e7613d10565b60209081029190910181015160008481526001835260408082206001600160a01b038e1683529093529190912054909150818110156129385760405162461bcd60e51b8152600401610b5790614018565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612977908490614062565b925050819055505050508061298b90613d3c565b90506128ac565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129e292919061407a565b60405180910390a46129f8818787878787612f80565b505050505050565b601254600090612a11906001612b3f565b905090565b6001600160a01b038416612a765760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610b57565b33612a9681600087612a87886130eb565b612a90886130eb565b87612f48565b60008481526001602090815260408083206001600160a01b038916845290915281208054859290612ac8908490614062565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f7981600087878787613136565b60128054906000612b3883613d3c565b9190505550565b60006117238284614062565b600454600160a01b900460ff16612b9b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610b57565b6004805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60006117238284613ec6565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600454600160a01b900460ff1615612c705760405162461bcd60e51b8152600401610b5790613d9c565b6004805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612bcb3390565b4760005b600a54811015611b1b57612d2760088281548110612ccf57612ccf613d10565b9060005260206000200160009054906101000a90046001600160a01b0316606460098481548110612d0257612d02613d10565b906000526020600020015485612d189190613ec6565b612d229190613ee5565b613200565b80612d3181613d3c565b915050612caf565b816001600160a01b0316836001600160a01b03161415612dad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610b57565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600082612e278584613296565b14949350505050565b6001600160a01b038416612e565760405162461bcd60e51b8152600401610b5790613fd3565b33612e66818787612a87886130eb565b60008481526001602090815260408083206001600160a01b038a16845290915290205483811015612ea95760405162461bcd60e51b8152600401610b5790614018565b60008581526001602090815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290612ee8908490614062565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611205828888888888613136565b600454600160a01b900460ff1615612f725760405162461bcd60e51b8152600401610b5790613d9c565b6129f8868686868686613302565b6001600160a01b0384163b156129f85760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612fc490899089908890889088906004016140a8565b602060405180830381600087803b158015612fde57600080fd5b505af192505050801561300e575060408051601f3d908101601f1916820190925261300b91810190614106565b60015b6130bb5761301a614123565b806308c379a01415613054575061302f61413f565b8061303a5750613056565b8060405162461bcd60e51b8152600401610b57919061356d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610b57565b6001600160e01b0319811663bc197c8160e01b146112055760405162461bcd60e51b8152600401610b57906141c8565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061312557613125613d10565b602090810291909101015292915050565b6001600160a01b0384163b156129f85760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061317a9089908990889088908890600401614210565b602060405180830381600087803b15801561319457600080fd5b505af19250505080156131c4575060408051601f3d908101601f191682019092526131c191810190614106565b60015b6131d05761301a614123565b6001600160e01b0319811663f23a6e6160e01b146112055760405162461bcd60e51b8152600401610b57906141c8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461324d576040519150601f19603f3d011682016040523d82523d6000602084013e613252565b606091505b5050905080610e2a5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b57565b600081815b84518110156116aa5760008582815181106132b8576132b8613d10565b602002602001015190508083116132de57600083815260208290526040902092506132ef565b600081815260208490526040902092505b50806132fa81613d3c565b91505061329b565b6001600160a01b0385166133895760005b83518110156133875782818151811061332e5761332e613d10565b60200260200101516005600086848151811061334c5761334c613d10565b6020026020010151815260200190815260200160002060008282546133719190614062565b90915550613380905081613d3c565b9050613313565b505b6001600160a01b0384166129f85760005b8351811015611205578281815181106133b5576133b5613d10565b6020026020010151600560008684815181106133d3576133d3613d10565b6020026020010151815260200190815260200160002060008282546133f89190614255565b90915550613407905081613d3c565b905061339a565b82805461341a90613c24565b90600052602060002090601f01602090048101928261343c5760008555613482565b82601f1061345557805160ff1916838001178555613482565b82800160010185558215613482579182015b82811115613482578251825591602001919060010190613467565b5061348e929150613492565b5090565b5b8082111561348e5760008155600101613493565b80356001600160a01b03811681146134be57600080fd5b919050565b600080604083850312156134d657600080fd5b6134df836134a7565b946020939093013593505050565b6001600160e01b03198116811461220057600080fd5b60006020828403121561351557600080fd5b8135611723816134ed565b6000815180845260005b818110156135465760208185018101518683018201520161352a565b81811115613558576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006117236020830184613520565b60006020828403121561359257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156135d4576135d4613599565b6040525050565b600082601f8301126135ec57600080fd5b81356001600160401b0381111561360557613605613599565b60405161361c601f8301601f1916602001826135af565b81815284602083860101111561363157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561366157600080fd5b8235915060208301356001600160401b0381111561367e57600080fd5b61368a858286016135db565b9150509250929050565b60006001600160401b038211156136ad576136ad613599565b5060051b60200190565b600082601f8301126136c857600080fd5b813560206136d582613694565b6040516136e282826135af565b83815260059390931b850182019282810191508684111561370257600080fd5b8286015b8481101561371d5780358352918301918301613706565b509695505050505050565b600080600080600060a0868803121561374057600080fd5b613749866134a7565b9450613757602087016134a7565b935060408601356001600160401b038082111561377357600080fd5b61377f89838a016136b7565b9450606088013591508082111561379557600080fd5b6137a189838a016136b7565b935060808801359150808211156137b757600080fd5b506137c4888289016135db565b9150509295509295909350565b801515811461220057600080fd5b60008060008060008060c087890312156137f857600080fd5b8635955060208701359450604087013593506060870135613818816137d1565b92506080870135613828816137d1565b915060a08701356001600160401b0381111561384357600080fd5b61384f89828a016135db565b9150509295509295509295565b6000806040838503121561386f57600080fd5b50508035926020909101359150565b60008060006060848603121561389357600080fd5b61389c846134a7565b95602085013595506040909401359392505050565b600082601f8301126138c257600080fd5b813560206138cf82613694565b6040516138dc82826135af565b83815260059390931b85018201928281019150868411156138fc57600080fd5b8286015b8481101561371d57613911816134a7565b8352918301918301613900565b6000806040838503121561393157600080fd5b82356001600160401b038082111561394857600080fd5b613954868387016138b1565b9350602085013591508082111561396a57600080fd5b5061368a858286016136b7565b600081518084526020808501945080840160005b838110156139a75781518752958201959082019060010161398b565b509495945050505050565b6020815260006117236020830184613977565b6000806000606084860312156139da57600080fd5b83356001600160401b038111156139f057600080fd5b6139fc868287016138b1565b9660208601359650604090950135949350505050565b60008083601f840112613a2457600080fd5b5081356001600160401b03811115613a3b57600080fd5b6020830191508360208260051b8501011115613a5657600080fd5b9250929050565b600080600060408486031215613a7257600080fd5b8335925060208401356001600160401b03811115613a8f57600080fd5b613a9b86828701613a12565b9497909650939450505050565b60008060408385031215613abb57600080fd5b613ac4836134a7565b91506020830135613ad4816137d1565b809150509250929050565b60008060008060608587031215613af557600080fd5b843593506020850135925060408501356001600160401b03811115613b1957600080fd5b613b2587828801613a12565b95989497509550505050565b600060208284031215613b4357600080fd5b611723826134a7565b60008060008060608587031215613b6257600080fd5b613b6b856134a7565b93506020850135925060408501356001600160401b03811115613b1957600080fd5b60008060408385031215613ba057600080fd5b613ba9836134a7565b9150613bb7602084016134a7565b90509250929050565b600080600080600060a08688031215613bd857600080fd5b613be1866134a7565b9450613bef602087016134a7565b9350604086013592506060860135915060808601356001600160401b03811115613c1857600080fd5b6137c4888289016135db565b600181811c90821680613c3857607f821691505b60208210811415613c5957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f4552433732315472616461626c65237572693a204e4f4e4558495354454e545f6040820152642a27a5a2a760d91b606082015260800190565b60208082526018908201527f546f6b656e20494420646f6573206e6f74206578697374210000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613d5057613d50613d26565b5060010190565b60208082526025908201527f43616e6e6f74206d696e74206f76657220737570706c7920636170206f6620746040820152646f6b656e2160d81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526027908201527f56616c7565206e6565647320746f2062652065786163746c7920746865206d696040820152666e74206665652160c81b606082015260800190565b60208082526032908201527f416c6c6f776c697374204d6f646520616e64204d696e74696e67206d75737420604082015271189948195b98589b1959081d1bc81b5a5b9d60721b606082015260800190565b6020808252602e908201527f43616e6e6f74206d696e74206d6f7265207468616e206d6178206d696e74207060408201526d32b9103a3930b739b0b1ba34b7b760911b606082015260800190565b600060208284031215613ebf57600080fd5b5051919050565b6000816000190483118215151615613ee057613ee0613d26565b500290565b600082613f0257634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613f1957600080fd5b8151611723816137d1565b60208082526047908201527f5075626c6963206d696e74696e67206973206e6f7420656e61626c656420776860408201527f696c6520636f6e747261637420697320696e20616c6c6f776c697374206f6e6c6060820152663c9036b7b2329760c91b608082015260a00190565b60208082526022908201527f4d696e74696e6720666f72207468697320746f6b656e206973206e6f74206f7060408201526132b760f11b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6000821982111561407557614075613d26565b500190565b60408152600061408d6040830185613977565b828103602084015261409f8185613977565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906140d490830186613977565b82810360608401526140e68186613977565b905082810360808401526140fa8185613520565b98975050505050505050565b60006020828403121561411857600080fd5b8151611723816134ed565b600060033d111561413c5760046000803e5060005160e01c5b90565b600060443d101561414d5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561417c57505050505090565b82850191508151818111156141945750505050505090565b843d87010160208285010111156141ae5750505050505090565b6141bd602082860101876135af565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061424a90830184613520565b979650505050505050565b60008282101561426757614267613d26565b50039056fe68747470733a2f2f75732d63656e7472616c312d6e66742d72616d70702e636c6f756466756e6374696f6e732e6e65742f6170702f594a57387a6742694178426f43736254655633512f636f6e74726163742d6d65746164617461a2646970667358221220a9512ade5a1689cd26c950ae6c8f43c3af5bfc5dfdfa1c16216fc30e55d90b8a64736f6c634300080900330000000000000000000000002e0283bafba91ce68f151f88a3a27bb7881d4955

Deployed Bytecode

0x6080604052600436106103755760003560e01c806383e083c3116101d1578063bc1f0ab511610102578063e8a3d485116100a0578063f0ab02ac1161006f578063f0ab02ac14610a7c578063f1e3311514610a8f578063f242432a14610aaf578063f2fde38b14610acf57600080fd5b8063e8a3d485146109c9578063e985e9c5146109de578063eb238e8114610a27578063eec8e90814610a5c57600080fd5b8063c5815c41116100dc578063c5815c411461095a578063d2de022f1461097a578063dcd4aa8b1461099a578063e6c6990a146109af57600080fd5b8063bc1f0ab5146108fa578063bd85b0391461091a578063be8c31b81461094757600080fd5b80639b1926471161016f578063afb0485f11610149578063afb0485f14610891578063b40ebceb146108a4578063bb62115e146108c4578063bbd8556b146108da57600080fd5b80639b192647146108245780639e490e2414610844578063a22cb4651461087157600080fd5b8063891bbe73116101ab578063891bbe731461078c5780638c04b8e9146107c45780638da5cb5b146107f157806395d89b411461080f57600080fd5b806383e083c31461072d5780638456cb5914610762578063853828b61461077757600080fd5b80633e511168116102ab5780635cf4ee91116102495780636c6acd4d116102235780636c6acd4d146106c5578063715018a6146106e55780637aa9c33f146106fa578063837103e61461071a57600080fd5b80635cf4ee9114610665578063628d35c9146106855780636586375b146106a557600080fd5b80634d09ae6d116102855780634d09ae6d146105bd5780634e1273f4146105ea5780634f558e79146106175780635c975abb1461064657600080fd5b80633e511168146105685780633f4ba83a146105885780634790c9251461059d57600080fd5b8063286c8137116103185780633832e870116102f25780633832e870146104e157806338b903331461050157806338df41ac146105325780633e07311c1461055257600080fd5b8063286c8137146104815780632eb2c2d6146104a15780633449f8ca146104c157600080fd5b80630e89341c116103545780630e89341c146103ff578063134902fd1461041f578063143727c91461043f578063162094c41461045f57600080fd5b8062fdd58e1461037a57806301ffc9a7146103ad57806306fdde03146103dd575b600080fd5b34801561038657600080fd5b5061039a6103953660046134c3565b610aef565b6040519081526020015b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004613503565b610b88565b60405190151581526020016103a4565b3480156103e957600080fd5b506103f2610bda565b6040516103a4919061356d565b34801561040b57600080fd5b506103f261041a366004613580565b610c68565b34801561042b57600080fd5b506103cd61043a366004613580565b610d34565b34801561044b57600080fd5b5061039a61045a366004613580565b610d78565b34801561046b57600080fd5b5061047f61047a36600461364e565b610db6565b005b34801561048d57600080fd5b5061039a61049c366004613580565b610e2f565b3480156104ad57600080fd5b5061047f6104bc366004613728565b610e50565b3480156104cd57600080fd5b5061047f6104dc3660046137df565b610f80565b3480156104ed57600080fd5b5061047f6104fc36600461385c565b61120e565b34801561050d57600080fd5b5060105461052090610100900460ff1681565b60405160ff90911681526020016103a4565b34801561053e57600080fd5b5061047f61054d36600461387e565b6112f8565b34801561055e57600080fd5b5061039a600a5481565b34801561057457600080fd5b5061047f61058336600461385c565b6113f7565b34801561059457600080fd5b5061047f611483565b3480156105a957600080fd5b5061047f6105b8366004613580565b6114b7565b3480156105c957600080fd5b5061039a6105d8366004613580565b6000908152600c602052604090205490565b3480156105f657600080fd5b5061060a61060536600461391e565b611589565b6040516103a491906139b2565b34801561062357600080fd5b506103cd610632366004613580565b600090815260056020526040902054151590565b34801561065257600080fd5b50600454600160a01b900460ff166103cd565b34801561067157600080fd5b5061039a61068036600461385c565b6116b2565b34801561069157600080fd5b5061047f6106a0366004613580565b61172a565b3480156106b157600080fd5b5061047f6106c0366004613580565b61176c565b3480156106d157600080fd5b5061047f6106e03660046139c5565b6117ae565b3480156106f157600080fd5b5061047f611828565b34801561070657600080fd5b5061047f61071536600461385c565b61185c565b61047f610728366004613a5d565b611898565b34801561073957600080fd5b506103cd610748366004613580565b6000908152600b602052604090205460ff16151560011490565b34801561076e57600080fd5b5061047f611a23565b34801561078357600080fd5b5061047f611a55565b34801561079857600080fd5b506107ac6107a7366004613580565b611a94565b6040516001600160a01b0390911681526020016103a4565b3480156107d057600080fd5b5061039a6107df366004613580565b6000908152600e602052604090205490565b3480156107fd57600080fd5b506004546001600160a01b03166107ac565b34801561081b57600080fd5b506103f2611abe565b34801561083057600080fd5b5061047f61083f366004613580565b611acb565b34801561085057600080fd5b5061039a61085f366004613580565b6000908152600d602052604090205490565b34801561087d57600080fd5b5061047f61088c366004613aa8565b611b10565b61047f61089f366004613adf565b611b1f565b3480156108b057600080fd5b5061047f6108bf3660046134c3565b611d26565b3480156108d057600080fd5b5061039a60125481565b3480156108e657600080fd5b5061047f6108f5366004613b31565b611f45565b34801561090657600080fd5b5061047f610915366004613580565b612072565b34801561092657600080fd5b5061039a610935366004613580565b60009081526005602052604090205490565b61047f610955366004613580565b6120b7565b34801561096657600080fd5b506007546107ac906001600160a01b031681565b34801561098657600080fd5b506103cd610995366004613b4c565b612203565b3480156109a657600080fd5b5061047f6122ed565b3480156109bb57600080fd5b506010546103cd9060ff1681565b3480156109d557600080fd5b506103f2612347565b3480156109ea57600080fd5b506103cd6109f9366004613b8d565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b348015610a3357600080fd5b506103cd610a42366004613580565b6000908152600f602052604090205460ff16151560011490565b348015610a6857600080fd5b5061047f610a77366004613580565b612367565b61047f610a8a36600461385c565b612439565b348015610a9b57600080fd5b5061047f610aaa36600461385c565b6125fe565b348015610abb57600080fd5b5061047f610aca366004613bc0565b612698565b348015610adb57600080fd5b5061047f610aea366004613b31565b61277a565b60006001600160a01b038316610b605760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b1480610bb957506001600160e01b031982166303a24d0760e21b145b80610bd457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60138054610be790613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390613c24565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b505050505081565b600081815260056020526040902054606090610c965760405162461bcd60e51b8152600401610b5790613c5f565b60008281526015602052604090208054610caf90613c24565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdb90613c24565b8015610d285780601f10610cfd57610100808354040283529160200191610d28565b820191906000526020600020905b815481529060010190602001808311610d0b57829003601f168201915b50505050509050919050565b600081815260056020526040812054610d5f5760405162461bcd60e51b8152600401610b5790613ca4565b5060009081526020819052604090205460ff9081161490565b600081815260056020526040812054610da35760405162461bcd60e51b8152600401610b5790613c5f565b5060009081526006602052604090205490565b6004546001600160a01b03163314610de05760405162461bcd60e51b8152600401610b5790613cdb565b600082815260056020526040902054610e0b5760405162461bcd60e51b8152600401610b5790613c5f565b60008281526015602090815260409091208251610e2a9284019061340e565b505050565b60098181548110610e3f57600080fd5b600091825260209091200154905081565b60005b8351811015610ee857600080858381518110610e7157610e71613d10565b60209081029190910181015182528101919091526040016000205460ff90811614610ed85760405162461bcd60e51b8152602060048201526017602482015276546f6b656e206973206e6f7420747261646561626c652160481b6044820152606401610b57565b610ee181613d3c565b9050610e53565b506001600160a01b038516331480610f055750610f0585336109f9565b610f6c5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610b57565b610f798585858585612812565b5050505050565b6004546001600160a01b03163314610faa5760405162461bcd60e51b8152600401610b5790613cdb565b6000861161100e5760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e20537570706c7920436170206d757374206265206772656174657260448201526a103a3430b7103d32b9379760a91b6064820152608401610b57565b600085116110775760405162461bcd60e51b815260206004820152603060248201527f546f6b656e205472616e73616374696f6e20436170206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b6064820152608401610b57565b60008151116110d35760405162461bcd60e51b815260206004820152602260248201527f546f6b656e205552492063616e6e6f7420626520616e20656d7074792076616c604482015261756560f01b6064820152608401610b57565b60006110dd612a00565b905061117633826001601180546110f390613c24565b80601f016020809104026020016040519081016040528092919081815260200182805461111f90613c24565b801561116c5780601f106111415761010080835404028352916020019161116c565b820191906000526020600020905b81548152906001019060200180831161114f57829003601f168201915b5050505050612a16565b600081815260156020908152604090912083516111959285019061340e565b506111a0818861120e565b6111aa818661185c565b6111b481876113f7565b6000818152600b60205260409020805460ff1916851515179055826111da5760016111dd565b60ff5b6000828152602081905260409020805460ff191660ff92909216919091179055611205612b28565b50505050505050565b6004546001600160a01b031633146112385760405162461bcd60e51b8152600401610b5790613cdb565b6000828152600560205260409020546112635760405162461bcd60e51b8152600401610b5790613c5f565b60008281526006602052604090205481116112e65760405162461bcd60e51b815260206004820152603c60248201527f4e657720537570706c79204361702063616e206f6e6c7920626520677265617460448201527f6572207468616e2070726576696f757320737570706c79206361702e000000006064820152608401610b57565b60009182526006602052604090912055565b6004546001600160a01b031633146113225760405162461bcd60e51b8152600401610b5790613cdb565b60008281526005602052604090205461134d5760405162461bcd60e51b8152600401610b5790613c5f565b6000811161139d5760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e67207175616e74697479206d757374206265206f7665722030006044820152606401610b57565b6113a682610d78565b6113c6826113c08560009081526005602052604090205490565b90612b3f565b11156113e45760405162461bcd60e51b8152600401610b5790613d57565b610e2a838383601180546110f390613c24565b6004546001600160a01b031633146114215760405162461bcd60e51b8152600401610b5790613cdb565b600081116114715760405162461bcd60e51b815260206004820152601f60248201527f5175616e74697479206d757374206265206d6f7265207468616e207a65726f006044820152606401610b57565b6000918252600d602052604090912055565b6004546001600160a01b031633146114ad5760405162461bcd60e51b8152600401610b5790613cdb565b6114b5612b4b565b565b6004546001600160a01b031633146114e15760405162461bcd60e51b8152600401610b5790613cdb565b60008181526020819052604090205460ff90811614156115435760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e20494420697320616c726561647920747261646561626c652100006044820152606401610b57565b60008181526005602052604090205461156e5760405162461bcd60e51b8152600401610b5790613ca4565b6000908152602081905260409020805460ff191660ff179055565b606081518351146115ee5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610b57565b600083516001600160401b0381111561160957611609613599565b604051908082528060200260200182016040528015611632578160200160208202803683370190505b50905060005b84518110156116aa5761167d85828151811061165657611656613d10565b602002602001015185838151811061167057611670613d10565b6020026020010151610aef565b82828151811061168f5761168f613d10565b60209081029190910101526116a381613d3c565b9050611638565b509392505050565b60008082116117035760405162461bcd60e51b815260206004820152601f60248201527f5175616e74697479206d757374206265206d6f7265207468616e207a65726f006044820152606401610b57565b6117238261171d856000908152600c602052604090205490565b90612be8565b9392505050565b6004546001600160a01b031633146117545760405162461bcd60e51b8152600401610b5790613cdb565b6000908152600b60205260409020805460ff19169055565b6004546001600160a01b031633146117965760405162461bcd60e51b8152600401610b5790613cdb565b6000908152600f60205260409020805460ff19169055565b6004546001600160a01b031633146117d85760405162461bcd60e51b8152600401610b5790613cdb565b60005b8351811015611822576118108482815181106117f9576117f9613d10565b60200260200101518484601180546110f390613c24565b8061181a81613d3c565b9150506117db565b50505050565b6004546001600160a01b031633146118525760405162461bcd60e51b8152600401610b5790613cdb565b6114b56000612bf4565b6004546001600160a01b031633146118865760405162461bcd60e51b8152600401610b5790613cdb565b6000918252600c602052604090912055565b600454600160a01b900460ff16156118c25760405162461bcd60e51b8152600401610b5790613d9c565b6000838152600560205260409020546118ed5760405162461bcd60e51b8152600401610b5790613c5f565b6118f683610d78565b61191160016113c08660009081526005602052604090205490565b111561192f5760405162461bcd60e51b8152600401610b5790613d57565b61193a8360016116b2565b34146119585760405162461bcd60e51b8152600401610b5790613dc6565b611976836000908152600f602052604090205460ff16151560011490565b801561199b575061199b836000908152600b602052604090205460ff16151560011490565b6119b75760405162461bcd60e51b8152600401610b5790613e0d565b6119c333848484612203565b611a0f5760405162461bcd60e51b815260206004820152601c60248201527f41646472657373206973206e6f7420696e20416c6c6f776c69737421000000006044820152606401610b57565b610e2a33846001601180546110f390613c24565b6004546001600160a01b03163314611a4d5760405162461bcd60e51b8152600401610b5790613cdb565b6114b5612c46565b6004546001600160a01b03163314611a7f5760405162461bcd60e51b8152600401610b5790613cdb565b60004711611a8c57600080fd5b6114b5612cab565b60088181548110611aa457600080fd5b6000918252602090912001546001600160a01b0316905081565b60148054610be790613c24565b6004546001600160a01b03163314611af55760405162461bcd60e51b8152600401610b5790613cdb565b6000908152600b60205260409020805460ff19166001179055565b611b1b338383612d39565b5050565b600454600160a01b900460ff1615611b495760405162461bcd60e51b8152600401610b5790613d9c565b600084815260056020526040902054611b745760405162461bcd60e51b8152600401610b5790613c5f565b6001831015611bc55760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e0000000000006044820152606401610b57565b6000848152600d6020526040902054831115611bf35760405162461bcd60e51b8152600401610b5790613e5f565b611bfc84610d78565b611c16846113c08760009081526005602052604090205490565b1115611c345760405162461bcd60e51b8152600401610b5790613d57565b611c3e84846116b2565b3414611c5c5760405162461bcd60e51b8152600401610b5790613dc6565b611c7a846000908152600f602052604090205460ff16151560011490565b8015611c9f5750611c9f846000908152600b602052604090205460ff16151560011490565b611cbb5760405162461bcd60e51b8152600401610b5790613e0d565b611cc733858484612203565b611d135760405162461bcd60e51b815260206004820152601c60248201527f41646472657373206973206e6f7420696e20416c6c6f776c69737421000000006044820152606401610b57565b611822338585601180546110f390613c24565b6004546001600160a01b03163314611d505760405162461bcd60e51b8152600401610b5790613cdb565b60008111611d5d57600080fd5b6040516370a0823160e01b8152306004820152829082906001600160a01b038316906370a082319060240160206040518083038186803b158015611da057600080fd5b505afa158015611db4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd89190613ead565b1015611e325760405162461bcd60e51b815260206004820152602360248201527f436f6e747261637420646f6573206e6f74206f776e20656e6f75676820746f6b604482015262656e7360e81b6064820152608401610b57565b60005b600a5481101561182257816001600160a01b031663a9059cbb60088381548110611e6157611e61613d10565b9060005260206000200160009054906101000a90046001600160a01b0316606460098581548110611e9457611e94613d10565b906000526020600020015487611eaa9190613ec6565b611eb49190613ee5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611efa57600080fd5b505af1158015611f0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f329190613f07565b5080611f3d81613d3c565b915050611e35565b6007546001600160a01b03163314611f9f5760405162461bcd60e51b815260206004820152601c60248201527f4f776e61626c653a2063616c6c6572206973206e6f742052414d5050000000006044820152606401610b57565b6007546001600160a01b03828116911614156120105760405162461bcd60e51b815260206004820152602a60248201527f52414d50503a204e65772052616d70702061646472657373206d75737420626560448201526908191a5999995c995b9d60b21b6064820152608401610b57565b600780546001600160a01b0319166001600160a01b0383161790556008805482919060009061204157612041613d10565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050565b6004546001600160a01b0316331461209c5760405162461bcd60e51b8152600401610b5790613cdb565b6000908152600f60205260409020805460ff19166001179055565b600454600160a01b900460ff16156120e15760405162461bcd60e51b8152600401610b5790613d9c565b60008181526005602052604090205461210c5760405162461bcd60e51b8152600401610b5790613c5f565b61211581610d78565b61213060016113c08460009081526005602052604090205490565b111561214e5760405162461bcd60e51b8152600401610b5790613d57565b6121598160016116b2565b34146121775760405162461bcd60e51b8152600401610b5790613dc6565b612195816000908152600f602052604090205460ff16151560011490565b156121b25760405162461bcd60e51b8152600401610b5790613f24565b6121d0816000908152600b602052604090205460ff16151560011490565b6121ec5760405162461bcd60e51b8152600401610b5790613f91565b61220033826001601180546110f390613c24565b50565b6000838152600e602052604081205461225e5760405162461bcd60e51b815260206004820152601760248201527f4d65726b6c6520726f6f74206973206e6f7420736574210000000000000000006044820152606401610b57565b6040516bffffffffffffffffffffffff19606087901b1660208201526000906034016040516020818303038152906040528051906020012090506122e384848080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508a8152600e60205260409020549250859150612e1a9050565b9695505050505050565b6007546001600160a01b03163314611a7f5760405162461bcd60e51b815260206004820152601c60248201527f4f776e61626c653a2063616c6c6572206973206e6f742052414d5050000000006044820152606401610b57565b60606040518060800160405280605b815260200161426d605b9139905090565b6004546001600160a01b031633146123915760405162461bcd60e51b8152600401610b5790613cdb565b60008181526020819052604090205460ff16600114156123f35760405162461bcd60e51b815260206004820181905260248201527f546f6b656e20494420697320616c726561647920756e747261646561626c65216044820152606401610b57565b60008181526005602052604090205461241e5760405162461bcd60e51b8152600401610b5790613ca4565b6000908152602081905260409020805460ff19166001179055565b600454600160a01b900460ff16156124635760405162461bcd60e51b8152600401610b5790613d9c565b60008281526005602052604090205461248e5760405162461bcd60e51b8152600401610b5790613c5f565b60018110156124df5760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d696e74206174206c65617374203120746f6b656e0000000000006044820152606401610b57565b6000828152600d602052604090205481111561250d5760405162461bcd60e51b8152600401610b5790613e5f565b61251682610d78565b612530826113c08560009081526005602052604090205490565b111561254e5760405162461bcd60e51b8152600401610b5790613d57565b61255882826116b2565b34146125765760405162461bcd60e51b8152600401610b5790613dc6565b612594826000908152600f602052604090205460ff16151560011490565b156125b15760405162461bcd60e51b8152600401610b5790613f24565b6125cf826000908152600b602052604090205460ff16151560011490565b6125eb5760405162461bcd60e51b8152600401610b5790613f91565b611b1b338383601180546110f390613c24565b6004546001600160a01b031633146126285760405162461bcd60e51b8152600401610b5790613cdb565b6000828152600e60205260409020548114156126865760405162461bcd60e51b815260206004820152601e60248201527f4d65726b6c6520726f6f742077696c6c20626520756e6368616e6765642100006044820152606401610b57565b6000918252600e602052604090912055565b60008381526020819052604090205460ff908116146126f35760405162461bcd60e51b8152602060048201526017602482015276546f6b656e206973206e6f7420747261646561626c652160481b6044820152606401610b57565b6001600160a01b03851633148061270f575061270f85336109f9565b61276d5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610b57565b610f798585858585612e30565b6004546001600160a01b031633146127a45760405162461bcd60e51b8152600401610b5790613cdb565b6001600160a01b0381166128095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b57565b61220081612bf4565b81518351146128745760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610b57565b6001600160a01b03841661289a5760405162461bcd60e51b8152600401610b5790613fd3565b336128a9818787878787612f48565b60005b84518110156129925760008582815181106128c9576128c9613d10565b6020026020010151905060008583815181106128e7576128e7613d10565b60209081029190910181015160008481526001835260408082206001600160a01b038e1683529093529190912054909150818110156129385760405162461bcd60e51b8152600401610b5790614018565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612977908490614062565b925050819055505050508061298b90613d3c565b90506128ac565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129e292919061407a565b60405180910390a46129f8818787878787612f80565b505050505050565b601254600090612a11906001612b3f565b905090565b6001600160a01b038416612a765760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610b57565b33612a9681600087612a87886130eb565b612a90886130eb565b87612f48565b60008481526001602090815260408083206001600160a01b038916845290915281208054859290612ac8908490614062565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f7981600087878787613136565b60128054906000612b3883613d3c565b9190505550565b60006117238284614062565b600454600160a01b900460ff16612b9b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610b57565b6004805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60006117238284613ec6565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600454600160a01b900460ff1615612c705760405162461bcd60e51b8152600401610b5790613d9c565b6004805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612bcb3390565b4760005b600a54811015611b1b57612d2760088281548110612ccf57612ccf613d10565b9060005260206000200160009054906101000a90046001600160a01b0316606460098481548110612d0257612d02613d10565b906000526020600020015485612d189190613ec6565b612d229190613ee5565b613200565b80612d3181613d3c565b915050612caf565b816001600160a01b0316836001600160a01b03161415612dad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610b57565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600082612e278584613296565b14949350505050565b6001600160a01b038416612e565760405162461bcd60e51b8152600401610b5790613fd3565b33612e66818787612a87886130eb565b60008481526001602090815260408083206001600160a01b038a16845290915290205483811015612ea95760405162461bcd60e51b8152600401610b5790614018565b60008581526001602090815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290612ee8908490614062565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611205828888888888613136565b600454600160a01b900460ff1615612f725760405162461bcd60e51b8152600401610b5790613d9c565b6129f8868686868686613302565b6001600160a01b0384163b156129f85760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190612fc490899089908890889088906004016140a8565b602060405180830381600087803b158015612fde57600080fd5b505af192505050801561300e575060408051601f3d908101601f1916820190925261300b91810190614106565b60015b6130bb5761301a614123565b806308c379a01415613054575061302f61413f565b8061303a5750613056565b8060405162461bcd60e51b8152600401610b57919061356d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610b57565b6001600160e01b0319811663bc197c8160e01b146112055760405162461bcd60e51b8152600401610b57906141c8565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061312557613125613d10565b602090810291909101015292915050565b6001600160a01b0384163b156129f85760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061317a9089908990889088908890600401614210565b602060405180830381600087803b15801561319457600080fd5b505af19250505080156131c4575060408051601f3d908101601f191682019092526131c191810190614106565b60015b6131d05761301a614123565b6001600160e01b0319811663f23a6e6160e01b146112055760405162461bcd60e51b8152600401610b57906141c8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461324d576040519150601f19603f3d011682016040523d82523d6000602084013e613252565b606091505b5050905080610e2a5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b57565b600081815b84518110156116aa5760008582815181106132b8576132b8613d10565b602002602001015190508083116132de57600083815260208290526040902092506132ef565b600081815260208490526040902092505b50806132fa81613d3c565b91505061329b565b6001600160a01b0385166133895760005b83518110156133875782818151811061332e5761332e613d10565b60200260200101516005600086848151811061334c5761334c613d10565b6020026020010151815260200190815260200160002060008282546133719190614062565b90915550613380905081613d3c565b9050613313565b505b6001600160a01b0384166129f85760005b8351811015611205578281815181106133b5576133b5613d10565b6020026020010151600560008684815181106133d3576133d3613d10565b6020026020010151815260200190815260200160002060008282546133f89190614255565b90915550613407905081613d3c565b905061339a565b82805461341a90613c24565b90600052602060002090601f01602090048101928261343c5760008555613482565b82601f1061345557805160ff1916838001178555613482565b82800160010185558215613482579182015b82811115613482578251825591602001919060010190613467565b5061348e929150613492565b5090565b5b8082111561348e5760008155600101613493565b80356001600160a01b03811681146134be57600080fd5b919050565b600080604083850312156134d657600080fd5b6134df836134a7565b946020939093013593505050565b6001600160e01b03198116811461220057600080fd5b60006020828403121561351557600080fd5b8135611723816134ed565b6000815180845260005b818110156135465760208185018101518683018201520161352a565b81811115613558576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006117236020830184613520565b60006020828403121561359257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156135d4576135d4613599565b6040525050565b600082601f8301126135ec57600080fd5b81356001600160401b0381111561360557613605613599565b60405161361c601f8301601f1916602001826135af565b81815284602083860101111561363157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561366157600080fd5b8235915060208301356001600160401b0381111561367e57600080fd5b61368a858286016135db565b9150509250929050565b60006001600160401b038211156136ad576136ad613599565b5060051b60200190565b600082601f8301126136c857600080fd5b813560206136d582613694565b6040516136e282826135af565b83815260059390931b850182019282810191508684111561370257600080fd5b8286015b8481101561371d5780358352918301918301613706565b509695505050505050565b600080600080600060a0868803121561374057600080fd5b613749866134a7565b9450613757602087016134a7565b935060408601356001600160401b038082111561377357600080fd5b61377f89838a016136b7565b9450606088013591508082111561379557600080fd5b6137a189838a016136b7565b935060808801359150808211156137b757600080fd5b506137c4888289016135db565b9150509295509295909350565b801515811461220057600080fd5b60008060008060008060c087890312156137f857600080fd5b8635955060208701359450604087013593506060870135613818816137d1565b92506080870135613828816137d1565b915060a08701356001600160401b0381111561384357600080fd5b61384f89828a016135db565b9150509295509295509295565b6000806040838503121561386f57600080fd5b50508035926020909101359150565b60008060006060848603121561389357600080fd5b61389c846134a7565b95602085013595506040909401359392505050565b600082601f8301126138c257600080fd5b813560206138cf82613694565b6040516138dc82826135af565b83815260059390931b85018201928281019150868411156138fc57600080fd5b8286015b8481101561371d57613911816134a7565b8352918301918301613900565b6000806040838503121561393157600080fd5b82356001600160401b038082111561394857600080fd5b613954868387016138b1565b9350602085013591508082111561396a57600080fd5b5061368a858286016136b7565b600081518084526020808501945080840160005b838110156139a75781518752958201959082019060010161398b565b509495945050505050565b6020815260006117236020830184613977565b6000806000606084860312156139da57600080fd5b83356001600160401b038111156139f057600080fd5b6139fc868287016138b1565b9660208601359650604090950135949350505050565b60008083601f840112613a2457600080fd5b5081356001600160401b03811115613a3b57600080fd5b6020830191508360208260051b8501011115613a5657600080fd5b9250929050565b600080600060408486031215613a7257600080fd5b8335925060208401356001600160401b03811115613a8f57600080fd5b613a9b86828701613a12565b9497909650939450505050565b60008060408385031215613abb57600080fd5b613ac4836134a7565b91506020830135613ad4816137d1565b809150509250929050565b60008060008060608587031215613af557600080fd5b843593506020850135925060408501356001600160401b03811115613b1957600080fd5b613b2587828801613a12565b95989497509550505050565b600060208284031215613b4357600080fd5b611723826134a7565b60008060008060608587031215613b6257600080fd5b613b6b856134a7565b93506020850135925060408501356001600160401b03811115613b1957600080fd5b60008060408385031215613ba057600080fd5b613ba9836134a7565b9150613bb7602084016134a7565b90509250929050565b600080600080600060a08688031215613bd857600080fd5b613be1866134a7565b9450613bef602087016134a7565b9350604086013592506060860135915060808601356001600160401b03811115613c1857600080fd5b6137c4888289016135db565b600181811c90821680613c3857607f821691505b60208210811415613c5957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f4552433732315472616461626c65237572693a204e4f4e4558495354454e545f6040820152642a27a5a2a760d91b606082015260800190565b60208082526018908201527f546f6b656e20494420646f6573206e6f74206578697374210000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613d5057613d50613d26565b5060010190565b60208082526025908201527f43616e6e6f74206d696e74206f76657220737570706c7920636170206f6620746040820152646f6b656e2160d81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526027908201527f56616c7565206e6565647320746f2062652065786163746c7920746865206d696040820152666e74206665652160c81b606082015260800190565b60208082526032908201527f416c6c6f776c697374204d6f646520616e64204d696e74696e67206d75737420604082015271189948195b98589b1959081d1bc81b5a5b9d60721b606082015260800190565b6020808252602e908201527f43616e6e6f74206d696e74206d6f7265207468616e206d6178206d696e74207060408201526d32b9103a3930b739b0b1ba34b7b760911b606082015260800190565b600060208284031215613ebf57600080fd5b5051919050565b6000816000190483118215151615613ee057613ee0613d26565b500290565b600082613f0257634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613f1957600080fd5b8151611723816137d1565b60208082526047908201527f5075626c6963206d696e74696e67206973206e6f7420656e61626c656420776860408201527f696c6520636f6e747261637420697320696e20616c6c6f776c697374206f6e6c6060820152663c9036b7b2329760c91b608082015260a00190565b60208082526022908201527f4d696e74696e6720666f72207468697320746f6b656e206973206e6f74206f7060408201526132b760f11b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6000821982111561407557614075613d26565b500190565b60408152600061408d6040830185613977565b828103602084015261409f8185613977565b95945050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906140d490830186613977565b82810360608401526140e68186613977565b905082810360808401526140fa8185613520565b98975050505050505050565b60006020828403121561411857600080fd5b8151611723816134ed565b600060033d111561413c5760046000803e5060005160e01c5b90565b600060443d101561414d5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561417c57505050505090565b82850191508151818111156141945750505050505090565b843d87010160208285010111156141ae5750505050505090565b6141bd602082860101876135af565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061424a90830184613520565b979650505050505050565b60008282101561426757614267613d26565b50039056fe68747470733a2f2f75732d63656e7472616c312d6e66742d72616d70702e636c6f756466756e6374696f6e732e6e65742f6170702f594a57387a6742694178426f43736254655633512f636f6e74726163742d6d65746164617461a2646970667358221220a9512ade5a1689cd26c950ae6c8f43c3af5bfc5dfdfa1c16216fc30e55d90b8a64736f6c63430008090033

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

0000000000000000000000002e0283bafba91ce68f151f88a3a27bb7881d4955

-----Decoded View---------------

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002e0283bafba91ce68f151f88a3a27bb7881d4955


Deployed Bytecode Sourcemap

57557:9744:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32371:231;;;;;;;;;;-1:-1:-1;32371:231:0;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;32371:231:0;;;;;;;;31400:310;;;;;;;;;;-1:-1:-1;31400:310:0;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;31400:310:0;1019:187:1;57933:32:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;58219:186::-;;;;;;;;;;-1:-1:-1;58219:186:0;;;;;:::i;:::-;;:::i;66517:193::-;;;;;;;;;;-1:-1:-1;66517:193:0;;;;;:::i;:::-;;:::i;46924:195::-;;;;;;;;;;-1:-1:-1;46924:195:0;;;;;:::i;:::-;;:::i;65102:202::-;;;;;;;;;;-1:-1:-1;65102:202:0;;;;;:::i;:::-;;:::i;:::-;;53634:37;;;;;;;;;;-1:-1:-1;53634:37:0;;;;;:::i;:::-;;:::i;34382:591::-;;;;;;;;;;-1:-1:-1;34382:591:0;;;;;:::i;:::-;;:::i;63550:1067::-;;;;;;;;;;-1:-1:-1;63550:1067:0;;;;;:::i;:::-;;:::i;47127:325::-;;;;;;;;;;-1:-1:-1;47127:325:0;;;;;:::i;:::-;;:::i;57822:33::-;;;;;;;;;;-1:-1:-1;57822:33:0;;;;;;;;;;;;;;6652:4:1;6640:17;;;6622:36;;6610:2;6595:18;57822:33:0;6480:184:1;58641:386:0;;;;;;;;;;-1:-1:-1;58641:386:0;;;;;:::i;:::-;;:::i;53676:38::-;;;;;;;;;;;;;;;;56493:220;;;;;;;;;;-1:-1:-1;56493:220:0;;;;;:::i;:::-;;:::i;64846:65::-;;;;;;;;;;;;;:::i;66154:264::-;;;;;;;;;;-1:-1:-1;66154:264:0;;;;;:::i;:::-;;:::i;55941:109::-;;;;;;;;;;-1:-1:-1;55941:109:0;;;;;:::i;:::-;56000:7;56027:15;;;:10;:15;;;;;;;55941:109;32764:524;;;;;;;;;;-1:-1:-1;32764:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47550:122::-;;;;;;;;;;-1:-1:-1;47550:122:0;;;;;:::i;:::-;47607:4;46891:17;;;:12;:17;;;;;;-1:-1:-1;;;47550:122:0;9075:86;;;;;;;;;;-1:-1:-1;9146:7:0;;-1:-1:-1;;;9146:7:0;;;;9075:86;;65452:195;;;;;;;;;;-1:-1:-1;65452:195:0;;;;;:::i;:::-;;:::i;57093:95::-;;;;;;;;;;-1:-1:-1;57093:95:0;;;;;:::i;:::-;;:::i;52941:113::-;;;;;;;;;;-1:-1:-1;52941:113:0;;;;;:::i;:::-;;:::i;59033:230::-;;;;;;;;;;-1:-1:-1;59033:230:0;;;;;:::i;:::-;;:::i;11970:103::-;;;;;;;;;;;;;:::i;56058:121::-;;;;;;;;;;-1:-1:-1;56058:121:0;;;;;:::i;:::-;;:::i;61276:639::-;;;;;;:::i;:::-;;:::i;57196:112::-;;;;;;;;;;-1:-1:-1;57196:112:0;;;;;:::i;:::-;57252:4;57276:16;;;:11;:16;;;;;;;;:24;;:16;:24;;57196:112;64700:61;;;;;;;;;;;;;:::i;53721:112::-;;;;;;;;;;;;;:::i;53536:93::-;;;;;;;;;;-1:-1:-1;53536:93:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;10572:32:1;;;10554:51;;10542:2;10527:18;53536:93:0;10408:203:1;51475:115:0;;;;;;;;;;-1:-1:-1;51475:115:0;;;;;:::i;:::-;51536:7;51565:15;;;:10;:15;;;;;;;51475:115;11321:87;;;;;;;;;;-1:-1:-1;11394:6:0;;-1:-1:-1;;;;;11394:6:0;11321:87;;57972:28;;;;;;;;;;;;;:::i;56992:93::-;;;;;;;;;;-1:-1:-1;56992:93:0;;;;;:::i;:::-;;:::i;56363:122::-;;;;;;;;;;-1:-1:-1;56363:122:0;;;;;:::i;:::-;56431:7;56458:19;;;:14;:19;;;;;;;56363:122;33361:155;;;;;;;;;;-1:-1:-1;33361:155:0;;;;;:::i;:::-;;:::i;62168:834::-;;;;;;:::i;:::-;;:::i;54798:422::-;;;;;;;;;;-1:-1:-1;54798:422:0;;;;;:::i;:::-;;:::i;57893:33::-;;;;;;;;;;;;;;;;55546:229;;;;;;;;;;-1:-1:-1;55546:229:0;;;;;:::i;:::-;;:::i;52820:111::-;;;;;;;;;;-1:-1:-1;52820:111:0;;;;;:::i;:::-;;:::i;46801:115::-;;;;;;;;;;-1:-1:-1;46801:115:0;;;;;:::i;:::-;46864:7;46891:17;;;:12;:17;;;;;;;46801:115;59451:578;;;;;;:::i;:::-;;:::i;53102:72::-;;;;;;;;;;-1:-1:-1;53102:72:0;;;;-1:-1:-1;;;;;53102:72:0;;;52322:357;;;;;;;;;;-1:-1:-1;52322:357:0;;;;;:::i;:::-;;:::i;53841:115::-;;;;;;;;;;;;;:::i;51298:37::-;;;;;;;;;;-1:-1:-1;51298:37:0;;;;;;;;58413:176;;;;;;;;;;;;;:::i;33588:168::-;;;;;;;;;;-1:-1:-1;33588:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;33711:27:0;;;33687:4;33711:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;33588:168;52689:121;;;;;;;;;;-1:-1:-1;52689:121:0;;;;;:::i;:::-;52748:4;52774:18;;;:13;:18;;;;;;;;:26;;:18;:26;;52689:121;65768:264;;;;;;;;;;-1:-1:-1;65768:264:0;;;;;:::i;:::-;;:::i;60212:769::-;;;;;;:::i;:::-;;:::i;51811:224::-;;;;;;;;;;-1:-1:-1;51811:224:0;;;;;:::i;:::-;;:::i;33828:477::-;;;;;;;;;;-1:-1:-1;33828:477:0;;;;;:::i;:::-;;:::i;12226:201::-;;;;;;;;;;-1:-1:-1;12226:201:0;;;;;:::i;:::-;;:::i;32371:231::-;32457:7;-1:-1:-1;;;;;32485:21:0;;32477:77;;;;-1:-1:-1;;;32477:77:0;;13803:2:1;32477:77:0;;;13785:21:1;13842:2;13822:18;;;13815:30;13881:34;13861:18;;;13854:62;-1:-1:-1;;;13932:18:1;;;13925:41;13983:19;;32477:77:0;;;;;;;;;-1:-1:-1;32572:13:0;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;32572:22:0;;;;;;;;;;;;32371:231::o;31400:310::-;31502:4;-1:-1:-1;;;;;;31539:41:0;;-1:-1:-1;;;31539:41:0;;:110;;-1:-1:-1;;;;;;;31597:52:0;;-1:-1:-1;;;31597:52:0;31539:110;:163;;;-1:-1:-1;;;;;;;;;;22757:40:0;;;31666:36;31519:183;31400:310;-1:-1:-1;;31400:310:0:o;57933:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;58219:186::-;47607:4;46891:17;;;:12;:17;;;;;;58275:13;;58301:61;;;;-1:-1:-1;;;58301:61:0;;;;;;;:::i;:::-;58380:17;;;;:12;:17;;;;;58373:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58219:186;;;:::o;66517:193::-;66581:4;46891:17;;;:12;:17;;;;;;66598:52;;;;-1:-1:-1;;;66598:52:0;;;;;;;:::i;:::-;-1:-1:-1;66668:18:0;:27;;;;;;;;;;;;;;;:34;;66517:193::o;46924:195::-;46993:7;46891:17;;;:12;:17;;;;;;47013:61;;;;-1:-1:-1;;;47013:61:0;;;;;;;:::i;:::-;-1:-1:-1;47092:19:0;;;;:14;:19;;;;;;;46924:195::o;65102:202::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;47607:4;46891:17;;;:12;:17;;;;;;65192:61:::1;;;;-1:-1:-1::0;;;65192:61:0::1;;;;;;;:::i;:::-;65264:17;::::0;;;:12:::1;:17;::::0;;;;;;;:32;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;65102:202:::0;;:::o;53634:37::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53634:37:0;:::o;34382:591::-;34598:9;34593:137;34617:3;:10;34613:1;:14;34593:137;;;34657:18;:26;34676:3;34680:1;34676:6;;;;;;;;:::i;:::-;;;;;;;;;;;;34657:26;;;;;;;;;;-1:-1:-1;34657:26:0;;;;;;:33;34649:69;;;;-1:-1:-1;;;34649:69:0;;15852:2:1;34649:69:0;;;15834:21:1;15891:2;15871:18;;;15864:30;-1:-1:-1;;;15910:18:1;;;15903:53;15973:18;;34649:69:0;15650:347:1;34649:69:0;34629:3;;;:::i;:::-;;;34593:137;;;-1:-1:-1;;;;;;34764:20:0;;7817:10;34764:20;;:60;;-1:-1:-1;34788:36:0;34805:4;7817:10;33588:168;:::i;34788:36::-;34742:160;;;;-1:-1:-1;;;34742:160:0;;16476:2:1;34742:160:0;;;16458:21:1;16515:2;16495:18;;;16488:30;16554:34;16534:18;;;16527:62;-1:-1:-1;;;16605:18:1;;;16598:48;16663:19;;34742:160:0;16274:414:1;34742:160:0;34913:52;34936:4;34942:2;34946:3;34951:7;34960:4;34913:22;:52::i;:::-;34382:591;;;;;:::o;63550:1067::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;63880:1:::1;63862:15;:19;63854:75;;;::::0;-1:-1:-1;;;63854:75:0;;16895:2:1;63854:75:0::1;::::0;::::1;16877:21:1::0;16934:2;16914:18;;;16907:30;16973:34;16953:18;;;16946:62;-1:-1:-1;;;17024:18:1;;;17017:41;17075:19;;63854:75:0::1;16693:407:1::0;63854:75:0::1;63971:1;63948:20;:24;63940:85;;;::::0;-1:-1:-1;;;63940:85:0;;17307:2:1;63940:85:0::1;::::0;::::1;17289:21:1::0;17346:2;17326:18;;;17319:30;17385:34;17365:18;;;17358:62;-1:-1:-1;;;17436:18:1;;;17429:46;17492:19;;63940:85:0::1;17105:412:1::0;63940:85:0::1;64070:1;64050:9;64044:23;:27;64036:74;;;::::0;-1:-1:-1;;;64036:74:0;;17724:2:1;64036:74:0::1;::::0;::::1;17706:21:1::0;17763:2;17743:18;;;17736:30;17802:34;17782:18;;;17775:62;-1:-1:-1;;;17853:18:1;;;17846:32;17895:19;;64036:74:0::1;17522:398:1::0;64036:74:0::1;64123:15;64141:17;:15;:17::i;:::-;64123:35;;64171:41;64177:10;64189:7;64198:1;64201:10;64171:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:41::i;:::-;64223:21;::::0;;;:12:::1;:21;::::0;;;;;;;:33;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;64269:43;64287:7;64296:15;64269:17;:43::i;:::-;64323:41;64340:7;64349:14;64323:16;:41::i;:::-;64375:56;64401:7;64410:20;64375:25;:56::i;:::-;57400:16:::0;;;;:11;:16;;;;;:30;;-1:-1:-1;;57400:30:0;;;;;;;64537:26:::1;:36;;64572:1;64537:36;;;64566:3;64537:36;64507:18;:27:::0;;;::::1;::::0;;;;;;:66;;-1:-1:-1;;64507:66:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;64586:23:::1;:21;:23::i;:::-;63843:774;63550:1067:::0;;;;;;:::o;47127:325::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;47607:4;46891:17;;;:12;:17;;;;;;47218:61:::1;;;;-1:-1:-1::0;;;47218:61:0::1;;;;;;;:::i;:::-;47314:19;::::0;;;:14:::1;:19;::::0;;;;;47298:35;::::1;47290:108;;;::::0;-1:-1:-1;;;47290:108:0;;18127:2:1;47290:108:0::1;::::0;::::1;18109:21:1::0;18166:2;18146:18;;;18139:30;18205:34;18185:18;;;18178:62;18276:30;18256:18;;;18249:58;18324:19;;47290:108:0::1;17925:424:1::0;47290:108:0::1;47409:19;::::0;;;:14:::1;:19;::::0;;;;;:35;47127:325::o;58641:386::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;47607:4;46891:17;;;:12;:17;;;;;;58733:61:::1;;;;-1:-1:-1::0;;;58733:61:0::1;;;;;;;:::i;:::-;58818:1;58811:4;:8;58803:52;;;::::0;-1:-1:-1;;;58803:52:0;;18556:2:1;58803:52:0::1;::::0;::::1;18538:21:1::0;18595:2;18575:18;;;18568:30;18634:33;18614:18;;;18607:61;18685:18;;58803:52:0::1;18354:355:1::0;58803:52:0::1;58902:22;58920:3;58902:17;:22::i;:::-;58872:26;58893:4;58872:16;58884:3;46864:7:::0;46891:17;;;:12;:17;;;;;;;46801:115;58872:16:::1;:20:::0;::::1;:26::i;:::-;:52;;58864:102;;;;-1:-1:-1::0;;;58864:102:0::1;;;;;;;:::i;:::-;58983:38;58989:8;58999:3;59004:4;59010:10;58983:38;;;;;:::i;56493:220::-:0;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;56620:1:::1;56602:15;:19;56594:63;;;::::0;-1:-1:-1;;;56594:63:0;;19322:2:1;56594:63:0::1;::::0;::::1;19304:21:1::0;19361:2;19341:18;;;19334:30;19400:33;19380:18;;;19373:61;19451:18;;56594:63:0::1;19120:355:1::0;56594:63:0::1;56668:19;::::0;;;:14:::1;:19;::::0;;;;;:37;56493:220::o;64846:65::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;64893:10:::1;:8;:10::i;:::-;64846:65::o:0;66154:264::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;66234:18:::1;:27:::0;;;::::1;::::0;;;;;;;::::1;::::0;;::::1;:34;;66226:77;;;::::0;-1:-1:-1;;;66226:77:0;;19682:2:1;66226:77:0::1;::::0;::::1;19664:21:1::0;19721:2;19701:18;;;19694:30;19760:32;19740:18;;;19733:60;19810:18;;66226:77:0::1;19480:354:1::0;66226:77:0::1;47607:4:::0;46891:17;;;:12;:17;;;;;;66314:52:::1;;;;-1:-1:-1::0;;;66314:52:0::1;;;;;;;:::i;:::-;66377:18;:27:::0;;;::::1;::::0;;;;;;:33;;-1:-1:-1;;66377:33:0::1;66407:3;66377:33;::::0;;66154:264::o;32764:524::-;32920:16;32981:3;:10;32962:8;:15;:29;32954:83;;;;-1:-1:-1;;;32954:83:0;;20041:2:1;32954:83:0;;;20023:21:1;20080:2;20060:18;;;20053:30;20119:34;20099:18;;;20092:62;-1:-1:-1;;;20170:18:1;;;20163:39;20219:19;;32954:83:0;19839:405:1;32954:83:0;33050:30;33097:8;:15;-1:-1:-1;;;;;33083:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33083:30:0;;33050:63;;33131:9;33126:122;33150:8;:15;33146:1;:19;33126:122;;;33206:30;33216:8;33225:1;33216:11;;;;;;;;:::i;:::-;;;;;;;33229:3;33233:1;33229:6;;;;;;;;:::i;:::-;;;;;;;33206:9;:30::i;:::-;33187:13;33201:1;33187:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;33167:3;;;:::i;:::-;;;33126:122;;;-1:-1:-1;33267:13:0;32764:524;-1:-1:-1;;;32764:524:0:o;65452:195::-;65518:7;65553:1;65546:4;:8;65538:52;;;;-1:-1:-1;;;65538:52:0;;19322:2:1;65538:52:0;;;19304:21:1;19361:2;19341:18;;;19334:30;19400:33;19380:18;;;19373:61;19451:18;;65538:52:0;19120:355:1;65538:52:0;65608:31;65634:4;65608:21;65625:3;56000:7;56027:15;;;:10;:15;;;;;;;55941:109;65608:21;:25;;:31::i;:::-;65601:38;65452:195;-1:-1:-1;;;65452:195:0:o;57093:95::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;57175:5:::1;57156:16:::0;;;:11:::1;:16;::::0;;;;:24;;-1:-1:-1;;57156:24:0::1;::::0;;57093:95::o;52941:113::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;53039:5:::1;53018:18:::0;;;:13:::1;:18;::::0;;;;:26;;-1:-1:-1;;53018:26:0::1;::::0;;52941:113::o;59033:230::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;59147:9:::1;59143:115;59164:9;:16;59160:1;:20;59143:115;;;59200:48;59206:9;59216:1;59206:12;;;;;;;;:::i;:::-;;;;;;;59220:3;59225:10;59237;59200:48;;;;;:::i;:::-;59182:3:::0;::::1;::::0;::::1;:::i;:::-;;;;59143:115;;;;59033:230:::0;;;:::o;11970:103::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;12035:30:::1;12062:1;12035:18;:30::i;56058:121::-:0;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;56144:15:::1;::::0;;;:10:::1;:15;::::0;;;;;:27;56058:121::o;61276:639::-;9146:7;;-1:-1:-1;;;9146:7:0;;;;9400:9;9392:38;;;;-1:-1:-1;;;9392:38:0;;;;;;;:::i;:::-;47607:4;46891:17;;;:12;:17;;;;;;61380:61:::1;;;;-1:-1:-1::0;;;61380:61:0::1;;;;;;;:::i;:::-;61487:22;61505:3;61487:17;:22::i;:::-;61460:23;61481:1;61460:16;61472:3;46864:7:::0;46891:17;;;:12;:17;;;;;;;46801:115;61460:23:::1;:49;;61452:99;;;;-1:-1:-1::0;;;61452:99:0::1;;;;;;;:::i;:::-;61583:16;61592:3;61597:1;61583:8;:16::i;:::-;61570:9;:29;61562:81;;;;-1:-1:-1::0;;;61562:81:0::1;;;;;;;:::i;:::-;61664:20;61680:3;52748:4:::0;52774:18;;;:13;:18;;;;;;;;:26;;:18;:26;;52689:121;61664:20:::1;:42;;;;;61688:18;61702:3;57252:4:::0;57276:16;;;:11;:16;;;;;;;;:24;;:16;:24;;57196:112;61688:18:::1;61656:105;;;;-1:-1:-1::0;;;61656:105:0::1;;;;;;;:::i;:::-;61780:44;61794:10;61806:3;61811:12;;61780:13;:44::i;:::-;61772:85;;;::::0;-1:-1:-1;;;61772:85:0;;21623:2:1;61772:85:0::1;::::0;::::1;21605:21:1::0;21662:2;21642:18;;;21635:30;21701;21681:18;;;21674:58;21749:18;;61772:85:0::1;21421:352:1::0;61772:85:0::1;61870:37;61876:10;61888:3;61893:1;61896:10;61870:37;;;;;:::i;64700:61::-:0;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;64745:8:::1;:6;:8::i;53721:112::-:0;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;53802:1:::1;53778:21;:25;53770:34;;;::::0;::::1;;53813:14;:12;:14::i;53536:93::-:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53536:93:0;;-1:-1:-1;53536:93:0;:::o;57972:28::-;;;;;;;:::i;56992:93::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;57054:16:::1;::::0;;;:11:::1;:16;::::0;;;;:23;;-1:-1:-1;;57054:23:0::1;57073:4;57054:23;::::0;;56992:93::o;33361:155::-;33456:52;7817:10;33489:8;33499;33456:18;:52::i;:::-;33361:155;;:::o;62168:834::-;9146:7;;-1:-1:-1;;;9146:7:0;;;;9400:9;9392:38;;;;-1:-1:-1;;;9392:38:0;;;;;;;:::i;:::-;47607:4;46891:17;;;:12;:17;;;;;;62294:61:::1;;;;-1:-1:-1::0;;;62294:61:0::1;;;;;;;:::i;:::-;62382:1;62374:4;:9;;62366:48;;;::::0;-1:-1:-1;;;62366:48:0;;21980:2:1;62366:48:0::1;::::0;::::1;21962:21:1::0;22019:2;21999:18;;;21992:30;22058:28;22038:18;;;22031:56;22104:18;;62366:48:0::1;21778:350:1::0;62366:48:0::1;56804:4:::0;56836:19;;;:14;:19;;;;;;-1:-1:-1;;56828:27:0;62425:94:::1;;;;-1:-1:-1::0;;;62425:94:0::1;;;;;;;:::i;:::-;62568:22;62586:3;62568:17;:22::i;:::-;62538:26;62559:4;62538:16;62550:3;46864:7:::0;46891:17;;;:12;:17;;;;;;;46801:115;62538:26:::1;:52;;62530:102;;;;-1:-1:-1::0;;;62530:102:0::1;;;;;;;:::i;:::-;62664:19;62673:3;62678:4;62664:8;:19::i;:::-;62651:9;:32;62643:84;;;;-1:-1:-1::0;;;62643:84:0::1;;;;;;;:::i;:::-;62748:20;62764:3;52748:4:::0;52774:18;;;:13;:18;;;;;;;;:26;;:18;:26;;52689:121;62748:20:::1;:42;;;;;62772:18;62786:3;57252:4:::0;57276:16;;;:11;:16;;;;;;;;:24;;:16;:24;;57196:112;62772:18:::1;62740:105;;;;-1:-1:-1::0;;;62740:105:0::1;;;;;;;:::i;:::-;62864:44;62878:10;62890:3;62895:12;;62864:13;:44::i;:::-;62856:85;;;::::0;-1:-1:-1;;;62856:85:0;;21623:2:1;62856:85:0::1;::::0;::::1;21605:21:1::0;21662:2;21642:18;;;21635:30;21701;21681:18;;;21674:58;21749:18;;62856:85:0::1;21421:352:1::0;62856:85:0::1;62954:40;62960:10;62972:3;62977:4;62983:10;62954:40;;;;;:::i;54798:422::-:0;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;54907:1:::1;54897:7;:11;54889:20;;;::::0;::::1;;54976:38;::::0;-1:-1:-1;;;54976:38:0;;55008:4:::1;54976:38;::::0;::::1;10554:51:1::0;54946:14:0;;55018:7;;-1:-1:-1;;;;;54976:23:0;::::1;::::0;::::1;::::0;10527:18:1;;54976:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;54968:97;;;::::0;-1:-1:-1;;;54968:97:0;;22939:2:1;54968:97:0::1;::::0;::::1;22921:21:1::0;22978:2;22958:18;;;22951:30;23017:34;22997:18;;;22990:62;-1:-1:-1;;;23068:18:1;;;23061:33;23111:19;;54968:97:0::1;22737:399:1::0;54968:97:0::1;55078:6;55074:141;55092:19;;55088:1;:23;55074:141;;;55130:13;-1:-1:-1::0;;;;;55130:22:0::1;;55153:16;55170:1;55153:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;55153:19:0::1;55203:3;55185:11;55197:1;55185:14;;;;;;;;:::i;:::-;;;;;;;;;55175:7;:24;;;;:::i;:::-;55174:32;;;;:::i;:::-;55130:77;::::0;-1:-1:-1;;;;;;55130:77:0::1;::::0;;;;;;-1:-1:-1;;;;;23728:32:1;;;55130:77:0::1;::::0;::::1;23710:51:1::0;23777:18;;;23770:34;23683:18;;55130:77:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;55113:3:0;::::1;::::0;::::1;:::i;:::-;;;;55074:141;;55546:229:::0;53231:12;;-1:-1:-1;;;;;53231:12:0;53217:10;:26;53209:67;;;;-1:-1:-1;;;53209:67:0;;24267:2:1;53209:67:0;;;24249:21:1;24306:2;24286:18;;;24279:30;24345;24325:18;;;24318:58;24393:18;;53209:67:0;24065:352:1;53209:67:0;55637:12:::1;::::0;-1:-1:-1;;;;;55622:27:0;;::::1;55637:12:::0;::::1;55622:27;;55614:82;;;::::0;-1:-1:-1;;;55614:82:0;;24624:2:1;55614:82:0::1;::::0;::::1;24606:21:1::0;24663:2;24643:18;;;24636:30;24702:34;24682:18;;;24675:62;-1:-1:-1;;;24753:18:1;;;24746:40;24803:19;;55614:82:0::1;24422:406:1::0;55614:82:0::1;55703:12;:26:::0;;-1:-1:-1;;;;;;55703:26:0::1;-1:-1:-1::0;;;;;55703:26:0;::::1;;::::0;;55736:16:::1;:19:::0;;55703:26;;55736:16;-1:-1:-1;;55736:19:0::1;;;;:::i;:::-;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;55736:33:0::1;;;;;-1:-1:-1::0;;;;;55736:33:0::1;;;;;;55546:229:::0;:::o;52820:111::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;52896:18:::1;::::0;;;:13:::1;:18;::::0;;;;:25;;-1:-1:-1;;52896:25:0::1;52917:4;52896:25;::::0;;52820:111::o;59451:578::-;9146:7;;-1:-1:-1;;;9146:7:0;;;;9400:9;9392:38;;;;-1:-1:-1;;;9392:38:0;;;;;;;:::i;:::-;47607:4;46891:17;;;:12;:17;;;;;;59518:61:::1;;;;-1:-1:-1::0;;;59518:61:0::1;;;;;;;:::i;:::-;59623:22;59641:3;59623:17;:22::i;:::-;59596:23;59617:1;59596:16;59608:3;46864:7:::0;46891:17;;;:12;:17;;;;;;;46801:115;59596:23:::1;:49;;59588:99;;;;-1:-1:-1::0;;;59588:99:0::1;;;;;;;:::i;:::-;59717:16;59726:3;59731:1;59717:8;:16::i;:::-;59704:9;:29;59696:81;;;;-1:-1:-1::0;;;59696:81:0::1;;;;;;;:::i;:::-;59796:20;59812:3;52748:4:::0;52774:18;;;:13;:18;;;;;;;;:26;;:18;:26;;52689:121;59796:20:::1;:29;59788:113;;;;-1:-1:-1::0;;;59788:113:0::1;;;;;;;:::i;:::-;59918:18;59932:3;57252:4:::0;57276:16;;;:11;:16;;;;;;;;:24;;:16;:24;;57196:112;59918:18:::1;59910:65;;;;-1:-1:-1::0;;;59910:65:0::1;;;;;;;:::i;:::-;59986:37;59992:10;60004:3;60009:1;60012:10;59986:37;;;;;:::i;:::-;59451:578:::0;:::o;52322:357::-;52434:4;51565:15;;;:10;:15;;;;;;52453:69;;;;-1:-1:-1;;;52453:69:0;;25918:2:1;52453:69:0;;;25900:21:1;25957:2;25937:18;;;25930:30;25996:25;25976:18;;;25969:53;26039:18;;52453:69:0;25716:347:1;52453:69:0;52560:26;;-1:-1:-1;;26217:2:1;26213:15;;;26209:53;52560:26:0;;;26197:66:1;52535:12:0;;26279::1;;52560:26:0;;;;;;;;;;;;52550:37;;;;;;52535:52;;52609:60;52628:12;;52609:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52642:20:0;;;:10;:20;;;;;;;-1:-1:-1;52664:4:0;;-1:-1:-1;52609:18:0;;-1:-1:-1;52609:60:0:i;:::-;52602:67;52322:357;-1:-1:-1;;;;;;52322:357:0:o;53841:115::-;53231:12;;-1:-1:-1;;;;;53231:12:0;53217:10;:26;53209:67;;;;-1:-1:-1;;;53209:67:0;;24267:2:1;53209:67:0;;;24249:21:1;24306:2;24286:18;;;24279:30;24345;24325:18;;;24318:58;24393:18;;53209:67:0;24065:352:1;58413:176:0;58457:13;58481:100;;;;;;;;;;;;;;;;;;;58413:176;:::o;65768:264::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;65850:18:::1;:27:::0;;;::::1;::::0;;;;;;;::::1;;::::0;:32:::1;;65842:77;;;::::0;-1:-1:-1;;;65842:77:0;;26504:2:1;65842:77:0::1;::::0;::::1;26486:21:1::0;;;26523:18;;;26516:30;26582:34;26562:18;;;26555:62;26634:18;;65842:77:0::1;26302:356:1::0;65842:77:0::1;47607:4:::0;46891:17;;;:12;:17;;;;;;65930:52:::1;;;;-1:-1:-1::0;;;65930:52:0::1;;;;;;;:::i;:::-;65993:18;:27:::0;;;::::1;::::0;;;;;;:31;;-1:-1:-1;;65993:31:0::1;66023:1;65993:31;::::0;;65768:264::o;60212:769::-;9146:7;;-1:-1:-1;;;9146:7:0;;;;9400:9;9392:38;;;;-1:-1:-1;;;9392:38:0;;;;;;;:::i;:::-;47607:4;46891:17;;;:12;:17;;;;;;60301:61:::1;;;;-1:-1:-1::0;;;60301:61:0::1;;;;;;;:::i;:::-;60387:1;60379:4;:9;;60371:48;;;::::0;-1:-1:-1;;;60371:48:0;;21980:2:1;60371:48:0::1;::::0;::::1;21962:21:1::0;22019:2;21999:18;;;21992:30;22058:28;22038:18;;;22031:56;22104:18;;60371:48:0::1;21778:350:1::0;60371:48:0::1;56804:4:::0;56836:19;;;:14;:19;;;;;;-1:-1:-1;;56828:27:0;60428:94:::1;;;;-1:-1:-1::0;;;60428:94:0::1;;;;;;;:::i;:::-;60569:22;60587:3;60569:17;:22::i;:::-;60539:26;60560:4;60539:16;60551:3;46864:7:::0;46891:17;;;:12;:17;;;;;;;46801:115;60539:26:::1;:52;;60531:102;;;;-1:-1:-1::0;;;60531:102:0::1;;;;;;;:::i;:::-;60663:19;60672:3;60677:4;60663:8;:19::i;:::-;60650:9;:32;60642:84;;;;-1:-1:-1::0;;;60642:84:0::1;;;;;;;:::i;:::-;60745:20;60761:3;52748:4:::0;52774:18;;;:13;:18;;;;;;;;:26;;:18;:26;;52689:121;60745:20:::1;:29;60737:113;;;;-1:-1:-1::0;;;60737:113:0::1;;;;;;;:::i;:::-;60867:18;60881:3;57252:4:::0;57276:16;;;:11;:16;;;;;;;;:24;;:16;:24;;57196:112;60867:18:::1;60859:65;;;;-1:-1:-1::0;;;60859:65:0::1;;;;;;;:::i;:::-;60935:40;60941:10;60953:3;60958:4;60964:10;60935:40;;;;;:::i;51811:224::-:0;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;51930:15:::1;::::0;;;:10:::1;:15;::::0;;;;;51912:33;::::1;;51904:76;;;::::0;-1:-1:-1;;;51904:76:0;;26865:2:1;51904:76:0::1;::::0;::::1;26847:21:1::0;26904:2;26884:18;;;26877:30;26943:32;26923:18;;;26916:60;26993:18;;51904:76:0::1;26663:354:1::0;51904:76:0::1;51993:15;::::0;;;:10:::1;:15;::::0;;;;;:32;51811:224::o;33828:477::-;34022:18;:22;;;;;;;;;;;;;;;:29;34014:65;;;;-1:-1:-1;;;34014:65:0;;15852:2:1;34014:65:0;;;15834:21:1;15891:2;15871:18;;;15864:30;-1:-1:-1;;;15910:18:1;;;15903:53;15973:18;;34014:65:0;15650:347:1;34014:65:0;-1:-1:-1;;;;;34112:20:0;;7817:10;34112:20;;:60;;-1:-1:-1;34136:36:0;34153:4;7817:10;33588:168;:::i;34136:36::-;34090:151;;;;-1:-1:-1;;;34090:151:0;;27224:2:1;34090:151:0;;;27206:21:1;27263:2;27243:18;;;27236:30;27302:34;27282:18;;;27275:62;-1:-1:-1;;;27353:18:1;;;27346:39;27402:19;;34090:151:0;27022:405:1;34090:151:0;34252:45;34270:4;34276:2;34280;34284:6;34292:4;34252:17;:45::i;12226:201::-;11394:6;;-1:-1:-1;;;;;11394:6:0;7817:10;11541:23;11533:68;;;;-1:-1:-1;;;11533:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12315:22:0;::::1;12307:73;;;::::0;-1:-1:-1;;;12307:73:0;;27634:2:1;12307:73:0::1;::::0;::::1;27616:21:1::0;27673:2;27653:18;;;27646:30;27712:34;27692:18;;;27685:62;-1:-1:-1;;;27763:18:1;;;27756:36;27809:19;;12307:73:0::1;27432:402:1::0;12307:73:0::1;12391:28;12410:8;12391:18;:28::i;36595:1074::-:0;36822:7;:14;36808:3;:10;:28;36800:81;;;;-1:-1:-1;;;36800:81:0;;28041:2:1;36800:81:0;;;28023:21:1;28080:2;28060:18;;;28053:30;28119:34;28099:18;;;28092:62;-1:-1:-1;;;28170:18:1;;;28163:38;28218:19;;36800:81:0;27839:404:1;36800:81:0;-1:-1:-1;;;;;36900:16:0;;36892:66;;;;-1:-1:-1;;;36892:66:0;;;;;;;:::i;:::-;7817:10;37015:60;7817:10;37046:4;37052:2;37056:3;37061:7;37070:4;37015:20;:60::i;:::-;37093:9;37088:421;37112:3;:10;37108:1;:14;37088:421;;;37144:10;37157:3;37161:1;37157:6;;;;;;;;:::i;:::-;;;;;;;37144:19;;37178:14;37195:7;37203:1;37195:10;;;;;;;;:::i;:::-;;;;;;;;;;;;37222:19;37244:13;;;:9;:13;;;;;;-1:-1:-1;;;;;37244:19:0;;;;;;;;;;;;37195:10;;-1:-1:-1;37286:21:0;;;;37278:76;;;;-1:-1:-1;;;37278:76:0;;;;;;;:::i;:::-;37398:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;37398:19:0;;;;;;;;;;37420:20;;;37398:42;;37470:17;;;;;;;:27;;37420:20;;37398:13;37470:27;;37420:20;;37470:27;:::i;:::-;;;;;;;;37129:380;;;37124:3;;;;:::i;:::-;;;37088:421;;;;37556:2;-1:-1:-1;;;;;37526:47:0;37550:4;-1:-1:-1;;;;;37526:47:0;37540:8;-1:-1:-1;;;;;37526:47:0;;37560:3;37565:7;37526:47;;;;;;;:::i;:::-;;;;;;;;37586:75;37622:8;37632:4;37638:2;37642:3;37647:7;37656:4;37586:35;:75::i;:::-;36789:880;36595:1074;;;;;:::o;67040:105::-;67116:14;;67089:7;;67116:21;;67135:1;67116:18;:21::i;:::-;67109:28;;67040:105;:::o;38967:569::-;-1:-1:-1;;;;;39120:16:0;;39112:62;;;;-1:-1:-1;;;39112:62:0;;29870:2:1;39112:62:0;;;29852:21:1;29909:2;29889:18;;;29882:30;29948:34;29928:18;;;29921:62;-1:-1:-1;;;29999:18:1;;;29992:31;30040:19;;39112:62:0;29668:397:1;39112:62:0;7817:10;39231:102;7817:10;39187:16;39274:2;39278:21;39296:2;39278:17;:21::i;:::-;39301:25;39319:6;39301:17;:25::i;:::-;39328:4;39231:20;:102::i;:::-;39346:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;39346:17:0;;;;;;;;;:27;;39367:6;;39346:13;:27;;39367:6;;39346:27;:::i;:::-;;;;-1:-1:-1;;39389:52:0;;;30244:25:1;;;30300:2;30285:18;;30278:34;;;-1:-1:-1;;;;;39389:52:0;;;;39422:1;;39389:52;;;;;;30217:18:1;39389:52:0;;;;;;;39454:74;39485:8;39503:1;39507:2;39511;39515:6;39523:4;39454:30;:74::i;67221:77::-;67274:14;:16;;;:14;:16;;;:::i;:::-;;;;;;67221:77::o;2911:98::-;2969:7;2996:5;3000:1;2996;:5;:::i;10134:120::-;9146:7;;-1:-1:-1;;;9146:7:0;;;;9670:41;;;;-1:-1:-1;;;9670:41:0;;30525:2:1;9670:41:0;;;30507:21:1;30564:2;30544:18;;;30537:30;-1:-1:-1;;;30583:18:1;;;30576:50;30643:18;;9670:41:0;30323:344:1;9670:41:0;10193:7:::1;:15:::0;;-1:-1:-1;;;;10193:15:0::1;::::0;;10224:22:::1;7817:10:::0;10233:12:::1;10224:22;::::0;-1:-1:-1;;;;;10572:32:1;;;10554:51;;10542:2;10527:18;10224:22:0::1;;;;;;;10134:120::o:0;3645:98::-;3703:7;3730:5;3734:1;3730;:5;:::i;12585:191::-;12678:6;;;-1:-1:-1;;;;;12695:17:0;;;-1:-1:-1;;;;;;12695:17:0;;;;;;;12728:40;;12678:6;;;12695:17;12678:6;;12728:40;;12659:16;;12728:40;12648:128;12585:191;:::o;9875:118::-;9146:7;;-1:-1:-1;;;9146:7:0;;;;9400:9;9392:38;;;;-1:-1:-1;;;9392:38:0;;;;;;;:::i;:::-;9935:7:::1;:14:::0;;-1:-1:-1;;;;9935:14:0::1;-1:-1:-1::0;;;9935:14:0::1;::::0;;9965:20:::1;9972:12;7817:10:::0;;7737:98;53962:278;54021:21;54003:15;54059:176;54077:19;;54073:1;:23;54059:176;;;54117:108;54144:16;54161:1;54144:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54144:19:0;54209:3;54191:11;54203:1;54191:14;;;;;;;;:::i;:::-;;;;;;;;;54181:7;:24;;;;:::i;:::-;54180:32;;;;:::i;:::-;54117:10;:108::i;:::-;54098:3;;;;:::i;:::-;;;;54059:176;;42733:331;42888:8;-1:-1:-1;;;;;42879:17:0;:5;-1:-1:-1;;;;;42879:17:0;;;42871:71;;;;-1:-1:-1;;;42871:71:0;;30874:2:1;42871:71:0;;;30856:21:1;30913:2;30893:18;;;30886:30;30952:34;30932:18;;;30925:62;-1:-1:-1;;;31003:18:1;;;30996:39;31052:19;;42871:71:0;30672:405:1;42871:71:0;-1:-1:-1;;;;;42953:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;42953:46:0;;;;;;;;;;43015:41;;1159::1;;;43015::0;;1132:18:1;43015:41:0;;;;;;;42733:331;;;:::o;49545:202::-;49678:4;49733;49704:25;49717:5;49724:4;49704:12;:25::i;:::-;:33;;49545:202;-1:-1:-1;;;;49545:202:0:o;35419:820::-;-1:-1:-1;;;;;35607:16:0;;35599:66;;;;-1:-1:-1;;;35599:66:0;;;;;;;:::i;:::-;7817:10;35722:96;7817:10;35753:4;35759:2;35763:21;35781:2;35763:17;:21::i;35722:96::-;35831:19;35853:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;35853:19:0;;;;;;;;;;35891:21;;;;35883:76;;;;-1:-1:-1;;;35883:76:0;;;;;;;:::i;:::-;35995:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;35995:19:0;;;;;;;;;;36017:20;;;35995:42;;36059:17;;;;;;;:27;;36017:20;;35995:13;36059:27;;36017:20;;36059:27;:::i;:::-;;;;-1:-1:-1;;36104:46:0;;;30244:25:1;;;30300:2;30285:18;;30278:34;;;-1:-1:-1;;;;;36104:46:0;;;;;;;;;;;;;;30217:18:1;36104:46:0;;;;;;;36163:68;36194:8;36204:4;36210:2;36214;36218:6;36226:4;36163:30;:68::i;66718:314::-;9146:7;;-1:-1:-1;;;9146:7:0;;;;9400:9;9392:38;;;;-1:-1:-1;;;9392:38:0;;;;;;;:::i;:::-;66958:66:::1;66985:8;66995:4;67001:2;67005:3;67010:7;67019:4;66958:26;:66::i;44953:813::-:0;-1:-1:-1;;;;;45193:13:0;;13922:20;13970:8;45189:570;;45229:79;;-1:-1:-1;;;45229:79:0;;-1:-1:-1;;;;;45229:43:0;;;;;:79;;45273:8;;45283:4;;45289:3;;45294:7;;45303:4;;45229:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45229:79:0;;;;;;;;-1:-1:-1;;45229:79:0;;;;;;;;;;;;:::i;:::-;;;45225:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;45621:6;45614:14;;-1:-1:-1;;;45614:14:0;;;;;;;;:::i;45225:523::-;;;45670:62;;-1:-1:-1;;;45670:62:0;;33230:2:1;45670:62:0;;;33212:21:1;33269:2;33249:18;;;33242:30;33308:34;33288:18;;;33281:62;-1:-1:-1;;;33359:18:1;;;33352:50;33419:19;;45670:62:0;33028:416:1;45225:523:0;-1:-1:-1;;;;;;45390:60:0;;-1:-1:-1;;;45390:60:0;45386:159;;45475:50;;-1:-1:-1;;;45475:50:0;;;;;;;:::i;45774:198::-;45894:16;;;45908:1;45894:16;;;;;;;;;45840;;45869:22;;45894:16;;;;;;;;;;;;-1:-1:-1;45894:16:0;45869:41;;45932:7;45921:5;45927:1;45921:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;45959:5;45774:198;-1:-1:-1;;45774:198:0:o;44201:744::-;-1:-1:-1;;;;;44416:13:0;;13922:20;13970:8;44412:526;;44452:72;;-1:-1:-1;;;44452:72:0;;-1:-1:-1;;;;;44452:38:0;;;;;:72;;44491:8;;44501:4;;44507:2;;44511:6;;44519:4;;44452:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44452:72:0;;;;;;;;-1:-1:-1;;44452:72:0;;;;;;;;;;;;:::i;:::-;;;44448:479;;;;:::i;:::-;-1:-1:-1;;;;;;44574:55:0;;-1:-1:-1;;;44574:55:0;44570:154;;44654:50;;-1:-1:-1;;;44654:50:0;;;;;;;:::i;54248:175::-;54321:12;54339:8;-1:-1:-1;;;;;54339:13:0;54360:7;54339:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54320:52;;;54389:7;54381:36;;;;-1:-1:-1;;;54381:36:0;;34836:2:1;54381:36:0;;;34818:21:1;34875:2;34855:18;;;34848:30;-1:-1:-1;;;34894:18:1;;;34887:46;34950:18;;54381:36:0;34634:340:1;50121:701:0;50204:7;50249:4;50204:7;50266:515;50290:5;:12;50286:1;:16;50266:515;;;50326:20;50349:5;50355:1;50349:8;;;;;;;;:::i;:::-;;;;;;;50326:31;;50394:12;50378;:28;50374:394;;50902:13;50956:15;;;50994:4;50987:15;;;51043:4;51027:21;;50510:57;;50374:394;;;50902:13;50956:15;;;50994:4;50987:15;;;51043:4;51027:21;;50693:57;;50374:394;-1:-1:-1;50304:3:0;;;;:::i;:::-;;;;50266:515;;47747:655;-1:-1:-1;;;;;48069:18:0;;48065:160;;48109:9;48104:110;48128:3;:10;48124:1;:14;48104:110;;;48188:7;48196:1;48188:10;;;;;;;;:::i;:::-;;;;;;;48164:12;:20;48177:3;48181:1;48177:6;;;;;;;;:::i;:::-;;;;;;;48164:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;48140:3:0;;-1:-1:-1;48140:3:0;;:::i;:::-;;;48104:110;;;;48065:160;-1:-1:-1;;;;;48241:16:0;;48237:158;;48279:9;48274:110;48298:3;:10;48294:1;:14;48274:110;;;48358:7;48366:1;48358:10;;;;;;;;:::i;:::-;;;;;;;48334:12;:20;48347:3;48351:1;48347:6;;;;;;;;:::i;:::-;;;;;;;48334:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;48310:3:0;;-1:-1:-1;48310:3:0;;:::i;:::-;;;48274:110;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;1211:472::-;1253:3;1291:5;1285:12;1318:6;1313:3;1306:19;1343:1;1353:162;1367:6;1364:1;1361:13;1353:162;;;1429:4;1485:13;;;1481:22;;1475:29;1457:11;;;1453:20;;1446:59;1382:12;1353:162;;;1533:6;1530:1;1527:13;1524:87;;;1599:1;1592:4;1583:6;1578:3;1574:16;1570:27;1563:38;1524:87;-1:-1:-1;1665:2:1;1644:15;-1:-1:-1;;1640:29:1;1631:39;;;;1672:4;1627:50;;1211:472;-1:-1:-1;;1211:472:1:o;1688:220::-;1837:2;1826:9;1819:21;1800:4;1857:45;1898:2;1887:9;1883:18;1875:6;1857:45;:::i;1913:180::-;1972:6;2025:2;2013:9;2004:7;2000:23;1996:32;1993:52;;;2041:1;2038;2031:12;1993:52;-1:-1:-1;2064:23:1;;1913:180;-1:-1:-1;1913:180:1:o;2098:127::-;2159:10;2154:3;2150:20;2147:1;2140:31;2190:4;2187:1;2180:15;2214:4;2211:1;2204:15;2230:249;2340:2;2321:13;;-1:-1:-1;;2317:27:1;2305:40;;-1:-1:-1;;;;;2360:34:1;;2396:22;;;2357:62;2354:88;;;2422:18;;:::i;:::-;2458:2;2451:22;-1:-1:-1;;2230:249:1:o;2484:556::-;2527:5;2580:3;2573:4;2565:6;2561:17;2557:27;2547:55;;2598:1;2595;2588:12;2547:55;2634:6;2621:20;-1:-1:-1;;;;;2656:2:1;2653:26;2650:52;;;2682:18;;:::i;:::-;2731:2;2725:9;2743:67;2798:2;2779:13;;-1:-1:-1;;2775:27:1;2804:4;2771:38;2725:9;2743:67;:::i;:::-;2834:2;2826:6;2819:18;2880:3;2873:4;2868:2;2860:6;2856:15;2852:26;2849:35;2846:55;;;2897:1;2894;2887:12;2846:55;2961:2;2954:4;2946:6;2942:17;2935:4;2927:6;2923:17;2910:54;3008:1;2984:15;;;3001:4;2980:26;2973:37;;;;2988:6;2484:556;-1:-1:-1;;;2484:556:1:o;3045:390::-;3123:6;3131;3184:2;3172:9;3163:7;3159:23;3155:32;3152:52;;;3200:1;3197;3190:12;3152:52;3236:9;3223:23;3213:33;;3297:2;3286:9;3282:18;3269:32;-1:-1:-1;;;;;3316:6:1;3313:30;3310:50;;;3356:1;3353;3346:12;3310:50;3379;3421:7;3412:6;3401:9;3397:22;3379:50;:::i;:::-;3369:60;;;3045:390;;;;;:::o;3440:183::-;3500:4;-1:-1:-1;;;;;3525:6:1;3522:30;3519:56;;;3555:18;;:::i;:::-;-1:-1:-1;3600:1:1;3596:14;3612:4;3592:25;;3440:183::o;3628:724::-;3682:5;3735:3;3728:4;3720:6;3716:17;3712:27;3702:55;;3753:1;3750;3743:12;3702:55;3789:6;3776:20;3815:4;3838:43;3878:2;3838:43;:::i;:::-;3910:2;3904:9;3922:31;3950:2;3942:6;3922:31;:::i;:::-;3988:18;;;4080:1;4076:10;;;;4064:23;;4060:32;;;4022:15;;;;-1:-1:-1;4104:15:1;;;4101:35;;;4132:1;4129;4122:12;4101:35;4168:2;4160:6;4156:15;4180:142;4196:6;4191:3;4188:15;4180:142;;;4262:17;;4250:30;;4300:12;;;;4213;;4180:142;;;-1:-1:-1;4340:6:1;3628:724;-1:-1:-1;;;;;;3628:724:1:o;4357:944::-;4511:6;4519;4527;4535;4543;4596:3;4584:9;4575:7;4571:23;4567:33;4564:53;;;4613:1;4610;4603:12;4564:53;4636:29;4655:9;4636:29;:::i;:::-;4626:39;;4684:38;4718:2;4707:9;4703:18;4684:38;:::i;:::-;4674:48;;4773:2;4762:9;4758:18;4745:32;-1:-1:-1;;;;;4837:2:1;4829:6;4826:14;4823:34;;;4853:1;4850;4843:12;4823:34;4876:61;4929:7;4920:6;4909:9;4905:22;4876:61;:::i;:::-;4866:71;;4990:2;4979:9;4975:18;4962:32;4946:48;;5019:2;5009:8;5006:16;5003:36;;;5035:1;5032;5025:12;5003:36;5058:63;5113:7;5102:8;5091:9;5087:24;5058:63;:::i;:::-;5048:73;;5174:3;5163:9;5159:19;5146:33;5130:49;;5204:2;5194:8;5191:16;5188:36;;;5220:1;5217;5210:12;5188:36;;5243:52;5287:7;5276:8;5265:9;5261:24;5243:52;:::i;:::-;5233:62;;;4357:944;;;;;;;;:::o;5306:118::-;5392:5;5385:13;5378:21;5371:5;5368:32;5358:60;;5414:1;5411;5404:12;5429:793;5537:6;5545;5553;5561;5569;5577;5630:3;5618:9;5609:7;5605:23;5601:33;5598:53;;;5647:1;5644;5637:12;5598:53;5683:9;5670:23;5660:33;;5740:2;5729:9;5725:18;5712:32;5702:42;;5791:2;5780:9;5776:18;5763:32;5753:42;;5845:2;5834:9;5830:18;5817:32;5858:28;5880:5;5858:28;:::i;:::-;5905:5;-1:-1:-1;5962:3:1;5947:19;;5934:33;5976:30;5934:33;5976:30;:::i;:::-;6025:7;-1:-1:-1;6083:3:1;6068:19;;6055:33;-1:-1:-1;;;;;6100:30:1;;6097:50;;;6143:1;6140;6133:12;6097:50;6166;6208:7;6199:6;6188:9;6184:22;6166:50;:::i;:::-;6156:60;;;5429:793;;;;;;;;:::o;6227:248::-;6295:6;6303;6356:2;6344:9;6335:7;6331:23;6327:32;6324:52;;;6372:1;6369;6362:12;6324:52;-1:-1:-1;;6395:23:1;;;6465:2;6450:18;;;6437:32;;-1:-1:-1;6227:248:1:o;6669:322::-;6746:6;6754;6762;6815:2;6803:9;6794:7;6790:23;6786:32;6783:52;;;6831:1;6828;6821:12;6783:52;6854:29;6873:9;6854:29;:::i;:::-;6844:39;6930:2;6915:18;;6902:32;;-1:-1:-1;6981:2:1;6966:18;;;6953:32;;6669:322;-1:-1:-1;;;6669:322:1:o;6996:730::-;7050:5;7103:3;7096:4;7088:6;7084:17;7080:27;7070:55;;7121:1;7118;7111:12;7070:55;7157:6;7144:20;7183:4;7206:43;7246:2;7206:43;:::i;:::-;7278:2;7272:9;7290:31;7318:2;7310:6;7290:31;:::i;:::-;7356:18;;;7448:1;7444:10;;;;7432:23;;7428:32;;;7390:15;;;;-1:-1:-1;7472:15:1;;;7469:35;;;7500:1;7497;7490:12;7469:35;7536:2;7528:6;7524:15;7548:148;7564:6;7559:3;7556:15;7548:148;;;7630:23;7649:3;7630:23;:::i;:::-;7618:36;;7674:12;;;;7581;;7548:148;;7731:595;7849:6;7857;7910:2;7898:9;7889:7;7885:23;7881:32;7878:52;;;7926:1;7923;7916:12;7878:52;7966:9;7953:23;-1:-1:-1;;;;;8036:2:1;8028:6;8025:14;8022:34;;;8052:1;8049;8042:12;8022:34;8075:61;8128:7;8119:6;8108:9;8104:22;8075:61;:::i;:::-;8065:71;;8189:2;8178:9;8174:18;8161:32;8145:48;;8218:2;8208:8;8205:16;8202:36;;;8234:1;8231;8224:12;8202:36;;8257:63;8312:7;8301:8;8290:9;8286:24;8257:63;:::i;8331:435::-;8384:3;8422:5;8416:12;8449:6;8444:3;8437:19;8475:4;8504:2;8499:3;8495:12;8488:19;;8541:2;8534:5;8530:14;8562:1;8572:169;8586:6;8583:1;8580:13;8572:169;;;8647:13;;8635:26;;8681:12;;;;8716:15;;;;8608:1;8601:9;8572:169;;;-1:-1:-1;8757:3:1;;8331:435;-1:-1:-1;;;;;8331:435:1:o;8771:261::-;8950:2;8939:9;8932:21;8913:4;8970:56;9022:2;9011:9;9007:18;8999:6;8970:56;:::i;9037:484::-;9139:6;9147;9155;9208:2;9196:9;9187:7;9183:23;9179:32;9176:52;;;9224:1;9221;9214:12;9176:52;9264:9;9251:23;-1:-1:-1;;;;;9289:6:1;9286:30;9283:50;;;9329:1;9326;9319:12;9283:50;9352:61;9405:7;9396:6;9385:9;9381:22;9352:61;:::i;:::-;9342:71;9460:2;9445:18;;9432:32;;-1:-1:-1;9511:2:1;9496:18;;;9483:32;;9037:484;-1:-1:-1;;;;9037:484:1:o;9526:367::-;9589:8;9599:6;9653:3;9646:4;9638:6;9634:17;9630:27;9620:55;;9671:1;9668;9661:12;9620:55;-1:-1:-1;9694:20:1;;-1:-1:-1;;;;;9726:30:1;;9723:50;;;9769:1;9766;9759:12;9723:50;9806:4;9798:6;9794:17;9782:29;;9866:3;9859:4;9849:6;9846:1;9842:14;9834:6;9830:27;9826:38;9823:47;9820:67;;;9883:1;9880;9873:12;9820:67;9526:367;;;;;:::o;9898:505::-;9993:6;10001;10009;10062:2;10050:9;10041:7;10037:23;10033:32;10030:52;;;10078:1;10075;10068:12;10030:52;10114:9;10101:23;10091:33;;10175:2;10164:9;10160:18;10147:32;-1:-1:-1;;;;;10194:6:1;10191:30;10188:50;;;10234:1;10231;10224:12;10188:50;10273:70;10335:7;10326:6;10315:9;10311:22;10273:70;:::i;:::-;9898:505;;10362:8;;-1:-1:-1;10247:96:1;;-1:-1:-1;;;;9898:505:1:o;10798:315::-;10863:6;10871;10924:2;10912:9;10903:7;10899:23;10895:32;10892:52;;;10940:1;10937;10930:12;10892:52;10963:29;10982:9;10963:29;:::i;:::-;10953:39;;11042:2;11031:9;11027:18;11014:32;11055:28;11077:5;11055:28;:::i;:::-;11102:5;11092:15;;;10798:315;;;;;:::o;11118:573::-;11222:6;11230;11238;11246;11299:2;11287:9;11278:7;11274:23;11270:32;11267:52;;;11315:1;11312;11305:12;11267:52;11351:9;11338:23;11328:33;;11408:2;11397:9;11393:18;11380:32;11370:42;;11463:2;11452:9;11448:18;11435:32;-1:-1:-1;;;;;11482:6:1;11479:30;11476:50;;;11522:1;11519;11512:12;11476:50;11561:70;11623:7;11614:6;11603:9;11599:22;11561:70;:::i;:::-;11118:573;;;;-1:-1:-1;11650:8:1;-1:-1:-1;;;;11118:573:1:o;11696:186::-;11755:6;11808:2;11796:9;11787:7;11783:23;11779:32;11776:52;;;11824:1;11821;11814:12;11776:52;11847:29;11866:9;11847:29;:::i;11887:579::-;11991:6;11999;12007;12015;12068:2;12056:9;12047:7;12043:23;12039:32;12036:52;;;12084:1;12081;12074:12;12036:52;12107:29;12126:9;12107:29;:::i;:::-;12097:39;;12183:2;12172:9;12168:18;12155:32;12145:42;;12238:2;12227:9;12223:18;12210:32;-1:-1:-1;;;;;12257:6:1;12254:30;12251:50;;;12297:1;12294;12287:12;12471:260;12539:6;12547;12600:2;12588:9;12579:7;12575:23;12571:32;12568:52;;;12616:1;12613;12606:12;12568:52;12639:29;12658:9;12639:29;:::i;:::-;12629:39;;12687:38;12721:2;12710:9;12706:18;12687:38;:::i;:::-;12677:48;;12471:260;;;;;:::o;12989:607::-;13093:6;13101;13109;13117;13125;13178:3;13166:9;13157:7;13153:23;13149:33;13146:53;;;13195:1;13192;13185:12;13146:53;13218:29;13237:9;13218:29;:::i;:::-;13208:39;;13266:38;13300:2;13289:9;13285:18;13266:38;:::i;:::-;13256:48;;13351:2;13340:9;13336:18;13323:32;13313:42;;13402:2;13391:9;13387:18;13374:32;13364:42;;13457:3;13446:9;13442:19;13429:33;-1:-1:-1;;;;;13477:6:1;13474:30;13471:50;;;13517:1;13514;13507:12;13471:50;13540;13582:7;13573:6;13562:9;13558:22;13540:50;:::i;14013:380::-;14092:1;14088:12;;;;14135;;;14156:61;;14210:4;14202:6;14198:17;14188:27;;14156:61;14263:2;14255:6;14252:14;14232:18;14229:38;14226:161;;;14309:10;14304:3;14300:20;14297:1;14290:31;14344:4;14341:1;14334:15;14372:4;14369:1;14362:15;14226:161;;14013:380;;;:::o;14398:401::-;14600:2;14582:21;;;14639:2;14619:18;;;14612:30;14678:34;14673:2;14658:18;;14651:62;-1:-1:-1;;;14744:2:1;14729:18;;14722:35;14789:3;14774:19;;14398:401::o;14804:348::-;15006:2;14988:21;;;15045:2;15025:18;;;15018:30;15084:26;15079:2;15064:18;;15057:54;15143:2;15128:18;;14804:348::o;15157:356::-;15359:2;15341:21;;;15378:18;;;15371:30;15437:34;15432:2;15417:18;;15410:62;15504:2;15489:18;;15157:356::o;15518:127::-;15579:10;15574:3;15570:20;15567:1;15560:31;15610:4;15607:1;15600:15;15634:4;15631:1;15624:15;16002:127;16063:10;16058:3;16054:20;16051:1;16044:31;16094:4;16091:1;16084:15;16118:4;16115:1;16108:15;16134:135;16173:3;-1:-1:-1;;16194:17:1;;16191:43;;;16214:18;;:::i;:::-;-1:-1:-1;16261:1:1;16250:13;;16134:135::o;18714:401::-;18916:2;18898:21;;;18955:2;18935:18;;;18928:30;18994:34;18989:2;18974:18;;18967:62;-1:-1:-1;;;19060:2:1;19045:18;;19038:35;19105:3;19090:19;;18714:401::o;20249:340::-;20451:2;20433:21;;;20490:2;20470:18;;;20463:30;-1:-1:-1;;;20524:2:1;20509:18;;20502:46;20580:2;20565:18;;20249:340::o;20594:403::-;20796:2;20778:21;;;20835:2;20815:18;;;20808:30;20874:34;20869:2;20854:18;;20847:62;-1:-1:-1;;;20940:2:1;20925:18;;20918:37;20987:3;20972:19;;20594:403::o;21002:414::-;21204:2;21186:21;;;21243:2;21223:18;;;21216:30;21282:34;21277:2;21262:18;;21255:62;-1:-1:-1;;;21348:2:1;21333:18;;21326:48;21406:3;21391:19;;21002:414::o;22133:410::-;22335:2;22317:21;;;22374:2;22354:18;;;22347:30;22413:34;22408:2;22393:18;;22386:62;-1:-1:-1;;;22479:2:1;22464:18;;22457:44;22533:3;22518:19;;22133:410::o;22548:184::-;22618:6;22671:2;22659:9;22650:7;22646:23;22642:32;22639:52;;;22687:1;22684;22677:12;22639:52;-1:-1:-1;22710:16:1;;22548:184;-1:-1:-1;22548:184:1:o;23141:168::-;23181:7;23247:1;23243;23239:6;23235:14;23232:1;23229:21;23224:1;23217:9;23210:17;23206:45;23203:71;;;23254:18;;:::i;:::-;-1:-1:-1;23294:9:1;;23141:168::o;23314:217::-;23354:1;23380;23370:132;;23424:10;23419:3;23415:20;23412:1;23405:31;23459:4;23456:1;23449:15;23487:4;23484:1;23477:15;23370:132;-1:-1:-1;23516:9:1;;23314:217::o;23815:245::-;23882:6;23935:2;23923:9;23914:7;23910:23;23906:32;23903:52;;;23951:1;23948;23941:12;23903:52;23983:9;23977:16;24002:28;24024:5;24002:28;:::i;24833:475::-;25035:2;25017:21;;;25074:2;25054:18;;;25047:30;25113:34;25108:2;25093:18;;25086:62;25184:34;25179:2;25164:18;;25157:62;-1:-1:-1;;;25250:3:1;25235:19;;25228:38;25298:3;25283:19;;24833:475::o;25313:398::-;25515:2;25497:21;;;25554:2;25534:18;;;25527:30;25593:34;25588:2;25573:18;;25566:62;-1:-1:-1;;;25659:2:1;25644:18;;25637:32;25701:3;25686:19;;25313:398::o;28248:401::-;28450:2;28432:21;;;28489:2;28469:18;;;28462:30;28528:34;28523:2;28508:18;;28501:62;-1:-1:-1;;;28594:2:1;28579:18;;28572:35;28639:3;28624:19;;28248:401::o;28654:406::-;28856:2;28838:21;;;28895:2;28875:18;;;28868:30;28934:34;28929:2;28914:18;;28907:62;-1:-1:-1;;;29000:2:1;28985:18;;28978:40;29050:3;29035:19;;28654:406::o;29065:128::-;29105:3;29136:1;29132:6;29129:1;29126:13;29123:39;;;29142:18;;:::i;:::-;-1:-1:-1;29178:9:1;;29065:128::o;29198:465::-;29455:2;29444:9;29437:21;29418:4;29481:56;29533:2;29522:9;29518:18;29510:6;29481:56;:::i;:::-;29585:9;29577:6;29573:22;29568:2;29557:9;29553:18;29546:50;29613:44;29650:6;29642;29613:44;:::i;:::-;29605:52;29198:465;-1:-1:-1;;;;;29198:465:1:o;31082:827::-;-1:-1:-1;;;;;31479:15:1;;;31461:34;;31531:15;;31526:2;31511:18;;31504:43;31441:3;31578:2;31563:18;;31556:31;;;31404:4;;31610:57;;31647:19;;31639:6;31610:57;:::i;:::-;31715:9;31707:6;31703:22;31698:2;31687:9;31683:18;31676:50;31749:44;31786:6;31778;31749:44;:::i;:::-;31735:58;;31842:9;31834:6;31830:22;31824:3;31813:9;31809:19;31802:51;31870:33;31896:6;31888;31870:33;:::i;:::-;31862:41;31082:827;-1:-1:-1;;;;;;;;31082:827:1:o;31914:249::-;31983:6;32036:2;32024:9;32015:7;32011:23;32007:32;32004:52;;;32052:1;32049;32042:12;32004:52;32084:9;32078:16;32103:30;32127:5;32103:30;:::i;32168:179::-;32203:3;32245:1;32227:16;32224:23;32221:120;;;32291:1;32288;32285;32270:23;-1:-1:-1;32328:1:1;32322:8;32317:3;32313:18;32221:120;32168:179;:::o;32352:671::-;32391:3;32433:4;32415:16;32412:26;32409:39;;;32352:671;:::o;32409:39::-;32475:2;32469:9;-1:-1:-1;;32540:16:1;32536:25;;32533:1;32469:9;32512:50;32591:4;32585:11;32615:16;-1:-1:-1;;;;;32721:2:1;32714:4;32706:6;32702:17;32699:25;32694:2;32686:6;32683:14;32680:45;32677:58;;;32728:5;;;;;32352:671;:::o;32677:58::-;32765:6;32759:4;32755:17;32744:28;;32801:3;32795:10;32828:2;32820:6;32817:14;32814:27;;;32834:5;;;;;;32352:671;:::o;32814:27::-;32918:2;32899:16;32893:4;32889:27;32885:36;32878:4;32869:6;32864:3;32860:16;32856:27;32853:69;32850:82;;;32925:5;;;;;;32352:671;:::o;32850:82::-;32941:57;32992:4;32983:6;32975;32971:19;32967:30;32961:4;32941:57;:::i;:::-;-1:-1:-1;33014:3:1;;32352:671;-1:-1:-1;;;;;32352:671:1:o;33449:404::-;33651:2;33633:21;;;33690:2;33670:18;;;33663:30;33729:34;33724:2;33709:18;;33702:62;-1:-1:-1;;;33795:2:1;33780:18;;33773:38;33843:3;33828:19;;33449:404::o;33858:561::-;-1:-1:-1;;;;;34155:15:1;;;34137:34;;34207:15;;34202:2;34187:18;;34180:43;34254:2;34239:18;;34232:34;;;34297:2;34282:18;;34275:34;;;34117:3;34340;34325:19;;34318:32;;;34080:4;;34367:46;;34393:19;;34385:6;34367:46;:::i;:::-;34359:54;33858:561;-1:-1:-1;;;;;;;33858:561:1:o;34979:125::-;35019:4;35047:1;35044;35041:8;35038:34;;;35052:18;;:::i;:::-;-1:-1:-1;35089:9:1;;34979:125::o

Swarm Source

ipfs://a9512ade5a1689cd26c950ae6c8f43c3af5bfc5dfdfa1c16216fc30e55d90b8a
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.