ETH Price: $2,601.78 (+0.36%)

Token

Gutter Madness (GM)
 

Overview

Max Total Supply

64 GM

Holders

59

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
kinginthecastle.eth
Balance
1 GM
0x25c6b3907de5d4a80537735eded2c16fe7c8aacc
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:
Madness

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-15
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

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


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

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts/Madness.sol


pragma solidity ^0.8.0;





// KPD hired Artstamps by Plentefy to deploy their contract
// Plentefy is not responsible for any of the actions within the contract, nor any of the functions to be executed from this contract
// @auhtor Kvn "OxygenAryl" Smnck

contract Madness is ERC721, ERC721Enumerable, Ownable {
	using Strings for string;
	bool public mintClosed = true;	
	bool public freeClosed = false;
	bool public eastClosed = false; 
	bool public midwestClosed = false; 
	bool public southClosed = false; 
	bool public westClosed = false; 
	address public devAddress = 0xB758c4D4e2973FEF14Df828dA705f7c02980d836;
	uint256 public payCap = 9935;
	uint256 public mintPrice = 50000000000000000; // 0.05 ETH
	uint256 public devCost = 10; // 10% 	
	uint256 public giveTot = 0;
	uint256 public payTot = 0;
	string public _baseTokenURI = "https://artstamps.io/client/KPD/GutterMadness/";
	string public _contractURI = "https://artstamps.io/client/KPD/GutterMadness/contract";
	mapping(uint256 => uint256) public totalSupply;
	mapping(uint256 => string) public tokenURIs;
	mapping(uint256 => address) public id;

	constructor() ERC721("Gutter Madness","GM") {
		id[0] = 0xf4bBaB944e6400DC14646333350da05fA1D5eBa9;
		id[1] = 0xAd1aaF4dEbdc335eAa39da2e2e20A5186e8225F0;
		id[2] = 0x7809bBa992f09dA84d64F790726e5C4D5A63ecae;
		id[3] = 0xBF24D26B534A19E4F09c0B698b2CBffF820a452E;
		id[4] = 0x2a3B3AB29E88310F48739E77D008DbB0940c01A0;
		id[5] = 0x7e5962b42612e416D6B030fFfBfF27d92126FEc2;
		id[6] = 0x3f04c192D9d420d00424ef68b014b0e7759A4C9e;
		id[7] = 0x7AA01C68a2478Dac75500B0aea174c292F5b2F0c;
		id[8] = 0x5eF89F92388E309F795081e0dd83C82011eD2546;
		id[9] = 0x3CF65c8eE7316a92aB7d0Ef793441A1419AF13CC;
		id[10] = 0xab85bc7ecd9D5e12eD903A48b10DB18058B5D0D1;
		id[11] = 0xCab23efbe092e242Facd318e6A33c2D6F5958439;
		id[12] = 0xdb6Ad516417D8E3e51bD6099B6Af9EE57992F818;
		id[13] = 0x960AEe85506e6aACfc1c7A5071964838B7661dc6;
		id[14] = 0x379CAdAb8F98bF10121E2e9B7fc02CA802345E8b;
		id[15] = 0xd06Ceca3329D00e3474dc730ce6a37d972DEFfC1;
		id[16] = 0xD8DFb78a2d2fF891ae61A4cA1Ce80DD745b3A19c;
		id[17] = 0x78A8C036a7Fea8fD1647aD1Cd9B96F9a09eF0E44;
		id[18] = 0x5bFDF134A13A77514bE7bc8d4e18Cd10c246FafF;
		id[19] = 0xc5efda69F147920DA402f577Df6dB22173cf34Bf;
		id[20] = 0xd91ecce1De58aa1b022E1f0D4486c1c723616c90;
		id[21] = 0x8F84f1DB0Eb0D4d1364B9A3d521577816818789f;
		id[22] = 0x5BB79beed298160813ac4f2B22f0d3de8AfEe42b;
		id[23] = 0xD52bE63b3359D68bC7f2A623eaF439f4d7928d7e;
		id[24] = 0x8ad67B657faC1458f4B5a63471e8173f37af65a7;
		id[25] = 0x6B06440a8451d3d3b758e6253c02A3B17F40E59e;
		id[26] = 0xc301625D64528e69ddF101914188fCd793c528CC;
		id[27] = 0x840525Ac91022488b616C0ab361A614E16bDD4ab;
		id[28] = 0x0b4955C7B65c9fdAeCB2e12717092936316f52F3;
		id[29] = 0x35e7cA43aC60AEEA6b059bCA304eef948884372E;
		id[30] = 0x4B154Bee922B84201F4dca8d6f021739a80CdE8e;
		id[31] = 0x425D823194f1966923AaBAaD6E1942aC253A564A;
		id[32] = 0x25c6B3907de5d4a80537735EdED2C16fE7c8aACC;
		id[33] = 0xe6D4e1ffF77A8c834323601Dce1f3E57da3FB451;
		id[34] = 0x8d2c9C6C5029496fD8321762b20D2529ef027c26;
		id[35] = 0x5De0AAfB65C3F2D09B2a743E5b443F3E0cD7f4c9;
		id[36] = 0x2Cd04432a5304C8955Ec73b3Be4893F0b245E7aB;
		id[37] = 0x7f72b6d6d9116b20E5b40A641485559c4766B6D7;
		id[38] = 0x76232673eB1fE7347abEEafDC73B3b2Bf4030634;
		id[39] = 0x898Fa342aa2836d6580C6B13287EdBF25564710b;
		id[40] = 0x271271E6c59d4e47D67CD7aC13f8d0232Fa4C919;
		id[41] = 0x7AdA43d81b2606FBD438Ef15652F99507BbBC11c;
		id[42] = 0xAFA772cEC2A8498eCb6aE0028768707D25FFf5d5;
		id[43] = 0x137E6DfffC7B43bed9bc51A64dBd99771044eccf;
		id[44] = 0x1b45435F84582A96C0cb8Efe516195f9c3e5eD41;
		id[45] = 0x732EA7262F4c133bbb2Fcda4758C839842235D31;
		id[46] = 0x3469bD3f851874c9bD5505003948CA1F0E0bBF72;
		id[47] = 0xB2514cCF793dA87C5C22373C4D42873BA32D7d9D;
		id[48] = 0xf7B1aCD2ae65a63d4cf08c3ef5321eEf42495F8D;
		id[49] = 0xCc1Cb0FA339EB32E436dCe1Ba752bdA72fC6eDfe;
		id[50] = 0x4669416015a1a79280765F3d1366B1e5FeC524BA;
		id[51] = 0xC4A863209186600eC7321dbd1407137B30369164;
		id[52] = 0x950286a4e7E01aFEC79D64662914A9b460272E92;
		id[53] = 0xaa9A338098E59A6818f3D81aae4Fa1FC44c4325f;
		id[54] = 0x56126B2EB151289B8156E58e794Fa2Bf858A6C46;
		id[55] = 0xee06Bd8B2A7630363BBB8AC4B90Bb3E7d2652a34;
		id[56] = 0x628eA111406A68f4EC00cA3587843Ef0058BA6f3;
		id[57] = 0x81391f5adE55f1C0ff60d5C49885CB6A8f61Fc9e;
		id[58] = 0x59e0A0B5eBa2a705309B06b88eF6e414e9c11aCd;
		id[59] = 0x342890Fe437840F2150A28DDa0cb88E0E704290B;
		id[60] = 0x1CE9d62Ac3DD1b897d582cDa4075793ee8D0bfD3;
		id[61] = 0xF7D993147f69F3812f5f1eF50067dd7EbDe93E8b;
		id[62] = 0xC3b96221be3EB85448778C99F085D66cd7144de6;
		id[63] = 0xA196e56651f17aa8664787853D0C703Bfc85F8B6;
		} 

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

	function mintPause(bool valm) public onlyOwner {
        mintClosed = valm;
    } 
	
	function freePause(bool valp) public onlyOwner {
        freeClosed = valp;
    } 

	function setRules (uint256 _capPay, uint256 _tokenPrice) public onlyOwner {
		payCap = _capPay;
		mintPrice = _tokenPrice;
	}
	
	//East bracket Free Mint
	function mintEast() public onlyOwner {
		require(!freeClosed, "Closed");
		require(!eastClosed, "Completed");
		uint i;
		for (i=0; i < 16; i++){
			_safeMint(id[i],i+1);
		}
		eastClosed = true;
	}
	
	//Midwest bracket Free Mint
	function mintMidwest() public onlyOwner {
		require(!freeClosed, "Closed");
		require(!midwestClosed, "Completed");
		uint i;
		for (i=16; i < 32; i++){
			_safeMint(id[i],i+1);
		}
		midwestClosed = true;
	}
	
	//South bracket Free Mint
	function mintSouth() public onlyOwner {
		require(!freeClosed, "Closed");
		require(!southClosed, "Completed");
		uint i;
		for (i=32; i < 48; i++){
			_safeMint(id[i],i+1);
		}
		southClosed = true;
	}
	
	//East bracket Free Mint
	function mintWest() public onlyOwner {
		require(!freeClosed, "Closed");
		require(!westClosed, "Completed");
		uint i;
		for (i=48; i < 64; i++){
			_safeMint(id[i],i+1);
		}
		westClosed = true;
	}

	//Giveaway Mint
	function zeroPrize(address to) public onlyOwner {
		_safeMint(to,0);
		}

	//Paid Public Mint
	function mintPay() public payable {
		require(!mintClosed, "Closed");
		require(mintPrice == msg.value, "insufficient ETH");
		require(payTot < payCap, "No Paid Tokens Left");
		payTot = payTot + 1;
		_out(payable(devAddress));
		_safeMint(msg.sender,payTot+64);
		}


    function _out(address payable _dev) 
		private
    {
        uint256 devPayment = mintPrice/devCost;
        _dev.transfer(devPayment);
    }
	
	function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

	// withdraw some revenue to prepare tax liabilities and mitigate currency and wallet risk  :)
	function withdrawSome(uint256 leaveAmt) public onlyOwner {
		uint256 withdrawAmt = address(this).balance - (leaveAmt);
		payable(msg.sender).transfer(withdrawAmt);
	} 

	// withdraw all funds instantly
	function withdraw() public onlyOwner {
		uint256 balance = address(this).balance;
		payable(msg.sender).transfer(balance);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eastClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"valp","type":"bool"}],"name":"freePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveTot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"id","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":[],"name":"midwestClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintEast","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintMidwest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"valm","type":"bool"}],"name":"mintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintSouth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintWest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payTot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_capPay","type":"uint256"},{"internalType":"uint256","name":"_tokenPrice","type":"uint256"}],"name":"setRules","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"southClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURIs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"westClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"leaveAmt","type":"uint256"}],"name":"withdrawSome","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"zeroPrize","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600a60146101000a81548160ff0219169083151502179055506000600a60156101000a81548160ff0219169083151502179055506000600a60166101000a81548160ff0219169083151502179055506000600a60176101000a81548160ff0219169083151502179055506000600a60186101000a81548160ff0219169083151502179055506000600a60196101000a81548160ff02191690831515021790555073b758c4d4e2973fef14df828da705f7c02980d836600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126cf600c5566b1a2bc2ec50000600d55600a600e556000600f5560006010556040518060600160405280602e815260200162006b7a602e9139601190805190602001906200014c92919062001ce0565b5060405180606001604052806036815260200162006b4460369139601290805190602001906200017e92919062001ce0565b503480156200018c57600080fd5b506040518060400160405280600e81526020017f477574746572204d61646e6573730000000000000000000000000000000000008152506040518060400160405280600281526020017f474d00000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200021192919062001ce0565b5080600190805190602001906200022a92919062001ce0565b5050506200024d6200024162001c1260201b60201c565b62001c1a60201b60201c565b73f4bbab944e6400dc14646333350da05fa1d5eba96015600080815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ad1aaf4debdc335eaa39da2e2e20a5186e8225f0601560006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737809bba992f09da84d64f790726e5c4d5a63ecae601560006002815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bf24d26b534a19e4f09c0b698b2cbfff820a452e601560006003815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732a3b3ab29e88310f48739e77d008dbb0940c01a0601560006004815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737e5962b42612e416d6b030fffbff27d92126fec2601560006005815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733f04c192d9d420d00424ef68b014b0e7759a4c9e601560006006815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737aa01c68a2478dac75500b0aea174c292f5b2f0c601560006007815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735ef89f92388e309f795081e0dd83c82011ed2546601560006008815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733cf65c8ee7316a92ab7d0ef793441a1419af13cc601560006009815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ab85bc7ecd9d5e12ed903a48b10db18058b5d0d160156000600a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cab23efbe092e242facd318e6a33c2d6f595843960156000600b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073db6ad516417d8e3e51bd6099b6af9ee57992f81860156000600c815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073960aee85506e6aacfc1c7a5071964838b7661dc660156000600d815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073379cadab8f98bf10121e2e9b7fc02ca802345e8b60156000600e815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d06ceca3329d00e3474dc730ce6a37d972deffc160156000600f815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d8dfb78a2d2ff891ae61a4ca1ce80dd745b3a19c601560006010815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507378a8c036a7fea8fd1647ad1cd9b96f9a09ef0e44601560006011815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735bfdf134a13a77514be7bc8d4e18cd10c246faff601560006012815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c5efda69f147920da402f577df6db22173cf34bf601560006013815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d91ecce1de58aa1b022e1f0d4486c1c723616c90601560006014815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738f84f1db0eb0d4d1364b9a3d521577816818789f601560006015815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735bb79beed298160813ac4f2b22f0d3de8afee42b601560006016815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d52be63b3359d68bc7f2a623eaf439f4d7928d7e601560006017815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738ad67b657fac1458f4b5a63471e8173f37af65a7601560006018815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550736b06440a8451d3d3b758e6253c02a3b17f40e59e601560006019815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c301625d64528e69ddf101914188fcd793c528cc60156000601a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073840525ac91022488b616c0ab361a614e16bdd4ab60156000601b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730b4955c7b65c9fdaecb2e12717092936316f52f360156000601c815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507335e7ca43ac60aeea6b059bca304eef948884372e60156000601d815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734b154bee922b84201f4dca8d6f021739a80cde8e60156000601e815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073425d823194f1966923aabaad6e1942ac253a564a60156000601f815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507325c6b3907de5d4a80537735eded2c16fe7c8aacc601560006020815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e6d4e1fff77a8c834323601dce1f3e57da3fb451601560006021815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738d2c9c6c5029496fd8321762b20d2529ef027c26601560006022815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735de0aafb65c3f2d09b2a743e5b443f3e0cd7f4c9601560006023815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732cd04432a5304c8955ec73b3be4893f0b245e7ab601560006024815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737f72b6d6d9116b20e5b40a641485559c4766b6d7601560006025815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507376232673eb1fe7347abeeafdc73b3b2bf4030634601560006026815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073898fa342aa2836d6580c6b13287edbf25564710b601560006027815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073271271e6c59d4e47d67cd7ac13f8d0232fa4c919601560006028815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737ada43d81b2606fbd438ef15652f99507bbbc11c601560006029815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073afa772cec2a8498ecb6ae0028768707d25fff5d560156000602a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073137e6dfffc7b43bed9bc51a64dbd99771044eccf60156000602b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731b45435f84582a96c0cb8efe516195f9c3e5ed4160156000602c815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073732ea7262f4c133bbb2fcda4758c839842235d3160156000602d815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733469bd3f851874c9bd5505003948ca1f0e0bbf7260156000602e815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b2514ccf793da87c5c22373c4d42873ba32d7d9d60156000602f815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f7b1acd2ae65a63d4cf08c3ef5321eef42495f8d601560006030815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cc1cb0fa339eb32e436dce1ba752bda72fc6edfe601560006031815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734669416015a1a79280765f3d1366b1e5fec524ba601560006032815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c4a863209186600ec7321dbd1407137b30369164601560006033815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073950286a4e7e01afec79d64662914a9b460272e92601560006034815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073aa9a338098e59a6818f3d81aae4fa1fc44c4325f601560006035815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507356126b2eb151289b8156e58e794fa2bf858a6c46601560006036815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ee06bd8b2a7630363bbb8ac4b90bb3e7d2652a34601560006037815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073628ea111406a68f4ec00ca3587843ef0058ba6f3601560006038815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507381391f5ade55f1c0ff60d5c49885cb6a8f61fc9e601560006039815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507359e0a0b5eba2a705309b06b88ef6e414e9c11acd60156000603a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073342890fe437840f2150a28dda0cb88e0e704290b60156000603b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731ce9d62ac3dd1b897d582cda4075793ee8d0bfd360156000603c815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f7d993147f69f3812f5f1ef50067dd7ebde93e8b60156000603d815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c3b96221be3eb85448778c99f085d66cd7144de660156000603e815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a196e56651f17aa8664787853d0c703bfc85f8b660156000603f815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062001df5565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462001cee9062001d90565b90600052602060002090601f01602090048101928262001d12576000855562001d5e565b82601f1062001d2d57805160ff191683800117855562001d5e565b8280016001018555821562001d5e579182015b8281111562001d5d57825182559160200191906001019062001d40565b5b50905062001d6d919062001d71565b5090565b5b8082111562001d8c57600081600090555060010162001d72565b5090565b6000600282049050600182168062001da957607f821691505b6020821081141562001dc05762001dbf62001dc6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614d3f8062001e056000396000f3fe6080604052600436106102935760003560e01c80637d3c40c81161015a578063bd85b039116100c1578063d663d3701161007a578063d663d370146109d5578063df991e3414610a00578063e1572fa414610a29578063e985e9c514610a40578063f2fde38b14610a7d578063fa70b76114610aa657610293565b8063bd85b039146108b1578063c0e72740146108ee578063c7682e8514610919578063c87b56dd14610944578063cf6b673614610981578063cfc86f7b146109aa57610293565b806399106e1e1161011357806399106e1e146107d6578063a22cb46514610801578063ae9b051c1461082a578063b403e7c114610853578063b43ca3931461085d578063b88d4fde1461088857610293565b80637d3c40c8146106d657806380cb410d146107135780638da5cb5b1461072a57806395d89b4114610755578063974d4ae314610780578063990b043b146107ab57610293565b80633ccfd60b116101fe5780636817c76c116101b75780636817c76c146105c65780636c8b703f146105f15780636d92da2a1461062e5780636dc8a05f1461065757806370a0823114610682578063715018a6146106bf57610293565b80633ccfd60b146104cc57806342842e0e146104e35780634336725b1461050c5780634f6ccce71461052357806355f804b3146105605780636352211e1461058957610293565b80631cb7dc30116102505780631cb7dc30146103bc57806323b872dd146103e55780632ec93a101461040e5780632f745c59146104395780633ad10ef6146104765780633ccbae70146104a157610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780631620daed1461036657806318160ddd14610391575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613a37565b610abd565b6040516102cc9190613fa4565b60405180910390f35b3480156102e157600080fd5b506102ea610acf565b6040516102f79190613fbf565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190613ada565b610b61565b6040516103349190613f3d565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f91906139ca565b610be6565b005b34801561037257600080fd5b5061037b610cfe565b6040516103889190613fa4565b60405180910390f35b34801561039d57600080fd5b506103a6610d11565b6040516103b391906142a1565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613a0a565b610d1e565b005b3480156103f157600080fd5b5061040c600480360381019061040791906138b4565b610db7565b005b34801561041a57600080fd5b50610423610e17565b6040516104309190613fa4565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b91906139ca565b610e2a565b60405161046d91906142a1565b60405180910390f35b34801561048257600080fd5b5061048b610ecf565b6040516104989190613f3d565b60405180910390f35b3480156104ad57600080fd5b506104b6610ef5565b6040516104c391906142a1565b60405180910390f35b3480156104d857600080fd5b506104e1610efb565b005b3480156104ef57600080fd5b5061050a600480360381019061050591906138b4565b610fc6565b005b34801561051857600080fd5b50610521610fe6565b005b34801561052f57600080fd5b5061054a60048036038101906105459190613ada565b61118c565b60405161055791906142a1565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190613a91565b6111fd565b005b34801561059557600080fd5b506105b060048036038101906105ab9190613ada565b611293565b6040516105bd9190613f3d565b60405180910390f35b3480156105d257600080fd5b506105db611345565b6040516105e891906142a1565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613ada565b61134b565b6040516106259190613fbf565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190613b07565b6113eb565b005b34801561066357600080fd5b5061066c611479565b6040516106799190613fa4565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190613847565b61148c565b6040516106b691906142a1565b60405180910390f35b3480156106cb57600080fd5b506106d4611544565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190613ada565b6115cc565b60405161070a9190613f3d565b60405180910390f35b34801561071f57600080fd5b506107286115ff565b005b34801561073657600080fd5b5061073f6117a5565b60405161074c9190613f3d565b60405180910390f35b34801561076157600080fd5b5061076a6117cf565b6040516107779190613fbf565b60405180910390f35b34801561078c57600080fd5b50610795611861565b6040516107a291906142a1565b60405180910390f35b3480156107b757600080fd5b506107c0611867565b6040516107cd9190613fa4565b60405180910390f35b3480156107e257600080fd5b506107eb61187a565b6040516107f891906142a1565b60405180910390f35b34801561080d57600080fd5b506108286004803603810190610823919061398a565b611880565b005b34801561083657600080fd5b50610851600480360381019061084c9190613ada565b611896565b005b61085b61196d565b005b34801561086957600080fd5b50610872611aa1565b60405161087f91906142a1565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190613907565b611aa7565b005b3480156108bd57600080fd5b506108d860048036038101906108d39190613ada565b611b09565b6040516108e591906142a1565b60405180910390f35b3480156108fa57600080fd5b50610903611b21565b6040516109109190613fbf565b60405180910390f35b34801561092557600080fd5b5061092e611baf565b60405161093b9190613fa4565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190613ada565b611bc2565b6040516109789190613fbf565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613a0a565b611c69565b005b3480156109b657600080fd5b506109bf611d02565b6040516109cc9190613fbf565b60405180910390f35b3480156109e157600080fd5b506109ea611d90565b6040516109f79190613fa4565b60405180910390f35b348015610a0c57600080fd5b50610a276004803603810190610a229190613847565b611da3565b005b348015610a3557600080fd5b50610a3e611e2d565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613874565b611fcf565b604051610a749190613fa4565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f9190613847565b612063565b005b348015610ab257600080fd5b50610abb61215b565b005b6000610ac882612301565b9050919050565b606060008054610ade906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0a906144f7565b8015610b575780601f10610b2c57610100808354040283529160200191610b57565b820191906000526020600020905b815481529060010190602001808311610b3a57829003601f168201915b5050505050905090565b6000610b6c8261237b565b610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba2906141a1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf182611293565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990614241565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c816123e7565b73ffffffffffffffffffffffffffffffffffffffff161480610cb05750610caf81610caa6123e7565b611fcf565b5b610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690614121565b60405180910390fd5b610cf983836123ef565b505050565b600a60159054906101000a900460ff1681565b6000600880549050905090565b610d266123e7565b73ffffffffffffffffffffffffffffffffffffffff16610d446117a5565b73ffffffffffffffffffffffffffffffffffffffff1614610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906141c1565b60405180910390fd5b80600a60156101000a81548160ff02191690831515021790555050565b610dc8610dc26123e7565b826124a8565b610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90614261565b60405180910390fd5b610e12838383612586565b505050565b600a60199054906101000a900460ff1681565b6000610e358361148c565b8210610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90614021565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b610f036123e7565b73ffffffffffffffffffffffffffffffffffffffff16610f216117a5565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e906141c1565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fc2573d6000803e3d6000fd5b5050565b610fe183838360405180602001604052806000815250611aa7565b505050565b610fee6123e7565b73ffffffffffffffffffffffffffffffffffffffff1661100c6117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906141c1565b60405180910390fd5b600a60159054906101000a900460ff16156110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a990614001565b60405180910390fd5b600a60179054906101000a900460ff1615611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990613fe1565b60405180910390fd5b6000601090505b602081101561116e5761115b6015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001836111569190614386565b6127ed565b80806111669061455a565b915050611109565b6001600a60176101000a81548160ff02191690831515021790555050565b6000611196610d11565b82106111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90614281565b60405180910390fd5b600882815481106111eb576111ea614690565b5b90600052602060002001549050919050565b6112056123e7565b73ffffffffffffffffffffffffffffffffffffffff166112236117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611270906141c1565b60405180910390fd5b806011908051906020019061128f92919061365b565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390614161565b60405180910390fd5b80915050919050565b600d5481565b6014602052806000526040600020600091509050805461136a906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611396906144f7565b80156113e35780601f106113b8576101008083540402835291602001916113e3565b820191906000526020600020905b8154815290600101906020018083116113c657829003601f168201915b505050505081565b6113f36123e7565b73ffffffffffffffffffffffffffffffffffffffff166114116117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e906141c1565b60405180910390fd5b81600c8190555080600d819055505050565b600a60189054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614141565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61154c6123e7565b73ffffffffffffffffffffffffffffffffffffffff1661156a6117a5565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b7906141c1565b60405180910390fd5b6115ca600061280b565b565b60156020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116076123e7565b73ffffffffffffffffffffffffffffffffffffffff166116256117a5565b73ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611672906141c1565b60405180910390fd5b600a60159054906101000a900460ff16156116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290614001565b60405180910390fd5b600a60199054906101000a900460ff161561171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290613fe1565b60405180910390fd5b6000603090505b6040811015611787576117746015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660018361176f9190614386565b6127ed565b808061177f9061455a565b915050611722565b6001600a60196101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117de906144f7565b80601f016020809104026020016040519081016040528092919081815260200182805461180a906144f7565b80156118575780601f1061182c57610100808354040283529160200191611857565b820191906000526020600020905b81548152906001019060200180831161183a57829003601f168201915b5050505050905090565b600c5481565b600a60169054906101000a900460ff1681565b600f5481565b61189261188b6123e7565b83836128d1565b5050565b61189e6123e7565b73ffffffffffffffffffffffffffffffffffffffff166118bc6117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611909906141c1565b60405180910390fd5b60008147611920919061440d565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611968573d6000803e3d6000fd5b505050565b600a60149054906101000a900460ff16156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490614001565b60405180910390fd5b34600d5414611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906141e1565b60405180910390fd5b600c5460105410611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90614221565b60405180910390fd5b6001601054611a569190614386565b601081905550611a87600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612a3e565b611a9f336040601054611a9a9190614386565b6127ed565b565b600e5481565b611ab8611ab26123e7565b836124a8565b611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee90614261565b60405180910390fd5b611b0384848484612a9d565b50505050565b60136020528060005260406000206000915090505481565b60128054611b2e906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5a906144f7565b8015611ba75780601f10611b7c57610100808354040283529160200191611ba7565b820191906000526020600020905b815481529060010190602001808311611b8a57829003601f168201915b505050505081565b600a60179054906101000a900460ff1681565b6060611bcd8261237b565b611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390614201565b60405180910390fd5b6000611c16612af9565b90506000815111611c365760405180602001604052806000815250611c61565b80611c4084612b8b565b604051602001611c51929190613f19565b6040516020818303038152906040525b915050919050565b611c716123e7565b73ffffffffffffffffffffffffffffffffffffffff16611c8f6117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc906141c1565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b60118054611d0f906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3b906144f7565b8015611d885780601f10611d5d57610100808354040283529160200191611d88565b820191906000526020600020905b815481529060010190602001808311611d6b57829003601f168201915b505050505081565b600a60149054906101000a900460ff1681565b611dab6123e7565b73ffffffffffffffffffffffffffffffffffffffff16611dc96117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e16906141c1565b60405180910390fd5b611e2a8160006127ed565b50565b611e356123e7565b73ffffffffffffffffffffffffffffffffffffffff16611e536117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906141c1565b60405180910390fd5b600a60159054906101000a900460ff1615611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090614001565b60405180910390fd5b600a60169054906101000a900460ff1615611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613fe1565b60405180910390fd5b60005b6010811015611fb157611f9e6015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600183611f999190614386565b6127ed565b8080611fa99061455a565b915050611f4c565b6001600a60166101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61206b6123e7565b73ffffffffffffffffffffffffffffffffffffffff166120896117a5565b73ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d6906141c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614061565b60405180910390fd5b6121588161280b565b50565b6121636123e7565b73ffffffffffffffffffffffffffffffffffffffff166121816117a5565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906141c1565b60405180910390fd5b600a60159054906101000a900460ff1615612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90614001565b60405180910390fd5b600a60189054906101000a900460ff1615612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226e90613fe1565b60405180910390fd5b6000602090505b60308110156122e3576122d06015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001836122cb9190614386565b6127ed565b80806122db9061455a565b91505061227e565b6001600a60186101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612374575061237382612cec565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661246283611293565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124b38261237b565b6124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990614101565b60405180910390fd5b60006124fd83611293565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061256c57508373ffffffffffffffffffffffffffffffffffffffff1661255484610b61565b73ffffffffffffffffffffffffffffffffffffffff16145b8061257d575061257c8185611fcf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125a682611293565b73ffffffffffffffffffffffffffffffffffffffff16146125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f390614081565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561266c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612663906140c1565b60405180910390fd5b612677838383612dce565b6126826000826123ef565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126d2919061440d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127299190614386565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127e8838383612dde565b505050565b612807828260405180602001604052806000815250612de3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612937906140e1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a319190613fa4565b60405180910390a3505050565b6000600e54600d54612a5091906143dc565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a98573d6000803e3d6000fd5b505050565b612aa8848484612586565b612ab484848484612e3e565b612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea90614041565b60405180910390fd5b50505050565b606060118054612b08906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054612b34906144f7565b8015612b815780601f10612b5657610100808354040283529160200191612b81565b820191906000526020600020905b815481529060010190602001808311612b6457829003601f168201915b5050505050905090565b60606000821415612bd3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ce7565b600082905060005b60008214612c05578080612bee9061455a565b915050600a82612bfe91906143dc565b9150612bdb565b60008167ffffffffffffffff811115612c2157612c206146bf565b5b6040519080825280601f01601f191660200182016040528015612c535781602001600182028036833780820191505090505b5090505b60008514612ce057600182612c6c919061440d565b9150600a85612c7b91906145a3565b6030612c879190614386565b60f81b818381518110612c9d57612c9c614690565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cd991906143dc565b9450612c57565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612db757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612dc75750612dc682612fd5565b5b9050919050565b612dd983838361303f565b505050565b505050565b612ded8383613153565b612dfa6000848484612e3e565b612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614041565b60405180910390fd5b505050565b6000612e5f8473ffffffffffffffffffffffffffffffffffffffff1661332d565b15612fc8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e886123e7565b8786866040518563ffffffff1660e01b8152600401612eaa9493929190613f58565b602060405180830381600087803b158015612ec457600080fd5b505af1925050508015612ef557506040513d601f19601f82011682018060405250810190612ef29190613a64565b60015b612f78573d8060008114612f25576040519150601f19603f3d011682016040523d82523d6000602084013e612f2a565b606091505b50600081511415612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6790614041565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fcd565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61304a838383613350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561308d5761308881613355565b6130cc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130cb576130ca838261339e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561310f5761310a8161350b565b61314e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461314d5761314c82826135dc565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90614181565b60405180910390fd5b6131cc8161237b565b1561320c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613203906140a1565b60405180910390fd5b61321860008383612dce565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132689190614386565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461332960008383612dde565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016133ab8461148c565b6133b5919061440d565b905060006007600084815260200190815260200160002054905081811461349a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061351f919061440d565b905060006009600084815260200190815260200160002054905060006008838154811061354f5761354e614690565b5b90600052602060002001549050806008838154811061357157613570614690565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806135c0576135bf614661565b5b6001900381819060005260206000200160009055905550505050565b60006135e78361148c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613667906144f7565b90600052602060002090601f01602090048101928261368957600085556136d0565b82601f106136a257805160ff19168380011785556136d0565b828001600101855582156136d0579182015b828111156136cf5782518255916020019190600101906136b4565b5b5090506136dd91906136e1565b5090565b5b808211156136fa5760008160009055506001016136e2565b5090565b600061371161370c846142e1565b6142bc565b90508281526020810184848401111561372d5761372c6146f3565b5b6137388482856144b5565b509392505050565b600061375361374e84614312565b6142bc565b90508281526020810184848401111561376f5761376e6146f3565b5b61377a8482856144b5565b509392505050565b60008135905061379181614cad565b92915050565b6000813590506137a681614cc4565b92915050565b6000813590506137bb81614cdb565b92915050565b6000815190506137d081614cdb565b92915050565b600082601f8301126137eb576137ea6146ee565b5b81356137fb8482602086016136fe565b91505092915050565b600082601f830112613819576138186146ee565b5b8135613829848260208601613740565b91505092915050565b60008135905061384181614cf2565b92915050565b60006020828403121561385d5761385c6146fd565b5b600061386b84828501613782565b91505092915050565b6000806040838503121561388b5761388a6146fd565b5b600061389985828601613782565b92505060206138aa85828601613782565b9150509250929050565b6000806000606084860312156138cd576138cc6146fd565b5b60006138db86828701613782565b93505060206138ec86828701613782565b92505060406138fd86828701613832565b9150509250925092565b60008060008060808587031215613921576139206146fd565b5b600061392f87828801613782565b945050602061394087828801613782565b935050604061395187828801613832565b925050606085013567ffffffffffffffff811115613972576139716146f8565b5b61397e878288016137d6565b91505092959194509250565b600080604083850312156139a1576139a06146fd565b5b60006139af85828601613782565b92505060206139c085828601613797565b9150509250929050565b600080604083850312156139e1576139e06146fd565b5b60006139ef85828601613782565b9250506020613a0085828601613832565b9150509250929050565b600060208284031215613a2057613a1f6146fd565b5b6000613a2e84828501613797565b91505092915050565b600060208284031215613a4d57613a4c6146fd565b5b6000613a5b848285016137ac565b91505092915050565b600060208284031215613a7a57613a796146fd565b5b6000613a88848285016137c1565b91505092915050565b600060208284031215613aa757613aa66146fd565b5b600082013567ffffffffffffffff811115613ac557613ac46146f8565b5b613ad184828501613804565b91505092915050565b600060208284031215613af057613aef6146fd565b5b6000613afe84828501613832565b91505092915050565b60008060408385031215613b1e57613b1d6146fd565b5b6000613b2c85828601613832565b9250506020613b3d85828601613832565b9150509250929050565b613b5081614441565b82525050565b613b5f81614453565b82525050565b6000613b7082614343565b613b7a8185614359565b9350613b8a8185602086016144c4565b613b9381614702565b840191505092915050565b6000613ba98261434e565b613bb3818561436a565b9350613bc38185602086016144c4565b613bcc81614702565b840191505092915050565b6000613be28261434e565b613bec818561437b565b9350613bfc8185602086016144c4565b80840191505092915050565b6000613c1560098361436a565b9150613c2082614713565b602082019050919050565b6000613c3860068361436a565b9150613c438261473c565b602082019050919050565b6000613c5b602b8361436a565b9150613c6682614765565b604082019050919050565b6000613c7e60328361436a565b9150613c89826147b4565b604082019050919050565b6000613ca160268361436a565b9150613cac82614803565b604082019050919050565b6000613cc460258361436a565b9150613ccf82614852565b604082019050919050565b6000613ce7601c8361436a565b9150613cf2826148a1565b602082019050919050565b6000613d0a60248361436a565b9150613d15826148ca565b604082019050919050565b6000613d2d60198361436a565b9150613d3882614919565b602082019050919050565b6000613d50602c8361436a565b9150613d5b82614942565b604082019050919050565b6000613d7360388361436a565b9150613d7e82614991565b604082019050919050565b6000613d96602a8361436a565b9150613da1826149e0565b604082019050919050565b6000613db960298361436a565b9150613dc482614a2f565b604082019050919050565b6000613ddc60208361436a565b9150613de782614a7e565b602082019050919050565b6000613dff602c8361436a565b9150613e0a82614aa7565b604082019050919050565b6000613e2260208361436a565b9150613e2d82614af6565b602082019050919050565b6000613e4560108361436a565b9150613e5082614b1f565b602082019050919050565b6000613e68602f8361436a565b9150613e7382614b48565b604082019050919050565b6000613e8b60138361436a565b9150613e9682614b97565b602082019050919050565b6000613eae60218361436a565b9150613eb982614bc0565b604082019050919050565b6000613ed160318361436a565b9150613edc82614c0f565b604082019050919050565b6000613ef4602c8361436a565b9150613eff82614c5e565b604082019050919050565b613f13816144ab565b82525050565b6000613f258285613bd7565b9150613f318284613bd7565b91508190509392505050565b6000602082019050613f526000830184613b47565b92915050565b6000608082019050613f6d6000830187613b47565b613f7a6020830186613b47565b613f876040830185613f0a565b8181036060830152613f998184613b65565b905095945050505050565b6000602082019050613fb96000830184613b56565b92915050565b60006020820190508181036000830152613fd98184613b9e565b905092915050565b60006020820190508181036000830152613ffa81613c08565b9050919050565b6000602082019050818103600083015261401a81613c2b565b9050919050565b6000602082019050818103600083015261403a81613c4e565b9050919050565b6000602082019050818103600083015261405a81613c71565b9050919050565b6000602082019050818103600083015261407a81613c94565b9050919050565b6000602082019050818103600083015261409a81613cb7565b9050919050565b600060208201905081810360008301526140ba81613cda565b9050919050565b600060208201905081810360008301526140da81613cfd565b9050919050565b600060208201905081810360008301526140fa81613d20565b9050919050565b6000602082019050818103600083015261411a81613d43565b9050919050565b6000602082019050818103600083015261413a81613d66565b9050919050565b6000602082019050818103600083015261415a81613d89565b9050919050565b6000602082019050818103600083015261417a81613dac565b9050919050565b6000602082019050818103600083015261419a81613dcf565b9050919050565b600060208201905081810360008301526141ba81613df2565b9050919050565b600060208201905081810360008301526141da81613e15565b9050919050565b600060208201905081810360008301526141fa81613e38565b9050919050565b6000602082019050818103600083015261421a81613e5b565b9050919050565b6000602082019050818103600083015261423a81613e7e565b9050919050565b6000602082019050818103600083015261425a81613ea1565b9050919050565b6000602082019050818103600083015261427a81613ec4565b9050919050565b6000602082019050818103600083015261429a81613ee7565b9050919050565b60006020820190506142b66000830184613f0a565b92915050565b60006142c66142d7565b90506142d28282614529565b919050565b6000604051905090565b600067ffffffffffffffff8211156142fc576142fb6146bf565b5b61430582614702565b9050602081019050919050565b600067ffffffffffffffff82111561432d5761432c6146bf565b5b61433682614702565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614391826144ab565b915061439c836144ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143d1576143d06145d4565b5b828201905092915050565b60006143e7826144ab565b91506143f2836144ab565b92508261440257614401614603565b5b828204905092915050565b6000614418826144ab565b9150614423836144ab565b925082821015614436576144356145d4565b5b828203905092915050565b600061444c8261448b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144e25780820151818401526020810190506144c7565b838111156144f1576000848401525b50505050565b6000600282049050600182168061450f57607f821691505b6020821081141561452357614522614632565b5b50919050565b61453282614702565b810181811067ffffffffffffffff82111715614551576145506146bf565b5b80604052505050565b6000614565826144ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614598576145976145d4565b5b600182019050919050565b60006145ae826144ab565b91506145b9836144ab565b9250826145c9576145c8614603565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f436f6d706c657465640000000000000000000000000000000000000000000000600082015250565b7f436c6f7365640000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f696e73756666696369656e742045544800000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f205061696420546f6b656e73204c65667400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614cb681614441565b8114614cc157600080fd5b50565b614ccd81614453565b8114614cd857600080fd5b50565b614ce48161445f565b8114614cef57600080fd5b50565b614cfb816144ab565b8114614d0657600080fd5b5056fea264697066735822122058dd2895f24b76be875dccded84c50eff4604b2a990a15a613dd8724b32380eb64736f6c6343000807003368747470733a2f2f6172747374616d70732e696f2f636c69656e742f4b50442f4775747465724d61646e6573732f636f6e747261637468747470733a2f2f6172747374616d70732e696f2f636c69656e742f4b50442f4775747465724d61646e6573732f

