ETH Price: $3,422.96 (+3.09%)

Token

Slice Of Heaven By BEEBLE (SLICEOFHEAVEN)
 

Overview

Max Total Supply

1,000 SLICEOFHEAVEN

Holders

409

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 SLICEOFHEAVEN
0xd61C35a4DaDa2d3FF5f9A85eD625F48E3dA4349d
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:
SLICEOFHEAVEN

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-05
*/

// File: @openzeppelin/[email protected]/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

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.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
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 Merklee 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: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// 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/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// 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/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;








error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function getHolderWL(address owner) public view returns (uint256) {
       uint256 holderWL;
       holderWL = uint256(IERC721(0x6FEFb647395e680339bADC84dC774E3CA8bCA7B9).balanceOf(owner));
       return holderWL;
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
// File: contracts/SliceOfHeaven.sol

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;





contract SLICEOFHEAVEN is ERC721A, Ownable {
    using Strings for uint256;
    uint256 public constant maxSupply = 1000;
    uint256 public cost = 0.02 ether;
    uint256 public WLcost = 0.02 ether;
    uint256 public pubCost = 0.04 ether;
    uint256 public holderQ;
    bytes32 private merkleRoot;
    bool public holderSaleActive;
    bool public pubActive;
    string private baseURI;
    bool public appendedID;
    mapping(address => uint256) public holderFreeMintAmount;
    mapping(address => uint256) public holderPaidMintAmount;
    mapping(address => uint256) public whitelistFreeClaimed;
    mapping(address => uint256) public whitelistPaidClaimed;
    mapping(address => uint256) public pubPaidMintAmount;

    constructor() ERC721A("Slice Of Heaven By BEEBLE", "SLICEOFHEAVEN") {
    }

    function mintFreeHolder(uint256 _quantity, bytes32[] memory _merkleProof) external payable {
        uint256 supply = totalSupply();
        holderQ = getHolderWL(msg.sender);
        bytes32 leaf = keccak256(abi.encodePacked(_msgSender()));
        require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), 'Invalid proof!');
        require(supply + _quantity <= maxSupply, "Cant go over supply");
        require(holderSaleActive, "HOLDERSALE_INACTIVE");
        require(holderFreeMintAmount[msg.sender] + _quantity <= holderQ, "HOLDERSALEFREE_MAXED");
        unchecked {
            holderFreeMintAmount[msg.sender] += _quantity;
        }
        _safeMint(msg.sender, 1);
    }

    function mintPaidHolder(uint256 _quantity, bytes32[] memory _merkleProof) external payable {
        uint256 supply = totalSupply();
        holderQ = getHolderWL(msg.sender);
        bytes32 leaf = keccak256(abi.encodePacked(_msgSender()));
        require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), 'Invalid proof!');
        require(supply + _quantity <= maxSupply, "Cant go over supply");
        require(holderSaleActive, "HOLDERSALE_INACTIVE");
        require(holderPaidMintAmount[msg.sender] + _quantity <= holderQ*2, "HOLDERSALEPAID_MAXED");
        require(msg.value >= cost, "INCORRECT_ETH");
        unchecked {
            holderPaidMintAmount[msg.sender] += _quantity;
        }
        _safeMint(msg.sender, _quantity);
    }

    function mintPaidWL(uint256 _quantity, bytes32[] memory _merkleProof) public payable {
        require(holderSaleActive, "HOLDERSALE_INACTIVE");
        holderQ = getHolderWL(msg.sender);
        require(holderQ == 0);
        uint256 s = totalSupply();
        require(s + _quantity <= maxSupply, "Cant go over supply");
        require(msg.value >= WLcost);
        bytes32 leaf = keccak256(abi.encodePacked(_msgSender()));
        require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), 'Invalid proof!');
        require(whitelistPaidClaimed[msg.sender] + _quantity <= 2, "WLPAID_MAXED");
        unchecked {
            whitelistPaidClaimed[msg.sender] += _quantity;
        }
        _safeMint(msg.sender, 1);
        delete s;
    }


    function mintPaidPublic(uint256 _quantity) external payable {
        uint256 s = totalSupply();
        require(s + _quantity <= maxSupply, "Cant go over supply");
        require(pubActive, "PUBLIC_INACTIVE");
        require(msg.value >= pubCost, "INCORRECT_ETH");
        require(pubPaidMintAmount[msg.sender] + _quantity <= 4, "PUBLICPAID_MAXED");
        unchecked {
            pubPaidMintAmount[msg.sender] += _quantity;
        }
        _safeMint(msg.sender, _quantity);
    }

    function treasuryMint(address _account, uint256 _quantity)
        external
        onlyOwner
    {
        uint256 s = totalSupply();
        require(s + _quantity <= maxSupply, "Over Supply");
        require(_quantity > 0, "QUANTITY_INVALID");
        _safeMint(_account, _quantity);
    }

    function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function setHolderCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setPubCost(uint256 _newCost) public onlyOwner {
        pubCost = _newCost;
    }

    function activateHolderSale() external onlyOwner {
        !holderSaleActive ? holderSaleActive = true : holderSaleActive = false;
    }

    function activatePublicSale() external onlyOwner {
        !pubActive ? pubActive = true : pubActive = false;
    }

    function numberMinted(address owner) external view returns (uint256) {
        return _numberMinted(owner);
    }

    function setBaseURI(string calldata _baseURI, bool appendID) external onlyOwner {
        if (!appendedID && appendID) appendedID = appendID; 
        baseURI = _baseURI;
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(_exists(_tokenId), "Cannot query non-existent token");
        if (appendedID) {
        return string(abi.encodePacked(baseURI, _tokenId.toString()));
        } else {
            return baseURI;
        }
    }

    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }

    function withdrawAny(uint256 _amount) public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{value: _amount}("");
        require(success);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WLcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateHolderSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activatePublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"appendedID","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getHolderWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderFreeMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderPaidMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderQ","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintFreeHolder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintPaidHolder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mintPaidPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mintPaidWL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pubActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pubCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pubPaidMintAmount","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":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"bool","name":"appendID","type":"bool"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setHolderCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPubCost","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":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"treasuryMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFreeClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistPaidClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAny","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266470de4df82000060095566470de4df820000600a55668e1bc9bf040000600b553480156200003257600080fd5b506040518060400160405280601981526020017f536c696365204f662048656176656e20427920424545424c45000000000000008152506040518060400160405280600d81526020017f534c4943454f4648454156454e000000000000000000000000000000000000008152508160029080519060200190620000b7929190620001e2565b508060039080519060200190620000d0929190620001e2565b50620000e16200010f60201b60201c565b600081905550505062000109620000fd6200011460201b60201c565b6200011c60201b60201c565b620002f7565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f090620002c1565b90600052602060002090601f01602090048101928262000214576000855562000260565b82601f106200022f57805160ff191683800117855562000260565b8280016001018555821562000260579182015b828111156200025f57825182559160200191906001019062000242565b5b5090506200026f919062000273565b5090565b5b808211156200028e57600081600090555060010162000274565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002da57607f821691505b60208210811415620002f157620002f062000292565b5b50919050565b61470480620003076000396000f3fe6080604052600436106102725760003560e01c80637cb647591161014f578063b88d4fde116100c1578063e985e9c51161007a578063e985e9c51461091d578063eaba90581461095a578063ee2944da14610997578063f183f2f3146109c2578063f2fde38b146109de578063fd8b262d14610a0757610272565b8063b88d4fde14610808578063bf41b4a714610831578063c87b56dd1461085c578063d03cad1514610899578063d5abeb01146108b5578063dc33e681146108e057610272565b806395d89b411161011357806395d89b4114610709578063a22cb46514610734578063aa35cca31461075d578063aac80dd914610786578063b3b1cc7a146107c3578063b64b21ca146107df57610272565b80637cb64759146106245780638a9019f01461064d5780638da5cb5b1461068a57806390f6f728146106b557806394593765146106de57610272565b806323b872dd116101e85780636352211e116101ac5780636352211e1461051e5780636fae5a5c1461055b57806370a0823114610598578063715018a6146105d55780637661bc05146105ec57806377ad99f01461060857610272565b806323b872dd1461048057806338c30305146104a95780633ccfd60b146104c057806342842e0e146104ca57806352417630146104f357610272565b8063095ea7b31161023a578063095ea7b31461038257806311eb3047146103ab57806313faede6146103c2578063146f14cb146103ed57806318160ddd1461042a57806322515b771461045557610272565b806301ffc9a714610277578063030efb8f146102b457806306fdde03146102dd5780630714b54514610308578063081812fc14610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906133e8565b610a32565b6040516102ab9190613430565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613481565b610b14565b005b3480156102e957600080fd5b506102f2610b26565b6040516102ff9190613547565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906135c7565b610bb8565b60405161033c9190613603565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613481565b610bd0565b604051610379919061362d565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613648565b610c4c565b005b3480156103b757600080fd5b506103c0610d57565b005b3480156103ce57600080fd5b506103d7610db1565b6040516103e49190613603565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f91906135c7565b610db7565b6040516104219190613603565b60405180910390f35b34801561043657600080fd5b5061043f610dcf565b60405161044c9190613603565b60405180910390f35b34801561046157600080fd5b5061046a610de6565b6040516104779190613603565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613688565b610dec565b005b3480156104b557600080fd5b506104be610dfc565b005b6104c8610e56565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190613688565b610ed7565b005b3480156104ff57600080fd5b50610508610ef7565b6040516105159190613603565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613481565b610efd565b604051610552919061362d565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d91906135c7565b610f13565b60405161058f9190613603565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906135c7565b610f2b565b6040516105cc9190613603565b60405180910390f35b3480156105e157600080fd5b506105ea610ffb565b005b61060660048036038101906106019190613859565b61100f565b005b610622600480360381019061061d9190613481565b611255565b005b34801561063057600080fd5b5061064b600480360381019061064691906138b5565b6112d7565b005b34801561065957600080fd5b50610674600480360381019061066f91906135c7565b6112e9565b6040516106819190613603565b60405180910390f35b34801561069657600080fd5b5061069f611394565b6040516106ac919061362d565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613481565b6113be565b005b3480156106ea57600080fd5b506106f36113d0565b6040516107009190613430565b60405180910390f35b34801561071557600080fd5b5061071e6113e3565b60405161072b9190613547565b60405180910390f35b34801561074057600080fd5b5061075b6004803603810190610756919061390e565b611475565b005b34801561076957600080fd5b50610784600480360381019061077f9190613648565b6115ed565b005b34801561079257600080fd5b506107ad60048036038101906107a891906135c7565b6116a3565b6040516107ba9190613603565b60405180910390f35b6107dd60048036038101906107d89190613859565b6116bb565b005b3480156107eb57600080fd5b50610806600480360381019061080191906139a9565b611930565b005b34801561081457600080fd5b5061082f600480360381019061082a9190613abe565b611989565b005b34801561083d57600080fd5b50610846611a05565b6040516108539190613603565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e9190613481565b611a0b565b6040516108909190613547565b60405180910390f35b6108b360048036038101906108ae9190613859565b611b2f565b005b3480156108c157600080fd5b506108ca611d54565b6040516108d79190613603565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906135c7565b611d5a565b6040516109149190613603565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f9190613b41565b611d6c565b6040516109519190613430565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c91906135c7565b611e00565b60405161098e9190613603565b60405180910390f35b3480156109a357600080fd5b506109ac611e18565b6040516109b99190613430565b60405180910390f35b6109dc60048036038101906109d79190613481565b611e2b565b005b3480156109ea57600080fd5b50610a056004803603810190610a0091906135c7565b612004565b005b348015610a1357600080fd5b50610a1c612088565b604051610a299190613430565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610afd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b0d5750610b0c8261209b565b5b9050919050565b610b1c612105565b8060098190555050565b606060028054610b3590613bb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6190613bb0565b8015610bae5780601f10610b8357610100808354040283529160200191610bae565b820191906000526020600020905b815481529060010190602001808311610b9157829003601f168201915b5050505050905090565b60126020528060005260406000206000915090505481565b6000610bdb82612183565b610c11576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5782610efd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cbf576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cde6121d1565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d105750610d0e81610d096121d1565b611d6c565b155b15610d47576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d528383836121d9565b505050565b610d5f612105565b600e60019054906101000a900460ff1615610d93576000600e60016101000a81548160ff0219169083151502179055610dae565b6001600e60016101000a81548160ff02191690831515021790555b50565b60095481565b60146020528060005260406000206000915090505481565b6000610dd961228b565b6001546000540303905090565b600b5481565b610df7838383612290565b505050565b610e04612105565b600e60009054906101000a900460ff1615610e38576000600e60006101000a81548160ff0219169083151502179055610e53565b6001600e60006101000a81548160ff02191690831515021790555b50565b610e5e612105565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e8490613c13565b60006040518083038185875af1925050503d8060008114610ec1576040519150601f19603f3d011682016040523d82523d6000602084013e610ec6565b606091505b5050905080610ed457600080fd5b50565b610ef283838360405180602001604052806000815250611989565b505050565b600a5481565b6000610f0882612746565b600001519050919050565b60136020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f93576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611003612105565b61100d60006129d5565b565b600e60009054906101000a900460ff1661105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590613c74565b60405180910390fd5b611067336112e9565b600c819055506000600c541461107c57600080fd5b6000611086610dcf565b90506103e883826110979190613cc3565b11156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90613d65565b60405180910390fd5b600a543410156110e757600080fd5b60006110f16121d1565b6040516020016111019190613dcd565b60405160208183030381529060405280519060200120905061112683600d5483612a9b565b611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90613e34565b60405180910390fd5b600284601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111b29190613cc3565b11156111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90613ea0565b60405180910390fd5b83601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061124b336001612ab2565b6000915050505050565b61125d612105565b60003373ffffffffffffffffffffffffffffffffffffffff168260405161128390613c13565b60006040518083038185875af1925050503d80600081146112c0576040519150601f19603f3d011682016040523d82523d6000602084013e6112c5565b606091505b50509050806112d357600080fd5b5050565b6112df612105565b80600d8190555050565b600080736fefb647395e680339badc84dc774e3ca8bca7b973ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611339919061362d565b60206040518083038186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190613ed5565b905080915050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113c6612105565b80600b8190555050565b601060009054906101000a900460ff1681565b6060600380546113f290613bb0565b80601f016020809104026020016040519081016040528092919081815260200182805461141e90613bb0565b801561146b5780601f106114405761010080835404028352916020019161146b565b820191906000526020600020905b81548152906001019060200180831161144e57829003601f168201915b5050505050905090565b61147d6121d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114ef6121d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159c6121d1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e19190613430565b60405180910390a35050565b6115f5612105565b60006115ff610dcf565b90506103e882826116109190613cc3565b1115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890613f4e565b60405180910390fd5b60008211611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b90613fba565b60405180910390fd5b61169e8383612ab2565b505050565b60116020528060005260406000206000915090505481565b60006116c5610dcf565b90506116d0336112e9565b600c8190555060006116e06121d1565b6040516020016116f09190613dcd565b60405160208183030381529060405280519060200120905061171583600d5483612a9b565b611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90613e34565b60405180910390fd5b6103e884836117639190613cc3565b11156117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90613d65565b60405180910390fd5b600e60009054906101000a900460ff166117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613c74565b60405180910390fd5b6002600c546118029190613fda565b84601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461184d9190613cc3565b111561188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590614080565b60405180910390fd5b6009543410156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906140ec565b60405180910390fd5b83601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061192a3385612ab2565b50505050565b611938612105565b601060009054906101000a900460ff161580156119525750805b156119725780601060006101000a81548160ff0219169083151502179055505b8282600f9190611983929190613296565b50505050565b611994848484612290565b6119b38373ffffffffffffffffffffffffffffffffffffffff16612ad0565b80156119c857506119c684848484612af3565b155b156119ff576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600c5481565b6060611a1682612183565b611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90614158565b60405180910390fd5b601060009054906101000a900460ff1615611a9c57600f611a7583612c53565b604051602001611a86929190614248565b6040516020818303038152906040529050611b2a565b600f8054611aa990613bb0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad590613bb0565b8015611b225780601f10611af757610100808354040283529160200191611b22565b820191906000526020600020905b815481529060010190602001808311611b0557829003601f168201915b505050505090505b919050565b6000611b39610dcf565b9050611b44336112e9565b600c819055506000611b546121d1565b604051602001611b649190613dcd565b604051602081830303815290604052805190602001209050611b8983600d5483612a9b565b611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90613e34565b60405180910390fd5b6103e88483611bd79190613cc3565b1115611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90613d65565b60405180910390fd5b600e60009054906101000a900460ff16611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90613c74565b60405180910390fd5b600c5484601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cb59190613cc3565b1115611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced906142b8565b60405180910390fd5b83601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611d4e336001612ab2565b50505050565b6103e881565b6000611d6582612db4565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60156020528060005260406000206000915090505481565b600e60019054906101000a900460ff1681565b6000611e35610dcf565b90506103e88282611e469190613cc3565b1115611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90613d65565b60405180910390fd5b600e60019054906101000a900460ff16611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd90614324565b60405180910390fd5b600b54341015611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f12906140ec565b60405180910390fd5b600482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f689190613cc3565b1115611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614390565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506120003383612ab2565b5050565b61200c612105565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207390614422565b60405180910390fd5b612085816129d5565b50565b600e60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61210d6121d1565b73ffffffffffffffffffffffffffffffffffffffff1661212b611394565b73ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121789061448e565b60405180910390fd5b565b60008161218e61228b565b1115801561219d575060005482105b80156121ca575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061229b82612746565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612306576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123276121d1565b73ffffffffffffffffffffffffffffffffffffffff1614806123565750612355856123506121d1565b611d6c565b5b8061239b57506123646121d1565b73ffffffffffffffffffffffffffffffffffffffff1661238384610bd0565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806123d4576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561243b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124488585856001612e1e565b612454600084876121d9565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126d45760005482146126d357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461273f8585856001612e24565b5050505050565b61274e61331c565b60008290508061275c61228b565b1115801561276b575060005481105b1561299e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161299c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128805780925050506129d0565b5b60011561299b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129965780925050506129d0565b612881565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082612aa88584612e2a565b1490509392505050565b612acc828260405180602001604052806000815250612e9f565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b196121d1565b8786866040518563ffffffff1660e01b8152600401612b3b9493929190614503565b602060405180830381600087803b158015612b5557600080fd5b505af1925050508015612b8657506040513d601f19601f82011682018060405250810190612b839190614564565b60015b612c00573d8060008114612bb6576040519150601f19603f3d011682016040523d82523d6000602084013e612bbb565b606091505b50600081511415612bf8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612c9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612daf565b600082905060005b60008214612ccd578080612cb690614591565b915050600a82612cc69190614609565b9150612ca3565b60008167ffffffffffffffff811115612ce957612ce86136e0565b5b6040519080825280601f01601f191660200182016040528015612d1b5781602001600182028036833780820191505090505b5090505b60008514612da857600182612d34919061463a565b9150600a85612d43919061466e565b6030612d4f9190613cc3565b60f81b818381518110612d6557612d6461469f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612da19190614609565b9450612d1f565b8093505050505b919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b60008082905060005b8451811015612e94576000858281518110612e5157612e5061469f565b5b60200260200101519050808311612e7357612e6c8382612eb1565b9250612e80565b612e7d8184612eb1565b92505b508080612e8c90614591565b915050612e33565b508091505092915050565b612eac8383836001612ec8565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612f70576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f7d6000868387612e1e565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561314757506131468773ffffffffffffffffffffffffffffffffffffffff16612ad0565b5b1561320d575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131bc6000888480600101955088612af3565b6131f2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561314d57826000541461320857600080fd5b613279565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561320e575b81600081905550505061328f6000868387612e24565b5050505050565b8280546132a290613bb0565b90600052602060002090601f0160209004810192826132c4576000855561330b565b82601f106132dd57803560ff191683800117855561330b565b8280016001018555821561330b579182015b8281111561330a5782358255916020019190600101906132ef565b5b509050613318919061335f565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613378576000816000905550600101613360565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133c581613390565b81146133d057600080fd5b50565b6000813590506133e2816133bc565b92915050565b6000602082840312156133fe576133fd613386565b5b600061340c848285016133d3565b91505092915050565b60008115159050919050565b61342a81613415565b82525050565b60006020820190506134456000830184613421565b92915050565b6000819050919050565b61345e8161344b565b811461346957600080fd5b50565b60008135905061347b81613455565b92915050565b60006020828403121561349757613496613386565b5b60006134a58482850161346c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134e85780820151818401526020810190506134cd565b838111156134f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613519826134ae565b61352381856134b9565b93506135338185602086016134ca565b61353c816134fd565b840191505092915050565b60006020820190508181036000830152613561818461350e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061359482613569565b9050919050565b6135a481613589565b81146135af57600080fd5b50565b6000813590506135c18161359b565b92915050565b6000602082840312156135dd576135dc613386565b5b60006135eb848285016135b2565b91505092915050565b6135fd8161344b565b82525050565b600060208201905061361860008301846135f4565b92915050565b61362781613589565b82525050565b6000602082019050613642600083018461361e565b92915050565b6000806040838503121561365f5761365e613386565b5b600061366d858286016135b2565b925050602061367e8582860161346c565b9150509250929050565b6000806000606084860312156136a1576136a0613386565b5b60006136af868287016135b2565b93505060206136c0868287016135b2565b92505060406136d18682870161346c565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613718826134fd565b810181811067ffffffffffffffff82111715613737576137366136e0565b5b80604052505050565b600061374a61337c565b9050613756828261370f565b919050565b600067ffffffffffffffff821115613776576137756136e0565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61379f8161378c565b81146137aa57600080fd5b50565b6000813590506137bc81613796565b92915050565b60006137d56137d08461375b565b613740565b905080838252602082019050602084028301858111156137f8576137f7613787565b5b835b81811015613821578061380d88826137ad565b8452602084019350506020810190506137fa565b5050509392505050565b600082601f8301126138405761383f6136db565b5b81356138508482602086016137c2565b91505092915050565b600080604083850312156138705761386f613386565b5b600061387e8582860161346c565b925050602083013567ffffffffffffffff81111561389f5761389e61338b565b5b6138ab8582860161382b565b9150509250929050565b6000602082840312156138cb576138ca613386565b5b60006138d9848285016137ad565b91505092915050565b6138eb81613415565b81146138f657600080fd5b50565b600081359050613908816138e2565b92915050565b6000806040838503121561392557613924613386565b5b6000613933858286016135b2565b9250506020613944858286016138f9565b9150509250929050565b600080fd5b60008083601f840112613969576139686136db565b5b8235905067ffffffffffffffff8111156139865761398561394e565b5b6020830191508360018202830111156139a2576139a1613787565b5b9250929050565b6000806000604084860312156139c2576139c1613386565b5b600084013567ffffffffffffffff8111156139e0576139df61338b565b5b6139ec86828701613953565b935093505060206139ff868287016138f9565b9150509250925092565b600080fd5b600067ffffffffffffffff821115613a2957613a286136e0565b5b613a32826134fd565b9050602081019050919050565b82818337600083830152505050565b6000613a61613a5c84613a0e565b613740565b905082815260208101848484011115613a7d57613a7c613a09565b5b613a88848285613a3f565b509392505050565b600082601f830112613aa557613aa46136db565b5b8135613ab5848260208601613a4e565b91505092915050565b60008060008060808587031215613ad857613ad7613386565b5b6000613ae6878288016135b2565b9450506020613af7878288016135b2565b9350506040613b088782880161346c565b925050606085013567ffffffffffffffff811115613b2957613b2861338b565b5b613b3587828801613a90565b91505092959194509250565b60008060408385031215613b5857613b57613386565b5b6000613b66858286016135b2565b9250506020613b77858286016135b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc857607f821691505b60208210811415613bdc57613bdb613b81565b5b50919050565b600081905092915050565b50565b6000613bfd600083613be2565b9150613c0882613bed565b600082019050919050565b6000613c1e82613bf0565b9150819050919050565b7f484f4c44455253414c455f494e41435449564500000000000000000000000000600082015250565b6000613c5e6013836134b9565b9150613c6982613c28565b602082019050919050565b60006020820190508181036000830152613c8d81613c51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cce8261344b565b9150613cd98361344b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d0e57613d0d613c94565b5b828201905092915050565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b6000613d4f6013836134b9565b9150613d5a82613d19565b602082019050919050565b60006020820190508181036000830152613d7e81613d42565b9050919050565b60008160601b9050919050565b6000613d9d82613d85565b9050919050565b6000613daf82613d92565b9050919050565b613dc7613dc282613589565b613da4565b82525050565b6000613dd98284613db6565b60148201915081905092915050565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b6000613e1e600e836134b9565b9150613e2982613de8565b602082019050919050565b60006020820190508181036000830152613e4d81613e11565b9050919050565b7f574c504149445f4d415845440000000000000000000000000000000000000000600082015250565b6000613e8a600c836134b9565b9150613e9582613e54565b602082019050919050565b60006020820190508181036000830152613eb981613e7d565b9050919050565b600081519050613ecf81613455565b92915050565b600060208284031215613eeb57613eea613386565b5b6000613ef984828501613ec0565b91505092915050565b7f4f76657220537570706c79000000000000000000000000000000000000000000600082015250565b6000613f38600b836134b9565b9150613f4382613f02565b602082019050919050565b60006020820190508181036000830152613f6781613f2b565b9050919050565b7f5155414e544954595f494e56414c494400000000000000000000000000000000600082015250565b6000613fa46010836134b9565b9150613faf82613f6e565b602082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b6000613fe58261344b565b9150613ff08361344b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402957614028613c94565b5b828202905092915050565b7f484f4c44455253414c45504149445f4d41584544000000000000000000000000600082015250565b600061406a6014836134b9565b915061407582614034565b602082019050919050565b600060208201905081810360008301526140998161405d565b9050919050565b7f494e434f52524543545f45544800000000000000000000000000000000000000600082015250565b60006140d6600d836134b9565b91506140e1826140a0565b602082019050919050565b60006020820190508181036000830152614105816140c9565b9050919050565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b6000614142601f836134b9565b915061414d8261410c565b602082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546141a581613bb0565b6141af8186614178565b945060018216600081146141ca57600181146141db5761420e565b60ff1983168652818601935061420e565b6141e485614183565b60005b83811015614206578154818901526001820191506020810190506141e7565b838801955050505b50505092915050565b6000614222826134ae565b61422c8185614178565b935061423c8185602086016134ca565b80840191505092915050565b60006142548285614198565b91506142608284614217565b91508190509392505050565b7f484f4c44455253414c45465245455f4d41584544000000000000000000000000600082015250565b60006142a26014836134b9565b91506142ad8261426c565b602082019050919050565b600060208201905081810360008301526142d181614295565b9050919050565b7f5055424c49435f494e4143544956450000000000000000000000000000000000600082015250565b600061430e600f836134b9565b9150614319826142d8565b602082019050919050565b6000602082019050818103600083015261433d81614301565b9050919050565b7f5055424c4943504149445f4d4158454400000000000000000000000000000000600082015250565b600061437a6010836134b9565b915061438582614344565b602082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061440c6026836134b9565b9150614417826143b0565b604082019050919050565b6000602082019050818103600083015261443b816143ff565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144786020836134b9565b915061448382614442565b602082019050919050565b600060208201905081810360008301526144a78161446b565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006144d5826144ae565b6144df81856144b9565b93506144ef8185602086016134ca565b6144f8816134fd565b840191505092915050565b6000608082019050614518600083018761361e565b614525602083018661361e565b61453260408301856135f4565b818103606083015261454481846144ca565b905095945050505050565b60008151905061455e816133bc565b92915050565b60006020828403121561457a57614579613386565b5b60006145888482850161454f565b91505092915050565b600061459c8261344b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145cf576145ce613c94565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146148261344b565b915061461f8361344b565b92508261462f5761462e6145da565b5b828204905092915050565b60006146458261344b565b91506146508361344b565b92508282101561466357614662613c94565b5b828203905092915050565b60006146798261344b565b91506146848361344b565b925082614694576146936145da565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220326998a17e7c413e061f18e90634a67ac97740f07ec00a3680c07611b6880b5964736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102725760003560e01c80637cb647591161014f578063b88d4fde116100c1578063e985e9c51161007a578063e985e9c51461091d578063eaba90581461095a578063ee2944da14610997578063f183f2f3146109c2578063f2fde38b146109de578063fd8b262d14610a0757610272565b8063b88d4fde14610808578063bf41b4a714610831578063c87b56dd1461085c578063d03cad1514610899578063d5abeb01146108b5578063dc33e681146108e057610272565b806395d89b411161011357806395d89b4114610709578063a22cb46514610734578063aa35cca31461075d578063aac80dd914610786578063b3b1cc7a146107c3578063b64b21ca146107df57610272565b80637cb64759146106245780638a9019f01461064d5780638da5cb5b1461068a57806390f6f728146106b557806394593765146106de57610272565b806323b872dd116101e85780636352211e116101ac5780636352211e1461051e5780636fae5a5c1461055b57806370a0823114610598578063715018a6146105d55780637661bc05146105ec57806377ad99f01461060857610272565b806323b872dd1461048057806338c30305146104a95780633ccfd60b146104c057806342842e0e146104ca57806352417630146104f357610272565b8063095ea7b31161023a578063095ea7b31461038257806311eb3047146103ab57806313faede6146103c2578063146f14cb146103ed57806318160ddd1461042a57806322515b771461045557610272565b806301ffc9a714610277578063030efb8f146102b457806306fdde03146102dd5780630714b54514610308578063081812fc14610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906133e8565b610a32565b6040516102ab9190613430565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613481565b610b14565b005b3480156102e957600080fd5b506102f2610b26565b6040516102ff9190613547565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906135c7565b610bb8565b60405161033c9190613603565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613481565b610bd0565b604051610379919061362d565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613648565b610c4c565b005b3480156103b757600080fd5b506103c0610d57565b005b3480156103ce57600080fd5b506103d7610db1565b6040516103e49190613603565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f91906135c7565b610db7565b6040516104219190613603565b60405180910390f35b34801561043657600080fd5b5061043f610dcf565b60405161044c9190613603565b60405180910390f35b34801561046157600080fd5b5061046a610de6565b6040516104779190613603565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613688565b610dec565b005b3480156104b557600080fd5b506104be610dfc565b005b6104c8610e56565b005b3480156104d657600080fd5b506104f160048036038101906104ec9190613688565b610ed7565b005b3480156104ff57600080fd5b50610508610ef7565b6040516105159190613603565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190613481565b610efd565b604051610552919061362d565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d91906135c7565b610f13565b60405161058f9190613603565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906135c7565b610f2b565b6040516105cc9190613603565b60405180910390f35b3480156105e157600080fd5b506105ea610ffb565b005b61060660048036038101906106019190613859565b61100f565b005b610622600480360381019061061d9190613481565b611255565b005b34801561063057600080fd5b5061064b600480360381019061064691906138b5565b6112d7565b005b34801561065957600080fd5b50610674600480360381019061066f91906135c7565b6112e9565b6040516106819190613603565b60405180910390f35b34801561069657600080fd5b5061069f611394565b6040516106ac919061362d565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613481565b6113be565b005b3480156106ea57600080fd5b506106f36113d0565b6040516107009190613430565b60405180910390f35b34801561071557600080fd5b5061071e6113e3565b60405161072b9190613547565b60405180910390f35b34801561074057600080fd5b5061075b6004803603810190610756919061390e565b611475565b005b34801561076957600080fd5b50610784600480360381019061077f9190613648565b6115ed565b005b34801561079257600080fd5b506107ad60048036038101906107a891906135c7565b6116a3565b6040516107ba9190613603565b60405180910390f35b6107dd60048036038101906107d89190613859565b6116bb565b005b3480156107eb57600080fd5b50610806600480360381019061080191906139a9565b611930565b005b34801561081457600080fd5b5061082f600480360381019061082a9190613abe565b611989565b005b34801561083d57600080fd5b50610846611a05565b6040516108539190613603565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e9190613481565b611a0b565b6040516108909190613547565b60405180910390f35b6108b360048036038101906108ae9190613859565b611b2f565b005b3480156108c157600080fd5b506108ca611d54565b6040516108d79190613603565b60405180910390f35b3480156108ec57600080fd5b50610907600480360381019061090291906135c7565b611d5a565b6040516109149190613603565b60405180910390f35b34801561092957600080fd5b50610944600480360381019061093f9190613b41565b611d6c565b6040516109519190613430565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c91906135c7565b611e00565b60405161098e9190613603565b60405180910390f35b3480156109a357600080fd5b506109ac611e18565b6040516109b99190613430565b60405180910390f35b6109dc60048036038101906109d79190613481565b611e2b565b005b3480156109ea57600080fd5b50610a056004803603810190610a0091906135c7565b612004565b005b348015610a1357600080fd5b50610a1c612088565b604051610a299190613430565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610afd57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b0d5750610b0c8261209b565b5b9050919050565b610b1c612105565b8060098190555050565b606060028054610b3590613bb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6190613bb0565b8015610bae5780601f10610b8357610100808354040283529160200191610bae565b820191906000526020600020905b815481529060010190602001808311610b9157829003601f168201915b5050505050905090565b60126020528060005260406000206000915090505481565b6000610bdb82612183565b610c11576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5782610efd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cbf576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cde6121d1565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d105750610d0e81610d096121d1565b611d6c565b155b15610d47576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d528383836121d9565b505050565b610d5f612105565b600e60019054906101000a900460ff1615610d93576000600e60016101000a81548160ff0219169083151502179055610dae565b6001600e60016101000a81548160ff02191690831515021790555b50565b60095481565b60146020528060005260406000206000915090505481565b6000610dd961228b565b6001546000540303905090565b600b5481565b610df7838383612290565b505050565b610e04612105565b600e60009054906101000a900460ff1615610e38576000600e60006101000a81548160ff0219169083151502179055610e53565b6001600e60006101000a81548160ff02191690831515021790555b50565b610e5e612105565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e8490613c13565b60006040518083038185875af1925050503d8060008114610ec1576040519150601f19603f3d011682016040523d82523d6000602084013e610ec6565b606091505b5050905080610ed457600080fd5b50565b610ef283838360405180602001604052806000815250611989565b505050565b600a5481565b6000610f0882612746565b600001519050919050565b60136020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f93576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611003612105565b61100d60006129d5565b565b600e60009054906101000a900460ff1661105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590613c74565b60405180910390fd5b611067336112e9565b600c819055506000600c541461107c57600080fd5b6000611086610dcf565b90506103e883826110979190613cc3565b11156110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90613d65565b60405180910390fd5b600a543410156110e757600080fd5b60006110f16121d1565b6040516020016111019190613dcd565b60405160208183030381529060405280519060200120905061112683600d5483612a9b565b611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90613e34565b60405180910390fd5b600284601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111b29190613cc3565b11156111f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ea90613ea0565b60405180910390fd5b83601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061124b336001612ab2565b6000915050505050565b61125d612105565b60003373ffffffffffffffffffffffffffffffffffffffff168260405161128390613c13565b60006040518083038185875af1925050503d80600081146112c0576040519150601f19603f3d011682016040523d82523d6000602084013e6112c5565b606091505b50509050806112d357600080fd5b5050565b6112df612105565b80600d8190555050565b600080736fefb647395e680339badc84dc774e3ca8bca7b973ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611339919061362d565b60206040518083038186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190613ed5565b905080915050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113c6612105565b80600b8190555050565b601060009054906101000a900460ff1681565b6060600380546113f290613bb0565b80601f016020809104026020016040519081016040528092919081815260200182805461141e90613bb0565b801561146b5780601f106114405761010080835404028352916020019161146b565b820191906000526020600020905b81548152906001019060200180831161144e57829003601f168201915b5050505050905090565b61147d6121d1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114ef6121d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661159c6121d1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e19190613430565b60405180910390a35050565b6115f5612105565b60006115ff610dcf565b90506103e882826116109190613cc3565b1115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890613f4e565b60405180910390fd5b60008211611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168b90613fba565b60405180910390fd5b61169e8383612ab2565b505050565b60116020528060005260406000206000915090505481565b60006116c5610dcf565b90506116d0336112e9565b600c8190555060006116e06121d1565b6040516020016116f09190613dcd565b60405160208183030381529060405280519060200120905061171583600d5483612a9b565b611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90613e34565b60405180910390fd5b6103e884836117639190613cc3565b11156117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90613d65565b60405180910390fd5b600e60009054906101000a900460ff166117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613c74565b60405180910390fd5b6002600c546118029190613fda565b84601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461184d9190613cc3565b111561188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590614080565b60405180910390fd5b6009543410156118d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ca906140ec565b60405180910390fd5b83601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061192a3385612ab2565b50505050565b611938612105565b601060009054906101000a900460ff161580156119525750805b156119725780601060006101000a81548160ff0219169083151502179055505b8282600f9190611983929190613296565b50505050565b611994848484612290565b6119b38373ffffffffffffffffffffffffffffffffffffffff16612ad0565b80156119c857506119c684848484612af3565b155b156119ff576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600c5481565b6060611a1682612183565b611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90614158565b60405180910390fd5b601060009054906101000a900460ff1615611a9c57600f611a7583612c53565b604051602001611a86929190614248565b6040516020818303038152906040529050611b2a565b600f8054611aa990613bb0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad590613bb0565b8015611b225780601f10611af757610100808354040283529160200191611b22565b820191906000526020600020905b815481529060010190602001808311611b0557829003601f168201915b505050505090505b919050565b6000611b39610dcf565b9050611b44336112e9565b600c819055506000611b546121d1565b604051602001611b649190613dcd565b604051602081830303815290604052805190602001209050611b8983600d5483612a9b565b611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90613e34565b60405180910390fd5b6103e88483611bd79190613cc3565b1115611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f90613d65565b60405180910390fd5b600e60009054906101000a900460ff16611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90613c74565b60405180910390fd5b600c5484601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cb59190613cc3565b1115611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced906142b8565b60405180910390fd5b83601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550611d4e336001612ab2565b50505050565b6103e881565b6000611d6582612db4565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60156020528060005260406000206000915090505481565b600e60019054906101000a900460ff1681565b6000611e35610dcf565b90506103e88282611e469190613cc3565b1115611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90613d65565b60405180910390fd5b600e60019054906101000a900460ff16611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd90614324565b60405180910390fd5b600b54341015611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f12906140ec565b60405180910390fd5b600482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f689190613cc3565b1115611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614390565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506120003383612ab2565b5050565b61200c612105565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561207c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207390614422565b60405180910390fd5b612085816129d5565b50565b600e60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61210d6121d1565b73ffffffffffffffffffffffffffffffffffffffff1661212b611394565b73ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121789061448e565b60405180910390fd5b565b60008161218e61228b565b1115801561219d575060005482105b80156121ca575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061229b82612746565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612306576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166123276121d1565b73ffffffffffffffffffffffffffffffffffffffff1614806123565750612355856123506121d1565b611d6c565b5b8061239b57506123646121d1565b73ffffffffffffffffffffffffffffffffffffffff1661238384610bd0565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806123d4576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561243b576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124488585856001612e1e565b612454600084876121d9565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156126d45760005482146126d357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461273f8585856001612e24565b5050505050565b61274e61331c565b60008290508061275c61228b565b1115801561276b575060005481105b1561299e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161299c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128805780925050506129d0565b5b60011561299b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129965780925050506129d0565b612881565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600082612aa88584612e2a565b1490509392505050565b612acc828260405180602001604052806000815250612e9f565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b196121d1565b8786866040518563ffffffff1660e01b8152600401612b3b9493929190614503565b602060405180830381600087803b158015612b5557600080fd5b505af1925050508015612b8657506040513d601f19601f82011682018060405250810190612b839190614564565b60015b612c00573d8060008114612bb6576040519150601f19603f3d011682016040523d82523d6000602084013e612bbb565b606091505b50600081511415612bf8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612c9b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612daf565b600082905060005b60008214612ccd578080612cb690614591565b915050600a82612cc69190614609565b9150612ca3565b60008167ffffffffffffffff811115612ce957612ce86136e0565b5b6040519080825280601f01601f191660200182016040528015612d1b5781602001600182028036833780820191505090505b5090505b60008514612da857600182612d34919061463a565b9150600a85612d43919061466e565b6030612d4f9190613cc3565b60f81b818381518110612d6557612d6461469f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612da19190614609565b9450612d1f565b8093505050505b919050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b60008082905060005b8451811015612e94576000858281518110612e5157612e5061469f565b5b60200260200101519050808311612e7357612e6c8382612eb1565b9250612e80565b612e7d8184612eb1565b92505b508080612e8c90614591565b915050612e33565b508091505092915050565b612eac8383836001612ec8565b505050565b600082600052816020526040600020905092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612f70576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f7d6000868387612e1e565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561314757506131468773ffffffffffffffffffffffffffffffffffffffff16612ad0565b5b1561320d575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46131bc6000888480600101955088612af3565b6131f2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561314d57826000541461320857600080fd5b613279565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082141561320e575b81600081905550505061328f6000868387612e24565b5050505050565b8280546132a290613bb0565b90600052602060002090601f0160209004810192826132c4576000855561330b565b82601f106132dd57803560ff191683800117855561330b565b8280016001018555821561330b579182015b8281111561330a5782358255916020019190600101906132ef565b5b509050613318919061335f565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613378576000816000905550600101613360565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133c581613390565b81146133d057600080fd5b50565b6000813590506133e2816133bc565b92915050565b6000602082840312156133fe576133fd613386565b5b600061340c848285016133d3565b91505092915050565b60008115159050919050565b61342a81613415565b82525050565b60006020820190506134456000830184613421565b92915050565b6000819050919050565b61345e8161344b565b811461346957600080fd5b50565b60008135905061347b81613455565b92915050565b60006020828403121561349757613496613386565b5b60006134a58482850161346c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134e85780820151818401526020810190506134cd565b838111156134f7576000848401525b50505050565b6000601f19601f8301169050919050565b6000613519826134ae565b61352381856134b9565b93506135338185602086016134ca565b61353c816134fd565b840191505092915050565b60006020820190508181036000830152613561818461350e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061359482613569565b9050919050565b6135a481613589565b81146135af57600080fd5b50565b6000813590506135c18161359b565b92915050565b6000602082840312156135dd576135dc613386565b5b60006135eb848285016135b2565b91505092915050565b6135fd8161344b565b82525050565b600060208201905061361860008301846135f4565b92915050565b61362781613589565b82525050565b6000602082019050613642600083018461361e565b92915050565b6000806040838503121561365f5761365e613386565b5b600061366d858286016135b2565b925050602061367e8582860161346c565b9150509250929050565b6000806000606084860312156136a1576136a0613386565b5b60006136af868287016135b2565b93505060206136c0868287016135b2565b92505060406136d18682870161346c565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613718826134fd565b810181811067ffffffffffffffff82111715613737576137366136e0565b5b80604052505050565b600061374a61337c565b9050613756828261370f565b919050565b600067ffffffffffffffff821115613776576137756136e0565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b61379f8161378c565b81146137aa57600080fd5b50565b6000813590506137bc81613796565b92915050565b60006137d56137d08461375b565b613740565b905080838252602082019050602084028301858111156137f8576137f7613787565b5b835b81811015613821578061380d88826137ad565b8452602084019350506020810190506137fa565b5050509392505050565b600082601f8301126138405761383f6136db565b5b81356138508482602086016137c2565b91505092915050565b600080604083850312156138705761386f613386565b5b600061387e8582860161346c565b925050602083013567ffffffffffffffff81111561389f5761389e61338b565b5b6138ab8582860161382b565b9150509250929050565b6000602082840312156138cb576138ca613386565b5b60006138d9848285016137ad565b91505092915050565b6138eb81613415565b81146138f657600080fd5b50565b600081359050613908816138e2565b92915050565b6000806040838503121561392557613924613386565b5b6000613933858286016135b2565b9250506020613944858286016138f9565b9150509250929050565b600080fd5b60008083601f840112613969576139686136db565b5b8235905067ffffffffffffffff8111156139865761398561394e565b5b6020830191508360018202830111156139a2576139a1613787565b5b9250929050565b6000806000604084860312156139c2576139c1613386565b5b600084013567ffffffffffffffff8111156139e0576139df61338b565b5b6139ec86828701613953565b935093505060206139ff868287016138f9565b9150509250925092565b600080fd5b600067ffffffffffffffff821115613a2957613a286136e0565b5b613a32826134fd565b9050602081019050919050565b82818337600083830152505050565b6000613a61613a5c84613a0e565b613740565b905082815260208101848484011115613a7d57613a7c613a09565b5b613a88848285613a3f565b509392505050565b600082601f830112613aa557613aa46136db565b5b8135613ab5848260208601613a4e565b91505092915050565b60008060008060808587031215613ad857613ad7613386565b5b6000613ae6878288016135b2565b9450506020613af7878288016135b2565b9350506040613b088782880161346c565b925050606085013567ffffffffffffffff811115613b2957613b2861338b565b5b613b3587828801613a90565b91505092959194509250565b60008060408385031215613b5857613b57613386565b5b6000613b66858286016135b2565b9250506020613b77858286016135b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc857607f821691505b60208210811415613bdc57613bdb613b81565b5b50919050565b600081905092915050565b50565b6000613bfd600083613be2565b9150613c0882613bed565b600082019050919050565b6000613c1e82613bf0565b9150819050919050565b7f484f4c44455253414c455f494e41435449564500000000000000000000000000600082015250565b6000613c5e6013836134b9565b9150613c6982613c28565b602082019050919050565b60006020820190508181036000830152613c8d81613c51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cce8261344b565b9150613cd98361344b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d0e57613d0d613c94565b5b828201905092915050565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b6000613d4f6013836134b9565b9150613d5a82613d19565b602082019050919050565b60006020820190508181036000830152613d7e81613d42565b9050919050565b60008160601b9050919050565b6000613d9d82613d85565b9050919050565b6000613daf82613d92565b9050919050565b613dc7613dc282613589565b613da4565b82525050565b6000613dd98284613db6565b60148201915081905092915050565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b6000613e1e600e836134b9565b9150613e2982613de8565b602082019050919050565b60006020820190508181036000830152613e4d81613e11565b9050919050565b7f574c504149445f4d415845440000000000000000000000000000000000000000600082015250565b6000613e8a600c836134b9565b9150613e9582613e54565b602082019050919050565b60006020820190508181036000830152613eb981613e7d565b9050919050565b600081519050613ecf81613455565b92915050565b600060208284031215613eeb57613eea613386565b5b6000613ef984828501613ec0565b91505092915050565b7f4f76657220537570706c79000000000000000000000000000000000000000000600082015250565b6000613f38600b836134b9565b9150613f4382613f02565b602082019050919050565b60006020820190508181036000830152613f6781613f2b565b9050919050565b7f5155414e544954595f494e56414c494400000000000000000000000000000000600082015250565b6000613fa46010836134b9565b9150613faf82613f6e565b602082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b6000613fe58261344b565b9150613ff08361344b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402957614028613c94565b5b828202905092915050565b7f484f4c44455253414c45504149445f4d41584544000000000000000000000000600082015250565b600061406a6014836134b9565b915061407582614034565b602082019050919050565b600060208201905081810360008301526140998161405d565b9050919050565b7f494e434f52524543545f45544800000000000000000000000000000000000000600082015250565b60006140d6600d836134b9565b91506140e1826140a0565b602082019050919050565b60006020820190508181036000830152614105816140c9565b9050919050565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b6000614142601f836134b9565b915061414d8261410c565b602082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546141a581613bb0565b6141af8186614178565b945060018216600081146141ca57600181146141db5761420e565b60ff1983168652818601935061420e565b6141e485614183565b60005b83811015614206578154818901526001820191506020810190506141e7565b838801955050505b50505092915050565b6000614222826134ae565b61422c8185614178565b935061423c8185602086016134ca565b80840191505092915050565b60006142548285614198565b91506142608284614217565b91508190509392505050565b7f484f4c44455253414c45465245455f4d41584544000000000000000000000000600082015250565b60006142a26014836134b9565b91506142ad8261426c565b602082019050919050565b600060208201905081810360008301526142d181614295565b9050919050565b7f5055424c49435f494e4143544956450000000000000000000000000000000000600082015250565b600061430e600f836134b9565b9150614319826142d8565b602082019050919050565b6000602082019050818103600083015261433d81614301565b9050919050565b7f5055424c4943504149445f4d4158454400000000000000000000000000000000600082015250565b600061437a6010836134b9565b915061438582614344565b602082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061440c6026836134b9565b9150614417826143b0565b604082019050919050565b6000602082019050818103600083015261443b816143ff565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144786020836134b9565b915061448382614442565b602082019050919050565b600060208201905081810360008301526144a78161446b565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006144d5826144ae565b6144df81856144b9565b93506144ef8185602086016134ca565b6144f8816134fd565b840191505092915050565b6000608082019050614518600083018761361e565b614525602083018661361e565b61453260408301856135f4565b818103606083015261454481846144ca565b905095945050505050565b60008151905061455e816133bc565b92915050565b60006020828403121561457a57614579613386565b5b60006145888482850161454f565b91505092915050565b600061459c8261344b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145cf576145ce613c94565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146148261344b565b915061461f8361344b565b92508261462f5761462e6145da565b5b828204905092915050565b60006146458261344b565b91506146508361344b565b92508282101561466357614662613c94565b5b828203905092915050565b60006146798261344b565b91506146848361344b565b925082614694576146936145da565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220326998a17e7c413e061f18e90634a67ac97740f07ec00a3680c07611b6880b5964736f6c63430008090033

