ETH Price: $3,271.75 (-4.07%)
Gas: 17 Gwei

Cleo Canna Club (CCC)
 

Overview

TokenID

2858

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
CleoCannaClub

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-13
*/

// SPDX-License-Identifier: MIT
// 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/cleomint.sol


pragma solidity ^0.8.9;



interface ICLEO {
    function balanceOf(address owner) external view returns (uint);
    function burn(address account, uint amount) external;
}

interface ICleoStake {
    function randomCobraOwner() external returns (address);
    function addTokensToStake(address account, uint16[] calldata tokenIds) external;
    function _addToMapping(uint tokenId) external;
}

contract CleoCannaClub is ERC721, Ownable {
    using Strings for uint256;
    uint public MAX_TOKENS = 39999;
    uint public MINT_PER_TX_LIMIT = 20;

    uint public tokensMinted = 0;
    uint16 public phase = 0;
    uint16 public cobrasStolen = 0;
    uint16 public cleosStolen = 0;
    uint16 public cobrasMinted = 0;
    uint16 public cleosMinted = 0;

    //payment splitters
    address payable public PrimarySplitter;
    address payable public SecondarySplitter;
    

    bool private _paused = true;
    bool public isWhiteListActive = false;

    mapping(uint16 => uint) public phasePrice;
    mapping(address => uint) private _whiteList;

    ICleoStake public cleoStake;
    ICLEO public CLEO;

    string private _apiURI = "https://cleo10k.s3.amazonaws.com/json/";
    string public baseExtension = ".json";
    mapping(uint16 => bool) private _isCobra;
    
    uint16[] private _availableTokens;
    uint16 private _randomIndex = 0;
    uint private _randomCalls = 0;

    mapping(uint16 => address) private _randomSource;

    event TokenStolen(address owner, uint16 tokenId, address thief);

    constructor(address _primarySplitter) ERC721("Cleo Canna Club", "CCC") {
        PrimarySplitter = payable(_primarySplitter);
        // How many we mint to ourselves can pick which ones we want

        // Phase 1 is available in the beginning
        switchToSalePhase(0, true);

        phasePrice[0] = 0.00 ether;

        // Set default price for each phase
        phasePrice[1] = 0.069 ether;
        // These phases will mint using cleocoin
        phasePrice[2] = 20000 ether;
        phasePrice[3] = 40000 ether;
        phasePrice[4] = 80000 ether;
        
        // Fill random source addresses
        _randomSource[0] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
        _randomSource[1] = 0x3cD751E6b0078Be393132286c442345e5DC49699;
        _randomSource[2] = 0xb5d85CBf7cB3EE0D56b3bB207D5Fc4B82f43F511;
        _randomSource[3] = 0xC098B2a3Aa256D2140208C3de6543aAEf5cd3A94;
        _randomSource[4] = 0x28C6c06298d514Db089934071355E5743bf21d60;
        _randomSource[5] = 0x2FAF487A4414Fe77e2327F0bf4AE2a264a776AD2;
        _randomSource[6] = 0x267be1C1D684F78cb4F6a176C4911b741E4Ffdc0;
    }

    function setMaxTokens(uint  _newMax) external onlyOwner {
        MAX_TOKENS = _newMax;
    }
    function setMintTxLimit(uint _newLimit) external onlyOwner {
        MINT_PER_TX_LIMIT = _newLimit;
    }
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function setPaused(bool _state) external onlyOwner {
        _paused = _state;
    }

    function setIWhiteListActive(bool _isWhiteListActive) external onlyOwner {
        isWhiteListActive = _isWhiteListActive;
    }

    function setWhiteList(address[] calldata addresses, uint8 numAllowedToMint) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            _whiteList[addresses[i]] = numAllowedToMint;
            }
    }

    function addAvailableTokens(uint16 _from, uint16 _to) public onlyOwner {
        internalAddTokens(_from, _to);
    }

    function internalAddTokens(uint16 _from, uint16 _to) internal {
        for (uint16 i = _from; i <= _to; i++) {
            _availableTokens.push(i);
        }
    }

    function switchToSalePhase(uint16 _phase, bool _setTokens) public onlyOwner {
        phase = _phase;

        if (!_setTokens) {
            return;
        }
        if(phase == 0){
            internalAddTokens(1, 2222);
        } else if (phase == 1) {
            internalAddTokens(2223, 9999);
        } else if (phase == 2) {
            internalAddTokens(10000, 19999);
        } else if (phase == 3) {
            internalAddTokens(20000, 29999);
        } else if (phase == 4) {
            internalAddTokens(30000, 39999);
        }
    }

    function giveAwayRandom(uint _amount, address _address) public onlyOwner {
        require(tokensMinted + _amount <= MAX_TOKENS, "All tokens minted");
        require(_availableTokens.length > 0, "All tokens for this Phase are already sold");

        for (uint i = 0; i < _amount; i++) {
            uint16 tokenId = getTokenToBeMinted();
            if (isCobra(tokenId) == false) {
                cleoStake._addToMapping(tokenId);
            }
            _safeMint(_address, tokenId);
            tokensMinted++;
        }
    }

    function giveAwayId(uint16 _id, address _address) public onlyOwner {
        require(tokensMinted + 1  <= MAX_TOKENS, "All tokens minted");
        require(_availableTokens.length > 0, "All tokens for this Phase are already sold");
        if (isCobra(_id) == false) {
                cleoStake._addToMapping(_id);
        }
        _safeMint(_address, _id);
        tokensMinted++;
    }

    function mint(uint _amount, bool _stake) public payable whenNotPaused {
        require(tx.origin == msg.sender, "Only EOA");
        require(tokensMinted + _amount <= MAX_TOKENS, "All tokens minted");
        require(_amount > 0 && _amount <= MINT_PER_TX_LIMIT, "Invalid mint amount");
        require(_availableTokens.length > 0, "All tokens for this Phase are already sold");

        uint totalPennyCost = 0;
        if (phase == 1) {
            // Paid mint
            require(mintPrice(_amount) == msg.value, "Invalid payment amount");
        } else {
            // Mint via Penny token burn
            require(msg.value == 0, "Now minting is done via Penny");
            totalPennyCost = mintPrice(_amount);
            require(CLEO.balanceOf(msg.sender) >= totalPennyCost, "Not enough Penny");
        }

        if (totalPennyCost > 0) {
            CLEO.burn(msg.sender, totalPennyCost);
        }

        tokensMinted += _amount;
        uint16[] memory tokenIds = _stake ? new uint16[](_amount) : new uint16[](0);
        for (uint i = 0; i < _amount; i++) {
            address recipient = selectRecipient();
            if (phase != 1 || phase != 0 ) {
                updateRandomIndex();
            }

            uint16 tokenId = getTokenToBeMinted();
            

            if (isCobra(tokenId)) {
                cobrasMinted += 1;
            }
            if (isCobra(tokenId) == false) {
                cleoStake._addToMapping(tokenId);
            }

            if (recipient != msg.sender) {
                isCobra(tokenId) ? cobrasStolen += 1 : cleosStolen += 1;
                emit TokenStolen(msg.sender, tokenId, recipient);
            }
            
            if (!_stake || recipient != msg.sender) {
                _safeMint(recipient, tokenId);
            } else {
                _safeMint(address(cleoStake), tokenId);
                tokenIds[i] = tokenId;
            }
        }
        if (_stake) {
            cleoStake.addTokensToStake(msg.sender, tokenIds);
        }
    }

    function whitlistMint(uint _amount, bool _stake) public payable {
        require(isWhiteListActive, "Whitlelist is not active");
        require(_amount <= _whiteList[msg.sender], "Exceeded max available to purchase");
        require(tx.origin == msg.sender, "Only EOA");
        require(tokensMinted + _amount <= MAX_TOKENS, "Purhase Would exeeed max tokens");
        require(_amount > 0 && _amount <= MINT_PER_TX_LIMIT, "Invalid mint amount");
        require(_availableTokens.length > 0, "All tokens for this Phase are already sold");

        
        //require(ts + numberOfTokens <= MAX_SUPPLY, "Purchase would exceed max tokens");
        //require(PRICE_PER_TOKEN * numberOfTokens <= msg.value, "Ether value sent is not correct");

        _whiteList[msg.sender] -= _amount;

        uint totalPennyCost = 0;
        if (phase == 1 || phase == 0) {
            // Paid mint
            require(mintPrice(_amount) == msg.value, "Invalid payment amount");
        } else {
            // Mint via Penny token burn
            require(msg.value == 0, "Can only mint using $CLEO");
            totalPennyCost = mintPrice(_amount);
            require(CLEO.balanceOf(msg.sender) >= totalPennyCost, "Not enough $CLEO");
        }

        if (totalPennyCost > 0) {
            CLEO.burn(msg.sender, totalPennyCost);
        }

        tokensMinted += _amount;
        uint16[] memory tokenIds = _stake ? new uint16[](_amount) : new uint16[](0);
        for (uint i = 0; i < _amount; i++) {
            address recipient = selectRecipient();
            if (phase != 1) {
                updateRandomIndex();
            }

            uint16 tokenId = getTokenToBeMinted();
            

            if (isCobra(tokenId)) {
                cobrasMinted += 1;
            }
            if (isCobra(tokenId) == false) {
                cleoStake._addToMapping(tokenId);
            }

            if (recipient != msg.sender) {
                isCobra(tokenId) ? cobrasStolen += 1 : cleosStolen += 1;
                emit TokenStolen(msg.sender, tokenId, recipient);
            }
            
            if (!_stake || recipient != msg.sender) {
                _safeMint(recipient, tokenId);
            } else {
                _safeMint(address(cleoStake), tokenId);
                tokenIds[i] = tokenId;
            }
        }
        if (_stake) {
            cleoStake.addTokensToStake(msg.sender, tokenIds);
        }
    }

    function selectRecipient() internal returns (address) {
        if (phase == 1 || phase == 0) {
            return msg.sender; // During ETH sale there is no chance to steal NTF
        }

        // 10% chance to steal NTF
        if (getSomeRandomNumber(cobrasMinted, 100) >= 10) {
            return msg.sender; // 90%
        }

        address thief = cleoStake.randomCobraOwner();
        if (thief == address(0x0)) {
            return msg.sender;
        }
        return thief;
    }

    function mintPrice(uint _amount) public view returns (uint) {
        return _amount * phasePrice[phase];
    }

    function isCobra(uint16 id) public view returns (bool) {
        return _isCobra[id];
    }

    function getTokenToBeMinted() private returns (uint16) {
        uint random = getSomeRandomNumber(_availableTokens.length, _availableTokens.length);
        uint16 tokenId = _availableTokens[random];

        _availableTokens[random] = _availableTokens[_availableTokens.length - 1];
        _availableTokens.pop();
        return tokenId;
    }
    
    function updateRandomIndex() internal {
        _randomIndex += 1;
        _randomCalls += 1;
        if (_randomIndex > 6) _randomIndex = 0;
    }

    function getSomeRandomNumber(uint _seed, uint _limit) internal view returns (uint16) {
        uint extra = 0;
        for (uint16 i = 0; i < 7; i++) {
            extra += _randomSource[_randomIndex].balance;
        }

        uint random = uint(
            keccak256(
                abi.encodePacked(
                    _seed,
                    blockhash(block.number - 1),
                    block.coinbase,
                    block.difficulty,
                    msg.sender,
                    tokensMinted,
                    extra,
                    _randomCalls,
                    _randomIndex
                )
            )
        );

        return uint16(random % _limit);
    }

    function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
        require(
        _exists(tokenId),
        "ERC721Metadata: URI query for nonexistent token"
    );
    
    string memory currentBaseURI = _apiURI;
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }
    function shuffleSeeds(uint _seed, uint _max) external onlyOwner {
        uint shuffleCount = getSomeRandomNumber(_seed, _max);
        _randomIndex = uint16(shuffleCount);
        for (uint i = 0; i < shuffleCount; i++) {
            updateRandomIndex();
        }
    }

    function setCobraId(uint16 id, bool special) external onlyOwner {
        _isCobra[id] = special;
    }

    function setCobraIds(uint16[] calldata ids) external onlyOwner {
        for (uint i = 0; i < ids.length; i++) {
            _isCobra[ids[i]] = true;
        }
    }

    function setCleoStake(address _stake) external onlyOwner {
        cleoStake = ICleoStake(_stake);
    }

    function setCleo(address _cleo) external onlyOwner {
        CLEO = ICLEO(_cleo);
    }

    function changePhasePrice(uint16 _phase, uint _weiPrice) external onlyOwner {
        phasePrice[_phase] = _weiPrice;
    }

    function transferFrom(address from, address to, uint tokenId) public virtual override {
        // Hardcode the Manager's approval so that users don't have to waste gas approving
        if (_msgSender() != address(cleoStake))
            require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }

    function totalSupply() external view returns (uint) {
        return tokensMinted;
    }

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

    function setBaseURI(string memory uri) external onlyOwner {
        _apiURI = uri;
    }

    function changeRandomSource(uint16 _id, address _address) external onlyOwner {
        _randomSource[_id] = _address;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_primarySplitter","type":"address"}],"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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"address","name":"thief","type":"address"}],"name":"TokenStolen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CLEO","outputs":[{"internalType":"contract ICLEO","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PER_TX_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PrimarySplitter","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SecondarySplitter","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_from","type":"uint16"},{"internalType":"uint16","name":"_to","type":"uint16"}],"name":"addAvailableTokens","outputs":[],"stateMutability":"nonpayable","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_phase","type":"uint16"},{"internalType":"uint256","name":"_weiPrice","type":"uint256"}],"name":"changePhasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_address","type":"address"}],"name":"changeRandomSource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cleoStake","outputs":[{"internalType":"contract ICleoStake","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cleosMinted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cleosStolen","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cobrasMinted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cobrasStolen","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_address","type":"address"}],"name":"giveAwayId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"giveAwayRandom","outputs":[],"stateMutability":"nonpayable","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":"uint16","name":"id","type":"uint16"}],"name":"isCobra","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhiteListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"phase","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"phasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_cleo","type":"address"}],"name":"setCleo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stake","type":"address"}],"name":"setCleoStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"bool","name":"special","type":"bool"}],"name":"setCobraId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"setCobraIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isWhiteListActive","type":"bool"}],"name":"setIWhiteListActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMaxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setMintTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint8","name":"numAllowedToMint","type":"uint8"}],"name":"setWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"shuffleSeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_phase","type":"uint16"},{"internalType":"bool","name":"_setTokens","type":"bool"}],"name":"switchToSalePhase","outputs":[],"stateMutability":"nonpayable","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":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"whitlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