Deployed Bytecode

0x6080604052600436106102935760003560e01c80637d3c40c81161015a578063bd85b039116100c1578063d663d3701161007a578063d663d370146109d5578063df991e3414610a00578063e1572fa414610a29578063e985e9c514610a40578063f2fde38b14610a7d578063fa70b76114610aa657610293565b8063bd85b039146108b1578063c0e72740146108ee578063c7682e8514610919578063c87b56dd14610944578063cf6b673614610981578063cfc86f7b146109aa57610293565b806399106e1e1161011357806399106e1e146107d6578063a22cb46514610801578063ae9b051c1461082a578063b403e7c114610853578063b43ca3931461085d578063b88d4fde1461088857610293565b80637d3c40c8146106d657806380cb410d146107135780638da5cb5b1461072a57806395d89b4114610755578063974d4ae314610780578063990b043b146107ab57610293565b80633ccfd60b116101fe5780636817c76c116101b75780636817c76c146105c65780636c8b703f146105f15780636d92da2a1461062e5780636dc8a05f1461065757806370a0823114610682578063715018a6146106bf57610293565b80633ccfd60b146104cc57806342842e0e146104e35780634336725b1461050c5780634f6ccce71461052357806355f804b3146105605780636352211e1461058957610293565b80631cb7dc30116102505780631cb7dc30146103bc57806323b872dd146103e55780632ec93a101461040e5780632f745c59146104395780633ad10ef6146104765780633ccbae70146104a157610293565b806301ffc9a71461029857806306fdde03146102d5578063081812fc14610300578063095ea7b31461033d5780631620daed1461036657806318160ddd14610391575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba9190613a37565b610abd565b6040516102cc9190613fa4565b60405180910390f35b3480156102e157600080fd5b506102ea610acf565b6040516102f79190613fbf565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190613ada565b610b61565b6040516103349190613f3d565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f91906139ca565b610be6565b005b34801561037257600080fd5b5061037b610cfe565b6040516103889190613fa4565b60405180910390f35b34801561039d57600080fd5b506103a6610d11565b6040516103b391906142a1565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613a0a565b610d1e565b005b3480156103f157600080fd5b5061040c600480360381019061040791906138b4565b610db7565b005b34801561041a57600080fd5b50610423610e17565b6040516104309190613fa4565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b91906139ca565b610e2a565b60405161046d91906142a1565b60405180910390f35b34801561048257600080fd5b5061048b610ecf565b6040516104989190613f3d565b60405180910390f35b3480156104ad57600080fd5b506104b6610ef5565b6040516104c391906142a1565b60405180910390f35b3480156104d857600080fd5b506104e1610efb565b005b3480156104ef57600080fd5b5061050a600480360381019061050591906138b4565b610fc6565b005b34801561051857600080fd5b50610521610fe6565b005b34801561052f57600080fd5b5061054a60048036038101906105459190613ada565b61118c565b60405161055791906142a1565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190613a91565b6111fd565b005b34801561059557600080fd5b506105b060048036038101906105ab9190613ada565b611293565b6040516105bd9190613f3d565b60405180910390f35b3480156105d257600080fd5b506105db611345565b6040516105e891906142a1565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613ada565b61134b565b6040516106259190613fbf565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190613b07565b6113eb565b005b34801561066357600080fd5b5061066c611479565b6040516106799190613fa4565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190613847565b61148c565b6040516106b691906142a1565b60405180910390f35b3480156106cb57600080fd5b506106d4611544565b005b3480156106e257600080fd5b506106fd60048036038101906106f89190613ada565b6115cc565b60405161070a9190613f3d565b60405180910390f35b34801561071f57600080fd5b506107286115ff565b005b34801561073657600080fd5b5061073f6117a5565b60405161074c9190613f3d565b60405180910390f35b34801561076157600080fd5b5061076a6117cf565b6040516107779190613fbf565b60405180910390f35b34801561078c57600080fd5b50610795611861565b6040516107a291906142a1565b60405180910390f35b3480156107b757600080fd5b506107c0611867565b6040516107cd9190613fa4565b60405180910390f35b3480156107e257600080fd5b506107eb61187a565b6040516107f891906142a1565b60405180910390f35b34801561080d57600080fd5b506108286004803603810190610823919061398a565b611880565b005b34801561083657600080fd5b50610851600480360381019061084c9190613ada565b611896565b005b61085b61196d565b005b34801561086957600080fd5b50610872611aa1565b60405161087f91906142a1565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190613907565b611aa7565b005b3480156108bd57600080fd5b506108d860048036038101906108d39190613ada565b611b09565b6040516108e591906142a1565b60405180910390f35b3480156108fa57600080fd5b50610903611b21565b6040516109109190613fbf565b60405180910390f35b34801561092557600080fd5b5061092e611baf565b60405161093b9190613fa4565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190613ada565b611bc2565b6040516109789190613fbf565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613a0a565b611c69565b005b3480156109b657600080fd5b506109bf611d02565b6040516109cc9190613fbf565b60405180910390f35b3480156109e157600080fd5b506109ea611d90565b6040516109f79190613fa4565b60405180910390f35b348015610a0c57600080fd5b50610a276004803603810190610a229190613847565b611da3565b005b348015610a3557600080fd5b50610a3e611e2d565b005b348015610a4c57600080fd5b50610a676004803603810190610a629190613874565b611fcf565b604051610a749190613fa4565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f9190613847565b612063565b005b348015610ab257600080fd5b50610abb61215b565b005b6000610ac882612301565b9050919050565b606060008054610ade906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0a906144f7565b8015610b575780601f10610b2c57610100808354040283529160200191610b57565b820191906000526020600020905b815481529060010190602001808311610b3a57829003601f168201915b5050505050905090565b6000610b6c8261237b565b610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba2906141a1565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bf182611293565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990614241565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c816123e7565b73ffffffffffffffffffffffffffffffffffffffff161480610cb05750610caf81610caa6123e7565b611fcf565b5b610cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce690614121565b60405180910390fd5b610cf983836123ef565b505050565b600a60159054906101000a900460ff1681565b6000600880549050905090565b610d266123e7565b73ffffffffffffffffffffffffffffffffffffffff16610d446117a5565b73ffffffffffffffffffffffffffffffffffffffff1614610d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d91906141c1565b60405180910390fd5b80600a60156101000a81548160ff02191690831515021790555050565b610dc8610dc26123e7565b826124a8565b610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90614261565b60405180910390fd5b610e12838383612586565b505050565b600a60199054906101000a900460ff1681565b6000610e358361148c565b8210610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90614021565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b610f036123e7565b73ffffffffffffffffffffffffffffffffffffffff16610f216117a5565b73ffffffffffffffffffffffffffffffffffffffff1614610f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6e906141c1565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fc2573d6000803e3d6000fd5b5050565b610fe183838360405180602001604052806000815250611aa7565b505050565b610fee6123e7565b73ffffffffffffffffffffffffffffffffffffffff1661100c6117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906141c1565b60405180910390fd5b600a60159054906101000a900460ff16156110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a990614001565b60405180910390fd5b600a60179054906101000a900460ff1615611102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f990613fe1565b60405180910390fd5b6000601090505b602081101561116e5761115b6015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001836111569190614386565b6127ed565b80806111669061455a565b915050611109565b6001600a60176101000a81548160ff02191690831515021790555050565b6000611196610d11565b82106111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90614281565b60405180910390fd5b600882815481106111eb576111ea614690565b5b90600052602060002001549050919050565b6112056123e7565b73ffffffffffffffffffffffffffffffffffffffff166112236117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611279576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611270906141c1565b60405180910390fd5b806011908051906020019061128f92919061365b565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390614161565b60405180910390fd5b80915050919050565b600d5481565b6014602052806000526040600020600091509050805461136a906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611396906144f7565b80156113e35780601f106113b8576101008083540402835291602001916113e3565b820191906000526020600020905b8154815290600101906020018083116113c657829003601f168201915b505050505081565b6113f36123e7565b73ffffffffffffffffffffffffffffffffffffffff166114116117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145e906141c1565b60405180910390fd5b81600c8190555080600d819055505050565b600a60189054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f490614141565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61154c6123e7565b73ffffffffffffffffffffffffffffffffffffffff1661156a6117a5565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b7906141c1565b60405180910390fd5b6115ca600061280b565b565b60156020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116076123e7565b73ffffffffffffffffffffffffffffffffffffffff166116256117a5565b73ffffffffffffffffffffffffffffffffffffffff161461167b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611672906141c1565b60405180910390fd5b600a60159054906101000a900460ff16156116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290614001565b60405180910390fd5b600a60199054906101000a900460ff161561171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290613fe1565b60405180910390fd5b6000603090505b6040811015611787576117746015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660018361176f9190614386565b6127ed565b808061177f9061455a565b915050611722565b6001600a60196101000a81548160ff02191690831515021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117de906144f7565b80601f016020809104026020016040519081016040528092919081815260200182805461180a906144f7565b80156118575780601f1061182c57610100808354040283529160200191611857565b820191906000526020600020905b81548152906001019060200180831161183a57829003601f168201915b5050505050905090565b600c5481565b600a60169054906101000a900460ff1681565b600f5481565b61189261188b6123e7565b83836128d1565b5050565b61189e6123e7565b73ffffffffffffffffffffffffffffffffffffffff166118bc6117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611909906141c1565b60405180910390fd5b60008147611920919061440d565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611968573d6000803e3d6000fd5b505050565b600a60149054906101000a900460ff16156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490614001565b60405180910390fd5b34600d5414611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f8906141e1565b60405180910390fd5b600c5460105410611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90614221565b60405180910390fd5b6001601054611a569190614386565b601081905550611a87600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612a3e565b611a9f336040601054611a9a9190614386565b6127ed565b565b600e5481565b611ab8611ab26123e7565b836124a8565b611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee90614261565b60405180910390fd5b611b0384848484612a9d565b50505050565b60136020528060005260406000206000915090505481565b60128054611b2e906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5a906144f7565b8015611ba75780601f10611b7c57610100808354040283529160200191611ba7565b820191906000526020600020905b815481529060010190602001808311611b8a57829003601f168201915b505050505081565b600a60179054906101000a900460ff1681565b6060611bcd8261237b565b611c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0390614201565b60405180910390fd5b6000611c16612af9565b90506000815111611c365760405180602001604052806000815250611c61565b80611c4084612b8b565b604051602001611c51929190613f19565b6040516020818303038152906040525b915050919050565b611c716123e7565b73ffffffffffffffffffffffffffffffffffffffff16611c8f6117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc906141c1565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b60118054611d0f906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3b906144f7565b8015611d885780601f10611d5d57610100808354040283529160200191611d88565b820191906000526020600020905b815481529060010190602001808311611d6b57829003601f168201915b505050505081565b600a60149054906101000a900460ff1681565b611dab6123e7565b73ffffffffffffffffffffffffffffffffffffffff16611dc96117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e16906141c1565b60405180910390fd5b611e2a8160006127ed565b50565b611e356123e7565b73ffffffffffffffffffffffffffffffffffffffff16611e536117a5565b73ffffffffffffffffffffffffffffffffffffffff1614611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906141c1565b60405180910390fd5b600a60159054906101000a900460ff1615611ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef090614001565b60405180910390fd5b600a60169054906101000a900460ff1615611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613fe1565b60405180910390fd5b60005b6010811015611fb157611f9e6015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600183611f999190614386565b6127ed565b8080611fa99061455a565b915050611f4c565b6001600a60166101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61206b6123e7565b73ffffffffffffffffffffffffffffffffffffffff166120896117a5565b73ffffffffffffffffffffffffffffffffffffffff16146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d6906141c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690614061565b60405180910390fd5b6121588161280b565b50565b6121636123e7565b73ffffffffffffffffffffffffffffffffffffffff166121816117a5565b73ffffffffffffffffffffffffffffffffffffffff16146121d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ce906141c1565b60405180910390fd5b600a60159054906101000a900460ff1615612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e90614001565b60405180910390fd5b600a60189054906101000a900460ff1615612277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226e90613fe1565b60405180910390fd5b6000602090505b60308110156122e3576122d06015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001836122cb9190614386565b6127ed565b80806122db9061455a565b91505061227e565b6001600a60186101000a81548160ff02191690831515021790555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612374575061237382612cec565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661246283611293565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124b38261237b565b6124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990614101565b60405180910390fd5b60006124fd83611293565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061256c57508373ffffffffffffffffffffffffffffffffffffffff1661255484610b61565b73ffffffffffffffffffffffffffffffffffffffff16145b8061257d575061257c8185611fcf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125a682611293565b73ffffffffffffffffffffffffffffffffffffffff16146125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f390614081565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561266c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612663906140c1565b60405180910390fd5b612677838383612dce565b6126826000826123ef565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126d2919061440d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127299190614386565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127e8838383612dde565b505050565b612807828260405180602001604052806000815250612de3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612937906140e1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a319190613fa4565b60405180910390a3505050565b6000600e54600d54612a5091906143dc565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a98573d6000803e3d6000fd5b505050565b612aa8848484612586565b612ab484848484612e3e565b612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea90614041565b60405180910390fd5b50505050565b606060118054612b08906144f7565b80601f0160208091040260200160405190810160405280929190818152602001828054612b34906144f7565b8015612b815780601f10612b5657610100808354040283529160200191612b81565b820191906000526020600020905b815481529060010190602001808311612b6457829003601f168201915b5050505050905090565b60606000821415612bd3576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ce7565b600082905060005b60008214612c05578080612bee9061455a565b915050600a82612bfe91906143dc565b9150612bdb565b60008167ffffffffffffffff811115612c2157612c206146bf565b5b6040519080825280601f01601f191660200182016040528015612c535781602001600182028036833780820191505090505b5090505b60008514612ce057600182612c6c919061440d565b9150600a85612c7b91906145a3565b6030612c879190614386565b60f81b818381518110612c9d57612c9c614690565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cd991906143dc565b9450612c57565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612db757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612dc75750612dc682612fd5565b5b9050919050565b612dd983838361303f565b505050565b505050565b612ded8383613153565b612dfa6000848484612e3e565b612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614041565b60405180910390fd5b505050565b6000612e5f8473ffffffffffffffffffffffffffffffffffffffff1661332d565b15612fc8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e886123e7565b8786866040518563ffffffff1660e01b8152600401612eaa9493929190613f58565b602060405180830381600087803b158015612ec457600080fd5b505af1925050508015612ef557506040513d601f19601f82011682018060405250810190612ef29190613a64565b60015b612f78573d8060008114612f25576040519150601f19603f3d011682016040523d82523d6000602084013e612f2a565b606091505b50600081511415612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6790614041565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612fcd565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61304a838383613350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561308d5761308881613355565b6130cc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130cb576130ca838261339e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561310f5761310a8161350b565b61314e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461314d5761314c82826135dc565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90614181565b60405180910390fd5b6131cc8161237b565b1561320c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613203906140a1565b60405180910390fd5b61321860008383612dce565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132689190614386565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461332960008383612dde565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016133ab8461148c565b6133b5919061440d565b905060006007600084815260200190815260200160002054905081811461349a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061351f919061440d565b905060006009600084815260200190815260200160002054905060006008838154811061354f5761354e614690565b5b90600052602060002001549050806008838154811061357157613570614690565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806135c0576135bf614661565b5b6001900381819060005260206000200160009055905550505050565b60006135e78361148c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613667906144f7565b90600052602060002090601f01602090048101928261368957600085556136d0565b82601f106136a257805160ff19168380011785556136d0565b828001600101855582156136d0579182015b828111156136cf5782518255916020019190600101906136b4565b5b5090506136dd91906136e1565b5090565b5b808211156136fa5760008160009055506001016136e2565b5090565b600061371161370c846142e1565b6142bc565b90508281526020810184848401111561372d5761372c6146f3565b5b6137388482856144b5565b509392505050565b600061375361374e84614312565b6142bc565b90508281526020810184848401111561376f5761376e6146f3565b5b61377a8482856144b5565b509392505050565b60008135905061379181614cad565b92915050565b6000813590506137a681614cc4565b92915050565b6000813590506137bb81614cdb565b92915050565b6000815190506137d081614cdb565b92915050565b600082601f8301126137eb576137ea6146ee565b5b81356137fb8482602086016136fe565b91505092915050565b600082601f830112613819576138186146ee565b5b8135613829848260208601613740565b91505092915050565b60008135905061384181614cf2565b92915050565b60006020828403121561385d5761385c6146fd565b5b600061386b84828501613782565b91505092915050565b6000806040838503121561388b5761388a6146fd565b5b600061389985828601613782565b92505060206138aa85828601613782565b9150509250929050565b6000806000606084860312156138cd576138cc6146fd565b5b60006138db86828701613782565b93505060206138ec86828701613782565b92505060406138fd86828701613832565b9150509250925092565b60008060008060808587031215613921576139206146fd565b5b600061392f87828801613782565b945050602061394087828801613782565b935050604061395187828801613832565b925050606085013567ffffffffffffffff811115613972576139716146f8565b5b61397e878288016137d6565b91505092959194509250565b600080604083850312156139a1576139a06146fd565b5b60006139af85828601613782565b92505060206139c085828601613797565b9150509250929050565b600080604083850312156139e1576139e06146fd565b5b60006139ef85828601613782565b9250506020613a0085828601613832565b9150509250929050565b600060208284031215613a2057613a1f6146fd565b5b6000613a2e84828501613797565b91505092915050565b600060208284031215613a4d57613a4c6146fd565b5b6000613a5b848285016137ac565b91505092915050565b600060208284031215613a7a57613a796146fd565b5b6000613a88848285016137c1565b91505092915050565b600060208284031215613aa757613aa66146fd565b5b600082013567ffffffffffffffff811115613ac557613ac46146f8565b5b613ad184828501613804565b91505092915050565b600060208284031215613af057613aef6146fd565b5b6000613afe84828501613832565b91505092915050565b60008060408385031215613b1e57613b1d6146fd565b5b6000613b2c85828601613832565b9250506020613b3d85828601613832565b9150509250929050565b613b5081614441565b82525050565b613b5f81614453565b82525050565b6000613b7082614343565b613b7a8185614359565b9350613b8a8185602086016144c4565b613b9381614702565b840191505092915050565b6000613ba98261434e565b613bb3818561436a565b9350613bc38185602086016144c4565b613bcc81614702565b840191505092915050565b6000613be28261434e565b613bec818561437b565b9350613bfc8185602086016144c4565b80840191505092915050565b6000613c1560098361436a565b9150613c2082614713565b602082019050919050565b6000613c3860068361436a565b9150613c438261473c565b602082019050919050565b6000613c5b602b8361436a565b9150613c6682614765565b604082019050919050565b6000613c7e60328361436a565b9150613c89826147b4565b604082019050919050565b6000613ca160268361436a565b9150613cac82614803565b604082019050919050565b6000613cc460258361436a565b9150613ccf82614852565b604082019050919050565b6000613ce7601c8361436a565b9150613cf2826148a1565b602082019050919050565b6000613d0a60248361436a565b9150613d15826148ca565b604082019050919050565b6000613d2d60198361436a565b9150613d3882614919565b602082019050919050565b6000613d50602c8361436a565b9150613d5b82614942565b604082019050919050565b6000613d7360388361436a565b9150613d7e82614991565b604082019050919050565b6000613d96602a8361436a565b9150613da1826149e0565b604082019050919050565b6000613db960298361436a565b9150613dc482614a2f565b604082019050919050565b6000613ddc60208361436a565b9150613de782614a7e565b602082019050919050565b6000613dff602c8361436a565b9150613e0a82614aa7565b604082019050919050565b6000613e2260208361436a565b9150613e2d82614af6565b602082019050919050565b6000613e4560108361436a565b9150613e5082614b1f565b602082019050919050565b6000613e68602f8361436a565b9150613e7382614b48565b604082019050919050565b6000613e8b60138361436a565b9150613e9682614b97565b602082019050919050565b6000613eae60218361436a565b9150613eb982614bc0565b604082019050919050565b6000613ed160318361436a565b9150613edc82614c0f565b604082019050919050565b6000613ef4602c8361436a565b9150613eff82614c5e565b604082019050919050565b613f13816144ab565b82525050565b6000613f258285613bd7565b9150613f318284613bd7565b91508190509392505050565b6000602082019050613f526000830184613b47565b92915050565b6000608082019050613f6d6000830187613b47565b613f7a6020830186613b47565b613f876040830185613f0a565b8181036060830152613f998184613b65565b905095945050505050565b6000602082019050613fb96000830184613b56565b92915050565b60006020820190508181036000830152613fd98184613b9e565b905092915050565b60006020820190508181036000830152613ffa81613c08565b9050919050565b6000602082019050818103600083015261401a81613c2b565b9050919050565b6000602082019050818103600083015261403a81613c4e565b9050919050565b6000602082019050818103600083015261405a81613c71565b9050919050565b6000602082019050818103600083015261407a81613c94565b9050919050565b6000602082019050818103600083015261409a81613cb7565b9050919050565b600060208201905081810360008301526140ba81613cda565b9050919050565b600060208201905081810360008301526140da81613cfd565b9050919050565b600060208201905081810360008301526140fa81613d20565b9050919050565b6000602082019050818103600083015261411a81613d43565b9050919050565b6000602082019050818103600083015261413a81613d66565b9050919050565b6000602082019050818103600083015261415a81613d89565b9050919050565b6000602082019050818103600083015261417a81613dac565b9050919050565b6000602082019050818103600083015261419a81613dcf565b9050919050565b600060208201905081810360008301526141ba81613df2565b9050919050565b600060208201905081810360008301526141da81613e15565b9050919050565b600060208201905081810360008301526141fa81613e38565b9050919050565b6000602082019050818103600083015261421a81613e5b565b9050919050565b6000602082019050818103600083015261423a81613e7e565b9050919050565b6000602082019050818103600083015261425a81613ea1565b9050919050565b6000602082019050818103600083015261427a81613ec4565b9050919050565b6000602082019050818103600083015261429a81613ee7565b9050919050565b60006020820190506142b66000830184613f0a565b92915050565b60006142c66142d7565b90506142d28282614529565b919050565b6000604051905090565b600067ffffffffffffffff8211156142fc576142fb6146bf565b5b61430582614702565b9050602081019050919050565b600067ffffffffffffffff82111561432d5761432c6146bf565b5b61433682614702565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614391826144ab565b915061439c836144ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143d1576143d06145d4565b5b828201905092915050565b60006143e7826144ab565b91506143f2836144ab565b92508261440257614401614603565b5b828204905092915050565b6000614418826144ab565b9150614423836144ab565b925082821015614436576144356145d4565b5b828203905092915050565b600061444c8261448b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144e25780820151818401526020810190506144c7565b838111156144f1576000848401525b50505050565b6000600282049050600182168061450f57607f821691505b6020821081141561452357614522614632565b5b50919050565b61453282614702565b810181811067ffffffffffffffff82111715614551576145506146bf565b5b80604052505050565b6000614565826144ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614598576145976145d4565b5b600182019050919050565b60006145ae826144ab565b91506145b9836144ab565b9250826145c9576145c8614603565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f436f6d706c657465640000000000000000000000000000000000000000000000600082015250565b7f436c6f7365640000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f696e73756666696369656e742045544800000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f205061696420546f6b656e73204c65667400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614cb681614441565b8114614cc157600080fd5b50565b614ccd81614453565b8114614cd857600080fd5b50565b614ce48161445f565b8114614cef57600080fd5b50565b614cfb816144ab565b8114614d0657600080fd5b5056fea264697066735822122058dd2895f24b76be875dccded84c50eff4604b2a990a15a613dd8724b32380eb64736f6c63430008070033

