ETH Price: $2,738.50 (+0.76%)

Token

XDROIDS (XDRD)
 

Overview

Max Total Supply

250 XDRD

Holders

95

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 XDRD
0xcb951993b70057de4151446e573073be23f7b9bf
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:
XDroids

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-31
*/

// SPDX-License-Identifier: GPL-3.0
// File: @openzeppelin/contracts/utils/Counters.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

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

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

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

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

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: @openzeppelin/contracts/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 v4.4.1 (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);
    }

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

    /**
     * @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 of token that is not own");
        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);
    }

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

// File: contracts/XDroids.sol



pragma solidity >=0.7.0 <0.9.0;




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

    enum XDroidType {
        LEGENDARY100,
        MIXED9900
    }

    string public baseURI;

    string public baseExtension = ".json";
    string public notRevealedUri;

    uint256 public cost = 0.09 ether;
    uint256 public discountedCost = 0.07 ether;
    uint256 public maxSupply = 10000;
    uint256 public maxMintAmount = 5;
    uint256 public nftPerAddressLimit = 5;
    uint256 public offset = 100;
    uint256 public threshold = 1200;

    uint256 public legendaryCost = 0.25 ether;
    uint256 public legendaryMaxSupply = 100;
    uint256 public legendaryMaxMintAmount = 1;
    uint256 public legendaryNftPerAddressLimit = 1;
    uint256 public legendaryOffset = 0;

    bool public paused = true;
    bool public revealed;
    bool public onlyWhitelisted = true;

    address[] public whitelistedAddresses;
    address[] public legendaryWhitelistedAddresses;

    bool public legendaryOnlyWhitelisted = true;

    Counters.Counter public totalSupplyNormal;
    Counters.Counter public totalSupplyLegendary;

    mapping(address => Counters.Counter) public addressMintedBalance;
    mapping(address => Counters.Counter) public legendaryAddressMintedBalance;
    mapping(uint256 => XDroidType) public tokenIdType;

    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI,
        string memory _initNotRevealedUri
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        setNotRevealedURI(_initNotRevealedUri);
    }

    // modifier
    function checkMintCompliance(
        uint256 _mintAmount,
        uint256 _totalSupply,
        uint256 _maxSupply,
        uint256 _cost,
        uint256 _maxMintAmount,
        Counters.Counter storage _mintedCount,
        uint256 _nftPerAddressLimit,
        bool _onlyWhitelisted,
        bool _isWhitelisted
    ) internal {
        if (msg.sender != owner()) {
            require(!paused, "the contract is paused");
            require(_mintAmount > 0, "need to mint at least 1 NFT");
            require(
                _totalSupply + _mintAmount <= _maxSupply,
                "max NFT limit exceeded"
            );
            require(msg.value >= _cost * _mintAmount, "insufficient funds");
            require(
                _mintAmount <= _maxMintAmount,
                "max mint amount per session exceeded"
            );
            if (_onlyWhitelisted) {
                require(_isWhitelisted, "user is not whitelisted");
                require(
                    _mintedCount.current() + _mintAmount <= _nftPerAddressLimit,
                    "max NFT per address exceeded"
                );
            }
        }
    }

    // internal
    function dynamicCost() internal view returns (uint256 _cost) {
        if (Counters.current(totalSupplyNormal) < threshold) {
            return discountedCost;
        }

        if (Counters.current(totalSupplyNormal) >= threshold) {
            return cost;
        }
    }

    // public
    function mint(uint256 _mintAmount) public payable {
        checkMintCompliance(
            _mintAmount,
            Counters.current(totalSupplyNormal),
            maxSupply,
            dynamicCost(),
            maxMintAmount,
            addressMintedBalance[msg.sender],
            nftPerAddressLimit,
            onlyWhitelisted,
            isWhitelisted(msg.sender)
        );

        _mintLoop(
            _mintAmount,
            addressMintedBalance[msg.sender],
            totalSupplyNormal,
            XDroidType.MIXED9900,
            offset
        );
    }

    function _mintLoop(
        uint256 _mintAmount,
        Counters.Counter storage mintedBalance,
        Counters.Counter storage totalSupplyForType,
        XDroidType _type,
        uint256 _offset
    ) internal {
        uint256 supply = totalSupplyForType.current();

        for (uint256 i = 1; i <= _mintAmount; i++) {
            mintedBalance.increment();
            totalSupplyForType.increment();
            uint256 nextTokenId = _offset + supply + i;
            tokenIdType[nextTokenId] = _type;
            _safeMint(msg.sender, nextTokenId);
        }
    }

    function isWhitelisted(address _user) public view returns (bool) {
        for (uint256 i = 0; i < whitelistedAddresses.length; i++) {
            if (whitelistedAddresses[i] == _user) {
                return true;
            }
        }
        return false;
    }

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

        string memory _currentBaseURI = baseURI;
        uint256 _totalSupplyType;
        uint256 _offset = offset;

        if (tokenIdType[tokenId] == XDroidType.LEGENDARY100) {
            _offset = legendaryOffset;
            _totalSupplyType = totalSupplyLegendary.current();
        } else {
            _totalSupplyType = totalSupplyNormal.current();
        }

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

        return
            bytes(_currentBaseURI).length > 0
                ? string(
                    abi.encodePacked(
                        _currentBaseURI,
                        tokenId.toString(),
                        baseExtension
                    )
                )
                : "";
    }

    function totalSupply() public view returns (uint256 _totalSupply) {
        return totalSupplyNormal.current() + totalSupplyLegendary.current();
    }

    //only owner
    function reveal() public onlyOwner {
        revealed = true;
    }

    function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
        nftPerAddressLimit = _limit;
    }

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

    function setDiscountedCost(uint256 _newCost) public onlyOwner {
        discountedCost = _newCost;
    }

    function setMaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

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

    function setOnlyWhitelisted(bool _state) public onlyOwner {
        onlyWhitelisted = _state;
    }

    function whitelistUsers(address[] calldata _users) public onlyOwner {
        delete whitelistedAddresses;
        whitelistedAddresses = _users;
    }

    /**
    Legendary
     */

    function mintLegendary(uint256 _mintAmount) public payable {
        checkMintCompliance(
            _mintAmount,
            totalSupplyLegendary.current(),
            legendaryMaxSupply,
            legendaryCost,
            legendaryMaxMintAmount,
            legendaryAddressMintedBalance[msg.sender],
            legendaryNftPerAddressLimit,
            legendaryOnlyWhitelisted,
            isWhitelistedLegendary(msg.sender)
        );

        _mintLoop(
            _mintAmount,
            legendaryAddressMintedBalance[msg.sender],
            totalSupplyLegendary,
            XDroidType.LEGENDARY100,
            legendaryOffset
        );
    }

    function setLegendaryMaxMintAmount(uint256 _newmaxMintAmount)
        public
        onlyOwner
    {
        legendaryMaxMintAmount = _newmaxMintAmount;
    }

    function setLegendaryOffset(uint256 _newLegendaryOffset) public onlyOwner {
        legendaryOffset = _newLegendaryOffset;
    }

    function setLegendaryCost(uint256 _newCost) public onlyOwner {
        legendaryCost = _newCost;
    }

    function whitelistLegendaryUsers(address[] calldata _users)
        public
        onlyOwner
    {
        delete legendaryWhitelistedAddresses;
        legendaryWhitelistedAddresses = _users;
    }

    function setOnlyWhitelistedLegendary(bool _state) public onlyOwner {
        legendaryOnlyWhitelisted = _state;
    }

    function isWhitelistedLegendary(address _user) public view returns (bool) {
        for (uint256 i = 0; i < legendaryWhitelistedAddresses.length; i++) {
            if (legendaryWhitelistedAddresses[i] == _user) {
                return true;
            }
        }
        return false;
    }

    /**
    SHARED METHODS
    */
    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountedCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelistedLegendary","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"legendaryAddressMintedBalance","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendaryCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendaryMaxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendaryMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendaryNftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendaryOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendaryOnlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"legendaryWhitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintLegendary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"offset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setDiscountedCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setLegendaryCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setLegendaryMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLegendaryOffset","type":"uint256"}],"name":"setLegendaryOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelistedLegendary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdType","outputs":[{"internalType":"enum XDroids.XDroidType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyLegendary","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyNormal","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistLegendaryUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506008908051906020019062000051929190620003f8565b5067013fbe85edc90000600a5566f8b0a10e470000600b55612710600c556005600d556005600e556064600f556104b06010556703782dace9d9000060115560646012556001601355600160145560006015556001601660006101000a81548160ff0219169083151502179055506001601660026101000a81548160ff0219169083151502179055506001601960006101000a81548160ff0219169083151502179055503480156200010257600080fd5b5060405162005c0438038062005c04833981810160405281019062000128919062000645565b8383816000908051906020019062000142929190620003f8565b5080600190805190602001906200015b929190620003f8565b5050506200017e62000172620001aa60201b60201c565b620001b260201b60201c565b6200018f826200027860201b60201c565b620001a0816200032360201b60201c565b505050506200081b565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000288620001aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ae620003ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000307576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fe9062000794565b60405180910390fd5b80600790805190602001906200031f929190620003f8565b5050565b62000333620001aa60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000359620003ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a99062000794565b60405180910390fd5b8060099080519060200190620003ca929190620003f8565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200040690620007e5565b90600052602060002090601f0160209004810192826200042a576000855562000476565b82601f106200044557805160ff191683800117855562000476565b8280016001018555821562000476579182015b828111156200047557825182559160200191906001019062000458565b5b50905062000485919062000489565b5090565b5b80821115620004a45760008160009055506001016200048a565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200051182620004c6565b810181811067ffffffffffffffff82111715620005335762000532620004d7565b5b80604052505050565b600062000548620004a8565b905062000556828262000506565b919050565b600067ffffffffffffffff821115620005795762000578620004d7565b5b6200058482620004c6565b9050602081019050919050565b60005b83811015620005b157808201518184015260208101905062000594565b83811115620005c1576000848401525b50505050565b6000620005de620005d8846200055b565b6200053c565b905082815260208101848484011115620005fd57620005fc620004c1565b5b6200060a84828562000591565b509392505050565b600082601f8301126200062a5762000629620004bc565b5b81516200063c848260208601620005c7565b91505092915050565b60008060008060808587031215620006625762000661620004b2565b5b600085015167ffffffffffffffff811115620006835762000682620004b7565b5b620006918782880162000612565b945050602085015167ffffffffffffffff811115620006b557620006b4620004b7565b5b620006c38782880162000612565b935050604085015167ffffffffffffffff811115620006e757620006e6620004b7565b5b620006f58782880162000612565b925050606085015167ffffffffffffffff811115620007195762000718620004b7565b5b620007278782880162000612565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200077c60208362000733565b9150620007898262000744565b602082019050919050565b60006020820190508181036000830152620007af816200076d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007fe57607f821691505b60208210811415620008155762000814620007b6565b5b50919050565b6153d9806200082b6000396000f3fe6080604052600436106103c35760003560e01c80636c0360eb116101f2578063a475b5dd1161010d578063d0eb26b0116100a0578063e985e9c51161006f578063e985e9c514610e29578063edec5f2714610e66578063f2c4ce1e14610e8f578063f2fde38b14610eb8576103c3565b8063d0eb26b014610d81578063d555654414610daa578063d5abeb0114610dd5578063da3ef23f14610e00576103c3565b8063ba7d2c76116100dc578063ba7d2c7614610cc3578063c48fb90114610cee578063c668286214610d19578063c87b56dd14610d44576103c3565b8063a475b5dd14610c1b578063b0324ec614610c32578063b88d4fde14610c5d578063ba4e5c4914610c86576103c3565b80638a76d0281161018557806399dd2a071161015457806399dd2a0714610b805780639c70b51214610bab578063a0712d6814610bd6578063a22cb46514610bf2576103c3565b80638a76d02814610ab05780638da5cb5b14610aed57806395d89b4114610b1857806399bbb00e14610b43576103c3565b8063715018a6116101c1578063715018a614610a2957806371cb8ca514610a40578063769b45cf14610a695780637b72d59f14610a94576103c3565b80636c0360eb146109595780636ec7f758146109845780636f2829ba146109af57806370a08231146109ec576103c3565b80633c952764116102e25780634dd003101161027557806356e2c3ac1161024457806356e2c3ac1461088b5780635bb91330146108b45780635c975abb146108f15780636352211e1461091c576103c3565b80634dd00310146107e35780635163c84c1461080e578063518302271461083757806355f804b314610862576103c3565b806342cde4e8116102b157806342cde4e81461073b57806344a0d68a146107665780634738867a1461078f57806348f5d753146107ba576103c3565b80633c952764146106b65780633ccfd60b146106df5780634214ff25146106e957806342842e0e14610712576103c3565b806313faede61161035a578063239c70ae11610329578063239c70ae146105fa57806323b872dd146106255780632b15bbeb1461064e5780633af32abf14610679576103c3565b806313faede61461053e57806315e3902f1461056957806318160ddd1461059257806318cae269146105bd576103c3565b8063081812fc11610396578063081812fc14610484578063081c8c44146104c1578063088a4ed0146104ec578063095ea7b314610515576103c3565b806301ffc9a7146103c857806302329a29146104055780630586c1011461042e57806306fdde0314610459575b600080fd5b3480156103d457600080fd5b506103ef60048036038101906103ea9190613bad565b610ee1565b6040516103fc9190613bf5565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613c3c565b610fc3565b005b34801561043a57600080fd5b5061044361105c565b6040516104509190613c82565b60405180910390f35b34801561046557600080fd5b5061046e611062565b60405161047b9190613d36565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190613d84565b6110f4565b6040516104b89190613df2565b60405180910390f35b3480156104cd57600080fd5b506104d6611179565b6040516104e39190613d36565b60405180910390f35b3480156104f857600080fd5b50610513600480360381019061050e9190613d84565b611207565b005b34801561052157600080fd5b5061053c60048036038101906105379190613e39565b61128d565b005b34801561054a57600080fd5b506105536113a5565b6040516105609190613c82565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613d84565b6113ab565b005b34801561059e57600080fd5b506105a7611431565b6040516105b49190613c82565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613e79565b611456565b6040516105f19190613c82565b60405180910390f35b34801561060657600080fd5b5061060f611474565b60405161061c9190613c82565b60405180910390f35b34801561063157600080fd5b5061064c60048036038101906106479190613ea6565b61147a565b005b34801561065a57600080fd5b506106636114da565b6040516106709190613c82565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613e79565b6114e0565b6040516106ad9190613bf5565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190613c3c565b61158f565b005b6106e7611628565b005b3480156106f557600080fd5b50610710600480360381019061070b9190613d84565b611724565b005b34801561071e57600080fd5b5061073960048036038101906107349190613ea6565b6117aa565b005b34801561074757600080fd5b506107506117ca565b60405161075d9190613c82565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613d84565b6117d0565b005b34801561079b57600080fd5b506107a4611856565b6040516107b19190613c82565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190613d84565b61185c565b005b3480156107ef57600080fd5b506107f86118e2565b6040516108059190613c82565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613f5e565b6118e8565b005b34801561084357600080fd5b5061084c611988565b6040516108599190613bf5565b60405180910390f35b34801561086e57600080fd5b50610889600480360381019061088491906140db565b61199b565b005b34801561089757600080fd5b506108b260048036038101906108ad9190613c3c565b611a31565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613e79565b611aca565b6040516108e89190613bf5565b60405180910390f35b3480156108fd57600080fd5b50610906611b79565b6040516109139190613bf5565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e9190613d84565b611b8c565b6040516109509190613df2565b60405180910390f35b34801561096557600080fd5b5061096e611c3e565b60405161097b9190613d36565b60405180910390f35b34801561099057600080fd5b50610999611ccc565b6040516109a69190613c82565b60405180910390f35b3480156109bb57600080fd5b506109d660048036038101906109d19190613d84565b611cd2565b6040516109e3919061419b565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e9190613e79565b611cf2565b604051610a209190613c82565b60405180910390f35b348015610a3557600080fd5b50610a3e611daa565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613d84565b611e32565b005b348015610a7557600080fd5b50610a7e611eb8565b604051610a8b9190613c82565b60405180910390f35b610aae6004803603810190610aa99190613d84565b611ec4565b005b348015610abc57600080fd5b50610ad76004803603810190610ad29190613e79565b611f8d565b604051610ae49190613c82565b60405180910390f35b348015610af957600080fd5b50610b02611fab565b604051610b0f9190613df2565b60405180910390f35b348015610b2457600080fd5b50610b2d611fd5565b604051610b3a9190613d36565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b659190613d84565b612067565b604051610b779190613df2565b60405180910390f35b348015610b8c57600080fd5b50610b956120a6565b604051610ba29190613bf5565b60405180910390f35b348015610bb757600080fd5b50610bc06120b9565b604051610bcd9190613bf5565b60405180910390f35b610bf06004803603810190610beb9190613d84565b6120cc565b005b348015610bfe57600080fd5b50610c196004803603810190610c1491906141b6565b61219a565b005b348015610c2757600080fd5b50610c306121b0565b005b348015610c3e57600080fd5b50610c47612249565b604051610c549190613c82565b60405180910390f35b348015610c6957600080fd5b50610c846004803603810190610c7f9190614297565b612255565b005b348015610c9257600080fd5b50610cad6004803603810190610ca89190613d84565b6122b7565b604051610cba9190613df2565b60405180910390f35b348015610ccf57600080fd5b50610cd86122f6565b604051610ce59190613c82565b60405180910390f35b348015610cfa57600080fd5b50610d036122fc565b604051610d109190613c82565b60405180910390f35b348015610d2557600080fd5b50610d2e612302565b604051610d3b9190613d36565b60405180910390f35b348015610d5057600080fd5b50610d6b6004803603810190610d669190613d84565b612390565b604051610d789190613d36565b60405180910390f35b348015610d8d57600080fd5b50610da86004803603810190610da39190613d84565b6125e9565b005b348015610db657600080fd5b50610dbf61266f565b604051610dcc9190613c82565b60405180910390f35b348015610de157600080fd5b50610dea612675565b604051610df79190613c82565b60405180910390f35b348015610e0c57600080fd5b50610e276004803603810190610e2291906140db565b61267b565b005b348015610e3557600080fd5b50610e506004803603810190610e4b919061431a565b612711565b604051610e5d9190613bf5565b60405180910390f35b348015610e7257600080fd5b50610e8d6004803603810190610e889190613f5e565b6127a5565b005b348015610e9b57600080fd5b50610eb66004803603810190610eb191906140db565b612845565b005b348015610ec457600080fd5b50610edf6004803603810190610eda9190613e79565b6128db565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fac57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fbc5750610fbb826129d3565b5b9050919050565b610fcb612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610fe9611fab565b73ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906143a6565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b60115481565b606060008054611071906143f5565b80601f016020809104026020016040519081016040528092919081815260200182805461109d906143f5565b80156110ea5780601f106110bf576101008083540402835291602001916110ea565b820191906000526020600020905b8154815290600101906020018083116110cd57829003601f168201915b5050505050905090565b60006110ff82612a45565b61113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590614499565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60098054611186906143f5565b80601f01602080910402602001604051908101604052809291908181526020018280546111b2906143f5565b80156111ff5780601f106111d4576101008083540402835291602001916111ff565b820191906000526020600020905b8154815290600101906020018083116111e257829003601f168201915b505050505081565b61120f612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661122d611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a906143a6565b60405180910390fd5b80600d8190555050565b600061129882611b8c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113009061452b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611328612a3d565b73ffffffffffffffffffffffffffffffffffffffff161480611357575061135681611351612a3d565b612711565b5b611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d906145bd565b60405180910390fd5b6113a08383612ab1565b505050565b600a5481565b6113b3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166113d1611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e906143a6565b60405180910390fd5b80600b8190555050565b600061143d601b612b6a565b611447601a612b6a565b611451919061460c565b905090565b601c6020528060005260406000206000915090508060000154905081565b600d5481565b61148b611485612a3d565b82612b78565b6114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c1906146d4565b60405180910390fd5b6114d5838383612c56565b505050565b600b5481565b600080600090505b601780549050811015611584578273ffffffffffffffffffffffffffffffffffffffff16601782815481106115205761151f6146f4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561157157600191505061158a565b808061157c90614723565b9150506114e8565b50600090505b919050565b611597612a3d565b73ffffffffffffffffffffffffffffffffffffffff166115b5611fab565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611602906143a6565b60405180910390fd5b80601660026101000a81548160ff02191690831515021790555050565b611630612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661164e611fab565b73ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b906143a6565b60405180910390fd5b60006116ae611fab565b73ffffffffffffffffffffffffffffffffffffffff16476040516116d19061479d565b60006040518083038185875af1925050503d806000811461170e576040519150601f19603f3d011682016040523d82523d6000602084013e611713565b606091505b505090508061172157600080fd5b50565b61172c612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661174a611fab565b73ffffffffffffffffffffffffffffffffffffffff16146117a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611797906143a6565b60405180910390fd5b8060118190555050565b6117c583838360405180602001604052806000815250612255565b505050565b60105481565b6117d8612a3d565b73ffffffffffffffffffffffffffffffffffffffff166117f6611fab565b73ffffffffffffffffffffffffffffffffffffffff161461184c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611843906143a6565b60405180910390fd5b80600a8190555050565b60135481565b611864612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611882611fab565b73ffffffffffffffffffffffffffffffffffffffff16146118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906143a6565b60405180910390fd5b8060138190555050565b60125481565b6118f0612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661190e611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b906143a6565b60405180910390fd5b6018600061197291906139dd565b8181601891906119839291906139fe565b505050565b601660019054906101000a900460ff1681565b6119a3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119c1611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e906143a6565b60405180910390fd5b8060079080519060200190611a2d929190613a9e565b5050565b611a39612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a57611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa4906143a6565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b600080600090505b601880549050811015611b6e578273ffffffffffffffffffffffffffffffffffffffff1660188281548110611b0a57611b096146f4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b5b576001915050611b74565b8080611b6690614723565b915050611ad2565b50600090505b919050565b601660009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90614824565b60405180910390fd5b80915050919050565b60078054611c4b906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c77906143f5565b8015611cc45780601f10611c9957610100808354040283529160200191611cc4565b820191906000526020600020905b815481529060010190602001808311611ca757829003601f168201915b505050505081565b60145481565b601e6020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a906148b6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611db2612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611dd0611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d906143a6565b60405180910390fd5b611e306000612eb2565b565b611e3a612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611e58611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea5906143a6565b60405180910390fd5b8060158190555050565b601b8060000154905081565b611f3b81611ed2601b612b6a565b601254601154601354601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020601454601960009054906101000a900460ff16611f3633611aca565b612f78565b611f8a81601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020601b60006015546131cd565b50565b601d6020528060005260406000206000915090508060000154905081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611fe4906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612010906143f5565b801561205d5780601f106120325761010080835404028352916020019161205d565b820191906000526020600020905b81548152906001019060200180831161204057829003601f168201915b5050505050905090565b6018818154811061207757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900460ff1681565b601660029054906101000a900460ff1681565b612148816120da601a612b6a565b600c546120e5613277565b600d54601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e54601660029054906101000a900460ff16612143336114e0565b612f78565b61219781601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020601a6001600f546131cd565b50565b6121ac6121a5612a3d565b83836132b6565b5050565b6121b8612a3d565b73ffffffffffffffffffffffffffffffffffffffff166121d6611fab565b73ffffffffffffffffffffffffffffffffffffffff161461222c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612223906143a6565b60405180910390fd5b6001601660016101000a81548160ff021916908315150217905550565b601a8060000154905081565b612266612260612a3d565b83612b78565b6122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c906146d4565b60405180910390fd5b6122b184848484613423565b50505050565b601781815481106122c757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60155481565b6008805461230f906143f5565b80601f016020809104026020016040519081016040528092919081815260200182805461233b906143f5565b80156123885780601f1061235d57610100808354040283529160200191612388565b820191906000526020600020905b81548152906001019060200180831161236b57829003601f168201915b505050505081565b606061239b82612a45565b6123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190614948565b60405180910390fd5b6000600780546123e9906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612415906143f5565b80156124625780601f1061243757610100808354040283529160200191612462565b820191906000526020600020905b81548152906001019060200180831161244557829003601f168201915b50505050509050600080600f5490506000600181111561248557612484614124565b5b601e600087815260200190815260200160002060009054906101000a900460ff1660018111156124b8576124b7614124565b5b14156124d45760155490506124cd601b612b6a565b91506124e1565b6124de601a612b6a565b91505b60001515601660019054906101000a900460ff1615151415612592576009805461250a906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612536906143f5565b80156125835780601f1061255857610100808354040283529160200191612583565b820191906000526020600020905b81548152906001019060200180831161256657829003601f168201915b505050505093505050506125e4565b60008351116125b057604051806020016040528060008152506125de565b826125ba8661347f565b60086040516020016125ce93929190614a38565b6040516020818303038152906040525b93505050505b919050565b6125f1612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661260f611fab565b73ffffffffffffffffffffffffffffffffffffffff1614612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c906143a6565b60405180910390fd5b80600e8190555050565b600f5481565b600c5481565b612683612a3d565b73ffffffffffffffffffffffffffffffffffffffff166126a1611fab565b73ffffffffffffffffffffffffffffffffffffffff16146126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee906143a6565b60405180910390fd5b806008908051906020019061270d929190613a9e565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127ad612a3d565b73ffffffffffffffffffffffffffffffffffffffff166127cb611fab565b73ffffffffffffffffffffffffffffffffffffffff1614612821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612818906143a6565b60405180910390fd5b6017600061282f91906139dd565b8181601791906128409291906139fe565b505050565b61284d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661286b611fab565b73ffffffffffffffffffffffffffffffffffffffff16146128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b8906143a6565b60405180910390fd5b80600990805190602001906128d7929190613a9e565b5050565b6128e3612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612901611fab565b73ffffffffffffffffffffffffffffffffffffffff1614612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e906143a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90614adb565b60405180910390fd5b6129d081612eb2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b2483611b8c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612b8382612a45565b612bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb990614b6d565b60405180910390fd5b6000612bcd83611b8c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c3c57508373ffffffffffffffffffffffffffffffffffffffff16612c24846110f4565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c4d5750612c4c8185612711565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c7682611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614bff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3390614c91565b60405180910390fd5b612d478383836135e0565b612d52600082612ab1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612da29190614cb1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df9919061460c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f80611fab565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131c257601660009054906101000a900460ff1615613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff990614d31565b60405180910390fd5b60008911613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303c90614d9d565b60405180910390fd5b868989613052919061460c565b1115613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308a90614e09565b60405180910390fd5b888661309f9190614e29565b3410156130e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d890614ecf565b60405180910390fd5b84891115613124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311b90614f61565b60405180910390fd5b81156131c1578061316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614fcd565b60405180910390fd5b828961317586612b6a565b61317f919061460c565b11156131c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b790615039565b60405180910390fd5b5b5b505050505050505050565b60006131d884612b6a565b90506000600190505b86811161326e576131f1866135e5565b6131fa856135e5565b6000818385613209919061460c565b613213919061460c565b905084601e600083815260200190815260200160002060006101000a81548160ff0219169083600181111561324b5761324a614124565b5b021790555061325a33826135fb565b50808061326690614723565b9150506131e1565b50505050505050565b6000601054613286601a612b6a565b101561329657600b5490506132b3565b6010546132a3601a612b6a565b106132b257600a5490506132b3565b5b90565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331c906150a5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134169190613bf5565b60405180910390a3505050565b61342e848484612c56565b61343a84848484613619565b613479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347090615137565b60405180910390fd5b50505050565b606060008214156134c7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135db565b600082905060005b600082146134f95780806134e290614723565b915050600a826134f29190615186565b91506134cf565b60008167ffffffffffffffff81111561351557613514613fb0565b5b6040519080825280601f01601f1916602001820160405280156135475781602001600182028036833780820191505090505b5090505b600085146135d4576001826135609190614cb1565b9150600a8561356f91906151b7565b603061357b919061460c565b60f81b818381518110613591576135906146f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135cd9190615186565b945061354b565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b6136158282604051806020016040528060008152506137a1565b5050565b600061363a8473ffffffffffffffffffffffffffffffffffffffff166137fc565b15613794578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613663612a3d565b8786866040518563ffffffff1660e01b8152600401613685949392919061523d565b6020604051808303816000875af19250505080156136c157506040513d601f19601f820116820180604052508101906136be919061529e565b60015b613744573d80600081146136f1576040519150601f19603f3d011682016040523d82523d6000602084013e6136f6565b606091505b5060008151141561373c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373390615137565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613799565b600190505b949350505050565b6137ab838361380f565b6137b86000848484613619565b6137f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ee90615137565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561387f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387690615317565b60405180910390fd5b61388881612a45565b156138c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138bf90615383565b60405180910390fd5b6138d4600083836135e0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613924919061460c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b50805460008255906000526020600020908101906139fb9190613b24565b50565b828054828255906000526020600020908101928215613a8d579160200282015b82811115613a8c57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613a1e565b5b509050613a9a9190613b24565b5090565b828054613aaa906143f5565b90600052602060002090601f016020900481019282613acc5760008555613b13565b82601f10613ae557805160ff1916838001178555613b13565b82800160010185558215613b13579182015b82811115613b12578251825591602001919060010190613af7565b5b509050613b209190613b24565b5090565b5b80821115613b3d576000816000905550600101613b25565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b8a81613b55565b8114613b9557600080fd5b50565b600081359050613ba781613b81565b92915050565b600060208284031215613bc357613bc2613b4b565b5b6000613bd184828501613b98565b91505092915050565b60008115159050919050565b613bef81613bda565b82525050565b6000602082019050613c0a6000830184613be6565b92915050565b613c1981613bda565b8114613c2457600080fd5b50565b600081359050613c3681613c10565b92915050565b600060208284031215613c5257613c51613b4b565b5b6000613c6084828501613c27565b91505092915050565b6000819050919050565b613c7c81613c69565b82525050565b6000602082019050613c976000830184613c73565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cd7578082015181840152602081019050613cbc565b83811115613ce6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d0882613c9d565b613d128185613ca8565b9350613d22818560208601613cb9565b613d2b81613cec565b840191505092915050565b60006020820190508181036000830152613d508184613cfd565b905092915050565b613d6181613c69565b8114613d6c57600080fd5b50565b600081359050613d7e81613d58565b92915050565b600060208284031215613d9a57613d99613b4b565b5b6000613da884828501613d6f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ddc82613db1565b9050919050565b613dec81613dd1565b82525050565b6000602082019050613e076000830184613de3565b92915050565b613e1681613dd1565b8114613e2157600080fd5b50565b600081359050613e3381613e0d565b92915050565b60008060408385031215613e5057613e4f613b4b565b5b6000613e5e85828601613e24565b9250506020613e6f85828601613d6f565b9150509250929050565b600060208284031215613e8f57613e8e613b4b565b5b6000613e9d84828501613e24565b91505092915050565b600080600060608486031215613ebf57613ebe613b4b565b5b6000613ecd86828701613e24565b9350506020613ede86828701613e24565b9250506040613eef86828701613d6f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613f1e57613f1d613ef9565b5b8235905067ffffffffffffffff811115613f3b57613f3a613efe565b5b602083019150836020820283011115613f5757613f56613f03565b5b9250929050565b60008060208385031215613f7557613f74613b4b565b5b600083013567ffffffffffffffff811115613f9357613f92613b50565b5b613f9f85828601613f08565b92509250509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fe882613cec565b810181811067ffffffffffffffff8211171561400757614006613fb0565b5b80604052505050565b600061401a613b41565b90506140268282613fdf565b919050565b600067ffffffffffffffff82111561404657614045613fb0565b5b61404f82613cec565b9050602081019050919050565b82818337600083830152505050565b600061407e6140798461402b565b614010565b90508281526020810184848401111561409a57614099613fab565b5b6140a584828561405c565b509392505050565b600082601f8301126140c2576140c1613ef9565b5b81356140d284826020860161406b565b91505092915050565b6000602082840312156140f1576140f0613b4b565b5b600082013567ffffffffffffffff81111561410f5761410e613b50565b5b61411b848285016140ad565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811061416457614163614124565b5b50565b600081905061417582614153565b919050565b600061418582614167565b9050919050565b6141958161417a565b82525050565b60006020820190506141b0600083018461418c565b92915050565b600080604083850312156141cd576141cc613b4b565b5b60006141db85828601613e24565b92505060206141ec85828601613c27565b9150509250929050565b600067ffffffffffffffff82111561421157614210613fb0565b5b61421a82613cec565b9050602081019050919050565b600061423a614235846141f6565b614010565b90508281526020810184848401111561425657614255613fab565b5b61426184828561405c565b509392505050565b600082601f83011261427e5761427d613ef9565b5b813561428e848260208601614227565b91505092915050565b600080600080608085870312156142b1576142b0613b4b565b5b60006142bf87828801613e24565b94505060206142d087828801613e24565b93505060406142e187828801613d6f565b925050606085013567ffffffffffffffff81111561430257614301613b50565b5b61430e87828801614269565b91505092959194509250565b6000806040838503121561433157614330613b4b565b5b600061433f85828601613e24565b925050602061435085828601613e24565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614390602083613ca8565b915061439b8261435a565b602082019050919050565b600060208201905081810360008301526143bf81614383565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061440d57607f821691505b60208210811415614421576144206143c6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614483602c83613ca8565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614515602183613ca8565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006145a7603883613ca8565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061461782613c69565b915061462283613c69565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614657576146566145dd565b5b828201905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006146be603183613ca8565b91506146c982614662565b604082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061472e82613c69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614761576147606145dd565b5b600182019050919050565b600081905092915050565b50565b600061478760008361476c565b915061479282614777565b600082019050919050565b60006147a88261477a565b9150819050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061480e602983613ca8565b9150614819826147b2565b604082019050919050565b6000602082019050818103600083015261483d81614801565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006148a0602a83613ca8565b91506148ab82614844565b604082019050919050565b600060208201905081810360008301526148cf81614893565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614932602f83613ca8565b915061493d826148d6565b604082019050919050565b6000602082019050818103600083015261496181614925565b9050919050565b600081905092915050565b600061497e82613c9d565b6149888185614968565b9350614998818560208601613cb9565b80840191505092915050565b60008190508160005260206000209050919050565b600081546149c6816143f5565b6149d08186614968565b945060018216600081146149eb57600181146149fc57614a2f565b60ff19831686528186019350614a2f565b614a05856149a4565b60005b83811015614a2757815481890152600182019150602081019050614a08565b838801955050505b50505092915050565b6000614a448286614973565b9150614a508285614973565b9150614a5c82846149b9565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ac5602683613ca8565b9150614ad082614a69565b604082019050919050565b60006020820190508181036000830152614af481614ab8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b57602c83613ca8565b9150614b6282614afb565b604082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614be9602983613ca8565b9150614bf482614b8d565b604082019050919050565b60006020820190508181036000830152614c1881614bdc565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c7b602483613ca8565b9150614c8682614c1f565b604082019050919050565b60006020820190508181036000830152614caa81614c6e565b9050919050565b6000614cbc82613c69565b9150614cc783613c69565b925082821015614cda57614cd96145dd565b5b828203905092915050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b6000614d1b601683613ca8565b9150614d2682614ce5565b602082019050919050565b60006020820190508181036000830152614d4a81614d0e565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6000614d87601b83613ca8565b9150614d9282614d51565b602082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b6000614df3601683613ca8565b9150614dfe82614dbd565b602082019050919050565b60006020820190508181036000830152614e2281614de6565b9050919050565b6000614e3482613c69565b9150614e3f83613c69565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e7857614e776145dd565b5b828202905092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000614eb9601283613ca8565b9150614ec482614e83565b602082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b6000614f4b602483613ca8565b9150614f5682614eef565b604082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b6000614fb7601783613ca8565b9150614fc282614f81565b602082019050919050565b60006020820190508181036000830152614fe681614faa565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000615023601c83613ca8565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061508f601983613ca8565b915061509a82615059565b602082019050919050565b600060208201905081810360008301526150be81615082565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615121603283613ca8565b915061512c826150c5565b604082019050919050565b6000602082019050818103600083015261515081615114565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061519182613c69565b915061519c83613c69565b9250826151ac576151ab615157565b5b828204905092915050565b60006151c282613c69565b91506151cd83613c69565b9250826151dd576151dc615157565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061520f826151e8565b61521981856151f3565b9350615229818560208601613cb9565b61523281613cec565b840191505092915050565b60006080820190506152526000830187613de3565b61525f6020830186613de3565b61526c6040830185613c73565b818103606083015261527e8184615204565b905095945050505050565b60008151905061529881613b81565b92915050565b6000602082840312156152b4576152b3613b4b565b5b60006152c284828501615289565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615301602083613ca8565b915061530c826152cb565b602082019050919050565b60006020820190508181036000830152615330816152f4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061536d601c83613ca8565b915061537882615337565b602082019050919050565b6000602082019050818103600083015261539c81615360565b905091905056fea2646970667358221220b40b12e271b640919a16a1079e346017931677db796c6b8dc5361bb624e0f48064736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000075844524f49445300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000458445244000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d54535447664b386b35556943696a4a514d54746e6673504d366357416a617535665063727932334d6e4265692f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d5a776b435045696b41377a57686b4d48344b326f5a4278386d6536544378684877563641696161574c4d4a422f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103c35760003560e01c80636c0360eb116101f2578063a475b5dd1161010d578063d0eb26b0116100a0578063e985e9c51161006f578063e985e9c514610e29578063edec5f2714610e66578063f2c4ce1e14610e8f578063f2fde38b14610eb8576103c3565b8063d0eb26b014610d81578063d555654414610daa578063d5abeb0114610dd5578063da3ef23f14610e00576103c3565b8063ba7d2c76116100dc578063ba7d2c7614610cc3578063c48fb90114610cee578063c668286214610d19578063c87b56dd14610d44576103c3565b8063a475b5dd14610c1b578063b0324ec614610c32578063b88d4fde14610c5d578063ba4e5c4914610c86576103c3565b80638a76d0281161018557806399dd2a071161015457806399dd2a0714610b805780639c70b51214610bab578063a0712d6814610bd6578063a22cb46514610bf2576103c3565b80638a76d02814610ab05780638da5cb5b14610aed57806395d89b4114610b1857806399bbb00e14610b43576103c3565b8063715018a6116101c1578063715018a614610a2957806371cb8ca514610a40578063769b45cf14610a695780637b72d59f14610a94576103c3565b80636c0360eb146109595780636ec7f758146109845780636f2829ba146109af57806370a08231146109ec576103c3565b80633c952764116102e25780634dd003101161027557806356e2c3ac1161024457806356e2c3ac1461088b5780635bb91330146108b45780635c975abb146108f15780636352211e1461091c576103c3565b80634dd00310146107e35780635163c84c1461080e578063518302271461083757806355f804b314610862576103c3565b806342cde4e8116102b157806342cde4e81461073b57806344a0d68a146107665780634738867a1461078f57806348f5d753146107ba576103c3565b80633c952764146106b65780633ccfd60b146106df5780634214ff25146106e957806342842e0e14610712576103c3565b806313faede61161035a578063239c70ae11610329578063239c70ae146105fa57806323b872dd146106255780632b15bbeb1461064e5780633af32abf14610679576103c3565b806313faede61461053e57806315e3902f1461056957806318160ddd1461059257806318cae269146105bd576103c3565b8063081812fc11610396578063081812fc14610484578063081c8c44146104c1578063088a4ed0146104ec578063095ea7b314610515576103c3565b806301ffc9a7146103c857806302329a29146104055780630586c1011461042e57806306fdde0314610459575b600080fd5b3480156103d457600080fd5b506103ef60048036038101906103ea9190613bad565b610ee1565b6040516103fc9190613bf5565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613c3c565b610fc3565b005b34801561043a57600080fd5b5061044361105c565b6040516104509190613c82565b60405180910390f35b34801561046557600080fd5b5061046e611062565b60405161047b9190613d36565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190613d84565b6110f4565b6040516104b89190613df2565b60405180910390f35b3480156104cd57600080fd5b506104d6611179565b6040516104e39190613d36565b60405180910390f35b3480156104f857600080fd5b50610513600480360381019061050e9190613d84565b611207565b005b34801561052157600080fd5b5061053c60048036038101906105379190613e39565b61128d565b005b34801561054a57600080fd5b506105536113a5565b6040516105609190613c82565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613d84565b6113ab565b005b34801561059e57600080fd5b506105a7611431565b6040516105b49190613c82565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190613e79565b611456565b6040516105f19190613c82565b60405180910390f35b34801561060657600080fd5b5061060f611474565b60405161061c9190613c82565b60405180910390f35b34801561063157600080fd5b5061064c60048036038101906106479190613ea6565b61147a565b005b34801561065a57600080fd5b506106636114da565b6040516106709190613c82565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613e79565b6114e0565b6040516106ad9190613bf5565b60405180910390f35b3480156106c257600080fd5b506106dd60048036038101906106d89190613c3c565b61158f565b005b6106e7611628565b005b3480156106f557600080fd5b50610710600480360381019061070b9190613d84565b611724565b005b34801561071e57600080fd5b5061073960048036038101906107349190613ea6565b6117aa565b005b34801561074757600080fd5b506107506117ca565b60405161075d9190613c82565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190613d84565b6117d0565b005b34801561079b57600080fd5b506107a4611856565b6040516107b19190613c82565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190613d84565b61185c565b005b3480156107ef57600080fd5b506107f86118e2565b6040516108059190613c82565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190613f5e565b6118e8565b005b34801561084357600080fd5b5061084c611988565b6040516108599190613bf5565b60405180910390f35b34801561086e57600080fd5b50610889600480360381019061088491906140db565b61199b565b005b34801561089757600080fd5b506108b260048036038101906108ad9190613c3c565b611a31565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613e79565b611aca565b6040516108e89190613bf5565b60405180910390f35b3480156108fd57600080fd5b50610906611b79565b6040516109139190613bf5565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e9190613d84565b611b8c565b6040516109509190613df2565b60405180910390f35b34801561096557600080fd5b5061096e611c3e565b60405161097b9190613d36565b60405180910390f35b34801561099057600080fd5b50610999611ccc565b6040516109a69190613c82565b60405180910390f35b3480156109bb57600080fd5b506109d660048036038101906109d19190613d84565b611cd2565b6040516109e3919061419b565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e9190613e79565b611cf2565b604051610a209190613c82565b60405180910390f35b348015610a3557600080fd5b50610a3e611daa565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613d84565b611e32565b005b348015610a7557600080fd5b50610a7e611eb8565b604051610a8b9190613c82565b60405180910390f35b610aae6004803603810190610aa99190613d84565b611ec4565b005b348015610abc57600080fd5b50610ad76004803603810190610ad29190613e79565b611f8d565b604051610ae49190613c82565b60405180910390f35b348015610af957600080fd5b50610b02611fab565b604051610b0f9190613df2565b60405180910390f35b348015610b2457600080fd5b50610b2d611fd5565b604051610b3a9190613d36565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b659190613d84565b612067565b604051610b779190613df2565b60405180910390f35b348015610b8c57600080fd5b50610b956120a6565b604051610ba29190613bf5565b60405180910390f35b348015610bb757600080fd5b50610bc06120b9565b604051610bcd9190613bf5565b60405180910390f35b610bf06004803603810190610beb9190613d84565b6120cc565b005b348015610bfe57600080fd5b50610c196004803603810190610c1491906141b6565b61219a565b005b348015610c2757600080fd5b50610c306121b0565b005b348015610c3e57600080fd5b50610c47612249565b604051610c549190613c82565b60405180910390f35b348015610c6957600080fd5b50610c846004803603810190610c7f9190614297565b612255565b005b348015610c9257600080fd5b50610cad6004803603810190610ca89190613d84565b6122b7565b604051610cba9190613df2565b60405180910390f35b348015610ccf57600080fd5b50610cd86122f6565b604051610ce59190613c82565b60405180910390f35b348015610cfa57600080fd5b50610d036122fc565b604051610d109190613c82565b60405180910390f35b348015610d2557600080fd5b50610d2e612302565b604051610d3b9190613d36565b60405180910390f35b348015610d5057600080fd5b50610d6b6004803603810190610d669190613d84565b612390565b604051610d789190613d36565b60405180910390f35b348015610d8d57600080fd5b50610da86004803603810190610da39190613d84565b6125e9565b005b348015610db657600080fd5b50610dbf61266f565b604051610dcc9190613c82565b60405180910390f35b348015610de157600080fd5b50610dea612675565b604051610df79190613c82565b60405180910390f35b348015610e0c57600080fd5b50610e276004803603810190610e2291906140db565b61267b565b005b348015610e3557600080fd5b50610e506004803603810190610e4b919061431a565b612711565b604051610e5d9190613bf5565b60405180910390f35b348015610e7257600080fd5b50610e8d6004803603810190610e889190613f5e565b6127a5565b005b348015610e9b57600080fd5b50610eb66004803603810190610eb191906140db565b612845565b005b348015610ec457600080fd5b50610edf6004803603810190610eda9190613e79565b6128db565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fac57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fbc5750610fbb826129d3565b5b9050919050565b610fcb612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610fe9611fab565b73ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611036906143a6565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b60115481565b606060008054611071906143f5565b80601f016020809104026020016040519081016040528092919081815260200182805461109d906143f5565b80156110ea5780601f106110bf576101008083540402835291602001916110ea565b820191906000526020600020905b8154815290600101906020018083116110cd57829003601f168201915b5050505050905090565b60006110ff82612a45565b61113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590614499565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60098054611186906143f5565b80601f01602080910402602001604051908101604052809291908181526020018280546111b2906143f5565b80156111ff5780601f106111d4576101008083540402835291602001916111ff565b820191906000526020600020905b8154815290600101906020018083116111e257829003601f168201915b505050505081565b61120f612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661122d611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a906143a6565b60405180910390fd5b80600d8190555050565b600061129882611b8c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113009061452b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611328612a3d565b73ffffffffffffffffffffffffffffffffffffffff161480611357575061135681611351612a3d565b612711565b5b611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d906145bd565b60405180910390fd5b6113a08383612ab1565b505050565b600a5481565b6113b3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166113d1611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e906143a6565b60405180910390fd5b80600b8190555050565b600061143d601b612b6a565b611447601a612b6a565b611451919061460c565b905090565b601c6020528060005260406000206000915090508060000154905081565b600d5481565b61148b611485612a3d565b82612b78565b6114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c1906146d4565b60405180910390fd5b6114d5838383612c56565b505050565b600b5481565b600080600090505b601780549050811015611584578273ffffffffffffffffffffffffffffffffffffffff16601782815481106115205761151f6146f4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561157157600191505061158a565b808061157c90614723565b9150506114e8565b50600090505b919050565b611597612a3d565b73ffffffffffffffffffffffffffffffffffffffff166115b5611fab565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611602906143a6565b60405180910390fd5b80601660026101000a81548160ff02191690831515021790555050565b611630612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661164e611fab565b73ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b906143a6565b60405180910390fd5b60006116ae611fab565b73ffffffffffffffffffffffffffffffffffffffff16476040516116d19061479d565b60006040518083038185875af1925050503d806000811461170e576040519150601f19603f3d011682016040523d82523d6000602084013e611713565b606091505b505090508061172157600080fd5b50565b61172c612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661174a611fab565b73ffffffffffffffffffffffffffffffffffffffff16146117a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611797906143a6565b60405180910390fd5b8060118190555050565b6117c583838360405180602001604052806000815250612255565b505050565b60105481565b6117d8612a3d565b73ffffffffffffffffffffffffffffffffffffffff166117f6611fab565b73ffffffffffffffffffffffffffffffffffffffff161461184c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611843906143a6565b60405180910390fd5b80600a8190555050565b60135481565b611864612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611882611fab565b73ffffffffffffffffffffffffffffffffffffffff16146118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906143a6565b60405180910390fd5b8060138190555050565b60125481565b6118f0612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661190e611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195b906143a6565b60405180910390fd5b6018600061197291906139dd565b8181601891906119839291906139fe565b505050565b601660019054906101000a900460ff1681565b6119a3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119c1611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e906143a6565b60405180910390fd5b8060079080519060200190611a2d929190613a9e565b5050565b611a39612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a57611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa4906143a6565b60405180910390fd5b80601960006101000a81548160ff02191690831515021790555050565b600080600090505b601880549050811015611b6e578273ffffffffffffffffffffffffffffffffffffffff1660188281548110611b0a57611b096146f4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b5b576001915050611b74565b8080611b6690614723565b915050611ad2565b50600090505b919050565b601660009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90614824565b60405180910390fd5b80915050919050565b60078054611c4b906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611c77906143f5565b8015611cc45780601f10611c9957610100808354040283529160200191611cc4565b820191906000526020600020905b815481529060010190602001808311611ca757829003601f168201915b505050505081565b60145481565b601e6020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a906148b6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611db2612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611dd0611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d906143a6565b60405180910390fd5b611e306000612eb2565b565b611e3a612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611e58611fab565b73ffffffffffffffffffffffffffffffffffffffff1614611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea5906143a6565b60405180910390fd5b8060158190555050565b601b8060000154905081565b611f3b81611ed2601b612b6a565b601254601154601354601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020601454601960009054906101000a900460ff16611f3633611aca565b612f78565b611f8a81601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020601b60006015546131cd565b50565b601d6020528060005260406000206000915090508060000154905081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611fe4906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612010906143f5565b801561205d5780601f106120325761010080835404028352916020019161205d565b820191906000526020600020905b81548152906001019060200180831161204057829003601f168201915b5050505050905090565b6018818154811061207757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900460ff1681565b601660029054906101000a900460ff1681565b612148816120da601a612b6a565b600c546120e5613277565b600d54601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e54601660029054906101000a900460ff16612143336114e0565b612f78565b61219781601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020601a6001600f546131cd565b50565b6121ac6121a5612a3d565b83836132b6565b5050565b6121b8612a3d565b73ffffffffffffffffffffffffffffffffffffffff166121d6611fab565b73ffffffffffffffffffffffffffffffffffffffff161461222c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612223906143a6565b60405180910390fd5b6001601660016101000a81548160ff021916908315150217905550565b601a8060000154905081565b612266612260612a3d565b83612b78565b6122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c906146d4565b60405180910390fd5b6122b184848484613423565b50505050565b601781815481106122c757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60155481565b6008805461230f906143f5565b80601f016020809104026020016040519081016040528092919081815260200182805461233b906143f5565b80156123885780601f1061235d57610100808354040283529160200191612388565b820191906000526020600020905b81548152906001019060200180831161236b57829003601f168201915b505050505081565b606061239b82612a45565b6123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d190614948565b60405180910390fd5b6000600780546123e9906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612415906143f5565b80156124625780601f1061243757610100808354040283529160200191612462565b820191906000526020600020905b81548152906001019060200180831161244557829003601f168201915b50505050509050600080600f5490506000600181111561248557612484614124565b5b601e600087815260200190815260200160002060009054906101000a900460ff1660018111156124b8576124b7614124565b5b14156124d45760155490506124cd601b612b6a565b91506124e1565b6124de601a612b6a565b91505b60001515601660019054906101000a900460ff1615151415612592576009805461250a906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612536906143f5565b80156125835780601f1061255857610100808354040283529160200191612583565b820191906000526020600020905b81548152906001019060200180831161256657829003601f168201915b505050505093505050506125e4565b60008351116125b057604051806020016040528060008152506125de565b826125ba8661347f565b60086040516020016125ce93929190614a38565b6040516020818303038152906040525b93505050505b919050565b6125f1612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661260f611fab565b73ffffffffffffffffffffffffffffffffffffffff1614612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c906143a6565b60405180910390fd5b80600e8190555050565b600f5481565b600c5481565b612683612a3d565b73ffffffffffffffffffffffffffffffffffffffff166126a1611fab565b73ffffffffffffffffffffffffffffffffffffffff16146126f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ee906143a6565b60405180910390fd5b806008908051906020019061270d929190613a9e565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6127ad612a3d565b73ffffffffffffffffffffffffffffffffffffffff166127cb611fab565b73ffffffffffffffffffffffffffffffffffffffff1614612821576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612818906143a6565b60405180910390fd5b6017600061282f91906139dd565b8181601791906128409291906139fe565b505050565b61284d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1661286b611fab565b73ffffffffffffffffffffffffffffffffffffffff16146128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b8906143a6565b60405180910390fd5b80600990805190602001906128d7929190613a9e565b5050565b6128e3612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612901611fab565b73ffffffffffffffffffffffffffffffffffffffff1614612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e906143a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90614adb565b60405180910390fd5b6129d081612eb2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b2483611b8c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000612b8382612a45565b612bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb990614b6d565b60405180910390fd5b6000612bcd83611b8c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c3c57508373ffffffffffffffffffffffffffffffffffffffff16612c24846110f4565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c4d5750612c4c8185612711565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c7682611b8c565b73ffffffffffffffffffffffffffffffffffffffff1614612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614bff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3390614c91565b60405180910390fd5b612d478383836135e0565b612d52600082612ab1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612da29190614cb1565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df9919061460c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612f80611fab565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131c257601660009054906101000a900460ff1615613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff990614d31565b60405180910390fd5b60008911613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303c90614d9d565b60405180910390fd5b868989613052919061460c565b1115613093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308a90614e09565b60405180910390fd5b888661309f9190614e29565b3410156130e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d890614ecf565b60405180910390fd5b84891115613124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161311b90614f61565b60405180910390fd5b81156131c1578061316a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316190614fcd565b60405180910390fd5b828961317586612b6a565b61317f919061460c565b11156131c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b790615039565b60405180910390fd5b5b5b505050505050505050565b60006131d884612b6a565b90506000600190505b86811161326e576131f1866135e5565b6131fa856135e5565b6000818385613209919061460c565b613213919061460c565b905084601e600083815260200190815260200160002060006101000a81548160ff0219169083600181111561324b5761324a614124565b5b021790555061325a33826135fb565b50808061326690614723565b9150506131e1565b50505050505050565b6000601054613286601a612b6a565b101561329657600b5490506132b3565b6010546132a3601a612b6a565b106132b257600a5490506132b3565b5b90565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331c906150a5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516134169190613bf5565b60405180910390a3505050565b61342e848484612c56565b61343a84848484613619565b613479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347090615137565b60405180910390fd5b50505050565b606060008214156134c7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135db565b600082905060005b600082146134f95780806134e290614723565b915050600a826134f29190615186565b91506134cf565b60008167ffffffffffffffff81111561351557613514613fb0565b5b6040519080825280601f01601f1916602001820160405280156135475781602001600182028036833780820191505090505b5090505b600085146135d4576001826135609190614cb1565b9150600a8561356f91906151b7565b603061357b919061460c565b60f81b818381518110613591576135906146f4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135cd9190615186565b945061354b565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b6136158282604051806020016040528060008152506137a1565b5050565b600061363a8473ffffffffffffffffffffffffffffffffffffffff166137fc565b15613794578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613663612a3d565b8786866040518563ffffffff1660e01b8152600401613685949392919061523d565b6020604051808303816000875af19250505080156136c157506040513d601f19601f820116820180604052508101906136be919061529e565b60015b613744573d80600081146136f1576040519150601f19603f3d011682016040523d82523d6000602084013e6136f6565b606091505b5060008151141561373c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373390615137565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613799565b600190505b949350505050565b6137ab838361380f565b6137b86000848484613619565b6137f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ee90615137565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561387f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387690615317565b60405180910390fd5b61388881612a45565b156138c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138bf90615383565b60405180910390fd5b6138d4600083836135e0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613924919061460c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b50805460008255906000526020600020908101906139fb9190613b24565b50565b828054828255906000526020600020908101928215613a8d579160200282015b82811115613a8c57823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613a1e565b5b509050613a9a9190613b24565b5090565b828054613aaa906143f5565b90600052602060002090601f016020900481019282613acc5760008555613b13565b82601f10613ae557805160ff1916838001178555613b13565b82800160010185558215613b13579182015b82811115613b12578251825591602001919060010190613af7565b5b509050613b209190613b24565b5090565b5b80821115613b3d576000816000905550600101613b25565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613b8a81613b55565b8114613b9557600080fd5b50565b600081359050613ba781613b81565b92915050565b600060208284031215613bc357613bc2613b4b565b5b6000613bd184828501613b98565b91505092915050565b60008115159050919050565b613bef81613bda565b82525050565b6000602082019050613c0a6000830184613be6565b92915050565b613c1981613bda565b8114613c2457600080fd5b50565b600081359050613c3681613c10565b92915050565b600060208284031215613c5257613c51613b4b565b5b6000613c6084828501613c27565b91505092915050565b6000819050919050565b613c7c81613c69565b82525050565b6000602082019050613c976000830184613c73565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cd7578082015181840152602081019050613cbc565b83811115613ce6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d0882613c9d565b613d128185613ca8565b9350613d22818560208601613cb9565b613d2b81613cec565b840191505092915050565b60006020820190508181036000830152613d508184613cfd565b905092915050565b613d6181613c69565b8114613d6c57600080fd5b50565b600081359050613d7e81613d58565b92915050565b600060208284031215613d9a57613d99613b4b565b5b6000613da884828501613d6f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ddc82613db1565b9050919050565b613dec81613dd1565b82525050565b6000602082019050613e076000830184613de3565b92915050565b613e1681613dd1565b8114613e2157600080fd5b50565b600081359050613e3381613e0d565b92915050565b60008060408385031215613e5057613e4f613b4b565b5b6000613e5e85828601613e24565b9250506020613e6f85828601613d6f565b9150509250929050565b600060208284031215613e8f57613e8e613b4b565b5b6000613e9d84828501613e24565b91505092915050565b600080600060608486031215613ebf57613ebe613b4b565b5b6000613ecd86828701613e24565b9350506020613ede86828701613e24565b9250506040613eef86828701613d6f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613f1e57613f1d613ef9565b5b8235905067ffffffffffffffff811115613f3b57613f3a613efe565b5b602083019150836020820283011115613f5757613f56613f03565b5b9250929050565b60008060208385031215613f7557613f74613b4b565b5b600083013567ffffffffffffffff811115613f9357613f92613b50565b5b613f9f85828601613f08565b92509250509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fe882613cec565b810181811067ffffffffffffffff8211171561400757614006613fb0565b5b80604052505050565b600061401a613b41565b90506140268282613fdf565b919050565b600067ffffffffffffffff82111561404657614045613fb0565b5b61404f82613cec565b9050602081019050919050565b82818337600083830152505050565b600061407e6140798461402b565b614010565b90508281526020810184848401111561409a57614099613fab565b5b6140a584828561405c565b509392505050565b600082601f8301126140c2576140c1613ef9565b5b81356140d284826020860161406b565b91505092915050565b6000602082840312156140f1576140f0613b4b565b5b600082013567ffffffffffffffff81111561410f5761410e613b50565b5b61411b848285016140ad565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811061416457614163614124565b5b50565b600081905061417582614153565b919050565b600061418582614167565b9050919050565b6141958161417a565b82525050565b60006020820190506141b0600083018461418c565b92915050565b600080604083850312156141cd576141cc613b4b565b5b60006141db85828601613e24565b92505060206141ec85828601613c27565b9150509250929050565b600067ffffffffffffffff82111561421157614210613fb0565b5b61421a82613cec565b9050602081019050919050565b600061423a614235846141f6565b614010565b90508281526020810184848401111561425657614255613fab565b5b61426184828561405c565b509392505050565b600082601f83011261427e5761427d613ef9565b5b813561428e848260208601614227565b91505092915050565b600080600080608085870312156142b1576142b0613b4b565b5b60006142bf87828801613e24565b94505060206142d087828801613e24565b93505060406142e187828801613d6f565b925050606085013567ffffffffffffffff81111561430257614301613b50565b5b61430e87828801614269565b91505092959194509250565b6000806040838503121561433157614330613b4b565b5b600061433f85828601613e24565b925050602061435085828601613e24565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614390602083613ca8565b915061439b8261435a565b602082019050919050565b600060208201905081810360008301526143bf81614383565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061440d57607f821691505b60208210811415614421576144206143c6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614483602c83613ca8565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614515602183613ca8565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006145a7603883613ca8565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061461782613c69565b915061462283613c69565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614657576146566145dd565b5b828201905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006146be603183613ca8565b91506146c982614662565b604082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061472e82613c69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614761576147606145dd565b5b600182019050919050565b600081905092915050565b50565b600061478760008361476c565b915061479282614777565b600082019050919050565b60006147a88261477a565b9150819050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061480e602983613ca8565b9150614819826147b2565b604082019050919050565b6000602082019050818103600083015261483d81614801565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006148a0602a83613ca8565b91506148ab82614844565b604082019050919050565b600060208201905081810360008301526148cf81614893565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614932602f83613ca8565b915061493d826148d6565b604082019050919050565b6000602082019050818103600083015261496181614925565b9050919050565b600081905092915050565b600061497e82613c9d565b6149888185614968565b9350614998818560208601613cb9565b80840191505092915050565b60008190508160005260206000209050919050565b600081546149c6816143f5565b6149d08186614968565b945060018216600081146149eb57600181146149fc57614a2f565b60ff19831686528186019350614a2f565b614a05856149a4565b60005b83811015614a2757815481890152600182019150602081019050614a08565b838801955050505b50505092915050565b6000614a448286614973565b9150614a508285614973565b9150614a5c82846149b9565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ac5602683613ca8565b9150614ad082614a69565b604082019050919050565b60006020820190508181036000830152614af481614ab8565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b57602c83613ca8565b9150614b6282614afb565b604082019050919050565b60006020820190508181036000830152614b8681614b4a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614be9602983613ca8565b9150614bf482614b8d565b604082019050919050565b60006020820190508181036000830152614c1881614bdc565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c7b602483613ca8565b9150614c8682614c1f565b604082019050919050565b60006020820190508181036000830152614caa81614c6e565b9050919050565b6000614cbc82613c69565b9150614cc783613c69565b925082821015614cda57614cd96145dd565b5b828203905092915050565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b6000614d1b601683613ca8565b9150614d2682614ce5565b602082019050919050565b60006020820190508181036000830152614d4a81614d0e565b9050919050565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6000614d87601b83613ca8565b9150614d9282614d51565b602082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b6000614df3601683613ca8565b9150614dfe82614dbd565b602082019050919050565b60006020820190508181036000830152614e2281614de6565b9050919050565b6000614e3482613c69565b9150614e3f83613c69565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e7857614e776145dd565b5b828202905092915050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b6000614eb9601283613ca8565b9150614ec482614e83565b602082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b6000614f4b602483613ca8565b9150614f5682614eef565b604082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b6000614fb7601783613ca8565b9150614fc282614f81565b602082019050919050565b60006020820190508181036000830152614fe681614faa565b9050919050565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b6000615023601c83613ca8565b915061502e82614fed565b602082019050919050565b6000602082019050818103600083015261505281615016565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061508f601983613ca8565b915061509a82615059565b602082019050919050565b600060208201905081810360008301526150be81615082565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615121603283613ca8565b915061512c826150c5565b604082019050919050565b6000602082019050818103600083015261515081615114565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061519182613c69565b915061519c83613c69565b9250826151ac576151ab615157565b5b828204905092915050565b60006151c282613c69565b91506151cd83613c69565b9250826151dd576151dc615157565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061520f826151e8565b61521981856151f3565b9350615229818560208601613cb9565b61523281613cec565b840191505092915050565b60006080820190506152526000830187613de3565b61525f6020830186613de3565b61526c6040830185613c73565b818103606083015261527e8184615204565b905095945050505050565b60008151905061529881613b81565b92915050565b6000602082840312156152b4576152b3613b4b565b5b60006152c284828501615289565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615301602083613ca8565b915061530c826152cb565b602082019050919050565b60006020820190508181036000830152615330816152f4565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061536d601c83613ca8565b915061537882615337565b602082019050919050565b6000602082019050818103600083015261539c81615360565b905091905056fea2646970667358221220b40b12e271b640919a16a1079e346017931677db796c6b8dc5361bb624e0f48064736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000075844524f49445300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000458445244000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d54535447664b386b35556943696a4a514d54746e6673504d366357416a617535665063727932334d6e4265692f000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d5a776b435045696b41377a57686b4d48344b326f5a4278386d6536544378684877563641696161574c4d4a422f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): XDROIDS
Arg [1] : _symbol (string): XDRD
Arg [2] : _initBaseURI (string): ipfs://QmTSTGfK8k5UiCijJQMTtnfsPM6cWAjau5fPcry23MnBei/
Arg [3] : _initNotRevealedUri (string): ipfs://QmZwkCPEikA7zWhkMH4K2oZBx8me6TCxhHwV6AiaaWLMJB/hidden.json

-----Encoded View---------------
15 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 5844524f49445300000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 5844524400000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d54535447664b386b35556943696a4a514d54746e667350
Arg [10] : 4d366357416a617535665063727932334d6e4265692f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [12] : 697066733a2f2f516d5a776b435045696b41377a57686b4d48344b326f5a4278
Arg [13] : 386d6536544378684877563641696161574c4d4a422f68696464656e2e6a736f
Arg [14] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

37763:9221:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25244:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44479:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38351:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26189:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27748:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38030:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44103:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27271:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38067:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43989:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43522:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38943:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38194:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28498:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38106:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42175:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44566:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46826:155;;;:::i;:::-;;45870:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28908:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38311:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43895:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38445:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45561:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38399:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45982:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38621:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44233:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46194:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46321:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38589:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25883:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37956:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38493:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39094:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25613:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6232:103;;;;;;;;;;;;;:::i;:::-;;45732:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38890:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44872:681;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39014:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5581:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26358:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38735:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38790:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38648:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40970:599;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28041:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43700:69;;;;;;;;;;;;;:::i;:::-;;38842:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29164:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38691:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38233;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38546:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37986:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42457:1057;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43777:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38277:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38155:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46667:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28267:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44675:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44345:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6490:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25244:305;25346:4;25398:25;25383:40;;;:11;:40;;;;:105;;;;25455:33;25440:48;;;:11;:48;;;;25383:105;:158;;;;25505:36;25529:11;25505:23;:36::i;:::-;25383:158;25363:178;;25244:305;;;:::o;44479:79::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44544:6:::1;44535;;:15;;;;;;;;;;;;;;;;;;44479:79:::0;:::o;38351:41::-;;;;:::o;26189:100::-;26243:13;26276:5;26269:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26189:100;:::o;27748:221::-;27824:7;27852:16;27860:7;27852;:16::i;:::-;27844:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27937:15;:24;27953:7;27937:24;;;;;;;;;;;;;;;;;;;;;27930:31;;27748:221;;;:::o;38030:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44103:122::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44200:17:::1;44184:13;:33;;;;44103:122:::0;:::o;27271:411::-;27352:13;27368:23;27383:7;27368:14;:23::i;:::-;27352:39;;27416:5;27410:11;;:2;:11;;;;27402:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27510:5;27494:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27519:37;27536:5;27543:12;:10;:12::i;:::-;27519:16;:37::i;:::-;27494:62;27472:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27653:21;27662:2;27666:7;27653:8;:21::i;:::-;27341:341;27271:411;;:::o;38067:32::-;;;;:::o;43989:106::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44079:8:::1;44062:14;:25;;;;43989:106:::0;:::o;43522:152::-;43566:20;43636:30;:20;:28;:30::i;:::-;43606:27;:17;:25;:27::i;:::-;:60;;;;:::i;:::-;43599:67;;43522:152;:::o;38943:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;38194:32::-;;;;:::o;28498:339::-;28693:41;28712:12;:10;:12::i;:::-;28726:7;28693:18;:41::i;:::-;28685:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28801:28;28811:4;28817:2;28821:7;28801:9;:28::i;:::-;28498:339;;;:::o;38106:42::-;;;;:::o;42175:274::-;42234:4;42256:9;42268:1;42256:13;;42251:168;42275:20;:27;;;;42271:1;:31;42251:168;;;42355:5;42328:32;;:20;42349:1;42328:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;42324:84;;;42388:4;42381:11;;;;;42324:84;42304:3;;;;;:::i;:::-;;;;42251:168;;;;42436:5;42429:12;;42175:274;;;;:::o;44566:101::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44653:6:::1;44635:15;;:24;;;;;;;;;;;;;;;;;;44566:101:::0;:::o;46826:155::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46883:7:::1;46904;:5;:7::i;:::-;46896:21;;46925;46896:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46882:69;;;46970:2;46962:11;;;::::0;::::1;;46871:110;46826:155::o:0;45870:104::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45958:8:::1;45942:13;:24;;;;45870:104:::0;:::o;28908:185::-;29046:39;29063:4;29069:2;29073:7;29046:39;;;;;;;;;;;;:16;:39::i;:::-;28908:185;;;:::o;38311:31::-;;;;:::o;43895:86::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43965:8:::1;43958:4;:15;;;;43895:86:::0;:::o;38445:41::-;;;;:::o;45561:163::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45699:17:::1;45674:22;:42;;;;45561:163:::0;:::o;38399:39::-;;;;:::o;45982:204::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46100:29:::1;;46093:36;;;;:::i;:::-;46172:6;;46140:29;:38;;;;;;;:::i;:::-;;45982:204:::0;;:::o;38621:20::-;;;;;;;;;;;;;:::o;44233:104::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44318:11:::1;44308:7;:21;;;;;;;;;;;;:::i;:::-;;44233:104:::0;:::o;46194:119::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46299:6:::1;46272:24;;:33;;;;;;;;;;;;;;;;;;46194:119:::0;:::o;46321:301::-;46389:4;46411:9;46423:1;46411:13;;46406:186;46430:29;:36;;;;46426:1;:40;46406:186;;;46528:5;46492:41;;:29;46522:1;46492:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:41;;;46488:93;;;46561:4;46554:11;;;;;46488:93;46468:3;;;;;:::i;:::-;;;;46406:186;;;;46609:5;46602:12;;46321:301;;;;:::o;38589:25::-;;;;;;;;;;;;;:::o;25883:239::-;25955:7;25975:13;25991:7;:16;25999:7;25991:16;;;;;;;;;;;;;;;;;;;;;25975:32;;26043:1;26026:19;;:5;:19;;;;26018:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26109:5;26102:12;;;25883:239;;;:::o;37956:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38493:46::-;;;;:::o;39094:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;25613:208::-;25685:7;25730:1;25713:19;;:5;:19;;;;25705:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25797:9;:16;25807:5;25797:16;;;;;;;;;;;;;;;;25790:23;;25613:208;;;:::o;6232:103::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6297:30:::1;6324:1;6297:18;:30::i;:::-;6232:103::o:0;45732:130::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45835:19:::1;45817:15;:37;;;;45732:130:::0;:::o;38890:44::-;;;;;;;;;:::o;44872:681::-;44942:385;44976:11;45002:30;:20;:28;:30::i;:::-;45047:18;;45080:13;;45108:22;;45145:29;:41;45175:10;45145:41;;;;;;;;;;;;;;;45201:27;;45243:24;;;;;;;;;;;45282:34;45305:10;45282:22;:34::i;:::-;44942:19;:385::i;:::-;45340:205;45364:11;45390:29;:41;45420:10;45390:41;;;;;;;;;;;;;;;45446:20;45481:23;45519:15;;45340:9;:205::i;:::-;44872:681;:::o;39014:73::-;;;;;;;;;;;;;;;;;;;;;;:::o;5581:87::-;5627:7;5654:6;;;;;;;;;;;5647:13;;5581:87;:::o;26358:104::-;26414:13;26447:7;26440:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26358:104;:::o;38735:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38790:43::-;;;;;;;;;;;;;:::o;38648:34::-;;;;;;;;;;;;;:::o;40970:599::-;41031:336;41065:11;41091:35;41108:17;41091:16;:35::i;:::-;41141:9;;41165:13;:11;:13::i;:::-;41193;;41221:20;:32;41242:10;41221:32;;;;;;;;;;;;;;;41268:18;;41301:15;;;;;;;;;;;41331:25;41345:10;41331:13;:25::i;:::-;41031:19;:336::i;:::-;41380:181;41404:11;41430:20;:32;41451:10;41430:32;;;;;;;;;;;;;;;41477:17;41509:20;41544:6;;41380:9;:181::i;:::-;40970:599;:::o;28041:155::-;28136:52;28155:12;:10;:12::i;:::-;28169:8;28179;28136:18;:52::i;:::-;28041:155;;:::o;43700:69::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43757:4:::1;43746:8;;:15;;;;;;;;;;;;;;;;;;43700:69::o:0;38842:41::-;;;;;;;;;:::o;29164:328::-;29339:41;29358:12;:10;:12::i;:::-;29372:7;29339:18;:41::i;:::-;29331:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29445:39;29459:4;29465:2;29469:7;29478:5;29445:13;:39::i;:::-;29164:328;;;;:::o;38691:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38233:::-;;;;:::o;38546:34::-;;;;:::o;37986:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42457:1057::-;42575:13;42628:16;42636:7;42628;:16::i;:::-;42606:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;42732:29;42764:7;42732:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42782:24;42817:15;42835:6;;42817:24;;42882:23;42858:47;;;;;;;;:::i;:::-;;:11;:20;42870:7;42858:20;;;;;;;;;;;;;;;;;;;;;:47;;;;;;;;:::i;:::-;;;42854:248;;;42932:15;;42922:25;;42981:30;:20;:28;:30::i;:::-;42962:49;;42854:248;;;43063:27;:17;:25;:27::i;:::-;43044:46;;42854:248;43130:5;43118:17;;:8;;;;;;;;;;;:17;;;43114:71;;;43159:14;43152:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43114:71;43249:1;43223:15;43217:29;:33;:289;;;;;;;;;;;;;;;;;43342:15;43384:18;:7;:16;:18::i;:::-;43429:13;43299:166;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43217:289;43197:309;;;;;42457:1057;;;;:::o;43777:110::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43873:6:::1;43852:18;:27;;;;43777:110:::0;:::o;38277:27::-;;;;:::o;38155:32::-;;;;:::o;46667:151::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46793:17:::1;46777:13;:33;;;;;;;;;;;;:::i;:::-;;46667:151:::0;:::o;28267:164::-;28364:4;28388:18;:25;28407:5;28388:25;;;;;;;;;;;;;;;:35;28414:8;28388:35;;;;;;;;;;;;;;;;;;;;;;;;;28381:42;;28267:164;;;;:::o;44675:154::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44761:20:::1;;44754:27;;;;:::i;:::-;44815:6;;44792:20;:29;;;;;;;:::i;:::-;;44675:154:::0;;:::o;44345:126::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44448:15:::1;44431:14;:32;;;;;;;;;;;;:::i;:::-;;44345:126:::0;:::o;6490:201::-;5812:12;:10;:12::i;:::-;5801:23;;:7;:5;:7::i;:::-;:23;;;5793:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6599:1:::1;6579:22;;:8;:22;;;;6571:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6655:28;6674:8;6655:18;:28::i;:::-;6490:201:::0;:::o;18013:157::-;18098:4;18137:25;18122:40;;;:11;:40;;;;18115:47;;18013:157;;;:::o;4305:98::-;4358:7;4385:10;4378:17;;4305:98;:::o;31002:127::-;31067:4;31119:1;31091:30;;:7;:16;31099:7;31091:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31084:37;;31002:127;;;:::o;34984:174::-;35086:2;35059:15;:24;35075:7;35059:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35142:7;35138:2;35104:46;;35113:23;35128:7;35113:14;:23::i;:::-;35104:46;;;;;;;;;;;;34984:174;;:::o;909:114::-;974:7;1001;:14;;;994:21;;909:114;;;:::o;31296:348::-;31389:4;31414:16;31422:7;31414;:16::i;:::-;31406:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31490:13;31506:23;31521:7;31506:14;:23::i;:::-;31490:39;;31559:5;31548:16;;:7;:16;;;:51;;;;31592:7;31568:31;;:20;31580:7;31568:11;:20::i;:::-;:31;;;31548:51;:87;;;;31603:32;31620:5;31627:7;31603:16;:32::i;:::-;31548:87;31540:96;;;31296:348;;;;:::o;34288:578::-;34447:4;34420:31;;:23;34435:7;34420:14;:23::i;:::-;:31;;;34412:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34530:1;34516:16;;:2;:16;;;;34508:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34586:39;34607:4;34613:2;34617:7;34586:20;:39::i;:::-;34690:29;34707:1;34711:7;34690:8;:29::i;:::-;34751:1;34732:9;:15;34742:4;34732:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34780:1;34763:9;:13;34773:2;34763:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34811:2;34792:7;:16;34800:7;34792:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34850:7;34846:2;34831:27;;34840:4;34831:27;;;;;;;;;;;;34288:578;;;:::o;6851:191::-;6925:16;6944:6;;;;;;;;;;;6925:25;;6970:8;6961:6;;:17;;;;;;;;;;;;;;;;;;7025:8;6994:40;;7015:8;6994:40;;;;;;;;;;;;6914:128;6851:191;:::o;39454:1184::-;39823:7;:5;:7::i;:::-;39809:21;;:10;:21;;;39805:826;;39856:6;;;;;;;;;;;39855:7;39847:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;39926:1;39912:11;:15;39904:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40030:10;40015:11;40000:12;:26;;;;:::i;:::-;:40;;39974:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;40142:11;40134:5;:19;;;;:::i;:::-;40121:9;:32;;40113:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40232:14;40217:11;:29;;40191:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;40337:16;40333:287;;;40382:14;40374:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;40513:19;40498:11;40473:22;:12;:20;:22::i;:::-;:36;;;;:::i;:::-;:59;;40443:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;40333:287;39805:826;39454:1184;;;;;;;;;:::o;41577:590::-;41809:14;41826:28;:18;:26;:28::i;:::-;41809:45;;41872:9;41884:1;41872:13;;41867:293;41892:11;41887:1;:16;41867:293;;41925:25;:13;:23;:25::i;:::-;41965:30;:18;:28;:30::i;:::-;42010:19;42051:1;42042:6;42032:7;:16;;;;:::i;:::-;:20;;;;:::i;:::-;42010:42;;42094:5;42067:11;:24;42079:11;42067:24;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;42114:34;42124:10;42136:11;42114:9;:34::i;:::-;41910:250;41905:3;;;;;:::i;:::-;;;;41867:293;;;;41798:369;41577:590;;;;;:::o;40663:284::-;40709:13;40777:9;;40739:35;40756:17;40739:16;:35::i;:::-;:47;40735:101;;;40810:14;;40803:21;;;;40735:101;40891:9;;40852:35;40869:17;40852:16;:35::i;:::-;:48;40848:92;;40924:4;;40917:11;;;;40848:92;40663:284;;:::o;35300:315::-;35455:8;35446:17;;:5;:17;;;;35438:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35542:8;35504:18;:25;35523:5;35504:25;;;;;;;;;;;;;;;:35;35530:8;35504:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35588:8;35566:41;;35581:5;35566:41;;;35598:8;35566:41;;;;;;:::i;:::-;;;;;;;;35300:315;;;:::o;30374:::-;30531:28;30541:4;30547:2;30551:7;30531:9;:28::i;:::-;30578:48;30601:4;30607:2;30611:7;30620:5;30578:22;:48::i;:::-;30570:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30374:315;;;;:::o;1867:723::-;1923:13;2153:1;2144:5;:10;2140:53;;;2171:10;;;;;;;;;;;;;;;;;;;;;2140:53;2203:12;2218:5;2203:20;;2234:14;2259:78;2274:1;2266:4;:9;2259:78;;2292:8;;;;;:::i;:::-;;;;2323:2;2315:10;;;;;:::i;:::-;;;2259:78;;;2347:19;2379:6;2369:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2347:39;;2397:154;2413:1;2404:5;:10;2397:154;;2441:1;2431:11;;;;;:::i;:::-;;;2508:2;2500:5;:10;;;;:::i;:::-;2487:2;:24;;;;:::i;:::-;2474:39;;2457:6;2464;2457:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2537:2;2528:11;;;;;:::i;:::-;;;2397:154;;;2575:6;2561:21;;;;;1867:723;;;;:::o;37551:126::-;;;;:::o;1031:127::-;1138:1;1120:7;:14;;;:19;;;;;;;;;;;1031:127;:::o;31986:110::-;32062:26;32072:2;32076:7;32062:26;;;;;;;;;;;;:9;:26::i;:::-;31986:110;;:::o;36180:799::-;36335:4;36356:15;:2;:13;;;:15::i;:::-;36352:620;;;36408:2;36392:36;;;36429:12;:10;:12::i;:::-;36443:4;36449:7;36458:5;36392:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36388:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36651:1;36634:6;:13;:18;36630:272;;;36677:60;;;;;;;;;;:::i;:::-;;;;;;;;36630:272;36852:6;36846:13;36837:6;36833:2;36829:15;36822:38;36388:529;36525:41;;;36515:51;;;:6;:51;;;;36508:58;;;;;36352:620;36956:4;36949:11;;36180:799;;;;;;;:::o;32323:321::-;32453:18;32459:2;32463:7;32453:5;:18::i;:::-;32504:54;32535:1;32539:2;32543:7;32552:5;32504:22;:54::i;:::-;32482:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32323:321;;;:::o;7869:387::-;7929:4;8137:12;8204:7;8192:20;8184:28;;8247:1;8240:4;:8;8233:15;;;7869:387;;;:::o;32980:382::-;33074:1;33060:16;;:2;:16;;;;33052:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33133:16;33141:7;33133;:16::i;:::-;33132:17;33124:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33195:45;33224:1;33228:2;33232:7;33195:20;:45::i;:::-;33270:1;33253:9;:13;33263:2;33253:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33301:2;33282:7;:16;33290:7;33282:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33346:7;33342:2;33321:33;;33338:1;33321:33;;;;;;;;;;;;32980:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:77::-;2145:7;2174:5;2163:16;;2108:77;;;:::o;2191:118::-;2278:24;2296:5;2278:24;:::i;:::-;2273:3;2266:37;2191:118;;:::o;2315:222::-;2408:4;2446:2;2435:9;2431:18;2423:26;;2459:71;2527:1;2516:9;2512:17;2503:6;2459:71;:::i;:::-;2315:222;;;;:::o;2543:99::-;2595:6;2629:5;2623:12;2613:22;;2543:99;;;:::o;2648:169::-;2732:11;2766:6;2761:3;2754:19;2806:4;2801:3;2797:14;2782:29;;2648:169;;;;:::o;2823:307::-;2891:1;2901:113;2915:6;2912:1;2909:13;2901:113;;;3000:1;2995:3;2991:11;2985:18;2981:1;2976:3;2972:11;2965:39;2937:2;2934:1;2930:10;2925:15;;2901:113;;;3032:6;3029:1;3026:13;3023:101;;;3112:1;3103:6;3098:3;3094:16;3087:27;3023:101;2872:258;2823:307;;;:::o;3136:102::-;3177:6;3228:2;3224:7;3219:2;3212:5;3208:14;3204:28;3194:38;;3136:102;;;:::o;3244:364::-;3332:3;3360:39;3393:5;3360:39;:::i;:::-;3415:71;3479:6;3474:3;3415:71;:::i;:::-;3408:78;;3495:52;3540:6;3535:3;3528:4;3521:5;3517:16;3495:52;:::i;:::-;3572:29;3594:6;3572:29;:::i;:::-;3567:3;3563:39;3556:46;;3336:272;3244:364;;;;:::o;3614:313::-;3727:4;3765:2;3754:9;3750:18;3742:26;;3814:9;3808:4;3804:20;3800:1;3789:9;3785:17;3778:47;3842:78;3915:4;3906:6;3842:78;:::i;:::-;3834:86;;3614:313;;;;:::o;3933:122::-;4006:24;4024:5;4006:24;:::i;:::-;3999:5;3996:35;3986:63;;4045:1;4042;4035:12;3986:63;3933:122;:::o;4061:139::-;4107:5;4145:6;4132:20;4123:29;;4161:33;4188:5;4161:33;:::i;:::-;4061:139;;;;:::o;4206:329::-;4265:6;4314:2;4302:9;4293:7;4289:23;4285:32;4282:119;;;4320:79;;:::i;:::-;4282:119;4440:1;4465:53;4510:7;4501:6;4490:9;4486:22;4465:53;:::i;:::-;4455:63;;4411:117;4206:329;;;;:::o;4541:126::-;4578:7;4618:42;4611:5;4607:54;4596:65;;4541:126;;;:::o;4673:96::-;4710:7;4739:24;4757:5;4739:24;:::i;:::-;4728:35;;4673:96;;;:::o;4775:118::-;4862:24;4880:5;4862:24;:::i;:::-;4857:3;4850:37;4775:118;;:::o;4899:222::-;4992:4;5030:2;5019:9;5015:18;5007:26;;5043:71;5111:1;5100:9;5096:17;5087:6;5043:71;:::i;:::-;4899:222;;;;:::o;5127:122::-;5200:24;5218:5;5200:24;:::i;:::-;5193:5;5190:35;5180:63;;5239:1;5236;5229:12;5180:63;5127:122;:::o;5255:139::-;5301:5;5339:6;5326:20;5317:29;;5355:33;5382:5;5355:33;:::i;:::-;5255:139;;;;:::o;5400:474::-;5468:6;5476;5525:2;5513:9;5504:7;5500:23;5496:32;5493:119;;;5531:79;;:::i;:::-;5493:119;5651:1;5676:53;5721:7;5712:6;5701:9;5697:22;5676:53;:::i;:::-;5666:63;;5622:117;5778:2;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5749:118;5400:474;;;;;:::o;5880:329::-;5939:6;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;5880:329;;;;:::o;6215:619::-;6292:6;6300;6308;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:53;6553:7;6544:6;6533:9;6529:22;6508:53;:::i;:::-;6498:63;;6454:117;6610:2;6636:53;6681:7;6672:6;6661:9;6657:22;6636:53;:::i;:::-;6626:63;;6581:118;6738:2;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6709:118;6215:619;;;;;:::o;6840:117::-;6949:1;6946;6939:12;6963:117;7072:1;7069;7062:12;7086:117;7195:1;7192;7185:12;7226:568;7299:8;7309:6;7359:3;7352:4;7344:6;7340:17;7336:27;7326:122;;7367:79;;:::i;:::-;7326:122;7480:6;7467:20;7457:30;;7510:18;7502:6;7499:30;7496:117;;;7532:79;;:::i;:::-;7496:117;7646:4;7638:6;7634:17;7622:29;;7700:3;7692:4;7684:6;7680:17;7670:8;7666:32;7663:41;7660:128;;;7707:79;;:::i;:::-;7660:128;7226:568;;;;;:::o;7800:559::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:119;;;7949:79;;:::i;:::-;7911:119;8097:1;8086:9;8082:17;8069:31;8127:18;8119:6;8116:30;8113:117;;;8149:79;;:::i;:::-;8113:117;8262:80;8334:7;8325:6;8314:9;8310:22;8262:80;:::i;:::-;8244:98;;;;8040:312;7800:559;;;;;:::o;8365:117::-;8474:1;8471;8464:12;8488:180;8536:77;8533:1;8526:88;8633:4;8630:1;8623:15;8657:4;8654:1;8647:15;8674:281;8757:27;8779:4;8757:27;:::i;:::-;8749:6;8745:40;8887:6;8875:10;8872:22;8851:18;8839:10;8836:34;8833:62;8830:88;;;8898:18;;:::i;:::-;8830:88;8938:10;8934:2;8927:22;8717:238;8674:281;;:::o;8961:129::-;8995:6;9022:20;;:::i;:::-;9012:30;;9051:33;9079:4;9071:6;9051:33;:::i;:::-;8961:129;;;:::o;9096:308::-;9158:4;9248:18;9240:6;9237:30;9234:56;;;9270:18;;:::i;:::-;9234:56;9308:29;9330:6;9308:29;:::i;:::-;9300:37;;9392:4;9386;9382:15;9374:23;;9096:308;;;:::o;9410:154::-;9494:6;9489:3;9484;9471:30;9556:1;9547:6;9542:3;9538:16;9531:27;9410:154;;;:::o;9570:412::-;9648:5;9673:66;9689:49;9731:6;9689:49;:::i;:::-;9673:66;:::i;:::-;9664:75;;9762:6;9755:5;9748:21;9800:4;9793:5;9789:16;9838:3;9829:6;9824:3;9820:16;9817:25;9814:112;;;9845:79;;:::i;:::-;9814:112;9935:41;9969:6;9964:3;9959;9935:41;:::i;:::-;9654:328;9570:412;;;;;:::o;10002:340::-;10058:5;10107:3;10100:4;10092:6;10088:17;10084:27;10074:122;;10115:79;;:::i;:::-;10074:122;10232:6;10219:20;10257:79;10332:3;10324:6;10317:4;10309:6;10305:17;10257:79;:::i;:::-;10248:88;;10064:278;10002:340;;;;:::o;10348:509::-;10417:6;10466:2;10454:9;10445:7;10441:23;10437:32;10434:119;;;10472:79;;:::i;:::-;10434:119;10620:1;10609:9;10605:17;10592:31;10650:18;10642:6;10639:30;10636:117;;;10672:79;;:::i;:::-;10636:117;10777:63;10832:7;10823:6;10812:9;10808:22;10777:63;:::i;:::-;10767:73;;10563:287;10348:509;;;;:::o;10863:180::-;10911:77;10908:1;10901:88;11008:4;11005:1;10998:15;11032:4;11029:1;11022:15;11049:120;11137:1;11130:5;11127:12;11117:46;;11143:18;;:::i;:::-;11117:46;11049:120;:::o;11175:141::-;11227:7;11256:5;11245:16;;11262:48;11304:5;11262:48;:::i;:::-;11175:141;;;:::o;11322:::-;11385:9;11418:39;11451:5;11418:39;:::i;:::-;11405:52;;11322:141;;;:::o;11469:157::-;11569:50;11613:5;11569:50;:::i;:::-;11564:3;11557:63;11469:157;;:::o;11632:248::-;11738:4;11776:2;11765:9;11761:18;11753:26;;11789:84;11870:1;11859:9;11855:17;11846:6;11789:84;:::i;:::-;11632:248;;;;:::o;11886:468::-;11951:6;11959;12008:2;11996:9;11987:7;11983:23;11979:32;11976:119;;;12014:79;;:::i;:::-;11976:119;12134:1;12159:53;12204:7;12195:6;12184:9;12180:22;12159:53;:::i;:::-;12149:63;;12105:117;12261:2;12287:50;12329:7;12320:6;12309:9;12305:22;12287:50;:::i;:::-;12277:60;;12232:115;11886:468;;;;;:::o;12360:307::-;12421:4;12511:18;12503:6;12500:30;12497:56;;;12533:18;;:::i;:::-;12497:56;12571:29;12593:6;12571:29;:::i;:::-;12563:37;;12655:4;12649;12645:15;12637:23;;12360:307;;;:::o;12673:410::-;12750:5;12775:65;12791:48;12832:6;12791:48;:::i;:::-;12775:65;:::i;:::-;12766:74;;12863:6;12856:5;12849:21;12901:4;12894:5;12890:16;12939:3;12930:6;12925:3;12921:16;12918:25;12915:112;;;12946:79;;:::i;:::-;12915:112;13036:41;13070:6;13065:3;13060;13036:41;:::i;:::-;12756:327;12673:410;;;;;:::o;13102:338::-;13157:5;13206:3;13199:4;13191:6;13187:17;13183:27;13173:122;;13214:79;;:::i;:::-;13173:122;13331:6;13318:20;13356:78;13430:3;13422:6;13415:4;13407:6;13403:17;13356:78;:::i;:::-;13347:87;;13163:277;13102:338;;;;:::o;13446:943::-;13541:6;13549;13557;13565;13614:3;13602:9;13593:7;13589:23;13585:33;13582:120;;;13621:79;;:::i;:::-;13582:120;13741:1;13766:53;13811:7;13802:6;13791:9;13787:22;13766:53;:::i;:::-;13756:63;;13712:117;13868:2;13894:53;13939:7;13930:6;13919:9;13915:22;13894:53;:::i;:::-;13884:63;;13839:118;13996:2;14022:53;14067:7;14058:6;14047:9;14043:22;14022:53;:::i;:::-;14012:63;;13967:118;14152:2;14141:9;14137:18;14124:32;14183:18;14175:6;14172:30;14169:117;;;14205:79;;:::i;:::-;14169:117;14310:62;14364:7;14355:6;14344:9;14340:22;14310:62;:::i;:::-;14300:72;;14095:287;13446:943;;;;;;;:::o;14395:474::-;14463:6;14471;14520:2;14508:9;14499:7;14495:23;14491:32;14488:119;;;14526:79;;:::i;:::-;14488:119;14646:1;14671:53;14716:7;14707:6;14696:9;14692:22;14671:53;:::i;:::-;14661:63;;14617:117;14773:2;14799:53;14844:7;14835:6;14824:9;14820:22;14799:53;:::i;:::-;14789:63;;14744:118;14395:474;;;;;:::o;14875:182::-;15015:34;15011:1;15003:6;14999:14;14992:58;14875:182;:::o;15063:366::-;15205:3;15226:67;15290:2;15285:3;15226:67;:::i;:::-;15219:74;;15302:93;15391:3;15302:93;:::i;:::-;15420:2;15415:3;15411:12;15404:19;;15063:366;;;:::o;15435:419::-;15601:4;15639:2;15628:9;15624:18;15616:26;;15688:9;15682:4;15678:20;15674:1;15663:9;15659:17;15652:47;15716:131;15842:4;15716:131;:::i;:::-;15708:139;;15435:419;;;:::o;15860:180::-;15908:77;15905:1;15898:88;16005:4;16002:1;15995:15;16029:4;16026:1;16019:15;16046:320;16090:6;16127:1;16121:4;16117:12;16107:22;;16174:1;16168:4;16164:12;16195:18;16185:81;;16251:4;16243:6;16239:17;16229:27;;16185:81;16313:2;16305:6;16302:14;16282:18;16279:38;16276:84;;;16332:18;;:::i;:::-;16276:84;16097:269;16046:320;;;:::o;16372:231::-;16512:34;16508:1;16500:6;16496:14;16489:58;16581:14;16576:2;16568:6;16564:15;16557:39;16372:231;:::o;16609:366::-;16751:3;16772:67;16836:2;16831:3;16772:67;:::i;:::-;16765:74;;16848:93;16937:3;16848:93;:::i;:::-;16966:2;16961:3;16957:12;16950:19;;16609:366;;;:::o;16981:419::-;17147:4;17185:2;17174:9;17170:18;17162:26;;17234:9;17228:4;17224:20;17220:1;17209:9;17205:17;17198:47;17262:131;17388:4;17262:131;:::i;:::-;17254:139;;16981:419;;;:::o;17406:220::-;17546:34;17542:1;17534:6;17530:14;17523:58;17615:3;17610:2;17602:6;17598:15;17591:28;17406:220;:::o;17632:366::-;17774:3;17795:67;17859:2;17854:3;17795:67;:::i;:::-;17788:74;;17871:93;17960:3;17871:93;:::i;:::-;17989:2;17984:3;17980:12;17973:19;;17632:366;;;:::o;18004:419::-;18170:4;18208:2;18197:9;18193:18;18185:26;;18257:9;18251:4;18247:20;18243:1;18232:9;18228:17;18221:47;18285:131;18411:4;18285:131;:::i;:::-;18277:139;;18004:419;;;:::o;18429:243::-;18569:34;18565:1;18557:6;18553:14;18546:58;18638:26;18633:2;18625:6;18621:15;18614:51;18429:243;:::o;18678:366::-;18820:3;18841:67;18905:2;18900:3;18841:67;:::i;:::-;18834:74;;18917:93;19006:3;18917:93;:::i;:::-;19035:2;19030:3;19026:12;19019:19;;18678:366;;;:::o;19050:419::-;19216:4;19254:2;19243:9;19239:18;19231:26;;19303:9;19297:4;19293:20;19289:1;19278:9;19274:17;19267:47;19331:131;19457:4;19331:131;:::i;:::-;19323:139;;19050:419;;;:::o;19475:180::-;19523:77;19520:1;19513:88;19620:4;19617:1;19610:15;19644:4;19641:1;19634:15;19661:305;19701:3;19720:20;19738:1;19720:20;:::i;:::-;19715:25;;19754:20;19772:1;19754:20;:::i;:::-;19749:25;;19908:1;19840:66;19836:74;19833:1;19830:81;19827:107;;;19914:18;;:::i;:::-;19827:107;19958:1;19955;19951:9;19944:16;;19661:305;;;;:::o;19972:236::-;20112:34;20108:1;20100:6;20096:14;20089:58;20181:19;20176:2;20168:6;20164:15;20157:44;19972:236;:::o;20214:366::-;20356:3;20377:67;20441:2;20436:3;20377:67;:::i;:::-;20370:74;;20453:93;20542:3;20453:93;:::i;:::-;20571:2;20566:3;20562:12;20555:19;;20214:366;;;:::o;20586:419::-;20752:4;20790:2;20779:9;20775:18;20767:26;;20839:9;20833:4;20829:20;20825:1;20814:9;20810:17;20803:47;20867:131;20993:4;20867:131;:::i;:::-;20859:139;;20586:419;;;:::o;21011:180::-;21059:77;21056:1;21049:88;21156:4;21153:1;21146:15;21180:4;21177:1;21170:15;21197:233;21236:3;21259:24;21277:5;21259:24;:::i;:::-;21250:33;;21305:66;21298:5;21295:77;21292:103;;;21375:18;;:::i;:::-;21292:103;21422:1;21415:5;21411:13;21404:20;;21197:233;;;:::o;21436:147::-;21537:11;21574:3;21559:18;;21436:147;;;;:::o;21589:114::-;;:::o;21709:398::-;21868:3;21889:83;21970:1;21965:3;21889:83;:::i;:::-;21882:90;;21981:93;22070:3;21981:93;:::i;:::-;22099:1;22094:3;22090:11;22083:18;;21709:398;;;:::o;22113:379::-;22297:3;22319:147;22462:3;22319:147;:::i;:::-;22312:154;;22483:3;22476:10;;22113:379;;;:::o;22498:228::-;22638:34;22634:1;22626:6;22622:14;22615:58;22707:11;22702:2;22694:6;22690:15;22683:36;22498:228;:::o;22732:366::-;22874:3;22895:67;22959:2;22954:3;22895:67;:::i;:::-;22888:74;;22971:93;23060:3;22971:93;:::i;:::-;23089:2;23084:3;23080:12;23073:19;;22732:366;;;:::o;23104:419::-;23270:4;23308:2;23297:9;23293:18;23285:26;;23357:9;23351:4;23347:20;23343:1;23332:9;23328:17;23321:47;23385:131;23511:4;23385:131;:::i;:::-;23377:139;;23104:419;;;:::o;23529:229::-;23669:34;23665:1;23657:6;23653:14;23646:58;23738:12;23733:2;23725:6;23721:15;23714:37;23529:229;:::o;23764:366::-;23906:3;23927:67;23991:2;23986:3;23927:67;:::i;:::-;23920:74;;24003:93;24092:3;24003:93;:::i;:::-;24121:2;24116:3;24112:12;24105:19;;23764:366;;;:::o;24136:419::-;24302:4;24340:2;24329:9;24325:18;24317:26;;24389:9;24383:4;24379:20;24375:1;24364:9;24360:17;24353:47;24417:131;24543:4;24417:131;:::i;:::-;24409:139;;24136:419;;;:::o;24561:234::-;24701:34;24697:1;24689:6;24685:14;24678:58;24770:17;24765:2;24757:6;24753:15;24746:42;24561:234;:::o;24801:366::-;24943:3;24964:67;25028:2;25023:3;24964:67;:::i;:::-;24957:74;;25040:93;25129:3;25040:93;:::i;:::-;25158:2;25153:3;25149:12;25142:19;;24801:366;;;:::o;25173:419::-;25339:4;25377:2;25366:9;25362:18;25354:26;;25426:9;25420:4;25416:20;25412:1;25401:9;25397:17;25390:47;25454:131;25580:4;25454:131;:::i;:::-;25446:139;;25173:419;;;:::o;25598:148::-;25700:11;25737:3;25722:18;;25598:148;;;;:::o;25752:377::-;25858:3;25886:39;25919:5;25886:39;:::i;:::-;25941:89;26023:6;26018:3;25941:89;:::i;:::-;25934:96;;26039:52;26084:6;26079:3;26072:4;26065:5;26061:16;26039:52;:::i;:::-;26116:6;26111:3;26107:16;26100:23;;25862:267;25752:377;;;;:::o;26135:141::-;26184:4;26207:3;26199:11;;26230:3;26227:1;26220:14;26264:4;26261:1;26251:18;26243:26;;26135:141;;;:::o;26306:845::-;26409:3;26446:5;26440:12;26475:36;26501:9;26475:36;:::i;:::-;26527:89;26609:6;26604:3;26527:89;:::i;:::-;26520:96;;26647:1;26636:9;26632:17;26663:1;26658:137;;;;26809:1;26804:341;;;;26625:520;;26658:137;26742:4;26738:9;26727;26723:25;26718:3;26711:38;26778:6;26773:3;26769:16;26762:23;;26658:137;;26804:341;26871:38;26903:5;26871:38;:::i;:::-;26931:1;26945:154;26959:6;26956:1;26953:13;26945:154;;;27033:7;27027:14;27023:1;27018:3;27014:11;27007:35;27083:1;27074:7;27070:15;27059:26;;26981:4;26978:1;26974:12;26969:17;;26945:154;;;27128:6;27123:3;27119:16;27112:23;;26811:334;;26625:520;;26413:738;;26306:845;;;;:::o;27157:589::-;27382:3;27404:95;27495:3;27486:6;27404:95;:::i;:::-;27397:102;;27516:95;27607:3;27598:6;27516:95;:::i;:::-;27509:102;;27628:92;27716:3;27707:6;27628:92;:::i;:::-;27621:99;;27737:3;27730:10;;27157:589;;;;;;:::o;27752:225::-;27892:34;27888:1;27880:6;27876:14;27869:58;27961:8;27956:2;27948:6;27944:15;27937:33;27752:225;:::o;27983:366::-;28125:3;28146:67;28210:2;28205:3;28146:67;:::i;:::-;28139:74;;28222:93;28311:3;28222:93;:::i;:::-;28340:2;28335:3;28331:12;28324:19;;27983:366;;;:::o;28355:419::-;28521:4;28559:2;28548:9;28544:18;28536:26;;28608:9;28602:4;28598:20;28594:1;28583:9;28579:17;28572:47;28636:131;28762:4;28636:131;:::i;:::-;28628:139;;28355:419;;;:::o;28780:231::-;28920:34;28916:1;28908:6;28904:14;28897:58;28989:14;28984:2;28976:6;28972:15;28965:39;28780:231;:::o;29017:366::-;29159:3;29180:67;29244:2;29239:3;29180:67;:::i;:::-;29173:74;;29256:93;29345:3;29256:93;:::i;:::-;29374:2;29369:3;29365:12;29358:19;;29017:366;;;:::o;29389:419::-;29555:4;29593:2;29582:9;29578:18;29570:26;;29642:9;29636:4;29632:20;29628:1;29617:9;29613:17;29606:47;29670:131;29796:4;29670:131;:::i;:::-;29662:139;;29389:419;;;:::o;29814:228::-;29954:34;29950:1;29942:6;29938:14;29931:58;30023:11;30018:2;30010:6;30006:15;29999:36;29814:228;:::o;30048:366::-;30190:3;30211:67;30275:2;30270:3;30211:67;:::i;:::-;30204:74;;30287:93;30376:3;30287:93;:::i;:::-;30405:2;30400:3;30396:12;30389:19;;30048:366;;;:::o;30420:419::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:223::-;30985:34;30981:1;30973:6;30969:14;30962:58;31054:6;31049:2;31041:6;31037:15;31030:31;30845:223;:::o;31074:366::-;31216:3;31237:67;31301:2;31296:3;31237:67;:::i;:::-;31230:74;;31313:93;31402:3;31313:93;:::i;:::-;31431:2;31426:3;31422:12;31415:19;;31074:366;;;:::o;31446:419::-;31612:4;31650:2;31639:9;31635:18;31627:26;;31699:9;31693:4;31689:20;31685:1;31674:9;31670:17;31663:47;31727:131;31853:4;31727:131;:::i;:::-;31719:139;;31446:419;;;:::o;31871:191::-;31911:4;31931:20;31949:1;31931:20;:::i;:::-;31926:25;;31965:20;31983:1;31965:20;:::i;:::-;31960:25;;32004:1;32001;31998:8;31995:34;;;32009:18;;:::i;:::-;31995:34;32054:1;32051;32047:9;32039:17;;31871:191;;;;:::o;32068:172::-;32208:24;32204:1;32196:6;32192:14;32185:48;32068:172;:::o;32246:366::-;32388:3;32409:67;32473:2;32468:3;32409:67;:::i;:::-;32402:74;;32485:93;32574:3;32485:93;:::i;:::-;32603:2;32598:3;32594:12;32587:19;;32246:366;;;:::o;32618:419::-;32784:4;32822:2;32811:9;32807:18;32799:26;;32871:9;32865:4;32861:20;32857:1;32846:9;32842:17;32835:47;32899:131;33025:4;32899:131;:::i;:::-;32891:139;;32618:419;;;:::o;33043:177::-;33183:29;33179:1;33171:6;33167:14;33160:53;33043:177;:::o;33226:366::-;33368:3;33389:67;33453:2;33448:3;33389:67;:::i;:::-;33382:74;;33465:93;33554:3;33465:93;:::i;:::-;33583:2;33578:3;33574:12;33567:19;;33226:366;;;:::o;33598:419::-;33764:4;33802:2;33791:9;33787:18;33779:26;;33851:9;33845:4;33841:20;33837:1;33826:9;33822:17;33815:47;33879:131;34005:4;33879:131;:::i;:::-;33871:139;;33598:419;;;:::o;34023:172::-;34163:24;34159:1;34151:6;34147:14;34140:48;34023:172;:::o;34201:366::-;34343:3;34364:67;34428:2;34423:3;34364:67;:::i;:::-;34357:74;;34440:93;34529:3;34440:93;:::i;:::-;34558:2;34553:3;34549:12;34542:19;;34201:366;;;:::o;34573:419::-;34739:4;34777:2;34766:9;34762:18;34754:26;;34826:9;34820:4;34816:20;34812:1;34801:9;34797:17;34790:47;34854:131;34980:4;34854:131;:::i;:::-;34846:139;;34573:419;;;:::o;34998:348::-;35038:7;35061:20;35079:1;35061:20;:::i;:::-;35056:25;;35095:20;35113:1;35095:20;:::i;:::-;35090:25;;35283:1;35215:66;35211:74;35208:1;35205:81;35200:1;35193:9;35186:17;35182:105;35179:131;;;35290:18;;:::i;:::-;35179:131;35338:1;35335;35331:9;35320:20;;34998:348;;;;:::o;35352:168::-;35492:20;35488:1;35480:6;35476:14;35469:44;35352:168;:::o;35526:366::-;35668:3;35689:67;35753:2;35748:3;35689:67;:::i;:::-;35682:74;;35765:93;35854:3;35765:93;:::i;:::-;35883:2;35878:3;35874:12;35867:19;;35526:366;;;:::o;35898:419::-;36064:4;36102:2;36091:9;36087:18;36079:26;;36151:9;36145:4;36141:20;36137:1;36126:9;36122:17;36115:47;36179:131;36305:4;36179:131;:::i;:::-;36171:139;;35898:419;;;:::o;36323:223::-;36463:34;36459:1;36451:6;36447:14;36440:58;36532:6;36527:2;36519:6;36515:15;36508:31;36323:223;:::o;36552:366::-;36694:3;36715:67;36779:2;36774:3;36715:67;:::i;:::-;36708:74;;36791:93;36880:3;36791:93;:::i;:::-;36909:2;36904:3;36900:12;36893:19;;36552:366;;;:::o;36924:419::-;37090:4;37128:2;37117:9;37113:18;37105:26;;37177:9;37171:4;37167:20;37163:1;37152:9;37148:17;37141:47;37205:131;37331:4;37205:131;:::i;:::-;37197:139;;36924:419;;;:::o;37349:173::-;37489:25;37485:1;37477:6;37473:14;37466:49;37349:173;:::o;37528:366::-;37670:3;37691:67;37755:2;37750:3;37691:67;:::i;:::-;37684:74;;37767:93;37856:3;37767:93;:::i;:::-;37885:2;37880:3;37876:12;37869:19;;37528:366;;;:::o;37900:419::-;38066:4;38104:2;38093:9;38089:18;38081:26;;38153:9;38147:4;38143:20;38139:1;38128:9;38124:17;38117:47;38181:131;38307:4;38181:131;:::i;:::-;38173:139;;37900:419;;;:::o;38325:178::-;38465:30;38461:1;38453:6;38449:14;38442:54;38325:178;:::o;38509:366::-;38651:3;38672:67;38736:2;38731:3;38672:67;:::i;:::-;38665:74;;38748:93;38837:3;38748:93;:::i;:::-;38866:2;38861:3;38857:12;38850:19;;38509:366;;;:::o;38881:419::-;39047:4;39085:2;39074:9;39070:18;39062:26;;39134:9;39128:4;39124:20;39120:1;39109:9;39105:17;39098:47;39162:131;39288:4;39162:131;:::i;:::-;39154:139;;38881:419;;;:::o;39306:175::-;39446:27;39442:1;39434:6;39430:14;39423:51;39306:175;:::o;39487:366::-;39629:3;39650:67;39714:2;39709:3;39650:67;:::i;:::-;39643:74;;39726:93;39815:3;39726:93;:::i;:::-;39844:2;39839:3;39835:12;39828:19;;39487:366;;;:::o;39859:419::-;40025:4;40063:2;40052:9;40048:18;40040:26;;40112:9;40106:4;40102:20;40098:1;40087:9;40083:17;40076:47;40140:131;40266:4;40140:131;:::i;:::-;40132:139;;39859:419;;;:::o;40284:237::-;40424:34;40420:1;40412:6;40408:14;40401:58;40493:20;40488:2;40480:6;40476:15;40469:45;40284:237;:::o;40527:366::-;40669:3;40690:67;40754:2;40749:3;40690:67;:::i;:::-;40683:74;;40766:93;40855:3;40766:93;:::i;:::-;40884:2;40879:3;40875:12;40868:19;;40527:366;;;:::o;40899:419::-;41065:4;41103:2;41092:9;41088:18;41080:26;;41152:9;41146:4;41142:20;41138:1;41127:9;41123:17;41116:47;41180:131;41306:4;41180:131;:::i;:::-;41172:139;;40899:419;;;:::o;41324:180::-;41372:77;41369:1;41362:88;41469:4;41466:1;41459:15;41493:4;41490:1;41483:15;41510:185;41550:1;41567:20;41585:1;41567:20;:::i;:::-;41562:25;;41601:20;41619:1;41601:20;:::i;:::-;41596:25;;41640:1;41630:35;;41645:18;;:::i;:::-;41630:35;41687:1;41684;41680:9;41675:14;;41510:185;;;;:::o;41701:176::-;41733:1;41750:20;41768:1;41750:20;:::i;:::-;41745:25;;41784:20;41802:1;41784:20;:::i;:::-;41779:25;;41823:1;41813:35;;41828:18;;:::i;:::-;41813:35;41869:1;41866;41862:9;41857:14;;41701:176;;;;:::o;41883:98::-;41934:6;41968:5;41962:12;41952:22;;41883:98;;;:::o;41987:168::-;42070:11;42104:6;42099:3;42092:19;42144:4;42139:3;42135:14;42120:29;;41987:168;;;;:::o;42161:360::-;42247:3;42275:38;42307:5;42275:38;:::i;:::-;42329:70;42392:6;42387:3;42329:70;:::i;:::-;42322:77;;42408:52;42453:6;42448:3;42441:4;42434:5;42430:16;42408:52;:::i;:::-;42485:29;42507:6;42485:29;:::i;:::-;42480:3;42476:39;42469:46;;42251:270;42161:360;;;;:::o;42527:640::-;42722:4;42760:3;42749:9;42745:19;42737:27;;42774:71;42842:1;42831:9;42827:17;42818:6;42774:71;:::i;:::-;42855:72;42923:2;42912:9;42908:18;42899:6;42855:72;:::i;:::-;42937;43005:2;42994:9;42990:18;42981:6;42937:72;:::i;:::-;43056:9;43050:4;43046:20;43041:2;43030:9;43026:18;43019:48;43084:76;43155:4;43146:6;43084:76;:::i;:::-;43076:84;;42527:640;;;;;;;:::o;43173:141::-;43229:5;43260:6;43254:13;43245:22;;43276:32;43302:5;43276:32;:::i;:::-;43173:141;;;;:::o;43320:349::-;43389:6;43438:2;43426:9;43417:7;43413:23;43409:32;43406:119;;;43444:79;;:::i;:::-;43406:119;43564:1;43589:63;43644:7;43635:6;43624:9;43620:22;43589:63;:::i;:::-;43579:73;;43535:127;43320:349;;;;:::o;43675:182::-;43815:34;43811:1;43803:6;43799:14;43792:58;43675:182;:::o;43863:366::-;44005:3;44026:67;44090:2;44085:3;44026:67;:::i;:::-;44019:74;;44102:93;44191:3;44102:93;:::i;:::-;44220:2;44215:3;44211:12;44204:19;;43863:366;;;:::o;44235:419::-;44401:4;44439:2;44428:9;44424:18;44416:26;;44488:9;44482:4;44478:20;44474:1;44463:9;44459:17;44452:47;44516:131;44642:4;44516:131;:::i;:::-;44508:139;;44235:419;;;:::o;44660:178::-;44800:30;44796:1;44788:6;44784:14;44777:54;44660:178;:::o;44844:366::-;44986:3;45007:67;45071:2;45066:3;45007:67;:::i;:::-;45000:74;;45083:93;45172:3;45083:93;:::i;:::-;45201:2;45196:3;45192:12;45185:19;;44844:366;;;:::o;45216:419::-;45382:4;45420:2;45409:9;45405:18;45397:26;;45469:9;45463:4;45459:20;45455:1;45444:9;45440:17;45433:47;45497:131;45623:4;45497:131;:::i;:::-;45489:139;;45216:419;;;:::o

Swarm Source

ipfs://b40b12e271b640919a16a1079e346017931677db796c6b8dc5361bb624e0f480
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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