619c3f60075560146008556000600955600a80546001600160501b0319169055600b805461ffff60a01b1916600160a01b17905560e060405260266080818152906200453260a03980516200005d9160109160209091019062000618565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200008c9160119162000618565b506014805461ffff191690556000601555348015620000aa57600080fd5b506040516200455838038062004558833981016040819052620000cd91620006be565b604080518082018252600f81526e21b632b79021b0b737309021b63ab160891b60208083019182528351808501909452600384526243434360e81b9084015281519192916200011f9160009162000618565b5080516200013590600190602084019062000618565b505050620001526200014c6200042a60201b60201c565b6200042e565b600a8054600160501b600160f01b0319166a01000000000000000000006001600160a01b038416021790556200018b6000600162000480565b5060007f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e881905566f52322698080007fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c5569043c33c19375648000007f5d6016397a73f5e079297ac5a36fef17b4d9c3831618e63ab105738020ddd72055690878678326eac90000007fc0da782485e77ae272268ae0a3ff44c1552ecb60b3743924de17a815e0a3cfd7556910f0cf064dd5920000007f5b84bb9e0f5aa9cc45a8bb66468db5d4816d1e75ff86b5e1f1dd8d144dab80975560166020527f0263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153dd80546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179091557f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf4980548216733cd751e6b0078be393132286c442345e5dc496991790557fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab28856488054821673b5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f5111790557ff06d282f967055cb1eee17e04aa005b9682a620f4bbcfaee55ba78607a3d87ae8054821673c098b2a3aa256d2140208c3de6543aaef5cd3a941790557fec061709de2491458f4c981032059d7d19b0e55f45018bac6b3e660bdc959a59805482167328c6c06298d514db089934071355e5743bf21d601790557f5696377e725b42a372ecc45f0fbdab5e9555865aef54619ad9381892f667bbf080548216732faf487a4414fe77e2327f0bf4ae2a264a776ad217905560069091527fc6a239f207aea309a1b4879cb5411b8facfc2bc1e4cc4717ff2598676c399b5f805490911673267be1c1d684f78cb4f6a176c4911b741e4ffdc01790556200075e565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620004df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b600a805461ffff191661ffff841617905580620004fa575050565b600a5461ffff1662000519576200051560016108ae62000594565b5050565b600a5461ffff16600114156200053957620005156108af61270f62000594565b600a5461ffff1660021415620005595762000515612710614e1f62000594565b600a5461ffff1660031415620005795762000515614e2061752f62000594565b600a5461ffff1660041415620005155762000515617530619c3f5b815b8161ffff168161ffff16116200061357601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09060108204018054600f9092166002026101000a61ffff8181021990931692841602919091179055806200060a81620006f0565b91505062000596565b505050565b828054620006269062000721565b90600052602060002090601f0160209004810192826200064a576000855562000695565b82601f106200066557805160ff191683800117855562000695565b8280016001018555821562000695579182015b828111156200069557825182559160200191906001019062000678565b50620006a3929150620006a7565b5090565b5b80821115620006a35760008155600101620006a8565b600060208284031215620006d157600080fd5b81516001600160a01b0381168114620006e957600080fd5b9392505050565b600061ffff808316818114156200071757634e487b7160e01b600052601160045260246000fd5b6001019392505050565b600181811c908216806200073657607f821691505b602082108114156200075857634e487b7160e01b600052602260045260246000fd5b50919050565b613dc4806200076e6000396000f3fe6080604052600436106103505760003560e01c80636de9f32b116101c6578063c1dc9a23116100f7578063e985e9c511610095578063f1d2ac0e1161006f578063f1d2ac0e146109f8578063f2fde38b14610a18578063f47c84c514610a38578063f6dc6bf814610a4e57600080fd5b8063e985e9c51461096f578063ea9e8e1d146109b8578063efb3d008146109d857600080fd5b8063c9150a9e116100d1578063c9150a9e146108ef578063cccd7a2b1461091c578063dc18a0571461092f578063e6a72acf1461094f57600080fd5b8063c1dc9a2314610886578063c6682862146108ba578063c87b56dd146108cf57600080fd5b806392b2422911610164578063a22cb4651161013e578063a22cb4651461080b578063b1c9fe6e1461082b578063b88d4fde14610846578063bee20bde1461086657600080fd5b806392b24229146107af57806395d89b41146107cf578063a030394d146107e457600080fd5b806372c8273e116101a057806372c8273e1461073157806378aea4101461075157806386b854c8146107715780638da5cb5b1461079157600080fd5b80636de9f32b146106e657806370a08231146106fc578063715018a61461071c57600080fd5b80633d472937116102a05780635b458b801161023e578063658b874711610218578063658b87471461066f5780636685d6781461068f57806367f68fac146106b05780636cfd4f15146106c357600080fd5b80635b458b80146106095780635c975abb146106305780636352211e1461064f57600080fd5b806345d510071161027a57806345d51007146105925780634efc09f5146105a857806355f804b3146105c8578063573f5dae146105e857600080fd5b80633d472937146105325780634139e0921461055257806342842e0e1461057257600080fd5b806311e776fe1161030d57806323b872dd116102e757806323b872dd146104a55780632a4793f8146104c55780632d0daa30146104e55780633ccfd60b1461051d57600080fd5b806311e776fe1461044657806316c38b3c1461046657806318160ddd1461048657600080fd5b806301ffc9a71461035557806302621aa21461038a57806306fdde03146103ac578063081812fc146103ce578063095ea7b3146104065780630a16be3414610426575b600080fd5b34801561036157600080fd5b506103756103703660046133f9565b610a6e565b60405190151581526020015b60405180910390f35b34801561039657600080fd5b506103aa6103a536600461342b565b610ac0565b005b3480156103b857600080fd5b506103c1610b15565b60405161038191906134a0565b3480156103da57600080fd5b506103ee6103e93660046134b3565b610ba7565b6040516001600160a01b039091168152602001610381565b34801561041257600080fd5b506103aa6104213660046134cc565b610c3c565b34801561043257600080fd5b506103aa61044136600461351a565b610d52565b34801561045257600080fd5b506103aa6104613660046134b3565b610da2565b34801561047257600080fd5b506103aa61048136600461354d565b610dd1565b34801561049257600080fd5b506009545b604051908152602001610381565b3480156104b157600080fd5b506103aa6104c0366004613568565b610e19565b3480156104d157600080fd5b506103aa6104e036600461342b565b610e65565b3480156104f157600080fd5b50600a5461050a906601000000000000900461ffff1681565b60405161ffff9091168152602001610381565b34801561052957600080fd5b506103aa610eb1565b34801561053e57600080fd5b506103aa61054d36600461351a565b610f45565b34801561055e57600080fd5b50600e546103ee906001600160a01b031681565b34801561057e57600080fd5b506103aa61058d366004613568565b611019565b34801561059e57600080fd5b5061049760085481565b3480156105b457600080fd5b506103aa6105c33660046135a9565b611034565b3480156105d457600080fd5b506103aa6105e3366004613651565b611075565b3480156105f457600080fd5b50600b5461037590600160a81b900460ff1681565b34801561061557600080fd5b50600a5461050a9068010000000000000000900461ffff1681565b34801561063c57600080fd5b50600b54600160a01b900460ff16610375565b34801561065b57600080fd5b506103ee61066a3660046134b3565b6110b2565b34801561067b57600080fd5b50600b546103ee906001600160a01b031681565b34801561069b57600080fd5b50600a5461050a9062010000900461ffff1681565b6103aa6106be36600461369a565b611129565b3480156106cf57600080fd5b50600a5461050a90640100000000900461ffff1681565b3480156106f257600080fd5b5061049760095481565b34801561070857600080fd5b5061049761071736600461342b565b6117c4565b34801561072857600080fd5b506103aa61184b565b34801561073d57600080fd5b506103aa61074c3660046136bd565b611881565b34801561075d57600080fd5b506103aa61076c36600461354d565b6119ca565b34801561077d57600080fd5b506103aa61078c3660046136ed565b611a12565b34801561079d57600080fd5b506006546001600160a01b03166103ee565b3480156107bb57600080fd5b506103aa6107ca366004613719565b611a70565b3480156107db57600080fd5b506103c1611ae2565b3480156107f057600080fd5b50600a546103ee90600160501b90046001600160a01b031681565b34801561081757600080fd5b506103aa61082636600461373b565b611af1565b34801561083757600080fd5b50600a5461050a9061ffff1681565b34801561085257600080fd5b506103aa610861366004613759565b611afc565b34801561087257600080fd5b50600f546103ee906001600160a01b031681565b34801561089257600080fd5b506103756108a13660046137d9565b61ffff1660009081526012602052604090205460ff1690565b3480156108c657600080fd5b506103c1611b2e565b3480156108db57600080fd5b506103c16108ea3660046134b3565b611bbc565b3480156108fb57600080fd5b5061049761090a3660046137d9565b600c6020526000908152604090205481565b6103aa61092a36600461369a565b611d1d565b34801561093b57600080fd5b506103aa61094a366004613840565b61240d565b34801561095b57600080fd5b5061049761096a3660046134b3565b6124a4565b34801561097b57600080fd5b5061037561098a366004613882565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156109c457600080fd5b506103aa6109d33660046136ed565b6124c4565b3480156109e457600080fd5b506103aa6109f33660046138a0565b6125e0565b348015610a0457600080fd5b506103aa610a133660046134b3565b612614565b348015610a2457600080fd5b506103aa610a3336600461342b565b612643565b348015610a4457600080fd5b5061049760075481565b348015610a5a57600080fd5b506103aa610a693660046138ca565b6126db565b60006001600160e01b031982166380ac58cd60e01b1480610a9f57506001600160e01b03198216635b5e139f60e01b145b80610aba57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b03163314610af35760405162461bcd60e51b8152600401610aea90613927565b60405180910390fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b606060008054610b249061395c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b509061395c565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c205760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aea565b506000908152600460205260409020546001600160a01b031690565b6000610c47826110b2565b9050806001600160a01b0316836001600160a01b03161415610cb55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aea565b336001600160a01b0382161480610cd15750610cd1813361098a565b610d435760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aea565b610d4d838361276b565b505050565b6006546001600160a01b03163314610d7c5760405162461bcd60e51b8152600401610aea90613927565b61ffff919091166000908152601260205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610dcc5760405162461bcd60e51b8152600401610aea90613927565b600755565b6006546001600160a01b03163314610dfb5760405162461bcd60e51b8152600401610aea90613927565b600b8054911515600160a01b0260ff60a01b19909216919091179055565b600e546001600160a01b0316336001600160a01b031614610e5a57610e3e33826127d9565b610e5a5760405162461bcd60e51b8152600401610aea90613997565b610d4d8383836128d0565b6006546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610aea90613927565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314610edb5760405162461bcd60e51b8152600401610aea90613927565b600a54604051600091600160501b90046001600160a01b03169047908381818185875af1925050503d8060008114610f2f576040519150601f19603f3d011682016040523d82523d6000602084013e610f34565b606091505b5050905080610f4257600080fd5b50565b6006546001600160a01b03163314610f6f5760405162461bcd60e51b8152600401610aea90613927565b600a805461ffff191661ffff841617905580610f89575050565b600a5461ffff16610fa557610fa160016108ae612a6c565b5050565b600a5461ffff1660011415610fc257610fa16108af61270f612a6c565b600a5461ffff1660021415610fdf57610fa1612710614e1f612a6c565b600a5461ffff1660031415610ffc57610fa1614e2061752f612a6c565b600a5461ffff1660041415610fa157610fa1617530619c3f612a6c565b610d4d83838360405180602001604052806000815250611afc565b6006546001600160a01b0316331461105e5760405162461bcd60e51b8152600401610aea90613927565b61ffff9091166000908152600c6020526040902055565b6006546001600160a01b0316331461109f5760405162461bcd60e51b8152600401610aea90613927565b8051610fa190601090602084019061334a565b6000818152600260205260408120546001600160a01b031680610aba5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aea565b600b54600160a01b900460ff16156111765760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610aea565b3233146111b05760405162461bcd60e51b81526020600482015260086024820152674f6e6c7920454f4160c01b6044820152606401610aea565b600754826009546111c191906139fe565b11156111df5760405162461bcd60e51b8152600401610aea90613a16565b6000821180156111f157506008548211155b6112335760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b6044820152606401610aea565b6013546112525760405162461bcd60e51b8152600401610aea90613a41565b600a5460009061ffff16600114156112b9573461126e846124a4565b146112b45760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c185e5b595b9d08185b5bdd5b9d60521b6044820152606401610aea565b6113d1565b34156113075760405162461bcd60e51b815260206004820152601d60248201527f4e6f77206d696e74696e6720697320646f6e65207669612050656e6e790000006044820152606401610aea565b611310836124a4565b600f546040516370a0823160e01b815233600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561135857600080fd5b505afa15801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190613a8b565b10156113d15760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f7567682050656e6e7960801b6044820152606401610aea565b801561143c57600f54604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b15801561142357600080fd5b505af1158015611437573d6000803e3d6000fd5b505050505b826009600082825461144e91906139fe565b90915550600090508261146f576040805160008152602081019091526114b3565b8367ffffffffffffffff811115611488576114886135c5565b6040519080825280602002602001820160405280156114b1578160200160208202803683370190505b505b905060005b848110156117525760006114ca612ae7565b600a5490915061ffff1660011415806114e85750600a5461ffff1615155b156114f5576114f5612bd2565b60006114ff612c3c565b905061151e8161ffff1660009081526012602052604090205460ff1690565b1561155e576001600a60068282829054906101000a900461ffff166115439190613aa4565b92506101000a81548161ffff021916908361ffff1602179055505b61ffff811660009081526012602052604090205460ff166115db57600e54604051638327dd8d60e01b815261ffff831660048201526001600160a01b0390911690638327dd8d90602401600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050505b6001600160a01b03821633146116cb5761ffff811660009081526012602052604090205460ff16611644576001600a60048282829054906101000a900461ffff166116269190613aa4565b92506101000a81548161ffff021916908361ffff160217905561167e565b6001600a60028282829054906101000a900461ffff166116649190613aa4565b92506101000a81548161ffff021916908361ffff16021790555b506040805133815261ffff831660208201526001600160a01b0384168183015290517f5c8f955114cce6fe18920ee4bb38271b9a0f5579589f3767ccf22eb6484e06109181900360600190a15b8515806116e157506001600160a01b0382163314155b156116f9576116f4828261ffff16612d5c565b61173d565b600e54611713906001600160a01b031661ffff8316612d5c565b8084848151811061172657611726613aca565b602002602001019061ffff16908161ffff16815250505b5050808061174a90613ae0565b9150506114b8565b5082156117be57600e5460405163710fa65f60e11b81526001600160a01b039091169063e21f4cbe9061178b9033908590600401613afb565b600060405180830381600087803b1580156117a557600080fd5b505af11580156117b9573d6000803e3d6000fd5b505050505b50505050565b60006001600160a01b03821661182f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aea565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146118755760405162461bcd60e51b8152600401610aea90613927565b61187f6000612d76565b565b6006546001600160a01b031633146118ab5760405162461bcd60e51b8152600401610aea90613927565b600754826009546118bc91906139fe565b11156118da5760405162461bcd60e51b8152600401610aea90613a16565b6013546118f95760405162461bcd60e51b8152600401610aea90613a41565b60005b82811015610d4d57600061190e612c3c565b905061192d8161ffff1660009081526012602052604090205460ff1690565b61199357600e54604051638327dd8d60e01b815261ffff831660048201526001600160a01b0390911690638327dd8d90602401600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b505050505b6119a1838261ffff16612d5c565b600980549060006119b183613ae0565b91905055505080806119c290613ae0565b9150506118fc565b6006546001600160a01b031633146119f45760405162461bcd60e51b8152600401610aea90613927565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b6006546001600160a01b03163314611a3c5760405162461bcd60e51b8152600401610aea90613927565b61ffff91909116600090815260166020526040902080546001600160a01b0319166001600160a01b03909216919091179055565b6006546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610aea90613927565b6000611aa68383612dc8565b6014805461ffff191661ffff929092169182179055905060005b818110156117be57611ad0612bd2565b80611ada81613ae0565b915050611ac0565b606060018054610b249061395c565b610fa1338383612ec8565b611b0633836127d9565b611b225760405162461bcd60e51b8152600401610aea90613997565b6117be84848484612f97565b60118054611b3b9061395c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b679061395c565b8015611bb45780601f10611b8957610100808354040283529160200191611bb4565b820191906000526020600020905b815481529060010190602001808311611b9757829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b0316611c3b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aea565b600060108054611c4a9061395c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c769061395c565b8015611cc35780601f10611c9857610100808354040283529160200191611cc3565b820191906000526020600020905b815481529060010190602001808311611ca657829003601f168201915b505050505090506000815111611ce85760405180602001604052806000815250611d16565b80611cf284612fca565b6011604051602001611d0693929190613b55565b6040516020818303038152906040525b9392505050565b600b54600160a81b900460ff16611d765760405162461bcd60e51b815260206004820152601860248201527f576869746c656c697374206973206e6f742061637469766500000000000000006044820152606401610aea565b336000908152600d6020526040902054821115611de05760405162461bcd60e51b815260206004820152602260248201527f4578636565646564206d617820617661696c61626c6520746f20707572636861604482015261736560f01b6064820152608401610aea565b323314611e1a5760405162461bcd60e51b81526020600482015260086024820152674f6e6c7920454f4160c01b6044820152606401610aea565b60075482600954611e2b91906139fe565b1115611e795760405162461bcd60e51b815260206004820152601f60248201527f5075726861736520576f756c6420657865656564206d617820746f6b656e73006044820152606401610aea565b600082118015611e8b57506008548211155b611ecd5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b6044820152606401610aea565b601354611eec5760405162461bcd60e51b8152600401610aea90613a41565b336000908152600d602052604081208054849290611f0b908490613c19565b9091555050600a5460009061ffff1660011480611f2c5750600a5461ffff16155b15611f865734611f3b846124a4565b14611f815760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c185e5b595b9d08185b5bdd5b9d60521b6044820152606401610aea565b61209e565b3415611fd45760405162461bcd60e51b815260206004820152601960248201527f43616e206f6e6c79206d696e74207573696e672024434c454f000000000000006044820152606401610aea565b611fdd836124a4565b600f546040516370a0823160e01b815233600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561202557600080fd5b505afa158015612039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205d9190613a8b565b101561209e5760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f7567682024434c454f60801b6044820152606401610aea565b801561210957600f54604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b1580156120f057600080fd5b505af1158015612104573d6000803e3d6000fd5b505050505b826009600082825461211b91906139fe565b90915550600090508261213c57604080516000815260208101909152612180565b8367ffffffffffffffff811115612155576121556135c5565b60405190808252806020026020018201604052801561217e578160200160208202803683370190505b505b905060005b84811015611752576000612197612ae7565b600a5490915061ffff166001146121b0576121b0612bd2565b60006121ba612c3c565b90506121d98161ffff1660009081526012602052604090205460ff1690565b15612219576001600a60068282829054906101000a900461ffff166121fe9190613aa4565b92506101000a81548161ffff021916908361ffff1602179055505b61ffff811660009081526012602052604090205460ff1661229657600e54604051638327dd8d60e01b815261ffff831660048201526001600160a01b0390911690638327dd8d90602401600060405180830381600087803b15801561227d57600080fd5b505af1158015612291573d6000803e3d6000fd5b505050505b6001600160a01b03821633146123865761ffff811660009081526012602052604090205460ff166122ff576001600a60048282829054906101000a900461ffff166122e19190613aa4565b92506101000a81548161ffff021916908361ffff1602179055612339565b6001600a60028282829054906101000a900461ffff1661231f9190613aa4565b92506101000a81548161ffff021916908361ffff16021790555b506040805133815261ffff831660208201526001600160a01b0384168183015290517f5c8f955114cce6fe18920ee4bb38271b9a0f5579589f3767ccf22eb6484e06109181900360600190a15b85158061239c57506001600160a01b0382163314155b156123b4576123af828261ffff16612d5c565b6123f8565b600e546123ce906001600160a01b031661ffff8316612d5c565b808484815181106123e1576123e1613aca565b602002602001019061ffff16908161ffff16815250505b5050808061240590613ae0565b915050612185565b6006546001600160a01b031633146124375760405162461bcd60e51b8152600401610aea90613927565b60005b81811015610d4d5760016012600085858581811061245a5761245a613aca565b905060200201602081019061246f91906137d9565b61ffff1681526020810191909152604001600020805460ff19169115159190911790558061249c81613ae0565b91505061243a565b600a5461ffff166000908152600c6020526040812054610aba9083613c30565b6006546001600160a01b031633146124ee5760405162461bcd60e51b8152600401610aea90613927565b6007546009546124ff9060016139fe565b111561251d5760405162461bcd60e51b8152600401610aea90613a16565b60135461253c5760405162461bcd60e51b8152600401610aea90613a41565b61ffff821660009081526012602052604090205460ff166125b957600e54604051638327dd8d60e01b815261ffff841660048201526001600160a01b0390911690638327dd8d90602401600060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505050505b6125c7818361ffff16612d5c565b600980549060006125d783613ae0565b91905055505050565b6006546001600160a01b0316331461260a5760405162461bcd60e51b8152600401610aea90613927565b610fa18282612a6c565b6006546001600160a01b0316331461263e5760405162461bcd60e51b8152600401610aea90613927565b600855565b6006546001600160a01b0316331461266d5760405162461bcd60e51b8152600401610aea90613927565b6001600160a01b0381166126d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aea565b610f4281612d76565b6006546001600160a01b031633146127055760405162461bcd60e51b8152600401610aea90613927565b60005b828110156117be578160ff16600d600086868581811061272a5761272a613aca565b905060200201602081019061273f919061342b565b6001600160a01b031681526020810191909152604001600020558061276381613ae0565b915050612708565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127a0826110b2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166128525760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aea565b600061285d836110b2565b9050806001600160a01b0316846001600160a01b031614806128985750836001600160a01b031661288d84610ba7565b6001600160a01b0316145b806128c857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166128e3826110b2565b6001600160a01b0316146129475760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610aea565b6001600160a01b0382166129a95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aea565b6129b460008261276b565b6001600160a01b03831660009081526003602052604081208054600192906129dd908490613c19565b90915550506001600160a01b0382166000908152600360205260408120805460019290612a0b9084906139fe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b815b8161ffff168161ffff1611610d4d57601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09060108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580612adf81613c4f565b915050612a6e565b600a5460009061ffff1660011480612b035750600a5461ffff16155b15612b0d57503390565b600a8054612b2a906601000000000000900461ffff166064612dc8565b61ffff1610612b3857503390565b600e546040805163493e978960e01b815290516000926001600160a01b03169163493e978991600480830192602092919082900301818787803b158015612b7e57600080fd5b505af1158015612b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb69190613c71565b90506001600160a01b038116612bcd573391505090565b919050565b6014805460019190600090612bec90849061ffff16613aa4565b92506101000a81548161ffff021916908361ffff160217905550600160156000828254612c1991906139fe565b9091555050601454600661ffff909116111561187f576014805461ffff19169055565b6013546000908190612c4e9080612dc8565b61ffff169050600060138281548110612c6957612c69613aca565b90600052602060002090601091828204019190066002029054906101000a900461ffff16905060136001601380549050612ca39190613c19565b81548110612cb357612cb3613aca565b90600052602060002090601091828204019190066002029054906101000a900461ffff1660138381548110612cea57612cea613aca565b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506013805480612d2a57612d2a613c8e565b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905592915050565b610fa18282604051806020016040528060008152506130c8565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080805b60078161ffff161015612e185760145461ffff16600090815260166020526040902054612e04906001600160a01b031631836139fe565b915080612e1081613c4f565b915050612dcd565b50600084612e27600143613c19565b60095460155460145460408051602081019690965293409385019390935241606090811b6bffffffffffffffffffffffff19908116828701524460748701523390911b16609485015260a884019190915260c8830185905260e883015260f01b6001600160f01b03191661010882015261010a0160408051601f1981840301815291905280516020909101209050612ebf8482613cba565b95945050505050565b816001600160a01b0316836001600160a01b03161415612f2a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aea565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612fa28484846128d0565b612fae848484846130fb565b6117be5760405162461bcd60e51b8152600401610aea90613cce565b606081612fee5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613018578061300281613ae0565b91506130119050600a83613d20565b9150612ff2565b60008167ffffffffffffffff811115613033576130336135c5565b6040519080825280601f01601f19166020018201604052801561305d576020820181803683370190505b5090505b84156128c857613072600183613c19565b915061307f600a86613cba565b61308a9060306139fe565b60f81b81838151811061309f5761309f613aca565b60200101906001600160f81b031916908160001a9053506130c1600a86613d20565b9450613061565b6130d28383613208565b6130df60008484846130fb565b610d4d5760405162461bcd60e51b8152600401610aea90613cce565b60006001600160a01b0384163b156131fd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061313f903390899088908890600401613d34565b602060405180830381600087803b15801561315957600080fd5b505af1925050508015613189575060408051601f3d908101601f1916820190925261318691810190613d71565b60015b6131e3573d8080156131b7576040519150601f19603f3d011682016040523d82523d6000602084013e6131bc565b606091505b5080516131db5760405162461bcd60e51b8152600401610aea90613cce565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506128c8565b506001949350505050565b6001600160a01b03821661325e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aea565b6000818152600260205260409020546001600160a01b0316156132c35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aea565b6001600160a01b03821660009081526003602052604081208054600192906132ec9084906139fe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546133569061395c565b90600052602060002090601f01602090048101928261337857600085556133be565b82601f1061339157805160ff19168380011785556133be565b828001600101855582156133be579182015b828111156133be5782518255916020019190600101906133a3565b506133ca9291506133ce565b5090565b5b808211156133ca57600081556001016133cf565b6001600160e01b031981168114610f4257600080fd5b60006020828403121561340b57600080fd5b8135611d16816133e3565b6001600160a01b0381168114610f4257600080fd5b60006020828403121561343d57600080fd5b8135611d1681613416565b60005b8381101561346357818101518382015260200161344b565b838111156117be5750506000910152565b6000815180845261348c816020860160208601613448565b601f01601f19169290920160200192915050565b602081526000611d166020830184613474565b6000602082840312156134c557600080fd5b5035919050565b600080604083850312156134df57600080fd5b82356134ea81613416565b946020939093013593505050565b803561ffff81168114612bcd57600080fd5b80358015158114612bcd57600080fd5b6000806040838503121561352d57600080fd5b613536836134f8565b91506135446020840161350a565b90509250929050565b60006020828403121561355f57600080fd5b611d168261350a565b60008060006060848603121561357d57600080fd5b833561358881613416565b9250602084013561359881613416565b929592945050506040919091013590565b600080604083850312156135bc57600080fd5b6134ea836134f8565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156135f6576135f66135c5565b604051601f8501601f19908116603f0116810190828211818310171561361e5761361e6135c5565b8160405280935085815286868601111561363757600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561366357600080fd5b813567ffffffffffffffff81111561367a57600080fd5b8201601f8101841361368b57600080fd5b6128c8848235602084016135db565b600080604083850312156136ad57600080fd5b823591506135446020840161350a565b600080604083850312156136d057600080fd5b8235915060208301356136e281613416565b809150509250929050565b6000806040838503121561370057600080fd5b613709836134f8565b915060208301356136e281613416565b6000806040838503121561372c57600080fd5b50508035926020909101359150565b6000806040838503121561374e57600080fd5b823561353681613416565b6000806000806080858703121561376f57600080fd5b843561377a81613416565b9350602085013561378a81613416565b925060408501359150606085013567ffffffffffffffff8111156137ad57600080fd5b8501601f810187136137be57600080fd5b6137cd878235602084016135db565b91505092959194509250565b6000602082840312156137eb57600080fd5b611d16826134f8565b60008083601f84011261380657600080fd5b50813567ffffffffffffffff81111561381e57600080fd5b6020830191508360208260051b850101111561383957600080fd5b9250929050565b6000806020838503121561385357600080fd5b823567ffffffffffffffff81111561386a57600080fd5b613876858286016137f4565b90969095509350505050565b6000806040838503121561389557600080fd5b823561370981613416565b600080604083850312156138b357600080fd5b6138bc836134f8565b9150613544602084016134f8565b6000806000604084860312156138df57600080fd5b833567ffffffffffffffff8111156138f657600080fd5b613902868287016137f4565b909450925050602084013560ff8116811461391c57600080fd5b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061397057607f821691505b6020821081141561399157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a1157613a116139e8565b500190565b602080825260119082015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b604082015260600190565b6020808252602a908201527f416c6c20746f6b656e7320666f7220746869732050686173652061726520616c6040820152691c9958591e481cdbdb1960b21b606082015260800190565b600060208284031215613a9d57600080fd5b5051919050565b600061ffff808316818516808303821115613ac157613ac16139e8565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613af457613af46139e8565b5060010190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015613b4857845161ffff1683529383019391830191600101613b28565b5090979650505050505050565b600084516020613b688285838a01613448565b855191840191613b7b8184848a01613448565b8554920191600090600181811c9080831680613b9857607f831692505b858310811415613bb657634e487b7160e01b85526022600452602485fd5b808015613bca5760018114613bdb57613c08565b60ff19851688528388019550613c08565b60008b81526020902060005b85811015613c005781548a820152908401908801613be7565b505083880195505b50939b9a5050505050505050505050565b600082821015613c2b57613c2b6139e8565b500390565b6000816000190483118215151615613c4a57613c4a6139e8565b500290565b600061ffff80831681811415613c6757613c676139e8565b6001019392505050565b600060208284031215613c8357600080fd5b8151611d1681613416565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082613cc957613cc9613ca4565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082613d2f57613d2f613ca4565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613d6790830184613474565b9695505050505050565b600060208284031215613d8357600080fd5b8151611d16816133e356fea26469706673582212202d7317577212b0a3413d99026297fad30379dcfa5f415af0f661277c982daf0264736f6c6343000809003368747470733a2f2f636c656f31306b2e73332e616d617a6f6e6177732e636f6d2f6a736f6e2f0000000000000000000000008c1b6be6bd9752d384d4a59987e21ae5e0077bf7

