ETH Price: $3,457.79 (+1.26%)
Gas: 17 Gwei

Token

MetaB10nicVillains (B10NICV)
 

Overview

Max Total Supply

0 B10NICV

Holders

143

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 B10NICV
0x766fc0dd3efc2dc1058763209cae3776cedff047
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:
BionicNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-21
*/

// SPDX-License-Identifier: None

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

library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

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

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

abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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

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

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

contract BionicNFT is ERC721, Ownable {

    using SafeMath for uint256;
    using Address for uint256;
    using Counters for Counters.Counter;
        Counters.Counter private _tokenSupply;

    string private baseURI;
    string public baseExtension = ".json";
    string public notRevealedURI;

    uint256 public supplyLimit = 5449;
    uint256 public presaleMintPrice = 0.055 ether;
    uint256 public mintPrice = 0.08 ether;

    bytes32 private _merkleRoot;

    bool public presaleOpen = false;
    bool public mintOpen = false;
    bool public revealToken = false;

    mapping(address => uint256) private _royaltyShares;

    address[] private _royaltyAddresses = [
        0xF21d44bEB1687380D8E5E46dfDB1ec60FD282363, // Wallet 1 address
        0xcFeA01F7F051Fbddf7C09fdf84cf18BcA82A1F79, // Wallet 2 address t
        0x80c74CAA82864cd42c32c448F449070C5104D5B8, // Wallet 3 address s
        0x7F4a46Ae3Ca6d92FBA16e01c8CDDE8a8Bb2db43B  // Wallet 4 address r
    ];

    constructor(string memory name, string memory symbol, string memory _initNotRevealedURI) ERC721(name, symbol) {
        setNotRevealedURI(_initNotRevealedURI);

        _royaltyShares[_royaltyAddresses[0]] = 97; // Royalty for Wallet 1
        _royaltyShares[_royaltyAddresses[1]] = 1; // Royalty for Wallet 2
        _royaltyShares[_royaltyAddresses[2]] = 1; // Royalty for Wallet 3
        _royaltyShares[_royaltyAddresses[3]] = 1; // Royalty for Wallet 4
    }

    function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
        baseExtension = _newBaseExtension;
    }

    function _leaf(address account) private pure returns (bytes32) {
        return keccak256(abi.encodePacked(account));
    }

    function setMerkleRoot(bytes32 _merkleRootValue) external onlyOwner returns (bytes32)
    {
        _merkleRoot = _merkleRootValue;
        return _merkleRoot;
    }

    function cutSupplyLimit(uint256 newSupplyLimit) external onlyOwner{
        supplyLimit = newSupplyLimit;
    }

    function setMintPrice(uint256 newMintPrice) external onlyOwner{
        mintPrice = newMintPrice;
    }

    function verifyWhitelist(bytes32 leaf, bytes32[] memory proof) private view returns (bool)
    {

        bytes32 computedHash = leaf;

        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];

            if (computedHash < proofElement) {
                computedHash = keccak256(
                    abi.encodePacked(computedHash, proofElement)
                );
            } else {
                computedHash = keccak256(
                    abi.encodePacked(proofElement, computedHash)
                );
            }
        }
        return computedHash == _merkleRoot;
    }

    function mintWhitelist(uint256 numberOfMints, bytes32[] memory _proof) public payable
    {
        uint256 supply = _tokenSupply.current();
        address sender = msg.sender; 
        require(presaleOpen, "Presale Needs To Be Active");
        require(verifyWhitelist(_leaf(msg.sender), _proof) == true, "Invalid Address");
        require(supply.add(numberOfMints) <= supplyLimit, "Payment exceeds total supply");
        require(numberOfMints > 0 && numberOfMints < 11,   "Invalid purchase amount");
        require(msg.value >= presaleMintPrice * numberOfMints, "Incorrect Eth amount");

        for (uint32 i = 1; i <= numberOfMints; i++) {      
            _safeMint(sender, supply + i);
            _tokenSupply.increment();
        }

    }

    function mintOGs(address[] calldata OGAdress) public payable onlyOwner
    {
        uint256 supply = _tokenSupply.current();
        for (uint256 i = 1; i <= OGAdress.length; i++) {
            _safeMint(OGAdress[i - 1], supply + i);
            _tokenSupply.increment();
        }
    }
    
    function mint(uint numberOfMints) public payable {
        uint256 supply = _tokenSupply.current();
        require(msg.value >= mintPrice.mul(numberOfMints), "Incorrect Eth amount");
        require(mintOpen, "Sale Needs To Be Active");
        require(numberOfMints > 0 && numberOfMints < 11, "Invalid purchase amount");
        require(supply.add(numberOfMints) <= supplyLimit, "Payment exceeds total supply");

       for(uint256 i = 1; i <= numberOfMints; i++){
            _safeMint(msg.sender, supply + i);
            _tokenSupply.increment();
        }

    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        
        if(revealToken == false) {
            return notRevealedURI;
        }

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

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

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

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedURI = _notRevealedURI;
    }
    
    function toggleSale() public onlyOwner {
        mintOpen = !mintOpen;
    }

    function togglePresale() public onlyOwner {
        presaleOpen = !presaleOpen;
    }

    function returnCounter() external view returns(uint256){
        return _tokenSupply.current();
    }

    function reveal() public onlyOwner {
        revealToken = true;
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override {
        ERC721.safeTransferFrom(from, to, tokenId, data);
    }

    function withdraw() external onlyOwner {
        require(address(this).balance > 0, "EMPTY_BALANCE");
        uint256 balance = address(this).balance;

        for (uint256 i = 0; i < _royaltyAddresses.length; i++) {
            payable(_royaltyAddresses[i]).transfer(
                balance.div(100).mul(_royaltyShares[_royaltyAddresses[i]])
            );
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"_initNotRevealedURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupplyLimit","type":"uint256"}],"name":"cutSupplyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"numberOfMints","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"OGAdress","type":"address[]"}],"name":"mintOGs","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfMints","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","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":"presaleMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRootValue","type":"bytes32"}],"name":"setMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"setBaseURI","type":"string"}],"name":"setbaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyLimit","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":[],"name":"togglePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSale","outputs":[],"stateMutability":"nonpayable","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":"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200005192919062000656565b50611549600b5566c3663566a58000600c5567011c37937e080000600d556000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506000600f60026101000a81548160ff021916908315150217905550604051806080016040528073f21d44beb1687380d8e5e46dfdb1ec60fd28236373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173cfea01f7f051fbddf7c09fdf84cf18bca82a1f7973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017380c74caa82864cd42c32c448f449070c5104d5b873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001737f4a46ae3ca6d92fba16e01c8cdde8a8bb2db43b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152506011906004620001f3929190620006e7565b503480156200020157600080fd5b50604051620053e0380380620053e0833981810160405281019062000227919062000813565b828281600090805190602001906200024192919062000656565b5080600190805190602001906200025a92919062000656565b5050506200027d62000271620004b360201b60201c565b620004bb60201b60201c565b6200028e816200058160201b60201c565b6061601060006011600081548110620002ac57620002ab62000a56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000601160018154811062000333576200033262000a56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060006011600281548110620003ba57620003b962000a56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000601160038154811062000441576200044062000a56565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505062000b02565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000591620004b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005b76200062c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000610576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060790620008f3565b60405180910390fd5b80600a90805190602001906200062892919062000656565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200066490620009bb565b90600052602060002090601f016020900481019282620006885760008555620006d4565b82601f10620006a357805160ff1916838001178555620006d4565b82800160010185558215620006d4579182015b82811115620006d3578251825591602001919060010190620006b6565b5b509050620006e3919062000776565b5090565b82805482825590600052602060002090810192821562000763579160200282015b82811115620007625782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000708565b5b50905062000772919062000776565b5090565b5b808211156200079157600081600090555060010162000777565b5090565b6000620007ac620007a6846200093e565b62000915565b905082815260208101848484011115620007cb57620007ca62000ab9565b5b620007d884828562000985565b509392505050565b600082601f830112620007f857620007f762000ab4565b5b81516200080a84826020860162000795565b91505092915050565b6000806000606084860312156200082f576200082e62000ac3565b5b600084015167ffffffffffffffff81111562000850576200084f62000abe565b5b6200085e86828701620007e0565b935050602084015167ffffffffffffffff81111562000882576200088162000abe565b5b6200089086828701620007e0565b925050604084015167ffffffffffffffff811115620008b457620008b362000abe565b5b620008c286828701620007e0565b9150509250925092565b6000620008db60208362000974565b9150620008e88262000ad9565b602082019050919050565b600060208201905081810360008301526200090e81620008cc565b9050919050565b60006200092162000934565b90506200092f8282620009f1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200095c576200095b62000a85565b5b620009678262000ac8565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620009a557808201518184015260208101905062000988565b83811115620009b5576000848401525b50505050565b60006002820490506001821680620009d457607f821691505b60208210811415620009eb57620009ea62000a27565b5b50919050565b620009fc8262000ac8565b810181811067ffffffffffffffff8211171562000a1e5762000a1d62000a85565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6148ce8062000b126000396000f3fe6080604052600436106102255760003560e01c80637225038011610123578063bee6348a116100ab578063e985e9c51161006f578063e985e9c514610780578063ea601ce0146107bd578063f2c4ce1e146107e8578063f2fde38b14610811578063f4a0a5281461083a57610225565b8063bee6348a146106a8578063c6682862146106d3578063c87b56dd146106fe578063da3ef23f1461073b578063e584d3a51461076457610225565b806395d89b41116100f257806395d89b41146105f8578063a0712d6814610623578063a22cb4651461063f578063a475b5dd14610668578063b88d4fde1461067f57610225565b8063722503801461054e5780637cb64759146105795780637d8966e4146105b65780638da5cb5b146105cd57610225565b806334393743116101b15780636352211e116101755780636352211e146104695780636817c76c146104a6578063686e4b4e146104d157806370a08231146104fa578063715018a61461053757610225565b806334393743146103be5780633ccfd60b146103d557806342842e0e146103ec5780634a44f379146104155780635be505211461043e57610225565b8063095ea7b3116101f8578063095ea7b3146102eb57806319d1997a1461031457806323b872dd1461033f57806324bbd04914610368578063319050601461039357610225565b806301ffc9a71461022a578063061431a81461026757806306fdde0314610283578063081812fc146102ae575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613350565b610863565b60405161025e9190613a0c565b60405180910390f35b610281600480360381019061027c9190613420565b610945565b005b34801561028f57600080fd5b50610298610b48565b6040516102a59190613a42565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906133f3565b610bda565b6040516102e291906139a5565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190613296565b610c5f565b005b34801561032057600080fd5b50610329610d77565b6040516103369190613d44565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190613180565b610d7d565b005b34801561037457600080fd5b5061037d610ddd565b60405161038a9190613a0c565b60405180910390f35b34801561039f57600080fd5b506103a8610df0565b6040516103b59190613a0c565b60405180910390f35b3480156103ca57600080fd5b506103d3610e03565b005b3480156103e157600080fd5b506103ea610eab565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613180565b6110bd565b005b34801561042157600080fd5b5061043c600480360381019061043791906133aa565b6110dd565b005b34801561044a57600080fd5b50610453611173565b6040516104609190613d44565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b91906133f3565b611179565b60405161049d91906139a5565b60405180910390f35b3480156104b257600080fd5b506104bb61122b565b6040516104c89190613d44565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906133f3565b611231565b005b34801561050657600080fd5b50610521600480360381019061051c9190613113565b6112b7565b60405161052e9190613d44565b60405180910390f35b34801561054357600080fd5b5061054c61136f565b005b34801561055a57600080fd5b506105636113f7565b6040516105709190613a42565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b9190613323565b611485565b6040516105ad9190613a27565b60405180910390f35b3480156105c257600080fd5b506105cb611514565b005b3480156105d957600080fd5b506105e26115bc565b6040516105ef91906139a5565b60405180910390f35b34801561060457600080fd5b5061060d6115e6565b60405161061a9190613a42565b60405180910390f35b61063d600480360381019061063891906133f3565b611678565b005b34801561064b57600080fd5b5061066660048036038101906106619190613256565b611817565b005b34801561067457600080fd5b5061067d611998565b005b34801561068b57600080fd5b506106a660048036038101906106a191906131d3565b611a31565b005b3480156106b457600080fd5b506106bd611a43565b6040516106ca9190613a0c565b60405180910390f35b3480156106df57600080fd5b506106e8611a56565b6040516106f59190613a42565b60405180910390f35b34801561070a57600080fd5b50610725600480360381019061072091906133f3565b611ae4565b6040516107329190613a42565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d91906133aa565b611c3d565b005b61077e600480360381019061077991906132d6565b611cd3565b005b34801561078c57600080fd5b506107a760048036038101906107a29190613140565b611dd9565b6040516107b49190613a0c565b60405180910390f35b3480156107c957600080fd5b506107d2611e6d565b6040516107df9190613d44565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906133aa565b611e7e565b005b34801561081d57600080fd5b5061083860048036038101906108339190613113565b611f14565b005b34801561084657600080fd5b50610861600480360381019061085c91906133f3565b61200c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093e575061093d82612092565b5b9050919050565b600061095160076120fc565b90506000339050600f60009054906101000a900460ff166109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90613a64565b60405180910390fd5b600115156109bd6109b73361210a565b8561213a565b1515146109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f690613ca4565b60405180910390fd5b600b54610a1585846121f290919063ffffffff16565b1115610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90613b44565b60405180910390fd5b600084118015610a665750600b84105b610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613d24565b60405180910390fd5b83600c54610ab39190613ef1565b341015610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90613d04565b60405180910390fd5b6000600190505b848163ffffffff1611610b4157610b24828263ffffffff1685610b1f9190613e6a565b612208565b610b2e6007612226565b8080610b39906140fb565b915050610afc565b5050505050565b606060008054610b579061404f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b839061404f565b8015610bd05780601f10610ba557610100808354040283529160200191610bd0565b820191906000526020600020905b815481529060010190602001808311610bb357829003601f168201915b5050505050905090565b6000610be58261223c565b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90613c04565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6a82611179565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290613c84565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cfa6122a8565b73ffffffffffffffffffffffffffffffffffffffff161480610d295750610d2881610d236122a8565b611dd9565b5b610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f90613b84565b60405180910390fd5b610d7283836122b0565b505050565b600b5481565b610d8e610d886122a8565b82612369565b610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613cc4565b60405180910390fd5b610dd8838383612447565b505050565b600f60019054906101000a900460ff1681565b600f60029054906101000a900460ff1681565b610e0b6122a8565b73ffffffffffffffffffffffffffffffffffffffff16610e296115bc565b73ffffffffffffffffffffffffffffffffffffffff1614610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690613c24565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610eb36122a8565b73ffffffffffffffffffffffffffffffffffffffff16610ed16115bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613c24565b60405180910390fd5b60004711610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190613ce4565b60405180910390fd5b600047905060005b6011805490508110156110b95760118181548110610f9357610f92614214565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61107a6010600060118681548110610ff257610ff1614214565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461106c6064876126a390919063ffffffff16565b6126b990919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156110a5573d6000803e3d6000fd5b5080806110b1906140b2565b915050610f72565b5050565b6110d883838360405180602001604052806000815250611a31565b505050565b6110e56122a8565b73ffffffffffffffffffffffffffffffffffffffff166111036115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090613c24565b60405180910390fd5b806008908051906020019061116f929190612e1e565b5050565b600c5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613bc4565b60405180910390fd5b80915050919050565b600d5481565b6112396122a8565b73ffffffffffffffffffffffffffffffffffffffff166112576115bc565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613c24565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613ba4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113776122a8565b73ffffffffffffffffffffffffffffffffffffffff166113956115bc565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290613c24565b60405180910390fd5b6113f560006126cf565b565b600a80546114049061404f565b80601f01602080910402602001604051908101604052809291908181526020018280546114309061404f565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b505050505081565b600061148f6122a8565b73ffffffffffffffffffffffffffffffffffffffff166114ad6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613c24565b60405180910390fd5b81600e81905550600e549050919050565b61151c6122a8565b73ffffffffffffffffffffffffffffffffffffffff1661153a6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613c24565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115f59061404f565b80601f01602080910402602001604051908101604052809291908181526020018280546116219061404f565b801561166e5780601f106116435761010080835404028352916020019161166e565b820191906000526020600020905b81548152906001019060200180831161165157829003601f168201915b5050505050905090565b600061168460076120fc565b905061169b82600d546126b990919063ffffffff16565b3410156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490613d04565b60405180910390fd5b600f60019054906101000a900460ff1661172c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172390613ae4565b60405180910390fd5b60008211801561173c5750600b82105b61177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290613d24565b60405180910390fd5b600b5461179183836121f290919063ffffffff16565b11156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613b44565b60405180910390fd5b6000600190505b828111611812576117f53382846117f09190613e6a565b612208565b6117ff6007612226565b808061180a906140b2565b9150506117d9565b505050565b61181f6122a8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188490613b24565b60405180910390fd5b806005600061189a6122a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119476122a8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161198c9190613a0c565b60405180910390a35050565b6119a06122a8565b73ffffffffffffffffffffffffffffffffffffffff166119be6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613c24565b60405180910390fd5b6001600f60026101000a81548160ff021916908315150217905550565b611a3d84848484612795565b50505050565b600f60009054906101000a900460ff1681565b60098054611a639061404f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8f9061404f565b8015611adc5780601f10611ab157610100808354040283529160200191611adc565b820191906000526020600020905b815481529060010190602001808311611abf57829003601f168201915b505050505081565b6060611aef8261223c565b611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590613c64565b60405180910390fd5b60001515600f60029054906101000a900460ff1615151415611bdc57600a8054611b579061404f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b839061404f565b8015611bd05780601f10611ba557610100808354040283529160200191611bd0565b820191906000526020600020905b815481529060010190602001808311611bb357829003601f168201915b50505050509050611c38565b6000611be66127f7565b90506000815111611c065760405180602001604052806000815250611c34565b80611c1084612889565b6009604051602001611c2493929190613974565b6040516020818303038152906040525b9150505b919050565b611c456122a8565b73ffffffffffffffffffffffffffffffffffffffff16611c636115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090613c24565b60405180910390fd5b8060099080519060200190611ccf929190612e1e565b5050565b611cdb6122a8565b73ffffffffffffffffffffffffffffffffffffffff16611cf96115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690613c24565b60405180910390fd5b6000611d5b60076120fc565b90506000600190505b838390508111611dd357611db68484600184611d809190613f4b565b818110611d9057611d8f614214565b5b9050602002016020810190611da59190613113565b8284611db19190613e6a565b612208565b611dc06007612226565b8080611dcb906140b2565b915050611d64565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611e7960076120fc565b905090565b611e866122a8565b73ffffffffffffffffffffffffffffffffffffffff16611ea46115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190613c24565b60405180910390fd5b80600a9080519060200190611f10929190612e1e565b5050565b611f1c6122a8565b73ffffffffffffffffffffffffffffffffffffffff16611f3a6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8790613c24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff790613aa4565b60405180910390fd5b612009816126cf565b50565b6120146122a8565b73ffffffffffffffffffffffffffffffffffffffff166120326115bc565b73ffffffffffffffffffffffffffffffffffffffff1614612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90613c24565b60405180910390fd5b80600d8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b60008160405160200161211d919061392d565b604051602081830303815290604052805190602001209050919050565b60008083905060005b83518110156121e357600084828151811061216157612160614214565b5b60200260200101519050808310156121a3578281604051602001612186929190613948565b6040516020818303038152906040528051906020012092506121cf565b80836040516020016121b6929190613948565b6040516020818303038152906040528051906020012092505b5080806121db906140b2565b915050612143565b50600e54811491505092915050565b600081836122009190613e6a565b905092915050565b6122228282604051806020016040528060008152506129ea565b5050565b6001816000016000828254019250508190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661232383611179565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123748261223c565b6123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90613b64565b60405180910390fd5b60006123be83611179565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061242d57508373ffffffffffffffffffffffffffffffffffffffff1661241584610bda565b73ffffffffffffffffffffffffffffffffffffffff16145b8061243e575061243d8185611dd9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661246782611179565b73ffffffffffffffffffffffffffffffffffffffff16146124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b490613c44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561252d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252490613b04565b60405180910390fd5b612538838383612a45565b6125436000826122b0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125939190613f4b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ea9190613e6a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836126b19190613ec0565b905092915050565b600081836126c79190613ef1565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127a66127a06122a8565b83612369565b6127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90613cc4565b60405180910390fd5b6127f184848484612a4a565b50505050565b6060600880546128069061404f565b80601f01602080910402602001604051908101604052809291908181526020018280546128329061404f565b801561287f5780601f106128545761010080835404028352916020019161287f565b820191906000526020600020905b81548152906001019060200180831161286257829003601f168201915b5050505050905090565b606060008214156128d1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129e5565b600082905060005b600082146129035780806128ec906140b2565b915050600a826128fc9190613ec0565b91506128d9565b60008167ffffffffffffffff81111561291f5761291e614243565b5b6040519080825280601f01601f1916602001820160405280156129515781602001600182028036833780820191505090505b5090505b600085146129de5760018261296a9190613f4b565b9150600a856129799190614156565b60306129859190613e6a565b60f81b81838151811061299b5761299a614214565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129d79190613ec0565b9450612955565b8093505050505b919050565b6129f48383612aa6565b612a016000848484612c74565b612a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3790613a84565b60405180910390fd5b505050565b505050565b612a55848484612447565b612a6184848484612c74565b612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9790613a84565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90613be4565b60405180910390fd5b612b1f8161223c565b15612b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5690613ac4565b60405180910390fd5b612b6b60008383612a45565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bbb9190613e6a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612c958473ffffffffffffffffffffffffffffffffffffffff16612e0b565b15612dfe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cbe6122a8565b8786866040518563ffffffff1660e01b8152600401612ce094939291906139c0565b602060405180830381600087803b158015612cfa57600080fd5b505af1925050508015612d2b57506040513d601f19601f82011682018060405250810190612d28919061337d565b60015b612dae573d8060008114612d5b576040519150601f19603f3d011682016040523d82523d6000602084013e612d60565b606091505b50600081511415612da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9d90613a84565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e03565b600190505b949350505050565b600080823b905060008111915050919050565b828054612e2a9061404f565b90600052602060002090601f016020900481019282612e4c5760008555612e93565b82601f10612e6557805160ff1916838001178555612e93565b82800160010185558215612e93579182015b82811115612e92578251825591602001919060010190612e77565b5b509050612ea09190612ea4565b5090565b5b80821115612ebd576000816000905550600101612ea5565b5090565b6000612ed4612ecf84613d84565b613d5f565b90508083825260208201905082856020860282011115612ef757612ef661427c565b5b60005b85811015612f275781612f0d8882613063565b845260208401935060208301925050600181019050612efa565b5050509392505050565b6000612f44612f3f84613db0565b613d5f565b905082815260208101848484011115612f6057612f5f614281565b5b612f6b84828561400d565b509392505050565b6000612f86612f8184613de1565b613d5f565b905082815260208101848484011115612fa257612fa1614281565b5b612fad84828561400d565b509392505050565b600081359050612fc481614825565b92915050565b60008083601f840112612fe057612fdf614277565b5b8235905067ffffffffffffffff811115612ffd57612ffc614272565b5b6020830191508360208202830111156130195761301861427c565b5b9250929050565b600082601f83011261303557613034614277565b5b8135613045848260208601612ec1565b91505092915050565b60008135905061305d8161483c565b92915050565b60008135905061307281614853565b92915050565b6000813590506130878161486a565b92915050565b60008151905061309c8161486a565b92915050565b600082601f8301126130b7576130b6614277565b5b81356130c7848260208601612f31565b91505092915050565b600082601f8301126130e5576130e4614277565b5b81356130f5848260208601612f73565b91505092915050565b60008135905061310d81614881565b92915050565b6000602082840312156131295761312861428b565b5b600061313784828501612fb5565b91505092915050565b600080604083850312156131575761315661428b565b5b600061316585828601612fb5565b925050602061317685828601612fb5565b9150509250929050565b6000806000606084860312156131995761319861428b565b5b60006131a786828701612fb5565b93505060206131b886828701612fb5565b92505060406131c9868287016130fe565b9150509250925092565b600080600080608085870312156131ed576131ec61428b565b5b60006131fb87828801612fb5565b945050602061320c87828801612fb5565b935050604061321d878288016130fe565b925050606085013567ffffffffffffffff81111561323e5761323d614286565b5b61324a878288016130a2565b91505092959194509250565b6000806040838503121561326d5761326c61428b565b5b600061327b85828601612fb5565b925050602061328c8582860161304e565b9150509250929050565b600080604083850312156132ad576132ac61428b565b5b60006132bb85828601612fb5565b92505060206132cc858286016130fe565b9150509250929050565b600080602083850312156132ed576132ec61428b565b5b600083013567ffffffffffffffff81111561330b5761330a614286565b5b61331785828601612fca565b92509250509250929050565b6000602082840312156133395761333861428b565b5b600061334784828501613063565b91505092915050565b6000602082840312156133665761336561428b565b5b600061337484828501613078565b91505092915050565b6000602082840312156133935761339261428b565b5b60006133a18482850161308d565b91505092915050565b6000602082840312156133c0576133bf61428b565b5b600082013567ffffffffffffffff8111156133de576133dd614286565b5b6133ea848285016130d0565b91505092915050565b6000602082840312156134095761340861428b565b5b6000613417848285016130fe565b91505092915050565b600080604083850312156134375761343661428b565b5b6000613445858286016130fe565b925050602083013567ffffffffffffffff81111561346657613465614286565b5b61347285828601613020565b9150509250929050565b61348581613f7f565b82525050565b61349c61349782613f7f565b614128565b82525050565b6134ab81613f91565b82525050565b6134ba81613f9d565b82525050565b6134d16134cc82613f9d565b61413a565b82525050565b60006134e282613e27565b6134ec8185613e3d565b93506134fc81856020860161401c565b61350581614290565b840191505092915050565b600061351b82613e32565b6135258185613e4e565b935061353581856020860161401c565b61353e81614290565b840191505092915050565b600061355482613e32565b61355e8185613e5f565b935061356e81856020860161401c565b80840191505092915050565b600081546135878161404f565b6135918186613e5f565b945060018216600081146135ac57600181146135bd576135f0565b60ff198316865281860193506135f0565b6135c685613e12565b60005b838110156135e8578154818901526001820191506020810190506135c9565b838801955050505b50505092915050565b6000613606601a83613e4e565b9150613611826142ae565b602082019050919050565b6000613629603283613e4e565b9150613634826142d7565b604082019050919050565b600061364c602683613e4e565b915061365782614326565b604082019050919050565b600061366f601c83613e4e565b915061367a82614375565b602082019050919050565b6000613692601783613e4e565b915061369d8261439e565b602082019050919050565b60006136b5602483613e4e565b91506136c0826143c7565b604082019050919050565b60006136d8601983613e4e565b91506136e382614416565b602082019050919050565b60006136fb601c83613e4e565b91506137068261443f565b602082019050919050565b600061371e602c83613e4e565b915061372982614468565b604082019050919050565b6000613741603883613e4e565b915061374c826144b7565b604082019050919050565b6000613764602a83613e4e565b915061376f82614506565b604082019050919050565b6000613787602983613e4e565b915061379282614555565b604082019050919050565b60006137aa602083613e4e565b91506137b5826145a4565b602082019050919050565b60006137cd602c83613e4e565b91506137d8826145cd565b604082019050919050565b60006137f0602083613e4e565b91506137fb8261461c565b602082019050919050565b6000613813602983613e4e565b915061381e82614645565b604082019050919050565b6000613836602f83613e4e565b915061384182614694565b604082019050919050565b6000613859602183613e4e565b9150613864826146e3565b604082019050919050565b600061387c600f83613e4e565b915061388782614732565b602082019050919050565b600061389f603183613e4e565b91506138aa8261475b565b604082019050919050565b60006138c2600d83613e4e565b91506138cd826147aa565b602082019050919050565b60006138e5601483613e4e565b91506138f0826147d3565b602082019050919050565b6000613908601783613e4e565b9150613913826147fc565b602082019050919050565b61392781613ff3565b82525050565b6000613939828461348b565b60148201915081905092915050565b600061395482856134c0565b60208201915061396482846134c0565b6020820191508190509392505050565b60006139808286613549565b915061398c8285613549565b9150613998828461357a565b9150819050949350505050565b60006020820190506139ba600083018461347c565b92915050565b60006080820190506139d5600083018761347c565b6139e2602083018661347c565b6139ef604083018561391e565b8181036060830152613a0181846134d7565b905095945050505050565b6000602082019050613a2160008301846134a2565b92915050565b6000602082019050613a3c60008301846134b1565b92915050565b60006020820190508181036000830152613a5c8184613510565b905092915050565b60006020820190508181036000830152613a7d816135f9565b9050919050565b60006020820190508181036000830152613a9d8161361c565b9050919050565b60006020820190508181036000830152613abd8161363f565b9050919050565b60006020820190508181036000830152613add81613662565b9050919050565b60006020820190508181036000830152613afd81613685565b9050919050565b60006020820190508181036000830152613b1d816136a8565b9050919050565b60006020820190508181036000830152613b3d816136cb565b9050919050565b60006020820190508181036000830152613b5d816136ee565b9050919050565b60006020820190508181036000830152613b7d81613711565b9050919050565b60006020820190508181036000830152613b9d81613734565b9050919050565b60006020820190508181036000830152613bbd81613757565b9050919050565b60006020820190508181036000830152613bdd8161377a565b9050919050565b60006020820190508181036000830152613bfd8161379d565b9050919050565b60006020820190508181036000830152613c1d816137c0565b9050919050565b60006020820190508181036000830152613c3d816137e3565b9050919050565b60006020820190508181036000830152613c5d81613806565b9050919050565b60006020820190508181036000830152613c7d81613829565b9050919050565b60006020820190508181036000830152613c9d8161384c565b9050919050565b60006020820190508181036000830152613cbd8161386f565b9050919050565b60006020820190508181036000830152613cdd81613892565b9050919050565b60006020820190508181036000830152613cfd816138b5565b9050919050565b60006020820190508181036000830152613d1d816138d8565b9050919050565b60006020820190508181036000830152613d3d816138fb565b9050919050565b6000602082019050613d59600083018461391e565b92915050565b6000613d69613d7a565b9050613d758282614081565b919050565b6000604051905090565b600067ffffffffffffffff821115613d9f57613d9e614243565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613dcb57613dca614243565b5b613dd482614290565b9050602081019050919050565b600067ffffffffffffffff821115613dfc57613dfb614243565b5b613e0582614290565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e7582613ff3565b9150613e8083613ff3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eb557613eb4614187565b5b828201905092915050565b6000613ecb82613ff3565b9150613ed683613ff3565b925082613ee657613ee56141b6565b5b828204905092915050565b6000613efc82613ff3565b9150613f0783613ff3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4057613f3f614187565b5b828202905092915050565b6000613f5682613ff3565b9150613f6183613ff3565b925082821015613f7457613f73614187565b5b828203905092915050565b6000613f8a82613fd3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561403a57808201518184015260208101905061401f565b83811115614049576000848401525b50505050565b6000600282049050600182168061406757607f821691505b6020821081141561407b5761407a6141e5565b5b50919050565b61408a82614290565b810181811067ffffffffffffffff821117156140a9576140a8614243565b5b80604052505050565b60006140bd82613ff3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140f0576140ef614187565b5b600182019050919050565b600061410682613ffd565b915063ffffffff82141561411d5761411c614187565b5b600182019050919050565b600061413382614144565b9050919050565b6000819050919050565b600061414f826142a1565b9050919050565b600061416182613ff3565b915061416c83613ff3565b92508261417c5761417b6141b6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f50726573616c65204e6565647320546f20426520416374697665000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65204e6565647320546f20426520416374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420416464726573730000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f454d5054595f42414c414e434500000000000000000000000000000000000000600082015250565b7f496e636f72726563742045746820616d6f756e74000000000000000000000000600082015250565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b61482e81613f7f565b811461483957600080fd5b50565b61484581613f91565b811461485057600080fd5b50565b61485c81613f9d565b811461486757600080fd5b50565b61487381613fa7565b811461487e57600080fd5b50565b61488a81613ff3565b811461489557600080fd5b5056fea264697066735822122039f184cd496cf9b94ab55278b35ac719fea382625226bbc35e5c851e9751fc5364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000124d6574614231306e696356696c6c61696e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074231304e494356000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d505a746e4a384b47326a5967707863725151464e653756376e6a646d754b666b4a39693936786f727a4458672f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102255760003560e01c80637225038011610123578063bee6348a116100ab578063e985e9c51161006f578063e985e9c514610780578063ea601ce0146107bd578063f2c4ce1e146107e8578063f2fde38b14610811578063f4a0a5281461083a57610225565b8063bee6348a146106a8578063c6682862146106d3578063c87b56dd146106fe578063da3ef23f1461073b578063e584d3a51461076457610225565b806395d89b41116100f257806395d89b41146105f8578063a0712d6814610623578063a22cb4651461063f578063a475b5dd14610668578063b88d4fde1461067f57610225565b8063722503801461054e5780637cb64759146105795780637d8966e4146105b65780638da5cb5b146105cd57610225565b806334393743116101b15780636352211e116101755780636352211e146104695780636817c76c146104a6578063686e4b4e146104d157806370a08231146104fa578063715018a61461053757610225565b806334393743146103be5780633ccfd60b146103d557806342842e0e146103ec5780634a44f379146104155780635be505211461043e57610225565b8063095ea7b3116101f8578063095ea7b3146102eb57806319d1997a1461031457806323b872dd1461033f57806324bbd04914610368578063319050601461039357610225565b806301ffc9a71461022a578063061431a81461026757806306fdde0314610283578063081812fc146102ae575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613350565b610863565b60405161025e9190613a0c565b60405180910390f35b610281600480360381019061027c9190613420565b610945565b005b34801561028f57600080fd5b50610298610b48565b6040516102a59190613a42565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d091906133f3565b610bda565b6040516102e291906139a5565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d9190613296565b610c5f565b005b34801561032057600080fd5b50610329610d77565b6040516103369190613d44565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190613180565b610d7d565b005b34801561037457600080fd5b5061037d610ddd565b60405161038a9190613a0c565b60405180910390f35b34801561039f57600080fd5b506103a8610df0565b6040516103b59190613a0c565b60405180910390f35b3480156103ca57600080fd5b506103d3610e03565b005b3480156103e157600080fd5b506103ea610eab565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613180565b6110bd565b005b34801561042157600080fd5b5061043c600480360381019061043791906133aa565b6110dd565b005b34801561044a57600080fd5b50610453611173565b6040516104609190613d44565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b91906133f3565b611179565b60405161049d91906139a5565b60405180910390f35b3480156104b257600080fd5b506104bb61122b565b6040516104c89190613d44565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906133f3565b611231565b005b34801561050657600080fd5b50610521600480360381019061051c9190613113565b6112b7565b60405161052e9190613d44565b60405180910390f35b34801561054357600080fd5b5061054c61136f565b005b34801561055a57600080fd5b506105636113f7565b6040516105709190613a42565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b9190613323565b611485565b6040516105ad9190613a27565b60405180910390f35b3480156105c257600080fd5b506105cb611514565b005b3480156105d957600080fd5b506105e26115bc565b6040516105ef91906139a5565b60405180910390f35b34801561060457600080fd5b5061060d6115e6565b60405161061a9190613a42565b60405180910390f35b61063d600480360381019061063891906133f3565b611678565b005b34801561064b57600080fd5b5061066660048036038101906106619190613256565b611817565b005b34801561067457600080fd5b5061067d611998565b005b34801561068b57600080fd5b506106a660048036038101906106a191906131d3565b611a31565b005b3480156106b457600080fd5b506106bd611a43565b6040516106ca9190613a0c565b60405180910390f35b3480156106df57600080fd5b506106e8611a56565b6040516106f59190613a42565b60405180910390f35b34801561070a57600080fd5b50610725600480360381019061072091906133f3565b611ae4565b6040516107329190613a42565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d91906133aa565b611c3d565b005b61077e600480360381019061077991906132d6565b611cd3565b005b34801561078c57600080fd5b506107a760048036038101906107a29190613140565b611dd9565b6040516107b49190613a0c565b60405180910390f35b3480156107c957600080fd5b506107d2611e6d565b6040516107df9190613d44565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906133aa565b611e7e565b005b34801561081d57600080fd5b5061083860048036038101906108339190613113565b611f14565b005b34801561084657600080fd5b50610861600480360381019061085c91906133f3565b61200c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061093e575061093d82612092565b5b9050919050565b600061095160076120fc565b90506000339050600f60009054906101000a900460ff166109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90613a64565b60405180910390fd5b600115156109bd6109b73361210a565b8561213a565b1515146109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f690613ca4565b60405180910390fd5b600b54610a1585846121f290919063ffffffff16565b1115610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90613b44565b60405180910390fd5b600084118015610a665750600b84105b610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613d24565b60405180910390fd5b83600c54610ab39190613ef1565b341015610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90613d04565b60405180910390fd5b6000600190505b848163ffffffff1611610b4157610b24828263ffffffff1685610b1f9190613e6a565b612208565b610b2e6007612226565b8080610b39906140fb565b915050610afc565b5050505050565b606060008054610b579061404f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b839061404f565b8015610bd05780601f10610ba557610100808354040283529160200191610bd0565b820191906000526020600020905b815481529060010190602001808311610bb357829003601f168201915b5050505050905090565b6000610be58261223c565b610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b90613c04565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c6a82611179565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290613c84565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cfa6122a8565b73ffffffffffffffffffffffffffffffffffffffff161480610d295750610d2881610d236122a8565b611dd9565b5b610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f90613b84565b60405180910390fd5b610d7283836122b0565b505050565b600b5481565b610d8e610d886122a8565b82612369565b610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490613cc4565b60405180910390fd5b610dd8838383612447565b505050565b600f60019054906101000a900460ff1681565b600f60029054906101000a900460ff1681565b610e0b6122a8565b73ffffffffffffffffffffffffffffffffffffffff16610e296115bc565b73ffffffffffffffffffffffffffffffffffffffff1614610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690613c24565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b610eb36122a8565b73ffffffffffffffffffffffffffffffffffffffff16610ed16115bc565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613c24565b60405180910390fd5b60004711610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190613ce4565b60405180910390fd5b600047905060005b6011805490508110156110b95760118181548110610f9357610f92614214565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc61107a6010600060118681548110610ff257610ff1614214565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461106c6064876126a390919063ffffffff16565b6126b990919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156110a5573d6000803e3d6000fd5b5080806110b1906140b2565b915050610f72565b5050565b6110d883838360405180602001604052806000815250611a31565b505050565b6110e56122a8565b73ffffffffffffffffffffffffffffffffffffffff166111036115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115090613c24565b60405180910390fd5b806008908051906020019061116f929190612e1e565b5050565b600c5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613bc4565b60405180910390fd5b80915050919050565b600d5481565b6112396122a8565b73ffffffffffffffffffffffffffffffffffffffff166112576115bc565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613c24565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613ba4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113776122a8565b73ffffffffffffffffffffffffffffffffffffffff166113956115bc565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290613c24565b60405180910390fd5b6113f560006126cf565b565b600a80546114049061404f565b80601f01602080910402602001604051908101604052809291908181526020018280546114309061404f565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b505050505081565b600061148f6122a8565b73ffffffffffffffffffffffffffffffffffffffff166114ad6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613c24565b60405180910390fd5b81600e81905550600e549050919050565b61151c6122a8565b73ffffffffffffffffffffffffffffffffffffffff1661153a6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158790613c24565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115f59061404f565b80601f01602080910402602001604051908101604052809291908181526020018280546116219061404f565b801561166e5780601f106116435761010080835404028352916020019161166e565b820191906000526020600020905b81548152906001019060200180831161165157829003601f168201915b5050505050905090565b600061168460076120fc565b905061169b82600d546126b990919063ffffffff16565b3410156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490613d04565b60405180910390fd5b600f60019054906101000a900460ff1661172c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172390613ae4565b60405180910390fd5b60008211801561173c5750600b82105b61177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290613d24565b60405180910390fd5b600b5461179183836121f290919063ffffffff16565b11156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990613b44565b60405180910390fd5b6000600190505b828111611812576117f53382846117f09190613e6a565b612208565b6117ff6007612226565b808061180a906140b2565b9150506117d9565b505050565b61181f6122a8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561188d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188490613b24565b60405180910390fd5b806005600061189a6122a8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119476122a8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161198c9190613a0c565b60405180910390a35050565b6119a06122a8565b73ffffffffffffffffffffffffffffffffffffffff166119be6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90613c24565b60405180910390fd5b6001600f60026101000a81548160ff021916908315150217905550565b611a3d84848484612795565b50505050565b600f60009054906101000a900460ff1681565b60098054611a639061404f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8f9061404f565b8015611adc5780601f10611ab157610100808354040283529160200191611adc565b820191906000526020600020905b815481529060010190602001808311611abf57829003601f168201915b505050505081565b6060611aef8261223c565b611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590613c64565b60405180910390fd5b60001515600f60029054906101000a900460ff1615151415611bdc57600a8054611b579061404f565b80601f0160208091040260200160405190810160405280929190818152602001828054611b839061404f565b8015611bd05780601f10611ba557610100808354040283529160200191611bd0565b820191906000526020600020905b815481529060010190602001808311611bb357829003601f168201915b50505050509050611c38565b6000611be66127f7565b90506000815111611c065760405180602001604052806000815250611c34565b80611c1084612889565b6009604051602001611c2493929190613974565b6040516020818303038152906040525b9150505b919050565b611c456122a8565b73ffffffffffffffffffffffffffffffffffffffff16611c636115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb090613c24565b60405180910390fd5b8060099080519060200190611ccf929190612e1e565b5050565b611cdb6122a8565b73ffffffffffffffffffffffffffffffffffffffff16611cf96115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690613c24565b60405180910390fd5b6000611d5b60076120fc565b90506000600190505b838390508111611dd357611db68484600184611d809190613f4b565b818110611d9057611d8f614214565b5b9050602002016020810190611da59190613113565b8284611db19190613e6a565b612208565b611dc06007612226565b8080611dcb906140b2565b915050611d64565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611e7960076120fc565b905090565b611e866122a8565b73ffffffffffffffffffffffffffffffffffffffff16611ea46115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef190613c24565b60405180910390fd5b80600a9080519060200190611f10929190612e1e565b5050565b611f1c6122a8565b73ffffffffffffffffffffffffffffffffffffffff16611f3a6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8790613c24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff790613aa4565b60405180910390fd5b612009816126cf565b50565b6120146122a8565b73ffffffffffffffffffffffffffffffffffffffff166120326115bc565b73ffffffffffffffffffffffffffffffffffffffff1614612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f90613c24565b60405180910390fd5b80600d8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b60008160405160200161211d919061392d565b604051602081830303815290604052805190602001209050919050565b60008083905060005b83518110156121e357600084828151811061216157612160614214565b5b60200260200101519050808310156121a3578281604051602001612186929190613948565b6040516020818303038152906040528051906020012092506121cf565b80836040516020016121b6929190613948565b6040516020818303038152906040528051906020012092505b5080806121db906140b2565b915050612143565b50600e54811491505092915050565b600081836122009190613e6a565b905092915050565b6122228282604051806020016040528060008152506129ea565b5050565b6001816000016000828254019250508190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661232383611179565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123748261223c565b6123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90613b64565b60405180910390fd5b60006123be83611179565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061242d57508373ffffffffffffffffffffffffffffffffffffffff1661241584610bda565b73ffffffffffffffffffffffffffffffffffffffff16145b8061243e575061243d8185611dd9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661246782611179565b73ffffffffffffffffffffffffffffffffffffffff16146124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b490613c44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561252d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252490613b04565b60405180910390fd5b612538838383612a45565b6125436000826122b0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125939190613f4b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125ea9190613e6a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836126b19190613ec0565b905092915050565b600081836126c79190613ef1565b905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127a66127a06122a8565b83612369565b6127e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127dc90613cc4565b60405180910390fd5b6127f184848484612a4a565b50505050565b6060600880546128069061404f565b80601f01602080910402602001604051908101604052809291908181526020018280546128329061404f565b801561287f5780601f106128545761010080835404028352916020019161287f565b820191906000526020600020905b81548152906001019060200180831161286257829003601f168201915b5050505050905090565b606060008214156128d1576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129e5565b600082905060005b600082146129035780806128ec906140b2565b915050600a826128fc9190613ec0565b91506128d9565b60008167ffffffffffffffff81111561291f5761291e614243565b5b6040519080825280601f01601f1916602001820160405280156129515781602001600182028036833780820191505090505b5090505b600085146129de5760018261296a9190613f4b565b9150600a856129799190614156565b60306129859190613e6a565b60f81b81838151811061299b5761299a614214565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129d79190613ec0565b9450612955565b8093505050505b919050565b6129f48383612aa6565b612a016000848484612c74565b612a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3790613a84565b60405180910390fd5b505050565b505050565b612a55848484612447565b612a6184848484612c74565b612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9790613a84565b60405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0d90613be4565b60405180910390fd5b612b1f8161223c565b15612b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5690613ac4565b60405180910390fd5b612b6b60008383612a45565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bbb9190613e6a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612c958473ffffffffffffffffffffffffffffffffffffffff16612e0b565b15612dfe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cbe6122a8565b8786866040518563ffffffff1660e01b8152600401612ce094939291906139c0565b602060405180830381600087803b158015612cfa57600080fd5b505af1925050508015612d2b57506040513d601f19601f82011682018060405250810190612d28919061337d565b60015b612dae573d8060008114612d5b576040519150601f19603f3d011682016040523d82523d6000602084013e612d60565b606091505b50600081511415612da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9d90613a84565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e03565b600190505b949350505050565b600080823b905060008111915050919050565b828054612e2a9061404f565b90600052602060002090601f016020900481019282612e4c5760008555612e93565b82601f10612e6557805160ff1916838001178555612e93565b82800160010185558215612e93579182015b82811115612e92578251825591602001919060010190612e77565b5b509050612ea09190612ea4565b5090565b5b80821115612ebd576000816000905550600101612ea5565b5090565b6000612ed4612ecf84613d84565b613d5f565b90508083825260208201905082856020860282011115612ef757612ef661427c565b5b60005b85811015612f275781612f0d8882613063565b845260208401935060208301925050600181019050612efa565b5050509392505050565b6000612f44612f3f84613db0565b613d5f565b905082815260208101848484011115612f6057612f5f614281565b5b612f6b84828561400d565b509392505050565b6000612f86612f8184613de1565b613d5f565b905082815260208101848484011115612fa257612fa1614281565b5b612fad84828561400d565b509392505050565b600081359050612fc481614825565b92915050565b60008083601f840112612fe057612fdf614277565b5b8235905067ffffffffffffffff811115612ffd57612ffc614272565b5b6020830191508360208202830111156130195761301861427c565b5b9250929050565b600082601f83011261303557613034614277565b5b8135613045848260208601612ec1565b91505092915050565b60008135905061305d8161483c565b92915050565b60008135905061307281614853565b92915050565b6000813590506130878161486a565b92915050565b60008151905061309c8161486a565b92915050565b600082601f8301126130b7576130b6614277565b5b81356130c7848260208601612f31565b91505092915050565b600082601f8301126130e5576130e4614277565b5b81356130f5848260208601612f73565b91505092915050565b60008135905061310d81614881565b92915050565b6000602082840312156131295761312861428b565b5b600061313784828501612fb5565b91505092915050565b600080604083850312156131575761315661428b565b5b600061316585828601612fb5565b925050602061317685828601612fb5565b9150509250929050565b6000806000606084860312156131995761319861428b565b5b60006131a786828701612fb5565b93505060206131b886828701612fb5565b92505060406131c9868287016130fe565b9150509250925092565b600080600080608085870312156131ed576131ec61428b565b5b60006131fb87828801612fb5565b945050602061320c87828801612fb5565b935050604061321d878288016130fe565b925050606085013567ffffffffffffffff81111561323e5761323d614286565b5b61324a878288016130a2565b91505092959194509250565b6000806040838503121561326d5761326c61428b565b5b600061327b85828601612fb5565b925050602061328c8582860161304e565b9150509250929050565b600080604083850312156132ad576132ac61428b565b5b60006132bb85828601612fb5565b92505060206132cc858286016130fe565b9150509250929050565b600080602083850312156132ed576132ec61428b565b5b600083013567ffffffffffffffff81111561330b5761330a614286565b5b61331785828601612fca565b92509250509250929050565b6000602082840312156133395761333861428b565b5b600061334784828501613063565b91505092915050565b6000602082840312156133665761336561428b565b5b600061337484828501613078565b91505092915050565b6000602082840312156133935761339261428b565b5b60006133a18482850161308d565b91505092915050565b6000602082840312156133c0576133bf61428b565b5b600082013567ffffffffffffffff8111156133de576133dd614286565b5b6133ea848285016130d0565b91505092915050565b6000602082840312156134095761340861428b565b5b6000613417848285016130fe565b91505092915050565b600080604083850312156134375761343661428b565b5b6000613445858286016130fe565b925050602083013567ffffffffffffffff81111561346657613465614286565b5b61347285828601613020565b9150509250929050565b61348581613f7f565b82525050565b61349c61349782613f7f565b614128565b82525050565b6134ab81613f91565b82525050565b6134ba81613f9d565b82525050565b6134d16134cc82613f9d565b61413a565b82525050565b60006134e282613e27565b6134ec8185613e3d565b93506134fc81856020860161401c565b61350581614290565b840191505092915050565b600061351b82613e32565b6135258185613e4e565b935061353581856020860161401c565b61353e81614290565b840191505092915050565b600061355482613e32565b61355e8185613e5f565b935061356e81856020860161401c565b80840191505092915050565b600081546135878161404f565b6135918186613e5f565b945060018216600081146135ac57600181146135bd576135f0565b60ff198316865281860193506135f0565b6135c685613e12565b60005b838110156135e8578154818901526001820191506020810190506135c9565b838801955050505b50505092915050565b6000613606601a83613e4e565b9150613611826142ae565b602082019050919050565b6000613629603283613e4e565b9150613634826142d7565b604082019050919050565b600061364c602683613e4e565b915061365782614326565b604082019050919050565b600061366f601c83613e4e565b915061367a82614375565b602082019050919050565b6000613692601783613e4e565b915061369d8261439e565b602082019050919050565b60006136b5602483613e4e565b91506136c0826143c7565b604082019050919050565b60006136d8601983613e4e565b91506136e382614416565b602082019050919050565b60006136fb601c83613e4e565b91506137068261443f565b602082019050919050565b600061371e602c83613e4e565b915061372982614468565b604082019050919050565b6000613741603883613e4e565b915061374c826144b7565b604082019050919050565b6000613764602a83613e4e565b915061376f82614506565b604082019050919050565b6000613787602983613e4e565b915061379282614555565b604082019050919050565b60006137aa602083613e4e565b91506137b5826145a4565b602082019050919050565b60006137cd602c83613e4e565b91506137d8826145cd565b604082019050919050565b60006137f0602083613e4e565b91506137fb8261461c565b602082019050919050565b6000613813602983613e4e565b915061381e82614645565b604082019050919050565b6000613836602f83613e4e565b915061384182614694565b604082019050919050565b6000613859602183613e4e565b9150613864826146e3565b604082019050919050565b600061387c600f83613e4e565b915061388782614732565b602082019050919050565b600061389f603183613e4e565b91506138aa8261475b565b604082019050919050565b60006138c2600d83613e4e565b91506138cd826147aa565b602082019050919050565b60006138e5601483613e4e565b91506138f0826147d3565b602082019050919050565b6000613908601783613e4e565b9150613913826147fc565b602082019050919050565b61392781613ff3565b82525050565b6000613939828461348b565b60148201915081905092915050565b600061395482856134c0565b60208201915061396482846134c0565b6020820191508190509392505050565b60006139808286613549565b915061398c8285613549565b9150613998828461357a565b9150819050949350505050565b60006020820190506139ba600083018461347c565b92915050565b60006080820190506139d5600083018761347c565b6139e2602083018661347c565b6139ef604083018561391e565b8181036060830152613a0181846134d7565b905095945050505050565b6000602082019050613a2160008301846134a2565b92915050565b6000602082019050613a3c60008301846134b1565b92915050565b60006020820190508181036000830152613a5c8184613510565b905092915050565b60006020820190508181036000830152613a7d816135f9565b9050919050565b60006020820190508181036000830152613a9d8161361c565b9050919050565b60006020820190508181036000830152613abd8161363f565b9050919050565b60006020820190508181036000830152613add81613662565b9050919050565b60006020820190508181036000830152613afd81613685565b9050919050565b60006020820190508181036000830152613b1d816136a8565b9050919050565b60006020820190508181036000830152613b3d816136cb565b9050919050565b60006020820190508181036000830152613b5d816136ee565b9050919050565b60006020820190508181036000830152613b7d81613711565b9050919050565b60006020820190508181036000830152613b9d81613734565b9050919050565b60006020820190508181036000830152613bbd81613757565b9050919050565b60006020820190508181036000830152613bdd8161377a565b9050919050565b60006020820190508181036000830152613bfd8161379d565b9050919050565b60006020820190508181036000830152613c1d816137c0565b9050919050565b60006020820190508181036000830152613c3d816137e3565b9050919050565b60006020820190508181036000830152613c5d81613806565b9050919050565b60006020820190508181036000830152613c7d81613829565b9050919050565b60006020820190508181036000830152613c9d8161384c565b9050919050565b60006020820190508181036000830152613cbd8161386f565b9050919050565b60006020820190508181036000830152613cdd81613892565b9050919050565b60006020820190508181036000830152613cfd816138b5565b9050919050565b60006020820190508181036000830152613d1d816138d8565b9050919050565b60006020820190508181036000830152613d3d816138fb565b9050919050565b6000602082019050613d59600083018461391e565b92915050565b6000613d69613d7a565b9050613d758282614081565b919050565b6000604051905090565b600067ffffffffffffffff821115613d9f57613d9e614243565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613dcb57613dca614243565b5b613dd482614290565b9050602081019050919050565b600067ffffffffffffffff821115613dfc57613dfb614243565b5b613e0582614290565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e7582613ff3565b9150613e8083613ff3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eb557613eb4614187565b5b828201905092915050565b6000613ecb82613ff3565b9150613ed683613ff3565b925082613ee657613ee56141b6565b5b828204905092915050565b6000613efc82613ff3565b9150613f0783613ff3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f4057613f3f614187565b5b828202905092915050565b6000613f5682613ff3565b9150613f6183613ff3565b925082821015613f7457613f73614187565b5b828203905092915050565b6000613f8a82613fd3565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b8381101561403a57808201518184015260208101905061401f565b83811115614049576000848401525b50505050565b6000600282049050600182168061406757607f821691505b6020821081141561407b5761407a6141e5565b5b50919050565b61408a82614290565b810181811067ffffffffffffffff821117156140a9576140a8614243565b5b80604052505050565b60006140bd82613ff3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140f0576140ef614187565b5b600182019050919050565b600061410682613ffd565b915063ffffffff82141561411d5761411c614187565b5b600182019050919050565b600061413382614144565b9050919050565b6000819050919050565b600061414f826142a1565b9050919050565b600061416182613ff3565b915061416c83613ff3565b92508261417c5761417b6141b6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f50726573616c65204e6565647320546f20426520416374697665000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f53616c65204e6565647320546f20426520416374697665000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061796d656e74206578636565647320746f74616c20737570706c7900000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c696420416464726573730000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f454d5054595f42414c414e434500000000000000000000000000000000000000600082015250565b7f496e636f72726563742045746820616d6f756e74000000000000000000000000600082015250565b7f496e76616c696420707572636861736520616d6f756e74000000000000000000600082015250565b61482e81613f7f565b811461483957600080fd5b50565b61484581613f91565b811461485057600080fd5b50565b61485c81613f9d565b811461486757600080fd5b50565b61487381613fa7565b811461487e57600080fd5b50565b61488a81613ff3565b811461489557600080fd5b5056fea264697066735822122039f184cd496cf9b94ab55278b35ac719fea382625226bbc35e5c851e9751fc5364736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000124d6574614231306e696356696c6c61696e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074231304e494356000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d505a746e4a384b47326a5967707863725151464e653756376e6a646d754b666b4a39693936786f727a4458672f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): MetaB10nicVillains
Arg [1] : symbol (string): B10NICV
Arg [2] : _initNotRevealedURI (string): ipfs://QmPZtnJ8KG2jYgpxcrQQFNe7V7njdmuKfkJ9i96xorzDXg/hidden.json

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 4d6574614231306e696356696c6c61696e730000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 4231304e49435600000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [8] : 697066733a2f2f516d505a746e4a384b47326a5967707863725151464e653756
Arg [9] : 376e6a646d754b666b4a39693936786f727a4458672f68696464656e2e6a736f
Arg [10] : 6e00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

