ETH Price: $3,337.58 (-3.28%)

Token

COLORZ (COLORZ)
 

Overview

Max Total Supply

3,700 COLORZ

Holders

2,208

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 COLORZ
0xa4aaea5164643420f128f34d4fdc7519567f8440
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:
Colorz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/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/Counters.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// 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 v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

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


// OpenZeppelin Contracts (last updated v4.5.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

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

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


// OpenZeppelin Contracts v4.4.1 (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 `IERC721.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 v4.4.1 (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`, 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 be 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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

// 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: @openzeppelin/contracts/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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 virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _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 {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @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`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a 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 _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/colorz.sol



//          _             _            _             _            _            _         
//         /\ \           /\ \         _\ \          /\ \         /\ \        /\ \        
//        /  \ \         /  \ \       /\__ \        /  \ \       /  \ \      /  \ \       
//       / /\ \ \       / /\ \ \     / /_ \_\      / /\ \ \     / /\ \ \  __/ /\ \ \      
//      / / /\ \ \     / / /\ \ \   / / /\/_/     / / /\ \ \   / / /\ \_\/___/ /\ \ \     
//     / / /  \ \_\   / / /  \ \_\ / / /         / / /  \ \_\ / / /_/ / /\___\/ / / /     
//    / / /    \/_/  / / /   / / // / /         / / /   / / // / /__\/ /       / / /      
//   / / /          / / /   / / // / / ____    / / /   / / // / /_____/       / / /    _  
//  / / /________  / / /___/ / // /_/_/ ___/\ / / /___/ / // / /\ \ \         \ \ \__/\_\ 
// / / /_________\/ / /____\/ //_______/\__\// / /____\/ // / /  \ \ \         \ \___\/ / 
// \/____________/\/_________/ \_______\/    \/_________/ \/_/    \_\/          \/___/_/  
                                                                                       

pragma solidity >=0.7.0 <0.9.0;