Deployed Bytecode Sourcemap

48068:5537:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29987:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52065:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33331:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48564:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34834:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34397:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52411:117;;;;;;;;;;;;;:::i;:::-;;48197:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48688:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29236:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48277:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35699:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52265:138;;;;;;;;;;;;;:::i;:::-;;53230:192;;;:::i;:::-;;35940:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48236:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33139:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48626:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30356:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7668:103;;;;;;;;;;;;;:::i;:::-;;50371:758;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53430:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51951:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30570:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7020:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52165:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48473:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33500:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35110:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51643:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48502:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49601:762;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52659:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36196:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48319:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52846:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48895:698;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48150:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52536:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35468:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48750:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48416:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51139:496;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7926:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48381:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29987:305;30089:4;30141:25;30126:40;;;:11;:40;;;;:105;;;;30198:33;30183:48;;;:11;:48;;;;30126:105;:158;;;;30248:36;30272:11;30248:23;:36::i;:::-;30126:158;30106:178;;29987:305;;;:::o;52065:92::-;6906:13;:11;:13::i;:::-;52141:8:::1;52134:4;:15;;;;52065:92:::0;:::o;33331:100::-;33385:13;33418:5;33411:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33331:100;:::o;48564:55::-;;;;;;;;;;;;;;;;;:::o;34834:204::-;34902:7;34927:16;34935:7;34927;:16::i;:::-;34922:64;;34952:34;;;;;;;;;;;;;;34922:64;35006:15;:24;35022:7;35006:24;;;;;;;;;;;;;;;;;;;;;34999:31;;34834:204;;;:::o;34397:371::-;34470:13;34486:24;34502:7;34486:15;:24::i;:::-;34470:40;;34531:5;34525:11;;:2;:11;;;34521:48;;;34545:24;;;;;;;;;;;;;;34521:48;34602:5;34586:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;34612:37;34629:5;34636:12;:10;:12::i;:::-;34612:16;:37::i;:::-;34611:38;34586:63;34582:138;;;34673:35;;;;;;;;;;;;;;34582:138;34732:28;34741:2;34745:7;34754:5;34732:8;:28::i;:::-;34459:309;34397:371;;:::o;52411:117::-;6906:13;:11;:13::i;:::-;52472:9:::1;;;;;;;;;;;52471:10;:49;;52515:5;52503:9;;:17;;;;;;;;;;;;;;;;;52471:49;;;52496:4;52484:9;;:16;;;;;;;;;;;;;;;;;52471:49;;52411:117::o:0;48197:32::-;;;;:::o;48688:55::-;;;;;;;;;;;;;;;;;:::o;29236:303::-;29280:7;29505:15;:13;:15::i;:::-;29490:12;;29474:13;;:28;:46;29467:53;;29236:303;:::o;48277:35::-;;;;:::o;35699:170::-;35833:28;35843:4;35849:2;35853:7;35833:9;:28::i;:::-;35699:170;;;:::o;52265:138::-;6906:13;:11;:13::i;:::-;52326:16:::1;;;;;;;;;;;52325:17;:70;;52390:5;52371:16;;:24;;;;;;;;;;;;;;;;;52325:70;;;52364:4;52345:16;;:23;;;;;;;;;;;;;;;;;52325:70;;52265:138::o:0;53230:192::-;6906:13;:11;:13::i;:::-;53287:12:::1;53313:10;53305:24;;53351:21;53305:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53286:101;;;53406:7;53398:16;;;::::0;::::1;;53275:147;53230:192::o:0;35940:185::-;36078:39;36095:4;36101:2;36105:7;36078:39;;;;;;;;;;;;:16;:39::i;:::-;35940:185;;;:::o;48236:34::-;;;;:::o;33139:125::-;33203:7;33230:21;33243:7;33230:12;:21::i;:::-;:26;;;33223:33;;33139:125;;;:::o;48626:55::-;;;;;;;;;;;;;;;;;:::o;30356:206::-;30420:7;30461:1;30444:19;;:5;:19;;;30440:60;;;30472:28;;;;;;;;;;;;;;30440:60;30526:12;:19;30539:5;30526:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30518:36;;30511:43;;30356:206;;;:::o;7668:103::-;6906:13;:11;:13::i;:::-;7733:30:::1;7760:1;7733:18;:30::i;:::-;7668:103::o:0;50371:758::-;50475:16;;;;;;;;;;;50467:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;50536:23;50548:10;50536:11;:23::i;:::-;50526:7;:33;;;;50589:1;50578:7;;:12;50570:21;;;;;;50602:9;50614:13;:11;:13::i;:::-;50602:25;;48186:4;50650:9;50646:1;:13;;;;:::i;:::-;:26;;50638:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;50728:6;;50715:9;:19;;50707:28;;;;;;50746:12;50788;:10;:12::i;:::-;50771:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;50761:41;;;;;;50746:56;;50821:50;50840:12;50854:10;;50866:4;50821:18;:50::i;:::-;50813:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50957:1;50944:9;50909:20;:32;50930:10;50909:32;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;:49;;50901:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;51047:9;51011:20;:32;51032:10;51011:32;;;;;;;;;;;;;;;;:45;;;;;;;;;;;51078:24;51088:10;51100:1;51078:9;:24::i;:::-;51113:8;;;50456:673;;50371:758;;:::o;53430:172::-;6906:13;:11;:13::i;:::-;53505:12:::1;53531:10;53523:24;;53555:7;53523:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53504:63;;;53586:7;53578:16;;;::::0;::::1;;53493:109;53430:172:::0;:::o;51951:106::-;6906:13;:11;:13::i;:::-;52038:11:::1;52025:10;:24;;;;51951:106:::0;:::o;30570:223::-;30627:7;30646:16;30699:42;30691:61;;;30753:5;30691:68;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30672:88;;30777:8;30770:15;;;30570:223;;;:::o;7020:87::-;7066:7;7093:6;;;;;;;;;;;7086:13;;7020:87;:::o;52165:92::-;6906:13;:11;:13::i;:::-;52241:8:::1;52231:7;:18;;;;52165:92:::0;:::o;48473:22::-;;;;;;;;;;;;;:::o;33500:104::-;33556:13;33589:7;33582:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33500:104;:::o;35110:287::-;35221:12;:10;:12::i;:::-;35209:24;;:8;:24;;;35205:54;;;35242:17;;;;;;;;;;;;;;35205:54;35317:8;35272:18;:32;35291:12;:10;:12::i;:::-;35272:32;;;;;;;;;;;;;;;:42;35305:8;35272:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35370:8;35341:48;;35356:12;:10;:12::i;:::-;35341:48;;;35380:8;35341:48;;;;;;:::i;:::-;;;;;;;;35110:287;;:::o;51643:300::-;6906:13;:11;:13::i;:::-;51755:9:::1;51767:13;:11;:13::i;:::-;51755:25;;48186:4;51803:9;51799:1;:13;;;;:::i;:::-;:26;;51791:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;51872:1;51860:9;:13;51852:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;51905:30;51915:8;51925:9;51905;:30::i;:::-;51744:199;51643:300:::0;;:::o;48502:55::-;;;;;;;;;;;;;;;;;:::o;49601:762::-;49703:14;49720:13;:11;:13::i;:::-;49703:30;;49754:23;49766:10;49754:11;:23::i;:::-;49744:7;:33;;;;49788:12;49830;:10;:12::i;:::-;49813:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;49803:41;;;;;;49788:56;;49863:50;49882:12;49896:10;;49908:4;49863:18;:50::i;:::-;49855:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48186:4;49960:9;49951:6;:18;;;;:::i;:::-;:31;;49943:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;50025:16;;;;;;;;;;;50017:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;50140:1;50132:7;;:9;;;;:::i;:::-;50119;50084:20;:32;50105:10;50084:32;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;:57;;50076:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;50198:4;;50185:9;:17;;50177:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;50292:9;50256:20;:32;50277:10;50256:32;;;;;;;;;;;;;;;;:45;;;;;;;;;;;50323:32;50333:10;50345:9;50323;:32::i;:::-;49692:671;;49601:762;;:::o;52659:179::-;6906:13;:11;:13::i;:::-;52755:10:::1;;;;;;;;;;;52754:11;:23;;;;;52769:8;52754:23;52750:50;;;52792:8;52779:10;;:21;;;;;;;;;;;;;;;;;;52750:50;52822:8;;52812:7;:18;;;;;;;:::i;:::-;;52659:179:::0;;;:::o;36196:369::-;36363:28;36373:4;36379:2;36383:7;36363:9;:28::i;:::-;36406:15;:2;:13;;;:15::i;:::-;:76;;;;;36426:56;36457:4;36463:2;36467:7;36476:5;36426:30;:56::i;:::-;36425:57;36406:76;36402:156;;;36506:40;;;;;;;;;;;;;;36402:156;36196:369;;;;:::o;48319:22::-;;;;:::o;52846:376::-;52965:13;53004:17;53012:8;53004:7;:17::i;:::-;52996:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;53072:10;;;;;;;;;;;53068:147;;;53126:7;53135:19;:8;:17;:19::i;:::-;53109:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53095:61;;;;53068:147;53196:7;53189:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52846:376;;;;:::o;48895:698::-;48997:14;49014:13;:11;:13::i;:::-;48997:30;;49048:23;49060:10;49048:11;:23::i;:::-;49038:7;:33;;;;49082:12;49124;:10;:12::i;:::-;49107:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;49097:41;;;;;;49082:56;;49157:50;49176:12;49190:10;;49202:4;49157:18;:50::i;:::-;49149:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;48186:4;49254:9;49245:6;:18;;;;:::i;:::-;:31;;49237:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;49319:16;;;;;;;;;;;49311:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;49426:7;;49413:9;49378:20;:32;49399:10;49378:32;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;:55;;49370:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;49530:9;49494:20;:32;49515:10;49494:32;;;;;;;;;;;;;;;;:45;;;;;;;;;;;49561:24;49571:10;49583:1;49561:9;:24::i;:::-;48986:607;;48895:698;;:::o;48150:40::-;48186:4;48150:40;:::o;52536:115::-;52596:7;52623:20;52637:5;52623:13;:20::i;:::-;52616:27;;52536:115;;;:::o;35468:164::-;35565:4;35589:18;:25;35608:5;35589:25;;;;;;;;;;;;;;;:35;35615:8;35589:35;;;;;;;;;;;;;;;;;;;;;;;;;35582:42;;35468:164;;;;:::o;48750:52::-;;;;;;;;;;;;;;;;;:::o;48416:21::-;;;;;;;;;;;;;:::o;51139:496::-;51210:9;51222:13;:11;:13::i;:::-;51210:25;;48186:4;51258:9;51254:1;:13;;;;:::i;:::-;:26;;51246:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51323:9;;;;;;;;;;;51315:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;51384:7;;51371:9;:20;;51363:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;51473:1;51460:9;51428:17;:29;51446:10;51428:29;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:46;;51420:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;51564:9;51531:17;:29;51549:10;51531:29;;;;;;;;;;;;;;;;:42;;;;;;;;;;;51595:32;51605:10;51617:9;51595;:32::i;:::-;51199:436;51139:496;:::o;7926:201::-;6906:13;:11;:13::i;:::-;8035:1:::1;8015:22;;:8;:22;;;;8007:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8091:28;8110:8;8091:18;:28::i;:::-;7926:201:::0;:::o;48381:28::-;;;;;;;;;;;;;:::o;19874:157::-;19959:4;19998:25;19983:40;;;:11;:40;;;;19976:47;;19874:157;;;:::o;7185:132::-;7260:12;:10;:12::i;:::-;7249:23;;:7;:5;:7::i;:::-;:23;;;7241:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7185:132::o;36820:174::-;36877:4;36920:7;36901:15;:13;:15::i;:::-;:26;;:53;;;;;36941:13;;36931:7;:23;36901:53;:85;;;;;36959:11;:20;36971:7;36959:20;;;;;;;;;;;:27;;;;;;;;;;;;36958:28;36901:85;36894:92;;36820:174;;;:::o;5571:98::-;5624:7;5651:10;5644:17;;5571:98;:::o;44977:196::-;45119:2;45092:15;:24;45108:7;45092:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45157:7;45153:2;45137:28;;45146:5;45137:28;;;;;;;;;;;;44977:196;;;:::o;29010:92::-;29066:7;29010:92;:::o;39920:2130::-;40035:35;40073:21;40086:7;40073:12;:21::i;:::-;40035:59;;40133:4;40111:26;;:13;:18;;;:26;;;40107:67;;40146:28;;;;;;;;;;;;;;40107:67;40187:22;40229:4;40213:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;40250:36;40267:4;40273:12;:10;:12::i;:::-;40250:16;:36::i;:::-;40213:73;:126;;;;40327:12;:10;:12::i;:::-;40303:36;;:20;40315:7;40303:11;:20::i;:::-;:36;;;40213:126;40187:153;;40358:17;40353:66;;40384:35;;;;;;;;;;;;;;40353:66;40448:1;40434:16;;:2;:16;;;40430:52;;;40459:23;;;;;;;;;;;;;;40430:52;40495:43;40517:4;40523:2;40527:7;40536:1;40495:21;:43::i;:::-;40603:35;40620:1;40624:7;40633:4;40603:8;:35::i;:::-;40964:1;40934:12;:18;40947:4;40934:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41008:1;40980:12;:16;40993:2;40980:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41026:31;41060:11;:20;41072:7;41060:20;;;;;;;;;;;41026:54;;41111:2;41095:8;:13;;;:18;;;;;;;;;;;;;;;;;;41161:15;41128:8;:23;;;:49;;;;;;;;;;;;;;;;;;41429:19;41461:1;41451:7;:11;41429:33;;41477:31;41511:11;:24;41523:11;41511:24;;;;;;;;;;;41477:58;;41579:1;41554:27;;:8;:13;;;;;;;;;;;;:27;;;41550:384;;;41764:13;;41749:11;:28;41745:174;;41818:4;41802:8;:13;;;:20;;;;;;;;;;;;;;;;;;41871:13;:28;;;41845:8;:23;;;:54;;;;;;;;;;;;;;;;;;41745:174;41550:384;40909:1036;;;41981:7;41977:2;41962:27;;41971:4;41962:27;;;;;;;;;;;;42000:42;42021:4;42027:2;42031:7;42040:1;42000:20;:42::i;:::-;40024:2026;;39920:2130;;;:::o;31968:1109::-;32030:21;;:::i;:::-;32064:12;32079:7;32064:22;;32147:4;32128:15;:13;:15::i;:::-;:23;;:47;;;;;32162:13;;32155:4;:20;32128:47;32124:886;;;32196:31;32230:11;:17;32242:4;32230:17;;;;;;;;;;;32196:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32271:9;:16;;;32266:729;;32342:1;32316:28;;:9;:14;;;:28;;;32312:101;;32380:9;32373:16;;;;;;32312:101;32715:261;32722:4;32715:261;;;32755:6;;;;;;;;32800:11;:17;32812:4;32800:17;;;;;;;;;;;32788:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32874:1;32848:28;;:9;:14;;;:28;;;32844:109;;32916:9;32909:16;;;;;;32844:109;32715:261;;;32266:729;32177:833;32124:886;33038:31;;;;;;;;;;;;;;31968:1109;;;;:::o;8287:191::-;8361:16;8380:6;;;;;;;;;;;8361:25;;8406:8;8397:6;;:17;;;;;;;;;;;;;;;;;;8461:8;8430:40;;8451:8;8430:40;;;;;;;;;;;;8350:128;8287:191;:::o;929:190::-;1054:4;1107;1078:25;1091:5;1098:4;1078:12;:25::i;:::-;:33;1071:40;;929:190;;;;;:::o;37002:104::-;37071:27;37081:2;37085:8;37071:27;;;;;;;;;;;;:9;:27::i;:::-;37002:104;;:::o;9718:326::-;9778:4;10035:1;10013:7;:19;;;:23;10006:30;;9718:326;;;:::o;45665:667::-;45828:4;45865:2;45849:36;;;45886:12;:10;:12::i;:::-;45900:4;45906:7;45915:5;45849:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45845:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46100:1;46083:6;:13;:18;46079:235;;;46129:40;;;;;;;;;;;;;;46079:235;46272:6;46266:13;46257:6;46253:2;46249:15;46242:38;45845:480;45978:45;;;45968:55;;;:6;:55;;;;45961:62;;;45665:667;;;;;;:::o;2825:723::-;2881:13;3111:1;3102:5;:10;3098:53;;;3129:10;;;;;;;;;;;;;;;;;;;;;3098:53;3161:12;3176:5;3161:20;;3192:14;3217:78;3232:1;3224:4;:9;3217:78;;3250:8;;;;;:::i;:::-;;;;3281:2;3273:10;;;;;:::i;:::-;;;3217:78;;;3305:19;3337:6;3327:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3305:39;;3355:154;3371:1;3362:5;:10;3355:154;;3399:1;3389:11;;;;;:::i;:::-;;;3466:2;3458:5;:10;;;;:::i;:::-;3445:2;:24;;;;:::i;:::-;3432:39;;3415:6;3422;3415:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3495:2;3486:11;;;;;:::i;:::-;;;3355:154;;;3533:6;3519:21;;;;;2825:723;;;;:::o;30875:137::-;30936:7;30971:12;:19;30984:5;30971:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;30963:41;;30956:48;;30875:137;;;:::o;46980:159::-;;;;;:::o;47798:158::-;;;;;:::o;1481:675::-;1564:7;1584:20;1607:4;1584:27;;1627:9;1622:497;1646:5;:12;1642:1;:16;1622:497;;;1680:20;1703:5;1709:1;1703:8;;;;;;;;:::i;:::-;;;;;;;;1680:31;;1746:12;1730;:28;1726:382;;1873:42;1888:12;1902;1873:14;:42::i;:::-;1858:57;;1726:382;;;2050:42;2065:12;2079;2050:14;:42::i;:::-;2035:57;;1726:382;1665:454;1660:3;;;;;:::i;:::-;;;;1622:497;;;;2136:12;2129:19;;;1481:675;;;;:::o;37469:163::-;37592:32;37598:2;37602:8;37612:5;37619:4;37592:5;:32::i;:::-;37469:163;;;:::o;2164:224::-;2232:13;2295:1;2289:4;2282:15;2324:1;2318:4;2311:15;2365:4;2359;2349:21;2340:30;;2164:224;;;;:::o;37891:1775::-;38030:20;38053:13;;38030:36;;38095:1;38081:16;;:2;:16;;;38077:48;;;38106:19;;;;;;;;;;;;;;38077:48;38152:1;38140:8;:13;38136:44;;;38162:18;;;;;;;;;;;;;;38136:44;38193:61;38223:1;38227:2;38231:12;38245:8;38193:21;:61::i;:::-;38566:8;38531:12;:16;38544:2;38531:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38630:8;38590:12;:16;38603:2;38590:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38689:2;38656:11;:25;38668:12;38656:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38756:15;38706:11;:25;38718:12;38706:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38789:20;38812:12;38789:35;;38839:11;38868:8;38853:12;:23;38839:37;;38897:4;:23;;;;;38905:15;:2;:13;;;:15::i;:::-;38897:23;38893:641;;;38941:314;38997:12;38993:2;38972:38;;38989:1;38972:38;;;;;;;;;;;;39038:69;39077:1;39081:2;39085:14;;;;;;39101:5;39038:30;:69::i;:::-;39033:174;;39143:40;;;;;;;;;;;;;;39033:174;39250:3;39234:12;:19;;38941:314;;39336:12;39319:13;;:29;39315:43;;39350:8;;;39315:43;38893:641;;;39399:120;39455:14;;;;;;39451:2;39430:40;;39447:1;39430:40;;;;;;;;;;;;39514:3;39498:12;:19;;39399:120;;38893:641;39564:12;39548:13;:28;;;;38506:1082;;39598:60;39627:1;39631:2;39635:12;39649:8;39598:20;:60::i;:::-;38019:1647;37891:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:329::-;1933:6;1982:2;1970:9;1961:7;1957:23;1953:32;1950:119;;;1988:79;;:::i;:::-;1950:119;2108:1;2133:53;2178:7;2169:6;2158:9;2154:22;2133:53;:::i;:::-;2123:63;;2079:117;1874:329;;;;:::o;2209:99::-;2261:6;2295:5;2289:12;2279:22;;2209:99;;;:::o;2314:169::-;2398:11;2432:6;2427:3;2420:19;2472:4;2467:3;2463:14;2448:29;;2314:169;;;;:::o;2489:307::-;2557:1;2567:113;2581:6;2578:1;2575:13;2567:113;;;2666:1;2661:3;2657:11;2651:18;2647:1;2642:3;2638:11;2631:39;2603:2;2600:1;2596:10;2591:15;;2567:113;;;2698:6;2695:1;2692:13;2689:101;;;2778:1;2769:6;2764:3;2760:16;2753:27;2689:101;2538:258;2489:307;;;:::o;2802:102::-;2843:6;2894:2;2890:7;2885:2;2878:5;2874:14;2870:28;2860:38;;2802:102;;;:::o;2910:364::-;2998:3;3026:39;3059:5;3026:39;:::i;:::-;3081:71;3145:6;3140:3;3081:71;:::i;:::-;3074:78;;3161:52;3206:6;3201:3;3194:4;3187:5;3183:16;3161:52;:::i;:::-;3238:29;3260:6;3238:29;:::i;:::-;3233:3;3229:39;3222:46;;3002:272;2910:364;;;;:::o;3280:313::-;3393:4;3431:2;3420:9;3416:18;3408:26;;3480:9;3474:4;3470:20;3466:1;3455:9;3451:17;3444:47;3508:78;3581:4;3572:6;3508:78;:::i;:::-;3500:86;;3280:313;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:122::-;3906:24;3924:5;3906:24;:::i;:::-;3899:5;3896:35;3886:63;;3945:1;3942;3935:12;3886:63;3833:122;:::o;3961:139::-;4007:5;4045:6;4032:20;4023:29;;4061:33;4088:5;4061:33;:::i;:::-;3961:139;;;;:::o;4106:329::-;4165:6;4214:2;4202:9;4193:7;4189:23;4185:32;4182:119;;;4220:79;;:::i;:::-;4182:119;4340:1;4365:53;4410:7;4401:6;4390:9;4386:22;4365:53;:::i;:::-;4355:63;;4311:117;4106:329;;;;:::o;4441:118::-;4528:24;4546:5;4528:24;:::i;:::-;4523:3;4516:37;4441:118;;:::o;4565:222::-;4658:4;4696:2;4685:9;4681:18;4673:26;;4709:71;4777:1;4766:9;4762:17;4753:6;4709:71;:::i;:::-;4565:222;;;;:::o;4793:118::-;4880:24;4898:5;4880:24;:::i;:::-;4875:3;4868:37;4793:118;;:::o;4917:222::-;5010:4;5048:2;5037:9;5033:18;5025:26;;5061:71;5129:1;5118:9;5114:17;5105:6;5061:71;:::i;:::-;4917:222;;;;:::o;5145:474::-;5213:6;5221;5270:2;5258:9;5249:7;5245:23;5241:32;5238:119;;;5276:79;;:::i;:::-;5238:119;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5145:474;;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:180;6421:77;6418:1;6411:88;6518:4;6515:1;6508:15;6542:4;6539:1;6532:15;6559:281;6642:27;6664:4;6642:27;:::i;:::-;6634:6;6630:40;6772:6;6760:10;6757:22;6736:18;6724:10;6721:34;6718:62;6715:88;;;6783:18;;:::i;:::-;6715:88;6823:10;6819:2;6812:22;6602:238;6559:281;;:::o;6846:129::-;6880:6;6907:20;;:::i;:::-;6897:30;;6936:33;6964:4;6956:6;6936:33;:::i;:::-;6846:129;;;:::o;6981:311::-;7058:4;7148:18;7140:6;7137:30;7134:56;;;7170:18;;:::i;:::-;7134:56;7220:4;7212:6;7208:17;7200:25;;7280:4;7274;7270:15;7262:23;;6981:311;;;:::o;7298:117::-;7407:1;7404;7397:12;7421:77;7458:7;7487:5;7476:16;;7421:77;;;:::o;7504:122::-;7577:24;7595:5;7577:24;:::i;:::-;7570:5;7567:35;7557:63;;7616:1;7613;7606:12;7557:63;7504:122;:::o;7632:139::-;7678:5;7716:6;7703:20;7694:29;;7732:33;7759:5;7732:33;:::i;:::-;7632:139;;;;:::o;7794:710::-;7890:5;7915:81;7931:64;7988:6;7931:64;:::i;:::-;7915:81;:::i;:::-;7906:90;;8016:5;8045:6;8038:5;8031:21;8079:4;8072:5;8068:16;8061:23;;8132:4;8124:6;8120:17;8112:6;8108:30;8161:3;8153:6;8150:15;8147:122;;;8180:79;;:::i;:::-;8147:122;8295:6;8278:220;8312:6;8307:3;8304:15;8278:220;;;8387:3;8416:37;8449:3;8437:10;8416:37;:::i;:::-;8411:3;8404:50;8483:4;8478:3;8474:14;8467:21;;8354:144;8338:4;8333:3;8329:14;8322:21;;8278:220;;;8282:21;7896:608;;7794:710;;;;;:::o;8527:370::-;8598:5;8647:3;8640:4;8632:6;8628:17;8624:27;8614:122;;8655:79;;:::i;:::-;8614:122;8772:6;8759:20;8797:94;8887:3;8879:6;8872:4;8864:6;8860:17;8797:94;:::i;:::-;8788:103;;8604:293;8527:370;;;;:::o;8903:684::-;8996:6;9004;9053:2;9041:9;9032:7;9028:23;9024:32;9021:119;;;9059:79;;:::i;:::-;9021:119;9179:1;9204:53;9249:7;9240:6;9229:9;9225:22;9204:53;:::i;:::-;9194:63;;9150:117;9334:2;9323:9;9319:18;9306:32;9365:18;9357:6;9354:30;9351:117;;;9387:79;;:::i;:::-;9351:117;9492:78;9562:7;9553:6;9542:9;9538:22;9492:78;:::i;:::-;9482:88;;9277:303;8903:684;;;;;:::o;9593:329::-;9652:6;9701:2;9689:9;9680:7;9676:23;9672:32;9669:119;;;9707:79;;:::i;:::-;9669:119;9827:1;9852:53;9897:7;9888:6;9877:9;9873:22;9852:53;:::i;:::-;9842:63;;9798:117;9593:329;;;;:::o;9928:116::-;9998:21;10013:5;9998:21;:::i;:::-;9991:5;9988:32;9978:60;;10034:1;10031;10024:12;9978:60;9928:116;:::o;10050:133::-;10093:5;10131:6;10118:20;10109:29;;10147:30;10171:5;10147:30;:::i;:::-;10050:133;;;;:::o;10189:468::-;10254:6;10262;10311:2;10299:9;10290:7;10286:23;10282:32;10279:119;;;10317:79;;:::i;:::-;10279:119;10437:1;10462:53;10507:7;10498:6;10487:9;10483:22;10462:53;:::i;:::-;10452:63;;10408:117;10564:2;10590:50;10632:7;10623:6;10612:9;10608:22;10590:50;:::i;:::-;10580:60;;10535:115;10189:468;;;;;:::o;10663:117::-;10772:1;10769;10762:12;10800:553;10858:8;10868:6;10918:3;10911:4;10903:6;10899:17;10895:27;10885:122;;10926:79;;:::i;:::-;10885:122;11039:6;11026:20;11016:30;;11069:18;11061:6;11058:30;11055:117;;;11091:79;;:::i;:::-;11055:117;11205:4;11197:6;11193:17;11181:29;;11259:3;11251:4;11243:6;11239:17;11229:8;11225:32;11222:41;11219:128;;;11266:79;;:::i;:::-;11219:128;10800:553;;;;;:::o;11359:668::-;11436:6;11444;11452;11501:2;11489:9;11480:7;11476:23;11472:32;11469:119;;;11507:79;;:::i;:::-;11469:119;11655:1;11644:9;11640:17;11627:31;11685:18;11677:6;11674:30;11671:117;;;11707:79;;:::i;:::-;11671:117;11820:65;11877:7;11868:6;11857:9;11853:22;11820:65;:::i;:::-;11802:83;;;;11598:297;11934:2;11960:50;12002:7;11993:6;11982:9;11978:22;11960:50;:::i;:::-;11950:60;;11905:115;11359:668;;;;;:::o;12033:117::-;12142:1;12139;12132:12;12156:307;12217:4;12307:18;12299:6;12296:30;12293:56;;;12329:18;;:::i;:::-;12293:56;12367:29;12389:6;12367:29;:::i;:::-;12359:37;;12451:4;12445;12441:15;12433:23;;12156:307;;;:::o;12469:154::-;12553:6;12548:3;12543;12530:30;12615:1;12606:6;12601:3;12597:16;12590:27;12469:154;;;:::o;12629:410::-;12706:5;12731:65;12747:48;12788:6;12747:48;:::i;:::-;12731:65;:::i;:::-;12722:74;;12819:6;12812:5;12805:21;12857:4;12850:5;12846:16;12895:3;12886:6;12881:3;12877:16;12874:25;12871:112;;;12902:79;;:::i;:::-;12871:112;12992:41;13026:6;13021:3;13016;12992:41;:::i;:::-;12712:327;12629:410;;;;;:::o;13058:338::-;13113:5;13162:3;13155:4;13147:6;13143:17;13139:27;13129:122;;13170:79;;:::i;:::-;13129:122;13287:6;13274:20;13312:78;13386:3;13378:6;13371:4;13363:6;13359:17;13312:78;:::i;:::-;13303:87;;13119:277;13058:338;;;;:::o;13402:943::-;13497:6;13505;13513;13521;13570:3;13558:9;13549:7;13545:23;13541:33;13538:120;;;13577:79;;:::i;:::-;13538:120;13697:1;13722:53;13767:7;13758:6;13747:9;13743:22;13722:53;:::i;:::-;13712:63;;13668:117;13824:2;13850:53;13895:7;13886:6;13875:9;13871:22;13850:53;:::i;:::-;13840:63;;13795:118;13952:2;13978:53;14023:7;14014:6;14003:9;13999:22;13978:53;:::i;:::-;13968:63;;13923:118;14108:2;14097:9;14093:18;14080:32;14139:18;14131:6;14128:30;14125:117;;;14161:79;;:::i;:::-;14125:117;14266:62;14320:7;14311:6;14300:9;14296:22;14266:62;:::i;:::-;14256:72;;14051:287;13402:943;;;;;;;:::o;14351:474::-;14419:6;14427;14476:2;14464:9;14455:7;14451:23;14447:32;14444:119;;;14482:79;;:::i;:::-;14444:119;14602:1;14627:53;14672:7;14663:6;14652:9;14648:22;14627:53;:::i;:::-;14617:63;;14573:117;14729:2;14755:53;14800:7;14791:6;14780:9;14776:22;14755:53;:::i;:::-;14745:63;;14700:118;14351:474;;;;;:::o;14831:180::-;14879:77;14876:1;14869:88;14976:4;14973:1;14966:15;15000:4;14997:1;14990:15;15017:320;15061:6;15098:1;15092:4;15088:12;15078:22;;15145:1;15139:4;15135:12;15166:18;15156:81;;15222:4;15214:6;15210:17;15200:27;;15156:81;15284:2;15276:6;15273:14;15253:18;15250:38;15247:84;;;15303:18;;:::i;:::-;15247:84;15068:269;15017:320;;;:::o;15343:147::-;15444:11;15481:3;15466:18;;15343:147;;;;:::o;15496:114::-;;:::o;15616:398::-;15775:3;15796:83;15877:1;15872:3;15796:83;:::i;:::-;15789:90;;15888:93;15977:3;15888:93;:::i;:::-;16006:1;16001:3;15997:11;15990:18;;15616:398;;;:::o;16020:379::-;16204:3;16226:147;16369:3;16226:147;:::i;:::-;16219:154;;16390:3;16383:10;;16020:379;;;:::o;16405:169::-;16545:21;16541:1;16533:6;16529:14;16522:45;16405:169;:::o;16580:366::-;16722:3;16743:67;16807:2;16802:3;16743:67;:::i;:::-;16736:74;;16819:93;16908:3;16819:93;:::i;:::-;16937:2;16932:3;16928:12;16921:19;;16580:366;;;:::o;16952:419::-;17118:4;17156:2;17145:9;17141:18;17133:26;;17205:9;17199:4;17195:20;17191:1;17180:9;17176:17;17169:47;17233:131;17359:4;17233:131;:::i;:::-;17225:139;;16952:419;;;:::o;17377:180::-;17425:77;17422:1;17415:88;17522:4;17519:1;17512:15;17546:4;17543:1;17536:15;17563:305;17603:3;17622:20;17640:1;17622:20;:::i;:::-;17617:25;;17656:20;17674:1;17656:20;:::i;:::-;17651:25;;17810:1;17742:66;17738:74;17735:1;17732:81;17729:107;;;17816:18;;:::i;:::-;17729:107;17860:1;17857;17853:9;17846:16;;17563:305;;;;:::o;17874:169::-;18014:21;18010:1;18002:6;17998:14;17991:45;17874:169;:::o;18049:366::-;18191:3;18212:67;18276:2;18271:3;18212:67;:::i;:::-;18205:74;;18288:93;18377:3;18288:93;:::i;:::-;18406:2;18401:3;18397:12;18390:19;;18049:366;;;:::o;18421:419::-;18587:4;18625:2;18614:9;18610:18;18602:26;;18674:9;18668:4;18664:20;18660:1;18649:9;18645:17;18638:47;18702:131;18828:4;18702:131;:::i;:::-;18694:139;;18421:419;;;:::o;18846:94::-;18879:8;18927:5;18923:2;18919:14;18898:35;;18846:94;;;:::o;18946:::-;18985:7;19014:20;19028:5;19014:20;:::i;:::-;19003:31;;18946:94;;;:::o;19046:100::-;19085:7;19114:26;19134:5;19114:26;:::i;:::-;19103:37;;19046:100;;;:::o;19152:157::-;19257:45;19277:24;19295:5;19277:24;:::i;:::-;19257:45;:::i;:::-;19252:3;19245:58;19152:157;;:::o;19315:256::-;19427:3;19442:75;19513:3;19504:6;19442:75;:::i;:::-;19542:2;19537:3;19533:12;19526:19;;19562:3;19555:10;;19315:256;;;;:::o;19577:164::-;19717:16;19713:1;19705:6;19701:14;19694:40;19577:164;:::o;19747:366::-;19889:3;19910:67;19974:2;19969:3;19910:67;:::i;:::-;19903:74;;19986:93;20075:3;19986:93;:::i;:::-;20104:2;20099:3;20095:12;20088:19;;19747:366;;;:::o;20119:419::-;20285:4;20323:2;20312:9;20308:18;20300:26;;20372:9;20366:4;20362:20;20358:1;20347:9;20343:17;20336:47;20400:131;20526:4;20400:131;:::i;:::-;20392:139;;20119:419;;;:::o;20544:162::-;20684:14;20680:1;20672:6;20668:14;20661:38;20544:162;:::o;20712:366::-;20854:3;20875:67;20939:2;20934:3;20875:67;:::i;:::-;20868:74;;20951:93;21040:3;20951:93;:::i;:::-;21069:2;21064:3;21060:12;21053:19;;20712:366;;;:::o;21084:419::-;21250:4;21288:2;21277:9;21273:18;21265:26;;21337:9;21331:4;21327:20;21323:1;21312:9;21308:17;21301:47;21365:131;21491:4;21365:131;:::i;:::-;21357:139;;21084:419;;;:::o;21509:143::-;21566:5;21597:6;21591:13;21582:22;;21613:33;21640:5;21613:33;:::i;:::-;21509:143;;;;:::o;21658:351::-;21728:6;21777:2;21765:9;21756:7;21752:23;21748:32;21745:119;;;21783:79;;:::i;:::-;21745:119;21903:1;21928:64;21984:7;21975:6;21964:9;21960:22;21928:64;:::i;:::-;21918:74;;21874:128;21658:351;;;;:::o;22015:161::-;22155:13;22151:1;22143:6;22139:14;22132:37;22015:161;:::o;22182:366::-;22324:3;22345:67;22409:2;22404:3;22345:67;:::i;:::-;22338:74;;22421:93;22510:3;22421:93;:::i;:::-;22539:2;22534:3;22530:12;22523:19;;22182:366;;;:::o;22554:419::-;22720:4;22758:2;22747:9;22743:18;22735:26;;22807:9;22801:4;22797:20;22793:1;22782:9;22778:17;22771:47;22835:131;22961:4;22835:131;:::i;:::-;22827:139;;22554:419;;;:::o;22979:166::-;23119:18;23115:1;23107:6;23103:14;23096:42;22979:166;:::o;23151:366::-;23293:3;23314:67;23378:2;23373:3;23314:67;:::i;:::-;23307:74;;23390:93;23479:3;23390:93;:::i;:::-;23508:2;23503:3;23499:12;23492:19;;23151:366;;;:::o;23523:419::-;23689:4;23727:2;23716:9;23712:18;23704:26;;23776:9;23770:4;23766:20;23762:1;23751:9;23747:17;23740:47;23804:131;23930:4;23804:131;:::i;:::-;23796:139;;23523:419;;;:::o;23948:348::-;23988:7;24011:20;24029:1;24011:20;:::i;:::-;24006:25;;24045:20;24063:1;24045:20;:::i;:::-;24040:25;;24233:1;24165:66;24161:74;24158:1;24155:81;24150:1;24143:9;24136:17;24132:105;24129:131;;;24240:18;;:::i;:::-;24129:131;24288:1;24285;24281:9;24270:20;;23948:348;;;;:::o;24302:170::-;24442:22;24438:1;24430:6;24426:14;24419:46;24302:170;:::o;24478:366::-;24620:3;24641:67;24705:2;24700:3;24641:67;:::i;:::-;24634:74;;24717:93;24806:3;24717:93;:::i;:::-;24835:2;24830:3;24826:12;24819:19;;24478:366;;;:::o;24850:419::-;25016:4;25054:2;25043:9;25039:18;25031:26;;25103:9;25097:4;25093:20;25089:1;25078:9;25074:17;25067:47;25131:131;25257:4;25131:131;:::i;:::-;25123:139;;24850:419;;;:::o;25275:163::-;25415:15;25411:1;25403:6;25399:14;25392:39;25275:163;:::o;25444:366::-;25586:3;25607:67;25671:2;25666:3;25607:67;:::i;:::-;25600:74;;25683:93;25772:3;25683:93;:::i;:::-;25801:2;25796:3;25792:12;25785:19;;25444:366;;;:::o;25816:419::-;25982:4;26020:2;26009:9;26005:18;25997:26;;26069:9;26063:4;26059:20;26055:1;26044:9;26040:17;26033:47;26097:131;26223:4;26097:131;:::i;:::-;26089:139;;25816:419;;;:::o;26241:181::-;26381:33;26377:1;26369:6;26365:14;26358:57;26241:181;:::o;26428:366::-;26570:3;26591:67;26655:2;26650:3;26591:67;:::i;:::-;26584:74;;26667:93;26756:3;26667:93;:::i;:::-;26785:2;26780:3;26776:12;26769:19;;26428:366;;;:::o;26800:419::-;26966:4;27004:2;26993:9;26989:18;26981:26;;27053:9;27047:4;27043:20;27039:1;27028:9;27024:17;27017:47;27081:131;27207:4;27081:131;:::i;:::-;27073:139;;26800:419;;;:::o;27225:148::-;27327:11;27364:3;27349:18;;27225:148;;;;:::o;27379:141::-;27428:4;27451:3;27443:11;;27474:3;27471:1;27464:14;27508:4;27505:1;27495:18;27487:26;;27379:141;;;:::o;27550:845::-;27653:3;27690:5;27684:12;27719:36;27745:9;27719:36;:::i;:::-;27771:89;27853:6;27848:3;27771:89;:::i;:::-;27764:96;;27891:1;27880:9;27876:17;27907:1;27902:137;;;;28053:1;28048:341;;;;27869:520;;27902:137;27986:4;27982:9;27971;27967:25;27962:3;27955:38;28022:6;28017:3;28013:16;28006:23;;27902:137;;28048:341;28115:38;28147:5;28115:38;:::i;:::-;28175:1;28189:154;28203:6;28200:1;28197:13;28189:154;;;28277:7;28271:14;28267:1;28262:3;28258:11;28251:35;28327:1;28318:7;28314:15;28303:26;;28225:4;28222:1;28218:12;28213:17;;28189:154;;;28372:6;28367:3;28363:16;28356:23;;28055:334;;27869:520;;27657:738;;27550:845;;;;:::o;28401:377::-;28507:3;28535:39;28568:5;28535:39;:::i;:::-;28590:89;28672:6;28667:3;28590:89;:::i;:::-;28583:96;;28688:52;28733:6;28728:3;28721:4;28714:5;28710:16;28688:52;:::i;:::-;28765:6;28760:3;28756:16;28749:23;;28511:267;28401:377;;;;:::o;28784:429::-;28961:3;28983:92;29071:3;29062:6;28983:92;:::i;:::-;28976:99;;29092:95;29183:3;29174:6;29092:95;:::i;:::-;29085:102;;29204:3;29197:10;;28784:429;;;;;:::o;29219:170::-;29359:22;29355:1;29347:6;29343:14;29336:46;29219:170;:::o;29395:366::-;29537:3;29558:67;29622:2;29617:3;29558:67;:::i;:::-;29551:74;;29634:93;29723:3;29634:93;:::i;:::-;29752:2;29747:3;29743:12;29736:19;;29395:366;;;:::o;29767:419::-;29933:4;29971:2;29960:9;29956:18;29948:26;;30020:9;30014:4;30010:20;30006:1;29995:9;29991:17;29984:47;30048:131;30174:4;30048:131;:::i;:::-;30040:139;;29767:419;;;:::o;30192:165::-;30332:17;30328:1;30320:6;30316:14;30309:41;30192:165;:::o;30363:366::-;30505:3;30526:67;30590:2;30585:3;30526:67;:::i;:::-;30519:74;;30602:93;30691:3;30602:93;:::i;:::-;30720:2;30715:3;30711:12;30704:19;;30363:366;;;:::o;30735:419::-;30901:4;30939:2;30928:9;30924:18;30916:26;;30988:9;30982:4;30978:20;30974:1;30963:9;30959:17;30952:47;31016:131;31142:4;31016:131;:::i;:::-;31008:139;;30735:419;;;:::o;31160:166::-;31300:18;31296:1;31288:6;31284:14;31277:42;31160:166;:::o;31332:366::-;31474:3;31495:67;31559:2;31554:3;31495:67;:::i;:::-;31488:74;;31571:93;31660:3;31571:93;:::i;:::-;31689:2;31684:3;31680:12;31673:19;;31332:366;;;:::o;31704:419::-;31870:4;31908:2;31897:9;31893:18;31885:26;;31957:9;31951:4;31947:20;31943:1;31932:9;31928:17;31921:47;31985:131;32111:4;31985:131;:::i;:::-;31977:139;;31704:419;;;:::o;32129:225::-;32269:34;32265:1;32257:6;32253:14;32246:58;32338:8;32333:2;32325:6;32321:15;32314:33;32129:225;:::o;32360:366::-;32502:3;32523:67;32587:2;32582:3;32523:67;:::i;:::-;32516:74;;32599:93;32688:3;32599:93;:::i;:::-;32717:2;32712:3;32708:12;32701:19;;32360:366;;;:::o;32732:419::-;32898:4;32936:2;32925:9;32921:18;32913:26;;32985:9;32979:4;32975:20;32971:1;32960:9;32956:17;32949:47;33013:131;33139:4;33013:131;:::i;:::-;33005:139;;32732:419;;;:::o;33157:182::-;33297:34;33293:1;33285:6;33281:14;33274:58;33157:182;:::o;33345:366::-;33487:3;33508:67;33572:2;33567:3;33508:67;:::i;:::-;33501:74;;33584:93;33673:3;33584:93;:::i;:::-;33702:2;33697:3;33693:12;33686:19;;33345:366;;;:::o;33717:419::-;33883:4;33921:2;33910:9;33906:18;33898:26;;33970:9;33964:4;33960:20;33956:1;33945:9;33941:17;33934:47;33998:131;34124:4;33998:131;:::i;:::-;33990:139;;33717:419;;;:::o;34142:98::-;34193:6;34227:5;34221:12;34211:22;;34142:98;;;:::o;34246:168::-;34329:11;34363:6;34358:3;34351:19;34403:4;34398:3;34394:14;34379:29;;34246:168;;;;:::o;34420:360::-;34506:3;34534:38;34566:5;34534:38;:::i;:::-;34588:70;34651:6;34646:3;34588:70;:::i;:::-;34581:77;;34667:52;34712:6;34707:3;34700:4;34693:5;34689:16;34667:52;:::i;:::-;34744:29;34766:6;34744:29;:::i;:::-;34739:3;34735:39;34728:46;;34510:270;34420:360;;;;:::o;34786:640::-;34981:4;35019:3;35008:9;35004:19;34996:27;;35033:71;35101:1;35090:9;35086:17;35077:6;35033:71;:::i;:::-;35114:72;35182:2;35171:9;35167:18;35158:6;35114:72;:::i;:::-;35196;35264:2;35253:9;35249:18;35240:6;35196:72;:::i;:::-;35315:9;35309:4;35305:20;35300:2;35289:9;35285:18;35278:48;35343:76;35414:4;35405:6;35343:76;:::i;:::-;35335:84;;34786:640;;;;;;;:::o;35432:141::-;35488:5;35519:6;35513:13;35504:22;;35535:32;35561:5;35535:32;:::i;:::-;35432:141;;;;:::o;35579:349::-;35648:6;35697:2;35685:9;35676:7;35672:23;35668:32;35665:119;;;35703:79;;:::i;:::-;35665:119;35823:1;35848:63;35903:7;35894:6;35883:9;35879:22;35848:63;:::i;:::-;35838:73;;35794:127;35579:349;;;;:::o;35934:233::-;35973:3;35996:24;36014:5;35996:24;:::i;:::-;35987:33;;36042:66;36035:5;36032:77;36029:103;;;36112:18;;:::i;:::-;36029:103;36159:1;36152:5;36148:13;36141:20;;35934:233;;;:::o;36173:180::-;36221:77;36218:1;36211:88;36318:4;36315:1;36308:15;36342:4;36339:1;36332:15;36359:185;36399:1;36416:20;36434:1;36416:20;:::i;:::-;36411:25;;36450:20;36468:1;36450:20;:::i;:::-;36445:25;;36489:1;36479:35;;36494:18;;:::i;:::-;36479:35;36536:1;36533;36529:9;36524:14;;36359:185;;;;:::o;36550:191::-;36590:4;36610:20;36628:1;36610:20;:::i;:::-;36605:25;;36644:20;36662:1;36644:20;:::i;:::-;36639:25;;36683:1;36680;36677:8;36674:34;;;36688:18;;:::i;:::-;36674:34;36733:1;36730;36726:9;36718:17;;36550:191;;;;:::o;36747:176::-;36779:1;36796:20;36814:1;36796:20;:::i;:::-;36791:25;;36830:20;36848:1;36830:20;:::i;:::-;36825:25;;36869:1;36859:35;;36874:18;;:::i;:::-;36859:35;36915:1;36912;36908:9;36903:14;;36747:176;;;;:::o;36929:180::-;36977:77;36974:1;36967:88;37074:4;37071:1;37064:15;37098:4;37095:1;37088:15

Swarm Source

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