39091:6293:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25285:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41917:766;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26230:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27789:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27312:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39405:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28679:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39617:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39652:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44531:87;;;;;;;;;;;;;:::i;:::-;;44996:383;;;;;;;;;;;;;:::i;:::-;;29089:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44198:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39445:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25924:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39497:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41028:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25654:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38462:94;;;;;;;;;;;;;:::i;:::-;;39368:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40851:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44445:78;;;;;;;;;;;;;:::i;:::-;;37811:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26399:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42998:580;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28082:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44737:72;;;;;;;;;;;;;:::i;:::-;;44817:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39579:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39324:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43586:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40582:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42691:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28448:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44626:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44307:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38711:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41149:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25285:305;25387:4;25439:25;25424:40;;;:11;:40;;;;:105;;;;25496:33;25481:48;;;:11;:48;;;;25424:105;:158;;;;25546:36;25570:11;25546:23;:36::i;:::-;25424:158;25404:178;;25285:305;;;:::o;41917:766::-;42019:14;42036:22;:12;:20;:22::i;:::-;42019:39;;42069:14;42086:10;42069:27;;42116:11;;;;;;;;;;;42108:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;42223:4;42177:50;;:42;42193:17;42199:10;42193:5;:17::i;:::-;42212:6;42177:15;:42::i;:::-;:50;;;42169:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42295:11;;42266:25;42277:13;42266:6;:10;;:25;;;;:::i;:::-;:40;;42258:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42374:1;42358:13;:17;:39;;;;;42395:2;42379:13;:18;42358:39;42350:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42478:13;42459:16;;:32;;;;:::i;:::-;42446:9;:45;;42438:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42534:8;42545:1;42534:12;;42529:145;42553:13;42548:1;:18;;;42529:145;;42594:29;42604:6;42621:1;42612:10;;:6;:10;;;;:::i;:::-;42594:9;:29::i;:::-;42638:24;:12;:22;:24::i;:::-;42568:3;;;;;:::i;:::-;;;;42529:145;;;;42008:675;;41917:766;;:::o;26230:100::-;26284:13;26317:5;26310:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26230:100;:::o;27789:221::-;27865:7;27893:16;27901:7;27893;:16::i;:::-;27885:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27978:15;:24;27994:7;27978:24;;;;;;;;;;;;;;;;;;;;;27971:31;;27789:221;;;:::o;27312:411::-;27393:13;27409:23;27424:7;27409:14;:23::i;:::-;27393:39;;27457:5;27451:11;;:2;:11;;;;27443:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27551:5;27535:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27560:37;27577:5;27584:12;:10;:12::i;:::-;27560:16;:37::i;:::-;27535:62;27513:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27694:21;27703:2;27707:7;27694:8;:21::i;:::-;27382:341;27312:411;;:::o;39405:33::-;;;;:::o;28679:339::-;28874:41;28893:12;:10;:12::i;:::-;28907:7;28874:18;:41::i;:::-;28866:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28982:28;28992:4;28998:2;29002:7;28982:9;:28::i;:::-;28679:339;;;:::o;39617:28::-;;;;;;;;;;;;;:::o;39652:31::-;;;;;;;;;;;;;:::o;44531:87::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44599:11:::1;;;;;;;;;;;44598:12;44584:11;;:26;;;;;;;;;;;;;;;;;;44531:87::o:0;44996:383::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45078:1:::1;45054:21;:25;45046:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;45108:15;45126:21;45108:39;;45165:9;45160:212;45184:17;:24;;;;45180:1;:28;45160:212;;;45238:17;45256:1;45238:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45230:38;;:130;45287:58;45308:14;:36;45323:17;45341:1;45323:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45308:36;;;;;;;;;;;;;;;;45287:16;45299:3;45287:7;:11;;:16;;;;:::i;:::-;:20;;:58;;;;:::i;:::-;45230:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45210:3;;;;;:::i;:::-;;;;45160:212;;;;45035:344;44996:383::o:0;29089:185::-;29227:39;29244:4;29250:2;29254:7;29227:39;;;;;;;;;;;;:16;:39::i;:::-;29089:185;;;:::o;44198:101::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44281:10:::1;44271:7;:20;;;;;;;;;;;;:::i;:::-;;44198:101:::0;:::o;39445:45::-;;;;:::o;25924:239::-;25996:7;26016:13;26032:7;:16;26040:7;26032:16;;;;;;;;;;;;;;;;;;;;;26016:32;;26084:1;26067:19;;:5;:19;;;;26059:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26150:5;26143:12;;;25924:239;;;:::o;39497:37::-;;;;:::o;41028:113::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41119:14:::1;41105:11;:28;;;;41028:113:::0;:::o;25654:208::-;25726:7;25771:1;25754:19;;:5;:19;;;;25746:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25838:9;:16;25848:5;25838:16;;;;;;;;;;;;;;;;25831:23;;25654:208;;;:::o;38462:94::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38527:21:::1;38545:1;38527:9;:21::i;:::-;38462:94::o:0;39368:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40851:169::-;40928:7;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40967:16:::1;40953:11;:30;;;;41001:11;;40994:18;;40851:169:::0;;;:::o;44445:78::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44507:8:::1;;;;;;;;;;;44506:9;44495:8;;:20;;;;;;;;;;;;;;;;;;44445:78::o:0;37811:87::-;37857:7;37884:6;;;;;;;;;;;37877:13;;37811:87;:::o;26399:104::-;26455:13;26488:7;26481:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26399:104;:::o;42998:580::-;43058:14;43075:22;:12;:20;:22::i;:::-;43058:39;;43129:28;43143:13;43129:9;;:13;;:28;;;;:::i;:::-;43116:9;:41;;43108:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;43201:8;;;;;;;;;;;43193:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;43272:1;43256:13;:17;:39;;;;;43293:2;43277:13;:18;43256:39;43248:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;43371:11;;43342:25;43353:13;43342:6;:10;;:25;;;;:::i;:::-;:40;;43334:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43431:9;43443:1;43431:13;;43427:142;43451:13;43446:1;:18;43427:142;;43485:33;43495:10;43516:1;43507:6;:10;;;;:::i;:::-;43485:9;:33::i;:::-;43533:24;:12;:22;:24::i;:::-;43466:3;;;;;:::i;:::-;;;;43427:142;;;;43047:531;42998:580;:::o;28082:295::-;28197:12;:10;:12::i;:::-;28185:24;;:8;:24;;;;28177:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28297:8;28252:18;:32;28271:12;:10;:12::i;:::-;28252:32;;;;;;;;;;;;;;;:42;28285:8;28252:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28350:8;28321:48;;28336:12;:10;:12::i;:::-;28321:48;;;28360:8;28321:48;;;;;;:::i;:::-;;;;;;;;28082:295;;:::o;44737:72::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44797:4:::1;44783:11;;:18;;;;;;;;;;;;;;;;;;44737:72::o:0;44817:171::-;44932:48;44956:4;44962:2;44966:7;44975:4;44932:23;:48::i;:::-;44817:171;;;;:::o;39579:31::-;;;;;;;;;;;;;:::o;39324:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43586:496::-;43659:13;43693:16;43701:7;43693;:16::i;:::-;43685:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43800:5;43785:20;;:11;;;;;;;;;;;:20;;;43782:73;;;43829:14;43822:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43782:73;43867:28;43898:10;:8;:10::i;:::-;43867:41;;43957:1;43932:14;43926:28;:32;:148;;;;;;;;;;;;;;;;;43998:14;44014:25;44031:7;44014:16;:25::i;:::-;44041:13;43981:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43926:148;43919:155;;;43586:496;;;;:::o;40582:128::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40685:17:::1;40669:13;:33;;;;;;;;;;;;:::i;:::-;;40582:128:::0;:::o;42691:295::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42778:14:::1;42795:22;:12;:20;:22::i;:::-;42778:39;;42833:9;42845:1;42833:13;;42828:151;42853:8;;:15;;42848:1;:20;42828:151;;42890:38;42900:8;;42913:1;42909;:5;;;;:::i;:::-;42900:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42926:1;42917:6;:10;;;;:::i;:::-;42890:9;:38::i;:::-;42943:24;:12;:22;:24::i;:::-;42870:3;;;;;:::i;:::-;;;;42828:151;;;;42767:219;42691:295:::0;;:::o;28448:164::-;28545:4;28569:18;:25;28588:5;28569:25;;;;;;;;;;;;;;;:35;28595:8;28569:35;;;;;;;;;;;;;;;;;;;;;;;;;28562:42;;28448:164;;;;:::o;44626:103::-;44673:7;44699:22;:12;:20;:22::i;:::-;44692:29;;44626:103;:::o;44307:126::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44410:15:::1;44393:14;:32;;;;;;;;;;;;:::i;:::-;;44307:126:::0;:::o;38711:192::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38820:1:::1;38800:22;;:8;:22;;;;38792:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38876:19;38886:8;38876:9;:19::i;:::-;38711:192:::0;:::o;41149:105::-;38042:12;:10;:12::i;:::-;38031:23;;:7;:5;:7::i;:::-;:23;;;38023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41234:12:::1;41222:9;:24;;;;41149:105:::0;:::o;12512:157::-;12597:4;12636:25;12621:40;;;:11;:40;;;;12614:47;;12512:157;;;:::o;2459:114::-;2524:7;2551;:14;;;2544:21;;2459:114;;;:::o;40718:125::-;40772:7;40826;40809:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;40799:36;;;;;;40792:43;;40718:125;;;:::o;41262:647::-;41347:4;41371:20;41394:4;41371:27;;41416:9;41411:446;41435:5;:12;41431:1;:16;41411:446;;;41469:20;41492:5;41498:1;41492:8;;;;;;;;:::i;:::-;;;;;;;;41469:31;;41536:12;41521;:27;41517:329;;;41633:12;41647;41616:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41584:95;;;;;;41569:110;;41517:329;;;41784:12;41798;41767:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41735:95;;;;;;41720:110;;41517:329;41454:403;41449:3;;;;;:::i;:::-;;;;41411:446;;;;41890:11;;41874:12;:27;41867:34;;;41262:647;;;;:::o;20145:98::-;20203:7;20234:1;20230;:5;;;;:::i;:::-;20223:12;;20145:98;;;;:::o;32167:110::-;32243:26;32253:2;32257:7;32243:26;;;;;;;;;;;;:9;:26::i;:::-;32167:110;;:::o;2581:127::-;2688:1;2670:7;:14;;;:19;;;;;;;;;;;2581:127;:::o;31183:::-;31248:4;31300:1;31272:30;;:7;:16;31280:7;31272:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31265:37;;31183:127;;;:::o;3085:98::-;3138:7;3165:10;3158:17;;3085:98;:::o;35165:174::-;35267:2;35240:15;:24;35256:7;35240:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35323:7;35319:2;35285:46;;35294:23;35309:7;35294:14;:23::i;:::-;35285:46;;;;;;;;;;;;35165:174;;:::o;31477:348::-;31570:4;31595:16;31603:7;31595;:16::i;:::-;31587:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31671:13;31687:23;31702:7;31687:14;:23::i;:::-;31671:39;;31740:5;31729:16;;:7;:16;;;:51;;;;31773:7;31749:31;;:20;31761:7;31749:11;:20::i;:::-;:31;;;31729:51;:87;;;;31784:32;31801:5;31808:7;31784:16;:32::i;:::-;31729:87;31721:96;;;31477:348;;;;:::o;34469:578::-;34628:4;34601:31;;:23;34616:7;34601:14;:23::i;:::-;:31;;;34593:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34711:1;34697:16;;:2;:16;;;;34689:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34767:39;34788:4;34794:2;34798:7;34767:20;:39::i;:::-;34871:29;34888:1;34892:7;34871:8;:29::i;:::-;34932:1;34913:9;:15;34923:4;34913:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34961:1;34944:9;:13;34954:2;34944:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34992:2;34973:7;:16;34981:7;34973:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35031:7;35027:2;35012:27;;35021:4;35012:27;;;;;;;;;;;;34469:578;;;:::o;21282:98::-;21340:7;21371:1;21367;:5;;;;:::i;:::-;21360:12;;21282:98;;;;:::o;20883:::-;20941:7;20972:1;20968;:5;;;;:::i;:::-;20961:12;;20883:98;;;;:::o;38911:173::-;38967:16;38986:6;;;;;;;;;;;38967:25;;39012:8;39003:6;;:17;;;;;;;;;;;;;;;;;;39067:8;39036:40;;39057:8;39036:40;;;;;;;;;;;;38956:128;38911:173;:::o;29345:328::-;29520:41;29539:12;:10;:12::i;:::-;29553:7;29520:18;:41::i;:::-;29512:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29626:39;29640:4;29646:2;29650:7;29659:5;29626:13;:39::i;:::-;29345:328;;;;:::o;44090:100::-;44142:13;44175:7;44168:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44090:100;:::o;289:723::-;345:13;575:1;566:5;:10;562:53;;;593:10;;;;;;;;;;;;;;;;;;;;;562:53;625:12;640:5;625:20;;656:14;681:78;696:1;688:4;:9;681:78;;714:8;;;;;:::i;:::-;;;;745:2;737:10;;;;;:::i;:::-;;;681:78;;;769:19;801:6;791:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;769:39;;819:154;835:1;826:5;:10;819:154;;863:1;853:11;;;;;:::i;:::-;;;930:2;922:5;:10;;;;:::i;:::-;909:2;:24;;;;:::i;:::-;896:39;;879:6;886;879:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;959:2;950:11;;;;;:::i;:::-;;;819:154;;;997:6;983:21;;;;;289:723;;;;:::o;32504:321::-;32634:18;32640:2;32644:7;32634:5;:18::i;:::-;32685:54;32716:1;32720:2;32724:7;32733:5;32685:22;:54::i;:::-;32663:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32504:321;;;:::o;37275:126::-;;;;:::o;30555:315::-;30712:28;30722:4;30728:2;30732:7;30712:9;:28::i;:::-;30759:48;30782:4;30788:2;30792:7;30801:5;30759:22;:48::i;:::-;30751:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30555:315;;;;:::o;33161:382::-;33255:1;33241:16;;:2;:16;;;;33233:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33314:16;33322:7;33314;:16::i;:::-;33313:17;33305:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33376:45;33405:1;33409:2;33413:7;33376:20;:45::i;:::-;33451:1;33434:9;:13;33444:2;33434:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33482:2;33463:7;:16;33471:7;33463:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33527:7;33523:2;33502:33;;33519:1;33502:33;;;;;;;;;;;;33161:382;;:::o;35904:799::-;36059:4;36080:15;:2;:13;;;:15::i;:::-;36076:620;;;36132:2;36116:36;;;36153:12;:10;:12::i;:::-;36167:4;36173:7;36182:5;36116:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36112:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36375:1;36358:6;:13;:18;36354:272;;;36401:60;;;;;;;;;;:::i;:::-;;;;;;;;36354:272;36576:6;36570:13;36561:6;36557:2;36553:15;36546:38;36112:529;36249:41;;;36239:51;;;:6;:51;;;;36232:58;;;;;36076:620;36680:4;36673:11;;35904:799;;;;;;;:::o;3909:387::-;3969:4;4177:12;4244:7;4232:20;4224:28;;4287:1;4280:4;:8;4273:15;;;3909:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:139::-;2900:5;2938:6;2925:20;2916:29;;2954:33;2981:5;2954:33;:::i;:::-;2854:139;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;2999:137;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3142:141;;;;:::o;3302:338::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:122;;3414:79;;:::i;:::-;3373:122;3531:6;3518:20;3556:78;3630:3;3622:6;3615:4;3607:6;3603:17;3556:78;:::i;:::-;3547:87;;3363:277;3302:338;;;;:::o;3660:340::-;3716:5;3765:3;3758:4;3750:6;3746:17;3742:27;3732:122;;3773:79;;:::i;:::-;3732:122;3890:6;3877:20;3915:79;3990:3;3982:6;3975:4;3967:6;3963:17;3915:79;:::i;:::-;3906:88;;3722:278;3660:340;;;;:::o;4006:139::-;4052:5;4090:6;4077:20;4068:29;;4106:33;4133:5;4106:33;:::i;:::-;4006:139;;;;:::o;4151:329::-;4210:6;4259:2;4247:9;4238:7;4234:23;4230:32;4227:119;;;4265:79;;:::i;:::-;4227:119;4385:1;4410:53;4455:7;4446:6;4435:9;4431:22;4410:53;:::i;:::-;4400:63;;4356:117;4151:329;;;;:::o;4486:474::-;4554:6;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4486:474;;;;;:::o;4966:619::-;5043:6;5051;5059;5108:2;5096:9;5087:7;5083:23;5079:32;5076:119;;;5114:79;;:::i;:::-;5076:119;5234:1;5259:53;5304:7;5295:6;5284:9;5280:22;5259:53;:::i;:::-;5249:63;;5205:117;5361:2;5387:53;5432:7;5423:6;5412:9;5408:22;5387:53;:::i;:::-;5377:63;;5332:118;5489:2;5515:53;5560:7;5551:6;5540:9;5536:22;5515:53;:::i;:::-;5505:63;;5460:118;4966:619;;;;;:::o;5591:943::-;5686:6;5694;5702;5710;5759:3;5747:9;5738:7;5734:23;5730:33;5727:120;;;5766:79;;:::i;:::-;5727:120;5886:1;5911:53;5956:7;5947:6;5936:9;5932:22;5911:53;:::i;:::-;5901:63;;5857:117;6013:2;6039:53;6084:7;6075:6;6064:9;6060:22;6039:53;:::i;:::-;6029:63;;5984:118;6141:2;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6112:118;6297:2;6286:9;6282:18;6269:32;6328:18;6320:6;6317:30;6314:117;;;6350:79;;:::i;:::-;6314:117;6455:62;6509:7;6500:6;6489:9;6485:22;6455:62;:::i;:::-;6445:72;;6240:287;5591:943;;;;;;;:::o;6540:468::-;6605:6;6613;6662:2;6650:9;6641:7;6637:23;6633:32;6630:119;;;6668:79;;:::i;:::-;6630:119;6788:1;6813:53;6858:7;6849:6;6838:9;6834:22;6813:53;:::i;:::-;6803:63;;6759:117;6915:2;6941:50;6983:7;6974:6;6963:9;6959:22;6941:50;:::i;:::-;6931:60;;6886:115;6540:468;;;;;:::o;7014:474::-;7082:6;7090;7139:2;7127:9;7118:7;7114:23;7110:32;7107:119;;;7145:79;;:::i;:::-;7107:119;7265:1;7290:53;7335:7;7326:6;7315:9;7311:22;7290:53;:::i;:::-;7280:63;;7236:117;7392:2;7418:53;7463:7;7454:6;7443:9;7439:22;7418:53;:::i;:::-;7408:63;;7363:118;7014:474;;;;;:::o;7494:559::-;7580:6;7588;7637:2;7625:9;7616:7;7612:23;7608:32;7605:119;;;7643:79;;:::i;:::-;7605:119;7791:1;7780:9;7776:17;7763:31;7821:18;7813:6;7810:30;7807:117;;;7843:79;;:::i;:::-;7807:117;7956:80;8028:7;8019:6;8008:9;8004:22;7956:80;:::i;:::-;7938:98;;;;7734:312;7494:559;;;;;:::o;8059:329::-;8118:6;8167:2;8155:9;8146:7;8142:23;8138:32;8135:119;;;8173:79;;:::i;:::-;8135:119;8293:1;8318:53;8363:7;8354:6;8343:9;8339:22;8318:53;:::i;:::-;8308:63;;8264:117;8059:329;;;;:::o;8394:327::-;8452:6;8501:2;8489:9;8480:7;8476:23;8472:32;8469:119;;;8507:79;;:::i;:::-;8469:119;8627:1;8652:52;8696:7;8687:6;8676:9;8672:22;8652:52;:::i;:::-;8642:62;;8598:116;8394:327;;;;:::o;8727:349::-;8796:6;8845:2;8833:9;8824:7;8820:23;8816:32;8813:119;;;8851:79;;:::i;:::-;8813:119;8971:1;8996:63;9051:7;9042:6;9031:9;9027:22;8996:63;:::i;:::-;8986:73;;8942:127;8727:349;;;;:::o;9082:509::-;9151:6;9200:2;9188:9;9179:7;9175:23;9171:32;9168:119;;;9206:79;;:::i;:::-;9168:119;9354:1;9343:9;9339:17;9326:31;9384:18;9376:6;9373:30;9370:117;;;9406:79;;:::i;:::-;9370:117;9511:63;9566:7;9557:6;9546:9;9542:22;9511:63;:::i;:::-;9501:73;;9297:287;9082:509;;;;:::o;9597:329::-;9656:6;9705:2;9693:9;9684:7;9680:23;9676:32;9673:119;;;9711:79;;:::i;:::-;9673:119;9831:1;9856:53;9901:7;9892:6;9881:9;9877:22;9856:53;:::i;:::-;9846:63;;9802:117;9597:329;;;;:::o;9932:684::-;10025:6;10033;10082:2;10070:9;10061:7;10057:23;10053:32;10050:119;;;10088:79;;:::i;:::-;10050:119;10208:1;10233:53;10278:7;10269:6;10258:9;10254:22;10233:53;:::i;:::-;10223:63;;10179:117;10363:2;10352:9;10348:18;10335:32;10394:18;10386:6;10383:30;10380:117;;;10416:79;;:::i;:::-;10380:117;10521:78;10591:7;10582:6;10571:9;10567:22;10521:78;:::i;:::-;10511:88;;10306:303;9932:684;;;;;:::o;10622:118::-;10709:24;10727:5;10709:24;:::i;:::-;10704:3;10697:37;10622:118;;:::o;10746:157::-;10851:45;10871:24;10889:5;10871:24;:::i;:::-;10851:45;:::i;:::-;10846:3;10839:58;10746:157;;:::o;10909:109::-;10990:21;11005:5;10990:21;:::i;:::-;10985:3;10978:34;10909:109;;:::o;11024:118::-;11111:24;11129:5;11111:24;:::i;:::-;11106:3;11099:37;11024:118;;:::o;11148:157::-;11253:45;11273:24;11291:5;11273:24;:::i;:::-;11253:45;:::i;:::-;11248:3;11241:58;11148:157;;:::o;11311:360::-;11397:3;11425:38;11457:5;11425:38;:::i;:::-;11479:70;11542:6;11537:3;11479:70;:::i;:::-;11472:77;;11558:52;11603:6;11598:3;11591:4;11584:5;11580:16;11558:52;:::i;:::-;11635:29;11657:6;11635:29;:::i;:::-;11630:3;11626:39;11619:46;;11401:270;11311:360;;;;:::o;11677:364::-;11765:3;11793:39;11826:5;11793:39;:::i;:::-;11848:71;11912:6;11907:3;11848:71;:::i;:::-;11841:78;;11928:52;11973:6;11968:3;11961:4;11954:5;11950:16;11928:52;:::i;:::-;12005:29;12027:6;12005:29;:::i;:::-;12000:3;11996:39;11989:46;;11769:272;11677:364;;;;:::o;12047:377::-;12153:3;12181:39;12214:5;12181:39;:::i;:::-;12236:89;12318:6;12313:3;12236:89;:::i;:::-;12229:96;;12334:52;12379:6;12374:3;12367:4;12360:5;12356:16;12334:52;:::i;:::-;12411:6;12406:3;12402:16;12395:23;;12157:267;12047:377;;;;:::o;12454:845::-;12557:3;12594:5;12588:12;12623:36;12649:9;12623:36;:::i;:::-;12675:89;12757:6;12752:3;12675:89;:::i;:::-;12668:96;;12795:1;12784:9;12780:17;12811:1;12806:137;;;;12957:1;12952:341;;;;12773:520;;12806:137;12890:4;12886:9;12875;12871:25;12866:3;12859:38;12926:6;12921:3;12917:16;12910:23;;12806:137;;12952:341;13019:38;13051:5;13019:38;:::i;:::-;13079:1;13093:154;13107:6;13104:1;13101:13;13093:154;;;13181:7;13175:14;13171:1;13166:3;13162:11;13155:35;13231:1;13222:7;13218:15;13207:26;;13129:4;13126:1;13122:12;13117:17;;13093:154;;;13276:6;13271:3;13267:16;13260:23;;12959:334;;12773:520;;12561:738;;12454:845;;;;:::o;13305:366::-;13447:3;13468:67;13532:2;13527:3;13468:67;:::i;:::-;13461:74;;13544:93;13633:3;13544:93;:::i;:::-;13662:2;13657:3;13653:12;13646:19;;13305:366;;;:::o;13677:::-;13819:3;13840:67;13904:2;13899:3;13840:67;:::i;:::-;13833:74;;13916:93;14005:3;13916:93;:::i;:::-;14034:2;14029:3;14025:12;14018:19;;13677:366;;;:::o;14049:::-;14191:3;14212:67;14276:2;14271:3;14212:67;:::i;:::-;14205:74;;14288:93;14377:3;14288:93;:::i;:::-;14406:2;14401:3;14397:12;14390:19;;14049:366;;;:::o;14421:::-;14563:3;14584:67;14648:2;14643:3;14584:67;:::i;:::-;14577:74;;14660:93;14749:3;14660:93;:::i;:::-;14778:2;14773:3;14769:12;14762:19;;14421:366;;;:::o;14793:::-;14935:3;14956:67;15020:2;15015:3;14956:67;:::i;:::-;14949:74;;15032:93;15121:3;15032:93;:::i;:::-;15150:2;15145:3;15141:12;15134:19;;14793:366;;;:::o;15165:::-;15307:3;15328:67;15392:2;15387:3;15328:67;:::i;:::-;15321:74;;15404:93;15493:3;15404:93;:::i;:::-;15522:2;15517:3;15513:12;15506:19;;15165:366;;;:::o;15537:::-;15679:3;15700:67;15764:2;15759:3;15700:67;:::i;:::-;15693:74;;15776:93;15865:3;15776:93;:::i;:::-;15894:2;15889:3;15885:12;15878:19;;15537:366;;;:::o;15909:::-;16051:3;16072:67;16136:2;16131:3;16072:67;:::i;:::-;16065:74;;16148:93;16237:3;16148:93;:::i;:::-;16266:2;16261:3;16257:12;16250:19;;15909:366;;;:::o;16281:::-;16423:3;16444:67;16508:2;16503:3;16444:67;:::i;:::-;16437:74;;16520:93;16609:3;16520:93;:::i;:::-;16638:2;16633:3;16629:12;16622:19;;16281:366;;;:::o;16653:::-;16795:3;16816:67;16880:2;16875:3;16816:67;:::i;:::-;16809:74;;16892:93;16981:3;16892:93;:::i;:::-;17010:2;17005:3;17001:12;16994:19;;16653:366;;;:::o;17025:::-;17167:3;17188:67;17252:2;17247:3;17188:67;:::i;:::-;17181:74;;17264:93;17353:3;17264:93;:::i;:::-;17382:2;17377:3;17373:12;17366:19;;17025:366;;;:::o;17397:::-;17539:3;17560:67;17624:2;17619:3;17560:67;:::i;:::-;17553:74;;17636:93;17725:3;17636:93;:::i;:::-;17754:2;17749:3;17745:12;17738:19;;17397:366;;;:::o;17769:::-;17911:3;17932:67;17996:2;17991:3;17932:67;:::i;:::-;17925:74;;18008:93;18097:3;18008:93;:::i;:::-;18126:2;18121:3;18117:12;18110:19;;17769:366;;;:::o;18141:::-;18283:3;18304:67;18368:2;18363:3;18304:67;:::i;:::-;18297:74;;18380:93;18469:3;18380:93;:::i;:::-;18498:2;18493:3;18489:12;18482:19;;18141:366;;;:::o;18513:::-;18655:3;18676:67;18740:2;18735:3;18676:67;:::i;:::-;18669:74;;18752:93;18841:3;18752:93;:::i;:::-;18870:2;18865:3;18861:12;18854:19;;18513:366;;;:::o;18885:::-;19027:3;19048:67;19112:2;19107:3;19048:67;:::i;:::-;19041:74;;19124:93;19213:3;19124:93;:::i;:::-;19242:2;19237:3;19233:12;19226:19;;18885:366;;;:::o;19257:::-;19399:3;19420:67;19484:2;19479:3;19420:67;:::i;:::-;19413:74;;19496:93;19585:3;19496:93;:::i;:::-;19614:2;19609:3;19605:12;19598:19;;19257:366;;;:::o;19629:::-;19771:3;19792:67;19856:2;19851:3;19792:67;:::i;:::-;19785:74;;19868:93;19957:3;19868:93;:::i;:::-;19986:2;19981:3;19977:12;19970:19;;19629:366;;;:::o;20001:::-;20143:3;20164:67;20228:2;20223:3;20164:67;:::i;:::-;20157:74;;20240:93;20329:3;20240:93;:::i;:::-;20358:2;20353:3;20349:12;20342:19;;20001:366;;;:::o;20373:::-;20515:3;20536:67;20600:2;20595:3;20536:67;:::i;:::-;20529:74;;20612:93;20701:3;20612:93;:::i;:::-;20730:2;20725:3;20721:12;20714:19;;20373:366;;;:::o;20745:::-;20887:3;20908:67;20972:2;20967:3;20908:67;:::i;:::-;20901:74;;20984:93;21073:3;20984:93;:::i;:::-;21102:2;21097:3;21093:12;21086:19;;20745:366;;;:::o;21117:::-;21259:3;21280:67;21344:2;21339:3;21280:67;:::i;:::-;21273:74;;21356:93;21445:3;21356:93;:::i;:::-;21474:2;21469:3;21465:12;21458:19;;21117:366;;;:::o;21489:::-;21631:3;21652:67;21716:2;21711:3;21652:67;:::i;:::-;21645:74;;21728:93;21817:3;21728:93;:::i;:::-;21846:2;21841:3;21837:12;21830:19;;21489:366;;;:::o;21861:118::-;21948:24;21966:5;21948:24;:::i;:::-;21943:3;21936:37;21861:118;;:::o;21985:256::-;22097:3;22112:75;22183:3;22174:6;22112:75;:::i;:::-;22212:2;22207:3;22203:12;22196:19;;22232:3;22225:10;;21985:256;;;;:::o;22247:397::-;22387:3;22402:75;22473:3;22464:6;22402:75;:::i;:::-;22502:2;22497:3;22493:12;22486:19;;22515:75;22586:3;22577:6;22515:75;:::i;:::-;22615:2;22610:3;22606:12;22599:19;;22635:3;22628:10;;22247:397;;;;;:::o;22650:589::-;22875:3;22897:95;22988:3;22979:6;22897:95;:::i;:::-;22890:102;;23009:95;23100:3;23091:6;23009:95;:::i;:::-;23002:102;;23121:92;23209:3;23200:6;23121:92;:::i;:::-;23114:99;;23230:3;23223:10;;22650:589;;;;;;:::o;23245:222::-;23338:4;23376:2;23365:9;23361:18;23353:26;;23389:71;23457:1;23446:9;23442:17;23433:6;23389:71;:::i;:::-;23245:222;;;;:::o;23473:640::-;23668:4;23706:3;23695:9;23691:19;23683:27;;23720:71;23788:1;23777:9;23773:17;23764:6;23720:71;:::i;:::-;23801:72;23869:2;23858:9;23854:18;23845:6;23801:72;:::i;:::-;23883;23951:2;23940:9;23936:18;23927:6;23883:72;:::i;:::-;24002:9;23996:4;23992:20;23987:2;23976:9;23972:18;23965:48;24030:76;24101:4;24092:6;24030:76;:::i;:::-;24022:84;;23473:640;;;;;;;:::o;24119:210::-;24206:4;24244:2;24233:9;24229:18;24221:26;;24257:65;24319:1;24308:9;24304:17;24295:6;24257:65;:::i;:::-;24119:210;;;;:::o;24335:222::-;24428:4;24466:2;24455:9;24451:18;24443:26;;24479:71;24547:1;24536:9;24532:17;24523:6;24479:71;:::i;:::-;24335:222;;;;:::o;24563:313::-;24676:4;24714:2;24703:9;24699:18;24691:26;;24763:9;24757:4;24753:20;24749:1;24738:9;24734:17;24727:47;24791:78;24864:4;24855:6;24791:78;:::i;:::-;24783:86;;24563:313;;;;:::o;24882:419::-;25048:4;25086:2;25075:9;25071:18;25063:26;;25135:9;25129:4;25125:20;25121:1;25110:9;25106:17;25099:47;25163:131;25289:4;25163:131;:::i;:::-;25155:139;;24882:419;;;:::o;25307:::-;25473:4;25511:2;25500:9;25496:18;25488:26;;25560:9;25554:4;25550:20;25546:1;25535:9;25531:17;25524:47;25588:131;25714:4;25588:131;:::i;:::-;25580:139;;25307:419;;;:::o;25732:::-;25898:4;25936:2;25925:9;25921:18;25913:26;;25985:9;25979:4;25975:20;25971:1;25960:9;25956:17;25949:47;26013:131;26139:4;26013:131;:::i;:::-;26005:139;;25732:419;;;:::o;26157:::-;26323:4;26361:2;26350:9;26346:18;26338:26;;26410:9;26404:4;26400:20;26396:1;26385:9;26381:17;26374:47;26438:131;26564:4;26438:131;:::i;:::-;26430:139;;26157:419;;;:::o;26582:::-;26748:4;26786:2;26775:9;26771:18;26763:26;;26835:9;26829:4;26825:20;26821:1;26810:9;26806:17;26799:47;26863:131;26989:4;26863:131;:::i;:::-;26855:139;;26582:419;;;:::o;27007:::-;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:::-;27598:4;27636:2;27625:9;27621:18;27613:26;;27685:9;27679:4;27675:20;27671:1;27660:9;27656:17;27649:47;27713:131;27839:4;27713:131;:::i;:::-;27705:139;;27432:419;;;:::o;27857:::-;28023:4;28061:2;28050:9;28046:18;28038:26;;28110:9;28104:4;28100:20;28096:1;28085:9;28081:17;28074:47;28138:131;28264:4;28138:131;:::i;:::-;28130:139;;27857:419;;;:::o;28282:::-;28448:4;28486:2;28475:9;28471:18;28463:26;;28535:9;28529:4;28525:20;28521:1;28510:9;28506:17;28499:47;28563:131;28689:4;28563:131;:::i;:::-;28555:139;;28282:419;;;:::o;28707:::-;28873:4;28911:2;28900:9;28896:18;28888:26;;28960:9;28954:4;28950:20;28946:1;28935:9;28931:17;28924:47;28988:131;29114:4;28988:131;:::i;:::-;28980:139;;28707:419;;;:::o;29132:::-;29298:4;29336:2;29325:9;29321:18;29313:26;;29385:9;29379:4;29375:20;29371:1;29360:9;29356:17;29349:47;29413:131;29539:4;29413:131;:::i;:::-;29405:139;;29132:419;;;:::o;29557:::-;29723:4;29761:2;29750:9;29746:18;29738:26;;29810:9;29804:4;29800:20;29796:1;29785:9;29781:17;29774:47;29838:131;29964:4;29838:131;:::i;:::-;29830:139;;29557:419;;;:::o;29982:::-;30148:4;30186:2;30175:9;30171:18;30163:26;;30235:9;30229:4;30225:20;30221:1;30210:9;30206:17;30199:47;30263:131;30389:4;30263:131;:::i;:::-;30255:139;;29982:419;;;:::o;30407:::-;30573:4;30611:2;30600:9;30596:18;30588:26;;30660:9;30654:4;30650:20;30646:1;30635:9;30631:17;30624:47;30688:131;30814:4;30688:131;:::i;:::-;30680:139;;30407:419;;;:::o;30832:::-;30998:4;31036:2;31025:9;31021:18;31013:26;;31085:9;31079:4;31075:20;31071:1;31060:9;31056:17;31049:47;31113:131;31239:4;31113:131;:::i;:::-;31105:139;;30832:419;;;:::o;31257:::-;31423:4;31461:2;31450:9;31446:18;31438:26;;31510:9;31504:4;31500:20;31496:1;31485:9;31481:17;31474:47;31538:131;31664:4;31538:131;:::i;:::-;31530:139;;31257:419;;;:::o;31682:::-;31848:4;31886:2;31875:9;31871:18;31863:26;;31935:9;31929:4;31925:20;31921:1;31910:9;31906:17;31899:47;31963:131;32089:4;31963:131;:::i;:::-;31955:139;;31682:419;;;:::o;32107:::-;32273:4;32311:2;32300:9;32296:18;32288:26;;32360:9;32354:4;32350:20;32346:1;32335:9;32331:17;32324:47;32388:131;32514:4;32388:131;:::i;:::-;32380:139;;32107:419;;;:::o;32532:::-;32698:4;32736:2;32725:9;32721:18;32713:26;;32785:9;32779:4;32775:20;32771:1;32760:9;32756:17;32749:47;32813:131;32939:4;32813:131;:::i;:::-;32805:139;;32532:419;;;:::o;32957:::-;33123:4;33161:2;33150:9;33146:18;33138:26;;33210:9;33204:4;33200:20;33196:1;33185:9;33181:17;33174:47;33238:131;33364:4;33238:131;:::i;:::-;33230:139;;32957:419;;;:::o;33382:::-;33548:4;33586:2;33575:9;33571:18;33563:26;;33635:9;33629:4;33625:20;33621:1;33610:9;33606:17;33599:47;33663:131;33789:4;33663:131;:::i;:::-;33655:139;;33382:419;;;:::o;33807:::-;33973:4;34011:2;34000:9;33996:18;33988:26;;34060:9;34054:4;34050:20;34046:1;34035:9;34031:17;34024:47;34088:131;34214:4;34088:131;:::i;:::-;34080:139;;33807:419;;;:::o;34232:::-;34398:4;34436:2;34425:9;34421:18;34413:26;;34485:9;34479:4;34475:20;34471:1;34460:9;34456:17;34449:47;34513:131;34639:4;34513:131;:::i;:::-;34505:139;;34232:419;;;:::o;34657:222::-;34750:4;34788:2;34777:9;34773:18;34765:26;;34801:71;34869:1;34858:9;34854:17;34845:6;34801:71;:::i;:::-;34657:222;;;;:::o;34885:129::-;34919:6;34946:20;;:::i;:::-;34936:30;;34975:33;35003:4;34995:6;34975:33;:::i;:::-;34885:129;;;:::o;35020:75::-;35053:6;35086:2;35080:9;35070:19;;35020:75;:::o;35101:311::-;35178:4;35268:18;35260:6;35257:30;35254:56;;;35290:18;;:::i;:::-;35254:56;35340:4;35332:6;35328:17;35320:25;;35400:4;35394;35390:15;35382:23;;35101:311;;;:::o;35418:307::-;35479:4;35569:18;35561:6;35558:30;35555:56;;;35591:18;;:::i;:::-;35555:56;35629:29;35651:6;35629:29;:::i;:::-;35621:37;;35713:4;35707;35703:15;35695:23;;35418:307;;;:::o;35731:308::-;35793:4;35883:18;35875:6;35872:30;35869:56;;;35905:18;;:::i;:::-;35869:56;35943:29;35965:6;35943:29;:::i;:::-;35935:37;;36027:4;36021;36017:15;36009:23;;35731:308;;;:::o;36045:141::-;36094:4;36117:3;36109:11;;36140:3;36137:1;36130:14;36174:4;36171:1;36161:18;36153:26;;36045:141;;;:::o;36192:98::-;36243:6;36277:5;36271:12;36261:22;;36192:98;;;:::o;36296:99::-;36348:6;36382:5;36376:12;36366:22;;36296:99;;;:::o;36401:168::-;36484:11;36518:6;36513:3;36506:19;36558:4;36553:3;36549:14;36534:29;;36401:168;;;;:::o;36575:169::-;36659:11;36693:6;36688:3;36681:19;36733:4;36728:3;36724:14;36709:29;;36575:169;;;;:::o;36750:148::-;36852:11;36889:3;36874:18;;36750:148;;;;:::o;36904:305::-;36944:3;36963:20;36981:1;36963:20;:::i;:::-;36958:25;;36997:20;37015:1;36997:20;:::i;:::-;36992:25;;37151:1;37083:66;37079:74;37076:1;37073:81;37070:107;;;37157:18;;:::i;:::-;37070:107;37201:1;37198;37194:9;37187:16;;36904:305;;;;:::o;37215:185::-;37255:1;37272:20;37290:1;37272:20;:::i;:::-;37267:25;;37306:20;37324:1;37306:20;:::i;:::-;37301:25;;37345:1;37335:35;;37350:18;;:::i;:::-;37335:35;37392:1;37389;37385:9;37380:14;;37215:185;;;;:::o;37406:348::-;37446:7;37469:20;37487:1;37469:20;:::i;:::-;37464:25;;37503:20;37521:1;37503:20;:::i;:::-;37498:25;;37691:1;37623:66;37619:74;37616:1;37613:81;37608:1;37601:9;37594:17;37590:105;37587:131;;;37698:18;;:::i;:::-;37587:131;37746:1;37743;37739:9;37728:20;;37406:348;;;;:::o;37760:191::-;37800:4;37820:20;37838:1;37820:20;:::i;:::-;37815:25;;37854:20;37872:1;37854:20;:::i;:::-;37849:25;;37893:1;37890;37887:8;37884:34;;;37898:18;;:::i;:::-;37884:34;37943:1;37940;37936:9;37928:17;;37760:191;;;;:::o;37957:96::-;37994:7;38023:24;38041:5;38023:24;:::i;:::-;38012:35;;37957:96;;;:::o;38059:90::-;38093:7;38136:5;38129:13;38122:21;38111:32;;38059:90;;;:::o;38155:77::-;38192:7;38221:5;38210:16;;38155:77;;;:::o;38238:149::-;38274:7;38314:66;38307:5;38303:78;38292:89;;38238:149;;;:::o;38393:126::-;38430:7;38470:42;38463:5;38459:54;38448:65;;38393:126;;;:::o;38525:77::-;38562:7;38591:5;38580:16;;38525:77;;;:::o;38608:93::-;38644:7;38684:10;38677:5;38673:22;38662:33;;38608:93;;;:::o;38707:154::-;38791:6;38786:3;38781;38768:30;38853:1;38844:6;38839:3;38835:16;38828:27;38707:154;;;:::o;38867:307::-;38935:1;38945:113;38959:6;38956:1;38953:13;38945:113;;;39044:1;39039:3;39035:11;39029:18;39025:1;39020:3;39016:11;39009:39;38981:2;38978:1;38974:10;38969:15;;38945:113;;;39076:6;39073:1;39070:13;39067:101;;;39156:1;39147:6;39142:3;39138:16;39131:27;39067:101;38916:258;38867:307;;;:::o;39180:320::-;39224:6;39261:1;39255:4;39251:12;39241:22;;39308:1;39302:4;39298:12;39329:18;39319:81;;39385:4;39377:6;39373:17;39363:27;;39319:81;39447:2;39439:6;39436:14;39416:18;39413:38;39410:84;;;39466:18;;:::i;:::-;39410:84;39231:269;39180:320;;;:::o;39506:281::-;39589:27;39611:4;39589:27;:::i;:::-;39581:6;39577:40;39719:6;39707:10;39704:22;39683:18;39671:10;39668:34;39665:62;39662:88;;;39730:18;;:::i;:::-;39662:88;39770:10;39766:2;39759:22;39549:238;39506:281;;:::o;39793:233::-;39832:3;39855:24;39873:5;39855:24;:::i;:::-;39846:33;;39901:66;39894:5;39891:77;39888:103;;;39971:18;;:::i;:::-;39888:103;40018:1;40011:5;40007:13;40000:20;;39793:233;;;:::o;40032:175::-;40070:3;40093:23;40110:5;40093:23;:::i;:::-;40084:32;;40138:10;40131:5;40128:21;40125:47;;;40152:18;;:::i;:::-;40125:47;40199:1;40192:5;40188:13;40181:20;;40032:175;;;:::o;40213:100::-;40252:7;40281:26;40301:5;40281:26;:::i;:::-;40270:37;;40213:100;;;:::o;40319:79::-;40358:7;40387:5;40376:16;;40319:79;;;:::o;40404:94::-;40443:7;40472:20;40486:5;40472:20;:::i;:::-;40461:31;;40404:94;;;:::o;40504:176::-;40536:1;40553:20;40571:1;40553:20;:::i;:::-;40548:25;;40587:20;40605:1;40587:20;:::i;:::-;40582:25;;40626:1;40616:35;;40631:18;;:::i;:::-;40616:35;40672:1;40669;40665:9;40660:14;;40504:176;;;;:::o;40686:180::-;40734:77;40731:1;40724:88;40831:4;40828:1;40821:15;40855:4;40852:1;40845:15;40872:180;40920:77;40917:1;40910:88;41017:4;41014:1;41007:15;41041:4;41038:1;41031:15;41058:180;41106:77;41103:1;41096:88;41203:4;41200:1;41193:15;41227:4;41224:1;41217:15;41244:180;41292:77;41289:1;41282:88;41389:4;41386:1;41379:15;41413:4;41410:1;41403:15;41430:180;41478:77;41475:1;41468:88;41575:4;41572:1;41565:15;41599:4;41596:1;41589:15;41616:117;41725:1;41722;41715:12;41739:117;41848:1;41845;41838:12;41862:117;41971:1;41968;41961:12;41985:117;42094:1;42091;42084:12;42108:117;42217:1;42214;42207:12;42231:117;42340:1;42337;42330:12;42354:102;42395:6;42446:2;42442:7;42437:2;42430:5;42426:14;42422:28;42412:38;;42354:102;;;:::o;42462:94::-;42495:8;42543:5;42539:2;42535:14;42514:35;;42462:94;;;:::o;42562:176::-;42702:28;42698:1;42690:6;42686:14;42679:52;42562:176;:::o;42744:237::-;42884:34;42880:1;42872:6;42868:14;42861:58;42953:20;42948:2;42940:6;42936:15;42929:45;42744:237;:::o;42987:225::-;43127:34;43123:1;43115:6;43111:14;43104:58;43196:8;43191:2;43183:6;43179:15;43172:33;42987:225;:::o;43218:178::-;43358:30;43354:1;43346:6;43342:14;43335:54;43218:178;:::o;43402:173::-;43542:25;43538:1;43530:6;43526:14;43519:49;43402:173;:::o;43581:223::-;43721:34;43717:1;43709:6;43705:14;43698:58;43790:6;43785:2;43777:6;43773:15;43766:31;43581:223;:::o;43810:175::-;43950:27;43946:1;43938:6;43934:14;43927:51;43810:175;:::o;43991:178::-;44131:30;44127:1;44119:6;44115:14;44108:54;43991:178;:::o;44175:231::-;44315:34;44311:1;44303:6;44299:14;44292:58;44384:14;44379:2;44371:6;44367:15;44360:39;44175:231;:::o;44412:243::-;44552:34;44548:1;44540:6;44536:14;44529:58;44621:26;44616:2;44608:6;44604:15;44597:51;44412:243;:::o;44661:229::-;44801:34;44797:1;44789:6;44785:14;44778:58;44870:12;44865:2;44857:6;44853:15;44846:37;44661:229;:::o;44896:228::-;45036:34;45032:1;45024:6;45020:14;45013:58;45105:11;45100:2;45092:6;45088:15;45081:36;44896:228;:::o;45130:182::-;45270:34;45266:1;45258:6;45254:14;45247:58;45130:182;:::o;45318:231::-;45458:34;45454:1;45446:6;45442:14;45435:58;45527:14;45522:2;45514:6;45510:15;45503:39;45318:231;:::o;45555:182::-;45695:34;45691:1;45683:6;45679:14;45672:58;45555:182;:::o;45743:228::-;45883:34;45879:1;45871:6;45867:14;45860:58;45952:11;45947:2;45939:6;45935:15;45928:36;45743:228;:::o;45977:234::-;46117:34;46113:1;46105:6;46101:14;46094:58;46186:17;46181:2;46173:6;46169:15;46162:42;45977:234;:::o;46217:220::-;46357:34;46353:1;46345:6;46341:14;46334:58;46426:3;46421:2;46413:6;46409:15;46402:28;46217:220;:::o;46443:165::-;46583:17;46579:1;46571:6;46567:14;46560:41;46443:165;:::o;46614:236::-;46754:34;46750:1;46742:6;46738:14;46731:58;46823:19;46818:2;46810:6;46806:15;46799:44;46614:236;:::o;46856:163::-;46996:15;46992:1;46984:6;46980:14;46973:39;46856:163;:::o;47025:170::-;47165:22;47161:1;47153:6;47149:14;47142:46;47025:170;:::o;47201:173::-;47341:25;47337:1;47329:6;47325:14;47318:49;47201:173;:::o;47380:122::-;47453:24;47471:5;47453:24;:::i;:::-;47446:5;47443:35;47433:63;;47492:1;47489;47482:12;47433:63;47380:122;:::o;47508:116::-;47578:21;47593:5;47578:21;:::i;:::-;47571:5;47568:32;47558:60;;47614:1;47611;47604:12;47558:60;47508:116;:::o;47630:122::-;47703:24;47721:5;47703:24;:::i;:::-;47696:5;47693:35;47683:63;;47742:1;47739;47732:12;47683:63;47630:122;:::o;47758:120::-;47830:23;47847:5;47830:23;:::i;:::-;47823:5;47820:34;47810:62;;47868:1;47865;47858:12;47810:62;47758:120;:::o;47884:122::-;47957:24;47975:5;47957:24;:::i;:::-;47950:5;47947:35;47937:63;;47996:1;47993;47986:12;47937:63;47884:122;:::o

Swarm Source

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