Deployed Bytecode

0x6080604052600436106103505760003560e01c80636de9f32b116101c6578063c1dc9a23116100f7578063e985e9c511610095578063f1d2ac0e1161006f578063f1d2ac0e146109f8578063f2fde38b14610a18578063f47c84c514610a38578063f6dc6bf814610a4e57600080fd5b8063e985e9c51461096f578063ea9e8e1d146109b8578063efb3d008146109d857600080fd5b8063c9150a9e116100d1578063c9150a9e146108ef578063cccd7a2b1461091c578063dc18a0571461092f578063e6a72acf1461094f57600080fd5b8063c1dc9a2314610886578063c6682862146108ba578063c87b56dd146108cf57600080fd5b806392b2422911610164578063a22cb4651161013e578063a22cb4651461080b578063b1c9fe6e1461082b578063b88d4fde14610846578063bee20bde1461086657600080fd5b806392b24229146107af57806395d89b41146107cf578063a030394d146107e457600080fd5b806372c8273e116101a057806372c8273e1461073157806378aea4101461075157806386b854c8146107715780638da5cb5b1461079157600080fd5b80636de9f32b146106e657806370a08231146106fc578063715018a61461071c57600080fd5b80633d472937116102a05780635b458b801161023e578063658b874711610218578063658b87471461066f5780636685d6781461068f57806367f68fac146106b05780636cfd4f15146106c357600080fd5b80635b458b80146106095780635c975abb146106305780636352211e1461064f57600080fd5b806345d510071161027a57806345d51007146105925780634efc09f5146105a857806355f804b3146105c8578063573f5dae146105e857600080fd5b80633d472937146105325780634139e0921461055257806342842e0e1461057257600080fd5b806311e776fe1161030d57806323b872dd116102e757806323b872dd146104a55780632a4793f8146104c55780632d0daa30146104e55780633ccfd60b1461051d57600080fd5b806311e776fe1461044657806316c38b3c1461046657806318160ddd1461048657600080fd5b806301ffc9a71461035557806302621aa21461038a57806306fdde03146103ac578063081812fc146103ce578063095ea7b3146104065780630a16be3414610426575b600080fd5b34801561036157600080fd5b506103756103703660046133f9565b610a6e565b60405190151581526020015b60405180910390f35b34801561039657600080fd5b506103aa6103a536600461342b565b610ac0565b005b3480156103b857600080fd5b506103c1610b15565b60405161038191906134a0565b3480156103da57600080fd5b506103ee6103e93660046134b3565b610ba7565b6040516001600160a01b039091168152602001610381565b34801561041257600080fd5b506103aa6104213660046134cc565b610c3c565b34801561043257600080fd5b506103aa61044136600461351a565b610d52565b34801561045257600080fd5b506103aa6104613660046134b3565b610da2565b34801561047257600080fd5b506103aa61048136600461354d565b610dd1565b34801561049257600080fd5b506009545b604051908152602001610381565b3480156104b157600080fd5b506103aa6104c0366004613568565b610e19565b3480156104d157600080fd5b506103aa6104e036600461342b565b610e65565b3480156104f157600080fd5b50600a5461050a906601000000000000900461ffff1681565b60405161ffff9091168152602001610381565b34801561052957600080fd5b506103aa610eb1565b34801561053e57600080fd5b506103aa61054d36600461351a565b610f45565b34801561055e57600080fd5b50600e546103ee906001600160a01b031681565b34801561057e57600080fd5b506103aa61058d366004613568565b611019565b34801561059e57600080fd5b5061049760085481565b3480156105b457600080fd5b506103aa6105c33660046135a9565b611034565b3480156105d457600080fd5b506103aa6105e3366004613651565b611075565b3480156105f457600080fd5b50600b5461037590600160a81b900460ff1681565b34801561061557600080fd5b50600a5461050a9068010000000000000000900461ffff1681565b34801561063c57600080fd5b50600b54600160a01b900460ff16610375565b34801561065b57600080fd5b506103ee61066a3660046134b3565b6110b2565b34801561067b57600080fd5b50600b546103ee906001600160a01b031681565b34801561069b57600080fd5b50600a5461050a9062010000900461ffff1681565b6103aa6106be36600461369a565b611129565b3480156106cf57600080fd5b50600a5461050a90640100000000900461ffff1681565b3480156106f257600080fd5b5061049760095481565b34801561070857600080fd5b5061049761071736600461342b565b6117c4565b34801561072857600080fd5b506103aa61184b565b34801561073d57600080fd5b506103aa61074c3660046136bd565b611881565b34801561075d57600080fd5b506103aa61076c36600461354d565b6119ca565b34801561077d57600080fd5b506103aa61078c3660046136ed565b611a12565b34801561079d57600080fd5b506006546001600160a01b03166103ee565b3480156107bb57600080fd5b506103aa6107ca366004613719565b611a70565b3480156107db57600080fd5b506103c1611ae2565b3480156107f057600080fd5b50600a546103ee90600160501b90046001600160a01b031681565b34801561081757600080fd5b506103aa61082636600461373b565b611af1565b34801561083757600080fd5b50600a5461050a9061ffff1681565b34801561085257600080fd5b506103aa610861366004613759565b611afc565b34801561087257600080fd5b50600f546103ee906001600160a01b031681565b34801561089257600080fd5b506103756108a13660046137d9565b61ffff1660009081526012602052604090205460ff1690565b3480156108c657600080fd5b506103c1611b2e565b3480156108db57600080fd5b506103c16108ea3660046134b3565b611bbc565b3480156108fb57600080fd5b5061049761090a3660046137d9565b600c6020526000908152604090205481565b6103aa61092a36600461369a565b611d1d565b34801561093b57600080fd5b506103aa61094a366004613840565b61240d565b34801561095b57600080fd5b5061049761096a3660046134b3565b6124a4565b34801561097b57600080fd5b5061037561098a366004613882565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156109c457600080fd5b506103aa6109d33660046136ed565b6124c4565b3480156109e457600080fd5b506103aa6109f33660046138a0565b6125e0565b348015610a0457600080fd5b506103aa610a133660046134b3565b612614565b348015610a2457600080fd5b506103aa610a3336600461342b565b612643565b348015610a4457600080fd5b5061049760075481565b348015610a5a57600080fd5b506103aa610a693660046138ca565b6126db565b60006001600160e01b031982166380ac58cd60e01b1480610a9f57506001600160e01b03198216635b5e139f60e01b145b80610aba57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6006546001600160a01b03163314610af35760405162461bcd60e51b8152600401610aea90613927565b60405180910390fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b606060008054610b249061395c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b509061395c565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c205760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aea565b506000908152600460205260409020546001600160a01b031690565b6000610c47826110b2565b9050806001600160a01b0316836001600160a01b03161415610cb55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610aea565b336001600160a01b0382161480610cd15750610cd1813361098a565b610d435760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610aea565b610d4d838361276b565b505050565b6006546001600160a01b03163314610d7c5760405162461bcd60e51b8152600401610aea90613927565b61ffff919091166000908152601260205260409020805460ff1916911515919091179055565b6006546001600160a01b03163314610dcc5760405162461bcd60e51b8152600401610aea90613927565b600755565b6006546001600160a01b03163314610dfb5760405162461bcd60e51b8152600401610aea90613927565b600b8054911515600160a01b0260ff60a01b19909216919091179055565b600e546001600160a01b0316336001600160a01b031614610e5a57610e3e33826127d9565b610e5a5760405162461bcd60e51b8152600401610aea90613997565b610d4d8383836128d0565b6006546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610aea90613927565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314610edb5760405162461bcd60e51b8152600401610aea90613927565b600a54604051600091600160501b90046001600160a01b03169047908381818185875af1925050503d8060008114610f2f576040519150601f19603f3d011682016040523d82523d6000602084013e610f34565b606091505b5050905080610f4257600080fd5b50565b6006546001600160a01b03163314610f6f5760405162461bcd60e51b8152600401610aea90613927565b600a805461ffff191661ffff841617905580610f89575050565b600a5461ffff16610fa557610fa160016108ae612a6c565b5050565b600a5461ffff1660011415610fc257610fa16108af61270f612a6c565b600a5461ffff1660021415610fdf57610fa1612710614e1f612a6c565b600a5461ffff1660031415610ffc57610fa1614e2061752f612a6c565b600a5461ffff1660041415610fa157610fa1617530619c3f612a6c565b610d4d83838360405180602001604052806000815250611afc565b6006546001600160a01b0316331461105e5760405162461bcd60e51b8152600401610aea90613927565b61ffff9091166000908152600c6020526040902055565b6006546001600160a01b0316331461109f5760405162461bcd60e51b8152600401610aea90613927565b8051610fa190601090602084019061334a565b6000818152600260205260408120546001600160a01b031680610aba5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610aea565b600b54600160a01b900460ff16156111765760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610aea565b3233146111b05760405162461bcd60e51b81526020600482015260086024820152674f6e6c7920454f4160c01b6044820152606401610aea565b600754826009546111c191906139fe565b11156111df5760405162461bcd60e51b8152600401610aea90613a16565b6000821180156111f157506008548211155b6112335760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b6044820152606401610aea565b6013546112525760405162461bcd60e51b8152600401610aea90613a41565b600a5460009061ffff16600114156112b9573461126e846124a4565b146112b45760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c185e5b595b9d08185b5bdd5b9d60521b6044820152606401610aea565b6113d1565b34156113075760405162461bcd60e51b815260206004820152601d60248201527f4e6f77206d696e74696e6720697320646f6e65207669612050656e6e790000006044820152606401610aea565b611310836124a4565b600f546040516370a0823160e01b815233600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561135857600080fd5b505afa15801561136c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113909190613a8b565b10156113d15760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f7567682050656e6e7960801b6044820152606401610aea565b801561143c57600f54604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b15801561142357600080fd5b505af1158015611437573d6000803e3d6000fd5b505050505b826009600082825461144e91906139fe565b90915550600090508261146f576040805160008152602081019091526114b3565b8367ffffffffffffffff811115611488576114886135c5565b6040519080825280602002602001820160405280156114b1578160200160208202803683370190505b505b905060005b848110156117525760006114ca612ae7565b600a5490915061ffff1660011415806114e85750600a5461ffff1615155b156114f5576114f5612bd2565b60006114ff612c3c565b905061151e8161ffff1660009081526012602052604090205460ff1690565b1561155e576001600a60068282829054906101000a900461ffff166115439190613aa4565b92506101000a81548161ffff021916908361ffff1602179055505b61ffff811660009081526012602052604090205460ff166115db57600e54604051638327dd8d60e01b815261ffff831660048201526001600160a01b0390911690638327dd8d90602401600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050505b6001600160a01b03821633146116cb5761ffff811660009081526012602052604090205460ff16611644576001600a60048282829054906101000a900461ffff166116269190613aa4565b92506101000a81548161ffff021916908361ffff160217905561167e565b6001600a60028282829054906101000a900461ffff166116649190613aa4565b92506101000a81548161ffff021916908361ffff16021790555b506040805133815261ffff831660208201526001600160a01b0384168183015290517f5c8f955114cce6fe18920ee4bb38271b9a0f5579589f3767ccf22eb6484e06109181900360600190a15b8515806116e157506001600160a01b0382163314155b156116f9576116f4828261ffff16612d5c565b61173d565b600e54611713906001600160a01b031661ffff8316612d5c565b8084848151811061172657611726613aca565b602002602001019061ffff16908161ffff16815250505b5050808061174a90613ae0565b9150506114b8565b5082156117be57600e5460405163710fa65f60e11b81526001600160a01b039091169063e21f4cbe9061178b9033908590600401613afb565b600060405180830381600087803b1580156117a557600080fd5b505af11580156117b9573d6000803e3d6000fd5b505050505b50505050565b60006001600160a01b03821661182f5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610aea565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146118755760405162461bcd60e51b8152600401610aea90613927565b61187f6000612d76565b565b6006546001600160a01b031633146118ab5760405162461bcd60e51b8152600401610aea90613927565b600754826009546118bc91906139fe565b11156118da5760405162461bcd60e51b8152600401610aea90613a16565b6013546118f95760405162461bcd60e51b8152600401610aea90613a41565b60005b82811015610d4d57600061190e612c3c565b905061192d8161ffff1660009081526012602052604090205460ff1690565b61199357600e54604051638327dd8d60e01b815261ffff831660048201526001600160a01b0390911690638327dd8d90602401600060405180830381600087803b15801561197a57600080fd5b505af115801561198e573d6000803e3d6000fd5b505050505b6119a1838261ffff16612d5c565b600980549060006119b183613ae0565b91905055505080806119c290613ae0565b9150506118fc565b6006546001600160a01b031633146119f45760405162461bcd60e51b8152600401610aea90613927565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b6006546001600160a01b03163314611a3c5760405162461bcd60e51b8152600401610aea90613927565b61ffff91909116600090815260166020526040902080546001600160a01b0319166001600160a01b03909216919091179055565b6006546001600160a01b03163314611a9a5760405162461bcd60e51b8152600401610aea90613927565b6000611aa68383612dc8565b6014805461ffff191661ffff929092169182179055905060005b818110156117be57611ad0612bd2565b80611ada81613ae0565b915050611ac0565b606060018054610b249061395c565b610fa1338383612ec8565b611b0633836127d9565b611b225760405162461bcd60e51b8152600401610aea90613997565b6117be84848484612f97565b60118054611b3b9061395c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b679061395c565b8015611bb45780601f10611b8957610100808354040283529160200191611bb4565b820191906000526020600020905b815481529060010190602001808311611b9757829003601f168201915b505050505081565b6000818152600260205260409020546060906001600160a01b0316611c3b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610aea565b600060108054611c4a9061395c565b80601f0160208091040260200160405190810160405280929190818152602001828054611c769061395c565b8015611cc35780601f10611c9857610100808354040283529160200191611cc3565b820191906000526020600020905b815481529060010190602001808311611ca657829003601f168201915b505050505090506000815111611ce85760405180602001604052806000815250611d16565b80611cf284612fca565b6011604051602001611d0693929190613b55565b6040516020818303038152906040525b9392505050565b600b54600160a81b900460ff16611d765760405162461bcd60e51b815260206004820152601860248201527f576869746c656c697374206973206e6f742061637469766500000000000000006044820152606401610aea565b336000908152600d6020526040902054821115611de05760405162461bcd60e51b815260206004820152602260248201527f4578636565646564206d617820617661696c61626c6520746f20707572636861604482015261736560f01b6064820152608401610aea565b323314611e1a5760405162461bcd60e51b81526020600482015260086024820152674f6e6c7920454f4160c01b6044820152606401610aea565b60075482600954611e2b91906139fe565b1115611e795760405162461bcd60e51b815260206004820152601f60248201527f5075726861736520576f756c6420657865656564206d617820746f6b656e73006044820152606401610aea565b600082118015611e8b57506008548211155b611ecd5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b6044820152606401610aea565b601354611eec5760405162461bcd60e51b8152600401610aea90613a41565b336000908152600d602052604081208054849290611f0b908490613c19565b9091555050600a5460009061ffff1660011480611f2c5750600a5461ffff16155b15611f865734611f3b846124a4565b14611f815760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c185e5b595b9d08185b5bdd5b9d60521b6044820152606401610aea565b61209e565b3415611fd45760405162461bcd60e51b815260206004820152601960248201527f43616e206f6e6c79206d696e74207573696e672024434c454f000000000000006044820152606401610aea565b611fdd836124a4565b600f546040516370a0823160e01b815233600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561202557600080fd5b505afa158015612039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205d9190613a8b565b101561209e5760405162461bcd60e51b815260206004820152601060248201526f4e6f7420656e6f7567682024434c454f60801b6044820152606401610aea565b801561210957600f54604051632770a7eb60e21b8152336004820152602481018390526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b1580156120f057600080fd5b505af1158015612104573d6000803e3d6000fd5b505050505b826009600082825461211b91906139fe565b90915550600090508261213c57604080516000815260208101909152612180565b8367ffffffffffffffff811115612155576121556135c5565b60405190808252806020026020018201604052801561217e578160200160208202803683370190505b505b905060005b84811015611752576000612197612ae7565b600a5490915061ffff166001146121b0576121b0612bd2565b60006121ba612c3c565b90506121d98161ffff1660009081526012602052604090205460ff1690565b15612219576001600a60068282829054906101000a900461ffff166121fe9190613aa4565b92506101000a81548161ffff021916908361ffff1602179055505b61ffff811660009081526012602052604090205460ff1661229657600e54604051638327dd8d60e01b815261ffff831660048201526001600160a01b0390911690638327dd8d90602401600060405180830381600087803b15801561227d57600080fd5b505af1158015612291573d6000803e3d6000fd5b505050505b6001600160a01b03821633146123865761ffff811660009081526012602052604090205460ff166122ff576001600a60048282829054906101000a900461ffff166122e19190613aa4565b92506101000a81548161ffff021916908361ffff1602179055612339565b6001600a60028282829054906101000a900461ffff1661231f9190613aa4565b92506101000a81548161ffff021916908361ffff16021790555b506040805133815261ffff831660208201526001600160a01b0384168183015290517f5c8f955114cce6fe18920ee4bb38271b9a0f5579589f3767ccf22eb6484e06109181900360600190a15b85158061239c57506001600160a01b0382163314155b156123b4576123af828261ffff16612d5c565b6123f8565b600e546123ce906001600160a01b031661ffff8316612d5c565b808484815181106123e1576123e1613aca565b602002602001019061ffff16908161ffff16815250505b5050808061240590613ae0565b915050612185565b6006546001600160a01b031633146124375760405162461bcd60e51b8152600401610aea90613927565b60005b81811015610d4d5760016012600085858581811061245a5761245a613aca565b905060200201602081019061246f91906137d9565b61ffff1681526020810191909152604001600020805460ff19169115159190911790558061249c81613ae0565b91505061243a565b600a5461ffff166000908152600c6020526040812054610aba9083613c30565b6006546001600160a01b031633146124ee5760405162461bcd60e51b8152600401610aea90613927565b6007546009546124ff9060016139fe565b111561251d5760405162461bcd60e51b8152600401610aea90613a16565b60135461253c5760405162461bcd60e51b8152600401610aea90613a41565b61ffff821660009081526012602052604090205460ff166125b957600e54604051638327dd8d60e01b815261ffff841660048201526001600160a01b0390911690638327dd8d90602401600060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505050505b6125c7818361ffff16612d5c565b600980549060006125d783613ae0565b91905055505050565b6006546001600160a01b0316331461260a5760405162461bcd60e51b8152600401610aea90613927565b610fa18282612a6c565b6006546001600160a01b0316331461263e5760405162461bcd60e51b8152600401610aea90613927565b600855565b6006546001600160a01b0316331461266d5760405162461bcd60e51b8152600401610aea90613927565b6001600160a01b0381166126d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aea565b610f4281612d76565b6006546001600160a01b031633146127055760405162461bcd60e51b8152600401610aea90613927565b60005b828110156117be578160ff16600d600086868581811061272a5761272a613aca565b905060200201602081019061273f919061342b565b6001600160a01b031681526020810191909152604001600020558061276381613ae0565b915050612708565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127a0826110b2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166128525760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610aea565b600061285d836110b2565b9050806001600160a01b0316846001600160a01b031614806128985750836001600160a01b031661288d84610ba7565b6001600160a01b0316145b806128c857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166128e3826110b2565b6001600160a01b0316146129475760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610aea565b6001600160a01b0382166129a95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610aea565b6129b460008261276b565b6001600160a01b03831660009081526003602052604081208054600192906129dd908490613c19565b90915550506001600160a01b0382166000908152600360205260408120805460019290612a0b9084906139fe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b815b8161ffff168161ffff1611610d4d57601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09060108204018054600f9092166002026101000a61ffff818102199093169284160291909117905580612adf81613c4f565b915050612a6e565b600a5460009061ffff1660011480612b035750600a5461ffff16155b15612b0d57503390565b600a8054612b2a906601000000000000900461ffff166064612dc8565b61ffff1610612b3857503390565b600e546040805163493e978960e01b815290516000926001600160a01b03169163493e978991600480830192602092919082900301818787803b158015612b7e57600080fd5b505af1158015612b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb69190613c71565b90506001600160a01b038116612bcd573391505090565b919050565b6014805460019190600090612bec90849061ffff16613aa4565b92506101000a81548161ffff021916908361ffff160217905550600160156000828254612c1991906139fe565b9091555050601454600661ffff909116111561187f576014805461ffff19169055565b6013546000908190612c4e9080612dc8565b61ffff169050600060138281548110612c6957612c69613aca565b90600052602060002090601091828204019190066002029054906101000a900461ffff16905060136001601380549050612ca39190613c19565b81548110612cb357612cb3613aca565b90600052602060002090601091828204019190066002029054906101000a900461ffff1660138381548110612cea57612cea613aca565b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506013805480612d2a57612d2a613c8e565b600082815260209020601060001990920191820401805461ffff6002600f8516026101000a0219169055905592915050565b610fa18282604051806020016040528060008152506130c8565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080805b60078161ffff161015612e185760145461ffff16600090815260166020526040902054612e04906001600160a01b031631836139fe565b915080612e1081613c4f565b915050612dcd565b50600084612e27600143613c19565b60095460155460145460408051602081019690965293409385019390935241606090811b6bffffffffffffffffffffffff19908116828701524460748701523390911b16609485015260a884019190915260c8830185905260e883015260f01b6001600160f01b03191661010882015261010a0160408051601f1981840301815291905280516020909101209050612ebf8482613cba565b95945050505050565b816001600160a01b0316836001600160a01b03161415612f2a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610aea565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612fa28484846128d0565b612fae848484846130fb565b6117be5760405162461bcd60e51b8152600401610aea90613cce565b606081612fee5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613018578061300281613ae0565b91506130119050600a83613d20565b9150612ff2565b60008167ffffffffffffffff811115613033576130336135c5565b6040519080825280601f01601f19166020018201604052801561305d576020820181803683370190505b5090505b84156128c857613072600183613c19565b915061307f600a86613cba565b61308a9060306139fe565b60f81b81838151811061309f5761309f613aca565b60200101906001600160f81b031916908160001a9053506130c1600a86613d20565b9450613061565b6130d28383613208565b6130df60008484846130fb565b610d4d5760405162461bcd60e51b8152600401610aea90613cce565b60006001600160a01b0384163b156131fd57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061313f903390899088908890600401613d34565b602060405180830381600087803b15801561315957600080fd5b505af1925050508015613189575060408051601f3d908101601f1916820190925261318691810190613d71565b60015b6131e3573d8080156131b7576040519150601f19603f3d011682016040523d82523d6000602084013e6131bc565b606091505b5080516131db5760405162461bcd60e51b8152600401610aea90613cce565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506128c8565b506001949350505050565b6001600160a01b03821661325e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610aea565b6000818152600260205260409020546001600160a01b0316156132c35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610aea565b6001600160a01b03821660009081526003602052604081208054600192906132ec9084906139fe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546133569061395c565b90600052602060002090601f01602090048101928261337857600085556133be565b82601f1061339157805160ff19168380011785556133be565b828001600101855582156133be579182015b828111156133be5782518255916020019190600101906133a3565b506133ca9291506133ce565b5090565b5b808211156133ca57600081556001016133cf565b6001600160e01b031981168114610f4257600080fd5b60006020828403121561340b57600080fd5b8135611d16816133e3565b6001600160a01b0381168114610f4257600080fd5b60006020828403121561343d57600080fd5b8135611d1681613416565b60005b8381101561346357818101518382015260200161344b565b838111156117be5750506000910152565b6000815180845261348c816020860160208601613448565b601f01601f19169290920160200192915050565b602081526000611d166020830184613474565b6000602082840312156134c557600080fd5b5035919050565b600080604083850312156134df57600080fd5b82356134ea81613416565b946020939093013593505050565b803561ffff81168114612bcd57600080fd5b80358015158114612bcd57600080fd5b6000806040838503121561352d57600080fd5b613536836134f8565b91506135446020840161350a565b90509250929050565b60006020828403121561355f57600080fd5b611d168261350a565b60008060006060848603121561357d57600080fd5b833561358881613416565b9250602084013561359881613416565b929592945050506040919091013590565b600080604083850312156135bc57600080fd5b6134ea836134f8565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156135f6576135f66135c5565b604051601f8501601f19908116603f0116810190828211818310171561361e5761361e6135c5565b8160405280935085815286868601111561363757600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561366357600080fd5b813567ffffffffffffffff81111561367a57600080fd5b8201601f8101841361368b57600080fd5b6128c8848235602084016135db565b600080604083850312156136ad57600080fd5b823591506135446020840161350a565b600080604083850312156136d057600080fd5b8235915060208301356136e281613416565b809150509250929050565b6000806040838503121561370057600080fd5b613709836134f8565b915060208301356136e281613416565b6000806040838503121561372c57600080fd5b50508035926020909101359150565b6000806040838503121561374e57600080fd5b823561353681613416565b6000806000806080858703121561376f57600080fd5b843561377a81613416565b9350602085013561378a81613416565b925060408501359150606085013567ffffffffffffffff8111156137ad57600080fd5b8501601f810187136137be57600080fd5b6137cd878235602084016135db565b91505092959194509250565b6000602082840312156137eb57600080fd5b611d16826134f8565b60008083601f84011261380657600080fd5b50813567ffffffffffffffff81111561381e57600080fd5b6020830191508360208260051b850101111561383957600080fd5b9250929050565b6000806020838503121561385357600080fd5b823567ffffffffffffffff81111561386a57600080fd5b613876858286016137f4565b90969095509350505050565b6000806040838503121561389557600080fd5b823561370981613416565b600080604083850312156138b357600080fd5b6138bc836134f8565b9150613544602084016134f8565b6000806000604084860312156138df57600080fd5b833567ffffffffffffffff8111156138f657600080fd5b613902868287016137f4565b909450925050602084013560ff8116811461391c57600080fd5b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061397057607f821691505b6020821081141561399157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115613a1157613a116139e8565b500190565b602080825260119082015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b604082015260600190565b6020808252602a908201527f416c6c20746f6b656e7320666f7220746869732050686173652061726520616c6040820152691c9958591e481cdbdb1960b21b606082015260800190565b600060208284031215613a9d57600080fd5b5051919050565b600061ffff808316818516808303821115613ac157613ac16139e8565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613af457613af46139e8565b5060010190565b6001600160a01b038316815260406020808301829052835191830182905260009184820191906060850190845b81811015613b4857845161ffff1683529383019391830191600101613b28565b5090979650505050505050565b600084516020613b688285838a01613448565b855191840191613b7b8184848a01613448565b8554920191600090600181811c9080831680613b9857607f831692505b858310811415613bb657634e487b7160e01b85526022600452602485fd5b808015613bca5760018114613bdb57613c08565b60ff19851688528388019550613c08565b60008b81526020902060005b85811015613c005781548a820152908401908801613be7565b505083880195505b50939b9a5050505050505050505050565b600082821015613c2b57613c2b6139e8565b500390565b6000816000190483118215151615613c4a57613c4a6139e8565b500290565b600061ffff80831681811415613c6757613c676139e8565b6001019392505050565b600060208284031215613c8357600080fd5b8151611d1681613416565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082613cc957613cc9613ca4565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082613d2f57613d2f613ca4565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613d6790830184613474565b9695505050505050565b600060208284031215613d8357600080fd5b8151611d16816133e356fea26469706673582212202d7317577212b0a3413d99026297fad30379dcfa5f415af0f661277c982daf0264736f6c63430008090033

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

