ETH Price: $2,505.10 (-0.81%)

Token

WenChangeDAO (WEN)
 

Overview

Max Total Supply

424 WEN

Holders

204

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
doctorplague.eth
Balance
10 WEN
0xD26AFEa5C8fDf21c43ffE290BcCC6A46D978EF2f
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:
WenChangeDAO

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-26
*/

// SPDX-License-Identifier: GPL-3.0

/*
 _  _  _ _______ __   _      _______ _     _ _______ __   _  ______ _______      ______  _______  _____
 |  |  | |______ | \  |      |       |_____| |_____| | \  | |  ____ |______      |     \ |_____| |     |
 |__|__| |______ |  \_|      |_____  |     | |     | |  \_| |_____| |______      |_____/ |     | |_____|
*/

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.10;

abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    string private _name;
    string private _symbol;
    address[] internal _owners;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
        interfaceId == type(IERC721).interfaceId ||
        interfaceId == type(IERC721Metadata).interfaceId ||
        super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        uint count = 0;
        uint length = _owners.length;
        for( uint i = 0; i < length; ++i ){
            if( owner == _owners[i] ){
                ++count;
            }
        }
        delete length;
        return count;
    }
    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;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721P.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);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }
    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);
    }
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    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);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    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);
    }
    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");
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721P.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    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"
        );
    }
    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);
        _owners.push(to);

        emit Transfer(address(0), to, tokenId);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721P.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

        emit Transfer(owner, address(0), tokenId);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721P.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);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721P.ownerOf(tokenId), to, tokenId);
    }
    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;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.10;

abstract contract ERC721Enum is ERC721P, IERC721Enumerable {
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) {
        require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint count;
        for( uint i; i < _owners.length; ++i ){
            if( owner == _owners[i] ){
                if( count == index )
                    return i;
                else
                    ++count;
            }
        }
        require(false, "ERC721Enum: owner ioob");
    }
    function tokensOfOwner(address owner) public view returns (uint256[] memory) {
        require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob");
        uint256 tokenCount = balanceOf(owner);
        uint256[] memory tokenIds = new uint256[](tokenCount);
        for (uint256 i = 0; i < tokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(owner, i);
        }
        return tokenIds;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob");
        return index;
    }
}

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

pragma solidity ^0.8.0;

/**
 * @title PaymentSplitter
 * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware
 * that the Ether will be split in this way, since it is handled transparently by the contract.
 *
 * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each
 * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim
 * an amount proportional to the percentage of total shares they were assigned.
 *
 * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the
 * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}
 * function.
 *
 * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and
 * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you
 * to run tests before sending real value to this contract.
 */