Deployed Bytecode Sourcemap

45766:7389:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50462:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26134:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27693:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27216:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45886:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39954:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50736:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28443:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46029:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39622:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46064:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46300:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53024:128;;;;;;;;;;;;;:::i;:::-;;28853:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51228:216;;;;;;;;;;;;;:::i;:::-;;40144:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52612:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25828:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46170:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46550:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50825:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45993:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25558:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;46597:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51721:207;;;;;;;;;;;;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26303:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46138:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45920:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46270:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27986:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52815:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52051:273;;;:::i;:::-;;46230:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29109:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46500:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46411:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45955:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26478:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50646:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46329:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45852:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51951:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50986:206;;;;;;;;;;;;;:::i;:::-;;28212:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51478:210;;;;;;;;;;;;;:::i;:::-;;50462:179;50573:4;50597:36;50621:11;50597:23;:36::i;:::-;50590:43;;50462:179;;;:::o;26134:100::-;26188:13;26221:5;26214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26134:100;:::o;27693:221::-;27769:7;27797:16;27805:7;27797;:16::i;:::-;27789:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27882:15;:24;27898:7;27882:24;;;;;;;;;;;;;;;;;;;;;27875:31;;27693:221;;;:::o;27216:411::-;27297:13;27313:23;27328:7;27313:14;:23::i;:::-;27297:39;;27361:5;27355:11;;:2;:11;;;;27347:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27455:5;27439:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27464:37;27481:5;27488:12;:10;:12::i;:::-;27464:16;:37::i;:::-;27439:62;27417:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27598:21;27607:2;27611:7;27598:8;:21::i;:::-;27286:341;27216:411;;:::o;45886:30::-;;;;;;;;;;;;;:::o;39954:113::-;40015:7;40042:10;:17;;;;40035:24;;39954:113;:::o;50736:83::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50807:4:::1;50794:10;;:17;;;;;;;;;;;;;;;;;;50736:83:::0;:::o;28443:339::-;28638:41;28657:12;:10;:12::i;:::-;28671:7;28638:18;:41::i;:::-;28630:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28746:28;28756:4;28762:2;28766:7;28746:9;:28::i;:::-;28443:339;;;:::o;46029:30::-;;;;;;;;;;;;;:::o;39622:256::-;39719:7;39755:23;39772:5;39755:16;:23::i;:::-;39747:5;:31;39739:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39844:12;:19;39857:5;39844:19;;;;;;;;;;;;;;;:26;39864:5;39844:26;;;;;;;;;;;;39837:33;;39622:256;;;;:::o;46064:70::-;;;;;;;;;;;;;:::o;46300:25::-;;;;:::o;53024:128::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53066:15:::1;53084:21;53066:39;;53118:10;53110:28;;:37;53139:7;53110:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53061:91;53024:128::o:0;28853:185::-;28991:39;29008:4;29014:2;29018:7;28991:39;;;;;;;;;;;;:16;:39::i;:::-;28853:185;;;:::o;51228:216::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51282:10:::1;;;;;;;;;;;51281:11;51273:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;51317:13;;;;;;;;;;;51316:14;51308:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;51349:6;51367:2;51365:4;;51360:55;51375:2;51371:1;:6;51360:55;;;51389:20;51399:2;:5;51402:1;51399:5;;;;;;;;;;;;;;;;;;;;;51407:1;51405;:3;;;;:::i;:::-;51389:9;:20::i;:::-;51379:3;;;;;:::i;:::-;;;;51360:55;;;51435:4;51419:13;;:20;;;;;;;;;;;;;;;;;;51268:176;51228:216::o:0;40144:233::-;40219:7;40255:30;:28;:30::i;:::-;40247:5;:38;40239:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40352:10;40363:5;40352:17;;;;;;;;:::i;:::-;;;;;;;;;;40345:24;;40144:233;;;:::o;52612:102::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52699:7:::1;52683:13;:23;;;;;;;;;;;;:::i;:::-;;52612:102:::0;:::o;25828:239::-;25900:7;25920:13;25936:7;:16;25944:7;25936:16;;;;;;;;;;;;;;;;;;;;;25920:32;;25988:1;25971:19;;:5;:19;;;;25963:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26054:5;26047:12;;;25828:239;;;:::o;46170:44::-;;;;:::o;46550:43::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50825:128::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50913:7:::1;50904:6;:16;;;;50937:11;50925:9;:23;;;;50825:128:::0;;:::o;45993:31::-;;;;;;;;;;;;;:::o;25558:208::-;25630:7;25675:1;25658:19;;:5;:19;;;;25650:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25742:9;:16;25752:5;25742:16;;;;;;;;;;;;;;;;25735:23;;25558:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;46597:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;51721:207::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51772:10:::1;;;;;;;;;;;51771:11;51763:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;51807:10;;;;;;;;;;;51806:11;51798:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;51836:6;51854:2;51852:4;;51847:55;51862:2;51858:1;:6;51847:55;;;51876:20;51886:2;:5;51889:1;51886:5;;;;;;;;;;;;;;;;;;;;;51894:1;51892;:3;;;;:::i;:::-;51876:9;:20::i;:::-;51866:3;;;;;:::i;:::-;;;;51847:55;;;51919:4;51906:10;;:17;;;;;;;;;;;;;;;;;;51758:170;51721:207::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;26303:104::-;26359:13;26392:7;26385:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26303:104;:::o;46138:28::-;;;;:::o;45920:30::-;;;;;;;;;;;;;:::o;46270:26::-;;;;:::o;27986:155::-;28081:52;28100:12;:10;:12::i;:::-;28114:8;28124;28081:18;:52::i;:::-;27986:155;;:::o;52815:169::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52877:19:::1;52924:8;52899:21;:34;;;;:::i;:::-;52877:56;;52946:10;52938:28;;:41;52967:11;52938:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52872:112;52815:169:::0;:::o;52051:273::-;52099:10;;;;;;;;;;;52098:11;52090:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;52146:9;52133;;:22;52125:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;52198:6;;52189;;:15;52181:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;52251:1;52242:6;;:10;;;;:::i;:::-;52233:6;:19;;;;52257:25;52270:10;;;;;;;;;;;52257:4;:25::i;:::-;52287:31;52297:10;52315:2;52308:6;;:9;;;;:::i;:::-;52287;:31::i;:::-;52051:273::o;46230:27::-;;;;:::o;29109:328::-;29284:41;29303:12;:10;:12::i;:::-;29317:7;29284:18;:41::i;:::-;29276:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29390:39;29404:4;29410:2;29414:7;29423:5;29390:13;:39::i;:::-;29109:328;;;;:::o;46500:46::-;;;;;;;;;;;;;;;;;:::o;46411:85::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45955:33::-;;;;;;;;;;;;;:::o;26478:334::-;26551:13;26585:16;26593:7;26585;:16::i;:::-;26577:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26666:21;26690:10;:8;:10::i;:::-;26666:34;;26742:1;26724:7;26718:21;:25;:86;;;;;;;;;;;;;;;;;26770:7;26779:18;:7;:16;:18::i;:::-;26753:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26718:86;26711:93;;;26478:334;;;:::o;50646:83::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50717:4:::1;50704:10;;:17;;;;;;;;;;;;;;;;;;50646:83:::0;:::o;46329:78::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45852:29::-;;;;;;;;;;;;;:::o;51951:74::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52004:15:::1;52014:2;52017:1;52004:9;:15::i;:::-;51951:74:::0;:::o;50986:206::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51037:10:::1;;;;;;;;;;;51036:11;51028:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;51072:10;;;;;;;;;;;51071:11;51063:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;51101:6;51112:54;51126:2;51122:1;:6;51112:54;;;51140:20;51150:2;:5;51153:1;51150:5;;;;;;;;;;;;;;;;;;;;;51158:1;51156;:3;;;;:::i;:::-;51140:9;:20::i;:::-;51130:3;;;;;:::i;:::-;;;;51112:54;;;51183:4;51170:10;;:17;;;;;;;;;;;;;;;;;;51023:169;50986:206::o:0;28212:164::-;28309:4;28333:18;:25;28352:5;28333:25;;;;;;;;;;;;;;;:35;28359:8;28333:35;;;;;;;;;;;;;;;;;;;;;;;;;28326:42;;28212:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;51478:210::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51530:10:::1;;;;;;;;;;;51529:11;51521:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;51565:11;;;;;;;;;;;51564:12;51556:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;51595:6;51613:2;51611:4;;51606:55;51621:2;51617:1;:6;51606:55;;;51635:20;51645:2;:5;51648:1;51645:5;;;;;;;;;;;;;;;;;;;;;51653:1;51651;:3;;;;:::i;:::-;51635:9;:20::i;:::-;51625:3;;;;;:::i;:::-;;;;51606:55;;;51679:4;51665:11;;:18;;;;;;;;;;;;;;;;;;51516:172;51478:210::o:0;39314:224::-;39416:4;39455:35;39440:50;;;:11;:50;;;;:90;;;;39494:36;39518:11;39494:23;:36::i;:::-;39440:90;39433:97;;39314:224;;;:::o;30947:127::-;31012:4;31064:1;31036:30;;:7;:16;31044:7;31036:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31029:37;;30947:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;35093:174::-;35195:2;35168:15;:24;35184:7;35168:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35251:7;35247:2;35213:46;;35222:23;35237:7;35222:14;:23::i;:::-;35213:46;;;;;;;;;;;;35093:174;;:::o;31241:348::-;31334:4;31359:16;31367:7;31359;:16::i;:::-;31351:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31435:13;31451:23;31466:7;31451:14;:23::i;:::-;31435:39;;31504:5;31493:16;;:7;:16;;;:51;;;;31537:7;31513:31;;:20;31525:7;31513:11;:20::i;:::-;:31;;;31493:51;:87;;;;31548:32;31565:5;31572:7;31548:16;:32::i;:::-;31493:87;31485:96;;;31241:348;;;;:::o;34350:625::-;34509:4;34482:31;;:23;34497:7;34482:14;:23::i;:::-;:31;;;34474:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34588:1;34574:16;;:2;:16;;;;34566:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34644:39;34665:4;34671:2;34675:7;34644:20;:39::i;:::-;34748:29;34765:1;34769:7;34748:8;:29::i;:::-;34809:1;34790:9;:15;34800:4;34790:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34838:1;34821:9;:13;34831:2;34821:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34869:2;34850:7;:16;34858:7;34850:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34908:7;34904:2;34889:27;;34898:4;34889:27;;;;;;;;;;;;34929:38;34949:4;34955:2;34959:7;34929:19;:38::i;:::-;34350:625;;;:::o;31931:110::-;32007:26;32017:2;32021:7;32007:26;;;;;;;;;;;;:9;:26::i;:::-;31931:110;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;35409:315::-;35564:8;35555:17;;:5;:17;;;;35547:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35651:8;35613:18;:25;35632:5;35613:25;;;;;;;;;;;;;;;:35;35639:8;35613:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35697:8;35675:41;;35690:5;35675:41;;;35707:8;35675:41;;;;;;:::i;:::-;;;;;;;;35409:315;;;:::o;52334:146::-;52398:18;52429:7;;52419:9;;:17;;;;:::i;:::-;52398:38;;52447:4;:13;;:25;52461:10;52447:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52387:93;52334:146;:::o;30319:315::-;30476:28;30486:4;30492:2;30496:7;30476:9;:28::i;:::-;30523:48;30546:4;30552:2;30556:7;30565:5;30523:22;:48::i;:::-;30515:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30319:315;;;;:::o;52486:114::-;52546:13;52579;52572:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52486:114;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;25189:305::-;25291:4;25343:25;25328:40;;;:11;:40;;;;:105;;;;25400:33;25385:48;;;:11;:48;;;;25328:105;:158;;;;25450:36;25474:11;25450:23;:36::i;:::-;25328:158;25308:178;;25189:305;;;:::o;50273:181::-;50401:45;50428:4;50434:2;50438:7;50401:26;:45::i;:::-;50273:181;;;:::o;38171:125::-;;;;:::o;32268:321::-;32398:18;32404:2;32408:7;32398:5;:18::i;:::-;32449:54;32480:1;32484:2;32488:7;32497:5;32449:22;:54::i;:::-;32427:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32268:321;;;:::o;36289:799::-;36444:4;36465:15;:2;:13;;;:15::i;:::-;36461:620;;;36517:2;36501:36;;;36538:12;:10;:12::i;:::-;36552:4;36558:7;36567:5;36501:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36497:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36760:1;36743:6;:13;:18;36739:272;;;36786:60;;;;;;;;;;:::i;:::-;;;;;;;;36739:272;36961:6;36955:13;36946:6;36942:2;36938:15;36931:38;36497:529;36634:41;;;36624:51;;;:6;:51;;;;36617:58;;;;;36461:620;37065:4;37058:11;;36289:799;;;;;;;:::o;16863:157::-;16948:4;16987:25;16972:40;;;:11;:40;;;;16965:47;;16863:157;;;:::o;40990:589::-;41134:45;41161:4;41167:2;41171:7;41134:26;:45::i;:::-;41212:1;41196:18;;:4;:18;;;41192:187;;;41231:40;41263:7;41231:31;:40::i;:::-;41192:187;;;41301:2;41293:10;;:4;:10;;;41289:90;;41320:47;41353:4;41359:7;41320:32;:47::i;:::-;41289:90;41192:187;41407:1;41393:16;;:2;:16;;;41389:183;;;41426:45;41463:7;41426:36;:45::i;:::-;41389:183;;;41499:4;41493:10;;:2;:10;;;41489:83;;41520:40;41548:2;41552:7;41520:27;:40::i;:::-;41489:83;41389:183;40990:589;;;:::o;32925:439::-;33019:1;33005:16;;:2;:16;;;;32997:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33078:16;33086:7;33078;:16::i;:::-;33077:17;33069:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33140:45;33169:1;33173:2;33177:7;33140:20;:45::i;:::-;33215:1;33198:9;:13;33208:2;33198:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33246:2;33227:7;:16;33235:7;33227:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33291:7;33287:2;33266:33;;33283:1;33266:33;;;;;;;;;;;;33312:44;33340:1;33344:2;33348:7;33312:19;:44::i;:::-;32925:439;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;37660:126::-;;;;:::o;42302:164::-;42406:10;:17;;;;42379:15;:24;42395:7;42379:24;;;;;;;;;;;:44;;;;42434:10;42450:7;42434:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42302:164;:::o;43093:988::-;43359:22;43409:1;43384:22;43401:4;43384:16;:22::i;:::-;:26;;;;:::i;:::-;43359:51;;43421:18;43442:17;:26;43460:7;43442:26;;;;;;;;;;;;43421:47;;43589:14;43575:10;:28;43571:328;;43620:19;43642:12;:18;43655:4;43642:18;;;;;;;;;;;;;;;:34;43661:14;43642:34;;;;;;;;;;;;43620:56;;43726:11;43693:12;:18;43706:4;43693:18;;;;;;;;;;;;;;;:30;43712:10;43693:30;;;;;;;;;;;:44;;;;43843:10;43810:17;:30;43828:11;43810:30;;;;;;;;;;;:43;;;;43605:294;43571:328;43995:17;:26;44013:7;43995:26;;;;;;;;;;;43988:33;;;44039:12;:18;44052:4;44039:18;;;;;;;;;;;;;;;:34;44058:14;44039:34;;;;;;;;;;;44032:41;;;43174:907;;43093:988;;:::o;44376:1079::-;44629:22;44674:1;44654:10;:17;;;;:21;;;;:::i;:::-;44629:46;;44686:18;44707:15;:24;44723:7;44707:24;;;;;;;;;;;;44686:45;;45058:19;45080:10;45091:14;45080:26;;;;;;;;:::i;:::-;;;;;;;;;;45058:48;;45144:11;45119:10;45130;45119:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45255:10;45224:15;:28;45240:11;45224:28;;;;;;;;;;;:41;;;;45396:15;:24;45412:7;45396:24;;;;;;;;;;;45389:31;;;45431:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44447:1008;;;44376:1079;:::o;41880:221::-;41965:14;41982:20;41999:2;41982:16;:20::i;:::-;41965:37;;42040:7;42013:12;:16;42026:2;42013:16;;;;;;;;;;;;;;;:24;42030:6;42013:24;;;;;;;;;;;:34;;;;42087:6;42058:17;:26;42076:7;42058:26;;;;;;;;;;;:35;;;;41954:147;41880:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:118::-;8054:24;8072:5;8054:24;:::i;:::-;8049:3;8042:37;7967:118;;:::o;8091:109::-;8172:21;8187:5;8172:21;:::i;:::-;8167:3;8160:34;8091:109;;:::o;8206:360::-;8292:3;8320:38;8352:5;8320:38;:::i;:::-;8374:70;8437:6;8432:3;8374:70;:::i;:::-;8367:77;;8453:52;8498:6;8493:3;8486:4;8479:5;8475:16;8453:52;:::i;:::-;8530:29;8552:6;8530:29;:::i;:::-;8525:3;8521:39;8514:46;;8296:270;8206:360;;;;:::o;8572:364::-;8660:3;8688:39;8721:5;8688:39;:::i;:::-;8743:71;8807:6;8802:3;8743:71;:::i;:::-;8736:78;;8823:52;8868:6;8863:3;8856:4;8849:5;8845:16;8823:52;:::i;:::-;8900:29;8922:6;8900:29;:::i;:::-;8895:3;8891:39;8884:46;;8664:272;8572:364;;;;:::o;8942:377::-;9048:3;9076:39;9109:5;9076:39;:::i;:::-;9131:89;9213:6;9208:3;9131:89;:::i;:::-;9124:96;;9229:52;9274:6;9269:3;9262:4;9255:5;9251:16;9229:52;:::i;:::-;9306:6;9301:3;9297:16;9290:23;;9052:267;8942:377;;;;:::o;9325:365::-;9467:3;9488:66;9552:1;9547:3;9488:66;:::i;:::-;9481:73;;9563:93;9652:3;9563:93;:::i;:::-;9681:2;9676:3;9672:12;9665:19;;9325:365;;;:::o;9696:::-;9838:3;9859:66;9923:1;9918:3;9859:66;:::i;:::-;9852:73;;9934:93;10023:3;9934:93;:::i;:::-;10052:2;10047:3;10043:12;10036:19;;9696:365;;;:::o;10067:366::-;10209:3;10230:67;10294:2;10289:3;10230:67;:::i;:::-;10223:74;;10306:93;10395:3;10306:93;:::i;:::-;10424:2;10419:3;10415:12;10408:19;;10067:366;;;:::o;10439:::-;10581:3;10602:67;10666:2;10661:3;10602:67;:::i;:::-;10595:74;;10678:93;10767:3;10678:93;:::i;:::-;10796:2;10791:3;10787:12;10780:19;;10439:366;;;:::o;10811:::-;10953:3;10974:67;11038:2;11033:3;10974:67;:::i;:::-;10967:74;;11050:93;11139:3;11050:93;:::i;:::-;11168:2;11163:3;11159:12;11152:19;;10811:366;;;:::o;11183:::-;11325:3;11346:67;11410:2;11405:3;11346:67;:::i;:::-;11339:74;;11422:93;11511:3;11422:93;:::i;:::-;11540:2;11535:3;11531:12;11524:19;;11183:366;;;:::o;11555:::-;11697:3;11718:67;11782:2;11777:3;11718:67;:::i;:::-;11711:74;;11794:93;11883:3;11794:93;:::i;:::-;11912:2;11907:3;11903:12;11896:19;;11555:366;;;:::o;11927:::-;12069:3;12090:67;12154:2;12149:3;12090:67;:::i;:::-;12083:74;;12166:93;12255:3;12166:93;:::i;:::-;12284:2;12279:3;12275:12;12268:19;;11927:366;;;:::o;12299:::-;12441:3;12462:67;12526:2;12521:3;12462:67;:::i;:::-;12455:74;;12538:93;12627:3;12538:93;:::i;:::-;12656:2;12651:3;12647:12;12640:19;;12299:366;;;:::o;12671:::-;12813:3;12834:67;12898:2;12893:3;12834:67;:::i;:::-;12827:74;;12910:93;12999:3;12910:93;:::i;:::-;13028:2;13023:3;13019:12;13012:19;;12671:366;;;:::o;13043:::-;13185:3;13206:67;13270:2;13265:3;13206:67;:::i;:::-;13199:74;;13282:93;13371:3;13282:93;:::i;:::-;13400:2;13395:3;13391:12;13384:19;;13043:366;;;:::o;13415:::-;13557:3;13578:67;13642:2;13637:3;13578:67;:::i;:::-;13571:74;;13654:93;13743:3;13654:93;:::i;:::-;13772:2;13767:3;13763:12;13756:19;;13415:366;;;:::o;13787:::-;13929:3;13950:67;14014:2;14009:3;13950:67;:::i;:::-;13943:74;;14026:93;14115:3;14026:93;:::i;:::-;14144:2;14139:3;14135:12;14128:19;;13787:366;;;:::o;14159:::-;14301:3;14322:67;14386:2;14381:3;14322:67;:::i;:::-;14315:74;;14398:93;14487:3;14398:93;:::i;:::-;14516:2;14511:3;14507:12;14500:19;;14159:366;;;:::o;14531:::-;14673:3;14694:67;14758:2;14753:3;14694:67;:::i;:::-;14687:74;;14770:93;14859:3;14770:93;:::i;:::-;14888:2;14883:3;14879:12;14872:19;;14531:366;;;:::o;14903:::-;15045:3;15066:67;15130:2;15125:3;15066:67;:::i;:::-;15059:74;;15142:93;15231:3;15142:93;:::i;:::-;15260:2;15255:3;15251:12;15244:19;;14903:366;;;:::o;15275:::-;15417:3;15438:67;15502:2;15497:3;15438:67;:::i;:::-;15431:74;;15514:93;15603:3;15514:93;:::i;:::-;15632:2;15627:3;15623:12;15616:19;;15275:366;;;:::o;15647:::-;15789:3;15810:67;15874:2;15869:3;15810:67;:::i;:::-;15803:74;;15886:93;15975:3;15886:93;:::i;:::-;16004:2;15999:3;15995:12;15988:19;;15647:366;;;:::o;16019:::-;16161:3;16182:67;16246:2;16241:3;16182:67;:::i;:::-;16175:74;;16258:93;16347:3;16258:93;:::i;:::-;16376:2;16371:3;16367:12;16360:19;;16019:366;;;:::o;16391:::-;16533:3;16554:67;16618:2;16613:3;16554:67;:::i;:::-;16547:74;;16630:93;16719:3;16630:93;:::i;:::-;16748:2;16743:3;16739:12;16732:19;;16391:366;;;:::o;16763:::-;16905:3;16926:67;16990:2;16985:3;16926:67;:::i;:::-;16919:74;;17002:93;17091:3;17002:93;:::i;:::-;17120:2;17115:3;17111:12;17104:19;;16763:366;;;:::o;17135:::-;17277:3;17298:67;17362:2;17357:3;17298:67;:::i;:::-;17291:74;;17374:93;17463:3;17374:93;:::i;:::-;17492:2;17487:3;17483:12;17476:19;;17135:366;;;:::o;17507:118::-;17594:24;17612:5;17594:24;:::i;:::-;17589:3;17582:37;17507:118;;:::o;17631:435::-;17811:3;17833:95;17924:3;17915:6;17833:95;:::i;:::-;17826:102;;17945:95;18036:3;18027:6;17945:95;:::i;:::-;17938:102;;18057:3;18050:10;;17631:435;;;;;:::o;18072:222::-;18165:4;18203:2;18192:9;18188:18;18180:26;;18216:71;18284:1;18273:9;18269:17;18260:6;18216:71;:::i;:::-;18072:222;;;;:::o;18300:640::-;18495:4;18533:3;18522:9;18518:19;18510:27;;18547:71;18615:1;18604:9;18600:17;18591:6;18547:71;:::i;:::-;18628:72;18696:2;18685:9;18681:18;18672:6;18628:72;:::i;:::-;18710;18778:2;18767:9;18763:18;18754:6;18710:72;:::i;:::-;18829:9;18823:4;18819:20;18814:2;18803:9;18799:18;18792:48;18857:76;18928:4;18919:6;18857:76;:::i;:::-;18849:84;;18300:640;;;;;;;:::o;18946:210::-;19033:4;19071:2;19060:9;19056:18;19048:26;;19084:65;19146:1;19135:9;19131:17;19122:6;19084:65;:::i;:::-;18946:210;;;;:::o;19162:313::-;19275:4;19313:2;19302:9;19298:18;19290:26;;19362:9;19356:4;19352:20;19348:1;19337:9;19333:17;19326:47;19390:78;19463:4;19454:6;19390:78;:::i;:::-;19382:86;;19162:313;;;;:::o;19481:419::-;19647:4;19685:2;19674:9;19670:18;19662:26;;19734:9;19728:4;19724:20;19720:1;19709:9;19705:17;19698:47;19762:131;19888:4;19762:131;:::i;:::-;19754:139;;19481:419;;;:::o;19906:::-;20072:4;20110:2;20099:9;20095:18;20087:26;;20159:9;20153:4;20149:20;20145:1;20134:9;20130:17;20123:47;20187:131;20313:4;20187:131;:::i;:::-;20179:139;;19906:419;;;:::o;20331:::-;20497:4;20535:2;20524:9;20520:18;20512:26;;20584:9;20578:4;20574:20;20570:1;20559:9;20555:17;20548:47;20612:131;20738:4;20612:131;:::i;:::-;20604:139;;20331:419;;;:::o;20756:::-;20922:4;20960:2;20949:9;20945:18;20937:26;;21009:9;21003:4;20999:20;20995:1;20984:9;20980:17;20973:47;21037:131;21163:4;21037:131;:::i;:::-;21029:139;;20756:419;;;:::o;21181:::-;21347:4;21385:2;21374:9;21370:18;21362:26;;21434:9;21428:4;21424:20;21420:1;21409:9;21405:17;21398:47;21462:131;21588:4;21462:131;:::i;:::-;21454:139;;21181:419;;;:::o;21606:::-;21772:4;21810:2;21799:9;21795:18;21787:26;;21859:9;21853:4;21849:20;21845:1;21834:9;21830:17;21823:47;21887:131;22013:4;21887:131;:::i;:::-;21879:139;;21606:419;;;:::o;22031:::-;22197:4;22235:2;22224:9;22220:18;22212:26;;22284:9;22278:4;22274:20;22270:1;22259:9;22255:17;22248:47;22312:131;22438:4;22312:131;:::i;:::-;22304:139;;22031:419;;;:::o;22456:::-;22622:4;22660:2;22649:9;22645:18;22637:26;;22709:9;22703:4;22699:20;22695:1;22684:9;22680:17;22673:47;22737:131;22863:4;22737:131;:::i;:::-;22729:139;;22456:419;;;:::o;22881:::-;23047:4;23085:2;23074:9;23070:18;23062:26;;23134:9;23128:4;23124:20;23120:1;23109:9;23105:17;23098:47;23162:131;23288:4;23162:131;:::i;:::-;23154:139;;22881:419;;;:::o;23306:::-;23472:4;23510:2;23499:9;23495:18;23487:26;;23559:9;23553:4;23549:20;23545:1;23534:9;23530:17;23523:47;23587:131;23713:4;23587:131;:::i;:::-;23579:139;;23306:419;;;:::o;23731:::-;23897:4;23935:2;23924:9;23920:18;23912:26;;23984:9;23978:4;23974:20;23970:1;23959:9;23955:17;23948:47;24012:131;24138:4;24012:131;:::i;:::-;24004:139;;23731:419;;;:::o;24156:::-;24322:4;24360:2;24349:9;24345:18;24337:26;;24409:9;24403:4;24399:20;24395:1;24384:9;24380:17;24373:47;24437:131;24563:4;24437:131;:::i;:::-;24429:139;;24156:419;;;:::o;24581:::-;24747:4;24785:2;24774:9;24770:18;24762:26;;24834:9;24828:4;24824:20;24820:1;24809:9;24805:17;24798:47;24862:131;24988:4;24862:131;:::i;:::-;24854:139;;24581:419;;;:::o;25006:::-;25172:4;25210:2;25199:9;25195:18;25187:26;;25259:9;25253:4;25249:20;25245:1;25234:9;25230:17;25223:47;25287:131;25413:4;25287:131;:::i;:::-;25279:139;;25006:419;;;:::o;25431:::-;25597:4;25635:2;25624:9;25620:18;25612:26;;25684:9;25678:4;25674:20;25670:1;25659:9;25655:17;25648:47;25712:131;25838:4;25712:131;:::i;:::-;25704:139;;25431:419;;;:::o;25856:::-;26022:4;26060:2;26049:9;26045:18;26037:26;;26109:9;26103:4;26099:20;26095:1;26084:9;26080:17;26073:47;26137:131;26263:4;26137:131;:::i;:::-;26129:139;;25856:419;;;:::o;26281:::-;26447:4;26485:2;26474:9;26470:18;26462:26;;26534:9;26528:4;26524:20;26520:1;26509:9;26505:17;26498:47;26562:131;26688:4;26562:131;:::i;:::-;26554:139;;26281:419;;;:::o;26706:::-;26872:4;26910:2;26899:9;26895:18;26887:26;;26959:9;26953:4;26949:20;26945:1;26934:9;26930:17;26923:47;26987:131;27113:4;26987:131;:::i;:::-;26979:139;;26706:419;;;:::o;27131:::-;27297:4;27335:2;27324:9;27320:18;27312:26;;27384:9;27378:4;27374:20;27370:1;27359:9;27355:17;27348:47;27412:131;27538:4;27412:131;:::i;:::-;27404:139;;27131:419;;;:::o;27556:::-;27722:4;27760:2;27749:9;27745:18;27737:26;;27809:9;27803:4;27799:20;27795:1;27784:9;27780:17;27773:47;27837:131;27963:4;27837:131;:::i;:::-;27829:139;;27556:419;;;:::o;27981:::-;28147:4;28185:2;28174:9;28170:18;28162:26;;28234:9;28228:4;28224:20;28220:1;28209:9;28205:17;28198:47;28262:131;28388:4;28262:131;:::i;:::-;28254:139;;27981:419;;;:::o;28406:::-;28572:4;28610:2;28599:9;28595:18;28587:26;;28659:9;28653:4;28649:20;28645:1;28634:9;28630:17;28623:47;28687:131;28813:4;28687:131;:::i;:::-;28679:139;;28406:419;;;:::o;28831:222::-;28924:4;28962:2;28951:9;28947:18;28939:26;;28975:71;29043:1;29032:9;29028:17;29019:6;28975:71;:::i;:::-;28831:222;;;;:::o;29059:129::-;29093:6;29120:20;;:::i;:::-;29110:30;;29149:33;29177:4;29169:6;29149:33;:::i;:::-;29059:129;;;:::o;29194:75::-;29227:6;29260:2;29254:9;29244:19;;29194:75;:::o;29275:307::-;29336:4;29426:18;29418:6;29415:30;29412:56;;;29448:18;;:::i;:::-;29412:56;29486:29;29508:6;29486:29;:::i;:::-;29478:37;;29570:4;29564;29560:15;29552:23;;29275:307;;;:::o;29588:308::-;29650:4;29740:18;29732:6;29729:30;29726:56;;;29762:18;;:::i;:::-;29726:56;29800:29;29822:6;29800:29;:::i;:::-;29792:37;;29884:4;29878;29874:15;29866:23;;29588:308;;;:::o;29902:98::-;29953:6;29987:5;29981:12;29971:22;;29902:98;;;:::o;30006:99::-;30058:6;30092:5;30086:12;30076:22;;30006:99;;;:::o;30111:168::-;30194:11;30228:6;30223:3;30216:19;30268:4;30263:3;30259:14;30244:29;;30111:168;;;;:::o;30285:169::-;30369:11;30403:6;30398:3;30391:19;30443:4;30438:3;30434:14;30419:29;;30285:169;;;;:::o;30460:148::-;30562:11;30599:3;30584:18;;30460:148;;;;:::o;30614:305::-;30654:3;30673:20;30691:1;30673:20;:::i;:::-;30668:25;;30707:20;30725:1;30707:20;:::i;:::-;30702:25;;30861:1;30793:66;30789:74;30786:1;30783:81;30780:107;;;30867:18;;:::i;:::-;30780:107;30911:1;30908;30904:9;30897:16;;30614:305;;;;:::o;30925:185::-;30965:1;30982:20;31000:1;30982:20;:::i;:::-;30977:25;;31016:20;31034:1;31016:20;:::i;:::-;31011:25;;31055:1;31045:35;;31060:18;;:::i;:::-;31045:35;31102:1;31099;31095:9;31090:14;;30925:185;;;;:::o;31116:191::-;31156:4;31176:20;31194:1;31176:20;:::i;:::-;31171:25;;31210:20;31228:1;31210:20;:::i;:::-;31205:25;;31249:1;31246;31243:8;31240:34;;;31254:18;;:::i;:::-;31240:34;31299:1;31296;31292:9;31284:17;;31116:191;;;;:::o;31313:96::-;31350:7;31379:24;31397:5;31379:24;:::i;:::-;31368:35;;31313:96;;;:::o;31415:90::-;31449:7;31492:5;31485:13;31478:21;31467:32;;31415:90;;;:::o;31511:149::-;31547:7;31587:66;31580:5;31576:78;31565:89;;31511:149;;;:::o;31666:126::-;31703:7;31743:42;31736:5;31732:54;31721:65;;31666:126;;;:::o;31798:77::-;31835:7;31864:5;31853:16;;31798:77;;;:::o;31881:154::-;31965:6;31960:3;31955;31942:30;32027:1;32018:6;32013:3;32009:16;32002:27;31881:154;;;:::o;32041:307::-;32109:1;32119:113;32133:6;32130:1;32127:13;32119:113;;;32218:1;32213:3;32209:11;32203:18;32199:1;32194:3;32190:11;32183:39;32155:2;32152:1;32148:10;32143:15;;32119:113;;;32250:6;32247:1;32244:13;32241:101;;;32330:1;32321:6;32316:3;32312:16;32305:27;32241:101;32090:258;32041:307;;;:::o;32354:320::-;32398:6;32435:1;32429:4;32425:12;32415:22;;32482:1;32476:4;32472:12;32503:18;32493:81;;32559:4;32551:6;32547:17;32537:27;;32493:81;32621:2;32613:6;32610:14;32590:18;32587:38;32584:84;;;32640:18;;:::i;:::-;32584:84;32405:269;32354:320;;;:::o;32680:281::-;32763:27;32785:4;32763:27;:::i;:::-;32755:6;32751:40;32893:6;32881:10;32878:22;32857:18;32845:10;32842:34;32839:62;32836:88;;;32904:18;;:::i;:::-;32836:88;32944:10;32940:2;32933:22;32723:238;32680:281;;:::o;32967:233::-;33006:3;33029:24;33047:5;33029:24;:::i;:::-;33020:33;;33075:66;33068:5;33065:77;33062:103;;;33145:18;;:::i;:::-;33062:103;33192:1;33185:5;33181:13;33174:20;;32967:233;;;:::o;33206:176::-;33238:1;33255:20;33273:1;33255:20;:::i;:::-;33250:25;;33289:20;33307:1;33289:20;:::i;:::-;33284:25;;33328:1;33318:35;;33333:18;;:::i;:::-;33318:35;33374:1;33371;33367:9;33362:14;;33206:176;;;;:::o;33388:180::-;33436:77;33433:1;33426:88;33533:4;33530:1;33523:15;33557:4;33554:1;33547:15;33574:180;33622:77;33619:1;33612:88;33719:4;33716:1;33709:15;33743:4;33740:1;33733:15;33760:180;33808:77;33805:1;33798:88;33905:4;33902:1;33895:15;33929:4;33926:1;33919:15;33946:180;33994:77;33991:1;33984:88;34091:4;34088:1;34081:15;34115:4;34112:1;34105:15;34132:180;34180:77;34177:1;34170:88;34277:4;34274:1;34267:15;34301:4;34298:1;34291:15;34318:180;34366:77;34363:1;34356:88;34463:4;34460:1;34453:15;34487:4;34484:1;34477:15;34504:117;34613:1;34610;34603:12;34627:117;34736:1;34733;34726:12;34750:117;34859:1;34856;34849:12;34873:117;34982:1;34979;34972:12;34996:102;35037:6;35088:2;35084:7;35079:2;35072:5;35068:14;35064:28;35054:38;;34996:102;;;:::o;35104:159::-;35244:11;35240:1;35232:6;35228:14;35221:35;35104:159;:::o;35269:156::-;35409:8;35405:1;35397:6;35393:14;35386:32;35269:156;:::o;35431:230::-;35571:34;35567:1;35559:6;35555:14;35548:58;35640:13;35635:2;35627:6;35623:15;35616:38;35431:230;:::o;35667:237::-;35807:34;35803:1;35795:6;35791:14;35784:58;35876:20;35871:2;35863:6;35859:15;35852:45;35667:237;:::o;35910:225::-;36050:34;36046:1;36038:6;36034:14;36027:58;36119:8;36114:2;36106:6;36102:15;36095:33;35910:225;:::o;36141:224::-;36281:34;36277:1;36269:6;36265:14;36258:58;36350:7;36345:2;36337:6;36333:15;36326:32;36141:224;:::o;36371:178::-;36511:30;36507:1;36499:6;36495:14;36488:54;36371:178;:::o;36555:223::-;36695:34;36691:1;36683:6;36679:14;36672:58;36764:6;36759:2;36751:6;36747:15;36740:31;36555:223;:::o;36784:175::-;36924:27;36920:1;36912:6;36908:14;36901:51;36784:175;:::o;36965:231::-;37105:34;37101:1;37093:6;37089:14;37082:58;37174:14;37169:2;37161:6;37157:15;37150:39;36965:231;:::o;37202:243::-;37342:34;37338:1;37330:6;37326:14;37319:58;37411:26;37406:2;37398:6;37394:15;37387:51;37202:243;:::o;37451:229::-;37591:34;37587:1;37579:6;37575:14;37568:58;37660:12;37655:2;37647:6;37643:15;37636:37;37451:229;:::o;37686:228::-;37826:34;37822:1;37814:6;37810:14;37803:58;37895:11;37890:2;37882:6;37878:15;37871:36;37686:228;:::o;37920:182::-;38060:34;38056:1;38048:6;38044:14;38037:58;37920:182;:::o;38108:231::-;38248:34;38244:1;38236:6;38232:14;38225:58;38317:14;38312:2;38304:6;38300:15;38293:39;38108:231;:::o;38345:182::-;38485:34;38481:1;38473:6;38469:14;38462:58;38345:182;:::o;38533:166::-;38673:18;38669:1;38661:6;38657:14;38650:42;38533:166;:::o;38705:234::-;38845:34;38841:1;38833:6;38829:14;38822:58;38914:17;38909:2;38901:6;38897:15;38890:42;38705:234;:::o;38945:169::-;39085:21;39081:1;39073:6;39069:14;39062:45;38945:169;:::o;39120:220::-;39260:34;39256:1;39248:6;39244:14;39237:58;39329:3;39324:2;39316:6;39312:15;39305:28;39120:220;:::o;39346:236::-;39486:34;39482:1;39474:6;39470:14;39463:58;39555:19;39550:2;39542:6;39538:15;39531:44;39346:236;:::o;39588:231::-;39728:34;39724:1;39716:6;39712:14;39705:58;39797:14;39792:2;39784:6;39780:15;39773:39;39588:231;:::o;39825:122::-;39898:24;39916:5;39898:24;:::i;:::-;39891:5;39888:35;39878:63;;39937:1;39934;39927:12;39878:63;39825:122;:::o;39953:116::-;40023:21;40038:5;40023:21;:::i;:::-;40016:5;40013:32;40003:60;;40059:1;40056;40049:12;40003:60;39953:116;:::o;40075:120::-;40147:23;40164:5;40147:23;:::i;:::-;40140:5;40137:34;40127:62;;40185:1;40182;40175:12;40127:62;40075:120;:::o;40201:122::-;40274:24;40292:5;40274:24;:::i;:::-;40267:5;40264:35;40254:63;;40313:1;40310;40303:12;40254:63;40201:122;:::o

Swarm Source

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