0000000000000000000000008c1b6be6bd9752d384d4a59987e21ae5e0077bf7

-----Decoded View---------------
Arg [0] : _primarySplitter (address): 0x8C1B6bE6Bd9752d384D4A59987e21AE5e0077bf7

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008c1b6be6bd9752d384d4a59987e21ae5e0077bf7


Deployed Bytecode Sourcemap

37704:14080:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24142:305;;;;;;;;;;-1:-1:-1;24142:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;24142:305:0;;;;;;;;50547:89;;;;;;;;;;-1:-1:-1;50547:89:0;;;;;:::i;:::-;;:::i;:::-;;25087:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26646:221::-;;;;;;;;;;-1:-1:-1;26646:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2080:32:1;;;2062:51;;2050:2;2035:18;26646:221:0;1916:203:1;26169:411:0;;;;;;;;;;-1:-1:-1;26169:411:0;;;;;:::i;:::-;;:::i;50143:105::-;;;;;;;;;;-1:-1:-1;50143:105:0;;;;;:::i;:::-;;:::i;40000:95::-;;;;;;;;;;-1:-1:-1;40000:95:0;;;;;:::i;:::-;;:::i;40510:86::-;;;;;;;;;;-1:-1:-1;40510:86:0;;;;;:::i;:::-;;:::i;51177:90::-;;;;;;;;;;-1:-1:-1;51247:12:0;;51177:90;;;3361:25:1;;;3349:2;3334:18;51177:90:0;3215:177:1;50777:392:0;;;;;;;;;;-1:-1:-1;50777:392:0;;;;;:::i;:::-;;:::i;50433:106::-;;;;;;;;;;-1:-1:-1;50433:106:0;;;;;:::i;:::-;;:::i;38003:30::-;;;;;;;;;;-1:-1:-1;38003:30:0;;;;;;;;;;;;;;4032:6:1;4020:19;;;4002:38;;3990:2;3975:18;38003:30:0;3858:188:1;51614:167:0;;;;;;;;;;;;;:::i;41288:566::-;;;;;;;;;;-1:-1:-1;41288:566:0;;;;;:::i;:::-;;:::i;38383:27::-;;;;;;;;;;-1:-1:-1;38383:27:0;;;;-1:-1:-1;;;;;38383:27:0;;;27806:185;;;;;;;;;;-1:-1:-1;27806:185:0;;;;;:::i;:::-;;:::i;37822:34::-;;;;;;;;;;;;;;;;50644:125;;;;;;;;;;-1:-1:-1;50644:125:0;;;;;:::i;:::-;;:::i;51383:90::-;;;;;;;;;;-1:-1:-1;51383:90:0;;;;;:::i;:::-;;:::i;38237:37::-;;;;;;;;;;-1:-1:-1;38237:37:0;;;;-1:-1:-1;;;38237:37:0;;;;;;38040:29;;;;;;;;;;-1:-1:-1;38040:29:0;;;;;;;;;;;40214:86;;;;;;;;;;-1:-1:-1;40285:7:0;;-1:-1:-1;;;40285:7:0;;;;40214:86;;24781:239;;;;;;;;;;-1:-1:-1;24781:239:0;;;;;:::i;:::-;;:::i;38148:40::-;;;;;;;;;;-1:-1:-1;38148:40:0;;;;-1:-1:-1;;;;;38148:40:0;;;37930:30;;;;;;;;;;-1:-1:-1;37930:30:0;;;;;;;;;;;42820:2089;;;;;;:::i;:::-;;:::i;37967:29::-;;;;;;;;;;-1:-1:-1;37967:29:0;;;;;;;;;;;37865:28;;;;;;;;;;;;;;;;24511:208;;;;;;;;;;-1:-1:-1;24511:208:0;;;;;:::i;:::-;;:::i;4763:103::-;;;;;;;;;;;;;:::i;41862:546::-;;;;;;;;;;-1:-1:-1;41862:546:0;;;;;:::i;:::-;;:::i;40604:130::-;;;;;;;;;;-1:-1:-1;40604:130:0;;;;;:::i;:::-;;:::i;51481:125::-;;;;;;;;;;-1:-1:-1;51481:125:0;;;;;:::i;:::-;;:::i;4112:87::-;;;;;;;;;;-1:-1:-1;4185:6:0;;-1:-1:-1;;;;;4185:6:0;4112:87;;49858:277;;;;;;;;;;-1:-1:-1;49858:277:0;;;;;:::i;:::-;;:::i;25256:104::-;;;;;;;;;;;;;:::i;38103:38::-;;;;;;;;;;-1:-1:-1;38103:38:0;;;;-1:-1:-1;;;38103:38:0;;-1:-1:-1;;;;;38103:38:0;;;26939:155;;;;;;;;;;-1:-1:-1;26939:155:0;;;;;:::i;:::-;;:::i;37900:23::-;;;;;;;;;;-1:-1:-1;37900:23:0;;;;;;;;28062:328;;;;;;;;;;-1:-1:-1;28062:328:0;;;;;:::i;:::-;;:::i;38417:17::-;;;;;;;;;;-1:-1:-1;38417:17:0;;;;-1:-1:-1;;;;;38417:17:0;;;48060:93;;;;;;;;;;-1:-1:-1;48060:93:0;;;;;:::i;:::-;48133:12;;48109:4;48133:12;;;:8;:12;;;;;;;;;48060:93;38515:37;;;;;;;;;;;;;:::i;49420:432::-;;;;;;;;;;-1:-1:-1;49420:432:0;;;;;:::i;:::-;;:::i;38283:41::-;;;;;;;;;;-1:-1:-1;38283:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;44917:2499;;;;;;:::i;:::-;;:::i;50256:169::-;;;;;;;;;;-1:-1:-1;50256:169:0;;;;;:::i;:::-;;:::i;47939:113::-;;;;;;;;;;-1:-1:-1;47939:113:0;;;;;:::i;:::-;;:::i;27165:164::-;;;;;;;;;;-1:-1:-1;27165:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;27286:25:0;;;27262:4;27286:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;27165:164;42416:396;;;;;;;;;;-1:-1:-1;42416:396:0;;;;;:::i;:::-;;:::i;40984:119::-;;;;;;;;;;-1:-1:-1;40984:119:0;;;;;:::i;:::-;;:::i;40101:107::-;;;;;;;;;;-1:-1:-1;40101:107:0;;;;;:::i;:::-;;:::i;5021:201::-;;;;;;;;;;-1:-1:-1;5021:201:0;;;;;:::i;:::-;;:::i;37785:30::-;;;;;;;;;;;;;;;;40742:234;;;;;;;;;;-1:-1:-1;40742:234:0;;;;;:::i;:::-;;:::i;24142:305::-;24244:4;-1:-1:-1;;;;;;24281:40:0;;-1:-1:-1;;;24281:40:0;;:105;;-1:-1:-1;;;;;;;24338:48:0;;-1:-1:-1;;;24338:48:0;24281:105;:158;;;-1:-1:-1;;;;;;;;;;17005:40:0;;;24403:36;24261:178;24142:305;-1:-1:-1;;24142:305:0:o;50547:89::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;;;;;;;;;50609:4:::1;:19:::0;;-1:-1:-1;;;;;;50609:19:0::1;-1:-1:-1::0;;;;;50609:19:0;;;::::1;::::0;;;::::1;::::0;;50547:89::o;25087:100::-;25141:13;25174:5;25167:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25087:100;:::o;26646:221::-;26722:7;29989:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29989:16:0;26742:73;;;;-1:-1:-1;;;26742:73:0;;11676:2:1;26742:73:0;;;11658:21:1;11715:2;11695:18;;;11688:30;11754:34;11734:18;;;11727:62;-1:-1:-1;;;11805:18:1;;;11798:42;11857:19;;26742:73:0;11474:408:1;26742:73:0;-1:-1:-1;26835:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26835:24:0;;26646:221::o;26169:411::-;26250:13;26266:23;26281:7;26266:14;:23::i;:::-;26250:39;;26314:5;-1:-1:-1;;;;;26308:11:0;:2;-1:-1:-1;;;;;26308:11:0;;;26300:57;;;;-1:-1:-1;;;26300:57:0;;12089:2:1;26300:57:0;;;12071:21:1;12128:2;12108:18;;;12101:30;12167:34;12147:18;;;12140:62;-1:-1:-1;;;12218:18:1;;;12211:31;12259:19;;26300:57:0;11887:397:1;26300:57:0;2916:10;-1:-1:-1;;;;;26392:21:0;;;;:62;;-1:-1:-1;26417:37:0;26434:5;2916:10;27165:164;:::i;26417:37::-;26370:168;;;;-1:-1:-1;;;26370:168:0;;12491:2:1;26370:168:0;;;12473:21:1;12530:2;12510:18;;;12503:30;12569:34;12549:18;;;12542:62;12640:26;12620:18;;;12613:54;12684:19;;26370:168:0;12289:420:1;26370:168:0;26551:21;26560:2;26564:7;26551:8;:21::i;:::-;26239:341;26169:411;;:::o;50143:105::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;50218:12:::1;::::0;;;::::1;;::::0;;;:8:::1;:12;::::0;;;;:22;;-1:-1:-1;;50218:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50143:105::o;40000:95::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;40067:10:::1;:20:::0;40000:95::o;40510:86::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;40572:7:::1;:16:::0;;;::::1;;-1:-1:-1::0;;;40572:16:0::1;-1:-1:-1::0;;;;40572:16:0;;::::1;::::0;;;::::1;::::0;;40510:86::o;50777:392::-;50994:9;;-1:-1:-1;;;;;50994:9:0;2916:10;-1:-1:-1;;;;;50970:34:0;;50966:156;;51027:41;2916:10;51060:7;51027:18;:41::i;:::-;51019:103;;;;-1:-1:-1;;;51019:103:0;;;;;;;:::i;:::-;51133:28;51143:4;51149:2;51153:7;51133:9;:28::i;50433:106::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;50501:9:::1;:30:::0;;-1:-1:-1;;;;;;50501:30:0::1;-1:-1:-1::0;;;;;50501:30:0;;;::::1;::::0;;;::::1;::::0;;50433:106::o;51614:167::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;51691:15:::1;::::0;51683:63:::1;::::0;51665:12:::1;::::0;-1:-1:-1;;;51691:15:0;::::1;-1:-1:-1::0;;;;;51691:15:0::1;::::0;51720:21:::1;::::0;51665:12;51683:63;51665:12;51683:63;51720:21;51691:15;51683:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51664:82;;;51765:7;51757:16;;;::::0;::::1;;51653:128;51614:167::o:0;41288:566::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;41375:5:::1;:14:::0;;-1:-1:-1;;41375:14:0::1;;::::0;::::1;;::::0;;41407:10;41402:50:::1;;41288:566:::0;;:::o;41402:50::-:1;41465:5;::::0;::::1;;41462:385;;41491:26;41509:1;41512:4;41491:17;:26::i;:::-;41288:566:::0;;:::o;41462:385::-:1;41539:5;::::0;::::1;;::::0;:10:::1;41535:312;;;41566:29;41584:4;41590;41566:17;:29::i;41535:312::-;41617:5;::::0;::::1;;41626:1;41617:10;41613:234;;;41644:31;41662:5;41669;41644:17;:31::i;41613:234::-;41697:5;::::0;::::1;;41706:1;41697:10;41693:154;;;41724:31;41742:5;41749;41724:17;:31::i;41693:154::-;41777:5;::::0;::::1;;41786:1;41777:10;41773:74;;;41804:31;41822:5;41829;41804:17;:31::i;27806:185::-:0;27944:39;27961:4;27967:2;27971:7;27944:39;;;;;;;;;;;;:16;:39::i;50644:125::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;50731:18:::1;::::0;;::::1;;::::0;;;:10:::1;:18;::::0;;;;:30;50644:125::o;51383:90::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;51452:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;24781:239::-:0;24853:7;24889:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24889:16:0;24924:19;24916:73;;;;-1:-1:-1;;;24916:73:0;;13544:2:1;24916:73:0;;;13526:21:1;13583:2;13563:18;;;13556:30;13622:34;13602:18;;;13595:62;-1:-1:-1;;;13673:18:1;;;13666:39;13722:19;;24916:73:0;13342:405:1;42820:2089:0;40285:7;;-1:-1:-1;;;40285:7:0;;;;40352:9;40344:38;;;;-1:-1:-1;;;40344:38:0;;13954:2:1;40344:38:0;;;13936:21:1;13993:2;13973:18;;;13966:30;-1:-1:-1;;;14012:18:1;;;14005:46;14068:18;;40344:38:0;13752:340:1;40344:38:0;42909:9:::1;42922:10;42909:23;42901:44;;;::::0;-1:-1:-1;;;42901:44:0;;14299:2:1;42901:44:0::1;::::0;::::1;14281:21:1::0;14338:1;14318:18;;;14311:29;-1:-1:-1;;;14356:18:1;;;14349:38;14404:18;;42901:44:0::1;14097:331:1::0;42901:44:0::1;42990:10;;42979:7;42964:12;;:22;;;;:::i;:::-;:36;;42956:66;;;;-1:-1:-1::0;;;42956:66:0::1;;;;;;;:::i;:::-;43051:1;43041:7;:11;:43;;;;;43067:17;;43056:7;:28;;43041:43;43033:75;;;::::0;-1:-1:-1;;;43033:75:0;;15246:2:1;43033:75:0::1;::::0;::::1;15228:21:1::0;15285:2;15265:18;;;15258:30;-1:-1:-1;;;15304:18:1;;;15297:49;15363:18;;43033:75:0::1;15044:343:1::0;43033:75:0::1;43127:16;:23:::0;43119:82:::1;;;;-1:-1:-1::0;;;43119:82:0::1;;;;;;;:::i;:::-;43252:5;::::0;43214:19:::1;::::0;43252:5:::1;;::::0;:10:::1;43248:404;;;43335:9;43313:18;43323:7;43313:9;:18::i;:::-;:31;43305:66;;;::::0;-1:-1:-1;;;43305:66:0;;16005:2:1;43305:66:0::1;::::0;::::1;15987:21:1::0;16044:2;16024:18;;;16017:30;-1:-1:-1;;;16063:18:1;;;16056:52;16125:18;;43305:66:0::1;15803:346:1::0;43305:66:0::1;43248:404;;;43454:9;:14:::0;43446:56:::1;;;::::0;-1:-1:-1;;;43446:56:0;;16356:2:1;43446:56:0::1;::::0;::::1;16338:21:1::0;16395:2;16375:18;;;16368:30;16434:31;16414:18;;;16407:59;16483:18;;43446:56:0::1;16154:353:1::0;43446:56:0::1;43534:18;43544:7;43534:9;:18::i;:::-;43575:4;::::0;:26:::1;::::0;-1:-1:-1;;;43575:26:0;;43590:10:::1;43575:26;::::0;::::1;2062:51:1::0;43517:35:0;;-1:-1:-1;43517:35:0;;-1:-1:-1;;;;;43575:4:0;;::::1;::::0;:14:::1;::::0;2035:18:1;;43575:26:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;43567:73;;;::::0;-1:-1:-1;;;43567:73:0;;16903:2:1;43567:73:0::1;::::0;::::1;16885:21:1::0;16942:2;16922:18;;;16915:30;-1:-1:-1;;;16961:18:1;;;16954:46;17017:18;;43567:73:0::1;16701:340:1::0;43567:73:0::1;43668:18:::0;;43664:88:::1;;43703:4;::::0;:37:::1;::::0;-1:-1:-1;;;43703:37:0;;43713:10:::1;43703:37;::::0;::::1;17220:51:1::0;17287:18;;;17280:34;;;-1:-1:-1;;;;;43703:4:0;;::::1;::::0;:9:::1;::::0;17193:18:1;;43703:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43664:88;43780:7;43764:12;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;43798:24:0::1;::::0;-1:-1:-1;43825:6:0;:48:::1;;43858:15;::::0;;43871:1:::1;43858:15:::0;;::::1;::::0;::::1;::::0;;;43825:48:::1;;;43847:7;43834:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;43834:21:0::1;;43825:48;43798:75;;43889:6;43884:921;43905:7;43901:1;:11;43884:921;;;43934:17;43954;:15;:17::i;:::-;43990:5;::::0;43934:37;;-1:-1:-1;43990:5:0::1;;::::0;:10:::1;;::::0;:24:::1;;-1:-1:-1::0;44004:5:0::1;::::0;::::1;;:10:::0;::::1;43990:24;43986:85;;;44036:19;:17;:19::i;:::-;44087:14;44104:20;:18;:20::i;:::-;44087:37;;44159:16;44167:7;48133:12:::0;;48109:4;48133:12;;;:8;:12;;;;;;;;;48060:93;44159:16:::1;44155:74;;;44212:1;44196:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44155:74;48133:12:::0;;;48109:4;48133:12;;;:8;:12;;;;;;;;44243:98:::1;;44293:9;::::0;:32:::1;::::0;-1:-1:-1;;;44293:32:0;;4032:6:1;4020:19;;44293:32:0::1;::::0;::::1;4002:38:1::0;-1:-1:-1;;;;;44293:9:0;;::::1;::::0;:23:::1;::::0;3975:18:1;;44293:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44243:98;-1:-1:-1::0;;;;;44361:23:0;::::1;44374:10;44361:23;44357:186;;48133:12:::0;;;48109:4;48133:12;;;:8;:12;;;;;;;;44405:55:::1;;44459:1;44444:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;44405:55;;;44440:1;44424:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;44405:55;-1:-1:-1::0;44484:43:0::1;::::0;;44496:10:::1;17986:34:1::0;;18068:6;18056:19;;18051:2;18036:18;;18029:47;-1:-1:-1;;;;;18112:15:1;;18092:18;;;18085:43;44484::0;;::::1;::::0;;;;17936:2:1;44484:43:0;;::::1;44357:186;44576:6;44575:7;:34;;;-1:-1:-1::0;;;;;;44586:23:0;::::1;44599:10;44586:23;;44575:34;44571:223;;;44630:29;44640:9;44651:7;44630:29;;:9;:29::i;:::-;44571:223;;;44718:9;::::0;44700:38:::1;::::0;-1:-1:-1;;;;;44718:9:0::1;44700:38;::::0;::::1;:9;:38::i;:::-;44771:7;44757:8;44766:1;44757:11;;;;;;;;:::i;:::-;;;;;;:21;;;;;;;;;::::0;::::1;44571:223;43919:886;;43914:3;;;;;:::i;:::-;;;;43884:921;;;;44819:6;44815:87;;;44842:9;::::0;:48:::1;::::0;-1:-1:-1;;;44842:48:0;;-1:-1:-1;;;;;44842:9:0;;::::1;::::0;:26:::1;::::0;:48:::1;::::0;44869:10:::1;::::0;44881:8;;44842:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44815:87;42890:2019;;42820:2089:::0;;:::o;24511:208::-;24583:7;-1:-1:-1;;;;;24611:19:0;;24603:74;;;;-1:-1:-1;;;24603:74:0;;19358:2:1;24603:74:0;;;19340:21:1;19397:2;19377:18;;;19370:30;19436:34;19416:18;;;19409:62;-1:-1:-1;;;19487:18:1;;;19480:40;19537:19;;24603:74:0;19156:406:1;24603:74:0;-1:-1:-1;;;;;;24695:16:0;;;;;:9;:16;;;;;;;24511:208::o;4763:103::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;4828:30:::1;4855:1;4828:18;:30::i;:::-;4763:103::o:0;41862:546::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;41980:10:::1;;41969:7;41954:12;;:22;;;;:::i;:::-;:36;;41946:66;;;;-1:-1:-1::0;;;41946:66:0::1;;;;;;;:::i;:::-;42031:16;:23:::0;42023:82:::1;;;;-1:-1:-1::0;;;42023:82:0::1;;;;;;;:::i;:::-;42123:6;42118:283;42139:7;42135:1;:11;42118:283;;;42168:14;42185:20;:18;:20::i;:::-;42168:37;;42224:16;42232:7;48133:12:::0;;48109:4;48133:12;;;:8;:12;;;;;;;;;48060:93;42224:16:::1;42220:98;;42270:9;::::0;:32:::1;::::0;-1:-1:-1;;;42270:32:0;;4032:6:1;4020:19;;42270:32:0::1;::::0;::::1;4002:38:1::0;-1:-1:-1;;;;;42270:9:0;;::::1;::::0;:23:::1;::::0;3975:18:1;;42270:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42220:98;42332:28;42342:8;42352:7;42332:28;;:9;:28::i;:::-;42375:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;;;;;;42153:248;42148:3;;;;;:::i;:::-;;;;42118:283;;40604:130:::0;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;40688:17:::1;:38:::0;;;::::1;;-1:-1:-1::0;;;40688:38:0::1;-1:-1:-1::0;;;;40688:38:0;;::::1;::::0;;;::::1;::::0;;40604:130::o;51481:125::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;51569:18:::1;::::0;;;::::1;;::::0;;;:13:::1;:18;::::0;;;;:29;;-1:-1:-1;;;;;;51569:29:0::1;-1:-1:-1::0;;;;;51569:29:0;;::::1;::::0;;;::::1;::::0;;51481:125::o;49858:277::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;49933:17:::1;49953:32;49973:5;49980:4;49953:19;:32::i;:::-;49996:12;:35:::0;;-1:-1:-1;;49996:35:0::1;49933:52;::::0;;;::::1;49996:35:::0;;::::1;::::0;;49933:52;-1:-1:-1;49996:12:0::1;50042:86;50063:12;50059:1;:16;50042:86;;;50097:19;:17;:19::i;:::-;50077:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50042:86;;25256:104:::0;25312:13;25345:7;25338:14;;;;;:::i;26939:155::-;27034:52;2916:10;27067:8;27077;27034:18;:52::i;28062:328::-;28237:41;2916:10;28270:7;28237:18;:41::i;:::-;28229:103;;;;-1:-1:-1;;;28229:103:0;;;;;;;:::i;:::-;28343:39;28357:4;28363:2;28367:7;28376:5;28343:13;:39::i;38515:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49420:432::-;29965:4;29989:16;;;:7;:16;;;;;;49518:13;;-1:-1:-1;;;;;29989:16:0;49547:101;;;;-1:-1:-1;;;49547:101:0;;19769:2:1;49547:101:0;;;19751:21:1;19808:2;19788:18;;;19781:30;19847:34;19827:18;;;19820:62;-1:-1:-1;;;19898:18:1;;;19891:45;19953:19;;49547:101:0;19567:411:1;49547:101:0;49661:28;49692:7;49661:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49744:1;49719:14;49713:28;:32;:133;;;;;;;;;;;;;;;;;49781:14;49797:18;:7;:16;:18::i;:::-;49817:13;49764:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49713:133;49706:140;49420:432;-1:-1:-1;;;49420:432:0:o;44917:2499::-;45000:17;;-1:-1:-1;;;45000:17:0;;;;44992:54;;;;-1:-1:-1;;;44992:54:0;;21843:2:1;44992:54:0;;;21825:21:1;21882:2;21862:18;;;21855:30;21921:26;21901:18;;;21894:54;21965:18;;44992:54:0;21641:348:1;44992:54:0;45087:10;45076:22;;;;:10;:22;;;;;;45065:33;;;45057:80;;;;-1:-1:-1;;;45057:80:0;;22196:2:1;45057:80:0;;;22178:21:1;22235:2;22215:18;;;22208:30;22274:34;22254:18;;;22247:62;-1:-1:-1;;;22325:18:1;;;22318:32;22367:19;;45057:80:0;21994:398:1;45057:80:0;45156:9;45169:10;45156:23;45148:44;;;;-1:-1:-1;;;45148:44:0;;14299:2:1;45148:44:0;;;14281:21:1;14338:1;14318:18;;;14311:29;-1:-1:-1;;;14356:18:1;;;14349:38;14404:18;;45148:44:0;14097:331:1;45148:44:0;45237:10;;45226:7;45211:12;;:22;;;;:::i;:::-;:36;;45203:80;;;;-1:-1:-1;;;45203:80:0;;22599:2:1;45203:80:0;;;22581:21:1;22638:2;22618:18;;;22611:30;22677:33;22657:18;;;22650:61;22728:18;;45203:80:0;22397:355:1;45203:80:0;45312:1;45302:7;:11;:43;;;;;45328:17;;45317:7;:28;;45302:43;45294:75;;;;-1:-1:-1;;;45294:75:0;;15246:2:1;45294:75:0;;;15228:21:1;15285:2;15265:18;;;15258:30;-1:-1:-1;;;15304:18:1;;;15297:49;15363:18;;45294:75:0;15044:343:1;45294:75:0;45388:16;:23;45380:82;;;;-1:-1:-1;;;45380:82:0;;;;;;;:::i;:::-;45691:10;45680:22;;;;:10;:22;;;;;:33;;45706:7;;45680:22;:33;;45706:7;;45680:33;:::i;:::-;;;;-1:-1:-1;;45764:5:0;;45726:19;;45764:5;;;:10;;:24;;-1:-1:-1;45778:5:0;;;;:10;45764:24;45760:414;;;45861:9;45839:18;45849:7;45839:9;:18::i;:::-;:31;45831:66;;;;-1:-1:-1;;;45831:66:0;;16005:2:1;45831:66:0;;;15987:21:1;16044:2;16024:18;;;16017:30;-1:-1:-1;;;16063:18:1;;;16056:52;16125:18;;45831:66:0;15803:346:1;45831:66:0;45760:414;;;45980:9;:14;45972:52;;;;-1:-1:-1;;;45972:52:0;;23089:2:1;45972:52:0;;;23071:21:1;23128:2;23108:18;;;23101:30;23167:27;23147:18;;;23140:55;23212:18;;45972:52:0;22887:349:1;45972:52:0;46056:18;46066:7;46056:9;:18::i;:::-;46097:4;;:26;;-1:-1:-1;;;46097:26:0;;46112:10;46097:26;;;2062:51:1;46039:35:0;;-1:-1:-1;46039:35:0;;-1:-1:-1;;;;;46097:4:0;;;;:14;;2035:18:1;;46097:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;46089:73;;;;-1:-1:-1;;;46089:73:0;;23443:2:1;46089:73:0;;;23425:21:1;23482:2;23462:18;;;23455:30;-1:-1:-1;;;23501:18:1;;;23494:46;23557:18;;46089:73:0;23241:340:1;46089:73:0;46190:18;;46186:88;;46225:4;;:37;;-1:-1:-1;;;46225:37:0;;46235:10;46225:37;;;17220:51:1;17287:18;;;17280:34;;;-1:-1:-1;;;;;46225:4:0;;;;:9;;17193:18:1;;46225:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46186:88;46302:7;46286:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;46320:24:0;;-1:-1:-1;46347:6:0;:48;;46380:15;;;46393:1;46380:15;;;;;;;;46347:48;;;46369:7;46356:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46356:21:0;;46347:48;46320:75;;46411:6;46406:906;46427:7;46423:1;:11;46406:906;;;46456:17;46476;:15;:17::i;:::-;46512:5;;46456:37;;-1:-1:-1;46512:5:0;;;:10;46508:70;;46543:19;:17;:19::i;:::-;46594:14;46611:20;:18;:20::i;:::-;46594:37;;46666:16;46674:7;48133:12;;48109:4;48133:12;;;:8;:12;;;;;;;;;48060:93;46666:16;46662:74;;;46719:1;46703:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46662:74;48133:12;;;48109:4;48133:12;;;:8;:12;;;;;;;;46750:98;;46800:9;;:32;;-1:-1:-1;;;46800:32:0;;4032:6:1;4020:19;;46800:32:0;;;4002:38:1;-1:-1:-1;;;;;46800:9:0;;;;:23;;3975:18:1;;46800:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46750:98;-1:-1:-1;;;;;46868:23:0;;46881:10;46868:23;46864:186;;48133:12;;;48109:4;48133:12;;;:8;:12;;;;;;;;46912:55;;46966:1;46951:11;;:16;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;46912:55;;;46947:1;46931:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;46912:55;-1:-1:-1;46991:43:0;;;47003:10;17986:34:1;;18068:6;18056:19;;18051:2;18036:18;;18029:47;-1:-1:-1;;;;;18112:15:1;;18092:18;;;18085:43;46991::0;;;;;;;17936:2:1;46991:43:0;;;46864:186;47083:6;47082:7;:34;;;-1:-1:-1;;;;;;47093:23:0;;47106:10;47093:23;;47082:34;47078:223;;;47137:29;47147:9;47158:7;47137:29;;:9;:29::i;:::-;47078:223;;;47225:9;;47207:38;;-1:-1:-1;;;;;47225:9:0;47207:38;;;:9;:38::i;:::-;47278:7;47264:8;47273:1;47264:11;;;;;;;;:::i;:::-;;;;;;:21;;;;;;;;;;;47078:223;46441:871;;46436:3;;;;;:::i;:::-;;;;46406:906;;50256:169;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;50335:6:::1;50330:88;50347:14:::0;;::::1;50330:88;;;50402:4;50383:8;:16;50392:3;;50396:1;50392:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;50383:16;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;50383:16:0;:23;;-1:-1:-1;;50383:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50363:3;::::1;::::0;::::1;:::i;:::-;;;;50330:88;;47939:113:::0;48038:5;;;;47993:4;48027:17;;;:10;:17;;;;;;48017:27;;:7;:27;:::i;42416:396::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;42523:10:::1;::::0;42502:12:::1;::::0;:16:::1;::::0;42517:1:::1;42502:16;:::i;:::-;:31;;42494:61;;;;-1:-1:-1::0;;;42494:61:0::1;;;;;;;:::i;:::-;42574:16;:23:::0;42566:82:::1;;;;-1:-1:-1::0;;;42566:82:0::1;;;;;;;:::i;:::-;48133:12:::0;;;48109:4;48133:12;;;:8;:12;;;;;;;;42659:86:::1;;42705:9;::::0;:28:::1;::::0;-1:-1:-1;;;42705:28:0;;4032:6:1;4020:19;;42705:28:0::1;::::0;::::1;4002:38:1::0;-1:-1:-1;;;;;42705:9:0;;::::1;::::0;:23:::1;::::0;3975:18:1;;42705:28:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42659:86;42755:24;42765:8;42775:3;42755:24;;:9;:24::i;:::-;42790:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;;;;;;42416:396:::0;;:::o;40984:119::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;41066:29:::1;41084:5;41091:3;41066:17;:29::i;40101:107::-:0;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;40171:17:::1;:29:::0;40101:107::o;5021:201::-;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5110:22:0;::::1;5102:73;;;::::0;-1:-1:-1;;;5102:73:0;;23961:2:1;5102:73:0::1;::::0;::::1;23943:21:1::0;24000:2;23980:18;;;23973:30;24039:34;24019:18;;;24012:62;-1:-1:-1;;;24090:18:1;;;24083:36;24136:19;;5102:73:0::1;23759:402:1::0;5102:73:0::1;5186:28;5205:8;5186:18;:28::i;40742:234::-:0;4185:6;;-1:-1:-1;;;;;4185:6:0;2916:10;4332:23;4324:68;;;;-1:-1:-1;;;4324:68:0;;;;;;;:::i;:::-;40853:9:::1;40848:121;40868:20:::0;;::::1;40848:121;;;40937:16;40910:43;;:10;:24;40921:9;;40931:1;40921:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40910:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40910:24:0;:43;40890:3;::::1;::::0;::::1;:::i;:::-;;;;40848:121;;34046:174:::0;34121:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;34121:29:0;-1:-1:-1;;;;;34121:29:0;;;;;;;;:24;;34175:23;34121:24;34175:14;:23::i;:::-;-1:-1:-1;;;;;34166:46:0;;;;;;;;;;;34046:174;;:::o;30194:348::-;30287:4;29989:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29989:16:0;30304:73;;;;-1:-1:-1;;;30304:73:0;;24368:2:1;30304:73:0;;;24350:21:1;24407:2;24387:18;;;24380:30;24446:34;24426:18;;;24419:62;-1:-1:-1;;;24497:18:1;;;24490:42;24549:19;;30304:73:0;24166:408:1;30304:73:0;30388:13;30404:23;30419:7;30404:14;:23::i;:::-;30388:39;;30457:5;-1:-1:-1;;;;;30446:16:0;:7;-1:-1:-1;;;;;30446:16:0;;:51;;;;30490:7;-1:-1:-1;;;;;30466:31:0;:20;30478:7;30466:11;:20::i;:::-;-1:-1:-1;;;;;30466:31:0;;30446:51;:87;;;-1:-1:-1;;;;;;27286:25:0;;;27262:4;27286:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;30501:32;30438:96;30194:348;-1:-1:-1;;;;30194:348:0:o;33303:625::-;33462:4;-1:-1:-1;;;;;33435:31:0;:23;33450:7;33435:14;:23::i;:::-;-1:-1:-1;;;;;33435:31:0;;33427:81;;;;-1:-1:-1;;;33427:81:0;;24781:2:1;33427:81:0;;;24763:21:1;24820:2;24800:18;;;24793:30;24859:34;24839:18;;;24832:62;-1:-1:-1;;;24910:18:1;;;24903:35;24955:19;;33427:81:0;24579:401:1;33427:81:0;-1:-1:-1;;;;;33527:16:0;;33519:65;;;;-1:-1:-1;;;33519:65:0;;25187:2:1;33519:65:0;;;25169:21:1;25226:2;25206:18;;;25199:30;25265:34;25245:18;;;25238:62;-1:-1:-1;;;25316:18:1;;;25309:34;25360:19;;33519:65:0;24985:400:1;33519:65:0;33701:29;33718:1;33722:7;33701:8;:29::i;:::-;-1:-1:-1;;;;;33743:15:0;;;;;;:9;:15;;;;;:20;;33762:1;;33743:15;:20;;33762:1;;33743:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33774:13:0;;;;;;:9;:13;;;;;:18;;33791:1;;33774:13;:18;;33791:1;;33774:18;:::i;:::-;;;;-1:-1:-1;;33803:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33803:21:0;-1:-1:-1;;;;;33803:21:0;;;;;;;;;33842:27;;33803:16;;33842:27;;;;;;;26239:341;26169:411;;:::o;41111:169::-;41200:5;41184:89;41212:3;41207:8;;:1;:8;;;41184:89;;41237:16;:24;;;;;;;-1:-1:-1;41237:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41217:3;41237:24;41217:3;:::i;:::-;;;;41184:89;;47424:507;47493:5;;47469:7;;47493:5;;;:10;;:24;;-1:-1:-1;47507:5:0;;;;:10;47493:24;47489:125;;;-1:-1:-1;47541:10:0;;47424:507::o;47489:125::-;47708:2;47686:12;;47666:38;;47686:12;;;;;47700:3;47666:19;:38::i;:::-;:44;;;47662:101;;-1:-1:-1;47734:10:0;;47424:507::o;47662:101::-;47791:9;;:28;;;-1:-1:-1;;;47791:28:0;;;;47775:13;;-1:-1:-1;;;;;47791:9:0;;:26;;:28;;;;;;;;;;;;;;47775:13;47791:9;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47775:44;-1:-1:-1;;;;;;47834:21:0;;47830:71;;47879:10;47872:17;;;47424:507;:::o;47830:71::-;47918:5;47424:507;-1:-1:-1;47424:507:0:o;48525:151::-;48574:12;:17;;48590:1;;48574:12;;;:17;;48590:1;;48574:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48618:1;48602:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;48634:12:0;;48649:1;48634:12;;;;:16;48630:38;;;48652:12;:16;;-1:-1:-1;;48652:16:0;;;48525:151::o;48161:352::-;48261:16;:23;48208:6;;;;48241:69;;48261:23;48241:19;:69::i;:::-;48227:83;;;;48321:14;48338:16;48355:6;48338:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;48321:41;;48402:16;48445:1;48419:16;:23;;;;:27;;;;:::i;:::-;48402:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;48375:16;48392:6;48375:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;48458:16;:22;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;48458:22:0;;;;;;;;;;;;;;;;;;;;;;;;48498:7;48161:352;-1:-1:-1;;48161:352:0:o;30884:110::-;30960:26;30970:2;30974:7;30960:26;;;;;;;;;;;;:9;:26::i;5382:191::-;5475:6;;;-1:-1:-1;;;;;5492:17:0;;;-1:-1:-1;;;;;;5492:17:0;;;;;;;5525:40;;5475:6;;;5492:17;5475:6;;5525:40;;5456:16;;5525:40;5445:128;5382:191;:::o;48684:728::-;48761:6;;;48805:102;48828:1;48824;:5;;;48805:102;;;48874:12;;;;48860:27;;;;:13;:27;;;;;;48851:44;;-1:-1:-1;;;;;48860:27:0;:35;48851:44;;:::i;:::-;;-1:-1:-1;48831:3:0;;;;:::i;:::-;;;;48805:102;;;-1:-1:-1;48919:11:0;49019:5;49057:16;49072:1;49057:12;:16;:::i;:::-;49206:12;;49269;;49304;;48980:355;;;;;;26347:19:1;;;;49047:27:0;;26382:12:1;;;26375:28;;;;49097:14:0;26491:2:1;26487:15;;;-1:-1:-1;;26483:24:1;;;26469:12;;;26462:46;49134:16:0;26524:12:1;;;26517:28;49173:10:0;26580:15:1;;;26576:24;26561:13;;;26554:47;26617:13;;;26610:29;;;;26655:13;;;26648:29;;;26693:13;;;26686:29;26772:3;26750:16;-1:-1:-1;;;;;;26750:16:1;26731:13;;;26724:61;26801:13;;48980:355:0;;;-1:-1:-1;;48980:355:0;;;;;;;;;48952:398;;48980:355;48952:398;;;;;-1:-1:-1;49388:15:0;49397:6;48952:398;49388:15;:::i;:::-;49374:30;48684:728;-1:-1:-1;;;;;48684:728:0:o;34362:315::-;34517:8;-1:-1:-1;;;;;34508:17:0;:5;-1:-1:-1;;;;;34508:17:0;;;34500:55;;;;-1:-1:-1;;;34500:55:0;;27276:2:1;34500:55:0;;;27258:21:1;27315:2;27295:18;;;27288:30;27354:27;27334:18;;;27327:55;27399:18;;34500:55:0;27074:349:1;34500:55:0;-1:-1:-1;;;;;34566:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;34566:46:0;;;;;;;;;;34628:41;;540::1;;;34628::0;;513:18:1;34628:41:0;;;;;;;34362:315;;;:::o;29272:::-;29429:28;29439:4;29445:2;29449:7;29429:9;:28::i;:::-;29476:48;29499:4;29505:2;29509:7;29518:5;29476:22;:48::i;:::-;29468:111;;;;-1:-1:-1;;;29468:111:0;;;;;;;:::i;398:723::-;454:13;675:10;671:53;;-1:-1:-1;;702:10:0;;;;;;;;;;;;-1:-1:-1;;;702:10:0;;;;;398:723::o;671:53::-;749:5;734:12;790:78;797:9;;790:78;;823:8;;;;:::i;:::-;;-1:-1:-1;846:10:0;;-1:-1:-1;854:2:0;846:10;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;900:17:0;;878:39;;928:154;935:10;;928:154;;962:11;972:1;962:11;;:::i;:::-;;-1:-1:-1;1031:10:0;1039:2;1031:5;:10;:::i;:::-;1018:24;;:2;:24;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;988:56:0;;;;;;;;-1:-1:-1;1059:11:0;1068:2;1059:11;;:::i;:::-;;;928:154;;31221:321;31351:18;31357:2;31361:7;31351:5;:18::i;:::-;31402:54;31433:1;31437:2;31441:7;31450:5;31402:22;:54::i;:::-;31380:154;;;;-1:-1:-1;;;31380:154:0;;;;;;;:::i;35242:799::-;35397:4;-1:-1:-1;;;;;35418:13:0;;7108:19;:23;35414:620;;35454:72;;-1:-1:-1;;;35454:72:0;;-1:-1:-1;;;;;35454:36:0;;;;;:72;;2916:10;;35505:4;;35511:7;;35520:5;;35454:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35454:72:0;;;;;;;;-1:-1:-1;;35454:72:0;;;;;;;;;;;;:::i;:::-;;;35450:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35696:13:0;;35692:272;;35739:60;;-1:-1:-1;;;35739:60:0;;;;;;;:::i;35692:272::-;35914:6;35908:13;35899:6;35895:2;35891:15;35884:38;35450:529;-1:-1:-1;;;;;;35577:51:0;-1:-1:-1;;;35577:51:0;;-1:-1:-1;35570:58:0;;35414:620;-1:-1:-1;36018:4:0;35242:799;;;;;;:::o;31878:439::-;-1:-1:-1;;;;;31958:16:0;;31950:61;;;;-1:-1:-1;;;31950:61:0;;28922:2:1;31950:61:0;;;28904:21:1;;;28941:18;;;28934:30;29000:34;28980:18;;;28973:62;29052:18;;31950:61:0;28720:356:1;31950:61:0;29965:4;29989:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29989:16:0;:30;32022:58;;;;-1:-1:-1;;;32022:58:0;;29283:2:1;32022:58:0;;;29265:21:1;29322:2;29302:18;;;29295:30;29361;29341:18;;;29334:58;29409:18;;32022:58:0;29081:352:1;32022:58:0;-1:-1:-1;;;;;32151:13:0;;;;;;:9;:13;;;;;:18;;32168:1;;32151:13;:18;;32168:1;;32151:18;:::i;:::-;;;;-1:-1:-1;;32180:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32180:21:0;-1:-1:-1;;;;;32180:21:0;;;;;;;;32219:33;;32180:16;;;32219:33;;32180:16;;32219:33;41288:566;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:131::-;-1:-1:-1;;;;;667:31:1;;657:42;;647:70;;713:1;710;703:12;728:247;787:6;840:2;828:9;819:7;815:23;811:32;808:52;;;856:1;853;846:12;808:52;895:9;882:23;914:31;939:5;914:31;:::i;980:258::-;1052:1;1062:113;1076:6;1073:1;1070:13;1062:113;;;1152:11;;;1146:18;1133:11;;;1126:39;1098:2;1091:10;1062:113;;;1193:6;1190:1;1187:13;1184:48;;;-1:-1:-1;;1228:1:1;1210:16;;1203:27;980:258::o;1243:::-;1285:3;1323:5;1317:12;1350:6;1345:3;1338:19;1366:63;1422:6;1415:4;1410:3;1406:14;1399:4;1392:5;1388:16;1366:63;:::i;:::-;1483:2;1462:15;-1:-1:-1;;1458:29:1;1449:39;;;;1490:4;1445:50;;1243:258;-1:-1:-1;;1243:258:1:o;1506:220::-;1655:2;1644:9;1637:21;1618:4;1675:45;1716:2;1705:9;1701:18;1693:6;1675:45;:::i;1731:180::-;1790:6;1843:2;1831:9;1822:7;1818:23;1814:32;1811:52;;;1859:1;1856;1849:12;1811:52;-1:-1:-1;1882:23:1;;1731:180;-1:-1:-1;1731:180:1:o;2124:315::-;2192:6;2200;2253:2;2241:9;2232:7;2228:23;2224:32;2221:52;;;2269:1;2266;2259:12;2221:52;2308:9;2295:23;2327:31;2352:5;2327:31;:::i;:::-;2377:5;2429:2;2414:18;;;;2401:32;;-1:-1:-1;;;2124:315:1:o;2444:159::-;2511:20;;2571:6;2560:18;;2550:29;;2540:57;;2593:1;2590;2583:12;2608:160;2673:20;;2729:13;;2722:21;2712:32;;2702:60;;2758:1;2755;2748:12;2773:252;2837:6;2845;2898:2;2886:9;2877:7;2873:23;2869:32;2866:52;;;2914:1;2911;2904:12;2866:52;2937:28;2955:9;2937:28;:::i;:::-;2927:38;;2984:35;3015:2;3004:9;3000:18;2984:35;:::i;:::-;2974:45;;2773:252;;;;;:::o;3030:180::-;3086:6;3139:2;3127:9;3118:7;3114:23;3110:32;3107:52;;;3155:1;3152;3145:12;3107:52;3178:26;3194:9;3178:26;:::i;3397:456::-;3474:6;3482;3490;3543:2;3531:9;3522:7;3518:23;3514:32;3511:52;;;3559:1;3556;3549:12;3511:52;3598:9;3585:23;3617:31;3642:5;3617:31;:::i;:::-;3667:5;-1:-1:-1;3724:2:1;3709:18;;3696:32;3737:33;3696:32;3737:33;:::i;:::-;3397:456;;3789:7;;-1:-1:-1;;;3843:2:1;3828:18;;;;3815:32;;3397:456::o;4278:252::-;4345:6;4353;4406:2;4394:9;4385:7;4381:23;4377:32;4374:52;;;4422:1;4419;4412:12;4374:52;4445:28;4463:9;4445:28;:::i;4535:127::-;4596:10;4591:3;4587:20;4584:1;4577:31;4627:4;4624:1;4617:15;4651:4;4648:1;4641:15;4667:632;4732:5;4762:18;4803:2;4795:6;4792:14;4789:40;;;4809:18;;:::i;:::-;4884:2;4878:9;4852:2;4938:15;;-1:-1:-1;;4934:24:1;;;4960:2;4930:33;4926:42;4914:55;;;4984:18;;;5004:22;;;4981:46;4978:72;;;5030:18;;:::i;:::-;5070:10;5066:2;5059:22;5099:6;5090:15;;5129:6;5121;5114:22;5169:3;5160:6;5155:3;5151:16;5148:25;5145:45;;;5186:1;5183;5176:12;5145:45;5236:6;5231:3;5224:4;5216:6;5212:17;5199:44;5291:1;5284:4;5275:6;5267;5263:19;5259:30;5252:41;;;;4667:632;;;;;:::o;5304:451::-;5373:6;5426:2;5414:9;5405:7;5401:23;5397:32;5394:52;;;5442:1;5439;5432:12;5394:52;5482:9;5469:23;5515:18;5507:6;5504:30;5501:50;;;5547:1;5544;5537:12;5501:50;5570:22;;5623:4;5615:13;;5611:27;-1:-1:-1;5601:55:1;;5652:1;5649;5642:12;5601:55;5675:74;5741:7;5736:2;5723:16;5718:2;5714;5710:11;5675:74;:::i;5984:248::-;6049:6;6057;6110:2;6098:9;6089:7;6085:23;6081:32;6078:52;;;6126:1;6123;6116:12;6078:52;6162:9;6149:23;6139:33;;6191:35;6222:2;6211:9;6207:18;6191:35;:::i;6237:315::-;6305:6;6313;6366:2;6354:9;6345:7;6341:23;6337:32;6334:52;;;6382:1;6379;6372:12;6334:52;6418:9;6405:23;6395:33;;6478:2;6467:9;6463:18;6450:32;6491:31;6516:5;6491:31;:::i;:::-;6541:5;6531:15;;;6237:315;;;;;:::o;6557:319::-;6624:6;6632;6685:2;6673:9;6664:7;6660:23;6656:32;6653:52;;;6701:1;6698;6691:12;6653:52;6724:28;6742:9;6724:28;:::i;:::-;6714:38;;6802:2;6791:9;6787:18;6774:32;6815:31;6840:5;6815:31;:::i;6881:248::-;6949:6;6957;7010:2;6998:9;6989:7;6985:23;6981:32;6978:52;;;7026:1;7023;7016:12;6978:52;-1:-1:-1;;7049:23:1;;;7119:2;7104:18;;;7091:32;;-1:-1:-1;6881:248:1:o;7134:315::-;7199:6;7207;7260:2;7248:9;7239:7;7235:23;7231:32;7228:52;;;7276:1;7273;7266:12;7228:52;7315:9;7302:23;7334:31;7359:5;7334:31;:::i;7454:795::-;7549:6;7557;7565;7573;7626:3;7614:9;7605:7;7601:23;7597:33;7594:53;;;7643:1;7640;7633:12;7594:53;7682:9;7669:23;7701:31;7726:5;7701:31;:::i;:::-;7751:5;-1:-1:-1;7808:2:1;7793:18;;7780:32;7821:33;7780:32;7821:33;:::i;:::-;7873:7;-1:-1:-1;7927:2:1;7912:18;;7899:32;;-1:-1:-1;7982:2:1;7967:18;;7954:32;8009:18;7998:30;;7995:50;;;8041:1;8038;8031:12;7995:50;8064:22;;8117:4;8109:13;;8105:27;-1:-1:-1;8095:55:1;;8146:1;8143;8136:12;8095:55;8169:74;8235:7;8230:2;8217:16;8212:2;8208;8204:11;8169:74;:::i;:::-;8159:84;;;7454:795;;;;;;;:::o;8476:184::-;8534:6;8587:2;8575:9;8566:7;8562:23;8558:32;8555:52;;;8603:1;8600;8593:12;8555:52;8626:28;8644:9;8626:28;:::i;8665:366::-;8727:8;8737:6;8791:3;8784:4;8776:6;8772:17;8768:27;8758:55;;8809:1;8806;8799:12;8758:55;-1:-1:-1;8832:20:1;;8875:18;8864:30;;8861:50;;;8907:1;8904;8897:12;8861:50;8944:4;8936:6;8932:17;8920:29;;9004:3;8997:4;8987:6;8984:1;8980:14;8972:6;8968:27;8964:38;8961:47;8958:67;;;9021:1;9018;9011:12;8958:67;8665:366;;;;;:::o;9036:435::-;9121:6;9129;9182:2;9170:9;9161:7;9157:23;9153:32;9150:52;;;9198:1;9195;9188:12;9150:52;9238:9;9225:23;9271:18;9263:6;9260:30;9257:50;;;9303:1;9300;9293:12;9257:50;9342:69;9403:7;9394:6;9383:9;9379:22;9342:69;:::i;:::-;9430:8;;9316:95;;-1:-1:-1;9036:435:1;-1:-1:-1;;;;9036:435:1:o;9476:388::-;9544:6;9552;9605:2;9593:9;9584:7;9580:23;9576:32;9573:52;;;9621:1;9618;9611:12;9573:52;9660:9;9647:23;9679:31;9704:5;9679:31;:::i;9869:256::-;9935:6;9943;9996:2;9984:9;9975:7;9971:23;9967:32;9964:52;;;10012:1;10009;10002:12;9964:52;10035:28;10053:9;10035:28;:::i;:::-;10025:38;;10082:37;10115:2;10104:9;10100:18;10082:37;:::i;10130:593::-;10223:6;10231;10239;10292:2;10280:9;10271:7;10267:23;10263:32;10260:52;;;10308:1;10305;10298:12;10260:52;10348:9;10335:23;10381:18;10373:6;10370:30;10367:50;;;10413:1;10410;10403:12;10367:50;10452:69;10513:7;10504:6;10493:9;10489:22;10452:69;:::i;:::-;10540:8;;-1:-1:-1;10426:95:1;-1:-1:-1;;10625:2:1;10610:18;;10597:32;10669:4;10658:16;;10648:27;;10638:55;;10689:1;10686;10679:12;10638:55;10712:5;10702:15;;;10130:593;;;;;:::o;10728:356::-;10930:2;10912:21;;;10949:18;;;10942:30;11008:34;11003:2;10988:18;;10981:62;11075:2;11060:18;;10728:356::o;11089:380::-;11168:1;11164:12;;;;11211;;;11232:61;;11286:4;11278:6;11274:17;11264:27;;11232:61;11339:2;11331:6;11328:14;11308:18;11305:38;11302:161;;;11385:10;11380:3;11376:20;11373:1;11366:31;11420:4;11417:1;11410:15;11448:4;11445:1;11438:15;11302:161;;11089:380;;;:::o;12714:413::-;12916:2;12898:21;;;12955:2;12935:18;;;12928:30;12994:34;12989:2;12974:18;;12967:62;-1:-1:-1;;;13060:2:1;13045:18;;13038:47;13117:3;13102:19;;12714:413::o;14433:127::-;14494:10;14489:3;14485:20;14482:1;14475:31;14525:4;14522:1;14515:15;14549:4;14546:1;14539:15;14565:128;14605:3;14636:1;14632:6;14629:1;14626:13;14623:39;;;14642:18;;:::i;:::-;-1:-1:-1;14678:9:1;;14565:128::o;14698:341::-;14900:2;14882:21;;;14939:2;14919:18;;;14912:30;-1:-1:-1;;;14973:2:1;14958:18;;14951:47;15030:2;15015:18;;14698:341::o;15392:406::-;15594:2;15576:21;;;15633:2;15613:18;;;15606:30;15672:34;15667:2;15652:18;;15645:62;-1:-1:-1;;;15738:2:1;15723:18;;15716:40;15788:3;15773:19;;15392:406::o;16512:184::-;16582:6;16635:2;16623:9;16614:7;16610:23;16606:32;16603:52;;;16651:1;16648;16641:12;16603:52;-1:-1:-1;16674:16:1;;16512:184;-1:-1:-1;16512:184:1:o;17325:224::-;17364:3;17392:6;17425:2;17422:1;17418:10;17455:2;17452:1;17448:10;17486:3;17482:2;17478:12;17473:3;17470:21;17467:47;;;17494:18;;:::i;:::-;17530:13;;17325:224;-1:-1:-1;;;;17325:224:1:o;18139:127::-;18200:10;18195:3;18191:20;18188:1;18181:31;18231:4;18228:1;18221:15;18255:4;18252:1;18245:15;18271:135;18310:3;-1:-1:-1;;18331:17:1;;18328:43;;;18351:18;;:::i;:::-;-1:-1:-1;18398:1:1;18387:13;;18271:135::o;18411:740::-;-1:-1:-1;;;;;18657:32:1;;18639:51;;18627:2;18709;18727:18;;;18720:30;;;18799:13;;18612:18;;;18821:22;;;18579:4;;18900:15;;;;18709:2;18874;18859:18;;;18579:4;18943:182;18957:6;18954:1;18951:13;18943:182;;;19022:13;;19037:6;19018:26;19006:39;;19100:15;;;;19065:12;;;;18979:1;18972:9;18943:182;;;-1:-1:-1;19142:3:1;;18411:740;-1:-1:-1;;;;;;;18411:740:1:o;20109:1527::-;20333:3;20371:6;20365:13;20397:4;20410:51;20454:6;20449:3;20444:2;20436:6;20432:15;20410:51;:::i;:::-;20524:13;;20483:16;;;;20546:55;20524:13;20483:16;20568:15;;;20546:55;:::i;:::-;20690:13;;20623:20;;;20663:1;;20750;20772:18;;;;20825;;;;20852:93;;20930:4;20920:8;20916:19;20904:31;;20852:93;20993:2;20983:8;20980:16;20960:18;20957:40;20954:167;;;-1:-1:-1;;;21020:33:1;;21076:4;21073:1;21066:15;21106:4;21027:3;21094:17;20954:167;21137:18;21164:110;;;;21288:1;21283:328;;;;21130:481;;21164:110;-1:-1:-1;;21199:24:1;;21185:39;;21244:20;;;;-1:-1:-1;21164:110:1;;21283:328;20056:1;20049:14;;;20093:4;20080:18;;21378:1;21392:169;21406:8;21403:1;21400:15;21392:169;;;21488:14;;21473:13;;;21466:37;21531:16;;;;21423:10;;21392:169;;;21396:3;;21592:8;21585:5;21581:20;21574:27;;21130:481;-1:-1:-1;21627:3:1;;20109:1527;-1:-1:-1;;;;;;;;;;;20109:1527:1:o;22757:125::-;22797:4;22825:1;22822;22819:8;22816:34;;;22830:18;;:::i;:::-;-1:-1:-1;22867:9:1;;22757:125::o;23586:168::-;23626:7;23692:1;23688;23684:6;23680:14;23677:1;23674:21;23669:1;23662:9;23655:17;23651:45;23648:71;;;23699:18;;:::i;:::-;-1:-1:-1;23739:9:1;;23586:168::o;25390:197::-;25428:3;25456:6;25497:2;25490:5;25486:14;25524:2;25515:7;25512:15;25509:41;;;25530:18;;:::i;:::-;25579:1;25566:15;;25390:197;-1:-1:-1;;;25390:197:1:o;25592:251::-;25662:6;25715:2;25703:9;25694:7;25690:23;25686:32;25683:52;;;25731:1;25728;25721:12;25683:52;25763:9;25757:16;25782:31;25807:5;25782:31;:::i;25848:127::-;25909:10;25904:3;25900:20;25897:1;25890:31;25940:4;25937:1;25930:15;25964:4;25961:1;25954:15;26825:127;26886:10;26881:3;26877:20;26874:1;26867:31;26917:4;26914:1;26907:15;26941:4;26938:1;26931:15;26957:112;26989:1;27015;27005:35;;27020:18;;:::i;:::-;-1:-1:-1;27054:9:1;;26957:112::o;27428:414::-;27630:2;27612:21;;;27669:2;27649:18;;;27642:30;27708:34;27703:2;27688:18;;27681:62;-1:-1:-1;;;27774:2:1;27759:18;;27752:48;27832:3;27817:19;;27428:414::o;27847:120::-;27887:1;27913;27903:35;;27918:18;;:::i;:::-;-1:-1:-1;27952:9:1;;27847:120::o;27972:489::-;-1:-1:-1;;;;;28241:15:1;;;28223:34;;28293:15;;28288:2;28273:18;;28266:43;28340:2;28325:18;;28318:34;;;28388:3;28383:2;28368:18;;28361:31;;;28166:4;;28409:46;;28435:19;;28427:6;28409:46;:::i;:::-;28401:54;27972:489;-1:-1:-1;;;;;;27972:489:1:o;28466:249::-;28535:6;28588:2;28576:9;28567:7;28563:23;28559:32;28556:52;;;28604:1;28601;28594:12;28556:52;28636:9;28630:16;28655:30;28679:5;28655:30;:::i

Swarm Source

ipfs://2d7317577212b0a3413d99026297fad30379dcfa5f415af0f661277c982daf02
Loading...
Loading
Loading...
Loading
[ 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.