ETH Price: $3,139.24 (+3.36%)
Gas: 3 Gwei

Token

BALC (BALC)
 

Overview

Max Total Supply

3,111 BALC

Holders

788

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
jlieberman.eth
Balance
6 BALC
0xe757970b801e5b99ab24c5cd9b5152234cff3001
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:
BALC

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 2021-09-05
*/

// SPDX-License-Identifier: MIT

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

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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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



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 tokenId);

    /**
     * @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/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/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/Address.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/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/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/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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: Animathereum.sol


pragma solidity ^0.8.0;

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

contract BALC is ERC721Enumerable, Ownable {
  uint public constant MAX_TOKENS = 10000;
  string _baseTokenURI = "https://onh7qcne00.execute-api.us-east-2.amazonaws.com";
  bool public paused = true;

  constructor(address _to, uint _count) ERC721("BALC", "BALC")  {
    for(uint i = 0; i < _count; i++){
      _safeMint(_to, totalSupply());
    }
  }

  function mint(address _to, uint _count) public payable {
    require(!paused, "Pause");
    require(_count <= 20, "Exceeds 20");
    require(totalSupply() < MAX_TOKENS, "Sale end");
    require(totalSupply() + _count <= MAX_TOKENS, "Max limit");
    require(msg.value >= price(_count), "Value below price");

    for(uint i = 0; i < _count; i++){
      _safeMint(_to, totalSupply());
    }
  }

  function price(uint _count) public pure returns (uint256) {
    return _count * 20000000000000000;
  }

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

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

  function walletOfOwner(address _owner) external view returns(uint256[] memory) {
    uint tokenCount = balanceOf(_owner);
    uint256[] memory tokensIds = new uint256[](tokenCount);
    for(uint i = 0; i < tokenCount; i++){
      tokensIds[i] = tokenOfOwnerByIndex(_owner, i);
    }
    return tokensIds;
  }

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

  function withdrawAll() public payable onlyOwner {
    require(payable(msg.sender).send(address(this).balance));
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"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":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052604051806060016040528060368152602001620052e460369139600b90805190602001906200003592919062000c53565b506001600c60006101000a81548160ff0219169083151502179055503480156200005e57600080fd5b506040516200531a3803806200531a833981810160405281019062000084919062000d48565b6040518060400160405280600481526020017f42414c43000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42414c430000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010892919062000c53565b5080600190805190602001906200012192919062000c53565b50505062000144620001386200019060201b60201c565b6200019860201b60201c565b60005b8181101562000187576200017183620001656200025e60201b60201c565b6200026b60201b60201c565b80806200017e9062001137565b91505062000147565b50505062001395565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600880549050905090565b6200028d8282604051806020016040528060008152506200029160201b60201c565b5050565b620002a38383620002ff60201b60201c565b620002b86000848484620004e560201b60201c565b620002fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002f19062000f14565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003699062000f7a565b60405180910390fd5b62000383816200069f60201b60201c565b15620003c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003bd9062000f36565b60405180910390fd5b620003da600083836200070b60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200042c919062000fc9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005138473ffffffffffffffffffffffffffffffffffffffff166200085260201b6200161d1760201c565b1562000692578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005456200019060201b60201c565b8786866040518563ffffffff1660e01b815260040162000569949392919062000ec0565b602060405180830381600087803b1580156200058457600080fd5b505af1925050508015620005b857506040513d601f19601f82011682018060405250810190620005b5919062000d8f565b60015b62000641573d8060008114620005eb576040519150601f19603f3d011682016040523d82523d6000602084013e620005f0565b606091505b5060008151141562000639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006309062000f14565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000697565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620007238383836200086560201b620016301760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000770576200076a816200086a60201b60201c565b620007b8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620007b757620007b68382620008b360201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200080557620007ff8162000a3060201b60201c565b6200084d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200084c576200084b828262000b0c60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620008cd8462000b9860201b62000f491760201c565b620008d9919062001026565b9050600060076000848152602001908152602001600020549050818114620009bf576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000a46919062001026565b905060006009600084815260200190815260200160002054905060006008838154811062000a795762000a7862001212565b5b90600052602060002001549050806008838154811062000a9e5762000a9d62001212565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000af05762000aef620011e3565b5b6001900381819060005260206000200160009055905550505050565b600062000b248362000b9860201b62000f491760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c039062000f58565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000c619062001101565b90600052602060002090601f01602090048101928262000c85576000855562000cd1565b82601f1062000ca057805160ff191683800117855562000cd1565b8280016001018555821562000cd1579182015b8281111562000cd057825182559160200191906001019062000cb3565b5b50905062000ce0919062000ce4565b5090565b5b8082111562000cff57600081600090555060010162000ce5565b5090565b60008151905062000d148162001347565b92915050565b60008151905062000d2b8162001361565b92915050565b60008151905062000d42816200137b565b92915050565b6000806040838503121562000d625762000d6162001241565b5b600062000d728582860162000d03565b925050602062000d858582860162000d31565b9150509250929050565b60006020828403121562000da85762000da762001241565b5b600062000db88482850162000d1a565b91505092915050565b62000dcc8162001061565b82525050565b600062000ddf8262000f9c565b62000deb818562000fa7565b935062000dfd818560208601620010cb565b62000e088162001246565b840191505092915050565b600062000e2260328362000fb8565b915062000e2f8262001257565b604082019050919050565b600062000e49601c8362000fb8565b915062000e5682620012a6565b602082019050919050565b600062000e70602a8362000fb8565b915062000e7d82620012cf565b604082019050919050565b600062000e9760208362000fb8565b915062000ea4826200131e565b602082019050919050565b62000eba81620010c1565b82525050565b600060808201905062000ed7600083018762000dc1565b62000ee6602083018662000dc1565b62000ef5604083018562000eaf565b818103606083015262000f09818462000dd2565b905095945050505050565b6000602082019050818103600083015262000f2f8162000e13565b9050919050565b6000602082019050818103600083015262000f518162000e3a565b9050919050565b6000602082019050818103600083015262000f738162000e61565b9050919050565b6000602082019050818103600083015262000f958162000e88565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000fd682620010c1565b915062000fe383620010c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200101b576200101a62001185565b5b828201905092915050565b60006200103382620010c1565b91506200104083620010c1565b92508282101562001056576200105562001185565b5b828203905092915050565b60006200106e82620010a1565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620010eb578082015181840152602081019050620010ce565b83811115620010fb576000848401525b50505050565b600060028204905060018216806200111a57607f821691505b60208210811415620011315762001130620011b4565b5b50919050565b60006200114482620010c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200117a576200117962001185565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b620013528162001061565b81146200135e57600080fd5b50565b6200136c8162001075565b81146200137857600080fd5b50565b6200138681620010c1565b81146200139257600080fd5b50565b613f3f80620013a56000396000f3fe60806040526004361061019c5760003560e01c806355f804b3116100ec57806395d89b411161008a578063c87b56dd11610064578063c87b56dd146105bc578063e985e9c5146105f9578063f2fde38b14610636578063f47c84c51461065f5761019c565b806395d89b411461053f578063a22cb4651461056a578063b88d4fde146105935761019c565b806370a08231116100c657806370a08231146104b6578063715018a6146104f3578063853828b61461050a5780638da5cb5b146105145761019c565b806355f804b3146104255780635c975abb1461044e5780636352211e146104795761019c565b806323b872dd1161015957806340c10f191161013357806340c10f191461036657806342842e0e14610382578063438b6300146103ab5780634f6ccce7146103e85761019c565b806323b872dd146102c357806326a49e37146102ec5780632f745c59146103295761019c565b806301ffc9a7146101a157806302329a29146101de57806306fdde0314610207578063081812fc14610232578063095ea7b31461026f57806318160ddd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612ad1565b61068a565b6040516101d591906130c8565b60405180910390f35b3480156101ea57600080fd5b5061020560048036038101906102009190612aa4565b610704565b005b34801561021357600080fd5b5061021c61079d565b60405161022991906130e3565b60405180910390f35b34801561023e57600080fd5b5061025960048036038101906102549190612b74565b61082f565b604051610266919061303f565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612a64565b6108b4565b005b3480156102a457600080fd5b506102ad6109cc565b6040516102ba91906133e5565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061294e565b6109d9565b005b3480156102f857600080fd5b50610313600480360381019061030e9190612b74565b610a39565b60405161032091906133e5565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190612a64565b610a55565b60405161035d91906133e5565b60405180910390f35b610380600480360381019061037b9190612a64565b610afa565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061294e565b610caf565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906128e1565b610ccf565b6040516103df91906130a6565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612b74565b610d7d565b60405161041c91906133e5565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190612b2b565b610dee565b005b34801561045a57600080fd5b50610463610e84565b60405161047091906130c8565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b9190612b74565b610e97565b6040516104ad919061303f565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906128e1565b610f49565b6040516104ea91906133e5565b60405180910390f35b3480156104ff57600080fd5b50610508611001565b005b610512611089565b005b34801561052057600080fd5b50610529611145565b604051610536919061303f565b60405180910390f35b34801561054b57600080fd5b5061055461116f565b60405161056191906130e3565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190612a24565b611201565b005b34801561059f57600080fd5b506105ba60048036038101906105b591906129a1565b611382565b005b3480156105c857600080fd5b506105e360048036038101906105de9190612b74565b6113e4565b6040516105f091906130e3565b60405180910390f35b34801561060557600080fd5b50610620600480360381019061061b919061290e565b61148b565b60405161062d91906130c8565b60405180910390f35b34801561064257600080fd5b5061065d600480360381019061065891906128e1565b61151f565b005b34801561066b57600080fd5b50610674611617565b60405161068191906133e5565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fd57506106fc82611635565b5b9050919050565b61070c611717565b73ffffffffffffffffffffffffffffffffffffffff1661072a611145565b73ffffffffffffffffffffffffffffffffffffffff1614610780576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610777906132e5565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6060600080546107ac906136ce565b80601f01602080910402602001604051908101604052809291908181526020018280546107d8906136ce565b80156108255780601f106107fa57610100808354040283529160200191610825565b820191906000526020600020905b81548152906001019060200180831161080857829003601f168201915b5050505050905090565b600061083a8261171f565b610879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610870906132c5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108bf82610e97565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092790613365565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094f611717565b73ffffffffffffffffffffffffffffffffffffffff16148061097e575061097d81610978611717565b61148b565b5b6109bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b490613225565b60405180910390fd5b6109c7838361178b565b505050565b6000600880549050905090565b6109ea6109e4611717565b82611844565b610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a20906133a5565b60405180910390fd5b610a34838383611922565b505050565b600066470de4df82000082610a4e919061358a565b9050919050565b6000610a6083610f49565b8210610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890613105565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c60009054906101000a900460ff1615610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b41906131c5565b60405180910390fd5b6014811115610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590613385565b60405180910390fd5b612710610b996109cc565b10610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd0906132a5565b60405180910390fd5b61271081610be56109cc565b610bef9190613503565b1115610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c27906131e5565b60405180910390fd5b610c3981610a39565b341015610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290613345565b60405180910390fd5b60005b81811015610caa57610c9783610c926109cc565b611b7e565b8080610ca290613731565b915050610c7e565b505050565b610cca83838360405180602001604052806000815250611382565b505050565b60606000610cdc83610f49565b905060008167ffffffffffffffff811115610cfa57610cf9613896565b5b604051908082528060200260200182016040528015610d285781602001602082028036833780820191505090505b50905060005b82811015610d7257610d408582610a55565b828281518110610d5357610d52613867565b5b6020026020010181815250508080610d6a90613731565b915050610d2e565b508092505050919050565b6000610d876109cc565b8210610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf906133c5565b60405180910390fd5b60088281548110610ddc57610ddb613867565b5b90600052602060002001549050919050565b610df6611717565b73ffffffffffffffffffffffffffffffffffffffff16610e14611145565b73ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e61906132e5565b60405180910390fd5b80600b9080519060200190610e809291906126f5565b5050565b600c60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790613265565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190613245565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611009611717565b73ffffffffffffffffffffffffffffffffffffffff16611027611145565b73ffffffffffffffffffffffffffffffffffffffff161461107d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611074906132e5565b60405180910390fd5b6110876000611b9c565b565b611091611717565b73ffffffffffffffffffffffffffffffffffffffff166110af611145565b73ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc906132e5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061114357600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461117e906136ce565b80601f01602080910402602001604051908101604052809291908181526020018280546111aa906136ce565b80156111f75780601f106111cc576101008083540402835291602001916111f7565b820191906000526020600020905b8154815290600101906020018083116111da57829003601f168201915b5050505050905090565b611209611717565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e906131a5565b60405180910390fd5b8060056000611284611717565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611331611717565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161137691906130c8565b60405180910390a35050565b61139361138d611717565b83611844565b6113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906133a5565b60405180910390fd5b6113de84848484611c62565b50505050565b60606113ef8261171f565b61142e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142590613325565b60405180910390fd5b6000611438611cbe565b905060008151116114585760405180602001604052806000815250611483565b8061146284611d50565b60405160200161147392919061301b565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611527611717565b73ffffffffffffffffffffffffffffffffffffffff16611545611145565b73ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906132e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613145565b60405180910390fd5b61161481611b9c565b50565b61271081565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061170057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611710575061170f82611eb1565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117fe83610e97565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061184f8261171f565b61188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613205565b60405180910390fd5b600061189983610e97565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061190857508373ffffffffffffffffffffffffffffffffffffffff166118f08461082f565b73ffffffffffffffffffffffffffffffffffffffff16145b806119195750611918818561148b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661194282610e97565b73ffffffffffffffffffffffffffffffffffffffff1614611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90613305565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613185565b60405180910390fd5b611a13838383611f1b565b611a1e60008261178b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a6e91906135e4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ac59190613503565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b9882826040518060200160405280600081525061202f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c6d848484611922565b611c798484848461208a565b611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf90613125565b60405180910390fd5b50505050565b6060600b8054611ccd906136ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf9906136ce565b8015611d465780601f10611d1b57610100808354040283529160200191611d46565b820191906000526020600020905b815481529060010190602001808311611d2957829003601f168201915b5050505050905090565b60606000821415611d98576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611eac565b600082905060005b60008214611dca578080611db390613731565b915050600a82611dc39190613559565b9150611da0565b60008167ffffffffffffffff811115611de657611de5613896565b5b6040519080825280601f01601f191660200182016040528015611e185781602001600182028036833780820191505090505b5090505b60008514611ea557600182611e3191906135e4565b9150600a85611e40919061377a565b6030611e4c9190613503565b60f81b818381518110611e6257611e61613867565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e9e9190613559565b9450611e1c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f26838383611630565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f6957611f6481612221565b611fa8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611fa757611fa6838261226a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611feb57611fe6816123d7565b61202a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120295761202882826124a8565b5b5b505050565b6120398383612527565b612046600084848461208a565b612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90613125565b60405180910390fd5b505050565b60006120ab8473ffffffffffffffffffffffffffffffffffffffff1661161d565b15612214578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120d4611717565b8786866040518563ffffffff1660e01b81526004016120f6949392919061305a565b602060405180830381600087803b15801561211057600080fd5b505af192505050801561214157506040513d601f19601f8201168201806040525081019061213e9190612afe565b60015b6121c4573d8060008114612171576040519150601f19603f3d011682016040523d82523d6000602084013e612176565b606091505b506000815114156121bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b390613125565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612219565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161227784610f49565b61228191906135e4565b9050600060076000848152602001908152602001600020549050818114612366576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506123eb91906135e4565b905060006009600084815260200190815260200160002054905060006008838154811061241b5761241a613867565b5b90600052602060002001549050806008838154811061243d5761243c613867565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061248c5761248b613838565b5b6001900381819060005260206000200160009055905550505050565b60006124b383610f49565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90613285565b60405180910390fd5b6125a08161171f565b156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790613165565b60405180910390fd5b6125ec60008383611f1b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461263c9190613503565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612701906136ce565b90600052602060002090601f016020900481019282612723576000855561276a565b82601f1061273c57805160ff191683800117855561276a565b8280016001018555821561276a579182015b8281111561276957825182559160200191906001019061274e565b5b509050612777919061277b565b5090565b5b8082111561279457600081600090555060010161277c565b5090565b60006127ab6127a684613425565b613400565b9050828152602081018484840111156127c7576127c66138ca565b5b6127d284828561368c565b509392505050565b60006127ed6127e884613456565b613400565b905082815260208101848484011115612809576128086138ca565b5b61281484828561368c565b509392505050565b60008135905061282b81613ead565b92915050565b60008135905061284081613ec4565b92915050565b60008135905061285581613edb565b92915050565b60008151905061286a81613edb565b92915050565b600082601f830112612885576128846138c5565b5b8135612895848260208601612798565b91505092915050565b600082601f8301126128b3576128b26138c5565b5b81356128c38482602086016127da565b91505092915050565b6000813590506128db81613ef2565b92915050565b6000602082840312156128f7576128f66138d4565b5b60006129058482850161281c565b91505092915050565b60008060408385031215612925576129246138d4565b5b60006129338582860161281c565b92505060206129448582860161281c565b9150509250929050565b600080600060608486031215612967576129666138d4565b5b60006129758682870161281c565b93505060206129868682870161281c565b9250506040612997868287016128cc565b9150509250925092565b600080600080608085870312156129bb576129ba6138d4565b5b60006129c98782880161281c565b94505060206129da8782880161281c565b93505060406129eb878288016128cc565b925050606085013567ffffffffffffffff811115612a0c57612a0b6138cf565b5b612a1887828801612870565b91505092959194509250565b60008060408385031215612a3b57612a3a6138d4565b5b6000612a498582860161281c565b9250506020612a5a85828601612831565b9150509250929050565b60008060408385031215612a7b57612a7a6138d4565b5b6000612a898582860161281c565b9250506020612a9a858286016128cc565b9150509250929050565b600060208284031215612aba57612ab96138d4565b5b6000612ac884828501612831565b91505092915050565b600060208284031215612ae757612ae66138d4565b5b6000612af584828501612846565b91505092915050565b600060208284031215612b1457612b136138d4565b5b6000612b228482850161285b565b91505092915050565b600060208284031215612b4157612b406138d4565b5b600082013567ffffffffffffffff811115612b5f57612b5e6138cf565b5b612b6b8482850161289e565b91505092915050565b600060208284031215612b8a57612b896138d4565b5b6000612b98848285016128cc565b91505092915050565b6000612bad8383612ffd565b60208301905092915050565b612bc281613618565b82525050565b6000612bd382613497565b612bdd81856134c5565b9350612be883613487565b8060005b83811015612c19578151612c008882612ba1565b9750612c0b836134b8565b925050600181019050612bec565b5085935050505092915050565b612c2f8161362a565b82525050565b6000612c40826134a2565b612c4a81856134d6565b9350612c5a81856020860161369b565b612c63816138d9565b840191505092915050565b6000612c79826134ad565b612c8381856134e7565b9350612c9381856020860161369b565b612c9c816138d9565b840191505092915050565b6000612cb2826134ad565b612cbc81856134f8565b9350612ccc81856020860161369b565b80840191505092915050565b6000612ce5602b836134e7565b9150612cf0826138ea565b604082019050919050565b6000612d086032836134e7565b9150612d1382613939565b604082019050919050565b6000612d2b6026836134e7565b9150612d3682613988565b604082019050919050565b6000612d4e601c836134e7565b9150612d59826139d7565b602082019050919050565b6000612d716024836134e7565b9150612d7c82613a00565b604082019050919050565b6000612d946019836134e7565b9150612d9f82613a4f565b602082019050919050565b6000612db76005836134e7565b9150612dc282613a78565b602082019050919050565b6000612dda6009836134e7565b9150612de582613aa1565b602082019050919050565b6000612dfd602c836134e7565b9150612e0882613aca565b604082019050919050565b6000612e206038836134e7565b9150612e2b82613b19565b604082019050919050565b6000612e43602a836134e7565b9150612e4e82613b68565b604082019050919050565b6000612e666029836134e7565b9150612e7182613bb7565b604082019050919050565b6000612e896020836134e7565b9150612e9482613c06565b602082019050919050565b6000612eac6008836134e7565b9150612eb782613c2f565b602082019050919050565b6000612ecf602c836134e7565b9150612eda82613c58565b604082019050919050565b6000612ef26020836134e7565b9150612efd82613ca7565b602082019050919050565b6000612f156029836134e7565b9150612f2082613cd0565b604082019050919050565b6000612f38602f836134e7565b9150612f4382613d1f565b604082019050919050565b6000612f5b6011836134e7565b9150612f6682613d6e565b602082019050919050565b6000612f7e6021836134e7565b9150612f8982613d97565b604082019050919050565b6000612fa1600a836134e7565b9150612fac82613de6565b602082019050919050565b6000612fc46031836134e7565b9150612fcf82613e0f565b604082019050919050565b6000612fe7602c836134e7565b9150612ff282613e5e565b604082019050919050565b61300681613682565b82525050565b61301581613682565b82525050565b60006130278285612ca7565b91506130338284612ca7565b91508190509392505050565b60006020820190506130546000830184612bb9565b92915050565b600060808201905061306f6000830187612bb9565b61307c6020830186612bb9565b613089604083018561300c565b818103606083015261309b8184612c35565b905095945050505050565b600060208201905081810360008301526130c08184612bc8565b905092915050565b60006020820190506130dd6000830184612c26565b92915050565b600060208201905081810360008301526130fd8184612c6e565b905092915050565b6000602082019050818103600083015261311e81612cd8565b9050919050565b6000602082019050818103600083015261313e81612cfb565b9050919050565b6000602082019050818103600083015261315e81612d1e565b9050919050565b6000602082019050818103600083015261317e81612d41565b9050919050565b6000602082019050818103600083015261319e81612d64565b9050919050565b600060208201905081810360008301526131be81612d87565b9050919050565b600060208201905081810360008301526131de81612daa565b9050919050565b600060208201905081810360008301526131fe81612dcd565b9050919050565b6000602082019050818103600083015261321e81612df0565b9050919050565b6000602082019050818103600083015261323e81612e13565b9050919050565b6000602082019050818103600083015261325e81612e36565b9050919050565b6000602082019050818103600083015261327e81612e59565b9050919050565b6000602082019050818103600083015261329e81612e7c565b9050919050565b600060208201905081810360008301526132be81612e9f565b9050919050565b600060208201905081810360008301526132de81612ec2565b9050919050565b600060208201905081810360008301526132fe81612ee5565b9050919050565b6000602082019050818103600083015261331e81612f08565b9050919050565b6000602082019050818103600083015261333e81612f2b565b9050919050565b6000602082019050818103600083015261335e81612f4e565b9050919050565b6000602082019050818103600083015261337e81612f71565b9050919050565b6000602082019050818103600083015261339e81612f94565b9050919050565b600060208201905081810360008301526133be81612fb7565b9050919050565b600060208201905081810360008301526133de81612fda565b9050919050565b60006020820190506133fa600083018461300c565b92915050565b600061340a61341b565b90506134168282613700565b919050565b6000604051905090565b600067ffffffffffffffff8211156134405761343f613896565b5b613449826138d9565b9050602081019050919050565b600067ffffffffffffffff82111561347157613470613896565b5b61347a826138d9565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061350e82613682565b915061351983613682565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561354e5761354d6137ab565b5b828201905092915050565b600061356482613682565b915061356f83613682565b92508261357f5761357e6137da565b5b828204905092915050565b600061359582613682565b91506135a083613682565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135d9576135d86137ab565b5b828202905092915050565b60006135ef82613682565b91506135fa83613682565b92508282101561360d5761360c6137ab565b5b828203905092915050565b600061362382613662565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156136b957808201518184015260208101905061369e565b838111156136c8576000848401525b50505050565b600060028204905060018216806136e657607f821691505b602082108114156136fa576136f9613809565b5b50919050565b613709826138d9565b810181811067ffffffffffffffff8211171561372857613727613896565b5b80604052505050565b600061373c82613682565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561376f5761376e6137ab565b5b600182019050919050565b600061378582613682565b915061379083613682565b9250826137a05761379f6137da565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757365000000000000000000000000000000000000000000000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613eb681613618565b8114613ec157600080fd5b50565b613ecd8161362a565b8114613ed857600080fd5b50565b613ee481613636565b8114613eef57600080fd5b50565b613efb81613682565b8114613f0657600080fd5b5056fea2646970667358221220c724454668f24ecb288f4b671e3b238517866cdc3195c9216abe02f74156acdb64736f6c6343000807003368747470733a2f2f6f6e683771636e6530302e657865637574652d6170692e75732d656173742d322e616d617a6f6e6177732e636f6d0000000000000000000000007a179ec2ff36af64764ccc0fbcf755b4733ed8ca000000000000000000000000000000000000000000000000000000000000000a

Deployed Bytecode

0x60806040526004361061019c5760003560e01c806355f804b3116100ec57806395d89b411161008a578063c87b56dd11610064578063c87b56dd146105bc578063e985e9c5146105f9578063f2fde38b14610636578063f47c84c51461065f5761019c565b806395d89b411461053f578063a22cb4651461056a578063b88d4fde146105935761019c565b806370a08231116100c657806370a08231146104b6578063715018a6146104f3578063853828b61461050a5780638da5cb5b146105145761019c565b806355f804b3146104255780635c975abb1461044e5780636352211e146104795761019c565b806323b872dd1161015957806340c10f191161013357806340c10f191461036657806342842e0e14610382578063438b6300146103ab5780634f6ccce7146103e85761019c565b806323b872dd146102c357806326a49e37146102ec5780632f745c59146103295761019c565b806301ffc9a7146101a157806302329a29146101de57806306fdde0314610207578063081812fc14610232578063095ea7b31461026f57806318160ddd14610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612ad1565b61068a565b6040516101d591906130c8565b60405180910390f35b3480156101ea57600080fd5b5061020560048036038101906102009190612aa4565b610704565b005b34801561021357600080fd5b5061021c61079d565b60405161022991906130e3565b60405180910390f35b34801561023e57600080fd5b5061025960048036038101906102549190612b74565b61082f565b604051610266919061303f565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612a64565b6108b4565b005b3480156102a457600080fd5b506102ad6109cc565b6040516102ba91906133e5565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061294e565b6109d9565b005b3480156102f857600080fd5b50610313600480360381019061030e9190612b74565b610a39565b60405161032091906133e5565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190612a64565b610a55565b60405161035d91906133e5565b60405180910390f35b610380600480360381019061037b9190612a64565b610afa565b005b34801561038e57600080fd5b506103a960048036038101906103a4919061294e565b610caf565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906128e1565b610ccf565b6040516103df91906130a6565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612b74565b610d7d565b60405161041c91906133e5565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190612b2b565b610dee565b005b34801561045a57600080fd5b50610463610e84565b60405161047091906130c8565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b9190612b74565b610e97565b6040516104ad919061303f565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906128e1565b610f49565b6040516104ea91906133e5565b60405180910390f35b3480156104ff57600080fd5b50610508611001565b005b610512611089565b005b34801561052057600080fd5b50610529611145565b604051610536919061303f565b60405180910390f35b34801561054b57600080fd5b5061055461116f565b60405161056191906130e3565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190612a24565b611201565b005b34801561059f57600080fd5b506105ba60048036038101906105b591906129a1565b611382565b005b3480156105c857600080fd5b506105e360048036038101906105de9190612b74565b6113e4565b6040516105f091906130e3565b60405180910390f35b34801561060557600080fd5b50610620600480360381019061061b919061290e565b61148b565b60405161062d91906130c8565b60405180910390f35b34801561064257600080fd5b5061065d600480360381019061065891906128e1565b61151f565b005b34801561066b57600080fd5b50610674611617565b60405161068191906133e5565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106fd57506106fc82611635565b5b9050919050565b61070c611717565b73ffffffffffffffffffffffffffffffffffffffff1661072a611145565b73ffffffffffffffffffffffffffffffffffffffff1614610780576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610777906132e5565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b6060600080546107ac906136ce565b80601f01602080910402602001604051908101604052809291908181526020018280546107d8906136ce565b80156108255780601f106107fa57610100808354040283529160200191610825565b820191906000526020600020905b81548152906001019060200180831161080857829003601f168201915b5050505050905090565b600061083a8261171f565b610879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610870906132c5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108bf82610e97565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092790613365565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094f611717565b73ffffffffffffffffffffffffffffffffffffffff16148061097e575061097d81610978611717565b61148b565b5b6109bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b490613225565b60405180910390fd5b6109c7838361178b565b505050565b6000600880549050905090565b6109ea6109e4611717565b82611844565b610a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a20906133a5565b60405180910390fd5b610a34838383611922565b505050565b600066470de4df82000082610a4e919061358a565b9050919050565b6000610a6083610f49565b8210610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9890613105565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600c60009054906101000a900460ff1615610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b41906131c5565b60405180910390fd5b6014811115610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590613385565b60405180910390fd5b612710610b996109cc565b10610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd0906132a5565b60405180910390fd5b61271081610be56109cc565b610bef9190613503565b1115610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c27906131e5565b60405180910390fd5b610c3981610a39565b341015610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290613345565b60405180910390fd5b60005b81811015610caa57610c9783610c926109cc565b611b7e565b8080610ca290613731565b915050610c7e565b505050565b610cca83838360405180602001604052806000815250611382565b505050565b60606000610cdc83610f49565b905060008167ffffffffffffffff811115610cfa57610cf9613896565b5b604051908082528060200260200182016040528015610d285781602001602082028036833780820191505090505b50905060005b82811015610d7257610d408582610a55565b828281518110610d5357610d52613867565b5b6020026020010181815250508080610d6a90613731565b915050610d2e565b508092505050919050565b6000610d876109cc565b8210610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf906133c5565b60405180910390fd5b60088281548110610ddc57610ddb613867565b5b90600052602060002001549050919050565b610df6611717565b73ffffffffffffffffffffffffffffffffffffffff16610e14611145565b73ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e61906132e5565b60405180910390fd5b80600b9080519060200190610e809291906126f5565b5050565b600c60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790613265565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb190613245565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611009611717565b73ffffffffffffffffffffffffffffffffffffffff16611027611145565b73ffffffffffffffffffffffffffffffffffffffff161461107d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611074906132e5565b60405180910390fd5b6110876000611b9c565b565b611091611717565b73ffffffffffffffffffffffffffffffffffffffff166110af611145565b73ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc906132e5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061114357600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461117e906136ce565b80601f01602080910402602001604051908101604052809291908181526020018280546111aa906136ce565b80156111f75780601f106111cc576101008083540402835291602001916111f7565b820191906000526020600020905b8154815290600101906020018083116111da57829003601f168201915b5050505050905090565b611209611717565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e906131a5565b60405180910390fd5b8060056000611284611717565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611331611717565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161137691906130c8565b60405180910390a35050565b61139361138d611717565b83611844565b6113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c9906133a5565b60405180910390fd5b6113de84848484611c62565b50505050565b60606113ef8261171f565b61142e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142590613325565b60405180910390fd5b6000611438611cbe565b905060008151116114585760405180602001604052806000815250611483565b8061146284611d50565b60405160200161147392919061301b565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611527611717565b73ffffffffffffffffffffffffffffffffffffffff16611545611145565b73ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906132e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613145565b60405180910390fd5b61161481611b9c565b50565b61271081565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061170057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611710575061170f82611eb1565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117fe83610e97565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061184f8261171f565b61188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590613205565b60405180910390fd5b600061189983610e97565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061190857508373ffffffffffffffffffffffffffffffffffffffff166118f08461082f565b73ffffffffffffffffffffffffffffffffffffffff16145b806119195750611918818561148b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661194282610e97565b73ffffffffffffffffffffffffffffffffffffffff1614611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90613305565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90613185565b60405180910390fd5b611a13838383611f1b565b611a1e60008261178b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a6e91906135e4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ac59190613503565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611b9882826040518060200160405280600081525061202f565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c6d848484611922565b611c798484848461208a565b611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf90613125565b60405180910390fd5b50505050565b6060600b8054611ccd906136ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf9906136ce565b8015611d465780601f10611d1b57610100808354040283529160200191611d46565b820191906000526020600020905b815481529060010190602001808311611d2957829003601f168201915b5050505050905090565b60606000821415611d98576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611eac565b600082905060005b60008214611dca578080611db390613731565b915050600a82611dc39190613559565b9150611da0565b60008167ffffffffffffffff811115611de657611de5613896565b5b6040519080825280601f01601f191660200182016040528015611e185781602001600182028036833780820191505090505b5090505b60008514611ea557600182611e3191906135e4565b9150600a85611e40919061377a565b6030611e4c9190613503565b60f81b818381518110611e6257611e61613867565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e9e9190613559565b9450611e1c565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f26838383611630565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f6957611f6481612221565b611fa8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611fa757611fa6838261226a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611feb57611fe6816123d7565b61202a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146120295761202882826124a8565b5b5b505050565b6120398383612527565b612046600084848461208a565b612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90613125565b60405180910390fd5b505050565b60006120ab8473ffffffffffffffffffffffffffffffffffffffff1661161d565b15612214578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120d4611717565b8786866040518563ffffffff1660e01b81526004016120f6949392919061305a565b602060405180830381600087803b15801561211057600080fd5b505af192505050801561214157506040513d601f19601f8201168201806040525081019061213e9190612afe565b60015b6121c4573d8060008114612171576040519150601f19603f3d011682016040523d82523d6000602084013e612176565b606091505b506000815114156121bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b390613125565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612219565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161227784610f49565b61228191906135e4565b9050600060076000848152602001908152602001600020549050818114612366576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506123eb91906135e4565b905060006009600084815260200190815260200160002054905060006008838154811061241b5761241a613867565b5b90600052602060002001549050806008838154811061243d5761243c613867565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061248c5761248b613838565b5b6001900381819060005260206000200160009055905550505050565b60006124b383610f49565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90613285565b60405180910390fd5b6125a08161171f565b156125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d790613165565b60405180910390fd5b6125ec60008383611f1b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461263c9190613503565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612701906136ce565b90600052602060002090601f016020900481019282612723576000855561276a565b82601f1061273c57805160ff191683800117855561276a565b8280016001018555821561276a579182015b8281111561276957825182559160200191906001019061274e565b5b509050612777919061277b565b5090565b5b8082111561279457600081600090555060010161277c565b5090565b60006127ab6127a684613425565b613400565b9050828152602081018484840111156127c7576127c66138ca565b5b6127d284828561368c565b509392505050565b60006127ed6127e884613456565b613400565b905082815260208101848484011115612809576128086138ca565b5b61281484828561368c565b509392505050565b60008135905061282b81613ead565b92915050565b60008135905061284081613ec4565b92915050565b60008135905061285581613edb565b92915050565b60008151905061286a81613edb565b92915050565b600082601f830112612885576128846138c5565b5b8135612895848260208601612798565b91505092915050565b600082601f8301126128b3576128b26138c5565b5b81356128c38482602086016127da565b91505092915050565b6000813590506128db81613ef2565b92915050565b6000602082840312156128f7576128f66138d4565b5b60006129058482850161281c565b91505092915050565b60008060408385031215612925576129246138d4565b5b60006129338582860161281c565b92505060206129448582860161281c565b9150509250929050565b600080600060608486031215612967576129666138d4565b5b60006129758682870161281c565b93505060206129868682870161281c565b9250506040612997868287016128cc565b9150509250925092565b600080600080608085870312156129bb576129ba6138d4565b5b60006129c98782880161281c565b94505060206129da8782880161281c565b93505060406129eb878288016128cc565b925050606085013567ffffffffffffffff811115612a0c57612a0b6138cf565b5b612a1887828801612870565b91505092959194509250565b60008060408385031215612a3b57612a3a6138d4565b5b6000612a498582860161281c565b9250506020612a5a85828601612831565b9150509250929050565b60008060408385031215612a7b57612a7a6138d4565b5b6000612a898582860161281c565b9250506020612a9a858286016128cc565b9150509250929050565b600060208284031215612aba57612ab96138d4565b5b6000612ac884828501612831565b91505092915050565b600060208284031215612ae757612ae66138d4565b5b6000612af584828501612846565b91505092915050565b600060208284031215612b1457612b136138d4565b5b6000612b228482850161285b565b91505092915050565b600060208284031215612b4157612b406138d4565b5b600082013567ffffffffffffffff811115612b5f57612b5e6138cf565b5b612b6b8482850161289e565b91505092915050565b600060208284031215612b8a57612b896138d4565b5b6000612b98848285016128cc565b91505092915050565b6000612bad8383612ffd565b60208301905092915050565b612bc281613618565b82525050565b6000612bd382613497565b612bdd81856134c5565b9350612be883613487565b8060005b83811015612c19578151612c008882612ba1565b9750612c0b836134b8565b925050600181019050612bec565b5085935050505092915050565b612c2f8161362a565b82525050565b6000612c40826134a2565b612c4a81856134d6565b9350612c5a81856020860161369b565b612c63816138d9565b840191505092915050565b6000612c79826134ad565b612c8381856134e7565b9350612c9381856020860161369b565b612c9c816138d9565b840191505092915050565b6000612cb2826134ad565b612cbc81856134f8565b9350612ccc81856020860161369b565b80840191505092915050565b6000612ce5602b836134e7565b9150612cf0826138ea565b604082019050919050565b6000612d086032836134e7565b9150612d1382613939565b604082019050919050565b6000612d2b6026836134e7565b9150612d3682613988565b604082019050919050565b6000612d4e601c836134e7565b9150612d59826139d7565b602082019050919050565b6000612d716024836134e7565b9150612d7c82613a00565b604082019050919050565b6000612d946019836134e7565b9150612d9f82613a4f565b602082019050919050565b6000612db76005836134e7565b9150612dc282613a78565b602082019050919050565b6000612dda6009836134e7565b9150612de582613aa1565b602082019050919050565b6000612dfd602c836134e7565b9150612e0882613aca565b604082019050919050565b6000612e206038836134e7565b9150612e2b82613b19565b604082019050919050565b6000612e43602a836134e7565b9150612e4e82613b68565b604082019050919050565b6000612e666029836134e7565b9150612e7182613bb7565b604082019050919050565b6000612e896020836134e7565b9150612e9482613c06565b602082019050919050565b6000612eac6008836134e7565b9150612eb782613c2f565b602082019050919050565b6000612ecf602c836134e7565b9150612eda82613c58565b604082019050919050565b6000612ef26020836134e7565b9150612efd82613ca7565b602082019050919050565b6000612f156029836134e7565b9150612f2082613cd0565b604082019050919050565b6000612f38602f836134e7565b9150612f4382613d1f565b604082019050919050565b6000612f5b6011836134e7565b9150612f6682613d6e565b602082019050919050565b6000612f7e6021836134e7565b9150612f8982613d97565b604082019050919050565b6000612fa1600a836134e7565b9150612fac82613de6565b602082019050919050565b6000612fc46031836134e7565b9150612fcf82613e0f565b604082019050919050565b6000612fe7602c836134e7565b9150612ff282613e5e565b604082019050919050565b61300681613682565b82525050565b61301581613682565b82525050565b60006130278285612ca7565b91506130338284612ca7565b91508190509392505050565b60006020820190506130546000830184612bb9565b92915050565b600060808201905061306f6000830187612bb9565b61307c6020830186612bb9565b613089604083018561300c565b818103606083015261309b8184612c35565b905095945050505050565b600060208201905081810360008301526130c08184612bc8565b905092915050565b60006020820190506130dd6000830184612c26565b92915050565b600060208201905081810360008301526130fd8184612c6e565b905092915050565b6000602082019050818103600083015261311e81612cd8565b9050919050565b6000602082019050818103600083015261313e81612cfb565b9050919050565b6000602082019050818103600083015261315e81612d1e565b9050919050565b6000602082019050818103600083015261317e81612d41565b9050919050565b6000602082019050818103600083015261319e81612d64565b9050919050565b600060208201905081810360008301526131be81612d87565b9050919050565b600060208201905081810360008301526131de81612daa565b9050919050565b600060208201905081810360008301526131fe81612dcd565b9050919050565b6000602082019050818103600083015261321e81612df0565b9050919050565b6000602082019050818103600083015261323e81612e13565b9050919050565b6000602082019050818103600083015261325e81612e36565b9050919050565b6000602082019050818103600083015261327e81612e59565b9050919050565b6000602082019050818103600083015261329e81612e7c565b9050919050565b600060208201905081810360008301526132be81612e9f565b9050919050565b600060208201905081810360008301526132de81612ec2565b9050919050565b600060208201905081810360008301526132fe81612ee5565b9050919050565b6000602082019050818103600083015261331e81612f08565b9050919050565b6000602082019050818103600083015261333e81612f2b565b9050919050565b6000602082019050818103600083015261335e81612f4e565b9050919050565b6000602082019050818103600083015261337e81612f71565b9050919050565b6000602082019050818103600083015261339e81612f94565b9050919050565b600060208201905081810360008301526133be81612fb7565b9050919050565b600060208201905081810360008301526133de81612fda565b9050919050565b60006020820190506133fa600083018461300c565b92915050565b600061340a61341b565b90506134168282613700565b919050565b6000604051905090565b600067ffffffffffffffff8211156134405761343f613896565b5b613449826138d9565b9050602081019050919050565b600067ffffffffffffffff82111561347157613470613896565b5b61347a826138d9565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061350e82613682565b915061351983613682565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561354e5761354d6137ab565b5b828201905092915050565b600061356482613682565b915061356f83613682565b92508261357f5761357e6137da565b5b828204905092915050565b600061359582613682565b91506135a083613682565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135d9576135d86137ab565b5b828202905092915050565b60006135ef82613682565b91506135fa83613682565b92508282101561360d5761360c6137ab565b5b828203905092915050565b600061362382613662565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156136b957808201518184015260208101905061369e565b838111156136c8576000848401525b50505050565b600060028204905060018216806136e657607f821691505b602082108114156136fa576136f9613809565b5b50919050565b613709826138d9565b810181811067ffffffffffffffff8211171561372857613727613896565b5b80604052505050565b600061373c82613682565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561376f5761376e6137ab565b5b600182019050919050565b600061378582613682565b915061379083613682565b9250826137a05761379f6137da565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757365000000000000000000000000000000000000000000000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613eb681613618565b8114613ec157600080fd5b50565b613ecd8161362a565b8114613ed857600080fd5b50565b613ee481613636565b8114613eef57600080fd5b50565b613efb81613682565b8114613f0657600080fd5b5056fea2646970667358221220c724454668f24ecb288f4b671e3b238517866cdc3195c9216abe02f74156acdb64736f6c63430008070033

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

0000000000000000000000007a179ec2ff36af64764ccc0fbcf755b4733ed8ca000000000000000000000000000000000000000000000000000000000000000a

-----Decoded View---------------
Arg [0] : _to (address): 0x7A179eC2FF36AF64764CCC0fBCf755b4733Ed8CA
Arg [1] : _count (uint256): 10

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a179ec2ff36af64764ccc0fbcf755b4733ed8ca
Arg [1] : 000000000000000000000000000000000000000000000000000000000000000a


Deployed Bytecode Sourcemap

43218:1619:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37070:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44640:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24904:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26463:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25986:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37710:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27353:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43993:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37378:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43584:403;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27763:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44319:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37900:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44217:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43394:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24598:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24328:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2519:94;;;;;;;;;;;;;:::i;:::-;;44717:117;;;:::i;:::-;;1868:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25073:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26756:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28019:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25248:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27122:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2768:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43266:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37070:224;37172:4;37211:35;37196:50;;;:11;:50;;;;:90;;;;37250:36;37274:11;37250:23;:36::i;:::-;37196:90;37189:97;;37070:224;;;:::o;44640:71::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44702:3:::1;44693:6;;:12;;;;;;;;;;;;;;;;;;44640:71:::0;:::o;24904:100::-;24958:13;24991:5;24984:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24904:100;:::o;26463:221::-;26539:7;26567:16;26575:7;26567;:16::i;:::-;26559:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26652:15;:24;26668:7;26652:24;;;;;;;;;;;;;;;;;;;;;26645:31;;26463:221;;;:::o;25986:411::-;26067:13;26083:23;26098:7;26083:14;:23::i;:::-;26067:39;;26131:5;26125:11;;:2;:11;;;;26117:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26225:5;26209:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26234:37;26251:5;26258:12;:10;:12::i;:::-;26234:16;:37::i;:::-;26209:62;26187:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26368:21;26377:2;26381:7;26368:8;:21::i;:::-;26056:341;25986:411;;:::o;37710:113::-;37771:7;37798:10;:17;;;;37791:24;;37710:113;:::o;27353:339::-;27548:41;27567:12;:10;:12::i;:::-;27581:7;27548:18;:41::i;:::-;27540:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27656:28;27666:4;27672:2;27676:7;27656:9;:28::i;:::-;27353:339;;;:::o;43993:104::-;44042:7;44074:17;44065:6;:26;;;;:::i;:::-;44058:33;;43993:104;;;:::o;37378:256::-;37475:7;37511:23;37528:5;37511:16;:23::i;:::-;37503:5;:31;37495:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37600:12;:19;37613:5;37600:19;;;;;;;;;;;;;;;:26;37620:5;37600:26;;;;;;;;;;;;37593:33;;37378:256;;;;:::o;43584:403::-;43655:6;;;;;;;;;;;43654:7;43646:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;43696:2;43686:6;:12;;43678:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;43300:5;43728:13;:11;:13::i;:::-;:26;43720:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;43300:5;43798:6;43782:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:36;;43774:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43860:13;43866:6;43860:5;:13::i;:::-;43847:9;:26;;43839:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43908:6;43904:78;43924:6;43920:1;:10;43904:78;;;43945:29;43955:3;43960:13;:11;:13::i;:::-;43945:9;:29::i;:::-;43932:3;;;;;:::i;:::-;;;;43904:78;;;;43584:403;;:::o;27763:185::-;27901:39;27918:4;27924:2;27928:7;27901:39;;;;;;;;;;;;:16;:39::i;:::-;27763:185;;;:::o;44319:315::-;44380:16;44405:15;44423:17;44433:6;44423:9;:17::i;:::-;44405:35;;44447:26;44490:10;44476:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44447:54;;44512:6;44508:98;44528:10;44524:1;:14;44508:98;;;44568:30;44588:6;44596:1;44568:19;:30::i;:::-;44553:9;44563:1;44553:12;;;;;;;;:::i;:::-;;;;;;;:45;;;;;44540:3;;;;;:::i;:::-;;;;44508:98;;;;44619:9;44612:16;;;;44319:315;;;:::o;37900:233::-;37975:7;38011:30;:28;:30::i;:::-;38003:5;:38;37995:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38108:10;38119:5;38108:17;;;;;;;;:::i;:::-;;;;;;;;;;38101:24;;37900:233;;;:::o;44217:96::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44300:7:::1;44284:13;:23;;;;;;;;;;;;:::i;:::-;;44217:96:::0;:::o;43394:25::-;;;;;;;;;;;;;:::o;24598:239::-;24670:7;24690:13;24706:7;:16;24714:7;24706:16;;;;;;;;;;;;;;;;;;;;;24690:32;;24758:1;24741:19;;:5;:19;;;;24733:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24824:5;24817:12;;;24598:239;;;:::o;24328:208::-;24400:7;24445:1;24428:19;;:5;:19;;;;24420:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24512:9;:16;24522:5;24512:16;;;;;;;;;;;;;;;;24505:23;;24328:208;;;:::o;2519:94::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2584:21:::1;2602:1;2584:9;:21::i;:::-;2519:94::o:0;44717:117::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44788:10:::1;44780:24;;:47;44805:21;44780:47;;;;;;;;;;;;;;;;;;;;;;;44772:56;;;::::0;::::1;;44717:117::o:0;1868:87::-;1914:7;1941:6;;;;;;;;;;;1934:13;;1868:87;:::o;25073:104::-;25129:13;25162:7;25155:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25073:104;:::o;26756:295::-;26871:12;:10;:12::i;:::-;26859:24;;:8;:24;;;;26851:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:8;26926:18;:32;26945:12;:10;:12::i;:::-;26926:32;;;;;;;;;;;;;;;:42;26959:8;26926:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27024:8;26995:48;;27010:12;:10;:12::i;:::-;26995:48;;;27034:8;26995:48;;;;;;:::i;:::-;;;;;;;;26756:295;;:::o;28019:328::-;28194:41;28213:12;:10;:12::i;:::-;28227:7;28194:18;:41::i;:::-;28186:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28300:39;28314:4;28320:2;28324:7;28333:5;28300:13;:39::i;:::-;28019:328;;;;:::o;25248:334::-;25321:13;25355:16;25363:7;25355;:16::i;:::-;25347:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25436:21;25460:10;:8;:10::i;:::-;25436:34;;25512:1;25494:7;25488:21;:25;:86;;;;;;;;;;;;;;;;;25540:7;25549:18;:7;:16;:18::i;:::-;25523:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25488:86;25481:93;;;25248:334;;;:::o;27122:164::-;27219:4;27243:18;:25;27262:5;27243:25;;;;;;;;;;;;;;;:35;27269:8;27243:35;;;;;;;;;;;;;;;;;;;;;;;;;27236:42;;27122:164;;;;:::o;2768:192::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2877:1:::1;2857:22;;:8;:22;;;;2849:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2933:19;2943:8;2933:9;:19::i;:::-;2768:192:::0;:::o;43266:39::-;43300:5;43266:39;:::o;13597:387::-;13657:4;13865:12;13932:7;13920:20;13912:28;;13975:1;13968:4;:8;13961:15;;;13597:387;;;:::o;35949:126::-;;;;:::o;23959:305::-;24061:4;24113:25;24098:40;;;:11;:40;;;;:105;;;;24170:33;24155:48;;;:11;:48;;;;24098:105;:158;;;;24220:36;24244:11;24220:23;:36::i;:::-;24098:158;24078:178;;23959:305;;;:::o;660:98::-;713:7;740:10;733:17;;660:98;:::o;29857:127::-;29922:4;29974:1;29946:30;;:7;:16;29954:7;29946:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29939:37;;29857:127;;;:::o;33839:174::-;33941:2;33914:15;:24;33930:7;33914:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33997:7;33993:2;33959:46;;33968:23;33983:7;33968:14;:23::i;:::-;33959:46;;;;;;;;;;;;33839:174;;:::o;30151:348::-;30244:4;30269:16;30277:7;30269;:16::i;:::-;30261:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30345:13;30361:23;30376:7;30361:14;:23::i;:::-;30345:39;;30414:5;30403:16;;:7;:16;;;:51;;;;30447:7;30423:31;;:20;30435:7;30423:11;:20::i;:::-;:31;;;30403:51;:87;;;;30458:32;30475:5;30482:7;30458:16;:32::i;:::-;30403:87;30395:96;;;30151:348;;;;:::o;33143:578::-;33302:4;33275:31;;:23;33290:7;33275:14;:23::i;:::-;:31;;;33267:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33385:1;33371:16;;:2;:16;;;;33363:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33441:39;33462:4;33468:2;33472:7;33441:20;:39::i;:::-;33545:29;33562:1;33566:7;33545:8;:29::i;:::-;33606:1;33587:9;:15;33597:4;33587:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33635:1;33618:9;:13;33628:2;33618:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33666:2;33647:7;:16;33655:7;33647:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33705:7;33701:2;33686:27;;33695:4;33686:27;;;;;;;;;;;;33143:578;;;:::o;30841:110::-;30917:26;30927:2;30931:7;30917:26;;;;;;;;;;;;:9;:26::i;:::-;30841:110;;:::o;2968:173::-;3024:16;3043:6;;;;;;;;;;;3024:25;;3069:8;3060:6;;:17;;;;;;;;;;;;;;;;;;3124:8;3093:40;;3114:8;3093:40;;;;;;;;;;;;3013:128;2968:173;:::o;29229:315::-;29386:28;29396:4;29402:2;29406:7;29386:9;:28::i;:::-;29433:48;29456:4;29462:2;29466:7;29475:5;29433:22;:48::i;:::-;29425:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29229:315;;;;:::o;44103:108::-;44163:13;44192;44185:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44103:108;:::o;11068:723::-;11124:13;11354:1;11345:5;:10;11341:53;;;11372:10;;;;;;;;;;;;;;;;;;;;;11341:53;11404:12;11419:5;11404:20;;11435:14;11460:78;11475:1;11467:4;:9;11460:78;;11493:8;;;;;:::i;:::-;;;;11524:2;11516:10;;;;;:::i;:::-;;;11460:78;;;11548:19;11580:6;11570:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11548:39;;11598:154;11614:1;11605:5;:10;11598:154;;11642:1;11632:11;;;;;:::i;:::-;;;11709:2;11701:5;:10;;;;:::i;:::-;11688:2;:24;;;;:::i;:::-;11675:39;;11658:6;11665;11658:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11738:2;11729:11;;;;;:::i;:::-;;;11598:154;;;11776:6;11762:21;;;;;11068:723;;;;:::o;10593:157::-;10678:4;10717:25;10702:40;;;:11;:40;;;;10695:47;;10593:157;;;:::o;38746:589::-;38890:45;38917:4;38923:2;38927:7;38890:26;:45::i;:::-;38968:1;38952:18;;:4;:18;;;38948:187;;;38987:40;39019:7;38987:31;:40::i;:::-;38948:187;;;39057:2;39049:10;;:4;:10;;;39045:90;;39076:47;39109:4;39115:7;39076:32;:47::i;:::-;39045:90;38948:187;39163:1;39149:16;;:2;:16;;;39145:183;;;39182:45;39219:7;39182:36;:45::i;:::-;39145:183;;;39255:4;39249:10;;:2;:10;;;39245:83;;39276:40;39304:2;39308:7;39276:27;:40::i;:::-;39245:83;39145:183;38746:589;;;:::o;31178:321::-;31308:18;31314:2;31318:7;31308:5;:18::i;:::-;31359:54;31390:1;31394:2;31398:7;31407:5;31359:22;:54::i;:::-;31337:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31178:321;;;:::o;34578:799::-;34733:4;34754:15;:2;:13;;;:15::i;:::-;34750:620;;;34806:2;34790:36;;;34827:12;:10;:12::i;:::-;34841:4;34847:7;34856:5;34790:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34786:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35049:1;35032:6;:13;:18;35028:272;;;35075:60;;;;;;;;;;:::i;:::-;;;;;;;;35028:272;35250:6;35244:13;35235:6;35231:2;35227:15;35220:38;34786:529;34923:41;;;34913:51;;;:6;:51;;;;34906:58;;;;;34750:620;35354:4;35347:11;;34578:799;;;;;;;:::o;40058:164::-;40162:10;:17;;;;40135:15;:24;40151:7;40135:24;;;;;;;;;;;:44;;;;40190:10;40206:7;40190:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40058:164;:::o;40849:988::-;41115:22;41165:1;41140:22;41157:4;41140:16;:22::i;:::-;:26;;;;:::i;:::-;41115:51;;41177:18;41198:17;:26;41216:7;41198:26;;;;;;;;;;;;41177:47;;41345:14;41331:10;:28;41327:328;;41376:19;41398:12;:18;41411:4;41398:18;;;;;;;;;;;;;;;:34;41417:14;41398:34;;;;;;;;;;;;41376:56;;41482:11;41449:12;:18;41462:4;41449:18;;;;;;;;;;;;;;;:30;41468:10;41449:30;;;;;;;;;;;:44;;;;41599:10;41566:17;:30;41584:11;41566:30;;;;;;;;;;;:43;;;;41361:294;41327:328;41751:17;:26;41769:7;41751:26;;;;;;;;;;;41744:33;;;41795:12;:18;41808:4;41795:18;;;;;;;;;;;;;;;:34;41814:14;41795:34;;;;;;;;;;;41788:41;;;40930:907;;40849:988;;:::o;42132:1079::-;42385:22;42430:1;42410:10;:17;;;;:21;;;;:::i;:::-;42385:46;;42442:18;42463:15;:24;42479:7;42463:24;;;;;;;;;;;;42442:45;;42814:19;42836:10;42847:14;42836:26;;;;;;;;:::i;:::-;;;;;;;;;;42814:48;;42900:11;42875:10;42886;42875:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;43011:10;42980:15;:28;42996:11;42980:28;;;;;;;;;;;:41;;;;43152:15;:24;43168:7;43152:24;;;;;;;;;;;43145:31;;;43187:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42203:1008;;;42132:1079;:::o;39636:221::-;39721:14;39738:20;39755:2;39738:16;:20::i;:::-;39721:37;;39796:7;39769:12;:16;39782:2;39769:16;;;;;;;;;;;;;;;:24;39786:6;39769:24;;;;;;;;;;;:34;;;;39843:6;39814:17;:26;39832:7;39814:26;;;;;;;;;;;:35;;;;39710:147;39636:221;;:::o;31835:382::-;31929:1;31915:16;;:2;:16;;;;31907:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31988:16;31996:7;31988;:16::i;:::-;31987:17;31979:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32050:45;32079:1;32083:2;32087:7;32050:20;:45::i;:::-;32125:1;32108:9;:13;32118:2;32108:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32156:2;32137:7;:16;32145:7;32137:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32201:7;32197:2;32176:33;;32193:1;32176:33;;;;;;;;;;;;31835:382;;:::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:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7487:179;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7672:118;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;7826:732;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8564:109;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;8679:360;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;9045:364;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;9415:377;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9798:366;;;:::o;10170:::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10170:366;;;:::o;10542:::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10542:366;;;:::o;10914:::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;10914:366;;;:::o;11286:::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11286:366;;;:::o;11658:::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11658:366;;;:::o;12030:365::-;12172:3;12193:66;12257:1;12252:3;12193:66;:::i;:::-;12186:73;;12268:93;12357:3;12268:93;:::i;:::-;12386:2;12381:3;12377:12;12370:19;;12030:365;;;:::o;12401:::-;12543:3;12564:66;12628:1;12623:3;12564:66;:::i;:::-;12557:73;;12639:93;12728:3;12639:93;:::i;:::-;12757:2;12752:3;12748:12;12741:19;;12401:365;;;:::o;12772:366::-;12914:3;12935:67;12999:2;12994:3;12935:67;:::i;:::-;12928:74;;13011:93;13100:3;13011:93;:::i;:::-;13129:2;13124:3;13120:12;13113:19;;12772:366;;;:::o;13144:::-;13286:3;13307:67;13371:2;13366:3;13307:67;:::i;:::-;13300:74;;13383:93;13472:3;13383:93;:::i;:::-;13501:2;13496:3;13492:12;13485:19;;13144:366;;;:::o;13516:::-;13658:3;13679:67;13743:2;13738:3;13679:67;:::i;:::-;13672:74;;13755:93;13844:3;13755:93;:::i;:::-;13873:2;13868:3;13864:12;13857:19;;13516:366;;;:::o;13888:::-;14030:3;14051:67;14115:2;14110:3;14051:67;:::i;:::-;14044:74;;14127:93;14216:3;14127:93;:::i;:::-;14245:2;14240:3;14236:12;14229:19;;13888:366;;;:::o;14260:::-;14402:3;14423:67;14487:2;14482:3;14423:67;:::i;:::-;14416:74;;14499:93;14588:3;14499:93;:::i;:::-;14617:2;14612:3;14608:12;14601:19;;14260:366;;;:::o;14632:365::-;14774:3;14795:66;14859:1;14854:3;14795:66;:::i;:::-;14788:73;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14632:365;;;:::o;15003:366::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:::-;16633:3;16654:67;16718:2;16713:3;16654:67;:::i;:::-;16647:74;;16730:93;16819:3;16730:93;:::i;:::-;16848:2;16843:3;16839:12;16832:19;;16491:366;;;:::o;16863:::-;17005:3;17026:67;17090:2;17085:3;17026:67;:::i;:::-;17019:74;;17102:93;17191:3;17102:93;:::i;:::-;17220:2;17215:3;17211:12;17204:19;;16863:366;;;:::o;17235:::-;17377:3;17398:67;17462:2;17457:3;17398:67;:::i;:::-;17391:74;;17474:93;17563:3;17474:93;:::i;:::-;17592:2;17587:3;17583:12;17576:19;;17235:366;;;:::o;17607:::-;17749:3;17770:67;17834:2;17829:3;17770:67;:::i;:::-;17763:74;;17846:93;17935:3;17846:93;:::i;:::-;17964:2;17959:3;17955:12;17948:19;;17607:366;;;:::o;17979:::-;18121:3;18142:67;18206:2;18201:3;18142:67;:::i;:::-;18135:74;;18218:93;18307:3;18218:93;:::i;:::-;18336:2;18331:3;18327:12;18320:19;;17979:366;;;:::o;18351:108::-;18428:24;18446:5;18428:24;:::i;:::-;18423:3;18416:37;18351:108;;:::o;18465:118::-;18552:24;18570:5;18552:24;:::i;:::-;18547:3;18540:37;18465:118;;:::o;18589:435::-;18769:3;18791:95;18882:3;18873:6;18791:95;:::i;:::-;18784:102;;18903:95;18994:3;18985:6;18903:95;:::i;:::-;18896:102;;19015:3;19008:10;;18589:435;;;;;:::o;19030:222::-;19123:4;19161:2;19150:9;19146:18;19138:26;;19174:71;19242:1;19231:9;19227:17;19218:6;19174:71;:::i;:::-;19030:222;;;;:::o;19258:640::-;19453:4;19491:3;19480:9;19476:19;19468:27;;19505:71;19573:1;19562:9;19558:17;19549:6;19505:71;:::i;:::-;19586:72;19654:2;19643:9;19639:18;19630:6;19586:72;:::i;:::-;19668;19736:2;19725:9;19721:18;19712:6;19668:72;:::i;:::-;19787:9;19781:4;19777:20;19772:2;19761:9;19757:18;19750:48;19815:76;19886:4;19877:6;19815:76;:::i;:::-;19807:84;;19258:640;;;;;;;:::o;19904:373::-;20047:4;20085:2;20074:9;20070:18;20062:26;;20134:9;20128:4;20124:20;20120:1;20109:9;20105:17;20098:47;20162:108;20265:4;20256:6;20162:108;:::i;:::-;20154:116;;19904:373;;;;:::o;20283:210::-;20370:4;20408:2;20397:9;20393:18;20385:26;;20421:65;20483:1;20472:9;20468:17;20459:6;20421:65;:::i;:::-;20283:210;;;;:::o;20499:313::-;20612:4;20650:2;20639:9;20635:18;20627:26;;20699:9;20693:4;20689:20;20685:1;20674:9;20670:17;20663:47;20727:78;20800:4;20791:6;20727:78;:::i;:::-;20719:86;;20499:313;;;;:::o;20818:419::-;20984:4;21022:2;21011:9;21007:18;20999:26;;21071:9;21065:4;21061:20;21057:1;21046:9;21042:17;21035:47;21099:131;21225:4;21099:131;:::i;:::-;21091:139;;20818:419;;;:::o;21243:::-;21409:4;21447:2;21436:9;21432:18;21424:26;;21496:9;21490:4;21486:20;21482:1;21471:9;21467:17;21460:47;21524:131;21650:4;21524:131;:::i;:::-;21516:139;;21243:419;;;:::o;21668:::-;21834:4;21872:2;21861:9;21857:18;21849:26;;21921:9;21915:4;21911:20;21907:1;21896:9;21892:17;21885:47;21949:131;22075:4;21949:131;:::i;:::-;21941:139;;21668:419;;;:::o;22093:::-;22259:4;22297:2;22286:9;22282:18;22274:26;;22346:9;22340:4;22336:20;22332:1;22321:9;22317:17;22310:47;22374:131;22500:4;22374:131;:::i;:::-;22366:139;;22093:419;;;:::o;22518:::-;22684:4;22722:2;22711:9;22707:18;22699:26;;22771:9;22765:4;22761:20;22757:1;22746:9;22742:17;22735:47;22799:131;22925:4;22799:131;:::i;:::-;22791:139;;22518:419;;;:::o;22943:::-;23109:4;23147:2;23136:9;23132:18;23124:26;;23196:9;23190:4;23186:20;23182:1;23171:9;23167:17;23160:47;23224:131;23350:4;23224:131;:::i;:::-;23216:139;;22943:419;;;:::o;23368:::-;23534:4;23572:2;23561:9;23557:18;23549:26;;23621:9;23615:4;23611:20;23607:1;23596:9;23592:17;23585:47;23649:131;23775:4;23649:131;:::i;:::-;23641:139;;23368:419;;;:::o;23793:::-;23959:4;23997:2;23986:9;23982:18;23974:26;;24046:9;24040:4;24036:20;24032:1;24021:9;24017:17;24010:47;24074:131;24200:4;24074:131;:::i;:::-;24066:139;;23793:419;;;:::o;24218:::-;24384:4;24422:2;24411:9;24407:18;24399:26;;24471:9;24465:4;24461:20;24457:1;24446:9;24442:17;24435:47;24499:131;24625:4;24499:131;:::i;:::-;24491:139;;24218:419;;;:::o;24643:::-;24809:4;24847:2;24836:9;24832:18;24824:26;;24896:9;24890:4;24886:20;24882:1;24871:9;24867:17;24860:47;24924:131;25050:4;24924:131;:::i;:::-;24916:139;;24643:419;;;:::o;25068:::-;25234:4;25272:2;25261:9;25257:18;25249:26;;25321:9;25315:4;25311:20;25307:1;25296:9;25292:17;25285:47;25349:131;25475:4;25349:131;:::i;:::-;25341:139;;25068:419;;;:::o;25493:::-;25659:4;25697:2;25686:9;25682:18;25674:26;;25746:9;25740:4;25736:20;25732:1;25721:9;25717:17;25710:47;25774:131;25900:4;25774:131;:::i;:::-;25766:139;;25493:419;;;:::o;25918:::-;26084:4;26122:2;26111:9;26107:18;26099:26;;26171:9;26165:4;26161:20;26157:1;26146:9;26142:17;26135:47;26199:131;26325:4;26199:131;:::i;:::-;26191:139;;25918:419;;;:::o;26343:::-;26509:4;26547:2;26536:9;26532:18;26524:26;;26596:9;26590:4;26586:20;26582:1;26571:9;26567:17;26560:47;26624:131;26750:4;26624:131;:::i;:::-;26616:139;;26343:419;;;:::o;26768:::-;26934:4;26972:2;26961:9;26957:18;26949:26;;27021:9;27015:4;27011:20;27007:1;26996:9;26992:17;26985:47;27049:131;27175:4;27049:131;:::i;:::-;27041:139;;26768:419;;;:::o;27193:::-;27359:4;27397:2;27386:9;27382:18;27374:26;;27446:9;27440:4;27436:20;27432:1;27421:9;27417:17;27410:47;27474:131;27600:4;27474:131;:::i;:::-;27466:139;;27193:419;;;:::o;27618:::-;27784:4;27822:2;27811:9;27807:18;27799:26;;27871:9;27865:4;27861:20;27857:1;27846:9;27842:17;27835:47;27899:131;28025:4;27899:131;:::i;:::-;27891:139;;27618:419;;;:::o;28043:::-;28209:4;28247:2;28236:9;28232:18;28224:26;;28296:9;28290:4;28286:20;28282:1;28271:9;28267:17;28260:47;28324:131;28450:4;28324:131;:::i;:::-;28316:139;;28043:419;;;:::o;28468:::-;28634:4;28672:2;28661:9;28657:18;28649:26;;28721:9;28715:4;28711:20;28707:1;28696:9;28692:17;28685:47;28749:131;28875:4;28749:131;:::i;:::-;28741:139;;28468:419;;;:::o;28893:::-;29059:4;29097:2;29086:9;29082:18;29074:26;;29146:9;29140:4;29136:20;29132:1;29121:9;29117:17;29110:47;29174:131;29300:4;29174:131;:::i;:::-;29166:139;;28893:419;;;:::o;29318:::-;29484:4;29522:2;29511:9;29507:18;29499:26;;29571:9;29565:4;29561:20;29557:1;29546:9;29542:17;29535:47;29599:131;29725:4;29599:131;:::i;:::-;29591:139;;29318:419;;;:::o;29743:::-;29909:4;29947:2;29936:9;29932:18;29924:26;;29996:9;29990:4;29986:20;29982:1;29971:9;29967:17;29960:47;30024:131;30150:4;30024:131;:::i;:::-;30016:139;;29743:419;;;:::o;30168:::-;30334:4;30372:2;30361:9;30357:18;30349:26;;30421:9;30415:4;30411:20;30407:1;30396:9;30392:17;30385:47;30449:131;30575:4;30449:131;:::i;:::-;30441:139;;30168:419;;;:::o;30593:222::-;30686:4;30724:2;30713:9;30709:18;30701:26;;30737:71;30805:1;30794:9;30790:17;30781:6;30737:71;:::i;:::-;30593:222;;;;:::o;30821:129::-;30855:6;30882:20;;:::i;:::-;30872:30;;30911:33;30939:4;30931:6;30911:33;:::i;:::-;30821:129;;;:::o;30956:75::-;30989:6;31022:2;31016:9;31006:19;;30956:75;:::o;31037:307::-;31098:4;31188:18;31180:6;31177:30;31174:56;;;31210:18;;:::i;:::-;31174:56;31248:29;31270:6;31248:29;:::i;:::-;31240:37;;31332:4;31326;31322:15;31314:23;;31037:307;;;:::o;31350:308::-;31412:4;31502:18;31494:6;31491:30;31488:56;;;31524:18;;:::i;:::-;31488:56;31562:29;31584:6;31562:29;:::i;:::-;31554:37;;31646:4;31640;31636:15;31628:23;;31350:308;;;:::o;31664:132::-;31731:4;31754:3;31746:11;;31784:4;31779:3;31775:14;31767:22;;31664:132;;;:::o;31802:114::-;31869:6;31903:5;31897:12;31887:22;;31802:114;;;:::o;31922:98::-;31973:6;32007:5;32001:12;31991:22;;31922:98;;;:::o;32026:99::-;32078:6;32112:5;32106:12;32096:22;;32026:99;;;:::o;32131:113::-;32201:4;32233;32228:3;32224:14;32216:22;;32131:113;;;:::o;32250:184::-;32349:11;32383:6;32378:3;32371:19;32423:4;32418:3;32414:14;32399:29;;32250:184;;;;:::o;32440:168::-;32523:11;32557:6;32552:3;32545:19;32597:4;32592:3;32588:14;32573:29;;32440:168;;;;:::o;32614:169::-;32698:11;32732:6;32727:3;32720:19;32772:4;32767:3;32763:14;32748:29;;32614:169;;;;:::o;32789:148::-;32891:11;32928:3;32913:18;;32789:148;;;;:::o;32943:305::-;32983:3;33002:20;33020:1;33002:20;:::i;:::-;32997:25;;33036:20;33054:1;33036:20;:::i;:::-;33031:25;;33190:1;33122:66;33118:74;33115:1;33112:81;33109:107;;;33196:18;;:::i;:::-;33109:107;33240:1;33237;33233:9;33226:16;;32943:305;;;;:::o;33254:185::-;33294:1;33311:20;33329:1;33311:20;:::i;:::-;33306:25;;33345:20;33363:1;33345:20;:::i;:::-;33340:25;;33384:1;33374:35;;33389:18;;:::i;:::-;33374:35;33431:1;33428;33424:9;33419:14;;33254:185;;;;:::o;33445:348::-;33485:7;33508:20;33526:1;33508:20;:::i;:::-;33503:25;;33542:20;33560:1;33542:20;:::i;:::-;33537:25;;33730:1;33662:66;33658:74;33655:1;33652:81;33647:1;33640:9;33633:17;33629:105;33626:131;;;33737:18;;:::i;:::-;33626:131;33785:1;33782;33778:9;33767:20;;33445:348;;;;:::o;33799:191::-;33839:4;33859:20;33877:1;33859:20;:::i;:::-;33854:25;;33893:20;33911:1;33893:20;:::i;:::-;33888:25;;33932:1;33929;33926:8;33923:34;;;33937:18;;:::i;:::-;33923:34;33982:1;33979;33975:9;33967:17;;33799:191;;;;:::o;33996:96::-;34033:7;34062:24;34080:5;34062:24;:::i;:::-;34051:35;;33996:96;;;:::o;34098:90::-;34132:7;34175:5;34168:13;34161:21;34150:32;;34098:90;;;:::o;34194:149::-;34230:7;34270:66;34263:5;34259:78;34248:89;;34194:149;;;:::o;34349:126::-;34386:7;34426:42;34419:5;34415:54;34404:65;;34349:126;;;:::o;34481:77::-;34518:7;34547:5;34536:16;;34481:77;;;:::o;34564:154::-;34648:6;34643:3;34638;34625:30;34710:1;34701:6;34696:3;34692:16;34685:27;34564:154;;;:::o;34724:307::-;34792:1;34802:113;34816:6;34813:1;34810:13;34802:113;;;34901:1;34896:3;34892:11;34886:18;34882:1;34877:3;34873:11;34866:39;34838:2;34835:1;34831:10;34826:15;;34802:113;;;34933:6;34930:1;34927:13;34924:101;;;35013:1;35004:6;34999:3;34995:16;34988:27;34924:101;34773:258;34724:307;;;:::o;35037:320::-;35081:6;35118:1;35112:4;35108:12;35098:22;;35165:1;35159:4;35155:12;35186:18;35176:81;;35242:4;35234:6;35230:17;35220:27;;35176:81;35304:2;35296:6;35293:14;35273:18;35270:38;35267:84;;;35323:18;;:::i;:::-;35267:84;35088:269;35037:320;;;:::o;35363:281::-;35446:27;35468:4;35446:27;:::i;:::-;35438:6;35434:40;35576:6;35564:10;35561:22;35540:18;35528:10;35525:34;35522:62;35519:88;;;35587:18;;:::i;:::-;35519:88;35627:10;35623:2;35616:22;35406:238;35363:281;;:::o;35650:233::-;35689:3;35712:24;35730:5;35712:24;:::i;:::-;35703:33;;35758:66;35751:5;35748:77;35745:103;;;35828:18;;:::i;:::-;35745:103;35875:1;35868:5;35864:13;35857:20;;35650:233;;;:::o;35889:176::-;35921:1;35938:20;35956:1;35938:20;:::i;:::-;35933:25;;35972:20;35990:1;35972:20;:::i;:::-;35967:25;;36011:1;36001:35;;36016:18;;:::i;:::-;36001:35;36057:1;36054;36050:9;36045:14;;35889:176;;;;:::o;36071:180::-;36119:77;36116:1;36109:88;36216:4;36213:1;36206:15;36240:4;36237:1;36230:15;36257:180;36305:77;36302:1;36295:88;36402:4;36399:1;36392:15;36426:4;36423:1;36416:15;36443:180;36491:77;36488:1;36481:88;36588:4;36585:1;36578:15;36612:4;36609:1;36602:15;36629:180;36677:77;36674:1;36667:88;36774:4;36771:1;36764:15;36798:4;36795:1;36788:15;36815:180;36863:77;36860:1;36853:88;36960:4;36957:1;36950:15;36984:4;36981:1;36974:15;37001:180;37049:77;37046:1;37039:88;37146:4;37143:1;37136:15;37170:4;37167:1;37160:15;37187:117;37296:1;37293;37286:12;37310:117;37419:1;37416;37409:12;37433:117;37542:1;37539;37532:12;37556:117;37665:1;37662;37655:12;37679:102;37720:6;37771:2;37767:7;37762:2;37755:5;37751:14;37747:28;37737:38;;37679:102;;;:::o;37787:230::-;37927:34;37923:1;37915:6;37911:14;37904:58;37996:13;37991:2;37983:6;37979:15;37972:38;37787:230;:::o;38023:237::-;38163:34;38159:1;38151:6;38147:14;38140:58;38232:20;38227:2;38219:6;38215:15;38208:45;38023:237;:::o;38266:225::-;38406:34;38402:1;38394:6;38390:14;38383:58;38475:8;38470:2;38462:6;38458:15;38451:33;38266:225;:::o;38497:178::-;38637:30;38633:1;38625:6;38621:14;38614:54;38497:178;:::o;38681:223::-;38821:34;38817:1;38809:6;38805:14;38798:58;38890:6;38885:2;38877:6;38873:15;38866:31;38681:223;:::o;38910:175::-;39050:27;39046:1;39038:6;39034:14;39027:51;38910:175;:::o;39091:155::-;39231:7;39227:1;39219:6;39215:14;39208:31;39091:155;:::o;39252:159::-;39392:11;39388:1;39380:6;39376:14;39369:35;39252:159;:::o;39417:231::-;39557:34;39553:1;39545:6;39541:14;39534:58;39626:14;39621:2;39613:6;39609:15;39602:39;39417:231;:::o;39654:243::-;39794:34;39790:1;39782:6;39778:14;39771:58;39863:26;39858:2;39850:6;39846:15;39839:51;39654:243;:::o;39903:229::-;40043:34;40039:1;40031:6;40027:14;40020:58;40112:12;40107:2;40099:6;40095:15;40088:37;39903:229;:::o;40138:228::-;40278:34;40274:1;40266:6;40262:14;40255:58;40347:11;40342:2;40334:6;40330:15;40323:36;40138:228;:::o;40372:182::-;40512:34;40508:1;40500:6;40496:14;40489:58;40372:182;:::o;40560:158::-;40700:10;40696:1;40688:6;40684:14;40677:34;40560:158;:::o;40724:231::-;40864:34;40860:1;40852:6;40848:14;40841:58;40933:14;40928:2;40920:6;40916:15;40909:39;40724:231;:::o;40961:182::-;41101:34;41097:1;41089:6;41085:14;41078:58;40961:182;:::o;41149:228::-;41289:34;41285:1;41277:6;41273:14;41266:58;41358:11;41353:2;41345:6;41341:15;41334:36;41149:228;:::o;41383:234::-;41523:34;41519:1;41511:6;41507:14;41500:58;41592:17;41587:2;41579:6;41575:15;41568:42;41383:234;:::o;41623:167::-;41763:19;41759:1;41751:6;41747:14;41740:43;41623:167;:::o;41796:220::-;41936:34;41932:1;41924:6;41920:14;41913:58;42005:3;42000:2;41992:6;41988:15;41981:28;41796:220;:::o;42022:160::-;42162:12;42158:1;42150:6;42146:14;42139:36;42022:160;:::o;42188:236::-;42328:34;42324:1;42316:6;42312:14;42305:58;42397:19;42392:2;42384:6;42380:15;42373:44;42188:236;:::o;42430:231::-;42570:34;42566:1;42558:6;42554:14;42547:58;42639:14;42634:2;42626:6;42622:15;42615:39;42430:231;:::o;42667:122::-;42740:24;42758:5;42740:24;:::i;:::-;42733:5;42730:35;42720:63;;42779:1;42776;42769:12;42720:63;42667:122;:::o;42795:116::-;42865:21;42880:5;42865:21;:::i;:::-;42858:5;42855:32;42845:60;;42901:1;42898;42891:12;42845:60;42795:116;:::o;42917:120::-;42989:23;43006:5;42989:23;:::i;:::-;42982:5;42979:34;42969:62;;43027:1;43024;43017:12;42969:62;42917:120;:::o;43043:122::-;43116:24;43134:5;43116:24;:::i;:::-;43109:5;43106:35;43096:63;;43155:1;43152;43145:12;43096:63;43043:122;:::o

Swarm Source

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