contract PaymentSplitter is Context {
    event PayeeAdded(address account, uint256 shares);
    event PaymentReleased(address to, uint256 amount);
    event PaymentReceived(address from, uint256 amount);

    uint256 private _totalShares;
    uint256 private _totalReleased;

    mapping(address => uint256) private _shares;
    mapping(address => uint256) private _released;
    address[] private _payees;

    /**
     * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at
     * the matching position in the `shares` array.
     *
     * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no
     * duplicates in `payees`.
     */
    constructor(address[] memory payees, uint256[] memory shares_) payable {
        require(payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch");
        require(payees.length > 0, "PaymentSplitter: no payees");

        for (uint256 i = 0; i < payees.length; i++) {
            _addPayee(payees[i], shares_[i]);
        }
    }

    /**
     * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully
     * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the
     * reliability of the events, and not the actual splitting of Ether.
     *
     * To learn more about this see the Solidity documentation for
     * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback
     * functions].
     */
    receive() external payable virtual {
        emit PaymentReceived(_msgSender(), msg.value);
    }

    /**
     * @dev Getter for the total shares held by payees.
     */
    function totalShares() public view returns (uint256) {
        return _totalShares;
    }

    /**
     * @dev Getter for the total amount of Ether already released.
     */
    function totalReleased() public view returns (uint256) {
        return _totalReleased;
    }

    /**
     * @dev Getter for the amount of shares held by an account.
     */
    function shares(address account) public view returns (uint256) {
        return _shares[account];
    }

    /**
     * @dev Getter for the amount of Ether already released to a payee.
     */
    function released(address account) public view returns (uint256) {
        return _released[account];
    }

    /**
     * @dev Getter for the address of the payee number `index`.
     */
    function payee(uint256 index) public view returns (address) {
        return _payees[index];
    }

    /**
     * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the
     * total shares and their previous withdrawals.
     */
    function release(address payable account) public virtual {
        require(_shares[account] > 0, "PaymentSplitter: account has no shares");

        uint256 totalReceived = address(this).balance + totalReleased();
        uint256 payment = _pendingPayment(account, totalReceived, released(account));

        require(payment != 0, "PaymentSplitter: account is not due payment");

        _released[account] += payment;
        _totalReleased += payment;

        Address.sendValue(account, payment);
        emit PaymentReleased(account, payment);
    }

    /**
     * @dev internal logic for computing the pending payment of an `account` given the token historical balances and
     * already released amounts.
     */
    function _pendingPayment(
        address account,
        uint256 totalReceived,
        uint256 alreadyReleased
    ) private view returns (uint256) {
        return (totalReceived * _shares[account]) / _totalShares - alreadyReleased;
    }

    /**
     * @dev Add a new payee to the contract.
     * @param account The address of the payee to add.
     * @param shares_ The number of shares owned by the payee.
     */
    function _addPayee(address account, uint256 shares_) private {
        require(account != address(0), "PaymentSplitter: account is the zero address");
        require(shares_ > 0, "PaymentSplitter: shares are 0");
        require(_shares[account] == 0, "PaymentSplitter: account already has shares");

        _payees.push(account);
        _shares[account] = shares_;
        _totalShares = _totalShares + shares_;
        emit PayeeAdded(account, shares_);
    }
}

pragma solidity ^0.8.10;

contract WenChangeDAO is ERC721Enum, Ownable, Pausable, PaymentSplitter {
    using Strings for uint256;

    //sale settings
    uint256 constant private MAX_SUPPLY = 20000;
    uint256 private COST = 0.025 ether;

    string private baseURI;

    constructor(
        string memory _initBaseURI,
        address[] memory payees,
        uint256[] memory shares
    ) ERC721P("WenChangeDAO", "WEN") PaymentSplitter(payees, shares) {
        setBaseURI(_initBaseURI);
        _pause();
    }

    function mint(uint256 _mintAmount) external payable whenNotPaused {
        uint256 totalSupply = totalSupply();
        require(_mintAmount > 0, "Minted amount should be positive" );
        require(totalSupply + _mintAmount <= MAX_SUPPLY, "The requested amount exceeds the remaining supply" );
        require(msg.value >= COST * _mintAmount);

        for (uint256 i = 0; i < _mintAmount; i++) {
            _safeMint(msg.sender, totalSupply + i);
        }

        delete totalSupply;
    }

    // internal
    function _baseURI() internal view virtual returns (string memory) {
        return baseURI;
    }

    function tokenURI(uint256 _tokenId) external view virtual override returns (string memory) {
        require(_exists(_tokenId), "ERC721Metadata: Nonexistent token");
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0	? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : "";
    }

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

    function pause() external onlyOwner {
        _pause();
    }

    function unpause() external onlyOwner {
        _unpause();
    }

    function release(address payable account) public override {
        require(msg.sender == account, "Not owner");
        PaymentSplitter.release(account);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"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":"uint256","name":"_mintAmount","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":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526658d15e17628000600b553480156200001c57600080fd5b50604051620056ee380380620056ee833981810160405281019062000042919062000b93565b81816040518060400160405280600c81526020017f57656e4368616e676544414f00000000000000000000000000000000000000008152506040518060400160405280600381526020017f57454e00000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000c8929190620006f5565b508060019080519060200190620000e1929190620006f5565b50505062000104620000f86200024960201b60201c565b6200025160201b60201c565b6000600560146101000a81548160ff021916908315150217905550805182511462000166576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015d9062000cd3565b60405180910390fd5b6000825111620001ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a49062000d45565b60405180910390fd5b60005b82518110156200021c5762000206838281518110620001d457620001d362000d67565b5b6020026020010151838381518110620001f257620001f162000d67565b5b60200260200101516200031760201b60201c565b8080620002139062000dc5565b915050620001b0565b50505062000230836200055160201b60201c565b62000240620005fc60201b60201c565b505050620011c7565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200038a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003819062000e89565b60405180910390fd5b60008111620003d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c79062000efb565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541462000455576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044c9062000f93565b60405180910390fd5b600a829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806006546200050c919062000fb5565b6006819055507f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac82826040516200054592919062001034565b60405180910390a15050565b620005616200024960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000587620006b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d790620010b1565b60405180910390fd5b80600c9080519060200190620005f8929190620006f5565b5050565b6200060c620006de60201b60201c565b156200064f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006469062001123565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200069b6200024960201b60201c565b604051620006aa919062001145565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560149054906101000a900460ff16905090565b828054620007039062001191565b90600052602060002090601f01602090048101928262000727576000855562000773565b82601f106200074257805160ff191683800117855562000773565b8280016001018555821562000773579182015b828111156200077257825182559160200191906001019062000755565b5b50905062000782919062000786565b5090565b5b80821115620007a157600081600090555060010162000787565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200080e82620007c3565b810181811067ffffffffffffffff8211171562000830576200082f620007d4565b5b80604052505050565b600062000845620007a5565b905062000853828262000803565b919050565b600067ffffffffffffffff821115620008765762000875620007d4565b5b6200088182620007c3565b9050602081019050919050565b60005b83811015620008ae57808201518184015260208101905062000891565b83811115620008be576000848401525b50505050565b6000620008db620008d58462000858565b62000839565b905082815260208101848484011115620008fa57620008f9620007be565b5b620009078482856200088e565b509392505050565b600082601f830112620009275762000926620007b9565b5b815162000939848260208601620008c4565b91505092915050565b600067ffffffffffffffff82111562000960576200095f620007d4565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009a38262000976565b9050919050565b620009b58162000996565b8114620009c157600080fd5b50565b600081519050620009d581620009aa565b92915050565b6000620009f2620009ec8462000942565b62000839565b9050808382526020820190506020840283018581111562000a185762000a1762000971565b5b835b8181101562000a45578062000a308882620009c4565b84526020840193505060208101905062000a1a565b5050509392505050565b600082601f83011262000a675762000a66620007b9565b5b815162000a79848260208601620009db565b91505092915050565b600067ffffffffffffffff82111562000aa05762000a9f620007d4565b5b602082029050602081019050919050565b6000819050919050565b62000ac68162000ab1565b811462000ad257600080fd5b50565b60008151905062000ae68162000abb565b92915050565b600062000b0362000afd8462000a82565b62000839565b9050808382526020820190506020840283018581111562000b295762000b2862000971565b5b835b8181101562000b56578062000b41888262000ad5565b84526020840193505060208101905062000b2b565b5050509392505050565b600082601f83011262000b785762000b77620007b9565b5b815162000b8a84826020860162000aec565b91505092915050565b60008060006060848603121562000baf5762000bae620007af565b5b600084015167ffffffffffffffff81111562000bd05762000bcf620007b4565b5b62000bde868287016200090f565b935050602084015167ffffffffffffffff81111562000c025762000c01620007b4565b5b62000c108682870162000a4f565b925050604084015167ffffffffffffffff81111562000c345762000c33620007b4565b5b62000c428682870162000b60565b9150509250925092565b600082825260208201905092915050565b7f5061796d656e7453706c69747465723a2070617965657320616e64207368617260008201527f6573206c656e677468206d69736d617463680000000000000000000000000000602082015250565b600062000cbb60328362000c4c565b915062000cc88262000c5d565b604082019050919050565b6000602082019050818103600083015262000cee8162000cac565b9050919050565b7f5061796d656e7453706c69747465723a206e6f20706179656573000000000000600082015250565b600062000d2d601a8362000c4c565b915062000d3a8262000cf5565b602082019050919050565b6000602082019050818103600083015262000d608162000d1e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dd28262000ab1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000e085762000e0762000d96565b5b600182019050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b600062000e71602c8362000c4c565b915062000e7e8262000e13565b604082019050919050565b6000602082019050818103600083015262000ea48162000e62565b9050919050565b7f5061796d656e7453706c69747465723a20736861726573206172652030000000600082015250565b600062000ee3601d8362000c4c565b915062000ef08262000eab565b602082019050919050565b6000602082019050818103600083015262000f168162000ed4565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960008201527f2068617320736861726573000000000000000000000000000000000000000000602082015250565b600062000f7b602b8362000c4c565b915062000f888262000f1d565b604082019050919050565b6000602082019050818103600083015262000fae8162000f6c565b9050919050565b600062000fc28262000ab1565b915062000fcf8362000ab1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001007576200100662000d96565b5b828201905092915050565b6200101d8162000996565b82525050565b6200102e8162000ab1565b82525050565b60006040820190506200104b600083018562001012565b6200105a602083018462001023565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200109960208362000c4c565b9150620010a68262001061565b602082019050919050565b60006020820190508181036000830152620010cc816200108a565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006200110b60108362000c4c565b91506200111882620010d3565b602082019050919050565b600060208201905081810360008301526200113e81620010fc565b9050919050565b60006020820190506200115c600083018462001012565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620011aa57607f821691505b60208210811415620011c157620011c062001162565b5b50919050565b61451780620011d76000396000f3fe6080604052600436106101dc5760003560e01c806370a0823111610102578063a0712d6811610095578063ce7c2ac211610064578063ce7c2ac21461070c578063e33b7de314610749578063e985e9c514610774578063f2fde38b146107b157610223565b8063a0712d6814610661578063a22cb4651461067d578063b88d4fde146106a6578063c87b56dd146106cf57610223565b80638b83209b116100d15780638b83209b146105915780638da5cb5b146105ce57806395d89b41146105f95780639852595c1461062457610223565b806370a08231146104e9578063715018a6146105265780638456cb591461053d5780638462151c1461055457610223565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce71461041b57806355f804b3146104585780635c975abb146104815780636352211e146104ac57610223565b80632f745c59146103735780633a98ef39146103b05780633f4ba83a146103db57806342842e0e146103f257610223565b8063095ea7b3116101b6578063095ea7b3146102cd57806318160ddd146102f6578063191655871461032157806323b872dd1461034a57610223565b806301ffc9a71461022857806306fdde0314610265578063081812fc1461029057610223565b36610223577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77061020a6107da565b34604051610219929190612a71565b60405180910390a1005b600080fd5b34801561023457600080fd5b5061024f600480360381019061024a9190612b06565b6107e2565b60405161025c9190612b4e565b60405180910390f35b34801561027157600080fd5b5061027a61085c565b6040516102879190612c02565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b29190612c50565b6108ee565b6040516102c49190612c7d565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190612cc4565b610973565b005b34801561030257600080fd5b5061030b610a8b565b6040516103189190612d04565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190612d5d565b610a98565b005b34801561035657600080fd5b50610371600480360381019061036c9190612d8a565b610b12565b005b34801561037f57600080fd5b5061039a60048036038101906103959190612cc4565b610b72565b6040516103a79190612d04565b60405180910390f35b3480156103bc57600080fd5b506103c5610cbb565b6040516103d29190612d04565b60405180910390f35b3480156103e757600080fd5b506103f0610cc5565b005b3480156103fe57600080fd5b5061041960048036038101906104149190612d8a565b610d4b565b005b34801561042757600080fd5b50610442600480360381019061043d9190612c50565b610d6b565b60405161044f9190612d04565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612f12565b610dbe565b005b34801561048d57600080fd5b50610496610e54565b6040516104a39190612b4e565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190612c50565b610e6b565b6040516104e09190612c7d565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190612f5b565b610f28565b60405161051d9190612d04565b60405180910390f35b34801561053257600080fd5b5061053b61104e565b005b34801561054957600080fd5b506105526110d6565b005b34801561056057600080fd5b5061057b60048036038101906105769190612f5b565b61115c565b6040516105889190613046565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190612c50565b611255565b6040516105c59190612c7d565b60405180910390f35b3480156105da57600080fd5b506105e361129d565b6040516105f09190612c7d565b60405180910390f35b34801561060557600080fd5b5061060e6112c7565b60405161061b9190612c02565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190612f5b565b611359565b6040516106589190612d04565b60405180910390f35b61067b60048036038101906106769190612c50565b6113a2565b005b34801561068957600080fd5b506106a4600480360381019061069f9190613094565b6114df565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613175565b611660565b005b3480156106db57600080fd5b506106f660048036038101906106f19190612c50565b6116c2565b6040516107039190612c02565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190612f5b565b611769565b6040516107409190612d04565b60405180910390f35b34801561075557600080fd5b5061075e6117b2565b60405161076b9190612d04565b60405180910390f35b34801561078057600080fd5b5061079b600480360381019061079691906131f8565b6117bc565b6040516107a89190612b4e565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d39190612f5b565b611850565b005b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610855575061085482611948565b5b9050919050565b60606000805461086b90613267565b80601f016020809104026020016040519081016040528092919081815260200182805461089790613267565b80156108e45780601f106108b9576101008083540402835291602001916108e4565b820191906000526020600020905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b60006108f982611a2a565b610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f9061330b565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097e82610e6b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e69061339d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0e6107da565b73ffffffffffffffffffffffffffffffffffffffff161480610a3d5750610a3c81610a376107da565b6117bc565b5b610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739061342f565b60405180910390fd5b610a868383611ab2565b505050565b6000600280549050905090565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afd9061349b565b60405180910390fd5b610b0f81611b6b565b50565b610b23610b1d6107da565b82611d16565b610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b599061352d565b60405180910390fd5b610b6d838383611df4565b505050565b6000610b7d83610f28565b8210610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb590613599565b60405180910390fd5b6000805b600280549050811015610c715760028181548110610be357610be26135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610c605783821415610c53578092505050610cb5565b81610c5d90613617565b91505b80610c6a90613617565b9050610bc2565b506000610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613599565b60405180910390fd5b505b92915050565b6000600654905090565b610ccd6107da565b73ffffffffffffffffffffffffffffffffffffffff16610ceb61129d565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d38906136ac565b60405180910390fd5b610d49611fad565b565b610d6683838360405180602001604052806000815250611660565b505050565b6000610d75610a8b565b8210610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90613718565b60405180910390fd5b819050919050565b610dc66107da565b73ffffffffffffffffffffffffffffffffffffffff16610de461129d565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e31906136ac565b60405180910390fd5b80600c9080519060200190610e50929190612974565b5050565b6000600560149054906101000a900460ff16905090565b60008060028381548110610e8257610e816135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906137aa565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061383c565b60405180910390fd5b600080600280549050905060005b8181101561103f5760028181548110610fc357610fc26135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561102e578261102b90613617565b92505b8061103890613617565b9050610fa7565b50600090508192505050919050565b6110566107da565b73ffffffffffffffffffffffffffffffffffffffff1661107461129d565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c1906136ac565b60405180910390fd5b6110d4600061204f565b565b6110de6107da565b73ffffffffffffffffffffffffffffffffffffffff166110fc61129d565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611149906136ac565b60405180910390fd5b61115a612115565b565b606061116782610f28565b6000106111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090613599565b60405180910390fd5b60006111b483610f28565b905060008167ffffffffffffffff8111156111d2576111d1612de7565b5b6040519080825280602002602001820160405280156112005781602001602082028036833780820191505090505b50905060005b8281101561124a576112188582610b72565b82828151811061122b5761122a6135b9565b5b602002602001018181525050808061124290613617565b915050611206565b508092505050919050565b6000600a828154811061126b5761126a6135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112d690613267565b80601f016020809104026020016040519081016040528092919081815260200182805461130290613267565b801561134f5780601f106113245761010080835404028352916020019161134f565b820191906000526020600020905b81548152906001019060200180831161133257829003601f168201915b5050505050905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113aa610e54565b156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e1906138a8565b60405180910390fd5b60006113f4610a8b565b905060008211611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090613914565b60405180910390fd5b614e2082826114489190613934565b1115611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906139fc565b60405180910390fd5b81600b546114979190613a1c565b3410156114a357600080fd5b60005b828110156114d6576114c33382846114be9190613934565b6121b8565b80806114ce90613617565b9150506114a6565b50600090505050565b6114e76107da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90613ac2565b60405180910390fd5b80600460006115626107da565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661160f6107da565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116549190612b4e565b60405180910390a35050565b61167161166b6107da565b83611d16565b6116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a79061352d565b60405180910390fd5b6116bc848484846121d6565b50505050565b60606116cd82611a2a565b61170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390613b54565b60405180910390fd5b6000611716612232565b905060008151116117365760405180602001604052806000815250611761565b80611740846122c4565b604051602001611751929190613bfc565b6040516020818303038152906040525b915050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600754905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118586107da565b73ffffffffffffffffffffffffffffffffffffffff1661187661129d565b73ffffffffffffffffffffffffffffffffffffffff16146118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c3906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390613c9d565b60405180910390fd5b6119458161204f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a1357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a235750611a2282612425565b5b9050919050565b600060028054905082108015611aab5750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611a6757611a666135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b2583610e6b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490613d2f565b60405180910390fd5b6000611bf76117b2565b47611c029190613934565b90506000611c198383611c1486611359565b61248f565b90506000811415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690613dc1565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cae9190613934565b925050819055508060076000828254611cc79190613934565b92505081905550611cd883826124fd565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568382604051611d09929190613e40565b60405180910390a1505050565b6000611d2182611a2a565b611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790613edb565b60405180910390fd5b6000611d6b83610e6b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dda57508373ffffffffffffffffffffffffffffffffffffffff16611dc2846108ee565b73ffffffffffffffffffffffffffffffffffffffff16145b80611deb5750611dea81856117bc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e1482610e6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190613f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613fff565b60405180910390fd5b611ee58383836125f1565b611ef0600082611ab2565b8160028281548110611f0557611f046135b9565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fb5610e54565b611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb9061406b565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6120386107da565b6040516120459190612c7d565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61211d610e54565b1561215d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612154906138a8565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121a16107da565b6040516121ae9190612c7d565b60405180910390a1565b6121d28282604051806020016040528060008152506125f6565b5050565b6121e1848484611df4565b6121ed84848484612651565b61222c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612223906140fd565b60405180910390fd5b50505050565b6060600c805461224190613267565b80601f016020809104026020016040519081016040528092919081815260200182805461226d90613267565b80156122ba5780601f1061228f576101008083540402835291602001916122ba565b820191906000526020600020905b81548152906001019060200180831161229d57829003601f168201915b5050505050905090565b6060600082141561230c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612420565b600082905060005b6000821461233e57808061232790613617565b915050600a82612337919061414c565b9150612314565b60008167ffffffffffffffff81111561235a57612359612de7565b5b6040519080825280601f01601f19166020018201604052801561238c5781602001600182028036833780820191505090505b5090505b60008514612419576001826123a5919061417d565b9150600a856123b491906141b1565b60306123c09190613934565b60f81b8183815181106123d6576123d56135b9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612412919061414c565b9450612390565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600654600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856124e09190613a1c565b6124ea919061414c565b6124f4919061417d565b90509392505050565b80471015612540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125379061422e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516125669061427f565b60006040518083038185875af1925050503d80600081146125a3576040519150601f19603f3d011682016040523d82523d6000602084013e6125a8565b606091505b50509050806125ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e390614306565b60405180910390fd5b505050565b505050565b61260083836127d9565b61260d6000848484612651565b61264c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612643906140fd565b60405180910390fd5b505050565b60006126728473ffffffffffffffffffffffffffffffffffffffff16612961565b156127cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261269b6107da565b8786866040518563ffffffff1660e01b81526004016126bd949392919061437b565b6020604051808303816000875af19250505080156126f957506040513d601f19601f820116820180604052508101906126f691906143dc565b60015b61277c573d8060008114612729576040519150601f19603f3d011682016040523d82523d6000602084013e61272e565b606091505b50600081511415612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b906140fd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127d1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614455565b60405180910390fd5b61285281611a2a565b15612892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612889906144c1565b60405180910390fd5b61289e600083836125f1565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461298090613267565b90600052602060002090601f0160209004810192826129a257600085556129e9565b82601f106129bb57805160ff19168380011785556129e9565b828001600101855582156129e9579182015b828111156129e85782518255916020019190600101906129cd565b5b5090506129f691906129fa565b5090565b5b80821115612a135760008160009055506001016129fb565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4282612a17565b9050919050565b612a5281612a37565b82525050565b6000819050919050565b612a6b81612a58565b82525050565b6000604082019050612a866000830185612a49565b612a936020830184612a62565b9392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ae381612aae565b8114612aee57600080fd5b50565b600081359050612b0081612ada565b92915050565b600060208284031215612b1c57612b1b612aa4565b5b6000612b2a84828501612af1565b91505092915050565b60008115159050919050565b612b4881612b33565b82525050565b6000602082019050612b636000830184612b3f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ba3578082015181840152602081019050612b88565b83811115612bb2576000848401525b50505050565b6000601f19601f8301169050919050565b6000612bd482612b69565b612bde8185612b74565b9350612bee818560208601612b85565b612bf781612bb8565b840191505092915050565b60006020820190508181036000830152612c1c8184612bc9565b905092915050565b612c2d81612a58565b8114612c3857600080fd5b50565b600081359050612c4a81612c24565b92915050565b600060208284031215612c6657612c65612aa4565b5b6000612c7484828501612c3b565b91505092915050565b6000602082019050612c926000830184612a49565b92915050565b612ca181612a37565b8114612cac57600080fd5b50565b600081359050612cbe81612c98565b92915050565b60008060408385031215612cdb57612cda612aa4565b5b6000612ce985828601612caf565b9250506020612cfa85828601612c3b565b9150509250929050565b6000602082019050612d196000830184612a62565b92915050565b6000612d2a82612a17565b9050919050565b612d3a81612d1f565b8114612d4557600080fd5b50565b600081359050612d5781612d31565b92915050565b600060208284031215612d7357612d72612aa4565b5b6000612d8184828501612d48565b91505092915050565b600080600060608486031215612da357612da2612aa4565b5b6000612db186828701612caf565b9350506020612dc286828701612caf565b9250506040612dd386828701612c3b565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e1f82612bb8565b810181811067ffffffffffffffff82111715612e3e57612e3d612de7565b5b80604052505050565b6000612e51612a9a565b9050612e5d8282612e16565b919050565b600067ffffffffffffffff821115612e7d57612e7c612de7565b5b612e8682612bb8565b9050602081019050919050565b82818337600083830152505050565b6000612eb5612eb084612e62565b612e47565b905082815260208101848484011115612ed157612ed0612de2565b5b612edc848285612e93565b509392505050565b600082601f830112612ef957612ef8612ddd565b5b8135612f09848260208601612ea2565b91505092915050565b600060208284031215612f2857612f27612aa4565b5b600082013567ffffffffffffffff811115612f4657612f45612aa9565b5b612f5284828501612ee4565b91505092915050565b600060208284031215612f7157612f70612aa4565b5b6000612f7f84828501612caf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612fbd81612a58565b82525050565b6000612fcf8383612fb4565b60208301905092915050565b6000602082019050919050565b6000612ff382612f88565b612ffd8185612f93565b935061300883612fa4565b8060005b838110156130395781516130208882612fc3565b975061302b83612fdb565b92505060018101905061300c565b5085935050505092915050565b600060208201905081810360008301526130608184612fe8565b905092915050565b61307181612b33565b811461307c57600080fd5b50565b60008135905061308e81613068565b92915050565b600080604083850312156130ab576130aa612aa4565b5b60006130b985828601612caf565b92505060206130ca8582860161307f565b9150509250929050565b600067ffffffffffffffff8211156130ef576130ee612de7565b5b6130f882612bb8565b9050602081019050919050565b6000613118613113846130d4565b612e47565b90508281526020810184848401111561313457613133612de2565b5b61313f848285612e93565b509392505050565b600082601f83011261315c5761315b612ddd565b5b813561316c848260208601613105565b91505092915050565b6000806000806080858703121561318f5761318e612aa4565b5b600061319d87828801612caf565b94505060206131ae87828801612caf565b93505060406131bf87828801612c3b565b925050606085013567ffffffffffffffff8111156131e0576131df612aa9565b5b6131ec87828801613147565b91505092959194509250565b6000806040838503121561320f5761320e612aa4565b5b600061321d85828601612caf565b925050602061322e85828601612caf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327f57607f821691505b6020821081141561329357613292613238565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132f5602c83612b74565b915061330082613299565b604082019050919050565b60006020820190508181036000830152613324816132e8565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613387602183612b74565b91506133928261332b565b604082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613419603883612b74565b9150613424826133bd565b604082019050919050565b600060208201905081810360008301526134488161340c565b9050919050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6000613485600983612b74565b91506134908261344f565b602082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613517603183612b74565b9150613522826134bb565b604082019050919050565b600060208201905081810360008301526135468161350a565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000613583601683612b74565b915061358e8261354d565b602082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061362282612a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613655576136546135e8565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613696602083612b74565b91506136a182613660565b602082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000613702601783612b74565b915061370d826136cc565b602082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613794602983612b74565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613826602a83612b74565b9150613831826137ca565b604082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613892601083612b74565b915061389d8261385c565b602082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b7f4d696e74656420616d6f756e742073686f756c6420626520706f736974697665600082015250565b60006138fe602083612b74565b9150613909826138c8565b602082019050919050565b6000602082019050818103600083015261392d816138f1565b9050919050565b600061393f82612a58565b915061394a83612a58565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561397f5761397e6135e8565b5b828201905092915050565b7f5468652072657175657374656420616d6f756e7420657863656564732074686560008201527f2072656d61696e696e6720737570706c79000000000000000000000000000000602082015250565b60006139e6603183612b74565b91506139f18261398a565b604082019050919050565b60006020820190508181036000830152613a15816139d9565b9050919050565b6000613a2782612a58565b9150613a3283612a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a6b57613a6a6135e8565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613aac601983612b74565b9150613ab782613a76565b602082019050919050565b60006020820190508181036000830152613adb81613a9f565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b3e602183612b74565b9150613b4982613ae2565b604082019050919050565b60006020820190508181036000830152613b6d81613b31565b9050919050565b600081905092915050565b6000613b8a82612b69565b613b948185613b74565b9350613ba4818560208601612b85565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613be6600583613b74565b9150613bf182613bb0565b600582019050919050565b6000613c088285613b7f565b9150613c148284613b7f565b9150613c1f82613bd9565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c87602683612b74565b9150613c9282613c2b565b604082019050919050565b60006020820190508181036000830152613cb681613c7a565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b6000613d19602683612b74565b9150613d2482613cbd565b604082019050919050565b60006020820190508181036000830152613d4881613d0c565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b6000613dab602b83612b74565b9150613db682613d4f565b604082019050919050565b60006020820190508181036000830152613dda81613d9e565b9050919050565b6000819050919050565b6000613e06613e01613dfc84612a17565b613de1565b612a17565b9050919050565b6000613e1882613deb565b9050919050565b6000613e2a82613e0d565b9050919050565b613e3a81613e1f565b82525050565b6000604082019050613e556000830185613e31565b613e626020830184612a62565b9392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ec5602c83612b74565b9150613ed082613e69565b604082019050919050565b60006020820190508181036000830152613ef481613eb8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613f57602983612b74565b9150613f6282613efb565b604082019050919050565b60006020820190508181036000830152613f8681613f4a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613fe9602483612b74565b9150613ff482613f8d565b604082019050919050565b6000602082019050818103600083015261401881613fdc565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614055601483612b74565b91506140608261401f565b602082019050919050565b6000602082019050818103600083015261408481614048565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006140e7603283612b74565b91506140f28261408b565b604082019050919050565b60006020820190508181036000830152614116816140da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061415782612a58565b915061416283612a58565b9250826141725761417161411d565b5b828204905092915050565b600061418882612a58565b915061419383612a58565b9250828210156141a6576141a56135e8565b5b828203905092915050565b60006141bc82612a58565b91506141c783612a58565b9250826141d7576141d661411d565b5b828206905092915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614218601d83612b74565b9150614223826141e2565b602082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b600081905092915050565b50565b600061426960008361424e565b915061427482614259565b600082019050919050565b600061428a8261425c565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006142f0603a83612b74565b91506142fb82614294565b604082019050919050565b6000602082019050818103600083015261431f816142e3565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061434d82614326565b6143578185614331565b9350614367818560208601612b85565b61437081612bb8565b840191505092915050565b60006080820190506143906000830187612a49565b61439d6020830186612a49565b6143aa6040830185612a62565b81810360608301526143bc8184614342565b905095945050505050565b6000815190506143d681612ada565b92915050565b6000602082840312156143f2576143f1612aa4565b5b6000614400848285016143c7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061443f602083612b74565b915061444a82614409565b602082019050919050565b6000602082019050818103600083015261446e81614432565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006144ab601c83612b74565b91506144b682614475565b602082019050919050565b600060208201905081810360008301526144da8161449e565b905091905056fea2646970667358221220c762015a2243a868ce7970f1107cb0912d9309c9e77610a028586815253af4df64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000097265706c6163656d65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009d5025b327e6b863e5050141c987d988c07fd8b2000000000000000000000000f4a9d47f9322595d60b23b55d558c3d996b2551000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000057000000000000000000000000000000000000000000000000000000000000000d

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c806370a0823111610102578063a0712d6811610095578063ce7c2ac211610064578063ce7c2ac21461070c578063e33b7de314610749578063e985e9c514610774578063f2fde38b146107b157610223565b8063a0712d6814610661578063a22cb4651461067d578063b88d4fde146106a6578063c87b56dd146106cf57610223565b80638b83209b116100d15780638b83209b146105915780638da5cb5b146105ce57806395d89b41146105f95780639852595c1461062457610223565b806370a08231146104e9578063715018a6146105265780638456cb591461053d5780638462151c1461055457610223565b80632f745c591161017a5780634f6ccce7116101495780634f6ccce71461041b57806355f804b3146104585780635c975abb146104815780636352211e146104ac57610223565b80632f745c59146103735780633a98ef39146103b05780633f4ba83a146103db57806342842e0e146103f257610223565b8063095ea7b3116101b6578063095ea7b3146102cd57806318160ddd146102f6578063191655871461032157806323b872dd1461034a57610223565b806301ffc9a71461022857806306fdde0314610265578063081812fc1461029057610223565b36610223577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77061020a6107da565b34604051610219929190612a71565b60405180910390a1005b600080fd5b34801561023457600080fd5b5061024f600480360381019061024a9190612b06565b6107e2565b60405161025c9190612b4e565b60405180910390f35b34801561027157600080fd5b5061027a61085c565b6040516102879190612c02565b60405180910390f35b34801561029c57600080fd5b506102b760048036038101906102b29190612c50565b6108ee565b6040516102c49190612c7d565b60405180910390f35b3480156102d957600080fd5b506102f460048036038101906102ef9190612cc4565b610973565b005b34801561030257600080fd5b5061030b610a8b565b6040516103189190612d04565b60405180910390f35b34801561032d57600080fd5b5061034860048036038101906103439190612d5d565b610a98565b005b34801561035657600080fd5b50610371600480360381019061036c9190612d8a565b610b12565b005b34801561037f57600080fd5b5061039a60048036038101906103959190612cc4565b610b72565b6040516103a79190612d04565b60405180910390f35b3480156103bc57600080fd5b506103c5610cbb565b6040516103d29190612d04565b60405180910390f35b3480156103e757600080fd5b506103f0610cc5565b005b3480156103fe57600080fd5b5061041960048036038101906104149190612d8a565b610d4b565b005b34801561042757600080fd5b50610442600480360381019061043d9190612c50565b610d6b565b60405161044f9190612d04565b60405180910390f35b34801561046457600080fd5b5061047f600480360381019061047a9190612f12565b610dbe565b005b34801561048d57600080fd5b50610496610e54565b6040516104a39190612b4e565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190612c50565b610e6b565b6040516104e09190612c7d565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190612f5b565b610f28565b60405161051d9190612d04565b60405180910390f35b34801561053257600080fd5b5061053b61104e565b005b34801561054957600080fd5b506105526110d6565b005b34801561056057600080fd5b5061057b60048036038101906105769190612f5b565b61115c565b6040516105889190613046565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190612c50565b611255565b6040516105c59190612c7d565b60405180910390f35b3480156105da57600080fd5b506105e361129d565b6040516105f09190612c7d565b60405180910390f35b34801561060557600080fd5b5061060e6112c7565b60405161061b9190612c02565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190612f5b565b611359565b6040516106589190612d04565b60405180910390f35b61067b60048036038101906106769190612c50565b6113a2565b005b34801561068957600080fd5b506106a4600480360381019061069f9190613094565b6114df565b005b3480156106b257600080fd5b506106cd60048036038101906106c89190613175565b611660565b005b3480156106db57600080fd5b506106f660048036038101906106f19190612c50565b6116c2565b6040516107039190612c02565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190612f5b565b611769565b6040516107409190612d04565b60405180910390f35b34801561075557600080fd5b5061075e6117b2565b60405161076b9190612d04565b60405180910390f35b34801561078057600080fd5b5061079b600480360381019061079691906131f8565b6117bc565b6040516107a89190612b4e565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d39190612f5b565b611850565b005b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610855575061085482611948565b5b9050919050565b60606000805461086b90613267565b80601f016020809104026020016040519081016040528092919081815260200182805461089790613267565b80156108e45780601f106108b9576101008083540402835291602001916108e4565b820191906000526020600020905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b60006108f982611a2a565b610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f9061330b565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097e82610e6b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e69061339d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0e6107da565b73ffffffffffffffffffffffffffffffffffffffff161480610a3d5750610a3c81610a376107da565b6117bc565b5b610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739061342f565b60405180910390fd5b610a868383611ab2565b505050565b6000600280549050905090565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afd9061349b565b60405180910390fd5b610b0f81611b6b565b50565b610b23610b1d6107da565b82611d16565b610b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b599061352d565b60405180910390fd5b610b6d838383611df4565b505050565b6000610b7d83610f28565b8210610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb590613599565b60405180910390fd5b6000805b600280549050811015610c715760028181548110610be357610be26135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610c605783821415610c53578092505050610cb5565b81610c5d90613617565b91505b80610c6a90613617565b9050610bc2565b506000610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613599565b60405180910390fd5b505b92915050565b6000600654905090565b610ccd6107da565b73ffffffffffffffffffffffffffffffffffffffff16610ceb61129d565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d38906136ac565b60405180910390fd5b610d49611fad565b565b610d6683838360405180602001604052806000815250611660565b505050565b6000610d75610a8b565b8210610db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dad90613718565b60405180910390fd5b819050919050565b610dc66107da565b73ffffffffffffffffffffffffffffffffffffffff16610de461129d565b73ffffffffffffffffffffffffffffffffffffffff1614610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e31906136ac565b60405180910390fd5b80600c9080519060200190610e50929190612974565b5050565b6000600560149054906101000a900460ff16905090565b60008060028381548110610e8257610e816135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906137aa565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061383c565b60405180910390fd5b600080600280549050905060005b8181101561103f5760028181548110610fc357610fc26135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561102e578261102b90613617565b92505b8061103890613617565b9050610fa7565b50600090508192505050919050565b6110566107da565b73ffffffffffffffffffffffffffffffffffffffff1661107461129d565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c1906136ac565b60405180910390fd5b6110d4600061204f565b565b6110de6107da565b73ffffffffffffffffffffffffffffffffffffffff166110fc61129d565b73ffffffffffffffffffffffffffffffffffffffff1614611152576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611149906136ac565b60405180910390fd5b61115a612115565b565b606061116782610f28565b6000106111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090613599565b60405180910390fd5b60006111b483610f28565b905060008167ffffffffffffffff8111156111d2576111d1612de7565b5b6040519080825280602002602001820160405280156112005781602001602082028036833780820191505090505b50905060005b8281101561124a576112188582610b72565b82828151811061122b5761122a6135b9565b5b602002602001018181525050808061124290613617565b915050611206565b508092505050919050565b6000600a828154811061126b5761126a6135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112d690613267565b80601f016020809104026020016040519081016040528092919081815260200182805461130290613267565b801561134f5780601f106113245761010080835404028352916020019161134f565b820191906000526020600020905b81548152906001019060200180831161133257829003601f168201915b5050505050905090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113aa610e54565b156113ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e1906138a8565b60405180910390fd5b60006113f4610a8b565b905060008211611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090613914565b60405180910390fd5b614e2082826114489190613934565b1115611489576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611480906139fc565b60405180910390fd5b81600b546114979190613a1c565b3410156114a357600080fd5b60005b828110156114d6576114c33382846114be9190613934565b6121b8565b80806114ce90613617565b9150506114a6565b50600090505050565b6114e76107da565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154c90613ac2565b60405180910390fd5b80600460006115626107da565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661160f6107da565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116549190612b4e565b60405180910390a35050565b61167161166b6107da565b83611d16565b6116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a79061352d565b60405180910390fd5b6116bc848484846121d6565b50505050565b60606116cd82611a2a565b61170c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170390613b54565b60405180910390fd5b6000611716612232565b905060008151116117365760405180602001604052806000815250611761565b80611740846122c4565b604051602001611751929190613bfc565b6040516020818303038152906040525b915050919050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600754905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118586107da565b73ffffffffffffffffffffffffffffffffffffffff1661187661129d565b73ffffffffffffffffffffffffffffffffffffffff16146118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c3906136ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390613c9d565b60405180910390fd5b6119458161204f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a1357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a235750611a2282612425565b5b9050919050565b600060028054905082108015611aab5750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611a6757611a666135b9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b2583610e6b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be490613d2f565b60405180910390fd5b6000611bf76117b2565b47611c029190613934565b90506000611c198383611c1486611359565b61248f565b90506000811415611c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5690613dc1565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cae9190613934565b925050819055508060076000828254611cc79190613934565b92505081905550611cd883826124fd565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b0568382604051611d09929190613e40565b60405180910390a1505050565b6000611d2182611a2a565b611d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5790613edb565b60405180910390fd5b6000611d6b83610e6b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dda57508373ffffffffffffffffffffffffffffffffffffffff16611dc2846108ee565b73ffffffffffffffffffffffffffffffffffffffff16145b80611deb5750611dea81856117bc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e1482610e6b565b73ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190613f6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed190613fff565b60405180910390fd5b611ee58383836125f1565b611ef0600082611ab2565b8160028281548110611f0557611f046135b9565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fb5610e54565b611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb9061406b565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6120386107da565b6040516120459190612c7d565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61211d610e54565b1561215d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612154906138a8565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121a16107da565b6040516121ae9190612c7d565b60405180910390a1565b6121d28282604051806020016040528060008152506125f6565b5050565b6121e1848484611df4565b6121ed84848484612651565b61222c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612223906140fd565b60405180910390fd5b50505050565b6060600c805461224190613267565b80601f016020809104026020016040519081016040528092919081815260200182805461226d90613267565b80156122ba5780601f1061228f576101008083540402835291602001916122ba565b820191906000526020600020905b81548152906001019060200180831161229d57829003601f168201915b5050505050905090565b6060600082141561230c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612420565b600082905060005b6000821461233e57808061232790613617565b915050600a82612337919061414c565b9150612314565b60008167ffffffffffffffff81111561235a57612359612de7565b5b6040519080825280601f01601f19166020018201604052801561238c5781602001600182028036833780820191505090505b5090505b60008514612419576001826123a5919061417d565b9150600a856123b491906141b1565b60306123c09190613934565b60f81b8183815181106123d6576123d56135b9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612412919061414c565b9450612390565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600654600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054856124e09190613a1c565b6124ea919061414c565b6124f4919061417d565b90509392505050565b80471015612540576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125379061422e565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516125669061427f565b60006040518083038185875af1925050503d80600081146125a3576040519150601f19603f3d011682016040523d82523d6000602084013e6125a8565b606091505b50509050806125ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e390614306565b60405180910390fd5b505050565b505050565b61260083836127d9565b61260d6000848484612651565b61264c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612643906140fd565b60405180910390fd5b505050565b60006126728473ffffffffffffffffffffffffffffffffffffffff16612961565b156127cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261269b6107da565b8786866040518563ffffffff1660e01b81526004016126bd949392919061437b565b6020604051808303816000875af19250505080156126f957506040513d601f19601f820116820180604052508101906126f691906143dc565b60015b61277c573d8060008114612729576040519150601f19603f3d011682016040523d82523d6000602084013e61272e565b606091505b50600081511415612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b906140fd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127d1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614455565b60405180910390fd5b61285281611a2a565b15612892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612889906144c1565b60405180910390fd5b61289e600083836125f1565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461298090613267565b90600052602060002090601f0160209004810192826129a257600085556129e9565b82601f106129bb57805160ff19168380011785556129e9565b828001600101855582156129e9579182015b828111156129e85782518255916020019190600101906129cd565b5b5090506129f691906129fa565b5090565b5b80821115612a135760008160009055506001016129fb565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4282612a17565b9050919050565b612a5281612a37565b82525050565b6000819050919050565b612a6b81612a58565b82525050565b6000604082019050612a866000830185612a49565b612a936020830184612a62565b9392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ae381612aae565b8114612aee57600080fd5b50565b600081359050612b0081612ada565b92915050565b600060208284031215612b1c57612b1b612aa4565b5b6000612b2a84828501612af1565b91505092915050565b60008115159050919050565b612b4881612b33565b82525050565b6000602082019050612b636000830184612b3f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ba3578082015181840152602081019050612b88565b83811115612bb2576000848401525b50505050565b6000601f19601f8301169050919050565b6000612bd482612b69565b612bde8185612b74565b9350612bee818560208601612b85565b612bf781612bb8565b840191505092915050565b60006020820190508181036000830152612c1c8184612bc9565b905092915050565b612c2d81612a58565b8114612c3857600080fd5b50565b600081359050612c4a81612c24565b92915050565b600060208284031215612c6657612c65612aa4565b5b6000612c7484828501612c3b565b91505092915050565b6000602082019050612c926000830184612a49565b92915050565b612ca181612a37565b8114612cac57600080fd5b50565b600081359050612cbe81612c98565b92915050565b60008060408385031215612cdb57612cda612aa4565b5b6000612ce985828601612caf565b9250506020612cfa85828601612c3b565b9150509250929050565b6000602082019050612d196000830184612a62565b92915050565b6000612d2a82612a17565b9050919050565b612d3a81612d1f565b8114612d4557600080fd5b50565b600081359050612d5781612d31565b92915050565b600060208284031215612d7357612d72612aa4565b5b6000612d8184828501612d48565b91505092915050565b600080600060608486031215612da357612da2612aa4565b5b6000612db186828701612caf565b9350506020612dc286828701612caf565b9250506040612dd386828701612c3b565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e1f82612bb8565b810181811067ffffffffffffffff82111715612e3e57612e3d612de7565b5b80604052505050565b6000612e51612a9a565b9050612e5d8282612e16565b919050565b600067ffffffffffffffff821115612e7d57612e7c612de7565b5b612e8682612bb8565b9050602081019050919050565b82818337600083830152505050565b6000612eb5612eb084612e62565b612e47565b905082815260208101848484011115612ed157612ed0612de2565b5b612edc848285612e93565b509392505050565b600082601f830112612ef957612ef8612ddd565b5b8135612f09848260208601612ea2565b91505092915050565b600060208284031215612f2857612f27612aa4565b5b600082013567ffffffffffffffff811115612f4657612f45612aa9565b5b612f5284828501612ee4565b91505092915050565b600060208284031215612f7157612f70612aa4565b5b6000612f7f84828501612caf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612fbd81612a58565b82525050565b6000612fcf8383612fb4565b60208301905092915050565b6000602082019050919050565b6000612ff382612f88565b612ffd8185612f93565b935061300883612fa4565b8060005b838110156130395781516130208882612fc3565b975061302b83612fdb565b92505060018101905061300c565b5085935050505092915050565b600060208201905081810360008301526130608184612fe8565b905092915050565b61307181612b33565b811461307c57600080fd5b50565b60008135905061308e81613068565b92915050565b600080604083850312156130ab576130aa612aa4565b5b60006130b985828601612caf565b92505060206130ca8582860161307f565b9150509250929050565b600067ffffffffffffffff8211156130ef576130ee612de7565b5b6130f882612bb8565b9050602081019050919050565b6000613118613113846130d4565b612e47565b90508281526020810184848401111561313457613133612de2565b5b61313f848285612e93565b509392505050565b600082601f83011261315c5761315b612ddd565b5b813561316c848260208601613105565b91505092915050565b6000806000806080858703121561318f5761318e612aa4565b5b600061319d87828801612caf565b94505060206131ae87828801612caf565b93505060406131bf87828801612c3b565b925050606085013567ffffffffffffffff8111156131e0576131df612aa9565b5b6131ec87828801613147565b91505092959194509250565b6000806040838503121561320f5761320e612aa4565b5b600061321d85828601612caf565b925050602061322e85828601612caf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061327f57607f821691505b6020821081141561329357613292613238565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132f5602c83612b74565b915061330082613299565b604082019050919050565b60006020820190508181036000830152613324816132e8565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613387602183612b74565b91506133928261332b565b604082019050919050565b600060208201905081810360008301526133b68161337a565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613419603883612b74565b9150613424826133bd565b604082019050919050565b600060208201905081810360008301526134488161340c565b9050919050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b6000613485600983612b74565b91506134908261344f565b602082019050919050565b600060208201905081810360008301526134b481613478565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613517603183612b74565b9150613522826134bb565b604082019050919050565b600060208201905081810360008301526135468161350a565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b6000613583601683612b74565b915061358e8261354d565b602082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061362282612a58565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613655576136546135e8565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613696602083612b74565b91506136a182613660565b602082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b6000613702601783612b74565b915061370d826136cc565b602082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613794602983612b74565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613826602a83612b74565b9150613831826137ca565b604082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613892601083612b74565b915061389d8261385c565b602082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b7f4d696e74656420616d6f756e742073686f756c6420626520706f736974697665600082015250565b60006138fe602083612b74565b9150613909826138c8565b602082019050919050565b6000602082019050818103600083015261392d816138f1565b9050919050565b600061393f82612a58565b915061394a83612a58565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561397f5761397e6135e8565b5b828201905092915050565b7f5468652072657175657374656420616d6f756e7420657863656564732074686560008201527f2072656d61696e696e6720737570706c79000000000000000000000000000000602082015250565b60006139e6603183612b74565b91506139f18261398a565b604082019050919050565b60006020820190508181036000830152613a15816139d9565b9050919050565b6000613a2782612a58565b9150613a3283612a58565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a6b57613a6a6135e8565b5b828202905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613aac601983612b74565b9150613ab782613a76565b602082019050919050565b60006020820190508181036000830152613adb81613a9f565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b3e602183612b74565b9150613b4982613ae2565b604082019050919050565b60006020820190508181036000830152613b6d81613b31565b9050919050565b600081905092915050565b6000613b8a82612b69565b613b948185613b74565b9350613ba4818560208601612b85565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613be6600583613b74565b9150613bf182613bb0565b600582019050919050565b6000613c088285613b7f565b9150613c148284613b7f565b9150613c1f82613bd9565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c87602683612b74565b9150613c9282613c2b565b604082019050919050565b60006020820190508181036000830152613cb681613c7a565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060008201527f7368617265730000000000000000000000000000000000000000000000000000602082015250565b6000613d19602683612b74565b9150613d2482613cbd565b604082019050919050565b60006020820190508181036000830152613d4881613d0c565b9050919050565b7f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060008201527f647565207061796d656e74000000000000000000000000000000000000000000602082015250565b6000613dab602b83612b74565b9150613db682613d4f565b604082019050919050565b60006020820190508181036000830152613dda81613d9e565b9050919050565b6000819050919050565b6000613e06613e01613dfc84612a17565b613de1565b612a17565b9050919050565b6000613e1882613deb565b9050919050565b6000613e2a82613e0d565b9050919050565b613e3a81613e1f565b82525050565b6000604082019050613e556000830185613e31565b613e626020830184612a62565b9392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ec5602c83612b74565b9150613ed082613e69565b604082019050919050565b60006020820190508181036000830152613ef481613eb8565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613f57602983612b74565b9150613f6282613efb565b604082019050919050565b60006020820190508181036000830152613f8681613f4a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613fe9602483612b74565b9150613ff482613f8d565b604082019050919050565b6000602082019050818103600083015261401881613fdc565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614055601483612b74565b91506140608261401f565b602082019050919050565b6000602082019050818103600083015261408481614048565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006140e7603283612b74565b91506140f28261408b565b604082019050919050565b60006020820190508181036000830152614116816140da565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061415782612a58565b915061416283612a58565b9250826141725761417161411d565b5b828204905092915050565b600061418882612a58565b915061419383612a58565b9250828210156141a6576141a56135e8565b5b828203905092915050565b60006141bc82612a58565b91506141c783612a58565b9250826141d7576141d661411d565b5b828206905092915050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614218601d83612b74565b9150614223826141e2565b602082019050919050565b600060208201905081810360008301526142478161420b565b9050919050565b600081905092915050565b50565b600061426960008361424e565b915061427482614259565b600082019050919050565b600061428a8261425c565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006142f0603a83612b74565b91506142fb82614294565b604082019050919050565b6000602082019050818103600083015261431f816142e3565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061434d82614326565b6143578185614331565b9350614367818560208601612b85565b61437081612bb8565b840191505092915050565b60006080820190506143906000830187612a49565b61439d6020830186612a49565b6143aa6040830185612a62565b81810360608301526143bc8184614342565b905095945050505050565b6000815190506143d681612ada565b92915050565b6000602082840312156143f2576143f1612aa4565b5b6000614400848285016143c7565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061443f602083612b74565b915061444a82614409565b602082019050919050565b6000602082019050818103600083015261446e81614432565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006144ab601c83612b74565b91506144b682614475565b602082019050919050565b600060208201905081810360008301526144da8161449e565b905091905056fea2646970667358221220c762015a2243a868ce7970f1107cb0912d9309c9e77610a028586815253af4df64736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000097265706c6163656d65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009d5025b327e6b863e5050141c987d988c07fd8b2000000000000000000000000f4a9d47f9322595d60b23b55d558c3d996b2551000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000057000000000000000000000000000000000000000000000000000000000000000d

-----Decoded View---------------
Arg [0] : _initBaseURI (string): replaceme
Arg [1] : payees (address[]): 0x9D5025B327E6B863E5050141C987d988c07fd8B2,0xf4A9d47F9322595d60B23B55d558C3d996b25510
Arg [2] : shares (uint256[]): 87,13

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 7265706c6163656d650000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 0000000000000000000000009d5025b327e6b863e5050141c987d988c07fd8b2
Arg [7] : 000000000000000000000000f4a9d47f9322595d60b23b55d558c3d996b25510
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000057
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000d


Deployed Bytecode Sourcemap

39078:1938:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36180:40;36196:12;:10;:12::i;:::-;36210:9;36180:40;;;;;;;:::i;:::-;;;;;;;;39078:1938;;;;;29622:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23713:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24347:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23929:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30783:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40850:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25045:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29853:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36311:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40775:67;;;;;;;;;;;;;:::i;:::-;;25390:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30899:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40592:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32110:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23468:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23040:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2735:94;;;;;;;;;;;;;:::i;:::-;;40704:63;;;;;;;;;;;;;:::i;:::-;;30359:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37086:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2084:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23819:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36886:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39593:506;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24574:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25581:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40231:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36682:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36496:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24875:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2984:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;933:98;986:7;1013:10;1006:17;;933:98;:::o;29622:225::-;29725:4;29764:35;29749:50;;;:11;:50;;;;:90;;;;29803:36;29827:11;29803:23;:36::i;:::-;29749:90;29742:97;;29622:225;;;:::o;23713:100::-;23767:13;23800:5;23793:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23713:100;:::o;24347:221::-;24423:7;24451:16;24459:7;24451;:16::i;:::-;24443:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24536:15;:24;24552:7;24536:24;;;;;;;;;;;;;;;;;;;;;24529:31;;24347:221;;;:::o;23929:412::-;24010:13;24026:24;24042:7;24026:15;:24::i;:::-;24010:40;;24075:5;24069:11;;:2;:11;;;;24061:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24169:5;24153:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24178:37;24195:5;24202:12;:10;:12::i;:::-;24178:16;:37::i;:::-;24153:62;24131:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24312:21;24321:2;24325:7;24312:8;:21::i;:::-;23999:342;23929:412;;:::o;30783:110::-;30844:7;30871;:14;;;;30864:21;;30783:110;:::o;40850:163::-;40941:7;40927:21;;:10;:21;;;40919:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;40973:32;40997:7;40973:23;:32::i;:::-;40850:163;:::o;25045:339::-;25240:41;25259:12;:10;:12::i;:::-;25273:7;25240:18;:41::i;:::-;25232:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25348:28;25358:4;25364:2;25368:7;25348:9;:28::i;:::-;25045:339;;;:::o;29853:500::-;29942:15;29986:24;30004:5;29986:17;:24::i;:::-;29978:5;:32;29970:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30048:10;30074:6;30069:226;30086:7;:14;;;;30082:1;:18;30069:226;;;30135:7;30143:1;30135:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30126:19;;:5;:19;;;30122:162;;;30179:5;30170;:14;30166:102;;;30215:1;30208:8;;;;;;30166:102;30261:7;;;;:::i;:::-;;;30122:162;30102:3;;;;:::i;:::-;;;30069:226;;;;30313:5;30305:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;29959:394;29853:500;;;;;:::o;36311:91::-;36355:7;36382:12;;36375:19;;36311:91;:::o;40775:67::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40824:10:::1;:8;:10::i;:::-;40775:67::o:0;25390:185::-;25528:39;25545:4;25551:2;25555:7;25528:39;;;;;;;;;;;;:16;:39::i;:::-;25390:185;;;:::o;30899:194::-;30974:7;31010:24;:22;:24::i;:::-;31002:5;:32;30994:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31080:5;31073:12;;30899:194;;;:::o;40592:104::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40677:11:::1;40667:7;:21;;;;;;;;;;;;:::i;:::-;;40592:104:::0;:::o;32110:86::-;32157:4;32181:7;;;;;;;;;;;32174:14;;32110:86;:::o;23468:239::-;23540:7;23560:13;23576:7;23584;23576:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23560:32;;23628:1;23611:19;;:5;:19;;;;23603:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23694:5;23687:12;;;23468:239;;;:::o;23040:422::-;23112:7;23157:1;23140:19;;:5;:19;;;;23132:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23217:10;23242:11;23256:7;:14;;;;23242:28;;23286:6;23281:127;23302:6;23298:1;:10;23281:127;;;23343:7;23351:1;23343:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23334:19;;:5;:19;;;23330:67;;;23374:7;;;;:::i;:::-;;;23330:67;23310:3;;;;:::i;:::-;;;23281:127;;;;23418:13;;;23449:5;23442:12;;;;23040:422;;;:::o;2735:94::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2800:21:::1;2818:1;2800:9;:21::i;:::-;2735:94::o:0;40704:63::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40751:8:::1;:6;:8::i;:::-;40704:63::o:0;30359:418::-;30418:16;30459:24;30477:5;30459:17;:24::i;:::-;30455:1;:28;30447:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30521:18;30542:16;30552:5;30542:9;:16::i;:::-;30521:37;;30569:25;30611:10;30597:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30569:53;;30638:9;30633:111;30657:10;30653:1;:14;30633:111;;;30703:29;30723:5;30730:1;30703:19;:29::i;:::-;30689:8;30698:1;30689:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;30669:3;;;;;:::i;:::-;;;;30633:111;;;;30761:8;30754:15;;;;30359:418;;;:::o;37086:100::-;37137:7;37164;37172:5;37164:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37157:21;;37086:100;;;:::o;2084:87::-;2130:7;2157:6;;;;;;;;;;;2150:13;;2084:87;:::o;23819:104::-;23875:13;23908:7;23901:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23819:104;:::o;36886:109::-;36942:7;36969:9;:18;36979:7;36969:18;;;;;;;;;;;;;;;;36962:25;;36886:109;;;:::o;39593:506::-;32436:8;:6;:8::i;:::-;32435:9;32427:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39670:19:::1;39692:13;:11;:13::i;:::-;39670:35;;39738:1;39724:11;:15;39716:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39250:5;39810:11;39796;:25;;;;:::i;:::-;:39;;39788:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;39929:11;39922:4;;:18;;;;:::i;:::-;39909:9;:31;;39901:40;;;::::0;::::1;;39959:9;39954:107;39978:11;39974:1;:15;39954:107;;;40011:38;40021:10;40047:1;40033:11;:15;;;;:::i;:::-;40011:9;:38::i;:::-;39991:3;;;;;:::i;:::-;;;;39954:107;;;;40073:18;;;39659:440;39593:506:::0;:::o;24574:295::-;24689:12;:10;:12::i;:::-;24677:24;;:8;:24;;;;24669:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24789:8;24744:18;:32;24763:12;:10;:12::i;:::-;24744:32;;;;;;;;;;;;;;;:42;24777:8;24744:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24842:8;24813:48;;24828:12;:10;:12::i;:::-;24813:48;;;24852:8;24813:48;;;;;;:::i;:::-;;;;;;;;24574:295;;:::o;25581:328::-;25756:41;25775:12;:10;:12::i;:::-;25789:7;25756:18;:41::i;:::-;25748:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25862:39;25876:4;25882:2;25886:7;25895:5;25862:13;:39::i;:::-;25581:328;;;;:::o;40231:353::-;40307:13;40341:17;40349:8;40341:7;:17::i;:::-;40333:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40407:28;40438:10;:8;:10::i;:::-;40407:41;;40497:1;40472:14;40466:28;:32;:110;;;;;;;;;;;;;;;;;40525:14;40541:19;:8;:17;:19::i;:::-;40508:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40466:110;40459:117;;;40231:353;;;:::o;36682:105::-;36736:7;36763;:16;36771:7;36763:16;;;;;;;;;;;;;;;;36756:23;;36682:105;;;:::o;36496:95::-;36542:7;36569:14;;36562:21;;36496:95;:::o;24875:164::-;24972:4;24996:18;:25;25015:5;24996:25;;;;;;;;;;;;;;;:35;25022:8;24996:35;;;;;;;;;;;;;;;;;;;;;;;;;24989:42;;24875:164;;;;:::o;2984:192::-;2315:12;:10;:12::i;:::-;2304:23;;:7;:5;:7::i;:::-;:23;;;2296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3093:1:::1;3073:22;;:8;:22;;;;3065:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3149:19;3159:8;3149:9;:19::i;:::-;2984:192:::0;:::o;22741:293::-;22843:4;22891:25;22876:40;;;:11;:40;;;;:101;;;;22944:33;22929:48;;;:11;:48;;;;22876:101;:150;;;;22990:36;23014:11;22990:23;:36::i;:::-;22876:150;22860:166;;22741:293;;;:::o;26236:155::-;26301:4;26335:7;:14;;;;26325:7;:24;:58;;;;;26381:1;26353:30;;:7;26361;26353:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;26325:58;26318:65;;26236:155;;;:::o;28409:175::-;28511:2;28484:15;:24;28500:7;28484:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28568:7;28564:2;28529:47;;28538:24;28554:7;28538:15;:24::i;:::-;28529:47;;;;;;;;;;;;28409:175;;:::o;37386:566::-;37481:1;37462:7;:16;37470:7;37462:16;;;;;;;;;;;;;;;;:20;37454:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;37538:21;37586:15;:13;:15::i;:::-;37562:21;:39;;;;:::i;:::-;37538:63;;37612:15;37630:58;37646:7;37655:13;37670:17;37679:7;37670:8;:17::i;:::-;37630:15;:58::i;:::-;37612:76;;37720:1;37709:7;:12;;37701:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37804:7;37782:9;:18;37792:7;37782:18;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;37840:7;37822:14;;:25;;;;;;;:::i;:::-;;;;;;;;37860:35;37878:7;37887;37860:17;:35::i;:::-;37911:33;37927:7;37936;37911:33;;;;;;;:::i;:::-;;;;;;;;37443:509;;37386:566;:::o;26397:349::-;26490:4;26515:16;26523:7;26515;:16::i;:::-;26507:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26591:13;26607:24;26623:7;26607:15;:24::i;:::-;26591:40;;26661:5;26650:16;;:7;:16;;;:51;;;;26694:7;26670:31;;:20;26682:7;26670:11;:20::i;:::-;:31;;;26650:51;:87;;;;26705:32;26722:5;26729:7;26705:16;:32::i;:::-;26650:87;26642:96;;;26397:349;;;;:::o;27886:517::-;28046:4;28018:32;;:24;28034:7;28018:15;:24::i;:::-;:32;;;28010:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;28129:1;28115:16;;:2;:16;;;;28107:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;28185:39;28206:4;28212:2;28216:7;28185:20;:39::i;:::-;28289:29;28306:1;28310:7;28289:8;:29::i;:::-;28348:2;28329:7;28337;28329:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28387:7;28383:2;28368:27;;28377:4;28368:27;;;;;;;;;;;;27886:517;;;:::o;33169:120::-;32713:8;:6;:8::i;:::-;32705:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33238:5:::1;33228:7;;:15;;;;;;;;;;;;;;;;;;33259:22;33268:12;:10;:12::i;:::-;33259:22;;;;;;:::i;:::-;;;;;;;;33169:120::o:0;3184:173::-;3240:16;3259:6;;;;;;;;;;;3240:25;;3285:8;3276:6;;:17;;;;;;;;;;;;;;;;;;3340:8;3309:40;;3330:8;3309:40;;;;;;;;;;;;3229:128;3184:173;:::o;32910:118::-;32436:8;:6;:8::i;:::-;32435:9;32427:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32980:4:::1;32970:7;;:14;;;;;;;;;;;;;;;;;;33000:20;33007:12;:10;:12::i;:::-;33000:20;;;;;;:::i;:::-;;;;;;;;32910:118::o:0;26752:110::-;26828:26;26838:2;26842:7;26828:26;;;;;;;;;;;;:9;:26::i;:::-;26752:110;;:::o;25915:315::-;26072:28;26082:4;26088:2;26092:7;26072:9;:28::i;:::-;26119:48;26142:4;26148:2;26152:7;26161:5;26119:22;:48::i;:::-;26111:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25915:315;;;;:::o;40124:99::-;40175:13;40208:7;40201:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40124:99;:::o;3617:723::-;3673:13;3903:1;3894:5;:10;3890:53;;;3921:10;;;;;;;;;;;;;;;;;;;;;3890:53;3953:12;3968:5;3953:20;;3984:14;4009:78;4024:1;4016:4;:9;4009:78;;4042:8;;;;;:::i;:::-;;;;4073:2;4065:10;;;;;:::i;:::-;;;4009:78;;;4097:19;4129:6;4119:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4097:39;;4147:154;4163:1;4154:5;:10;4147:154;;4191:1;4181:11;;;;;:::i;:::-;;;4258:2;4250:5;:10;;;;:::i;:::-;4237:2;:24;;;;:::i;:::-;4224:39;;4207:6;4214;4207:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4287:2;4278:11;;;;;:::i;:::-;;;4147:154;;;4325:6;4311:21;;;;;3617:723;;;;:::o;22092:157::-;22177:4;22216:25;22201:40;;;:11;:40;;;;22194:47;;22092:157;;;:::o;38130:248::-;38276:7;38355:15;38340:12;;38320:7;:16;38328:7;38320:16;;;;;;;;;;;;;;;;38304:13;:32;;;;:::i;:::-;38303:49;;;;:::i;:::-;:67;;;;:::i;:::-;38296:74;;38130:248;;;;;:::o;15358:317::-;15473:6;15448:21;:31;;15440:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15527:12;15545:9;:14;;15567:6;15545:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15526:52;;;15597:7;15589:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;15429:246;15358:317;;:::o;29395:126::-;;;;:::o;26868:321::-;26998:18;27004:2;27008:7;26998:5;:18::i;:::-;27049:54;27080:1;27084:2;27088:7;27097:5;27049:22;:54::i;:::-;27027:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26868:321;;;:::o;28590:799::-;28745:4;28766:15;:2;:13;;;:15::i;:::-;28762:620;;;28818:2;28802:36;;;28839:12;:10;:12::i;:::-;28853:4;28859:7;28868:5;28802:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28798:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29061:1;29044:6;:13;:18;29040:272;;;29087:60;;;;;;;;;;:::i;:::-;;;;;;;;29040:272;29262:6;29256:13;29247:6;29243:2;29239:15;29232:38;28798:529;28935:41;;;28925:51;;;:6;:51;;;;28918:58;;;;;28762:620;29366:4;29359:11;;28590:799;;;;;;;:::o;27195:346::-;27289:1;27275:16;;:2;:16;;;;27267:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27348:16;27356:7;27348;:16::i;:::-;27347:17;27339:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27410:45;27439:1;27443:2;27447:7;27410:20;:45::i;:::-;27466:7;27479:2;27466:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27525:7;27521:2;27500:33;;27517:1;27500:33;;;;;;;;;;;;27195:346;;:::o;14036:387::-;14096:4;14304:12;14371:7;14359:20;14351:28;;14414:1;14407:4;:8;14400:15;;;14036:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:77::-;402:7;431:5;420:16;;365:77;;;:::o;448:118::-;535:24;553:5;535:24;:::i;:::-;530:3;523:37;448:118;;:::o;572:332::-;693:4;731:2;720:9;716:18;708:26;;744:71;812:1;801:9;797:17;788:6;744:71;:::i;:::-;825:72;893:2;882:9;878:18;869:6;825:72;:::i;:::-;572:332;;;;;:::o;910:75::-;943:6;976:2;970:9;960:19;;910:75;:::o;991:117::-;1100:1;1097;1090:12;1114:117;1223:1;1220;1213:12;1237:149;1273:7;1313:66;1306:5;1302:78;1291:89;;1237:149;;;:::o;1392:120::-;1464:23;1481:5;1464:23;:::i;:::-;1457:5;1454:34;1444:62;;1502:1;1499;1492:12;1444:62;1392:120;:::o;1518:137::-;1563:5;1601:6;1588:20;1579:29;;1617:32;1643:5;1617:32;:::i;:::-;1518:137;;;;:::o;1661:327::-;1719:6;1768:2;1756:9;1747:7;1743:23;1739:32;1736:119;;;1774:79;;:::i;:::-;1736:119;1894:1;1919:52;1963:7;1954:6;1943:9;1939:22;1919:52;:::i;:::-;1909:62;;1865:116;1661:327;;;;:::o;1994:90::-;2028:7;2071:5;2064:13;2057:21;2046:32;;1994:90;;;:::o;2090:109::-;2171:21;2186:5;2171:21;:::i;:::-;2166:3;2159:34;2090:109;;:::o;2205:210::-;2292:4;2330:2;2319:9;2315:18;2307:26;;2343:65;2405:1;2394:9;2390:17;2381:6;2343:65;:::i;:::-;2205:210;;;;:::o;2421:99::-;2473:6;2507:5;2501:12;2491:22;;2421:99;;;:::o;2526:169::-;2610:11;2644:6;2639:3;2632:19;2684:4;2679:3;2675:14;2660:29;;2526:169;;;;:::o;2701:307::-;2769:1;2779:113;2793:6;2790:1;2787:13;2779:113;;;2878:1;2873:3;2869:11;2863:18;2859:1;2854:3;2850:11;2843:39;2815:2;2812:1;2808:10;2803:15;;2779:113;;;2910:6;2907:1;2904:13;2901:101;;;2990:1;2981:6;2976:3;2972:16;2965:27;2901:101;2750:258;2701:307;;;:::o;3014:102::-;3055:6;3106:2;3102:7;3097:2;3090:5;3086:14;3082:28;3072:38;;3014:102;;;:::o;3122:364::-;3210:3;3238:39;3271:5;3238:39;:::i;:::-;3293:71;3357:6;3352:3;3293:71;:::i;:::-;3286:78;;3373:52;3418:6;3413:3;3406:4;3399:5;3395:16;3373:52;:::i;:::-;3450:29;3472:6;3450:29;:::i;:::-;3445:3;3441:39;3434:46;;3214:272;3122:364;;;;:::o;3492:313::-;3605:4;3643:2;3632:9;3628:18;3620:26;;3692:9;3686:4;3682:20;3678:1;3667:9;3663:17;3656:47;3720:78;3793:4;3784:6;3720:78;:::i;:::-;3712:86;;3492:313;;;;:::o;3811:122::-;3884:24;3902:5;3884:24;:::i;:::-;3877:5;3874:35;3864:63;;3923:1;3920;3913:12;3864:63;3811:122;:::o;3939:139::-;3985:5;4023:6;4010:20;4001:29;;4039:33;4066:5;4039:33;:::i;:::-;3939:139;;;;:::o;4084:329::-;4143:6;4192:2;4180:9;4171:7;4167:23;4163:32;4160:119;;;4198:79;;:::i;:::-;4160:119;4318:1;4343:53;4388:7;4379:6;4368:9;4364:22;4343:53;:::i;:::-;4333:63;;4289:117;4084:329;;;;:::o;4419:222::-;4512:4;4550:2;4539:9;4535:18;4527:26;;4563:71;4631:1;4620:9;4616:17;4607:6;4563:71;:::i;:::-;4419:222;;;;:::o;4647:122::-;4720:24;4738:5;4720:24;:::i;:::-;4713:5;4710:35;4700:63;;4759:1;4756;4749:12;4700:63;4647:122;:::o;4775:139::-;4821:5;4859:6;4846:20;4837:29;;4875:33;4902:5;4875:33;:::i;:::-;4775:139;;;;:::o;4920:474::-;4988:6;4996;5045:2;5033:9;5024:7;5020:23;5016:32;5013:119;;;5051:79;;:::i;:::-;5013:119;5171:1;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5142:117;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;4920:474;;;;;:::o;5400:222::-;5493:4;5531:2;5520:9;5516:18;5508:26;;5544:71;5612:1;5601:9;5597:17;5588:6;5544:71;:::i;:::-;5400:222;;;;:::o;5628:104::-;5673:7;5702:24;5720:5;5702:24;:::i;:::-;5691:35;;5628:104;;;:::o;5738:138::-;5819:32;5845:5;5819:32;:::i;:::-;5812:5;5809:43;5799:71;;5866:1;5863;5856:12;5799:71;5738:138;:::o;5882:155::-;5936:5;5974:6;5961:20;5952:29;;5990:41;6025:5;5990:41;:::i;:::-;5882:155;;;;:::o;6043:345::-;6110:6;6159:2;6147:9;6138:7;6134:23;6130:32;6127:119;;;6165:79;;:::i;:::-;6127:119;6285:1;6310:61;6363:7;6354:6;6343:9;6339:22;6310:61;:::i;:::-;6300:71;;6256:125;6043:345;;;;:::o;6394:619::-;6471:6;6479;6487;6536:2;6524:9;6515:7;6511:23;6507:32;6504:119;;;6542:79;;:::i;:::-;6504:119;6662:1;6687:53;6732:7;6723:6;6712:9;6708:22;6687:53;:::i;:::-;6677:63;;6633:117;6789:2;6815:53;6860:7;6851:6;6840:9;6836:22;6815:53;:::i;:::-;6805:63;;6760:118;6917:2;6943:53;6988:7;6979:6;6968:9;6964:22;6943:53;:::i;:::-;6933:63;;6888:118;6394:619;;;;;:::o;7019:117::-;7128:1;7125;7118:12;7142:117;7251:1;7248;7241:12;7265:180;7313:77;7310:1;7303:88;7410:4;7407:1;7400:15;7434:4;7431:1;7424:15;7451:281;7534:27;7556:4;7534:27;:::i;:::-;7526:6;7522:40;7664:6;7652:10;7649:22;7628:18;7616:10;7613:34;7610:62;7607:88;;;7675:18;;:::i;:::-;7607:88;7715:10;7711:2;7704:22;7494:238;7451:281;;:::o;7738:129::-;7772:6;7799:20;;:::i;:::-;7789:30;;7828:33;7856:4;7848:6;7828:33;:::i;:::-;7738:129;;;:::o;7873:308::-;7935:4;8025:18;8017:6;8014:30;8011:56;;;8047:18;;:::i;:::-;8011:56;8085:29;8107:6;8085:29;:::i;:::-;8077:37;;8169:4;8163;8159:15;8151:23;;7873:308;;;:::o;8187:154::-;8271:6;8266:3;8261;8248:30;8333:1;8324:6;8319:3;8315:16;8308:27;8187:154;;;:::o;8347:412::-;8425:5;8450:66;8466:49;8508:6;8466:49;:::i;:::-;8450:66;:::i;:::-;8441:75;;8539:6;8532:5;8525:21;8577:4;8570:5;8566:16;8615:3;8606:6;8601:3;8597:16;8594:25;8591:112;;;8622:79;;:::i;:::-;8591:112;8712:41;8746:6;8741:3;8736;8712:41;:::i;:::-;8431:328;8347:412;;;;;:::o;8779:340::-;8835:5;8884:3;8877:4;8869:6;8865:17;8861:27;8851:122;;8892:79;;:::i;:::-;8851:122;9009:6;8996:20;9034:79;9109:3;9101:6;9094:4;9086:6;9082:17;9034:79;:::i;:::-;9025:88;;8841:278;8779:340;;;;:::o;9125:509::-;9194:6;9243:2;9231:9;9222:7;9218:23;9214:32;9211:119;;;9249:79;;:::i;:::-;9211:119;9397:1;9386:9;9382:17;9369:31;9427:18;9419:6;9416:30;9413:117;;;9449:79;;:::i;:::-;9413:117;9554:63;9609:7;9600:6;9589:9;9585:22;9554:63;:::i;:::-;9544:73;;9340:287;9125:509;;;;:::o;9640:329::-;9699:6;9748:2;9736:9;9727:7;9723:23;9719:32;9716:119;;;9754:79;;:::i;:::-;9716:119;9874:1;9899:53;9944:7;9935:6;9924:9;9920:22;9899:53;:::i;:::-;9889:63;;9845:117;9640:329;;;;:::o;9975:114::-;10042:6;10076:5;10070:12;10060:22;;9975:114;;;:::o;10095:184::-;10194:11;10228:6;10223:3;10216:19;10268:4;10263:3;10259:14;10244:29;;10095:184;;;;:::o;10285:132::-;10352:4;10375:3;10367:11;;10405:4;10400:3;10396:14;10388:22;;10285:132;;;:::o;10423:108::-;10500:24;10518:5;10500:24;:::i;:::-;10495:3;10488:37;10423:108;;:::o;10537:179::-;10606:10;10627:46;10669:3;10661:6;10627:46;:::i;:::-;10705:4;10700:3;10696:14;10682:28;;10537:179;;;;:::o;10722:113::-;10792:4;10824;10819:3;10815:14;10807:22;;10722:113;;;:::o;10871:732::-;10990:3;11019:54;11067:5;11019:54;:::i;:::-;11089:86;11168:6;11163:3;11089:86;:::i;:::-;11082:93;;11199:56;11249:5;11199:56;:::i;:::-;11278:7;11309:1;11294:284;11319:6;11316:1;11313:13;11294:284;;;11395:6;11389:13;11422:63;11481:3;11466:13;11422:63;:::i;:::-;11415:70;;11508:60;11561:6;11508:60;:::i;:::-;11498:70;;11354:224;11341:1;11338;11334:9;11329:14;;11294:284;;;11298:14;11594:3;11587:10;;10995:608;;;10871:732;;;;:::o;11609:373::-;11752:4;11790:2;11779:9;11775:18;11767:26;;11839:9;11833:4;11829:20;11825:1;11814:9;11810:17;11803:47;11867:108;11970:4;11961:6;11867:108;:::i;:::-;11859:116;;11609:373;;;;:::o;11988:116::-;12058:21;12073:5;12058:21;:::i;:::-;12051:5;12048:32;12038:60;;12094:1;12091;12084:12;12038:60;11988:116;:::o;12110:133::-;12153:5;12191:6;12178:20;12169:29;;12207:30;12231:5;12207:30;:::i;:::-;12110:133;;;;:::o;12249:468::-;12314:6;12322;12371:2;12359:9;12350:7;12346:23;12342:32;12339:119;;;12377:79;;:::i;:::-;12339:119;12497:1;12522:53;12567:7;12558:6;12547:9;12543:22;12522:53;:::i;:::-;12512:63;;12468:117;12624:2;12650:50;12692:7;12683:6;12672:9;12668:22;12650:50;:::i;:::-;12640:60;;12595:115;12249:468;;;;;:::o;12723:307::-;12784:4;12874:18;12866:6;12863:30;12860:56;;;12896:18;;:::i;:::-;12860:56;12934:29;12956:6;12934:29;:::i;:::-;12926:37;;13018:4;13012;13008:15;13000:23;;12723:307;;;:::o;13036:410::-;13113:5;13138:65;13154:48;13195:6;13154:48;:::i;:::-;13138:65;:::i;:::-;13129:74;;13226:6;13219:5;13212:21;13264:4;13257:5;13253:16;13302:3;13293:6;13288:3;13284:16;13281:25;13278:112;;;13309:79;;:::i;:::-;13278:112;13399:41;13433:6;13428:3;13423;13399:41;:::i;:::-;13119:327;13036:410;;;;;:::o;13465:338::-;13520:5;13569:3;13562:4;13554:6;13550:17;13546:27;13536:122;;13577:79;;:::i;:::-;13536:122;13694:6;13681:20;13719:78;13793:3;13785:6;13778:4;13770:6;13766:17;13719:78;:::i;:::-;13710:87;;13526:277;13465:338;;;;:::o;13809:943::-;13904:6;13912;13920;13928;13977:3;13965:9;13956:7;13952:23;13948:33;13945:120;;;13984:79;;:::i;:::-;13945:120;14104:1;14129:53;14174:7;14165:6;14154:9;14150:22;14129:53;:::i;:::-;14119:63;;14075:117;14231:2;14257:53;14302:7;14293:6;14282:9;14278:22;14257:53;:::i;:::-;14247:63;;14202:118;14359:2;14385:53;14430:7;14421:6;14410:9;14406:22;14385:53;:::i;:::-;14375:63;;14330:118;14515:2;14504:9;14500:18;14487:32;14546:18;14538:6;14535:30;14532:117;;;14568:79;;:::i;:::-;14532:117;14673:62;14727:7;14718:6;14707:9;14703:22;14673:62;:::i;:::-;14663:72;;14458:287;13809:943;;;;;;;:::o;14758:474::-;14826:6;14834;14883:2;14871:9;14862:7;14858:23;14854:32;14851:119;;;14889:79;;:::i;:::-;14851:119;15009:1;15034:53;15079:7;15070:6;15059:9;15055:22;15034:53;:::i;:::-;15024:63;;14980:117;15136:2;15162:53;15207:7;15198:6;15187:9;15183:22;15162:53;:::i;:::-;15152:63;;15107:118;14758:474;;;;;:::o;15238:180::-;15286:77;15283:1;15276:88;15383:4;15380:1;15373:15;15407:4;15404:1;15397:15;15424:320;15468:6;15505:1;15499:4;15495:12;15485:22;;15552:1;15546:4;15542:12;15573:18;15563:81;;15629:4;15621:6;15617:17;15607:27;;15563:81;15691:2;15683:6;15680:14;15660:18;15657:38;15654:84;;;15710:18;;:::i;:::-;15654:84;15475:269;15424:320;;;:::o;15750:231::-;15890:34;15886:1;15878:6;15874:14;15867:58;15959:14;15954:2;15946:6;15942:15;15935:39;15750:231;:::o;15987:366::-;16129:3;16150:67;16214:2;16209:3;16150:67;:::i;:::-;16143:74;;16226:93;16315:3;16226:93;:::i;:::-;16344:2;16339:3;16335:12;16328:19;;15987:366;;;:::o;16359:419::-;16525:4;16563:2;16552:9;16548:18;16540:26;;16612:9;16606:4;16602:20;16598:1;16587:9;16583:17;16576:47;16640:131;16766:4;16640:131;:::i;:::-;16632:139;;16359:419;;;:::o;16784:220::-;16924:34;16920:1;16912:6;16908:14;16901:58;16993:3;16988:2;16980:6;16976:15;16969:28;16784:220;:::o;17010:366::-;17152:3;17173:67;17237:2;17232:3;17173:67;:::i;:::-;17166:74;;17249:93;17338:3;17249:93;:::i;:::-;17367:2;17362:3;17358:12;17351:19;;17010:366;;;:::o;17382:419::-;17548:4;17586:2;17575:9;17571:18;17563:26;;17635:9;17629:4;17625:20;17621:1;17610:9;17606:17;17599:47;17663:131;17789:4;17663:131;:::i;:::-;17655:139;;17382:419;;;:::o;17807:243::-;17947:34;17943:1;17935:6;17931:14;17924:58;18016:26;18011:2;18003:6;17999:15;17992:51;17807:243;:::o;18056:366::-;18198:3;18219:67;18283:2;18278:3;18219:67;:::i;:::-;18212:74;;18295:93;18384:3;18295:93;:::i;:::-;18413:2;18408:3;18404:12;18397:19;;18056:366;;;:::o;18428:419::-;18594:4;18632:2;18621:9;18617:18;18609:26;;18681:9;18675:4;18671:20;18667:1;18656:9;18652:17;18645:47;18709:131;18835:4;18709:131;:::i;:::-;18701:139;;18428:419;;;:::o;18853:159::-;18993:11;18989:1;18981:6;18977:14;18970:35;18853:159;:::o;19018:365::-;19160:3;19181:66;19245:1;19240:3;19181:66;:::i;:::-;19174:73;;19256:93;19345:3;19256:93;:::i;:::-;19374:2;19369:3;19365:12;19358:19;;19018:365;;;:::o;19389:419::-;19555:4;19593:2;19582:9;19578:18;19570:26;;19642:9;19636:4;19632:20;19628:1;19617:9;19613:17;19606:47;19670:131;19796:4;19670:131;:::i;:::-;19662:139;;19389:419;;;:::o;19814:236::-;19954:34;19950:1;19942:6;19938:14;19931:58;20023:19;20018:2;20010:6;20006:15;19999:44;19814:236;:::o;20056:366::-;20198:3;20219:67;20283:2;20278:3;20219:67;:::i;:::-;20212:74;;20295:93;20384:3;20295:93;:::i;:::-;20413:2;20408:3;20404:12;20397:19;;20056:366;;;:::o;20428:419::-;20594:4;20632:2;20621:9;20617:18;20609:26;;20681:9;20675:4;20671:20;20667:1;20656:9;20652:17;20645:47;20709:131;20835:4;20709:131;:::i;:::-;20701:139;;20428:419;;;:::o;20853:172::-;20993:24;20989:1;20981:6;20977:14;20970:48;20853:172;:::o;21031:366::-;21173:3;21194:67;21258:2;21253:3;21194:67;:::i;:::-;21187:74;;21270:93;21359:3;21270:93;:::i;:::-;21388:2;21383:3;21379:12;21372:19;;21031:366;;;:::o;21403:419::-;21569:4;21607:2;21596:9;21592:18;21584:26;;21656:9;21650:4;21646:20;21642:1;21631:9;21627:17;21620:47;21684:131;21810:4;21684:131;:::i;:::-;21676:139;;21403:419;;;:::o;21828:180::-;21876:77;21873:1;21866:88;21973:4;21970:1;21963:15;21997:4;21994:1;21987:15;22014:180;22062:77;22059:1;22052:88;22159:4;22156:1;22149:15;22183:4;22180:1;22173:15;22200:233;22239:3;22262:24;22280:5;22262:24;:::i;:::-;22253:33;;22308:66;22301:5;22298:77;22295:103;;;22378:18;;:::i;:::-;22295:103;22425:1;22418:5;22414:13;22407:20;;22200:233;;;:::o;22439:182::-;22579:34;22575:1;22567:6;22563:14;22556:58;22439:182;:::o;22627:366::-;22769:3;22790:67;22854:2;22849:3;22790:67;:::i;:::-;22783:74;;22866:93;22955:3;22866:93;:::i;:::-;22984:2;22979:3;22975:12;22968:19;;22627:366;;;:::o;22999:419::-;23165:4;23203:2;23192:9;23188:18;23180:26;;23252:9;23246:4;23242:20;23238:1;23227:9;23223:17;23216:47;23280:131;23406:4;23280:131;:::i;:::-;23272:139;;22999:419;;;:::o;23424:173::-;23564:25;23560:1;23552:6;23548:14;23541:49;23424:173;:::o;23603:366::-;23745:3;23766:67;23830:2;23825:3;23766:67;:::i;:::-;23759:74;;23842:93;23931:3;23842:93;:::i;:::-;23960:2;23955:3;23951:12;23944:19;;23603:366;;;:::o;23975:419::-;24141:4;24179:2;24168:9;24164:18;24156:26;;24228:9;24222:4;24218:20;24214:1;24203:9;24199:17;24192:47;24256:131;24382:4;24256:131;:::i;:::-;24248:139;;23975:419;;;:::o;24400:228::-;24540:34;24536:1;24528:6;24524:14;24517:58;24609:11;24604:2;24596:6;24592:15;24585:36;24400:228;:::o;24634:366::-;24776:3;24797:67;24861:2;24856:3;24797:67;:::i;:::-;24790:74;;24873:93;24962:3;24873:93;:::i;:::-;24991:2;24986:3;24982:12;24975:19;;24634:366;;;:::o;25006:419::-;25172:4;25210:2;25199:9;25195:18;25187:26;;25259:9;25253:4;25249:20;25245:1;25234:9;25230:17;25223:47;25287:131;25413:4;25287:131;:::i;:::-;25279:139;;25006:419;;;:::o;25431:229::-;25571:34;25567:1;25559:6;25555:14;25548:58;25640:12;25635:2;25627:6;25623:15;25616:37;25431:229;:::o;25666:366::-;25808:3;25829:67;25893:2;25888:3;25829:67;:::i;:::-;25822:74;;25905:93;25994:3;25905:93;:::i;:::-;26023:2;26018:3;26014:12;26007:19;;25666:366;;;:::o;26038:419::-;26204:4;26242:2;26231:9;26227:18;26219:26;;26291:9;26285:4;26281:20;26277:1;26266:9;26262:17;26255:47;26319:131;26445:4;26319:131;:::i;:::-;26311:139;;26038:419;;;:::o;26463:166::-;26603:18;26599:1;26591:6;26587:14;26580:42;26463:166;:::o;26635:366::-;26777:3;26798:67;26862:2;26857:3;26798:67;:::i;:::-;26791:74;;26874:93;26963:3;26874:93;:::i;:::-;26992:2;26987:3;26983:12;26976:19;;26635:366;;;:::o;27007:419::-;27173:4;27211:2;27200:9;27196:18;27188:26;;27260:9;27254:4;27250:20;27246:1;27235:9;27231:17;27224:47;27288:131;27414:4;27288:131;:::i;:::-;27280:139;;27007:419;;;:::o;27432:182::-;27572:34;27568:1;27560:6;27556:14;27549:58;27432:182;:::o;27620:366::-;27762:3;27783:67;27847:2;27842:3;27783:67;:::i;:::-;27776:74;;27859:93;27948:3;27859:93;:::i;:::-;27977:2;27972:3;27968:12;27961:19;;27620:366;;;:::o;27992:419::-;28158:4;28196:2;28185:9;28181:18;28173:26;;28245:9;28239:4;28235:20;28231:1;28220:9;28216:17;28209:47;28273:131;28399:4;28273:131;:::i;:::-;28265:139;;27992:419;;;:::o;28417:305::-;28457:3;28476:20;28494:1;28476:20;:::i;:::-;28471:25;;28510:20;28528:1;28510:20;:::i;:::-;28505:25;;28664:1;28596:66;28592:74;28589:1;28586:81;28583:107;;;28670:18;;:::i;:::-;28583:107;28714:1;28711;28707:9;28700:16;;28417:305;;;;:::o;28728:236::-;28868:34;28864:1;28856:6;28852:14;28845:58;28937:19;28932:2;28924:6;28920:15;28913:44;28728:236;:::o;28970:366::-;29112:3;29133:67;29197:2;29192:3;29133:67;:::i;:::-;29126:74;;29209:93;29298:3;29209:93;:::i;:::-;29327:2;29322:3;29318:12;29311:19;;28970:366;;;:::o;29342:419::-;29508:4;29546:2;29535:9;29531:18;29523:26;;29595:9;29589:4;29585:20;29581:1;29570:9;29566:17;29559:47;29623:131;29749:4;29623:131;:::i;:::-;29615:139;;29342:419;;;:::o;29767:348::-;29807:7;29830:20;29848:1;29830:20;:::i;:::-;29825:25;;29864:20;29882:1;29864:20;:::i;:::-;29859:25;;30052:1;29984:66;29980:74;29977:1;29974:81;29969:1;29962:9;29955:17;29951:105;29948:131;;;30059:18;;:::i;:::-;29948:131;30107:1;30104;30100:9;30089:20;;29767:348;;;;:::o;30121:175::-;30261:27;30257:1;30249:6;30245:14;30238:51;30121:175;:::o;30302:366::-;30444:3;30465:67;30529:2;30524:3;30465:67;:::i;:::-;30458:74;;30541:93;30630:3;30541:93;:::i;:::-;30659:2;30654:3;30650:12;30643:19;;30302:366;;;:::o;30674:419::-;30840:4;30878:2;30867:9;30863:18;30855:26;;30927:9;30921:4;30917:20;30913:1;30902:9;30898:17;30891:47;30955:131;31081:4;30955:131;:::i;:::-;30947:139;;30674:419;;;:::o;31099:220::-;31239:34;31235:1;31227:6;31223:14;31216:58;31308:3;31303:2;31295:6;31291:15;31284:28;31099:220;:::o;31325:366::-;31467:3;31488:67;31552:2;31547:3;31488:67;:::i;:::-;31481:74;;31564:93;31653:3;31564:93;:::i;:::-;31682:2;31677:3;31673:12;31666:19;;31325:366;;;:::o;31697:419::-;31863:4;31901:2;31890:9;31886:18;31878:26;;31950:9;31944:4;31940:20;31936:1;31925:9;31921:17;31914:47;31978:131;32104:4;31978:131;:::i;:::-;31970:139;;31697:419;;;:::o;32122:148::-;32224:11;32261:3;32246:18;;32122:148;;;;:::o;32276:377::-;32382:3;32410:39;32443:5;32410:39;:::i;:::-;32465:89;32547:6;32542:3;32465:89;:::i;:::-;32458:96;;32563:52;32608:6;32603:3;32596:4;32589:5;32585:16;32563:52;:::i;:::-;32640:6;32635:3;32631:16;32624:23;;32386:267;32276:377;;;;:::o;32659:155::-;32799:7;32795:1;32787:6;32783:14;32776:31;32659:155;:::o;32820:400::-;32980:3;33001:84;33083:1;33078:3;33001:84;:::i;:::-;32994:91;;33094:93;33183:3;33094:93;:::i;:::-;33212:1;33207:3;33203:11;33196:18;;32820:400;;;:::o;33226:701::-;33507:3;33529:95;33620:3;33611:6;33529:95;:::i;:::-;33522:102;;33641:95;33732:3;33723:6;33641:95;:::i;:::-;33634:102;;33753:148;33897:3;33753:148;:::i;:::-;33746:155;;33918:3;33911:10;;33226:701;;;;;:::o;33933:225::-;34073:34;34069:1;34061:6;34057:14;34050:58;34142:8;34137:2;34129:6;34125:15;34118:33;33933:225;:::o;34164:366::-;34306:3;34327:67;34391:2;34386:3;34327:67;:::i;:::-;34320:74;;34403:93;34492:3;34403:93;:::i;:::-;34521:2;34516:3;34512:12;34505:19;;34164:366;;;:::o;34536:419::-;34702:4;34740:2;34729:9;34725:18;34717:26;;34789:9;34783:4;34779:20;34775:1;34764:9;34760:17;34753:47;34817:131;34943:4;34817:131;:::i;:::-;34809:139;;34536:419;;;:::o;34961:225::-;35101:34;35097:1;35089:6;35085:14;35078:58;35170:8;35165:2;35157:6;35153:15;35146:33;34961:225;:::o;35192:366::-;35334:3;35355:67;35419:2;35414:3;35355:67;:::i;:::-;35348:74;;35431:93;35520:3;35431:93;:::i;:::-;35549:2;35544:3;35540:12;35533:19;;35192:366;;;:::o;35564:419::-;35730:4;35768:2;35757:9;35753:18;35745:26;;35817:9;35811:4;35807:20;35803:1;35792:9;35788:17;35781:47;35845:131;35971:4;35845:131;:::i;:::-;35837:139;;35564:419;;;:::o;35989:230::-;36129:34;36125:1;36117:6;36113:14;36106:58;36198:13;36193:2;36185:6;36181:15;36174:38;35989:230;:::o;36225:366::-;36367:3;36388:67;36452:2;36447:3;36388:67;:::i;:::-;36381:74;;36464:93;36553:3;36464:93;:::i;:::-;36582:2;36577:3;36573:12;36566:19;;36225:366;;;:::o;36597:419::-;36763:4;36801:2;36790:9;36786:18;36778:26;;36850:9;36844:4;36840:20;36836:1;36825:9;36821:17;36814:47;36878:131;37004:4;36878:131;:::i;:::-;36870:139;;36597:419;;;:::o;37022:60::-;37050:3;37071:5;37064:12;;37022:60;;;:::o;37088:142::-;37138:9;37171:53;37189:34;37198:24;37216:5;37198:24;:::i;:::-;37189:34;:::i;:::-;37171:53;:::i;:::-;37158:66;;37088:142;;;:::o;37236:126::-;37286:9;37319:37;37350:5;37319:37;:::i;:::-;37306:50;;37236:126;;;:::o;37368:134::-;37426:9;37459:37;37490:5;37459:37;:::i;:::-;37446:50;;37368:134;;;:::o;37508:147::-;37603:45;37642:5;37603:45;:::i;:::-;37598:3;37591:58;37508:147;;:::o;37661:348::-;37790:4;37828:2;37817:9;37813:18;37805:26;;37841:79;37917:1;37906:9;37902:17;37893:6;37841:79;:::i;:::-;37930:72;37998:2;37987:9;37983:18;37974:6;37930:72;:::i;:::-;37661:348;;;;;:::o;38015:231::-;38155:34;38151:1;38143:6;38139:14;38132:58;38224:14;38219:2;38211:6;38207:15;38200:39;38015:231;:::o;38252:366::-;38394:3;38415:67;38479:2;38474:3;38415:67;:::i;:::-;38408:74;;38491:93;38580:3;38491:93;:::i;:::-;38609:2;38604:3;38600:12;38593:19;;38252:366;;;:::o;38624:419::-;38790:4;38828:2;38817:9;38813:18;38805:26;;38877:9;38871:4;38867:20;38863:1;38852:9;38848:17;38841:47;38905:131;39031:4;38905:131;:::i;:::-;38897:139;;38624:419;;;:::o;39049:228::-;39189:34;39185:1;39177:6;39173:14;39166:58;39258:11;39253:2;39245:6;39241:15;39234:36;39049:228;:::o;39283:366::-;39425:3;39446:67;39510:2;39505:3;39446:67;:::i;:::-;39439:74;;39522:93;39611:3;39522:93;:::i;:::-;39640:2;39635:3;39631:12;39624:19;;39283:366;;;:::o;39655:419::-;39821:4;39859:2;39848:9;39844:18;39836:26;;39908:9;39902:4;39898:20;39894:1;39883:9;39879:17;39872:47;39936:131;40062:4;39936:131;:::i;:::-;39928:139;;39655:419;;;:::o;40080:223::-;40220:34;40216:1;40208:6;40204:14;40197:58;40289:6;40284:2;40276:6;40272:15;40265:31;40080:223;:::o;40309:366::-;40451:3;40472:67;40536:2;40531:3;40472:67;:::i;:::-;40465:74;;40548:93;40637:3;40548:93;:::i;:::-;40666:2;40661:3;40657:12;40650:19;;40309:366;;;:::o;40681:419::-;40847:4;40885:2;40874:9;40870:18;40862:26;;40934:9;40928:4;40924:20;40920:1;40909:9;40905:17;40898:47;40962:131;41088:4;40962:131;:::i;:::-;40954:139;;40681:419;;;:::o;41106:170::-;41246:22;41242:1;41234:6;41230:14;41223:46;41106:170;:::o;41282:366::-;41424:3;41445:67;41509:2;41504:3;41445:67;:::i;:::-;41438:74;;41521:93;41610:3;41521:93;:::i;:::-;41639:2;41634:3;41630:12;41623:19;;41282:366;;;:::o;41654:419::-;41820:4;41858:2;41847:9;41843:18;41835:26;;41907:9;41901:4;41897:20;41893:1;41882:9;41878:17;41871:47;41935:131;42061:4;41935:131;:::i;:::-;41927:139;;41654:419;;;:::o;42079:237::-;42219:34;42215:1;42207:6;42203:14;42196:58;42288:20;42283:2;42275:6;42271:15;42264:45;42079:237;:::o;42322:366::-;42464:3;42485:67;42549:2;42544:3;42485:67;:::i;:::-;42478:74;;42561:93;42650:3;42561:93;:::i;:::-;42679:2;42674:3;42670:12;42663:19;;42322:366;;;:::o;42694:419::-;42860:4;42898:2;42887:9;42883:18;42875:26;;42947:9;42941:4;42937:20;42933:1;42922:9;42918:17;42911:47;42975:131;43101:4;42975:131;:::i;:::-;42967:139;;42694:419;;;:::o;43119:180::-;43167:77;43164:1;43157:88;43264:4;43261:1;43254:15;43288:4;43285:1;43278:15;43305:185;43345:1;43362:20;43380:1;43362:20;:::i;:::-;43357:25;;43396:20;43414:1;43396:20;:::i;:::-;43391:25;;43435:1;43425:35;;43440:18;;:::i;:::-;43425:35;43482:1;43479;43475:9;43470:14;;43305:185;;;;:::o;43496:191::-;43536:4;43556:20;43574:1;43556:20;:::i;:::-;43551:25;;43590:20;43608:1;43590:20;:::i;:::-;43585:25;;43629:1;43626;43623:8;43620:34;;;43634:18;;:::i;:::-;43620:34;43679:1;43676;43672:9;43664:17;;43496:191;;;;:::o;43693:176::-;43725:1;43742:20;43760:1;43742:20;:::i;:::-;43737:25;;43776:20;43794:1;43776:20;:::i;:::-;43771:25;;43815:1;43805:35;;43820:18;;:::i;:::-;43805:35;43861:1;43858;43854:9;43849:14;;43693:176;;;;:::o;43875:179::-;44015:31;44011:1;44003:6;43999:14;43992:55;43875:179;:::o;44060:366::-;44202:3;44223:67;44287:2;44282:3;44223:67;:::i;:::-;44216:74;;44299:93;44388:3;44299:93;:::i;:::-;44417:2;44412:3;44408:12;44401:19;;44060:366;;;:::o;44432:419::-;44598:4;44636:2;44625:9;44621:18;44613:26;;44685:9;44679:4;44675:20;44671:1;44660:9;44656:17;44649:47;44713:131;44839:4;44713:131;:::i;:::-;44705:139;;44432:419;;;:::o;44857:147::-;44958:11;44995:3;44980:18;;44857:147;;;;:::o;45010:114::-;;:::o;45130:398::-;45289:3;45310:83;45391:1;45386:3;45310:83;:::i;:::-;45303:90;;45402:93;45491:3;45402:93;:::i;:::-;45520:1;45515:3;45511:11;45504:18;;45130:398;;;:::o;45534:379::-;45718:3;45740:147;45883:3;45740:147;:::i;:::-;45733:154;;45904:3;45897:10;;45534:379;;;:::o;45919:245::-;46059:34;46055:1;46047:6;46043:14;46036:58;46128:28;46123:2;46115:6;46111:15;46104:53;45919:245;:::o;46170:366::-;46312:3;46333:67;46397:2;46392:3;46333:67;:::i;:::-;46326:74;;46409:93;46498:3;46409:93;:::i;:::-;46527:2;46522:3;46518:12;46511:19;;46170:366;;;:::o;46542:419::-;46708:4;46746:2;46735:9;46731:18;46723:26;;46795:9;46789:4;46785:20;46781:1;46770:9;46766:17;46759:47;46823:131;46949:4;46823:131;:::i;:::-;46815:139;;46542:419;;;:::o;46967:98::-;47018:6;47052:5;47046:12;47036:22;;46967:98;;;:::o;47071:168::-;47154:11;47188:6;47183:3;47176:19;47228:4;47223:3;47219:14;47204:29;;47071:168;;;;:::o;47245:360::-;47331:3;47359:38;47391:5;47359:38;:::i;:::-;47413:70;47476:6;47471:3;47413:70;:::i;:::-;47406:77;;47492:52;47537:6;47532:3;47525:4;47518:5;47514:16;47492:52;:::i;:::-;47569:29;47591:6;47569:29;:::i;:::-;47564:3;47560:39;47553:46;;47335:270;47245:360;;;;:::o;47611:640::-;47806:4;47844:3;47833:9;47829:19;47821:27;;47858:71;47926:1;47915:9;47911:17;47902:6;47858:71;:::i;:::-;47939:72;48007:2;47996:9;47992:18;47983:6;47939:72;:::i;:::-;48021;48089:2;48078:9;48074:18;48065:6;48021:72;:::i;:::-;48140:9;48134:4;48130:20;48125:2;48114:9;48110:18;48103:48;48168:76;48239:4;48230:6;48168:76;:::i;:::-;48160:84;;47611:640;;;;;;;:::o;48257:141::-;48313:5;48344:6;48338:13;48329:22;;48360:32;48386:5;48360:32;:::i;:::-;48257:141;;;;:::o;48404:349::-;48473:6;48522:2;48510:9;48501:7;48497:23;48493:32;48490:119;;;48528:79;;:::i;:::-;48490:119;48648:1;48673:63;48728:7;48719:6;48708:9;48704:22;48673:63;:::i;:::-;48663:73;;48619:127;48404:349;;;;:::o;48759:182::-;48899:34;48895:1;48887:6;48883:14;48876:58;48759:182;:::o;48947:366::-;49089:3;49110:67;49174:2;49169:3;49110:67;:::i;:::-;49103:74;;49186:93;49275:3;49186:93;:::i;:::-;49304:2;49299:3;49295:12;49288:19;;48947:366;;;:::o;49319:419::-;49485:4;49523:2;49512:9;49508:18;49500:26;;49572:9;49566:4;49562:20;49558:1;49547:9;49543:17;49536:47;49600:131;49726:4;49600:131;:::i;:::-;49592:139;;49319:419;;;:::o;49744:178::-;49884:30;49880:1;49872:6;49868:14;49861:54;49744:178;:::o;49928:366::-;50070:3;50091:67;50155:2;50150:3;50091:67;:::i;:::-;50084:74;;50167:93;50256:3;50167:93;:::i;:::-;50285:2;50280:3;50276:12;50269:19;;49928:366;;;:::o;50300:419::-;50466:4;50504:2;50493:9;50489:18;50481:26;;50553:9;50547:4;50543:20;50539:1;50528:9;50524:17;50517:47;50581:131;50707:4;50581:131;:::i;:::-;50573:139;;50300:419;;;:::o

Swarm Source

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

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