contract Colorz is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "https://evolutionznft.com/Colorz/";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
  
  uint256 public cost = 0.03 ether;
  uint256 public maxSupply = 3700;
  uint256 public maxMintAmountPerTx = 10;
  uint256 public royalty = cost / 2;
  uint256 public royaltyCounter = 17;
  
  bool public paused = false;
  bool public revealed = true;

  address public shapezContract;
  
  bytes32 public freeMintMerkleRoot;

  mapping (address => bool) public adressesMintedFree;

  constructor() ERC721("COLORZ", "COLORZ") {
    setHiddenMetadataUri("https://evolutionz.mypinata.cloud/ipfs/Qma534fX2Uo4DJ3DfQpWMomr4KGByRezgpWrxtazPLy86r");
    setShapezContract(0x038BB7cD980A0803cb74F2fC9620981F846aE7b1);
    setFreeMintMerkleRoot(0xeeec3d571f72922f19f46be7c53551df289cb6ceeaba5910a50e51f93901e63c);

    _mintLoop(msg.sender, 120);    
  }

  modifier mintCompliance(uint256 _mintAmount) {
    if (msg.sender != owner()) {
     require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    }
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }


  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");

    IERC721 shapezToken = IERC721(shapezContract);
    address shapezTokenOwner;

    _mintLoop(msg.sender, _mintAmount);

    // pay royalty to Shapez token owner for each Colorz token mint
    if (royaltyCounter < 3501) {
      for (uint i = 0; i < _mintAmount; i++) {
        shapezTokenOwner = shapezToken.ownerOf(royaltyCounter);
        address payable _to = payable(shapezTokenOwner);
        (bool success, bytes memory data) = _to.call{value: royalty}("");
        require(success, "call failed");
        royaltyCounter++;
      }
    }
  }

  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : "";
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setRoyalty(uint256 _royalty) public onlyOwner {
    royalty = _royalty;
  }

  function setRoyaltyCounter(uint256 _royaltyCounter) public onlyOwner {
    royaltyCounter = _royaltyCounter;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function withdraw(uint256 _amount) public onlyOwner {
    (bool os, ) = payable(owner()).call{value: _amount }("");
    require(os);
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }

    // free Mint function
  function freeMint (bytes32[] calldata _merkleProof) public payable mintCompliance(1) {
    address sender = msg.sender;
  
    require(!paused, "The contract is paused!");
    require(isValidFreeMint(_merkleProof), "Account is not whitelisted for free mint");
    require(adressesMintedFree[msg.sender] != true, "Account already received a free mint");

    _mintLoop(sender, 1);
    adressesMintedFree[msg.sender] = true;
  }


  // check if free mint wallet has is valid
  function isValidFreeMint(bytes32[] memory _merkleProof) public view returns (bool) {
        bytes32 freeLeaf = keccak256(abi.encodePacked(msg.sender));
         if (MerkleProof.verify( _merkleProof, freeMintMerkleRoot, freeLeaf)) {
           return true;
        }  else {
          return false;
        }
  }

  // sets the contract address to Roo Troop
  function setShapezContract(address _newAddress) public onlyOwner {
    shapezContract = _newAddress;
  }

  // sets new merkle Root for free Mint
  function setFreeMintMerkleRoot(bytes32 _newRoot) public onlyOwner {  
    freeMintMerkleRoot = _newRoot;
  }

  // receive fallback
  fallback() external payable {}
  receive () external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adressesMintedFree","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":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freeMintMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"isValidFreeMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyCounter","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":"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"setFreeMintMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royalty","type":"uint256"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltyCounter","type":"uint256"}],"name":"setRoyaltyCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setShapezContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shapezContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052604051806060016040528060218152602001620062f660219139600890805190602001906200003592919062000acd565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200008392919062000acd565b50666a94d74f430000600b55610e74600c55600a600d556002600b54620000ab919062000e2b565b600e556011600f556000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000f657600080fd5b506040518060400160405280600681526020017f434f4c4f525a00000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f434f4c4f525a000000000000000000000000000000000000000000000000000081525081600090805190602001906200017b92919062000acd565b5080600190805190602001906200019492919062000acd565b505050620001b7620001ab6200025360201b60201c565b6200025b60201b60201c565b620001e1604051806080016040528060558152602001620062a1605591396200032160201b60201c565b6200020673038bb7cd980a0803cb74f2fc9620981f846ae7b1620003cc60201b60201c565b6200023a7feeec3d571f72922f19f46be7c53551df289cb6ceeaba5910a50e51f93901e63c60001b6200049f60201b60201c565b6200024d3360786200053860201b60201c565b6200110e565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003316200025360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003576200059e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a79062000d7f565b60405180910390fd5b80600a9080519060200190620003c892919062000acd565b5050565b620003dc6200025360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004026200059e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200045b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004529062000d7f565b60405180910390fd5b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620004af6200025360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004d56200059e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200052e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005259062000d7f565b60405180910390fd5b8060118190555050565b60005b8181101562000599576200055b6007620005c860201b620026d31760201c565b6200058383620005776007620005de60201b620026e91760201c565b620005ec60201b60201c565b8080620005909062000f39565b9150506200053b565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001816000016000828254019250508190555050565b600081600001549050919050565b6200060e8282604051806020016040528060008152506200061260201b60201c565b5050565b6200062483836200068060201b60201c565b6200063960008484846200087a60201b60201c565b6200067b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006729062000d19565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ea9062000d5d565b60405180910390fd5b620007048162000a3460201b60201c565b1562000747576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073e9062000d3b565b60405180910390fd5b6200075b6000838362000aa060201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007ad919062000dce565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620008766000838362000aa560201b60201c565b5050565b6000620008a88473ffffffffffffffffffffffffffffffffffffffff1662000aaa60201b620026f71760201c565b1562000a27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620008da6200025360201b60201c565b8786866040518563ffffffff1660e01b8152600401620008fe949392919062000cc5565b602060405180830381600087803b1580156200091957600080fd5b505af19250505080156200094d57506040513d601f19601f820116820180604052508101906200094a919062000b94565b60015b620009d6573d806000811462000980576040519150601f19603f3d011682016040523d82523d6000602084013e62000985565b606091505b50600081511415620009ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c59062000d19565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000a2c565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805462000adb9062000f03565b90600052602060002090601f01602090048101928262000aff576000855562000b4b565b82601f1062000b1a57805160ff191683800117855562000b4b565b8280016001018555821562000b4b579182015b8281111562000b4a57825182559160200191906001019062000b2d565b5b50905062000b5a919062000b5e565b5090565b5b8082111562000b7957600081600090555060010162000b5f565b5090565b60008151905062000b8e81620010f4565b92915050565b60006020828403121562000bad5762000bac62001014565b5b600062000bbd8482850162000b7d565b91505092915050565b62000bd18162000e63565b82525050565b600062000be48262000da1565b62000bf0818562000dac565b935062000c0281856020860162000ecd565b62000c0d8162001019565b840191505092915050565b600062000c2760328362000dbd565b915062000c34826200102a565b604082019050919050565b600062000c4e601c8362000dbd565b915062000c5b8262001079565b602082019050919050565b600062000c7560208362000dbd565b915062000c8282620010a2565b602082019050919050565b600062000c9c60208362000dbd565b915062000ca982620010cb565b602082019050919050565b62000cbf8162000ec3565b82525050565b600060808201905062000cdc600083018762000bc6565b62000ceb602083018662000bc6565b62000cfa604083018562000cb4565b818103606083015262000d0e818462000bd7565b905095945050505050565b6000602082019050818103600083015262000d348162000c18565b9050919050565b6000602082019050818103600083015262000d568162000c3f565b9050919050565b6000602082019050818103600083015262000d788162000c66565b9050919050565b6000602082019050818103600083015262000d9a8162000c8d565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000ddb8262000ec3565b915062000de88362000ec3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e205762000e1f62000f87565b5b828201905092915050565b600062000e388262000ec3565b915062000e458362000ec3565b92508262000e585762000e5762000fb6565b5b828204905092915050565b600062000e708262000ea3565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000eed57808201518184015260208101905062000ed0565b8381111562000efd576000848401525b50505050565b6000600282049050600182168062000f1c57607f821691505b6020821081141562000f335762000f3262000fe5565b5b50919050565b600062000f468262000ec3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000f7c5762000f7b62000f87565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620010ff8162000e77565b81146200110b57600080fd5b50565b615183806200111e6000396000f3fe60806040526004361061028c5760003560e01c80636352211e1161015a578063a45ba8e7116100c1578063d5abeb011161007a578063d5abeb01146109b8578063dde44b89146109e3578063e0a8085314610a0c578063e985e9c514610a35578063efbd73f414610a72578063f2fde38b14610a9b57610293565b8063a45ba8e7146108a8578063a78bfec8146108d3578063b071401b146108fe578063b88d4fde14610927578063bb115bc814610950578063c87b56dd1461097b57610293565b806388d15d501161011357806388d15d50146107c65780638da5cb5b146107e257806394354fd01461080d57806395d89b4114610838578063a0712d6814610863578063a22cb4651461087f57610293565b80636352211e146106a457806368963df0146106e15780636917f0ce1461070c57806370a0823114610749578063715018a6146107865780637ec4a6591461079d57610293565b806327333656116101fe57806344a0d68a116101b757806344a0d68a146105a65780634fdd43cb146105cf57806351830227146105f85780635503a0e8146106235780635c975abb1461064e57806362b99ad41461067957610293565b8063273336561461049a57806329ee566c146104c35780632e1a7d4d146104ee5780634209a2e11461051757806342842e0e14610540578063438b63001461056957610293565b806313faede61161025057806313faede6146103a057806316ba10e0146103cb57806316c38b3c146103f457806318160ddd1461041d5780631997d6c31461044857806323b872dd1461047157610293565b806301ffc9a714610295578063065412f2146102d257806306fdde031461030f578063081812fc1461033a578063095ea7b31461037757610293565b3661029357005b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613b39565b610ac4565b6040516102c99190614275565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190613859565b610ba6565b6040516103069190614275565b60405180910390f35b34801561031b57600080fd5b50610324610bc6565b60405161033191906142ab565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613bdc565b610c58565b60405161036e91906141ec565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613a09565b610cdd565b005b3480156103ac57600080fd5b506103b5610df5565b6040516103c291906145ad565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613b93565b610dfb565b005b34801561040057600080fd5b5061041b60048036038101906104169190613adf565b610e91565b005b34801561042957600080fd5b50610432610f2a565b60405161043f91906145ad565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190613859565b610f3b565b005b34801561047d57600080fd5b50610498600480360381019061049391906138f3565b610ffb565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190613bdc565b61105b565b005b3480156104cf57600080fd5b506104d86110e1565b6040516104e591906145ad565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613bdc565b6110e7565b005b34801561052357600080fd5b5061053e60048036038101906105399190613bdc565b6111e4565b005b34801561054c57600080fd5b50610567600480360381019061056291906138f3565b61126a565b005b34801561057557600080fd5b50610590600480360381019061058b9190613859565b61128a565b60405161059d9190614253565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190613bdc565b611395565b005b3480156105db57600080fd5b506105f660048036038101906105f19190613b93565b61141b565b005b34801561060457600080fd5b5061060d6114b1565b60405161061a9190614275565b60405180910390f35b34801561062f57600080fd5b506106386114c4565b60405161064591906142ab565b60405180910390f35b34801561065a57600080fd5b50610663611552565b6040516106709190614275565b60405180910390f35b34801561068557600080fd5b5061068e611565565b60405161069b91906142ab565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613bdc565b6115f3565b6040516106d891906141ec565b60405180910390f35b3480156106ed57600080fd5b506106f66116a5565b6040516107039190614290565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190613a96565b6116ab565b6040516107409190614275565b60405180910390f35b34801561075557600080fd5b50610770600480360381019061076b9190613859565b6116fe565b60405161077d91906145ad565b60405180910390f35b34801561079257600080fd5b5061079b6117b6565b005b3480156107a957600080fd5b506107c460048036038101906107bf9190613b93565b61183e565b005b6107e060048036038101906107db9190613a49565b6118d4565b005b3480156107ee57600080fd5b506107f7611b96565b60405161080491906141ec565b60405180910390f35b34801561081957600080fd5b50610822611bc0565b60405161082f91906145ad565b60405180910390f35b34801561084457600080fd5b5061084d611bc6565b60405161085a91906142ab565b60405180910390f35b61087d60048036038101906108789190613bdc565b611c58565b005b34801561088b57600080fd5b506108a660048036038101906108a191906139c9565b611fa0565b005b3480156108b457600080fd5b506108bd611fb6565b6040516108ca91906142ab565b60405180910390f35b3480156108df57600080fd5b506108e8612044565b6040516108f591906141ec565b60405180910390f35b34801561090a57600080fd5b5061092560048036038101906109209190613bdc565b61206a565b005b34801561093357600080fd5b5061094e60048036038101906109499190613946565b6120f0565b005b34801561095c57600080fd5b50610965612152565b60405161097291906145ad565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d9190613bdc565b612158565b6040516109af91906142ab565b60405180910390f35b3480156109c457600080fd5b506109cd6122b1565b6040516109da91906145ad565b60405180910390f35b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613b0c565b6122b7565b005b348015610a1857600080fd5b50610a336004803603810190610a2e9190613adf565b61233d565b005b348015610a4157600080fd5b50610a5c6004803603810190610a5791906138b3565b6123d6565b604051610a699190614275565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190613c09565b61246a565b005b348015610aa757600080fd5b50610ac26004803603810190610abd9190613859565b6125db565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b9f5750610b9e8261271a565b5b9050919050565b60126020528060005260406000206000915054906101000a900460ff1681565b606060008054610bd5906148ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610c01906148ec565b8015610c4e5780601f10610c2357610100808354040283529160200191610c4e565b820191906000526020600020905b815481529060010190602001808311610c3157829003601f168201915b5050505050905090565b6000610c6382612784565b610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c999061448d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ce8826115f3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061452d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d786127f0565b73ffffffffffffffffffffffffffffffffffffffff161480610da75750610da681610da16127f0565b6123d6565b5b610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd906143cd565b60405180910390fd5b610df083836127f8565b505050565b600b5481565b610e036127f0565b73ffffffffffffffffffffffffffffffffffffffff16610e21611b96565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e906144ad565b60405180910390fd5b8060099080519060200190610e8d92919061354f565b5050565b610e996127f0565b73ffffffffffffffffffffffffffffffffffffffff16610eb7611b96565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906144ad565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610f3660076126e9565b905090565b610f436127f0565b73ffffffffffffffffffffffffffffffffffffffff16610f61611b96565b73ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae906144ad565b60405180910390fd5b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61100c6110066127f0565b826128b1565b61104b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110429061456d565b60405180910390fd5b61105683838361298f565b505050565b6110636127f0565b73ffffffffffffffffffffffffffffffffffffffff16611081611b96565b73ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce906144ad565b60405180910390fd5b80600f8190555050565b600e5481565b6110ef6127f0565b73ffffffffffffffffffffffffffffffffffffffff1661110d611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a906144ad565b60405180910390fd5b600061116d611b96565b73ffffffffffffffffffffffffffffffffffffffff1682604051611190906141d7565b60006040518083038185875af1925050503d80600081146111cd576040519150601f19603f3d011682016040523d82523d6000602084013e6111d2565b606091505b50509050806111e057600080fd5b5050565b6111ec6127f0565b73ffffffffffffffffffffffffffffffffffffffff1661120a611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611257906144ad565b60405180910390fd5b80600e8190555050565b611285838383604051806020016040528060008152506120f0565b505050565b60606000611297836116fe565b905060008167ffffffffffffffff8111156112b5576112b4614aa9565b5b6040519080825280602002602001820160405280156112e35781602001602082028036833780820191505090505b50905060006001905060005b83811080156113005750600c548211155b15611389576000611310836115f3565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611375578284838151811061135a57611359614a7a565b5b60200260200101818152505081806113719061494f565b9250505b82806113809061494f565b935050506112ef565b82945050505050919050565b61139d6127f0565b73ffffffffffffffffffffffffffffffffffffffff166113bb611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906144ad565b60405180910390fd5b80600b8190555050565b6114236127f0565b73ffffffffffffffffffffffffffffffffffffffff16611441611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906144ad565b60405180910390fd5b80600a90805190602001906114ad92919061354f565b5050565b601060019054906101000a900460ff1681565b600980546114d1906148ec565b80601f01602080910402602001604051908101604052809291908181526020018280546114fd906148ec565b801561154a5780601f1061151f5761010080835404028352916020019161154a565b820191906000526020600020905b81548152906001019060200180831161152d57829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b60088054611572906148ec565b80601f016020809104026020016040519081016040528092919081815260200182805461159e906148ec565b80156115eb5780601f106115c0576101008083540402835291602001916115eb565b820191906000526020600020905b8154815290600101906020018083116115ce57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116939061440d565b60405180910390fd5b80915050919050565b60115481565b600080336040516020016116bf919061418b565b6040516020818303038152906040528051906020012090506116e48360115483612bf6565b156116f35760019150506116f9565b60009150505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611766906143ed565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117be6127f0565b73ffffffffffffffffffffffffffffffffffffffff166117dc611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611829906144ad565b60405180910390fd5b61183c6000612c0d565b565b6118466127f0565b73ffffffffffffffffffffffffffffffffffffffff16611864611b96565b73ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906144ad565b60405180910390fd5b80600890805190602001906118d092919061354f565b5050565b60016118de611b96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611962576000811180156119225750600d548111155b611961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119589061434d565b60405180910390fd5b5b600c548161197060076126e9565b61197a9190614717565b11156119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b29061454d565b60405180910390fd5b6000339050601060009054906101000a900460ff1615611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a07906144cd565b60405180910390fd5b611a5a848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506116ab565b611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a909061446d565b60405180910390fd5b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b249061442d565b60405180910390fd5b611b38816001612cd3565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b606060018054611bd5906148ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611c01906148ec565b8015611c4e5780601f10611c2357610100808354040283529160200191611c4e565b820191906000526020600020905b815481529060010190602001808311611c3157829003601f168201915b5050505050905090565b80611c61611b96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ce557600081118015611ca55750600d548111155b611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb9061434d565b60405180910390fd5b5b600c5481611cf360076126e9565b611cfd9190614717565b1115611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d359061454d565b60405180910390fd5b601060009054906101000a900460ff1615611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d85906144cd565b60405180910390fd5b81600b54611d9c919061479e565b341015611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd59061458d565b60405180910390fd5b6000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611e113385612cd3565b610dad600f541015611f9a5760005b84811015611f98578273ffffffffffffffffffffffffffffffffffffffff16636352211e600f546040518263ffffffff1660e01b8152600401611e6391906145ad565b60206040518083038186803b158015611e7b57600080fd5b505afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190613886565b915060008290506000808273ffffffffffffffffffffffffffffffffffffffff16600e54604051611ee3906141d7565b60006040518083038185875af1925050503d8060008114611f20576040519150601f19603f3d011682016040523d82523d6000602084013e611f25565b606091505b509150915081611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f61906144ed565b60405180910390fd5b600f6000815480929190611f7d9061494f565b91905055505050508080611f909061494f565b915050611e20565b505b50505050565b611fb2611fab6127f0565b8383612d13565b5050565b600a8054611fc3906148ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611fef906148ec565b801561203c5780601f106120115761010080835404028352916020019161203c565b820191906000526020600020905b81548152906001019060200180831161201f57829003601f168201915b505050505081565b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120726127f0565b73ffffffffffffffffffffffffffffffffffffffff16612090611b96565b73ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd906144ad565b60405180910390fd5b80600d8190555050565b6121016120fb6127f0565b836128b1565b612140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121379061456d565b60405180910390fd5b61214c84848484612e80565b50505050565b600f5481565b606061216382612784565b6121a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121999061450d565b60405180910390fd5b60001515601060019054906101000a900460ff161515141561225057600a80546121cb906148ec565b80601f01602080910402602001604051908101604052809291908181526020018280546121f7906148ec565b80156122445780601f1061221957610100808354040283529160200191612244565b820191906000526020600020905b81548152906001019060200180831161222757829003601f168201915b505050505090506122ac565b600061225a612edc565b9050600081511161227a57604051806020016040528060008152506122a8565b8061228484612f6e565b6009604051602001612298939291906141a6565b6040516020818303038152906040525b9150505b919050565b600c5481565b6122bf6127f0565b73ffffffffffffffffffffffffffffffffffffffff166122dd611b96565b73ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a906144ad565b60405180910390fd5b8060118190555050565b6123456127f0565b73ffffffffffffffffffffffffffffffffffffffff16612363611b96565b73ffffffffffffffffffffffffffffffffffffffff16146123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b0906144ad565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81612473611b96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124f7576000811180156124b75750600d548111155b6124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed9061434d565b60405180910390fd5b5b600c548161250560076126e9565b61250f9190614717565b1115612550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125479061454d565b60405180910390fd5b6125586127f0565b73ffffffffffffffffffffffffffffffffffffffff16612576611b96565b73ffffffffffffffffffffffffffffffffffffffff16146125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c3906144ad565b60405180910390fd5b6125d68284612cd3565b505050565b6125e36127f0565b73ffffffffffffffffffffffffffffffffffffffff16612601611b96565b73ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e906144ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be906142ed565b60405180910390fd5b6126d081612c0d565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661286b836115f3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006128bc82612784565b6128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f2906143ad565b60405180910390fd5b6000612906836115f3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061297557508373ffffffffffffffffffffffffffffffffffffffff1661295d84610c58565b73ffffffffffffffffffffffffffffffffffffffff16145b80612986575061298581856123d6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129af826115f3565b73ffffffffffffffffffffffffffffffffffffffff1614612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc9061430d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6c9061436d565b60405180910390fd5b612a808383836130cf565b612a8b6000826127f8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612adb91906147f8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b329190614717565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bf18383836130d4565b505050565b600082612c0385846130d9565b1490509392505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612d0e57612ce860076126d3565b612cfb83612cf660076126e9565b61314e565b8080612d069061494f565b915050612cd6565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d799061438d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612e739190614275565b60405180910390a3505050565b612e8b84848461298f565b612e978484848461316c565b612ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecd906142cd565b60405180910390fd5b50505050565b606060088054612eeb906148ec565b80601f0160208091040260200160405190810160405280929190818152602001828054612f17906148ec565b8015612f645780601f10612f3957610100808354040283529160200191612f64565b820191906000526020600020905b815481529060010190602001808311612f4757829003601f168201915b5050505050905090565b60606000821415612fb6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130ca565b600082905060005b60008214612fe8578080612fd19061494f565b915050600a82612fe1919061476d565b9150612fbe565b60008167ffffffffffffffff81111561300457613003614aa9565b5b6040519080825280601f01601f1916602001820160405280156130365781602001600182028036833780820191505090505b5090505b600085146130c35760018261304f91906147f8565b9150600a8561305e91906149bc565b603061306a9190614717565b60f81b8183815181106130805761307f614a7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130bc919061476d565b945061303a565b8093505050505b919050565b505050565b505050565b60008082905060005b8451811015613143576000858281518110613100576130ff614a7a565b5b602002602001015190508083116131225761311b8382613303565b925061312f565b61312c8184613303565b92505b50808061313b9061494f565b9150506130e2565b508091505092915050565b61316882826040518060200160405280600081525061331a565b5050565b600061318d8473ffffffffffffffffffffffffffffffffffffffff166126f7565b156132f6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131b66127f0565b8786866040518563ffffffff1660e01b81526004016131d89493929190614207565b602060405180830381600087803b1580156131f257600080fd5b505af192505050801561322357506040513d601f19601f820116820180604052508101906132209190613b66565b60015b6132a6573d8060008114613253576040519150601f19603f3d011682016040523d82523d6000602084013e613258565b606091505b5060008151141561329e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613295906142cd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132fb565b600190505b949350505050565b600082600052816020526040600020905092915050565b6133248383613375565b613331600084848461316c565b613370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613367906142cd565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc9061444d565b60405180910390fd5b6133ee81612784565b1561342e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134259061432d565b60405180910390fd5b61343a600083836130cf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461348a9190614717565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461354b600083836130d4565b5050565b82805461355b906148ec565b90600052602060002090601f01602090048101928261357d57600085556135c4565b82601f1061359657805160ff19168380011785556135c4565b828001600101855582156135c4579182015b828111156135c35782518255916020019190600101906135a8565b5b5090506135d191906135d5565b5090565b5b808211156135ee5760008160009055506001016135d6565b5090565b6000613605613600846145ed565b6145c8565b9050808382526020820190508285602086028201111561362857613627614ae2565b5b60005b85811015613658578161363e88826137a9565b84526020840193506020830192505060018101905061362b565b5050509392505050565b600061367561367084614619565b6145c8565b90508281526020810184848401111561369157613690614ae7565b5b61369c8482856148aa565b509392505050565b60006136b76136b28461464a565b6145c8565b9050828152602081018484840111156136d3576136d2614ae7565b5b6136de8482856148aa565b509392505050565b6000813590506136f5816150da565b92915050565b60008151905061370a816150da565b92915050565b60008083601f84011261372657613725614add565b5b8235905067ffffffffffffffff81111561374357613742614ad8565b5b60208301915083602082028301111561375f5761375e614ae2565b5b9250929050565b600082601f83011261377b5761377a614add565b5b813561378b8482602086016135f2565b91505092915050565b6000813590506137a3816150f1565b92915050565b6000813590506137b881615108565b92915050565b6000813590506137cd8161511f565b92915050565b6000815190506137e28161511f565b92915050565b600082601f8301126137fd576137fc614add565b5b813561380d848260208601613662565b91505092915050565b600082601f83011261382b5761382a614add565b5b813561383b8482602086016136a4565b91505092915050565b60008135905061385381615136565b92915050565b60006020828403121561386f5761386e614af1565b5b600061387d848285016136e6565b91505092915050565b60006020828403121561389c5761389b614af1565b5b60006138aa848285016136fb565b91505092915050565b600080604083850312156138ca576138c9614af1565b5b60006138d8858286016136e6565b92505060206138e9858286016136e6565b9150509250929050565b60008060006060848603121561390c5761390b614af1565b5b600061391a868287016136e6565b935050602061392b868287016136e6565b925050604061393c86828701613844565b9150509250925092565b600080600080608085870312156139605761395f614af1565b5b600061396e878288016136e6565b945050602061397f878288016136e6565b935050604061399087828801613844565b925050606085013567ffffffffffffffff8111156139b1576139b0614aec565b5b6139bd878288016137e8565b91505092959194509250565b600080604083850312156139e0576139df614af1565b5b60006139ee858286016136e6565b92505060206139ff85828601613794565b9150509250929050565b60008060408385031215613a2057613a1f614af1565b5b6000613a2e858286016136e6565b9250506020613a3f85828601613844565b9150509250929050565b60008060208385031215613a6057613a5f614af1565b5b600083013567ffffffffffffffff811115613a7e57613a7d614aec565b5b613a8a85828601613710565b92509250509250929050565b600060208284031215613aac57613aab614af1565b5b600082013567ffffffffffffffff811115613aca57613ac9614aec565b5b613ad684828501613766565b91505092915050565b600060208284031215613af557613af4614af1565b5b6000613b0384828501613794565b91505092915050565b600060208284031215613b2257613b21614af1565b5b6000613b30848285016137a9565b91505092915050565b600060208284031215613b4f57613b4e614af1565b5b6000613b5d848285016137be565b91505092915050565b600060208284031215613b7c57613b7b614af1565b5b6000613b8a848285016137d3565b91505092915050565b600060208284031215613ba957613ba8614af1565b5b600082013567ffffffffffffffff811115613bc757613bc6614aec565b5b613bd384828501613816565b91505092915050565b600060208284031215613bf257613bf1614af1565b5b6000613c0084828501613844565b91505092915050565b60008060408385031215613c2057613c1f614af1565b5b6000613c2e85828601613844565b9250506020613c3f858286016136e6565b9150509250929050565b6000613c55838361416d565b60208301905092915050565b613c6a8161482c565b82525050565b613c81613c7c8261482c565b614998565b82525050565b6000613c92826146a0565b613c9c81856146ce565b9350613ca78361467b565b8060005b83811015613cd8578151613cbf8882613c49565b9750613cca836146c1565b925050600181019050613cab565b5085935050505092915050565b613cee8161483e565b82525050565b613cfd8161484a565b82525050565b6000613d0e826146ab565b613d1881856146df565b9350613d288185602086016148b9565b613d3181614af6565b840191505092915050565b6000613d47826146b6565b613d5181856146fb565b9350613d618185602086016148b9565b613d6a81614af6565b840191505092915050565b6000613d80826146b6565b613d8a818561470c565b9350613d9a8185602086016148b9565b80840191505092915050565b60008154613db3816148ec565b613dbd818661470c565b94506001821660008114613dd85760018114613de957613e1c565b60ff19831686528186019350613e1c565b613df28561468b565b60005b83811015613e1457815481890152600182019150602081019050613df5565b838801955050505b50505092915050565b6000613e326032836146fb565b9150613e3d82614b14565b604082019050919050565b6000613e556026836146fb565b9150613e6082614b63565b604082019050919050565b6000613e786025836146fb565b9150613e8382614bb2565b604082019050919050565b6000613e9b601c836146fb565b9150613ea682614c01565b602082019050919050565b6000613ebe6014836146fb565b9150613ec982614c2a565b602082019050919050565b6000613ee16024836146fb565b9150613eec82614c53565b604082019050919050565b6000613f046019836146fb565b9150613f0f82614ca2565b602082019050919050565b6000613f27602c836146fb565b9150613f3282614ccb565b604082019050919050565b6000613f4a6038836146fb565b9150613f5582614d1a565b604082019050919050565b6000613f6d602a836146fb565b9150613f7882614d69565b604082019050919050565b6000613f906029836146fb565b9150613f9b82614db8565b604082019050919050565b6000613fb36024836146fb565b9150613fbe82614e07565b604082019050919050565b6000613fd66020836146fb565b9150613fe182614e56565b602082019050919050565b6000613ff96028836146fb565b915061400482614e7f565b604082019050919050565b600061401c602c836146fb565b915061402782614ece565b604082019050919050565b600061403f6020836146fb565b915061404a82614f1d565b602082019050919050565b60006140626017836146fb565b915061406d82614f46565b602082019050919050565b6000614085600b836146fb565b915061409082614f6f565b602082019050919050565b60006140a8602f836146fb565b91506140b382614f98565b604082019050919050565b60006140cb6021836146fb565b91506140d682614fe7565b604082019050919050565b60006140ee6000836146f0565b91506140f982615036565b600082019050919050565b60006141116014836146fb565b915061411c82615039565b602082019050919050565b60006141346031836146fb565b915061413f82615062565b604082019050919050565b60006141576013836146fb565b9150614162826150b1565b602082019050919050565b614176816148a0565b82525050565b614185816148a0565b82525050565b60006141978284613c70565b60148201915081905092915050565b60006141b28286613d75565b91506141be8285613d75565b91506141ca8284613da6565b9150819050949350505050565b60006141e2826140e1565b9150819050919050565b60006020820190506142016000830184613c61565b92915050565b600060808201905061421c6000830187613c61565b6142296020830186613c61565b614236604083018561417c565b81810360608301526142488184613d03565b905095945050505050565b6000602082019050818103600083015261426d8184613c87565b905092915050565b600060208201905061428a6000830184613ce5565b92915050565b60006020820190506142a56000830184613cf4565b92915050565b600060208201905081810360008301526142c58184613d3c565b905092915050565b600060208201905081810360008301526142e681613e25565b9050919050565b6000602082019050818103600083015261430681613e48565b9050919050565b6000602082019050818103600083015261432681613e6b565b9050919050565b6000602082019050818103600083015261434681613e8e565b9050919050565b6000602082019050818103600083015261436681613eb1565b9050919050565b6000602082019050818103600083015261438681613ed4565b9050919050565b600060208201905081810360008301526143a681613ef7565b9050919050565b600060208201905081810360008301526143c681613f1a565b9050919050565b600060208201905081810360008301526143e681613f3d565b9050919050565b6000602082019050818103600083015261440681613f60565b9050919050565b6000602082019050818103600083015261442681613f83565b9050919050565b6000602082019050818103600083015261444681613fa6565b9050919050565b6000602082019050818103600083015261446681613fc9565b9050919050565b6000602082019050818103600083015261448681613fec565b9050919050565b600060208201905081810360008301526144a68161400f565b9050919050565b600060208201905081810360008301526144c681614032565b9050919050565b600060208201905081810360008301526144e681614055565b9050919050565b6000602082019050818103600083015261450681614078565b9050919050565b600060208201905081810360008301526145268161409b565b9050919050565b60006020820190508181036000830152614546816140be565b9050919050565b6000602082019050818103600083015261456681614104565b9050919050565b6000602082019050818103600083015261458681614127565b9050919050565b600060208201905081810360008301526145a68161414a565b9050919050565b60006020820190506145c2600083018461417c565b92915050565b60006145d26145e3565b90506145de828261491e565b919050565b6000604051905090565b600067ffffffffffffffff82111561460857614607614aa9565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561463457614633614aa9565b5b61463d82614af6565b9050602081019050919050565b600067ffffffffffffffff82111561466557614664614aa9565b5b61466e82614af6565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614722826148a0565b915061472d836148a0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614762576147616149ed565b5b828201905092915050565b6000614778826148a0565b9150614783836148a0565b92508261479357614792614a1c565b5b828204905092915050565b60006147a9826148a0565b91506147b4836148a0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147ed576147ec6149ed565b5b828202905092915050565b6000614803826148a0565b915061480e836148a0565b925082821015614821576148206149ed565b5b828203905092915050565b600061483782614880565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148d75780820151818401526020810190506148bc565b838111156148e6576000848401525b50505050565b6000600282049050600182168061490457607f821691505b6020821081141561491857614917614a4b565b5b50919050565b61492782614af6565b810181811067ffffffffffffffff8211171561494657614945614aa9565b5b80604052505050565b600061495a826148a0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561498d5761498c6149ed565b5b600182019050919050565b60006149a3826149aa565b9050919050565b60006149b582614b07565b9050919050565b60006149c7826148a0565b91506149d2836148a0565b9250826149e2576149e1614a1c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420616c7265616479207265636569766564206120667265652060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4163636f756e74206973206e6f742077686974656c697374656420666f72206660008201527f726565206d696e74000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f63616c6c206661696c6564000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6150e38161482c565b81146150ee57600080fd5b50565b6150fa8161483e565b811461510557600080fd5b50565b6151118161484a565b811461511c57600080fd5b50565b61512881614854565b811461513357600080fd5b50565b61513f816148a0565b811461514a57600080fd5b5056fea264697066735822122041cb45b1f092b23083911609591287d722d241c04df1bfe9a347666c3bf70f5e64736f6c6343000807003368747470733a2f2f65766f6c7574696f6e7a2e6d7970696e6174612e636c6f75642f697066732f516d61353334665832556f34444a3344665170574d6f6d72344b47427952657a677057727874617a504c7938367268747470733a2f2f65766f6c7574696f6e7a6e66742e636f6d2f436f6c6f727a2f

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80636352211e1161015a578063a45ba8e7116100c1578063d5abeb011161007a578063d5abeb01146109b8578063dde44b89146109e3578063e0a8085314610a0c578063e985e9c514610a35578063efbd73f414610a72578063f2fde38b14610a9b57610293565b8063a45ba8e7146108a8578063a78bfec8146108d3578063b071401b146108fe578063b88d4fde14610927578063bb115bc814610950578063c87b56dd1461097b57610293565b806388d15d501161011357806388d15d50146107c65780638da5cb5b146107e257806394354fd01461080d57806395d89b4114610838578063a0712d6814610863578063a22cb4651461087f57610293565b80636352211e146106a457806368963df0146106e15780636917f0ce1461070c57806370a0823114610749578063715018a6146107865780637ec4a6591461079d57610293565b806327333656116101fe57806344a0d68a116101b757806344a0d68a146105a65780634fdd43cb146105cf57806351830227146105f85780635503a0e8146106235780635c975abb1461064e57806362b99ad41461067957610293565b8063273336561461049a57806329ee566c146104c35780632e1a7d4d146104ee5780634209a2e11461051757806342842e0e14610540578063438b63001461056957610293565b806313faede61161025057806313faede6146103a057806316ba10e0146103cb57806316c38b3c146103f457806318160ddd1461041d5780631997d6c31461044857806323b872dd1461047157610293565b806301ffc9a714610295578063065412f2146102d257806306fdde031461030f578063081812fc1461033a578063095ea7b31461037757610293565b3661029357005b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613b39565b610ac4565b6040516102c99190614275565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190613859565b610ba6565b6040516103069190614275565b60405180910390f35b34801561031b57600080fd5b50610324610bc6565b60405161033191906142ab565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613bdc565b610c58565b60405161036e91906141ec565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190613a09565b610cdd565b005b3480156103ac57600080fd5b506103b5610df5565b6040516103c291906145ad565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190613b93565b610dfb565b005b34801561040057600080fd5b5061041b60048036038101906104169190613adf565b610e91565b005b34801561042957600080fd5b50610432610f2a565b60405161043f91906145ad565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190613859565b610f3b565b005b34801561047d57600080fd5b50610498600480360381019061049391906138f3565b610ffb565b005b3480156104a657600080fd5b506104c160048036038101906104bc9190613bdc565b61105b565b005b3480156104cf57600080fd5b506104d86110e1565b6040516104e591906145ad565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613bdc565b6110e7565b005b34801561052357600080fd5b5061053e60048036038101906105399190613bdc565b6111e4565b005b34801561054c57600080fd5b50610567600480360381019061056291906138f3565b61126a565b005b34801561057557600080fd5b50610590600480360381019061058b9190613859565b61128a565b60405161059d9190614253565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190613bdc565b611395565b005b3480156105db57600080fd5b506105f660048036038101906105f19190613b93565b61141b565b005b34801561060457600080fd5b5061060d6114b1565b60405161061a9190614275565b60405180910390f35b34801561062f57600080fd5b506106386114c4565b60405161064591906142ab565b60405180910390f35b34801561065a57600080fd5b50610663611552565b6040516106709190614275565b60405180910390f35b34801561068557600080fd5b5061068e611565565b60405161069b91906142ab565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613bdc565b6115f3565b6040516106d891906141ec565b60405180910390f35b3480156106ed57600080fd5b506106f66116a5565b6040516107039190614290565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190613a96565b6116ab565b6040516107409190614275565b60405180910390f35b34801561075557600080fd5b50610770600480360381019061076b9190613859565b6116fe565b60405161077d91906145ad565b60405180910390f35b34801561079257600080fd5b5061079b6117b6565b005b3480156107a957600080fd5b506107c460048036038101906107bf9190613b93565b61183e565b005b6107e060048036038101906107db9190613a49565b6118d4565b005b3480156107ee57600080fd5b506107f7611b96565b60405161080491906141ec565b60405180910390f35b34801561081957600080fd5b50610822611bc0565b60405161082f91906145ad565b60405180910390f35b34801561084457600080fd5b5061084d611bc6565b60405161085a91906142ab565b60405180910390f35b61087d60048036038101906108789190613bdc565b611c58565b005b34801561088b57600080fd5b506108a660048036038101906108a191906139c9565b611fa0565b005b3480156108b457600080fd5b506108bd611fb6565b6040516108ca91906142ab565b60405180910390f35b3480156108df57600080fd5b506108e8612044565b6040516108f591906141ec565b60405180910390f35b34801561090a57600080fd5b5061092560048036038101906109209190613bdc565b61206a565b005b34801561093357600080fd5b5061094e60048036038101906109499190613946565b6120f0565b005b34801561095c57600080fd5b50610965612152565b60405161097291906145ad565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d9190613bdc565b612158565b6040516109af91906142ab565b60405180910390f35b3480156109c457600080fd5b506109cd6122b1565b6040516109da91906145ad565b60405180910390f35b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613b0c565b6122b7565b005b348015610a1857600080fd5b50610a336004803603810190610a2e9190613adf565b61233d565b005b348015610a4157600080fd5b50610a5c6004803603810190610a5791906138b3565b6123d6565b604051610a699190614275565b60405180910390f35b348015610a7e57600080fd5b50610a996004803603810190610a949190613c09565b61246a565b005b348015610aa757600080fd5b50610ac26004803603810190610abd9190613859565b6125db565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b9f5750610b9e8261271a565b5b9050919050565b60126020528060005260406000206000915054906101000a900460ff1681565b606060008054610bd5906148ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610c01906148ec565b8015610c4e5780601f10610c2357610100808354040283529160200191610c4e565b820191906000526020600020905b815481529060010190602001808311610c3157829003601f168201915b5050505050905090565b6000610c6382612784565b610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c999061448d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ce8826115f3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d509061452d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d786127f0565b73ffffffffffffffffffffffffffffffffffffffff161480610da75750610da681610da16127f0565b6123d6565b5b610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd906143cd565b60405180910390fd5b610df083836127f8565b505050565b600b5481565b610e036127f0565b73ffffffffffffffffffffffffffffffffffffffff16610e21611b96565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e906144ad565b60405180910390fd5b8060099080519060200190610e8d92919061354f565b5050565b610e996127f0565b73ffffffffffffffffffffffffffffffffffffffff16610eb7611b96565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906144ad565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610f3660076126e9565b905090565b610f436127f0565b73ffffffffffffffffffffffffffffffffffffffff16610f61611b96565b73ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae906144ad565b60405180910390fd5b80601060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61100c6110066127f0565b826128b1565b61104b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110429061456d565b60405180910390fd5b61105683838361298f565b505050565b6110636127f0565b73ffffffffffffffffffffffffffffffffffffffff16611081611b96565b73ffffffffffffffffffffffffffffffffffffffff16146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce906144ad565b60405180910390fd5b80600f8190555050565b600e5481565b6110ef6127f0565b73ffffffffffffffffffffffffffffffffffffffff1661110d611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a906144ad565b60405180910390fd5b600061116d611b96565b73ffffffffffffffffffffffffffffffffffffffff1682604051611190906141d7565b60006040518083038185875af1925050503d80600081146111cd576040519150601f19603f3d011682016040523d82523d6000602084013e6111d2565b606091505b50509050806111e057600080fd5b5050565b6111ec6127f0565b73ffffffffffffffffffffffffffffffffffffffff1661120a611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611257906144ad565b60405180910390fd5b80600e8190555050565b611285838383604051806020016040528060008152506120f0565b505050565b60606000611297836116fe565b905060008167ffffffffffffffff8111156112b5576112b4614aa9565b5b6040519080825280602002602001820160405280156112e35781602001602082028036833780820191505090505b50905060006001905060005b83811080156113005750600c548211155b15611389576000611310836115f3565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611375578284838151811061135a57611359614a7a565b5b60200260200101818152505081806113719061494f565b9250505b82806113809061494f565b935050506112ef565b82945050505050919050565b61139d6127f0565b73ffffffffffffffffffffffffffffffffffffffff166113bb611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906144ad565b60405180910390fd5b80600b8190555050565b6114236127f0565b73ffffffffffffffffffffffffffffffffffffffff16611441611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906144ad565b60405180910390fd5b80600a90805190602001906114ad92919061354f565b5050565b601060019054906101000a900460ff1681565b600980546114d1906148ec565b80601f01602080910402602001604051908101604052809291908181526020018280546114fd906148ec565b801561154a5780601f1061151f5761010080835404028352916020019161154a565b820191906000526020600020905b81548152906001019060200180831161152d57829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b60088054611572906148ec565b80601f016020809104026020016040519081016040528092919081815260200182805461159e906148ec565b80156115eb5780601f106115c0576101008083540402835291602001916115eb565b820191906000526020600020905b8154815290600101906020018083116115ce57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116939061440d565b60405180910390fd5b80915050919050565b60115481565b600080336040516020016116bf919061418b565b6040516020818303038152906040528051906020012090506116e48360115483612bf6565b156116f35760019150506116f9565b60009150505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611766906143ed565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117be6127f0565b73ffffffffffffffffffffffffffffffffffffffff166117dc611b96565b73ffffffffffffffffffffffffffffffffffffffff1614611832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611829906144ad565b60405180910390fd5b61183c6000612c0d565b565b6118466127f0565b73ffffffffffffffffffffffffffffffffffffffff16611864611b96565b73ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b1906144ad565b60405180910390fd5b80600890805190602001906118d092919061354f565b5050565b60016118de611b96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611962576000811180156119225750600d548111155b611961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119589061434d565b60405180910390fd5b5b600c548161197060076126e9565b61197a9190614717565b11156119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b29061454d565b60405180910390fd5b6000339050601060009054906101000a900460ff1615611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a07906144cd565b60405180910390fd5b611a5a848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506116ab565b611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a909061446d565b60405180910390fd5b60011515601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b249061442d565b60405180910390fd5b611b38816001612cd3565b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b606060018054611bd5906148ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611c01906148ec565b8015611c4e5780601f10611c2357610100808354040283529160200191611c4e565b820191906000526020600020905b815481529060010190602001808311611c3157829003601f168201915b5050505050905090565b80611c61611b96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ce557600081118015611ca55750600d548111155b611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb9061434d565b60405180910390fd5b5b600c5481611cf360076126e9565b611cfd9190614717565b1115611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d359061454d565b60405180910390fd5b601060009054906101000a900460ff1615611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d85906144cd565b60405180910390fd5b81600b54611d9c919061479e565b341015611dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd59061458d565b60405180910390fd5b6000601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611e113385612cd3565b610dad600f541015611f9a5760005b84811015611f98578273ffffffffffffffffffffffffffffffffffffffff16636352211e600f546040518263ffffffff1660e01b8152600401611e6391906145ad565b60206040518083038186803b158015611e7b57600080fd5b505afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190613886565b915060008290506000808273ffffffffffffffffffffffffffffffffffffffff16600e54604051611ee3906141d7565b60006040518083038185875af1925050503d8060008114611f20576040519150601f19603f3d011682016040523d82523d6000602084013e611f25565b606091505b509150915081611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f61906144ed565b60405180910390fd5b600f6000815480929190611f7d9061494f565b91905055505050508080611f909061494f565b915050611e20565b505b50505050565b611fb2611fab6127f0565b8383612d13565b5050565b600a8054611fc3906148ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611fef906148ec565b801561203c5780601f106120115761010080835404028352916020019161203c565b820191906000526020600020905b81548152906001019060200180831161201f57829003601f168201915b505050505081565b601060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120726127f0565b73ffffffffffffffffffffffffffffffffffffffff16612090611b96565b73ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd906144ad565b60405180910390fd5b80600d8190555050565b6121016120fb6127f0565b836128b1565b612140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121379061456d565b60405180910390fd5b61214c84848484612e80565b50505050565b600f5481565b606061216382612784565b6121a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121999061450d565b60405180910390fd5b60001515601060019054906101000a900460ff161515141561225057600a80546121cb906148ec565b80601f01602080910402602001604051908101604052809291908181526020018280546121f7906148ec565b80156122445780601f1061221957610100808354040283529160200191612244565b820191906000526020600020905b81548152906001019060200180831161222757829003601f168201915b505050505090506122ac565b600061225a612edc565b9050600081511161227a57604051806020016040528060008152506122a8565b8061228484612f6e565b6009604051602001612298939291906141a6565b6040516020818303038152906040525b9150505b919050565b600c5481565b6122bf6127f0565b73ffffffffffffffffffffffffffffffffffffffff166122dd611b96565b73ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a906144ad565b60405180910390fd5b8060118190555050565b6123456127f0565b73ffffffffffffffffffffffffffffffffffffffff16612363611b96565b73ffffffffffffffffffffffffffffffffffffffff16146123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b0906144ad565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81612473611b96565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124f7576000811180156124b75750600d548111155b6124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed9061434d565b60405180910390fd5b5b600c548161250560076126e9565b61250f9190614717565b1115612550576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125479061454d565b60405180910390fd5b6125586127f0565b73ffffffffffffffffffffffffffffffffffffffff16612576611b96565b73ffffffffffffffffffffffffffffffffffffffff16146125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c3906144ad565b60405180910390fd5b6125d68284612cd3565b505050565b6125e36127f0565b73ffffffffffffffffffffffffffffffffffffffff16612601611b96565b73ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e906144ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126be906142ed565b60405180910390fd5b6126d081612c0d565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661286b836115f3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006128bc82612784565b6128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f2906143ad565b60405180910390fd5b6000612906836115f3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061297557508373ffffffffffffffffffffffffffffffffffffffff1661295d84610c58565b73ffffffffffffffffffffffffffffffffffffffff16145b80612986575061298581856123d6565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129af826115f3565b73ffffffffffffffffffffffffffffffffffffffff1614612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc9061430d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6c9061436d565b60405180910390fd5b612a808383836130cf565b612a8b6000826127f8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612adb91906147f8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b329190614717565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bf18383836130d4565b505050565b600082612c0385846130d9565b1490509392505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612d0e57612ce860076126d3565b612cfb83612cf660076126e9565b61314e565b8080612d069061494f565b915050612cd6565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d799061438d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612e739190614275565b60405180910390a3505050565b612e8b84848461298f565b612e978484848461316c565b612ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecd906142cd565b60405180910390fd5b50505050565b606060088054612eeb906148ec565b80601f0160208091040260200160405190810160405280929190818152602001828054612f17906148ec565b8015612f645780601f10612f3957610100808354040283529160200191612f64565b820191906000526020600020905b815481529060010190602001808311612f4757829003601f168201915b5050505050905090565b60606000821415612fb6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130ca565b600082905060005b60008214612fe8578080612fd19061494f565b915050600a82612fe1919061476d565b9150612fbe565b60008167ffffffffffffffff81111561300457613003614aa9565b5b6040519080825280601f01601f1916602001820160405280156130365781602001600182028036833780820191505090505b5090505b600085146130c35760018261304f91906147f8565b9150600a8561305e91906149bc565b603061306a9190614717565b60f81b8183815181106130805761307f614a7a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130bc919061476d565b945061303a565b8093505050505b919050565b505050565b505050565b60008082905060005b8451811015613143576000858281518110613100576130ff614a7a565b5b602002602001015190508083116131225761311b8382613303565b925061312f565b61312c8184613303565b92505b50808061313b9061494f565b9150506130e2565b508091505092915050565b61316882826040518060200160405280600081525061331a565b5050565b600061318d8473ffffffffffffffffffffffffffffffffffffffff166126f7565b156132f6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131b66127f0565b8786866040518563ffffffff1660e01b81526004016131d89493929190614207565b602060405180830381600087803b1580156131f257600080fd5b505af192505050801561322357506040513d601f19601f820116820180604052508101906132209190613b66565b60015b6132a6573d8060008114613253576040519150601f19603f3d011682016040523d82523d6000602084013e613258565b606091505b5060008151141561329e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613295906142cd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132fb565b600190505b949350505050565b600082600052816020526040600020905092915050565b6133248383613375565b613331600084848461316c565b613370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613367906142cd565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dc9061444d565b60405180910390fd5b6133ee81612784565b1561342e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134259061432d565b60405180910390fd5b61343a600083836130cf565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461348a9190614717565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461354b600083836130d4565b5050565b82805461355b906148ec565b90600052602060002090601f01602090048101928261357d57600085556135c4565b82601f1061359657805160ff19168380011785556135c4565b828001600101855582156135c4579182015b828111156135c35782518255916020019190600101906135a8565b5b5090506135d191906135d5565b5090565b5b808211156135ee5760008160009055506001016135d6565b5090565b6000613605613600846145ed565b6145c8565b9050808382526020820190508285602086028201111561362857613627614ae2565b5b60005b85811015613658578161363e88826137a9565b84526020840193506020830192505060018101905061362b565b5050509392505050565b600061367561367084614619565b6145c8565b90508281526020810184848401111561369157613690614ae7565b5b61369c8482856148aa565b509392505050565b60006136b76136b28461464a565b6145c8565b9050828152602081018484840111156136d3576136d2614ae7565b5b6136de8482856148aa565b509392505050565b6000813590506136f5816150da565b92915050565b60008151905061370a816150da565b92915050565b60008083601f84011261372657613725614add565b5b8235905067ffffffffffffffff81111561374357613742614ad8565b5b60208301915083602082028301111561375f5761375e614ae2565b5b9250929050565b600082601f83011261377b5761377a614add565b5b813561378b8482602086016135f2565b91505092915050565b6000813590506137a3816150f1565b92915050565b6000813590506137b881615108565b92915050565b6000813590506137cd8161511f565b92915050565b6000815190506137e28161511f565b92915050565b600082601f8301126137fd576137fc614add565b5b813561380d848260208601613662565b91505092915050565b600082601f83011261382b5761382a614add565b5b813561383b8482602086016136a4565b91505092915050565b60008135905061385381615136565b92915050565b60006020828403121561386f5761386e614af1565b5b600061387d848285016136e6565b91505092915050565b60006020828403121561389c5761389b614af1565b5b60006138aa848285016136fb565b91505092915050565b600080604083850312156138ca576138c9614af1565b5b60006138d8858286016136e6565b92505060206138e9858286016136e6565b9150509250929050565b60008060006060848603121561390c5761390b614af1565b5b600061391a868287016136e6565b935050602061392b868287016136e6565b925050604061393c86828701613844565b9150509250925092565b600080600080608085870312156139605761395f614af1565b5b600061396e878288016136e6565b945050602061397f878288016136e6565b935050604061399087828801613844565b925050606085013567ffffffffffffffff8111156139b1576139b0614aec565b5b6139bd878288016137e8565b91505092959194509250565b600080604083850312156139e0576139df614af1565b5b60006139ee858286016136e6565b92505060206139ff85828601613794565b9150509250929050565b60008060408385031215613a2057613a1f614af1565b5b6000613a2e858286016136e6565b9250506020613a3f85828601613844565b9150509250929050565b60008060208385031215613a6057613a5f614af1565b5b600083013567ffffffffffffffff811115613a7e57613a7d614aec565b5b613a8a85828601613710565b92509250509250929050565b600060208284031215613aac57613aab614af1565b5b600082013567ffffffffffffffff811115613aca57613ac9614aec565b5b613ad684828501613766565b91505092915050565b600060208284031215613af557613af4614af1565b5b6000613b0384828501613794565b91505092915050565b600060208284031215613b2257613b21614af1565b5b6000613b30848285016137a9565b91505092915050565b600060208284031215613b4f57613b4e614af1565b5b6000613b5d848285016137be565b91505092915050565b600060208284031215613b7c57613b7b614af1565b5b6000613b8a848285016137d3565b91505092915050565b600060208284031215613ba957613ba8614af1565b5b600082013567ffffffffffffffff811115613bc757613bc6614aec565b5b613bd384828501613816565b91505092915050565b600060208284031215613bf257613bf1614af1565b5b6000613c0084828501613844565b91505092915050565b60008060408385031215613c2057613c1f614af1565b5b6000613c2e85828601613844565b9250506020613c3f858286016136e6565b9150509250929050565b6000613c55838361416d565b60208301905092915050565b613c6a8161482c565b82525050565b613c81613c7c8261482c565b614998565b82525050565b6000613c92826146a0565b613c9c81856146ce565b9350613ca78361467b565b8060005b83811015613cd8578151613cbf8882613c49565b9750613cca836146c1565b925050600181019050613cab565b5085935050505092915050565b613cee8161483e565b82525050565b613cfd8161484a565b82525050565b6000613d0e826146ab565b613d1881856146df565b9350613d288185602086016148b9565b613d3181614af6565b840191505092915050565b6000613d47826146b6565b613d5181856146fb565b9350613d618185602086016148b9565b613d6a81614af6565b840191505092915050565b6000613d80826146b6565b613d8a818561470c565b9350613d9a8185602086016148b9565b80840191505092915050565b60008154613db3816148ec565b613dbd818661470c565b94506001821660008114613dd85760018114613de957613e1c565b60ff19831686528186019350613e1c565b613df28561468b565b60005b83811015613e1457815481890152600182019150602081019050613df5565b838801955050505b50505092915050565b6000613e326032836146fb565b9150613e3d82614b14565b604082019050919050565b6000613e556026836146fb565b9150613e6082614b63565b604082019050919050565b6000613e786025836146fb565b9150613e8382614bb2565b604082019050919050565b6000613e9b601c836146fb565b9150613ea682614c01565b602082019050919050565b6000613ebe6014836146fb565b9150613ec982614c2a565b602082019050919050565b6000613ee16024836146fb565b9150613eec82614c53565b604082019050919050565b6000613f046019836146fb565b9150613f0f82614ca2565b602082019050919050565b6000613f27602c836146fb565b9150613f3282614ccb565b604082019050919050565b6000613f4a6038836146fb565b9150613f5582614d1a565b604082019050919050565b6000613f6d602a836146fb565b9150613f7882614d69565b604082019050919050565b6000613f906029836146fb565b9150613f9b82614db8565b604082019050919050565b6000613fb36024836146fb565b9150613fbe82614e07565b604082019050919050565b6000613fd66020836146fb565b9150613fe182614e56565b602082019050919050565b6000613ff96028836146fb565b915061400482614e7f565b604082019050919050565b600061401c602c836146fb565b915061402782614ece565b604082019050919050565b600061403f6020836146fb565b915061404a82614f1d565b602082019050919050565b60006140626017836146fb565b915061406d82614f46565b602082019050919050565b6000614085600b836146fb565b915061409082614f6f565b602082019050919050565b60006140a8602f836146fb565b91506140b382614f98565b604082019050919050565b60006140cb6021836146fb565b91506140d682614fe7565b604082019050919050565b60006140ee6000836146f0565b91506140f982615036565b600082019050919050565b60006141116014836146fb565b915061411c82615039565b602082019050919050565b60006141346031836146fb565b915061413f82615062565b604082019050919050565b60006141576013836146fb565b9150614162826150b1565b602082019050919050565b614176816148a0565b82525050565b614185816148a0565b82525050565b60006141978284613c70565b60148201915081905092915050565b60006141b28286613d75565b91506141be8285613d75565b91506141ca8284613da6565b9150819050949350505050565b60006141e2826140e1565b9150819050919050565b60006020820190506142016000830184613c61565b92915050565b600060808201905061421c6000830187613c61565b6142296020830186613c61565b614236604083018561417c565b81810360608301526142488184613d03565b905095945050505050565b6000602082019050818103600083015261426d8184613c87565b905092915050565b600060208201905061428a6000830184613ce5565b92915050565b60006020820190506142a56000830184613cf4565b92915050565b600060208201905081810360008301526142c58184613d3c565b905092915050565b600060208201905081810360008301526142e681613e25565b9050919050565b6000602082019050818103600083015261430681613e48565b9050919050565b6000602082019050818103600083015261432681613e6b565b9050919050565b6000602082019050818103600083015261434681613e8e565b9050919050565b6000602082019050818103600083015261436681613eb1565b9050919050565b6000602082019050818103600083015261438681613ed4565b9050919050565b600060208201905081810360008301526143a681613ef7565b9050919050565b600060208201905081810360008301526143c681613f1a565b9050919050565b600060208201905081810360008301526143e681613f3d565b9050919050565b6000602082019050818103600083015261440681613f60565b9050919050565b6000602082019050818103600083015261442681613f83565b9050919050565b6000602082019050818103600083015261444681613fa6565b9050919050565b6000602082019050818103600083015261446681613fc9565b9050919050565b6000602082019050818103600083015261448681613fec565b9050919050565b600060208201905081810360008301526144a68161400f565b9050919050565b600060208201905081810360008301526144c681614032565b9050919050565b600060208201905081810360008301526144e681614055565b9050919050565b6000602082019050818103600083015261450681614078565b9050919050565b600060208201905081810360008301526145268161409b565b9050919050565b60006020820190508181036000830152614546816140be565b9050919050565b6000602082019050818103600083015261456681614104565b9050919050565b6000602082019050818103600083015261458681614127565b9050919050565b600060208201905081810360008301526145a68161414a565b9050919050565b60006020820190506145c2600083018461417c565b92915050565b60006145d26145e3565b90506145de828261491e565b919050565b6000604051905090565b600067ffffffffffffffff82111561460857614607614aa9565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561463457614633614aa9565b5b61463d82614af6565b9050602081019050919050565b600067ffffffffffffffff82111561466557614664614aa9565b5b61466e82614af6565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614722826148a0565b915061472d836148a0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614762576147616149ed565b5b828201905092915050565b6000614778826148a0565b9150614783836148a0565b92508261479357614792614a1c565b5b828204905092915050565b60006147a9826148a0565b91506147b4836148a0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147ed576147ec6149ed565b5b828202905092915050565b6000614803826148a0565b915061480e836148a0565b925082821015614821576148206149ed565b5b828203905092915050565b600061483782614880565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148d75780820151818401526020810190506148bc565b838111156148e6576000848401525b50505050565b6000600282049050600182168061490457607f821691505b6020821081141561491857614917614a4b565b5b50919050565b61492782614af6565b810181811067ffffffffffffffff8211171561494657614945614aa9565b5b80604052505050565b600061495a826148a0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561498d5761498c6149ed565b5b600182019050919050565b60006149a3826149aa565b9050919050565b60006149b582614b07565b9050919050565b60006149c7826148a0565b91506149d2836148a0565b9250826149e2576149e1614a1c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420616c7265616479207265636569766564206120667265652060008201527f6d696e7400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4163636f756e74206973206e6f742077686974656c697374656420666f72206660008201527f726565206d696e74000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f63616c6c206661696c6564000000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b6150e38161482c565b81146150ee57600080fd5b50565b6150fa8161483e565b811461510557600080fd5b50565b6151118161484a565b811461511c57600080fd5b50565b61512881614854565b811461513357600080fd5b50565b61513f816148a0565b811461514a57600080fd5b5056fea264697066735822122041cb45b1f092b23083911609591287d722d241c04df1bfe9a347666c3bf70f5e64736f6c63430008070033

Deployed Bytecode Sourcemap

42259:6176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27963:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42893:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28908:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30467:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29990:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42553:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46537:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46643:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43607:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48076:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31217:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46037:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42669:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46726:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45945:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31627:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44637:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45865:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46293:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42781:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42475:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42750:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42409:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28602:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42853:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47706:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28332:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8584:103;;;;;;;;;;;;;:::i;:::-;;46431:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47218:435;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7933:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42626:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29077:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43702:768;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30760:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42513:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42815:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46157:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31883:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42707:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45278:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42590:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48229:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45778:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30986:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44476:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8842:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27963:305;28065:4;28117:25;28102:40;;;:11;:40;;;;:105;;;;28174:33;28159:48;;;:11;:48;;;;28102:105;:158;;;;28224:36;28248:11;28224:23;:36::i;:::-;28102:158;28082:178;;27963:305;;;:::o;42893:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;28908:100::-;28962:13;28995:5;28988:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28908:100;:::o;30467:221::-;30543:7;30571:16;30579:7;30571;:16::i;:::-;30563:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30656:15;:24;30672:7;30656:24;;;;;;;;;;;;;;;;;;;;;30649:31;;30467:221;;;:::o;29990:411::-;30071:13;30087:23;30102:7;30087:14;:23::i;:::-;30071:39;;30135:5;30129:11;;:2;:11;;;;30121:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30229:5;30213:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30238:37;30255:5;30262:12;:10;:12::i;:::-;30238:16;:37::i;:::-;30213:62;30191:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30372:21;30381:2;30385:7;30372:8;:21::i;:::-;30060:341;29990:411;;:::o;42553:32::-;;;;:::o;46537:100::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46621:10:::1;46609:9;:22;;;;;;;;;;;;:::i;:::-;;46537:100:::0;:::o;46643:77::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46708:6:::1;46699;;:15;;;;;;;;;;;;;;;;;;46643:77:::0;:::o;43607:89::-;43651:7;43674:16;:6;:14;:16::i;:::-;43667:23;;43607:89;:::o;48076:106::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48165:11:::1;48148:14;;:28;;;;;;;;;;;;;;;;;;48076:106:::0;:::o;31217:339::-;31412:41;31431:12;:10;:12::i;:::-;31445:7;31412:18;:41::i;:::-;31404:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31520:28;31530:4;31536:2;31540:7;31520:9;:28::i;:::-;31217:339;;;:::o;46037:114::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46130:15:::1;46113:14;:32;;;;46037:114:::0;:::o;42669:33::-;;;;:::o;46726:139::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46786:7:::1;46807;:5;:7::i;:::-;46799:21;;46828:7;46799:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46785:56;;;46856:2;46848:11;;;::::0;::::1;;46778:87;46726:139:::0;:::o;45945:86::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46017:8:::1;46007:7;:18;;;;45945:86:::0;:::o;31627:185::-;31765:39;31782:4;31788:2;31792:7;31765:39;;;;;;;;;;;;:16;:39::i;:::-;31627:185;;;:::o;44637:635::-;44712:16;44740:23;44766:17;44776:6;44766:9;:17::i;:::-;44740:43;;44790:30;44837:15;44823:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44790:63;;44860:22;44885:1;44860:26;;44893:23;44929:309;44954:15;44936;:33;:64;;;;;44991:9;;44973:14;:27;;44936:64;44929:309;;;45011:25;45039:23;45047:14;45039:7;:23::i;:::-;45011:51;;45098:6;45077:27;;:17;:27;;;45073:131;;;45150:14;45117:13;45131:15;45117:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;45177:17;;;;;:::i;:::-;;;;45073:131;45214:16;;;;;:::i;:::-;;;;45002:236;44929:309;;;45253:13;45246:20;;;;;;44637:635;;;:::o;45865:74::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45928:5:::1;45921:4;:12;;;;45865:74:::0;:::o;46293:132::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46401:18:::1;46381:17;:38;;;;;;;;;;;;:::i;:::-;;46293:132:::0;:::o;42781:27::-;;;;;;;;;;;;;:::o;42475:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42750:26::-;;;;;;;;;;;;;:::o;42409:61::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28602:239::-;28674:7;28694:13;28710:7;:16;28718:7;28710:16;;;;;;;;;;;;;;;;;;;;;28694:32;;28762:1;28745:19;;:5;:19;;;;28737:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28828:5;28821:12;;;28602:239;;;:::o;42853:33::-;;;;:::o;47706:319::-;47783:4;47800:16;47846:10;47829:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;47819:39;;;;;;47800:58;;47874:63;47894:12;47908:18;;47928:8;47874:18;:63::i;:::-;47870:150;;;47960:4;47953:11;;;;;47870:150;48003:5;47996:12;;;47706:319;;;;:::o;28332:208::-;28404:7;28449:1;28432:19;;:5;:19;;;;28424:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28516:9;:16;28526:5;28516:16;;;;;;;;;;;;;;;;28509:23;;28332:208;;;:::o;8584:103::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8649:30:::1;8676:1;8649:18;:30::i;:::-;8584:103::o:0;46431:100::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46515:10:::1;46503:9;:22;;;;;;;;;;;;:::i;:::-;;46431:100:::0;:::o;47218:435::-;47300:1;43393:7;:5;:7::i;:::-;43379:21;;:10;:21;;;43375:128;;43432:1;43418:11;:15;:52;;;;;43452:18;;43437:11;:33;;43418:52;43410:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43375:128;43551:9;;43536:11;43517:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;43509:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;47310:14:::1;47327:10;47310:27;;47357:6;;;;;;;;;;;47356:7;47348:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;47406:29;47422:12;;47406:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:15;:29::i;:::-;47398:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;47529:4;47495:38;;:18;:30;47514:10;47495:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;47487:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47583:20;47593:6;47601:1;47583:9;:20::i;:::-;47643:4;47610:18;:30;47629:10;47610:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;47303:350;47218:435:::0;;;:::o;7933:87::-;7979:7;8006:6;;;;;;;;;;;7999:13;;7933:87;:::o;42626:38::-;;;;:::o;29077:104::-;29133:13;29166:7;29159:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29077:104;:::o;43702:768::-;43767:11;43393:7;:5;:7::i;:::-;43379:21;;:10;:21;;;43375:128;;43432:1;43418:11;:15;:52;;;;;43452:18;;43437:11;:33;;43418:52;43410:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43375:128;43551:9;;43536:11;43517:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;43509:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43796:6:::1;;;;;;;;;;;43795:7;43787:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;43865:11;43858:4;;:18;;;;:::i;:::-;43845:9;:31;;43837:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;43909:19;43939:14;;;;;;;;;;;43909:45;;43961:24;43994:34;44004:10;44016:11;43994:9;:34::i;:::-;44127:4;44110:14;;:21;44106:359;;;44147:6;44142:316;44163:11;44159:1;:15;44142:316;;;44211:11;:19;;;44231:14;;44211:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44192:54;;44257:19;44287:16;44257:47;;44316:12;44330:17:::0;44351:3:::1;:8;;44367:7;;44351:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44315:64;;;;44398:7;44390:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;44432:14;;:16;;;;;;;;;:::i;:::-;;;;;;44181:277;;;44176:3;;;;;:::i;:::-;;;;44142:316;;;;44106:359;43780:690;;43702:768:::0;;:::o;30760:155::-;30855:52;30874:12;:10;:12::i;:::-;30888:8;30898;30855:18;:52::i;:::-;30760:155;;:::o;42513:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42815:29::-;;;;;;;;;;;;;:::o;46157:130::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46262:19:::1;46241:18;:40;;;;46157:130:::0;:::o;31883:328::-;32058:41;32077:12;:10;:12::i;:::-;32091:7;32058:18;:41::i;:::-;32050:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32164:39;32178:4;32184:2;32188:7;32197:5;32164:13;:39::i;:::-;31883:328;;;;:::o;42707:34::-;;;;:::o;45278:494::-;45377:13;45418:17;45426:8;45418:7;:17::i;:::-;45402:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;45525:5;45513:17;;:8;;;;;;;;;;;:17;;;45509:64;;;45548:17;45541:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45509:64;45581:28;45612:10;:8;:10::i;:::-;45581:41;;45667:1;45642:14;45636:28;:32;:130;;;;;;;;;;;;;;;;;45704:14;45720:19;:8;:17;:19::i;:::-;45741:9;45687:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45636:130;45629:137;;;45278:494;;;;:::o;42590:31::-;;;;:::o;48229:110::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48325:8:::1;48304:18;:29;;;;48229:110:::0;:::o;45778:81::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45847:6:::1;45836:8;;:17;;;;;;;;;;;;;;;;;;45778:81:::0;:::o;30986:164::-;31083:4;31107:18;:25;31126:5;31107:25;;;;;;;;;;;;;;;:35;31133:8;31107:35;;;;;;;;;;;;;;;;;;;;;;;;;31100:42;;30986:164;;;;:::o;44476:155::-;44562:11;43393:7;:5;:7::i;:::-;43379:21;;:10;:21;;;43375:128;;43432:1;43418:11;:15;:52;;;;;43452:18;;43437:11;:33;;43418:52;43410:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43375:128;43551:9;;43536:11;43517:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;43509:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;8164:12:::1;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44592:33:::2;44602:9;44613:11;44592:9;:33::i;:::-;44476:155:::0;;;:::o;8842:201::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8951:1:::1;8931:22;;:8;:22;;;;8923:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9007:28;9026:8;9007:18;:28::i;:::-;8842:201:::0;:::o;3383:127::-;3490:1;3472:7;:14;;;:19;;;;;;;;;;;3383:127;:::o;3261:114::-;3326:7;3353;:14;;;3346:21;;3261:114;;;:::o;10634:326::-;10694:4;10951:1;10929:7;:19;;;:23;10922:30;;10634:326;;;:::o;20717:157::-;20802:4;20841:25;20826:40;;;:11;:40;;;;20819:47;;20717:157;;;:::o;33721:127::-;33786:4;33838:1;33810:30;;:7;:16;33818:7;33810:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33803:37;;33721:127;;;:::o;6657:98::-;6710:7;6737:10;6730:17;;6657:98;:::o;37867:174::-;37969:2;37942:15;:24;37958:7;37942:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38025:7;38021:2;37987:46;;37996:23;38011:7;37996:14;:23::i;:::-;37987:46;;;;;;;;;;;;37867:174;;:::o;34015:348::-;34108:4;34133:16;34141:7;34133;:16::i;:::-;34125:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34209:13;34225:23;34240:7;34225:14;:23::i;:::-;34209:39;;34278:5;34267:16;;:7;:16;;;:51;;;;34311:7;34287:31;;:20;34299:7;34287:11;:20::i;:::-;:31;;;34267:51;:87;;;;34322:32;34339:5;34346:7;34322:16;:32::i;:::-;34267:87;34259:96;;;34015:348;;;;:::o;37124:625::-;37283:4;37256:31;;:23;37271:7;37256:14;:23::i;:::-;:31;;;37248:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37362:1;37348:16;;:2;:16;;;;37340:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37418:39;37439:4;37445:2;37449:7;37418:20;:39::i;:::-;37522:29;37539:1;37543:7;37522:8;:29::i;:::-;37583:1;37564:9;:15;37574:4;37564:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37612:1;37595:9;:13;37605:2;37595:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37643:2;37624:7;:16;37632:7;37624:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37682:7;37678:2;37663:27;;37672:4;37663:27;;;;;;;;;;;;37703:38;37723:4;37729:2;37733:7;37703:19;:38::i;:::-;37124:625;;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;9203:191::-;9277:16;9296:6;;;;;;;;;;;9277:25;;9322:8;9313:6;;:17;;;;;;;;;;;;;;;;;;9377:8;9346:40;;9367:8;9346:40;;;;;;;;;;;;9266:128;9203:191;:::o;46871:204::-;46951:9;46946:124;46970:11;46966:1;:15;46946:124;;;46997:18;:6;:16;:18::i;:::-;47024:38;47034:9;47045:16;:6;:14;:16::i;:::-;47024:9;:38::i;:::-;46983:3;;;;;:::i;:::-;;;;46946:124;;;;46871:204;;:::o;38183:315::-;38338:8;38329:17;;:5;:17;;;;38321:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38425:8;38387:18;:25;38406:5;38387:25;;;;;;;;;;;;;;;:35;38413:8;38387:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38471:8;38449:41;;38464:5;38449:41;;;38481:8;38449:41;;;;;;:::i;:::-;;;;;;;;38183:315;;;:::o;33093:::-;33250:28;33260:4;33266:2;33270:7;33250:9;:28::i;:::-;33297:48;33320:4;33326:2;33330:7;33339:5;33297:22;:48::i;:::-;33289:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33093:315;;;;:::o;47081:104::-;47141:13;47170:9;47163:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47081:104;:::o;4219:723::-;4275:13;4505:1;4496:5;:10;4492:53;;;4523:10;;;;;;;;;;;;;;;;;;;;;4492:53;4555:12;4570:5;4555:20;;4586:14;4611:78;4626:1;4618:4;:9;4611:78;;4644:8;;;;;:::i;:::-;;;;4675:2;4667:10;;;;;:::i;:::-;;;4611:78;;;4699:19;4731:6;4721:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4699:39;;4749:154;4765:1;4756:5;:10;4749:154;;4793:1;4783:11;;;;;:::i;:::-;;;4860:2;4852:5;:10;;;;:::i;:::-;4839:2;:24;;;;:::i;:::-;4826:39;;4809:6;4816;4809:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4889:2;4880:11;;;;;:::i;:::-;;;4749:154;;;4927:6;4913:21;;;;;4219:723;;;;:::o;40434:126::-;;;;:::o;40945:125::-;;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1659:454;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;34705:110::-;34781:26;34791:2;34795:7;34781:26;;;;;;;;;;;;:9;:26::i;:::-;34705:110;;:::o;39063:799::-;39218:4;39239:15;:2;:13;;;:15::i;:::-;39235:620;;;39291:2;39275:36;;;39312:12;:10;:12::i;:::-;39326:4;39332:7;39341:5;39275:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39271:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39534:1;39517:6;:13;:18;39513:272;;;39560:60;;;;;;;;;;:::i;:::-;;;;;;;;39513:272;39735:6;39729:13;39720:6;39716:2;39712:15;39705:38;39271:529;39408:41;;;39398:51;;;:6;:51;;;;39391:58;;;;;39235:620;39839:4;39832:11;;39063:799;;;;;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2158:224;;;;:::o;35042:321::-;35172:18;35178:2;35182:7;35172:5;:18::i;:::-;35223:54;35254:1;35258:2;35262:7;35271:5;35223:22;:54::i;:::-;35201:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35042:321;;;:::o;35699:439::-;35793:1;35779:16;;:2;:16;;;;35771:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35852:16;35860:7;35852;:16::i;:::-;35851:17;35843:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35914:45;35943:1;35947:2;35951:7;35914:20;:45::i;:::-;35989:1;35972:9;:13;35982:2;35972:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36020:2;36001:7;:16;36009:7;36001:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36065:7;36061:2;36040:33;;36057:1;36040:33;;;;;;;;;;;;36086:44;36114:1;36118:2;36122:7;36086:19;:44::i;:::-;35699:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:568::-;1970:8;1980:6;2030:3;2023:4;2015:6;2011:17;2007:27;1997:122;;2038:79;;:::i;:::-;1997:122;2151:6;2138:20;2128:30;;2181:18;2173:6;2170:30;2167:117;;;2203:79;;:::i;:::-;2167:117;2317:4;2309:6;2305:17;2293:29;;2371:3;2363:4;2355:6;2351:17;2341:8;2337:32;2334:41;2331:128;;;2378:79;;:::i;:::-;2331:128;1897:568;;;;;:::o;2488:370::-;2559:5;2608:3;2601:4;2593:6;2589:17;2585:27;2575:122;;2616:79;;:::i;:::-;2575:122;2733:6;2720:20;2758:94;2848:3;2840:6;2833:4;2825:6;2821:17;2758:94;:::i;:::-;2749:103;;2565:293;2488:370;;;;:::o;2864:133::-;2907:5;2945:6;2932:20;2923:29;;2961:30;2985:5;2961:30;:::i;:::-;2864:133;;;;:::o;3003:139::-;3049:5;3087:6;3074:20;3065:29;;3103:33;3130:5;3103:33;:::i;:::-;3003:139;;;;:::o;3148:137::-;3193:5;3231:6;3218:20;3209:29;;3247:32;3273:5;3247:32;:::i;:::-;3148:137;;;;:::o;3291:141::-;3347:5;3378:6;3372:13;3363:22;;3394:32;3420:5;3394:32;:::i;:::-;3291:141;;;;:::o;3451:338::-;3506:5;3555:3;3548:4;3540:6;3536:17;3532:27;3522:122;;3563:79;;:::i;:::-;3522:122;3680:6;3667:20;3705:78;3779:3;3771:6;3764:4;3756:6;3752:17;3705:78;:::i;:::-;3696:87;;3512:277;3451:338;;;;:::o;3809:340::-;3865:5;3914:3;3907:4;3899:6;3895:17;3891:27;3881:122;;3922:79;;:::i;:::-;3881:122;4039:6;4026:20;4064:79;4139:3;4131:6;4124:4;4116:6;4112:17;4064:79;:::i;:::-;4055:88;;3871:278;3809:340;;;;:::o;4155:139::-;4201:5;4239:6;4226:20;4217:29;;4255:33;4282:5;4255:33;:::i;:::-;4155:139;;;;:::o;4300:329::-;4359:6;4408:2;4396:9;4387:7;4383:23;4379:32;4376:119;;;4414:79;;:::i;:::-;4376:119;4534:1;4559:53;4604:7;4595:6;4584:9;4580:22;4559:53;:::i;:::-;4549:63;;4505:117;4300:329;;;;:::o;4635:351::-;4705:6;4754:2;4742:9;4733:7;4729:23;4725:32;4722:119;;;4760:79;;:::i;:::-;4722:119;4880:1;4905:64;4961:7;4952:6;4941:9;4937:22;4905:64;:::i;:::-;4895:74;;4851:128;4635:351;;;;:::o;4992:474::-;5060:6;5068;5117:2;5105:9;5096:7;5092:23;5088:32;5085:119;;;5123:79;;:::i;:::-;5085:119;5243:1;5268:53;5313:7;5304:6;5293:9;5289:22;5268:53;:::i;:::-;5258:63;;5214:117;5370:2;5396:53;5441:7;5432:6;5421:9;5417:22;5396:53;:::i;:::-;5386:63;;5341:118;4992:474;;;;;:::o;5472:619::-;5549:6;5557;5565;5614:2;5602:9;5593:7;5589:23;5585:32;5582:119;;;5620:79;;:::i;:::-;5582:119;5740:1;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5711:117;5867:2;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5838:118;5995:2;6021:53;6066:7;6057:6;6046:9;6042:22;6021:53;:::i;:::-;6011:63;;5966:118;5472:619;;;;;:::o;6097:943::-;6192:6;6200;6208;6216;6265:3;6253:9;6244:7;6240:23;6236:33;6233:120;;;6272:79;;:::i;:::-;6233:120;6392:1;6417:53;6462:7;6453:6;6442:9;6438:22;6417:53;:::i;:::-;6407:63;;6363:117;6519:2;6545:53;6590:7;6581:6;6570:9;6566:22;6545:53;:::i;:::-;6535:63;;6490:118;6647:2;6673:53;6718:7;6709:6;6698:9;6694:22;6673:53;:::i;:::-;6663:63;;6618:118;6803:2;6792:9;6788:18;6775:32;6834:18;6826:6;6823:30;6820:117;;;6856:79;;:::i;:::-;6820:117;6961:62;7015:7;7006:6;6995:9;6991:22;6961:62;:::i;:::-;6951:72;;6746:287;6097:943;;;;;;;:::o;7046:468::-;7111:6;7119;7168:2;7156:9;7147:7;7143:23;7139:32;7136:119;;;7174:79;;:::i;:::-;7136:119;7294:1;7319:53;7364:7;7355:6;7344:9;7340:22;7319:53;:::i;:::-;7309:63;;7265:117;7421:2;7447:50;7489:7;7480:6;7469:9;7465:22;7447:50;:::i;:::-;7437:60;;7392:115;7046:468;;;;;:::o;7520:474::-;7588:6;7596;7645:2;7633:9;7624:7;7620:23;7616:32;7613:119;;;7651:79;;:::i;:::-;7613:119;7771:1;7796:53;7841:7;7832:6;7821:9;7817:22;7796:53;:::i;:::-;7786:63;;7742:117;7898:2;7924:53;7969:7;7960:6;7949:9;7945:22;7924:53;:::i;:::-;7914:63;;7869:118;7520:474;;;;;:::o;8000:559::-;8086:6;8094;8143:2;8131:9;8122:7;8118:23;8114:32;8111:119;;;8149:79;;:::i;:::-;8111:119;8297:1;8286:9;8282:17;8269:31;8327:18;8319:6;8316:30;8313:117;;;8349:79;;:::i;:::-;8313:117;8462:80;8534:7;8525:6;8514:9;8510:22;8462:80;:::i;:::-;8444:98;;;;8240:312;8000:559;;;;;:::o;8565:539::-;8649:6;8698:2;8686:9;8677:7;8673:23;8669:32;8666:119;;;8704:79;;:::i;:::-;8666:119;8852:1;8841:9;8837:17;8824:31;8882:18;8874:6;8871:30;8868:117;;;8904:79;;:::i;:::-;8868:117;9009:78;9079:7;9070:6;9059:9;9055:22;9009:78;:::i;:::-;8999:88;;8795:302;8565:539;;;;:::o;9110:323::-;9166:6;9215:2;9203:9;9194:7;9190:23;9186:32;9183:119;;;9221:79;;:::i;:::-;9183:119;9341:1;9366:50;9408:7;9399:6;9388:9;9384:22;9366:50;:::i;:::-;9356:60;;9312:114;9110:323;;;;:::o;9439:329::-;9498:6;9547:2;9535:9;9526:7;9522:23;9518:32;9515:119;;;9553:79;;:::i;:::-;9515:119;9673:1;9698:53;9743:7;9734:6;9723:9;9719:22;9698:53;:::i;:::-;9688:63;;9644:117;9439:329;;;;:::o;9774:327::-;9832:6;9881:2;9869:9;9860:7;9856:23;9852:32;9849:119;;;9887:79;;:::i;:::-;9849:119;10007:1;10032:52;10076:7;10067:6;10056:9;10052:22;10032:52;:::i;:::-;10022:62;;9978:116;9774:327;;;;:::o;10107:349::-;10176:6;10225:2;10213:9;10204:7;10200:23;10196:32;10193:119;;;10231:79;;:::i;:::-;10193:119;10351:1;10376:63;10431:7;10422:6;10411:9;10407:22;10376:63;:::i;:::-;10366:73;;10322:127;10107:349;;;;:::o;10462:509::-;10531:6;10580:2;10568:9;10559:7;10555:23;10551:32;10548:119;;;10586:79;;:::i;:::-;10548:119;10734:1;10723:9;10719:17;10706:31;10764:18;10756:6;10753:30;10750:117;;;10786:79;;:::i;:::-;10750:117;10891:63;10946:7;10937:6;10926:9;10922:22;10891:63;:::i;:::-;10881:73;;10677:287;10462:509;;;;:::o;10977:329::-;11036:6;11085:2;11073:9;11064:7;11060:23;11056:32;11053:119;;;11091:79;;:::i;:::-;11053:119;11211:1;11236:53;11281:7;11272:6;11261:9;11257:22;11236:53;:::i;:::-;11226:63;;11182:117;10977:329;;;;:::o;11312:474::-;11380:6;11388;11437:2;11425:9;11416:7;11412:23;11408:32;11405:119;;;11443:79;;:::i;:::-;11405:119;11563:1;11588:53;11633:7;11624:6;11613:9;11609:22;11588:53;:::i;:::-;11578:63;;11534:117;11690:2;11716:53;11761:7;11752:6;11741:9;11737:22;11716:53;:::i;:::-;11706:63;;11661:118;11312:474;;;;;:::o;11792:179::-;11861:10;11882:46;11924:3;11916:6;11882:46;:::i;:::-;11960:4;11955:3;11951:14;11937:28;;11792:179;;;;:::o;11977:118::-;12064:24;12082:5;12064:24;:::i;:::-;12059:3;12052:37;11977:118;;:::o;12101:157::-;12206:45;12226:24;12244:5;12226:24;:::i;:::-;12206:45;:::i;:::-;12201:3;12194:58;12101:157;;:::o;12294:732::-;12413:3;12442:54;12490:5;12442:54;:::i;:::-;12512:86;12591:6;12586:3;12512:86;:::i;:::-;12505:93;;12622:56;12672:5;12622:56;:::i;:::-;12701:7;12732:1;12717:284;12742:6;12739:1;12736:13;12717:284;;;12818:6;12812:13;12845:63;12904:3;12889:13;12845:63;:::i;:::-;12838:70;;12931:60;12984:6;12931:60;:::i;:::-;12921:70;;12777:224;12764:1;12761;12757:9;12752:14;;12717:284;;;12721:14;13017:3;13010:10;;12418:608;;;12294:732;;;;:::o;13032:109::-;13113:21;13128:5;13113:21;:::i;:::-;13108:3;13101:34;13032:109;;:::o;13147:118::-;13234:24;13252:5;13234:24;:::i;:::-;13229:3;13222:37;13147:118;;:::o;13271:360::-;13357:3;13385:38;13417:5;13385:38;:::i;:::-;13439:70;13502:6;13497:3;13439:70;:::i;:::-;13432:77;;13518:52;13563:6;13558:3;13551:4;13544:5;13540:16;13518:52;:::i;:::-;13595:29;13617:6;13595:29;:::i;:::-;13590:3;13586:39;13579:46;;13361:270;13271:360;;;;:::o;13637:364::-;13725:3;13753:39;13786:5;13753:39;:::i;:::-;13808:71;13872:6;13867:3;13808:71;:::i;:::-;13801:78;;13888:52;13933:6;13928:3;13921:4;13914:5;13910:16;13888:52;:::i;:::-;13965:29;13987:6;13965:29;:::i;:::-;13960:3;13956:39;13949:46;;13729:272;13637:364;;;;:::o;14007:377::-;14113:3;14141:39;14174:5;14141:39;:::i;:::-;14196:89;14278:6;14273:3;14196:89;:::i;:::-;14189:96;;14294:52;14339:6;14334:3;14327:4;14320:5;14316:16;14294:52;:::i;:::-;14371:6;14366:3;14362:16;14355:23;;14117:267;14007:377;;;;:::o;14414:845::-;14517:3;14554:5;14548:12;14583:36;14609:9;14583:36;:::i;:::-;14635:89;14717:6;14712:3;14635:89;:::i;:::-;14628:96;;14755:1;14744:9;14740:17;14771:1;14766:137;;;;14917:1;14912:341;;;;14733:520;;14766:137;14850:4;14846:9;14835;14831:25;14826:3;14819:38;14886:6;14881:3;14877:16;14870:23;;14766:137;;14912:341;14979:38;15011:5;14979:38;:::i;:::-;15039:1;15053:154;15067:6;15064:1;15061:13;15053:154;;;15141:7;15135:14;15131:1;15126:3;15122:11;15115:35;15191:1;15182:7;15178:15;15167:26;;15089:4;15086:1;15082:12;15077:17;;15053:154;;;15236:6;15231:3;15227:16;15220:23;;14919:334;;14733:520;;14521:738;;14414:845;;;;:::o;15265:366::-;15407:3;15428:67;15492:2;15487:3;15428:67;:::i;:::-;15421:74;;15504:93;15593:3;15504:93;:::i;:::-;15622:2;15617:3;15613:12;15606:19;;15265:366;;;:::o;15637:::-;15779:3;15800:67;15864:2;15859:3;15800:67;:::i;:::-;15793:74;;15876:93;15965:3;15876:93;:::i;:::-;15994:2;15989:3;15985:12;15978:19;;15637:366;;;:::o;16009:::-;16151:3;16172:67;16236:2;16231:3;16172:67;:::i;:::-;16165:74;;16248:93;16337:3;16248:93;:::i;:::-;16366:2;16361:3;16357:12;16350:19;;16009:366;;;:::o;16381:::-;16523:3;16544:67;16608:2;16603:3;16544:67;:::i;:::-;16537:74;;16620:93;16709:3;16620:93;:::i;:::-;16738:2;16733:3;16729:12;16722:19;;16381:366;;;:::o;16753:::-;16895:3;16916:67;16980:2;16975:3;16916:67;:::i;:::-;16909:74;;16992:93;17081:3;16992:93;:::i;:::-;17110:2;17105:3;17101:12;17094:19;;16753:366;;;:::o;17125:::-;17267:3;17288:67;17352:2;17347:3;17288:67;:::i;:::-;17281:74;;17364:93;17453:3;17364:93;:::i;:::-;17482:2;17477:3;17473:12;17466:19;;17125:366;;;:::o;17497:::-;17639:3;17660:67;17724:2;17719:3;17660:67;:::i;:::-;17653:74;;17736:93;17825:3;17736:93;:::i;:::-;17854:2;17849:3;17845:12;17838:19;;17497:366;;;:::o;17869:::-;18011:3;18032:67;18096:2;18091:3;18032:67;:::i;:::-;18025:74;;18108:93;18197:3;18108:93;:::i;:::-;18226:2;18221:3;18217:12;18210:19;;17869:366;;;:::o;18241:::-;18383:3;18404:67;18468:2;18463:3;18404:67;:::i;:::-;18397:74;;18480:93;18569:3;18480:93;:::i;:::-;18598:2;18593:3;18589:12;18582:19;;18241:366;;;:::o;18613:::-;18755:3;18776:67;18840:2;18835:3;18776:67;:::i;:::-;18769:74;;18852:93;18941:3;18852:93;:::i;:::-;18970:2;18965:3;18961:12;18954:19;;18613:366;;;:::o;18985:::-;19127:3;19148:67;19212:2;19207:3;19148:67;:::i;:::-;19141:74;;19224:93;19313:3;19224:93;:::i;:::-;19342:2;19337:3;19333:12;19326:19;;18985:366;;;:::o;19357:::-;19499:3;19520:67;19584:2;19579:3;19520:67;:::i;:::-;19513:74;;19596:93;19685:3;19596:93;:::i;:::-;19714:2;19709:3;19705:12;19698:19;;19357:366;;;:::o;19729:::-;19871:3;19892:67;19956:2;19951:3;19892:67;:::i;:::-;19885:74;;19968:93;20057:3;19968:93;:::i;:::-;20086:2;20081:3;20077:12;20070:19;;19729:366;;;:::o;20101:::-;20243:3;20264:67;20328:2;20323:3;20264:67;:::i;:::-;20257:74;;20340:93;20429:3;20340:93;:::i;:::-;20458:2;20453:3;20449:12;20442:19;;20101:366;;;:::o;20473:::-;20615:3;20636:67;20700:2;20695:3;20636:67;:::i;:::-;20629:74;;20712:93;20801:3;20712:93;:::i;:::-;20830:2;20825:3;20821:12;20814:19;;20473:366;;;:::o;20845:::-;20987:3;21008:67;21072:2;21067:3;21008:67;:::i;:::-;21001:74;;21084:93;21173:3;21084:93;:::i;:::-;21202:2;21197:3;21193:12;21186:19;;20845:366;;;:::o;21217:::-;21359:3;21380:67;21444:2;21439:3;21380:67;:::i;:::-;21373:74;;21456:93;21545:3;21456:93;:::i;:::-;21574:2;21569:3;21565:12;21558:19;;21217:366;;;:::o;21589:::-;21731:3;21752:67;21816:2;21811:3;21752:67;:::i;:::-;21745:74;;21828:93;21917:3;21828:93;:::i;:::-;21946:2;21941:3;21937:12;21930:19;;21589:366;;;:::o;21961:::-;22103:3;22124:67;22188:2;22183:3;22124:67;:::i;:::-;22117:74;;22200:93;22289:3;22200:93;:::i;:::-;22318:2;22313:3;22309:12;22302:19;;21961:366;;;:::o;22333:::-;22475:3;22496:67;22560:2;22555:3;22496:67;:::i;:::-;22489:74;;22572:93;22661:3;22572:93;:::i;:::-;22690:2;22685:3;22681:12;22674:19;;22333:366;;;:::o;22705:398::-;22864:3;22885:83;22966:1;22961:3;22885:83;:::i;:::-;22878:90;;22977:93;23066:3;22977:93;:::i;:::-;23095:1;23090:3;23086:11;23079:18;;22705:398;;;:::o;23109:366::-;23251:3;23272:67;23336:2;23331:3;23272:67;:::i;:::-;23265:74;;23348:93;23437:3;23348:93;:::i;:::-;23466:2;23461:3;23457:12;23450:19;;23109:366;;;:::o;23481:::-;23623:3;23644:67;23708:2;23703:3;23644:67;:::i;:::-;23637:74;;23720:93;23809:3;23720:93;:::i;:::-;23838:2;23833:3;23829:12;23822:19;;23481:366;;;:::o;23853:::-;23995:3;24016:67;24080:2;24075:3;24016:67;:::i;:::-;24009:74;;24092:93;24181:3;24092:93;:::i;:::-;24210:2;24205:3;24201:12;24194:19;;23853:366;;;:::o;24225:108::-;24302:24;24320:5;24302:24;:::i;:::-;24297:3;24290:37;24225:108;;:::o;24339:118::-;24426:24;24444:5;24426:24;:::i;:::-;24421:3;24414:37;24339:118;;:::o;24463:256::-;24575:3;24590:75;24661:3;24652:6;24590:75;:::i;:::-;24690:2;24685:3;24681:12;24674:19;;24710:3;24703:10;;24463:256;;;;:::o;24725:589::-;24950:3;24972:95;25063:3;25054:6;24972:95;:::i;:::-;24965:102;;25084:95;25175:3;25166:6;25084:95;:::i;:::-;25077:102;;25196:92;25284:3;25275:6;25196:92;:::i;:::-;25189:99;;25305:3;25298:10;;24725:589;;;;;;:::o;25320:379::-;25504:3;25526:147;25669:3;25526:147;:::i;:::-;25519:154;;25690:3;25683:10;;25320:379;;;:::o;25705:222::-;25798:4;25836:2;25825:9;25821:18;25813:26;;25849:71;25917:1;25906:9;25902:17;25893:6;25849:71;:::i;:::-;25705:222;;;;:::o;25933:640::-;26128:4;26166:3;26155:9;26151:19;26143:27;;26180:71;26248:1;26237:9;26233:17;26224:6;26180:71;:::i;:::-;26261:72;26329:2;26318:9;26314:18;26305:6;26261:72;:::i;:::-;26343;26411:2;26400:9;26396:18;26387:6;26343:72;:::i;:::-;26462:9;26456:4;26452:20;26447:2;26436:9;26432:18;26425:48;26490:76;26561:4;26552:6;26490:76;:::i;:::-;26482:84;;25933:640;;;;;;;:::o;26579:373::-;26722:4;26760:2;26749:9;26745:18;26737:26;;26809:9;26803:4;26799:20;26795:1;26784:9;26780:17;26773:47;26837:108;26940:4;26931:6;26837:108;:::i;:::-;26829:116;;26579:373;;;;:::o;26958:210::-;27045:4;27083:2;27072:9;27068:18;27060:26;;27096:65;27158:1;27147:9;27143:17;27134:6;27096:65;:::i;:::-;26958:210;;;;:::o;27174:222::-;27267:4;27305:2;27294:9;27290:18;27282:26;;27318:71;27386:1;27375:9;27371:17;27362:6;27318:71;:::i;:::-;27174:222;;;;:::o;27402:313::-;27515:4;27553:2;27542:9;27538:18;27530:26;;27602:9;27596:4;27592:20;27588:1;27577:9;27573:17;27566:47;27630:78;27703:4;27694:6;27630:78;:::i;:::-;27622:86;;27402:313;;;;:::o;27721:419::-;27887:4;27925:2;27914:9;27910:18;27902:26;;27974:9;27968:4;27964:20;27960:1;27949:9;27945:17;27938:47;28002:131;28128:4;28002:131;:::i;:::-;27994:139;;27721:419;;;:::o;28146:::-;28312:4;28350:2;28339:9;28335:18;28327:26;;28399:9;28393:4;28389:20;28385:1;28374:9;28370:17;28363:47;28427:131;28553:4;28427:131;:::i;:::-;28419:139;;28146:419;;;:::o;28571:::-;28737:4;28775:2;28764:9;28760:18;28752:26;;28824:9;28818:4;28814:20;28810:1;28799:9;28795:17;28788:47;28852:131;28978:4;28852:131;:::i;:::-;28844:139;;28571:419;;;:::o;28996:::-;29162:4;29200:2;29189:9;29185:18;29177:26;;29249:9;29243:4;29239:20;29235:1;29224:9;29220:17;29213:47;29277:131;29403:4;29277:131;:::i;:::-;29269:139;;28996:419;;;:::o;29421:::-;29587:4;29625:2;29614:9;29610:18;29602:26;;29674:9;29668:4;29664:20;29660:1;29649:9;29645:17;29638:47;29702:131;29828:4;29702:131;:::i;:::-;29694:139;;29421:419;;;:::o;29846:::-;30012:4;30050:2;30039:9;30035:18;30027:26;;30099:9;30093:4;30089:20;30085:1;30074:9;30070:17;30063:47;30127:131;30253:4;30127:131;:::i;:::-;30119:139;;29846:419;;;:::o;30271:::-;30437:4;30475:2;30464:9;30460:18;30452:26;;30524:9;30518:4;30514:20;30510:1;30499:9;30495:17;30488:47;30552:131;30678:4;30552:131;:::i;:::-;30544:139;;30271:419;;;:::o;30696:::-;30862:4;30900:2;30889:9;30885:18;30877:26;;30949:9;30943:4;30939:20;30935:1;30924:9;30920:17;30913:47;30977:131;31103:4;30977:131;:::i;:::-;30969:139;;30696:419;;;:::o;31121:::-;31287:4;31325:2;31314:9;31310:18;31302:26;;31374:9;31368:4;31364:20;31360:1;31349:9;31345:17;31338:47;31402:131;31528:4;31402:131;:::i;:::-;31394:139;;31121:419;;;:::o;31546:::-;31712:4;31750:2;31739:9;31735:18;31727:26;;31799:9;31793:4;31789:20;31785:1;31774:9;31770:17;31763:47;31827:131;31953:4;31827:131;:::i;:::-;31819:139;;31546:419;;;:::o;31971:::-;32137:4;32175:2;32164:9;32160:18;32152:26;;32224:9;32218:4;32214:20;32210:1;32199:9;32195:17;32188:47;32252:131;32378:4;32252:131;:::i;:::-;32244:139;;31971:419;;;:::o;32396:::-;32562:4;32600:2;32589:9;32585:18;32577:26;;32649:9;32643:4;32639:20;32635:1;32624:9;32620:17;32613:47;32677:131;32803:4;32677:131;:::i;:::-;32669:139;;32396:419;;;:::o;32821:::-;32987:4;33025:2;33014:9;33010:18;33002:26;;33074:9;33068:4;33064:20;33060:1;33049:9;33045:17;33038:47;33102:131;33228:4;33102:131;:::i;:::-;33094:139;;32821:419;;;:::o;33246:::-;33412:4;33450:2;33439:9;33435:18;33427:26;;33499:9;33493:4;33489:20;33485:1;33474:9;33470:17;33463:47;33527:131;33653:4;33527:131;:::i;:::-;33519:139;;33246:419;;;:::o;33671:::-;33837:4;33875:2;33864:9;33860:18;33852:26;;33924:9;33918:4;33914:20;33910:1;33899:9;33895:17;33888:47;33952:131;34078:4;33952:131;:::i;:::-;33944:139;;33671:419;;;:::o;34096:::-;34262:4;34300:2;34289:9;34285:18;34277:26;;34349:9;34343:4;34339:20;34335:1;34324:9;34320:17;34313:47;34377:131;34503:4;34377:131;:::i;:::-;34369:139;;34096:419;;;:::o;34521:::-;34687:4;34725:2;34714:9;34710:18;34702:26;;34774:9;34768:4;34764:20;34760:1;34749:9;34745:17;34738:47;34802:131;34928:4;34802:131;:::i;:::-;34794:139;;34521:419;;;:::o;34946:::-;35112:4;35150:2;35139:9;35135:18;35127:26;;35199:9;35193:4;35189:20;35185:1;35174:9;35170:17;35163:47;35227:131;35353:4;35227:131;:::i;:::-;35219:139;;34946:419;;;:::o;35371:::-;35537:4;35575:2;35564:9;35560:18;35552:26;;35624:9;35618:4;35614:20;35610:1;35599:9;35595:17;35588:47;35652:131;35778:4;35652:131;:::i;:::-;35644:139;;35371:419;;;:::o;35796:::-;35962:4;36000:2;35989:9;35985:18;35977:26;;36049:9;36043:4;36039:20;36035:1;36024:9;36020:17;36013:47;36077:131;36203:4;36077:131;:::i;:::-;36069:139;;35796:419;;;:::o;36221:::-;36387:4;36425:2;36414:9;36410:18;36402:26;;36474:9;36468:4;36464:20;36460:1;36449:9;36445:17;36438:47;36502:131;36628:4;36502:131;:::i;:::-;36494:139;;36221:419;;;:::o;36646:::-;36812:4;36850:2;36839:9;36835:18;36827:26;;36899:9;36893:4;36889:20;36885:1;36874:9;36870:17;36863:47;36927:131;37053:4;36927:131;:::i;:::-;36919:139;;36646:419;;;:::o;37071:::-;37237:4;37275:2;37264:9;37260:18;37252:26;;37324:9;37318:4;37314:20;37310:1;37299:9;37295:17;37288:47;37352:131;37478:4;37352:131;:::i;:::-;37344:139;;37071:419;;;:::o;37496:222::-;37589:4;37627:2;37616:9;37612:18;37604:26;;37640:71;37708:1;37697:9;37693:17;37684:6;37640:71;:::i;:::-;37496:222;;;;:::o;37724:129::-;37758:6;37785:20;;:::i;:::-;37775:30;;37814:33;37842:4;37834:6;37814:33;:::i;:::-;37724:129;;;:::o;37859:75::-;37892:6;37925:2;37919:9;37909:19;;37859:75;:::o;37940:311::-;38017:4;38107:18;38099:6;38096:30;38093:56;;;38129:18;;:::i;:::-;38093:56;38179:4;38171:6;38167:17;38159:25;;38239:4;38233;38229:15;38221:23;;37940:311;;;:::o;38257:307::-;38318:4;38408:18;38400:6;38397:30;38394:56;;;38430:18;;:::i;:::-;38394:56;38468:29;38490:6;38468:29;:::i;:::-;38460:37;;38552:4;38546;38542:15;38534:23;;38257:307;;;:::o;38570:308::-;38632:4;38722:18;38714:6;38711:30;38708:56;;;38744:18;;:::i;:::-;38708:56;38782:29;38804:6;38782:29;:::i;:::-;38774:37;;38866:4;38860;38856:15;38848:23;;38570:308;;;:::o;38884:132::-;38951:4;38974:3;38966:11;;39004:4;38999:3;38995:14;38987:22;;38884:132;;;:::o;39022:141::-;39071:4;39094:3;39086:11;;39117:3;39114:1;39107:14;39151:4;39148:1;39138:18;39130:26;;39022:141;;;:::o;39169:114::-;39236:6;39270:5;39264:12;39254:22;;39169:114;;;:::o;39289:98::-;39340:6;39374:5;39368:12;39358:22;;39289:98;;;:::o;39393:99::-;39445:6;39479:5;39473:12;39463:22;;39393:99;;;:::o;39498:113::-;39568:4;39600;39595:3;39591:14;39583:22;;39498:113;;;:::o;39617:184::-;39716:11;39750:6;39745:3;39738:19;39790:4;39785:3;39781:14;39766:29;;39617:184;;;;:::o;39807:168::-;39890:11;39924:6;39919:3;39912:19;39964:4;39959:3;39955:14;39940:29;;39807:168;;;;:::o;39981:147::-;40082:11;40119:3;40104:18;;39981:147;;;;:::o;40134:169::-;40218:11;40252:6;40247:3;40240:19;40292:4;40287:3;40283:14;40268:29;;40134:169;;;;:::o;40309:148::-;40411:11;40448:3;40433:18;;40309:148;;;;:::o;40463:305::-;40503:3;40522:20;40540:1;40522:20;:::i;:::-;40517:25;;40556:20;40574:1;40556:20;:::i;:::-;40551:25;;40710:1;40642:66;40638:74;40635:1;40632:81;40629:107;;;40716:18;;:::i;:::-;40629:107;40760:1;40757;40753:9;40746:16;;40463:305;;;;:::o;40774:185::-;40814:1;40831:20;40849:1;40831:20;:::i;:::-;40826:25;;40865:20;40883:1;40865:20;:::i;:::-;40860:25;;40904:1;40894:35;;40909:18;;:::i;:::-;40894:35;40951:1;40948;40944:9;40939:14;;40774:185;;;;:::o;40965:348::-;41005:7;41028:20;41046:1;41028:20;:::i;:::-;41023:25;;41062:20;41080:1;41062:20;:::i;:::-;41057:25;;41250:1;41182:66;41178:74;41175:1;41172:81;41167:1;41160:9;41153:17;41149:105;41146:131;;;41257:18;;:::i;:::-;41146:131;41305:1;41302;41298:9;41287:20;;40965:348;;;;:::o;41319:191::-;41359:4;41379:20;41397:1;41379:20;:::i;:::-;41374:25;;41413:20;41431:1;41413:20;:::i;:::-;41408:25;;41452:1;41449;41446:8;41443:34;;;41457:18;;:::i;:::-;41443:34;41502:1;41499;41495:9;41487:17;;41319:191;;;;:::o;41516:96::-;41553:7;41582:24;41600:5;41582:24;:::i;:::-;41571:35;;41516:96;;;:::o;41618:90::-;41652:7;41695:5;41688:13;41681:21;41670:32;;41618:90;;;:::o;41714:77::-;41751:7;41780:5;41769:16;;41714:77;;;:::o;41797:149::-;41833:7;41873:66;41866:5;41862:78;41851:89;;41797:149;;;:::o;41952:126::-;41989:7;42029:42;42022:5;42018:54;42007:65;;41952:126;;;:::o;42084:77::-;42121:7;42150:5;42139:16;;42084:77;;;:::o;42167:154::-;42251:6;42246:3;42241;42228:30;42313:1;42304:6;42299:3;42295:16;42288:27;42167:154;;;:::o;42327:307::-;42395:1;42405:113;42419:6;42416:1;42413:13;42405:113;;;42504:1;42499:3;42495:11;42489:18;42485:1;42480:3;42476:11;42469:39;42441:2;42438:1;42434:10;42429:15;;42405:113;;;42536:6;42533:1;42530:13;42527:101;;;42616:1;42607:6;42602:3;42598:16;42591:27;42527:101;42376:258;42327:307;;;:::o;42640:320::-;42684:6;42721:1;42715:4;42711:12;42701:22;;42768:1;42762:4;42758:12;42789:18;42779:81;;42845:4;42837:6;42833:17;42823:27;;42779:81;42907:2;42899:6;42896:14;42876:18;42873:38;42870:84;;;42926:18;;:::i;:::-;42870:84;42691:269;42640:320;;;:::o;42966:281::-;43049:27;43071:4;43049:27;:::i;:::-;43041:6;43037:40;43179:6;43167:10;43164:22;43143:18;43131:10;43128:34;43125:62;43122:88;;;43190:18;;:::i;:::-;43122:88;43230:10;43226:2;43219:22;43009:238;42966:281;;:::o;43253:233::-;43292:3;43315:24;43333:5;43315:24;:::i;:::-;43306:33;;43361:66;43354:5;43351:77;43348:103;;;43431:18;;:::i;:::-;43348:103;43478:1;43471:5;43467:13;43460:20;;43253:233;;;:::o;43492:100::-;43531:7;43560:26;43580:5;43560:26;:::i;:::-;43549:37;;43492:100;;;:::o;43598:94::-;43637:7;43666:20;43680:5;43666:20;:::i;:::-;43655:31;;43598:94;;;:::o;43698:176::-;43730:1;43747:20;43765:1;43747:20;:::i;:::-;43742:25;;43781:20;43799:1;43781:20;:::i;:::-;43776:25;;43820:1;43810:35;;43825:18;;:::i;:::-;43810:35;43866:1;43863;43859:9;43854:14;;43698:176;;;;:::o;43880:180::-;43928:77;43925:1;43918:88;44025:4;44022:1;44015:15;44049:4;44046:1;44039:15;44066:180;44114:77;44111:1;44104:88;44211:4;44208:1;44201:15;44235:4;44232:1;44225:15;44252:180;44300:77;44297:1;44290:88;44397:4;44394:1;44387:15;44421:4;44418:1;44411:15;44438:180;44486:77;44483:1;44476:88;44583:4;44580:1;44573:15;44607:4;44604:1;44597:15;44624:180;44672:77;44669:1;44662:88;44769:4;44766:1;44759:15;44793:4;44790:1;44783:15;44810:117;44919:1;44916;44909:12;44933:117;45042:1;45039;45032:12;45056:117;45165:1;45162;45155:12;45179:117;45288:1;45285;45278:12;45302:117;45411:1;45408;45401:12;45425:117;45534:1;45531;45524:12;45548:102;45589:6;45640:2;45636:7;45631:2;45624:5;45620:14;45616:28;45606:38;;45548:102;;;:::o;45656:94::-;45689:8;45737:5;45733:2;45729:14;45708:35;;45656:94;;;:::o;45756:237::-;45896:34;45892:1;45884:6;45880:14;45873:58;45965:20;45960:2;45952:6;45948:15;45941:45;45756:237;:::o;45999:225::-;46139:34;46135:1;46127:6;46123:14;46116:58;46208:8;46203:2;46195:6;46191:15;46184:33;45999:225;:::o;46230:224::-;46370:34;46366:1;46358:6;46354:14;46347:58;46439:7;46434:2;46426:6;46422:15;46415:32;46230:224;:::o;46460:178::-;46600:30;46596:1;46588:6;46584:14;46577:54;46460:178;:::o;46644:170::-;46784:22;46780:1;46772:6;46768:14;46761:46;46644:170;:::o;46820:223::-;46960:34;46956:1;46948:6;46944:14;46937:58;47029:6;47024:2;47016:6;47012:15;47005:31;46820:223;:::o;47049:175::-;47189:27;47185:1;47177:6;47173:14;47166:51;47049:175;:::o;47230:231::-;47370:34;47366:1;47358:6;47354:14;47347:58;47439:14;47434:2;47426:6;47422:15;47415:39;47230:231;:::o;47467:243::-;47607:34;47603:1;47595:6;47591:14;47584:58;47676:26;47671:2;47663:6;47659:15;47652:51;47467:243;:::o;47716:229::-;47856:34;47852:1;47844:6;47840:14;47833:58;47925:12;47920:2;47912:6;47908:15;47901:37;47716:229;:::o;47951:228::-;48091:34;48087:1;48079:6;48075:14;48068:58;48160:11;48155:2;48147:6;48143:15;48136:36;47951:228;:::o;48185:223::-;48325:34;48321:1;48313:6;48309:14;48302:58;48394:6;48389:2;48381:6;48377:15;48370:31;48185:223;:::o;48414:182::-;48554:34;48550:1;48542:6;48538:14;48531:58;48414:182;:::o;48602:227::-;48742:34;48738:1;48730:6;48726:14;48719:58;48811:10;48806:2;48798:6;48794:15;48787:35;48602:227;:::o;48835:231::-;48975:34;48971:1;48963:6;48959:14;48952:58;49044:14;49039:2;49031:6;49027:15;49020:39;48835:231;:::o;49072:182::-;49212:34;49208:1;49200:6;49196:14;49189:58;49072:182;:::o;49260:173::-;49400:25;49396:1;49388:6;49384:14;49377:49;49260:173;:::o;49439:161::-;49579:13;49575:1;49567:6;49563:14;49556:37;49439:161;:::o;49606:234::-;49746:34;49742:1;49734:6;49730:14;49723:58;49815:17;49810:2;49802:6;49798:15;49791:42;49606:234;:::o;49846:220::-;49986:34;49982:1;49974:6;49970:14;49963:58;50055:3;50050:2;50042:6;50038:15;50031:28;49846:220;:::o;50072:114::-;;:::o;50192:170::-;50332:22;50328:1;50320:6;50316:14;50309:46;50192:170;:::o;50368:236::-;50508:34;50504:1;50496:6;50492:14;50485:58;50577:19;50572:2;50564:6;50560:15;50553:44;50368:236;:::o;50610:169::-;50750:21;50746:1;50738:6;50734:14;50727:45;50610:169;:::o;50785:122::-;50858:24;50876:5;50858:24;:::i;:::-;50851:5;50848:35;50838:63;;50897:1;50894;50887:12;50838:63;50785:122;:::o;50913:116::-;50983:21;50998:5;50983:21;:::i;:::-;50976:5;50973:32;50963:60;;51019:1;51016;51009:12;50963:60;50913:116;:::o;51035:122::-;51108:24;51126:5;51108:24;:::i;:::-;51101:5;51098:35;51088:63;;51147:1;51144;51137:12;51088:63;51035:122;:::o;51163:120::-;51235:23;51252:5;51235:23;:::i;:::-;51228:5;51225:34;51215:62;;51273:1;51270;51263:12;51215:62;51163:120;:::o;51289:122::-;51362:24;51380:5;51362:24;:::i;:::-;51355:5;51352:35;51342:63;;51401:1;51398;51391:12;51342:63;51289:122;:::o

Swarm Source

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