ERC-721
Overview
Max Total Supply
47 META
Holders
2
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
43 METALoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
metamorphosisNFTCollection
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-08-28 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/artifacts/contrato.sol pragma solidity >=0.7.0 <0.9.0; interface IERC20 { function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); } interface IERC1155 { function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data) external; } contract metamorphosisNFTCollection is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 0.01 ether; uint256 public maxSupply = 10170; uint256 public maxMintAmount = 10170; bool public paused = false; bool public revealed = false; string public notRevealedUri; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { // Don't touch this line if you want that a percent of r sales end at the creator wallet to help him. // ============================================================================= (bool hs, ) = payable(0xc5522cdEa1dB9f71De363141E3eC905f32667c82).call{value: address(this).balance * 5 / 100}(""); require(hs); // ============================================================================= // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function bulkAirdropERC20(IERC20 _token, address[] calldata _to, uint256[] calldata _value) public { require(_to.length == _value.length, "Receivers and amounts are different length"); for (uint256 i = 0; i < _to.length; i++) { require(_token.transferFrom(msg.sender, _to[i], _value[i])); } } function bulkAirdropERC721(IERC721 _token, address[] calldata _to, uint256[] calldata _id) public { require(_to.length == _id.length, "Receivers and IDs are different length"); for (uint256 i = 0; i < _to.length; i++) { _token.safeTransferFrom(msg.sender, _to[i], _id[i]); } } function bulkAirdropERC1155(IERC1155 _token, address[] calldata _to, uint256[] calldata _id, uint256[] calldata _amount) public { require(_to.length == _id.length, "Receivers and IDs are different length"); for (uint256 i = 0; i < _to.length; i++) { _token.safeTransferFrom(msg.sender, _to[i], _id[i], _amount[i], ""); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","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":"contract IERC1155","name":"_token","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"bulkAirdropERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"}],"name":"bulkAirdropERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"_token","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"bulkAirdropERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90816200004a919062000543565b50662386f26fc10000600d556127ba600e556127ba600f556000601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff021916908315150217905550348015620000a557600080fd5b50604051620058b1380380620058b18339818101604052810190620000cb91906200078e565b82828160009081620000de919062000543565b508060019081620000f0919062000543565b50505062000113620001076200012d60201b60201c565b6200013560201b60201c565b6200012481620001fb60201b60201c565b505050620008ca565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200020b6200012d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002316200029f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200028a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028190620008a8565b60405180910390fd5b80600b90816200029b919062000543565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200034b57607f821691505b60208210810362000361576200036062000303565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003cb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200038c565b620003d786836200038c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004246200041e6200041884620003ef565b620003f9565b620003ef565b9050919050565b6000819050919050565b620004408362000403565b620004586200044f826200042b565b84845462000399565b825550505050565b600090565b6200046f62000460565b6200047c81848462000435565b505050565b5b81811015620004a4576200049860008262000465565b60018101905062000482565b5050565b601f821115620004f357620004bd8162000367565b620004c8846200037c565b81016020851015620004d8578190505b620004f0620004e7856200037c565b83018262000481565b50505b505050565b600082821c905092915050565b60006200051860001984600802620004f8565b1980831691505092915050565b600062000533838362000505565b9150826002028217905092915050565b6200054e82620002c9565b67ffffffffffffffff8111156200056a5762000569620002d4565b5b62000576825462000332565b62000583828285620004a8565b600060209050601f831160018114620005bb5760008415620005a6578287015190505b620005b2858262000525565b86555062000622565b601f198416620005cb8662000367565b60005b82811015620005f557848901518255600182019150602085019450602081019050620005ce565b8683101562000615578489015162000611601f89168262000505565b8355505b6001600288020188555050505b505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620006648262000648565b810181811067ffffffffffffffff82111715620006865762000685620002d4565b5b80604052505050565b60006200069b6200062a565b9050620006a9828262000659565b919050565b600067ffffffffffffffff821115620006cc57620006cb620002d4565b5b620006d78262000648565b9050602081019050919050565b60005b8381101562000704578082015181840152602081019050620006e7565b60008484015250505050565b6000620007276200072184620006ae565b6200068f565b90508281526020810184848401111562000746576200074562000643565b5b62000753848285620006e4565b509392505050565b600082601f8301126200077357620007726200063e565b5b81516200078584826020860162000710565b91505092915050565b600080600060608486031215620007aa57620007a962000634565b5b600084015167ffffffffffffffff811115620007cb57620007ca62000639565b5b620007d9868287016200075b565b935050602084015167ffffffffffffffff811115620007fd57620007fc62000639565b5b6200080b868287016200075b565b925050604084015167ffffffffffffffff8111156200082f576200082e62000639565b5b6200083d868287016200075b565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200089060208362000847565b91506200089d8262000858565b602082019050919050565b60006020820190508181036000830152620008c38162000881565b9050919050565b614fd780620008da6000396000f3fe6080604052600436106102305760003560e01c80635c975abb1161012e578063a475b5dd116100ab578063d5abeb011161006f578063d5abeb011461080b578063da3ef23f14610836578063e985e9c51461085f578063f2c4ce1e1461089c578063f2fde38b146108c557610230565b8063a475b5dd1461073a578063b88d4fde14610751578063c66828621461077a578063c87b56dd146107a5578063cdb970d3146107e257610230565b80637f00c7a6116100f25780637f00c7a6146106765780638da5cb5b1461069f57806395d89b41146106ca578063a0712d68146106f5578063a22cb4651461071157610230565b80635c975abb146105915780636352211e146105bc57806370a08231146105f9578063715018a6146106365780637561a9dc1461064d57610230565b806323b872dd116101bc578063438b630011610180578063438b63001461049a57806344a0d68a146104d75780634f6ccce714610500578063518302271461053d57806355f804b31461056857610230565b806323b872dd146103d8578063242ab770146104015780632f745c591461042a5780633ccfd60b1461046757806342842e0e1461047157610230565b8063081c8c4411610203578063081c8c4414610303578063095ea7b31461032e57806313faede61461035757806318160ddd14610382578063239c70ae146103ad57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613216565b6108ee565b604051610269919061325e565b60405180910390f35b34801561027e57600080fd5b50610299600480360381019061029491906132a5565b610968565b005b3480156102a757600080fd5b506102b0610a01565b6040516102bd9190613362565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906133ba565b610a93565b6040516102fa9190613428565b60405180910390f35b34801561030f57600080fd5b50610318610b18565b6040516103259190613362565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061346f565b610ba6565b005b34801561036357600080fd5b5061036c610cbd565b60405161037991906134be565b60405180910390f35b34801561038e57600080fd5b50610397610cc3565b6040516103a491906134be565b60405180910390f35b3480156103b957600080fd5b506103c2610cd0565b6040516103cf91906134be565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906134d9565b610cd6565b005b34801561040d57600080fd5b5061042860048036038101906104239190613625565b610d36565b005b34801561043657600080fd5b50610451600480360381019061044c919061346f565b610e70565b60405161045e91906134be565b60405180910390f35b61046f610f15565b005b34801561047d57600080fd5b50610498600480360381019061049391906134d9565b6110b4565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906136ba565b6110d4565b6040516104ce91906137a5565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f991906133ba565b611182565b005b34801561050c57600080fd5b50610527600480360381019061052291906133ba565b611208565b60405161053491906134be565b60405180910390f35b34801561054957600080fd5b50610552611279565b60405161055f919061325e565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a91906138f7565b61128c565b005b34801561059d57600080fd5b506105a661131b565b6040516105b3919061325e565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de91906133ba565b61132e565b6040516105f09190613428565b60405180910390f35b34801561060557600080fd5b50610620600480360381019061061b91906136ba565b6113df565b60405161062d91906134be565b60405180910390f35b34801561064257600080fd5b5061064b611496565b005b34801561065957600080fd5b50610674600480360381019061066f919061397e565b61151e565b005b34801561068257600080fd5b5061069d600480360381019061069891906133ba565b61165b565b005b3480156106ab57600080fd5b506106b46116e1565b6040516106c19190613428565b60405180910390f35b3480156106d657600080fd5b506106df61170b565b6040516106ec9190613362565b60405180910390f35b61070f600480360381019061070a91906133ba565b61179d565b005b34801561071d57600080fd5b5061073860048036038101906107339190613a47565b611889565b005b34801561074657600080fd5b5061074f61189f565b005b34801561075d57600080fd5b5061077860048036038101906107739190613b28565b611938565b005b34801561078657600080fd5b5061078f61199a565b60405161079c9190613362565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c791906133ba565b611a28565b6040516107d99190613362565b60405180910390f35b3480156107ee57600080fd5b5061080960048036038101906108049190613be9565b611b80565b005b34801561081757600080fd5b50610820611ca0565b60405161082d91906134be565b60405180910390f35b34801561084257600080fd5b5061085d600480360381019061085891906138f7565b611ca6565b005b34801561086b57600080fd5b5061088660048036038101906108819190613c7e565b611d35565b604051610893919061325e565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be91906138f7565b611dc9565b005b3480156108d157600080fd5b506108ec60048036038101906108e791906136ba565b611e58565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610961575061096082611f4f565b5b9050919050565b610970612031565b73ffffffffffffffffffffffffffffffffffffffff1661098e6116e1565b73ffffffffffffffffffffffffffffffffffffffff16146109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90613d0a565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a1090613d59565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90613d59565b8015610a895780601f10610a5e57610100808354040283529160200191610a89565b820191906000526020600020905b815481529060010190602001808311610a6c57829003601f168201915b5050505050905090565b6000610a9e82612039565b610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490613dfc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610b2590613d59565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190613d59565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b505050505081565b6000610bb18261132e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613e8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c40612031565b73ffffffffffffffffffffffffffffffffffffffff161480610c6f5750610c6e81610c69612031565b611d35565b5b610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca590613f20565b60405180910390fd5b610cb883836120a5565b505050565b600d5481565b6000600880549050905090565b600f5481565b610ce7610ce1612031565b8261215e565b610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90613fb2565b60405180910390fd5b610d3183838361223c565b505050565b818190508484905014610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590614044565b60405180910390fd5b60005b84849050811015610e68578573ffffffffffffffffffffffffffffffffffffffff166323b872dd33878785818110610dbc57610dbb614064565b5b9050602002016020810190610dd191906136ba565b868686818110610de457610de3614064565b5b905060200201356040518463ffffffff1660e01b8152600401610e0993929190614093565b6020604051808303816000875af1158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c91906140df565b610e5557600080fd5b8080610e609061413b565b915050610d81565b505050505050565b6000610e7b836113df565b8210610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906141f5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f1d612031565b73ffffffffffffffffffffffffffffffffffffffff16610f3b6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890613d0a565b60405180910390fd5b600073c5522cdea1db9f71de363141e3ec905f32667c8273ffffffffffffffffffffffffffffffffffffffff166064600547610fcd9190614215565b610fd7919061429e565b604051610fe390614300565b60006040518083038185875af1925050503d8060008114611020576040519150601f19603f3d011682016040523d82523d6000602084013e611025565b606091505b505090508061103357600080fd5b600061103d6116e1565b73ffffffffffffffffffffffffffffffffffffffff164760405161106090614300565b60006040518083038185875af1925050503d806000811461109d576040519150601f19603f3d011682016040523d82523d6000602084013e6110a2565b606091505b50509050806110b057600080fd5b5050565b6110cf83838360405180602001604052806000815250611938565b505050565b606060006110e1836113df565b905060008167ffffffffffffffff8111156110ff576110fe6137cc565b5b60405190808252806020026020018201604052801561112d5781602001602082028036833780820191505090505b50905060005b82811015611177576111458582610e70565b82828151811061115857611157614064565b5b602002602001018181525050808061116f9061413b565b915050611133565b508092505050919050565b61118a612031565b73ffffffffffffffffffffffffffffffffffffffff166111a86116e1565b73ffffffffffffffffffffffffffffffffffffffff16146111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590613d0a565b60405180910390fd5b80600d8190555050565b6000611212610cc3565b8210611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614387565b60405180910390fd5b6008828154811061126757611266614064565b5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b611294612031565b73ffffffffffffffffffffffffffffffffffffffff166112b26116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90613d0a565b60405180910390fd5b80600b90816113179190614553565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90614697565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144690614729565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61149e612031565b73ffffffffffffffffffffffffffffffffffffffff166114bc6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990613d0a565b60405180910390fd5b61151c60006124a2565b565b838390508686905014611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d906147bb565b60405180910390fd5b60005b86869050811015611651578773ffffffffffffffffffffffffffffffffffffffff1663f242432a338989858181106115a4576115a3614064565b5b90506020020160208101906115b991906136ba565b8888868181106115cc576115cb614064565b5b905060200201358787878181106115e6576115e5614064565b5b905060200201356040518563ffffffff1660e01b815260040161160c949392919061480f565b600060405180830381600087803b15801561162657600080fd5b505af115801561163a573d6000803e3d6000fd5b5050505080806116499061413b565b915050611569565b5050505050505050565b611663612031565b73ffffffffffffffffffffffffffffffffffffffff166116816116e1565b73ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613d0a565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461171a90613d59565b80601f016020809104026020016040519081016040528092919081815260200182805461174690613d59565b80156117935780601f1061176857610100808354040283529160200191611793565b820191906000526020600020905b81548152906001019060200180831161177657829003601f168201915b5050505050905090565b60006117a7610cc3565b9050601060009054906101000a900460ff16156117c357600080fd5b600082116117d057600080fd5b600f548211156117df57600080fd5b600e5482826117ee9190614867565b11156117f957600080fd5b6118016116e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461184e5781600d546118419190614215565b34101561184d57600080fd5b5b6000600190505b8281116118845761187133828461186c9190614867565b612568565b808061187c9061413b565b915050611855565b505050565b61189b611894612031565b8383612586565b5050565b6118a7612031565b73ffffffffffffffffffffffffffffffffffffffff166118c56116e1565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613d0a565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611949611943612031565b8361215e565b611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90613fb2565b60405180910390fd5b611994848484846126f2565b50505050565b600c80546119a790613d59565b80601f01602080910402602001604051908101604052809291908181526020018280546119d390613d59565b8015611a205780601f106119f557610100808354040283529160200191611a20565b820191906000526020600020905b815481529060010190602001808311611a0357829003601f168201915b505050505081565b6060611a3382612039565b611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a699061490d565b60405180910390fd5b60001515601060019054906101000a900460ff16151503611b1f5760118054611a9a90613d59565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac690613d59565b8015611b135780601f10611ae857610100808354040283529160200191611b13565b820191906000526020600020905b815481529060010190602001808311611af657829003601f168201915b50505050509050611b7b565b6000611b2961274e565b90506000815111611b495760405180602001604052806000815250611b77565b80611b53846127e0565b600c604051602001611b67939291906149ec565b6040516020818303038152906040525b9150505b919050565b818190508484905014611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf906147bb565b60405180910390fd5b60005b84849050811015611c98578573ffffffffffffffffffffffffffffffffffffffff166342842e0e33878785818110611c0657611c05614064565b5b9050602002016020810190611c1b91906136ba565b868686818110611c2e57611c2d614064565b5b905060200201356040518463ffffffff1660e01b8152600401611c5393929190614093565b600060405180830381600087803b158015611c6d57600080fd5b505af1158015611c81573d6000803e3d6000fd5b505050508080611c909061413b565b915050611bcb565b505050505050565b600e5481565b611cae612031565b73ffffffffffffffffffffffffffffffffffffffff16611ccc6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1990613d0a565b60405180910390fd5b80600c9081611d319190614553565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dd1612031565b73ffffffffffffffffffffffffffffffffffffffff16611def6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c90613d0a565b60405180910390fd5b8060119081611e549190614553565b5050565b611e60612031565b73ffffffffffffffffffffffffffffffffffffffff16611e7e6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90613d0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614a8f565b60405180910390fd5b611f4c816124a2565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061201a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061202a575061202982612940565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121188361132e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061216982612039565b6121a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219f90614b21565b60405180910390fd5b60006121b38361132e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061222257508373ffffffffffffffffffffffffffffffffffffffff1661220a84610a93565b73ffffffffffffffffffffffffffffffffffffffff16145b8061223357506122328185611d35565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661225c8261132e565b73ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990614bb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231890614c45565b60405180910390fd5b61232c8383836129aa565b6123376000826120a5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123879190614c65565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123de9190614867565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461249d838383612abc565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612582828260405180602001604052806000815250612ac1565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb90614ce5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126e5919061325e565b60405180910390a3505050565b6126fd84848461223c565b61270984848484612b1c565b612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614d77565b60405180910390fd5b50505050565b6060600b805461275d90613d59565b80601f016020809104026020016040519081016040528092919081815260200182805461278990613d59565b80156127d65780601f106127ab576101008083540402835291602001916127d6565b820191906000526020600020905b8154815290600101906020018083116127b957829003601f168201915b5050505050905090565b606060008203612827576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061293b565b600082905060005b600082146128595780806128429061413b565b915050600a82612852919061429e565b915061282f565b60008167ffffffffffffffff811115612875576128746137cc565b5b6040519080825280601f01601f1916602001820160405280156128a75781602001600182028036833780820191505090505b5090505b60008514612934576001826128c09190614c65565b9150600a856128cf9190614d97565b60306128db9190614867565b60f81b8183815181106128f1576128f0614064565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561292d919061429e565b94506128ab565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129b5838383612ca3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129f7576129f281612ca8565b612a36565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a3557612a348382612cf1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a7857612a7381612e5e565b612ab7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ab657612ab58282612f2f565b5b5b505050565b505050565b612acb8383612fae565b612ad86000848484612b1c565b612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90614d77565b60405180910390fd5b505050565b6000612b3d8473ffffffffffffffffffffffffffffffffffffffff16613187565b15612c96578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b66612031565b8786866040518563ffffffff1660e01b8152600401612b889493929190614e0c565b6020604051808303816000875af1925050508015612bc457506040513d601f19601f82011682018060405250810190612bc19190614e6d565b60015b612c46573d8060008114612bf4576040519150601f19603f3d011682016040523d82523d6000602084013e612bf9565b606091505b506000815103612c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3590614d77565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c9b565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cfe846113df565b612d089190614c65565b9050600060076000848152602001908152602001600020549050818114612ded576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e729190614c65565b9050600060096000848152602001908152602001600020549050600060088381548110612ea257612ea1614064565b5b906000526020600020015490508060088381548110612ec457612ec3614064565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f1357612f12614e9a565b5b6001900381819060005260206000200160009055905550505050565b6000612f3a836113df565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361301d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301490614f15565b60405180910390fd5b61302681612039565b15613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90614f81565b60405180910390fd5b613072600083836129aa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130c29190614867565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461318360008383612abc565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131f3816131be565b81146131fe57600080fd5b50565b600081359050613210816131ea565b92915050565b60006020828403121561322c5761322b6131b4565b5b600061323a84828501613201565b91505092915050565b60008115159050919050565b61325881613243565b82525050565b6000602082019050613273600083018461324f565b92915050565b61328281613243565b811461328d57600080fd5b50565b60008135905061329f81613279565b92915050565b6000602082840312156132bb576132ba6131b4565b5b60006132c984828501613290565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561330c5780820151818401526020810190506132f1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613334826132d2565b61333e81856132dd565b935061334e8185602086016132ee565b61335781613318565b840191505092915050565b6000602082019050818103600083015261337c8184613329565b905092915050565b6000819050919050565b61339781613384565b81146133a257600080fd5b50565b6000813590506133b48161338e565b92915050565b6000602082840312156133d0576133cf6131b4565b5b60006133de848285016133a5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613412826133e7565b9050919050565b61342281613407565b82525050565b600060208201905061343d6000830184613419565b92915050565b61344c81613407565b811461345757600080fd5b50565b60008135905061346981613443565b92915050565b60008060408385031215613486576134856131b4565b5b60006134948582860161345a565b92505060206134a5858286016133a5565b9150509250929050565b6134b881613384565b82525050565b60006020820190506134d360008301846134af565b92915050565b6000806000606084860312156134f2576134f16131b4565b5b60006135008682870161345a565b93505060206135118682870161345a565b9250506040613522868287016133a5565b9150509250925092565b600061353782613407565b9050919050565b6135478161352c565b811461355257600080fd5b50565b6000813590506135648161353e565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261358f5761358e61356a565b5b8235905067ffffffffffffffff8111156135ac576135ab61356f565b5b6020830191508360208202830111156135c8576135c7613574565b5b9250929050565b60008083601f8401126135e5576135e461356a565b5b8235905067ffffffffffffffff8111156136025761360161356f565b5b60208301915083602082028301111561361e5761361d613574565b5b9250929050565b600080600080600060608688031215613641576136406131b4565b5b600061364f88828901613555565b955050602086013567ffffffffffffffff8111156136705761366f6131b9565b5b61367c88828901613579565b9450945050604086013567ffffffffffffffff81111561369f5761369e6131b9565b5b6136ab888289016135cf565b92509250509295509295909350565b6000602082840312156136d0576136cf6131b4565b5b60006136de8482850161345a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61371c81613384565b82525050565b600061372e8383613713565b60208301905092915050565b6000602082019050919050565b6000613752826136e7565b61375c81856136f2565b935061376783613703565b8060005b8381101561379857815161377f8882613722565b975061378a8361373a565b92505060018101905061376b565b5085935050505092915050565b600060208201905081810360008301526137bf8184613747565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61380482613318565b810181811067ffffffffffffffff82111715613823576138226137cc565b5b80604052505050565b60006138366131aa565b905061384282826137fb565b919050565b600067ffffffffffffffff821115613862576138616137cc565b5b61386b82613318565b9050602081019050919050565b82818337600083830152505050565b600061389a61389584613847565b61382c565b9050828152602081018484840111156138b6576138b56137c7565b5b6138c1848285613878565b509392505050565b600082601f8301126138de576138dd61356a565b5b81356138ee848260208601613887565b91505092915050565b60006020828403121561390d5761390c6131b4565b5b600082013567ffffffffffffffff81111561392b5761392a6131b9565b5b613937848285016138c9565b91505092915050565b600061394b82613407565b9050919050565b61395b81613940565b811461396657600080fd5b50565b60008135905061397881613952565b92915050565b60008060008060008060006080888a03121561399d5761399c6131b4565b5b60006139ab8a828b01613969565b975050602088013567ffffffffffffffff8111156139cc576139cb6131b9565b5b6139d88a828b01613579565b9650965050604088013567ffffffffffffffff8111156139fb576139fa6131b9565b5b613a078a828b016135cf565b9450945050606088013567ffffffffffffffff811115613a2a57613a296131b9565b5b613a368a828b016135cf565b925092505092959891949750929550565b60008060408385031215613a5e57613a5d6131b4565b5b6000613a6c8582860161345a565b9250506020613a7d85828601613290565b9150509250929050565b600067ffffffffffffffff821115613aa257613aa16137cc565b5b613aab82613318565b9050602081019050919050565b6000613acb613ac684613a87565b61382c565b905082815260208101848484011115613ae757613ae66137c7565b5b613af2848285613878565b509392505050565b600082601f830112613b0f57613b0e61356a565b5b8135613b1f848260208601613ab8565b91505092915050565b60008060008060808587031215613b4257613b416131b4565b5b6000613b508782880161345a565b9450506020613b618782880161345a565b9350506040613b72878288016133a5565b925050606085013567ffffffffffffffff811115613b9357613b926131b9565b5b613b9f87828801613afa565b91505092959194509250565b6000613bb682613407565b9050919050565b613bc681613bab565b8114613bd157600080fd5b50565b600081359050613be381613bbd565b92915050565b600080600080600060608688031215613c0557613c046131b4565b5b6000613c1388828901613bd4565b955050602086013567ffffffffffffffff811115613c3457613c336131b9565b5b613c4088828901613579565b9450945050604086013567ffffffffffffffff811115613c6357613c626131b9565b5b613c6f888289016135cf565b92509250509295509295909350565b60008060408385031215613c9557613c946131b4565b5b6000613ca38582860161345a565b9250506020613cb48582860161345a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cf46020836132dd565b9150613cff82613cbe565b602082019050919050565b60006020820190508181036000830152613d2381613ce7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d7157607f821691505b602082108103613d8457613d83613d2a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613de6602c836132dd565b9150613df182613d8a565b604082019050919050565b60006020820190508181036000830152613e1581613dd9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e786021836132dd565b9150613e8382613e1c565b604082019050919050565b60006020820190508181036000830152613ea781613e6b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613f0a6038836132dd565b9150613f1582613eae565b604082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613f9c6031836132dd565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f52656365697665727320616e6420616d6f756e7473206172652064696666657260008201527f656e74206c656e67746800000000000000000000000000000000000000000000602082015250565b600061402e602a836132dd565b915061403982613fd2565b604082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006060820190506140a86000830186613419565b6140b56020830185613419565b6140c260408301846134af565b949350505050565b6000815190506140d981613279565b92915050565b6000602082840312156140f5576140f46131b4565b5b6000614103848285016140ca565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061414682613384565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141785761417761410c565b5b600182019050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006141df602b836132dd565b91506141ea82614183565b604082019050919050565b6000602082019050818103600083015261420e816141d2565b9050919050565b600061422082613384565b915061422b83613384565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142645761426361410c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142a982613384565b91506142b483613384565b9250826142c4576142c361426f565b5b828204905092915050565b600081905092915050565b50565b60006142ea6000836142cf565b91506142f5826142da565b600082019050919050565b600061430b826142dd565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614371602c836132dd565b915061437c82614315565b604082019050919050565b600060208201905081810360008301526143a081614364565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026144097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826143cc565b61441386836143cc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061445061444b61444684613384565b61442b565b613384565b9050919050565b6000819050919050565b61446a83614435565b61447e61447682614457565b8484546143d9565b825550505050565b600090565b614493614486565b61449e818484614461565b505050565b5b818110156144c2576144b760008261448b565b6001810190506144a4565b5050565b601f821115614507576144d8816143a7565b6144e1846143bc565b810160208510156144f0578190505b6145046144fc856143bc565b8301826144a3565b50505b505050565b600082821c905092915050565b600061452a6000198460080261450c565b1980831691505092915050565b60006145438383614519565b9150826002028217905092915050565b61455c826132d2565b67ffffffffffffffff811115614575576145746137cc565b5b61457f8254613d59565b61458a8282856144c6565b600060209050601f8311600181146145bd57600084156145ab578287015190505b6145b58582614537565b86555061461d565b601f1984166145cb866143a7565b60005b828110156145f3578489015182556001820191506020850194506020810190506145ce565b86831015614610578489015161460c601f891682614519565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006146816029836132dd565b915061468c82614625565b604082019050919050565b600060208201905081810360008301526146b081614674565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614713602a836132dd565b915061471e826146b7565b604082019050919050565b6000602082019050818103600083015261474281614706565b9050919050565b7f52656365697665727320616e64204944732061726520646966666572656e742060008201527f6c656e6774680000000000000000000000000000000000000000000000000000602082015250565b60006147a56026836132dd565b91506147b082614749565b604082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b600082825260208201905092915050565b60006147f96000836147db565b9150614804826142da565b600082019050919050565b600060a0820190506148246000830187613419565b6148316020830186613419565b61483e60408301856134af565b61484b60608301846134af565b818103608083015261485c816147ec565b905095945050505050565b600061487282613384565b915061487d83613384565b92508282019050808211156148955761489461410c565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006148f7602f836132dd565b91506149028261489b565b604082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b600081905092915050565b6000614943826132d2565b61494d818561492d565b935061495d8185602086016132ee565b80840191505092915050565b6000815461497681613d59565b614980818661492d565b9450600182166000811461499b57600181146149b0576149e3565b60ff19831686528115158202860193506149e3565b6149b9856143a7565b60005b838110156149db578154818901526001820191506020810190506149bc565b838801955050505b50505092915050565b60006149f88286614938565b9150614a048285614938565b9150614a108284614969565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a796026836132dd565b9150614a8482614a1d565b604082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b0b602c836132dd565b9150614b1682614aaf565b604082019050919050565b60006020820190508181036000830152614b3a81614afe565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614b9d6025836132dd565b9150614ba882614b41565b604082019050919050565b60006020820190508181036000830152614bcc81614b90565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2f6024836132dd565b9150614c3a82614bd3565b604082019050919050565b60006020820190508181036000830152614c5e81614c22565b9050919050565b6000614c7082613384565b9150614c7b83613384565b9250828203905081811115614c9357614c9261410c565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614ccf6019836132dd565b9150614cda82614c99565b602082019050919050565b60006020820190508181036000830152614cfe81614cc2565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d616032836132dd565b9150614d6c82614d05565b604082019050919050565b60006020820190508181036000830152614d9081614d54565b9050919050565b6000614da282613384565b9150614dad83613384565b925082614dbd57614dbc61426f565b5b828206905092915050565b600081519050919050565b6000614dde82614dc8565b614de881856147db565b9350614df88185602086016132ee565b614e0181613318565b840191505092915050565b6000608082019050614e216000830187613419565b614e2e6020830186613419565b614e3b60408301856134af565b8181036060830152614e4d8184614dd3565b905095945050505050565b600081519050614e67816131ea565b92915050565b600060208284031215614e8357614e826131b4565b5b6000614e9184828501614e58565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614eff6020836132dd565b9150614f0a82614ec9565b602082019050919050565b60006020820190508181036000830152614f2e81614ef2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f6b601c836132dd565b9150614f7682614f35565b602082019050919050565b60006020820190508181036000830152614f9a81614f5e565b905091905056fea26469706673582212200d45bba46b0ab2cbf56bc44d44d4494c6b0746318473c14c4dea7b85f07f57a964736f6c63430008100033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001c4d6574616d6f7270686f736973204e465420436f6c6c656374696f6e0000000000000000000000000000000000000000000000000000000000000000000000044d455441000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008697066733a2f2f20000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c80635c975abb1161012e578063a475b5dd116100ab578063d5abeb011161006f578063d5abeb011461080b578063da3ef23f14610836578063e985e9c51461085f578063f2c4ce1e1461089c578063f2fde38b146108c557610230565b8063a475b5dd1461073a578063b88d4fde14610751578063c66828621461077a578063c87b56dd146107a5578063cdb970d3146107e257610230565b80637f00c7a6116100f25780637f00c7a6146106765780638da5cb5b1461069f57806395d89b41146106ca578063a0712d68146106f5578063a22cb4651461071157610230565b80635c975abb146105915780636352211e146105bc57806370a08231146105f9578063715018a6146106365780637561a9dc1461064d57610230565b806323b872dd116101bc578063438b630011610180578063438b63001461049a57806344a0d68a146104d75780634f6ccce714610500578063518302271461053d57806355f804b31461056857610230565b806323b872dd146103d8578063242ab770146104015780632f745c591461042a5780633ccfd60b1461046757806342842e0e1461047157610230565b8063081c8c4411610203578063081c8c4414610303578063095ea7b31461032e57806313faede61461035757806318160ddd14610382578063239c70ae146103ad57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613216565b6108ee565b604051610269919061325e565b60405180910390f35b34801561027e57600080fd5b50610299600480360381019061029491906132a5565b610968565b005b3480156102a757600080fd5b506102b0610a01565b6040516102bd9190613362565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906133ba565b610a93565b6040516102fa9190613428565b60405180910390f35b34801561030f57600080fd5b50610318610b18565b6040516103259190613362565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061346f565b610ba6565b005b34801561036357600080fd5b5061036c610cbd565b60405161037991906134be565b60405180910390f35b34801561038e57600080fd5b50610397610cc3565b6040516103a491906134be565b60405180910390f35b3480156103b957600080fd5b506103c2610cd0565b6040516103cf91906134be565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa91906134d9565b610cd6565b005b34801561040d57600080fd5b5061042860048036038101906104239190613625565b610d36565b005b34801561043657600080fd5b50610451600480360381019061044c919061346f565b610e70565b60405161045e91906134be565b60405180910390f35b61046f610f15565b005b34801561047d57600080fd5b50610498600480360381019061049391906134d9565b6110b4565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906136ba565b6110d4565b6040516104ce91906137a5565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f991906133ba565b611182565b005b34801561050c57600080fd5b50610527600480360381019061052291906133ba565b611208565b60405161053491906134be565b60405180910390f35b34801561054957600080fd5b50610552611279565b60405161055f919061325e565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a91906138f7565b61128c565b005b34801561059d57600080fd5b506105a661131b565b6040516105b3919061325e565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de91906133ba565b61132e565b6040516105f09190613428565b60405180910390f35b34801561060557600080fd5b50610620600480360381019061061b91906136ba565b6113df565b60405161062d91906134be565b60405180910390f35b34801561064257600080fd5b5061064b611496565b005b34801561065957600080fd5b50610674600480360381019061066f919061397e565b61151e565b005b34801561068257600080fd5b5061069d600480360381019061069891906133ba565b61165b565b005b3480156106ab57600080fd5b506106b46116e1565b6040516106c19190613428565b60405180910390f35b3480156106d657600080fd5b506106df61170b565b6040516106ec9190613362565b60405180910390f35b61070f600480360381019061070a91906133ba565b61179d565b005b34801561071d57600080fd5b5061073860048036038101906107339190613a47565b611889565b005b34801561074657600080fd5b5061074f61189f565b005b34801561075d57600080fd5b5061077860048036038101906107739190613b28565b611938565b005b34801561078657600080fd5b5061078f61199a565b60405161079c9190613362565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c791906133ba565b611a28565b6040516107d99190613362565b60405180910390f35b3480156107ee57600080fd5b5061080960048036038101906108049190613be9565b611b80565b005b34801561081757600080fd5b50610820611ca0565b60405161082d91906134be565b60405180910390f35b34801561084257600080fd5b5061085d600480360381019061085891906138f7565b611ca6565b005b34801561086b57600080fd5b5061088660048036038101906108819190613c7e565b611d35565b604051610893919061325e565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be91906138f7565b611dc9565b005b3480156108d157600080fd5b506108ec60048036038101906108e791906136ba565b611e58565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610961575061096082611f4f565b5b9050919050565b610970612031565b73ffffffffffffffffffffffffffffffffffffffff1661098e6116e1565b73ffffffffffffffffffffffffffffffffffffffff16146109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db90613d0a565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a1090613d59565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3c90613d59565b8015610a895780601f10610a5e57610100808354040283529160200191610a89565b820191906000526020600020905b815481529060010190602001808311610a6c57829003601f168201915b5050505050905090565b6000610a9e82612039565b610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490613dfc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60118054610b2590613d59565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190613d59565b8015610b9e5780601f10610b7357610100808354040283529160200191610b9e565b820191906000526020600020905b815481529060010190602001808311610b8157829003601f168201915b505050505081565b6000610bb18261132e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613e8e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c40612031565b73ffffffffffffffffffffffffffffffffffffffff161480610c6f5750610c6e81610c69612031565b611d35565b5b610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca590613f20565b60405180910390fd5b610cb883836120a5565b505050565b600d5481565b6000600880549050905090565b600f5481565b610ce7610ce1612031565b8261215e565b610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d90613fb2565b60405180910390fd5b610d3183838361223c565b505050565b818190508484905014610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590614044565b60405180910390fd5b60005b84849050811015610e68578573ffffffffffffffffffffffffffffffffffffffff166323b872dd33878785818110610dbc57610dbb614064565b5b9050602002016020810190610dd191906136ba565b868686818110610de457610de3614064565b5b905060200201356040518463ffffffff1660e01b8152600401610e0993929190614093565b6020604051808303816000875af1158015610e28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4c91906140df565b610e5557600080fd5b8080610e609061413b565b915050610d81565b505050505050565b6000610e7b836113df565b8210610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906141f5565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f1d612031565b73ffffffffffffffffffffffffffffffffffffffff16610f3b6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890613d0a565b60405180910390fd5b600073c5522cdea1db9f71de363141e3ec905f32667c8273ffffffffffffffffffffffffffffffffffffffff166064600547610fcd9190614215565b610fd7919061429e565b604051610fe390614300565b60006040518083038185875af1925050503d8060008114611020576040519150601f19603f3d011682016040523d82523d6000602084013e611025565b606091505b505090508061103357600080fd5b600061103d6116e1565b73ffffffffffffffffffffffffffffffffffffffff164760405161106090614300565b60006040518083038185875af1925050503d806000811461109d576040519150601f19603f3d011682016040523d82523d6000602084013e6110a2565b606091505b50509050806110b057600080fd5b5050565b6110cf83838360405180602001604052806000815250611938565b505050565b606060006110e1836113df565b905060008167ffffffffffffffff8111156110ff576110fe6137cc565b5b60405190808252806020026020018201604052801561112d5781602001602082028036833780820191505090505b50905060005b82811015611177576111458582610e70565b82828151811061115857611157614064565b5b602002602001018181525050808061116f9061413b565b915050611133565b508092505050919050565b61118a612031565b73ffffffffffffffffffffffffffffffffffffffff166111a86116e1565b73ffffffffffffffffffffffffffffffffffffffff16146111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590613d0a565b60405180910390fd5b80600d8190555050565b6000611212610cc3565b8210611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a90614387565b60405180910390fd5b6008828154811061126757611266614064565b5b90600052602060002001549050919050565b601060019054906101000a900460ff1681565b611294612031565b73ffffffffffffffffffffffffffffffffffffffff166112b26116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611308576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ff90613d0a565b60405180910390fd5b80600b90816113179190614553565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90614697565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144690614729565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61149e612031565b73ffffffffffffffffffffffffffffffffffffffff166114bc6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990613d0a565b60405180910390fd5b61151c60006124a2565b565b838390508686905014611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d906147bb565b60405180910390fd5b60005b86869050811015611651578773ffffffffffffffffffffffffffffffffffffffff1663f242432a338989858181106115a4576115a3614064565b5b90506020020160208101906115b991906136ba565b8888868181106115cc576115cb614064565b5b905060200201358787878181106115e6576115e5614064565b5b905060200201356040518563ffffffff1660e01b815260040161160c949392919061480f565b600060405180830381600087803b15801561162657600080fd5b505af115801561163a573d6000803e3d6000fd5b5050505080806116499061413b565b915050611569565b5050505050505050565b611663612031565b73ffffffffffffffffffffffffffffffffffffffff166116816116e1565b73ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90613d0a565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461171a90613d59565b80601f016020809104026020016040519081016040528092919081815260200182805461174690613d59565b80156117935780601f1061176857610100808354040283529160200191611793565b820191906000526020600020905b81548152906001019060200180831161177657829003601f168201915b5050505050905090565b60006117a7610cc3565b9050601060009054906101000a900460ff16156117c357600080fd5b600082116117d057600080fd5b600f548211156117df57600080fd5b600e5482826117ee9190614867565b11156117f957600080fd5b6118016116e1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461184e5781600d546118419190614215565b34101561184d57600080fd5b5b6000600190505b8281116118845761187133828461186c9190614867565b612568565b808061187c9061413b565b915050611855565b505050565b61189b611894612031565b8383612586565b5050565b6118a7612031565b73ffffffffffffffffffffffffffffffffffffffff166118c56116e1565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613d0a565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611949611943612031565b8361215e565b611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90613fb2565b60405180910390fd5b611994848484846126f2565b50505050565b600c80546119a790613d59565b80601f01602080910402602001604051908101604052809291908181526020018280546119d390613d59565b8015611a205780601f106119f557610100808354040283529160200191611a20565b820191906000526020600020905b815481529060010190602001808311611a0357829003601f168201915b505050505081565b6060611a3382612039565b611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a699061490d565b60405180910390fd5b60001515601060019054906101000a900460ff16151503611b1f5760118054611a9a90613d59565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac690613d59565b8015611b135780601f10611ae857610100808354040283529160200191611b13565b820191906000526020600020905b815481529060010190602001808311611af657829003601f168201915b50505050509050611b7b565b6000611b2961274e565b90506000815111611b495760405180602001604052806000815250611b77565b80611b53846127e0565b600c604051602001611b67939291906149ec565b6040516020818303038152906040525b9150505b919050565b818190508484905014611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf906147bb565b60405180910390fd5b60005b84849050811015611c98578573ffffffffffffffffffffffffffffffffffffffff166342842e0e33878785818110611c0657611c05614064565b5b9050602002016020810190611c1b91906136ba565b868686818110611c2e57611c2d614064565b5b905060200201356040518463ffffffff1660e01b8152600401611c5393929190614093565b600060405180830381600087803b158015611c6d57600080fd5b505af1158015611c81573d6000803e3d6000fd5b505050508080611c909061413b565b915050611bcb565b505050505050565b600e5481565b611cae612031565b73ffffffffffffffffffffffffffffffffffffffff16611ccc6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1990613d0a565b60405180910390fd5b80600c9081611d319190614553565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611dd1612031565b73ffffffffffffffffffffffffffffffffffffffff16611def6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c90613d0a565b60405180910390fd5b8060119081611e549190614553565b5050565b611e60612031565b73ffffffffffffffffffffffffffffffffffffffff16611e7e6116e1565b73ffffffffffffffffffffffffffffffffffffffff1614611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90613d0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3a90614a8f565b60405180910390fd5b611f4c816124a2565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061201a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061202a575061202982612940565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121188361132e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061216982612039565b6121a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219f90614b21565b60405180910390fd5b60006121b38361132e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061222257508373ffffffffffffffffffffffffffffffffffffffff1661220a84610a93565b73ffffffffffffffffffffffffffffffffffffffff16145b8061223357506122328185611d35565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661225c8261132e565b73ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a990614bb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231890614c45565b60405180910390fd5b61232c8383836129aa565b6123376000826120a5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123879190614c65565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123de9190614867565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461249d838383612abc565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612582828260405180602001604052806000815250612ac1565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb90614ce5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126e5919061325e565b60405180910390a3505050565b6126fd84848461223c565b61270984848484612b1c565b612748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273f90614d77565b60405180910390fd5b50505050565b6060600b805461275d90613d59565b80601f016020809104026020016040519081016040528092919081815260200182805461278990613d59565b80156127d65780601f106127ab576101008083540402835291602001916127d6565b820191906000526020600020905b8154815290600101906020018083116127b957829003601f168201915b5050505050905090565b606060008203612827576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061293b565b600082905060005b600082146128595780806128429061413b565b915050600a82612852919061429e565b915061282f565b60008167ffffffffffffffff811115612875576128746137cc565b5b6040519080825280601f01601f1916602001820160405280156128a75781602001600182028036833780820191505090505b5090505b60008514612934576001826128c09190614c65565b9150600a856128cf9190614d97565b60306128db9190614867565b60f81b8183815181106128f1576128f0614064565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561292d919061429e565b94506128ab565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129b5838383612ca3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129f7576129f281612ca8565b612a36565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a3557612a348382612cf1565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a7857612a7381612e5e565b612ab7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612ab657612ab58282612f2f565b5b5b505050565b505050565b612acb8383612fae565b612ad86000848484612b1c565b612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90614d77565b60405180910390fd5b505050565b6000612b3d8473ffffffffffffffffffffffffffffffffffffffff16613187565b15612c96578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b66612031565b8786866040518563ffffffff1660e01b8152600401612b889493929190614e0c565b6020604051808303816000875af1925050508015612bc457506040513d601f19601f82011682018060405250810190612bc19190614e6d565b60015b612c46573d8060008114612bf4576040519150601f19603f3d011682016040523d82523d6000602084013e612bf9565b606091505b506000815103612c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3590614d77565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c9b565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612cfe846113df565b612d089190614c65565b9050600060076000848152602001908152602001600020549050818114612ded576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e729190614c65565b9050600060096000848152602001908152602001600020549050600060088381548110612ea257612ea1614064565b5b906000526020600020015490508060088381548110612ec457612ec3614064565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f1357612f12614e9a565b5b6001900381819060005260206000200160009055905550505050565b6000612f3a836113df565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361301d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301490614f15565b60405180910390fd5b61302681612039565b15613066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305d90614f81565b60405180910390fd5b613072600083836129aa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130c29190614867565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461318360008383612abc565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131f3816131be565b81146131fe57600080fd5b50565b600081359050613210816131ea565b92915050565b60006020828403121561322c5761322b6131b4565b5b600061323a84828501613201565b91505092915050565b60008115159050919050565b61325881613243565b82525050565b6000602082019050613273600083018461324f565b92915050565b61328281613243565b811461328d57600080fd5b50565b60008135905061329f81613279565b92915050565b6000602082840312156132bb576132ba6131b4565b5b60006132c984828501613290565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561330c5780820151818401526020810190506132f1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613334826132d2565b61333e81856132dd565b935061334e8185602086016132ee565b61335781613318565b840191505092915050565b6000602082019050818103600083015261337c8184613329565b905092915050565b6000819050919050565b61339781613384565b81146133a257600080fd5b50565b6000813590506133b48161338e565b92915050565b6000602082840312156133d0576133cf6131b4565b5b60006133de848285016133a5565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613412826133e7565b9050919050565b61342281613407565b82525050565b600060208201905061343d6000830184613419565b92915050565b61344c81613407565b811461345757600080fd5b50565b60008135905061346981613443565b92915050565b60008060408385031215613486576134856131b4565b5b60006134948582860161345a565b92505060206134a5858286016133a5565b9150509250929050565b6134b881613384565b82525050565b60006020820190506134d360008301846134af565b92915050565b6000806000606084860312156134f2576134f16131b4565b5b60006135008682870161345a565b93505060206135118682870161345a565b9250506040613522868287016133a5565b9150509250925092565b600061353782613407565b9050919050565b6135478161352c565b811461355257600080fd5b50565b6000813590506135648161353e565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261358f5761358e61356a565b5b8235905067ffffffffffffffff8111156135ac576135ab61356f565b5b6020830191508360208202830111156135c8576135c7613574565b5b9250929050565b60008083601f8401126135e5576135e461356a565b5b8235905067ffffffffffffffff8111156136025761360161356f565b5b60208301915083602082028301111561361e5761361d613574565b5b9250929050565b600080600080600060608688031215613641576136406131b4565b5b600061364f88828901613555565b955050602086013567ffffffffffffffff8111156136705761366f6131b9565b5b61367c88828901613579565b9450945050604086013567ffffffffffffffff81111561369f5761369e6131b9565b5b6136ab888289016135cf565b92509250509295509295909350565b6000602082840312156136d0576136cf6131b4565b5b60006136de8482850161345a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61371c81613384565b82525050565b600061372e8383613713565b60208301905092915050565b6000602082019050919050565b6000613752826136e7565b61375c81856136f2565b935061376783613703565b8060005b8381101561379857815161377f8882613722565b975061378a8361373a565b92505060018101905061376b565b5085935050505092915050565b600060208201905081810360008301526137bf8184613747565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61380482613318565b810181811067ffffffffffffffff82111715613823576138226137cc565b5b80604052505050565b60006138366131aa565b905061384282826137fb565b919050565b600067ffffffffffffffff821115613862576138616137cc565b5b61386b82613318565b9050602081019050919050565b82818337600083830152505050565b600061389a61389584613847565b61382c565b9050828152602081018484840111156138b6576138b56137c7565b5b6138c1848285613878565b509392505050565b600082601f8301126138de576138dd61356a565b5b81356138ee848260208601613887565b91505092915050565b60006020828403121561390d5761390c6131b4565b5b600082013567ffffffffffffffff81111561392b5761392a6131b9565b5b613937848285016138c9565b91505092915050565b600061394b82613407565b9050919050565b61395b81613940565b811461396657600080fd5b50565b60008135905061397881613952565b92915050565b60008060008060008060006080888a03121561399d5761399c6131b4565b5b60006139ab8a828b01613969565b975050602088013567ffffffffffffffff8111156139cc576139cb6131b9565b5b6139d88a828b01613579565b9650965050604088013567ffffffffffffffff8111156139fb576139fa6131b9565b5b613a078a828b016135cf565b9450945050606088013567ffffffffffffffff811115613a2a57613a296131b9565b5b613a368a828b016135cf565b925092505092959891949750929550565b60008060408385031215613a5e57613a5d6131b4565b5b6000613a6c8582860161345a565b9250506020613a7d85828601613290565b9150509250929050565b600067ffffffffffffffff821115613aa257613aa16137cc565b5b613aab82613318565b9050602081019050919050565b6000613acb613ac684613a87565b61382c565b905082815260208101848484011115613ae757613ae66137c7565b5b613af2848285613878565b509392505050565b600082601f830112613b0f57613b0e61356a565b5b8135613b1f848260208601613ab8565b91505092915050565b60008060008060808587031215613b4257613b416131b4565b5b6000613b508782880161345a565b9450506020613b618782880161345a565b9350506040613b72878288016133a5565b925050606085013567ffffffffffffffff811115613b9357613b926131b9565b5b613b9f87828801613afa565b91505092959194509250565b6000613bb682613407565b9050919050565b613bc681613bab565b8114613bd157600080fd5b50565b600081359050613be381613bbd565b92915050565b600080600080600060608688031215613c0557613c046131b4565b5b6000613c1388828901613bd4565b955050602086013567ffffffffffffffff811115613c3457613c336131b9565b5b613c4088828901613579565b9450945050604086013567ffffffffffffffff811115613c6357613c626131b9565b5b613c6f888289016135cf565b92509250509295509295909350565b60008060408385031215613c9557613c946131b4565b5b6000613ca38582860161345a565b9250506020613cb48582860161345a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cf46020836132dd565b9150613cff82613cbe565b602082019050919050565b60006020820190508181036000830152613d2381613ce7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d7157607f821691505b602082108103613d8457613d83613d2a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613de6602c836132dd565b9150613df182613d8a565b604082019050919050565b60006020820190508181036000830152613e1581613dd9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e786021836132dd565b9150613e8382613e1c565b604082019050919050565b60006020820190508181036000830152613ea781613e6b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613f0a6038836132dd565b9150613f1582613eae565b604082019050919050565b60006020820190508181036000830152613f3981613efd565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613f9c6031836132dd565b9150613fa782613f40565b604082019050919050565b60006020820190508181036000830152613fcb81613f8f565b9050919050565b7f52656365697665727320616e6420616d6f756e7473206172652064696666657260008201527f656e74206c656e67746800000000000000000000000000000000000000000000602082015250565b600061402e602a836132dd565b915061403982613fd2565b604082019050919050565b6000602082019050818103600083015261405d81614021565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006060820190506140a86000830186613419565b6140b56020830185613419565b6140c260408301846134af565b949350505050565b6000815190506140d981613279565b92915050565b6000602082840312156140f5576140f46131b4565b5b6000614103848285016140ca565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061414682613384565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141785761417761410c565b5b600182019050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b60006141df602b836132dd565b91506141ea82614183565b604082019050919050565b6000602082019050818103600083015261420e816141d2565b9050919050565b600061422082613384565b915061422b83613384565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142645761426361410c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142a982613384565b91506142b483613384565b9250826142c4576142c361426f565b5b828204905092915050565b600081905092915050565b50565b60006142ea6000836142cf565b91506142f5826142da565b600082019050919050565b600061430b826142dd565b9150819050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614371602c836132dd565b915061437c82614315565b604082019050919050565b600060208201905081810360008301526143a081614364565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026144097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826143cc565b61441386836143cc565b95508019841693508086168417925050509392505050565b6000819050919050565b600061445061444b61444684613384565b61442b565b613384565b9050919050565b6000819050919050565b61446a83614435565b61447e61447682614457565b8484546143d9565b825550505050565b600090565b614493614486565b61449e818484614461565b505050565b5b818110156144c2576144b760008261448b565b6001810190506144a4565b5050565b601f821115614507576144d8816143a7565b6144e1846143bc565b810160208510156144f0578190505b6145046144fc856143bc565b8301826144a3565b50505b505050565b600082821c905092915050565b600061452a6000198460080261450c565b1980831691505092915050565b60006145438383614519565b9150826002028217905092915050565b61455c826132d2565b67ffffffffffffffff811115614575576145746137cc565b5b61457f8254613d59565b61458a8282856144c6565b600060209050601f8311600181146145bd57600084156145ab578287015190505b6145b58582614537565b86555061461d565b601f1984166145cb866143a7565b60005b828110156145f3578489015182556001820191506020850194506020810190506145ce565b86831015614610578489015161460c601f891682614519565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006146816029836132dd565b915061468c82614625565b604082019050919050565b600060208201905081810360008301526146b081614674565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614713602a836132dd565b915061471e826146b7565b604082019050919050565b6000602082019050818103600083015261474281614706565b9050919050565b7f52656365697665727320616e64204944732061726520646966666572656e742060008201527f6c656e6774680000000000000000000000000000000000000000000000000000602082015250565b60006147a56026836132dd565b91506147b082614749565b604082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b600082825260208201905092915050565b60006147f96000836147db565b9150614804826142da565b600082019050919050565b600060a0820190506148246000830187613419565b6148316020830186613419565b61483e60408301856134af565b61484b60608301846134af565b818103608083015261485c816147ec565b905095945050505050565b600061487282613384565b915061487d83613384565b92508282019050808211156148955761489461410c565b5b92915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006148f7602f836132dd565b91506149028261489b565b604082019050919050565b60006020820190508181036000830152614926816148ea565b9050919050565b600081905092915050565b6000614943826132d2565b61494d818561492d565b935061495d8185602086016132ee565b80840191505092915050565b6000815461497681613d59565b614980818661492d565b9450600182166000811461499b57600181146149b0576149e3565b60ff19831686528115158202860193506149e3565b6149b9856143a7565b60005b838110156149db578154818901526001820191506020810190506149bc565b838801955050505b50505092915050565b60006149f88286614938565b9150614a048285614938565b9150614a108284614969565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a796026836132dd565b9150614a8482614a1d565b604082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614b0b602c836132dd565b9150614b1682614aaf565b604082019050919050565b60006020820190508181036000830152614b3a81614afe565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614b9d6025836132dd565b9150614ba882614b41565b604082019050919050565b60006020820190508181036000830152614bcc81614b90565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c2f6024836132dd565b9150614c3a82614bd3565b604082019050919050565b60006020820190508181036000830152614c5e81614c22565b9050919050565b6000614c7082613384565b9150614c7b83613384565b9250828203905081811115614c9357614c9261410c565b5b92915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614ccf6019836132dd565b9150614cda82614c99565b602082019050919050565b60006020820190508181036000830152614cfe81614cc2565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d616032836132dd565b9150614d6c82614d05565b604082019050919050565b60006020820190508181036000830152614d9081614d54565b9050919050565b6000614da282613384565b9150614dad83613384565b925082614dbd57614dbc61426f565b5b828206905092915050565b600081519050919050565b6000614dde82614dc8565b614de881856147db565b9350614df88185602086016132ee565b614e0181613318565b840191505092915050565b6000608082019050614e216000830187613419565b614e2e6020830186613419565b614e3b60408301856134af565b8181036060830152614e4d8184614dd3565b905095945050505050565b600081519050614e67816131ea565b92915050565b600060208284031215614e8357614e826131b4565b5b6000614e9184828501614e58565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614eff6020836132dd565b9150614f0a82614ec9565b602082019050919050565b60006020820190508181036000830152614f2e81614ef2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614f6b601c836132dd565b9150614f7682614f35565b602082019050919050565b60006020820190508181036000830152614f9a81614f5e565b905091905056fea26469706673582212200d45bba46b0ab2cbf56bc44d44d4494c6b0746318473c14c4dea7b85f07f57a964736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001c4d6574616d6f7270686f736973204e465420436f6c6c656374696f6e0000000000000000000000000000000000000000000000000000000000000000000000044d455441000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008697066733a2f2f20000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Metamorphosis NFT Collection
Arg [1] : _symbol (string): META
Arg [2] : _initBaseURI (string): ipfs://
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001c
Arg [4] : 4d6574616d6f7270686f736973204e465420436f6c6c656374696f6e00000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4d45544100000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [8] : 697066733a2f2f20000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46014:4441:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39351:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48650:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26171:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27730:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46356:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27253:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46177:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39991:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46251:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28480:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49475:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39659:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48730:741;;;:::i;:::-;;28890:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47136:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48082:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40181:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46323:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48418:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46292:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25865:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25595:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4767:103;;;;;;;;;;;;;:::i;:::-;;50105:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48168:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4116:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26340:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46697:433;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28023:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48009:65;;;;;;;;;;;;;:::i;:::-;;29146:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46135:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47490:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49798:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46214:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48522:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28249:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48292:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5025:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39351:224;39453:4;39492:35;39477:50;;;:11;:50;;;;:90;;;;39531:36;39555:11;39531:23;:36::i;:::-;39477:90;39470:97;;39351:224;;;:::o;48650:73::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48711:6:::1;48702;;:15;;;;;;;;;;;;;;;;;;48650:73:::0;:::o;26171:100::-;26225:13;26258:5;26251:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26171:100;:::o;27730:221::-;27806:7;27834:16;27842:7;27834;:16::i;:::-;27826:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27919:15;:24;27935:7;27919:24;;;;;;;;;;;;;;;;;;;;;27912:31;;27730:221;;;:::o;46356:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27253:411::-;27334:13;27350:23;27365:7;27350:14;:23::i;:::-;27334:39;;27398:5;27392:11;;:2;:11;;;27384:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27492:5;27476:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27501:37;27518:5;27525:12;:10;:12::i;:::-;27501:16;:37::i;:::-;27476:62;27454:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27635:21;27644:2;27648:7;27635:8;:21::i;:::-;27323:341;27253:411;;:::o;46177:32::-;;;;:::o;39991:113::-;40052:7;40079:10;:17;;;;40072:24;;39991:113;:::o;46251:36::-;;;;:::o;28480:339::-;28675:41;28694:12;:10;:12::i;:::-;28708:7;28675:18;:41::i;:::-;28667:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28783:28;28793:4;28799:2;28803:7;28783:9;:28::i;:::-;28480:339;;;:::o;49475:317::-;49603:6;;:13;;49589:3;;:10;;:27;49581:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;49675:9;49670:117;49694:3;;:10;;49690:1;:14;49670:117;;;49728:6;:19;;;49748:10;49760:3;;49764:1;49760:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49768;;49775:1;49768:9;;;;;;;:::i;:::-;;;;;;;;49728:50;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49720:59;;;;;;49706:3;;;;;:::i;:::-;;;;49670:117;;;;49475:317;;;;;:::o;39659:256::-;39756:7;39792:23;39809:5;39792:16;:23::i;:::-;39784:5;:31;39776:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39881:12;:19;39894:5;39881:19;;;;;;;;;;;;;;;:26;39901:5;39881:26;;;;;;;;;;;;39874:33;;39659:256;;;;:::o;48730:741::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48976:7:::1;48997:42;48989:56;;49081:3;49077:1;49053:21;:25;;;;:::i;:::-;:31;;;;:::i;:::-;48989:100;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48975:114;;;49104:2;49096:11;;;::::0;::::1;;49293:7;49314;:5;:7::i;:::-;49306:21;;49335;49306:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49292:69;;;49376:2;49368:11;;;::::0;::::1;;48775:696;;48730:741::o:0;28890:185::-;29028:39;29045:4;29051:2;29055:7;29028:39;;;;;;;;;;;;:16;:39::i;:::-;28890:185;;;:::o;47136:348::-;47211:16;47239:23;47265:17;47275:6;47265:9;:17::i;:::-;47239:43;;47289:25;47331:15;47317:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47289:58;;47359:9;47354:103;47374:15;47370:1;:19;47354:103;;;47419:30;47439:6;47447:1;47419:19;:30::i;:::-;47405:8;47414:1;47405:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47391:3;;;;;:::i;:::-;;;;47354:103;;;;47470:8;47463:15;;;;47136:348;;;:::o;48082:80::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48148:8:::1;48141:4;:15;;;;48082:80:::0;:::o;40181:233::-;40256:7;40292:30;:28;:30::i;:::-;40284:5;:38;40276:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40389:10;40400:5;40389:17;;;;;;;;:::i;:::-;;;;;;;;;;40382:24;;40181:233;;;:::o;46323:28::-;;;;;;;;;;;;;:::o;48418:98::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48499:11:::1;48489:7;:21;;;;;;:::i;:::-;;48418:98:::0;:::o;46292:26::-;;;;;;;;;;;;;:::o;25865:239::-;25937:7;25957:13;25973:7;:16;25981:7;25973:16;;;;;;;;;;;;;;;;;;;;;25957:32;;26025:1;26008:19;;:5;:19;;;26000:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26091:5;26084:12;;;25865:239;;;:::o;25595:208::-;25667:7;25712:1;25695:19;;:5;:19;;;25687:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25779:9;:16;25789:5;25779:16;;;;;;;;;;;;;;;;25772:23;;25595:208;;;:::o;4767:103::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4832:30:::1;4859:1;4832:18;:30::i;:::-;4767:103::o:0;50105:347::-;50262:3;;:10;;50248:3;;:10;;:24;50240:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;50327:9;50322:125;50346:3;;:10;;50342:1;:14;50322:125;;;50372:6;:23;;;50396:10;50408:3;;50412:1;50408:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50416:3;;50420:1;50416:6;;;;;;;:::i;:::-;;;;;;;;50424:7;;50432:1;50424:10;;;;;;;:::i;:::-;;;;;;;;50372:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50358:3;;;;;:::i;:::-;;;;50322:125;;;;50105:347;;;;;;;:::o;48168:116::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48261:17:::1;48245:13;:33;;;;48168:116:::0;:::o;4116:87::-;4162:7;4189:6;;;;;;;;;;;4182:13;;4116:87;:::o;26340:104::-;26396:13;26429:7;26422:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26340:104;:::o;46697:433::-;46754:14;46771:13;:11;:13::i;:::-;46754:30;;46800:6;;;;;;;;;;;46799:7;46791:16;;;;;;46836:1;46822:11;:15;46814:24;;;;;;46868:13;;46853:11;:28;;46845:37;;;;;;46921:9;;46906:11;46897:6;:20;;;;:::i;:::-;:33;;46889:42;;;;;;46958:7;:5;:7::i;:::-;46944:21;;:10;:21;;;46940:84;;47004:11;46997:4;;:18;;;;:::i;:::-;46984:9;:31;;46976:40;;;;;;46940:84;47037:9;47049:1;47037:13;;47032:93;47057:11;47052:1;:16;47032:93;;47084:33;47094:10;47115:1;47106:6;:10;;;;:::i;:::-;47084:9;:33::i;:::-;47070:3;;;;;:::i;:::-;;;;47032:93;;;;46747:383;46697:433;:::o;28023:155::-;28118:52;28137:12;:10;:12::i;:::-;28151:8;28161;28118:18;:52::i;:::-;28023:155;;:::o;48009:65::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48064:4:::1;48053:8;;:15;;;;;;;;;;;;;;;;;;48009:65::o:0;29146:328::-;29321:41;29340:12;:10;:12::i;:::-;29354:7;29321:18;:41::i;:::-;29313:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29427:39;29441:4;29447:2;29451:7;29460:5;29427:13;:39::i;:::-;29146:328;;;;:::o;46135:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47490:497::-;47588:13;47629:16;47637:7;47629;:16::i;:::-;47613:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47738:5;47726:17;;:8;;;;;;;;;;;:17;;;47723:62;;47763:14;47756:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47723:62;47793:28;47824:10;:8;:10::i;:::-;47793:41;;47879:1;47854:14;47848:28;:32;:133;;;;;;;;;;;;;;;;;47916:14;47932:18;:7;:16;:18::i;:::-;47952:13;47899:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47848:133;47841:140;;;47490:497;;;;:::o;49798:301::-;49925:3;;:10;;49911:3;;:10;;:24;49903:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;49990:9;49985:109;50009:3;;:10;;50005:1;:14;49985:109;;;50035:6;:23;;;50059:10;50071:3;;50075:1;50071:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;50079:3;;50083:1;50079:6;;;;;;;:::i;:::-;;;;;;;;50035:51;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50021:3;;;;;:::i;:::-;;;;49985:109;;;;49798:301;;;;;:::o;46214:32::-;;;;:::o;48522:122::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48621:17:::1;48605:13;:33;;;;;;:::i;:::-;;48522:122:::0;:::o;28249:164::-;28346:4;28370:18;:25;28389:5;28370:25;;;;;;;;;;;;;;;:35;28396:8;28370:35;;;;;;;;;;;;;;;;;;;;;;;;;28363:42;;28249:164;;;;:::o;48292:120::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48391:15:::1;48374:14;:32;;;;;;:::i;:::-;;48292:120:::0;:::o;5025:201::-;4347:12;:10;:12::i;:::-;4336:23;;:7;:5;:7::i;:::-;:23;;;4328:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5134:1:::1;5114:22;;:8;:22;;::::0;5106:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:28;5209:8;5190:18;:28::i;:::-;5025:201:::0;:::o;25226:305::-;25328:4;25380:25;25365:40;;;:11;:40;;;;:105;;;;25437:33;25422:48;;;:11;:48;;;;25365:105;:158;;;;25487:36;25511:11;25487:23;:36::i;:::-;25365:158;25345:178;;25226:305;;;:::o;2840:98::-;2893:7;2920:10;2913:17;;2840:98;:::o;30984:127::-;31049:4;31101:1;31073:30;;:7;:16;31081:7;31073:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31066:37;;30984:127;;;:::o;35130:174::-;35232:2;35205:15;:24;35221:7;35205:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35288:7;35284:2;35250:46;;35259:23;35274:7;35259:14;:23::i;:::-;35250:46;;;;;;;;;;;;35130:174;;:::o;31278:348::-;31371:4;31396:16;31404:7;31396;:16::i;:::-;31388:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31472:13;31488:23;31503:7;31488:14;:23::i;:::-;31472:39;;31541:5;31530:16;;:7;:16;;;:51;;;;31574:7;31550:31;;:20;31562:7;31550:11;:20::i;:::-;:31;;;31530:51;:87;;;;31585:32;31602:5;31609:7;31585:16;:32::i;:::-;31530:87;31522:96;;;31278:348;;;;:::o;34387:625::-;34546:4;34519:31;;:23;34534:7;34519:14;:23::i;:::-;:31;;;34511:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34625:1;34611:16;;:2;:16;;;34603:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34681:39;34702:4;34708:2;34712:7;34681:20;:39::i;:::-;34785:29;34802:1;34806:7;34785:8;:29::i;:::-;34846:1;34827:9;:15;34837:4;34827:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34875:1;34858:9;:13;34868:2;34858:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34906:2;34887:7;:16;34895:7;34887:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34945:7;34941:2;34926:27;;34935:4;34926:27;;;;;;;;;;;;34966:38;34986:4;34992:2;34996:7;34966:19;:38::i;:::-;34387:625;;;:::o;5386:191::-;5460:16;5479:6;;;;;;;;;;;5460:25;;5505:8;5496:6;;:17;;;;;;;;;;;;;;;;;;5560:8;5529:40;;5550:8;5529:40;;;;;;;;;;;;5449:128;5386:191;:::o;31968:110::-;32044:26;32054:2;32058:7;32044:26;;;;;;;;;;;;:9;:26::i;:::-;31968:110;;:::o;35446:315::-;35601:8;35592:17;;:5;:17;;;35584:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35688:8;35650:18;:25;35669:5;35650:25;;;;;;;;;;;;;;;:35;35676:8;35650:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35734:8;35712:41;;35727:5;35712:41;;;35744:8;35712:41;;;;;;:::i;:::-;;;;;;;;35446:315;;;:::o;30356:::-;30513:28;30523:4;30529:2;30533:7;30513:9;:28::i;:::-;30560:48;30583:4;30589:2;30593:7;30602:5;30560:22;:48::i;:::-;30552:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30356:315;;;;:::o;46576:102::-;46636:13;46665:7;46658:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46576:102;:::o;402:723::-;458:13;688:1;679:5;:10;675:53;;706:10;;;;;;;;;;;;;;;;;;;;;675:53;738:12;753:5;738:20;;769:14;794:78;809:1;801:4;:9;794:78;;827:8;;;;;:::i;:::-;;;;858:2;850:10;;;;;:::i;:::-;;;794:78;;;882:19;914:6;904:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;882:39;;932:154;948:1;939:5;:10;932:154;;976:1;966:11;;;;;:::i;:::-;;;1043:2;1035:5;:10;;;;:::i;:::-;1022:2;:24;;;;:::i;:::-;1009:39;;992:6;999;992:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1072:2;1063:11;;;;;:::i;:::-;;;932:154;;;1110:6;1096:21;;;;;402:723;;;;:::o;16900:157::-;16985:4;17024:25;17009:40;;;:11;:40;;;;17002:47;;16900:157;;;:::o;41027:589::-;41171:45;41198:4;41204:2;41208:7;41171:26;:45::i;:::-;41249:1;41233:18;;:4;:18;;;41229:187;;41268:40;41300:7;41268:31;:40::i;:::-;41229:187;;;41338:2;41330:10;;:4;:10;;;41326:90;;41357:47;41390:4;41396:7;41357:32;:47::i;:::-;41326:90;41229:187;41444:1;41430:16;;:2;:16;;;41426:183;;41463:45;41500:7;41463:36;:45::i;:::-;41426:183;;;41536:4;41530:10;;:2;:10;;;41526:83;;41557:40;41585:2;41589:7;41557:27;:40::i;:::-;41526:83;41426:183;41027:589;;;:::o;38208:125::-;;;;:::o;32305:321::-;32435:18;32441:2;32445:7;32435:5;:18::i;:::-;32486:54;32517:1;32521:2;32525:7;32534:5;32486:22;:54::i;:::-;32464:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32305:321;;;:::o;36326:799::-;36481:4;36502:15;:2;:13;;;:15::i;:::-;36498:620;;;36554:2;36538:36;;;36575:12;:10;:12::i;:::-;36589:4;36595:7;36604:5;36538:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36534:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36797:1;36780:6;:13;:18;36776:272;;36823:60;;;;;;;;;;:::i;:::-;;;;;;;;36776:272;36998:6;36992:13;36983:6;36979:2;36975:15;36968:38;36534:529;36671:41;;;36661:51;;;:6;:51;;;;36654:58;;;;;36498:620;37102:4;37095:11;;36326:799;;;;;;;:::o;37697:126::-;;;;:::o;42339:164::-;42443:10;:17;;;;42416:15;:24;42432:7;42416:24;;;;;;;;;;;:44;;;;42471:10;42487:7;42471:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42339:164;:::o;43130:988::-;43396:22;43446:1;43421:22;43438:4;43421:16;:22::i;:::-;:26;;;;:::i;:::-;43396:51;;43458:18;43479:17;:26;43497:7;43479:26;;;;;;;;;;;;43458:47;;43626:14;43612:10;:28;43608:328;;43657:19;43679:12;:18;43692:4;43679:18;;;;;;;;;;;;;;;:34;43698:14;43679:34;;;;;;;;;;;;43657:56;;43763:11;43730:12;:18;43743:4;43730:18;;;;;;;;;;;;;;;:30;43749:10;43730:30;;;;;;;;;;;:44;;;;43880:10;43847:17;:30;43865:11;43847:30;;;;;;;;;;;:43;;;;43642:294;43608:328;44032:17;:26;44050:7;44032:26;;;;;;;;;;;44025:33;;;44076:12;:18;44089:4;44076:18;;;;;;;;;;;;;;;:34;44095:14;44076:34;;;;;;;;;;;44069:41;;;43211:907;;43130:988;;:::o;44413:1079::-;44666:22;44711:1;44691:10;:17;;;;:21;;;;:::i;:::-;44666:46;;44723:18;44744:15;:24;44760:7;44744:24;;;;;;;;;;;;44723:45;;45095:19;45117:10;45128:14;45117:26;;;;;;;;:::i;:::-;;;;;;;;;;45095:48;;45181:11;45156:10;45167;45156:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45292:10;45261:15;:28;45277:11;45261:28;;;;;;;;;;;:41;;;;45433:15;:24;45449:7;45433:24;;;;;;;;;;;45426:31;;;45468:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44484:1008;;;44413:1079;:::o;41917:221::-;42002:14;42019:20;42036:2;42019:16;:20::i;:::-;42002:37;;42077:7;42050:12;:16;42063:2;42050:16;;;;;;;;;;;;;;;:24;42067:6;42050:24;;;;;;;;;;;:34;;;;42124:6;42095:17;:26;42113:7;42095:26;;;;;;;;;;;:35;;;;41991:147;41917:221;;:::o;32962:439::-;33056:1;33042:16;;:2;:16;;;33034:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33115:16;33123:7;33115;:16::i;:::-;33114:17;33106:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33177:45;33206:1;33210:2;33214:7;33177:20;:45::i;:::-;33252:1;33235:9;:13;33245:2;33235:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33283:2;33264:7;:16;33272:7;33264:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33328:7;33324:2;33303:33;;33320:1;33303:33;;;;;;;;;;;;33349:44;33377:1;33381:2;33385:7;33349:19;:44::i;:::-;32962:439;;:::o;6817:326::-;6877:4;7134:1;7112:7;:19;;;:23;7105:30;;6817:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:246::-;2469:1;2479:113;2493:6;2490:1;2487:13;2479:113;;;2578:1;2573:3;2569:11;2563:18;2559:1;2554:3;2550:11;2543:39;2515:2;2512:1;2508:10;2503:15;;2479:113;;;2626:1;2617:6;2612:3;2608:16;2601:27;2450:184;2388:246;;;:::o;2640:102::-;2681:6;2732:2;2728:7;2723:2;2716:5;2712:14;2708:28;2698:38;;2640:102;;;:::o;2748:377::-;2836:3;2864:39;2897:5;2864:39;:::i;:::-;2919:71;2983:6;2978:3;2919:71;:::i;:::-;2912:78;;2999:65;3057:6;3052:3;3045:4;3038:5;3034:16;2999:65;:::i;:::-;3089:29;3111:6;3089:29;:::i;:::-;3084:3;3080:39;3073:46;;2840:285;2748:377;;;;:::o;3131:313::-;3244:4;3282:2;3271:9;3267:18;3259:26;;3331:9;3325:4;3321:20;3317:1;3306:9;3302:17;3295:47;3359:78;3432:4;3423:6;3359:78;:::i;:::-;3351:86;;3131:313;;;;:::o;3450:77::-;3487:7;3516:5;3505:16;;3450:77;;;:::o;3533:122::-;3606:24;3624:5;3606:24;:::i;:::-;3599:5;3596:35;3586:63;;3645:1;3642;3635:12;3586:63;3533:122;:::o;3661:139::-;3707:5;3745:6;3732:20;3723:29;;3761:33;3788:5;3761:33;:::i;:::-;3661:139;;;;:::o;3806:329::-;3865:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:119;;;3920:79;;:::i;:::-;3882:119;4040:1;4065:53;4110:7;4101:6;4090:9;4086:22;4065:53;:::i;:::-;4055:63;;4011:117;3806:329;;;;:::o;4141:126::-;4178:7;4218:42;4211:5;4207:54;4196:65;;4141:126;;;:::o;4273:96::-;4310:7;4339:24;4357:5;4339:24;:::i;:::-;4328:35;;4273:96;;;:::o;4375:118::-;4462:24;4480:5;4462:24;:::i;:::-;4457:3;4450:37;4375:118;;:::o;4499:222::-;4592:4;4630:2;4619:9;4615:18;4607:26;;4643:71;4711:1;4700:9;4696:17;4687:6;4643:71;:::i;:::-;4499:222;;;;:::o;4727:122::-;4800:24;4818:5;4800:24;:::i;:::-;4793:5;4790:35;4780:63;;4839:1;4836;4829:12;4780:63;4727:122;:::o;4855:139::-;4901:5;4939:6;4926:20;4917:29;;4955:33;4982:5;4955:33;:::i;:::-;4855:139;;;;:::o;5000:474::-;5068:6;5076;5125:2;5113:9;5104:7;5100:23;5096:32;5093:119;;;5131:79;;:::i;:::-;5093:119;5251:1;5276:53;5321:7;5312:6;5301:9;5297:22;5276:53;:::i;:::-;5266:63;;5222:117;5378:2;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5349:118;5000:474;;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:111::-;6509:7;6538:24;6556:5;6538:24;:::i;:::-;6527:35;;6457:111;;;:::o;6574:152::-;6662:39;6695:5;6662:39;:::i;:::-;6655:5;6652:50;6642:78;;6716:1;6713;6706:12;6642:78;6574:152;:::o;6732:169::-;6793:5;6831:6;6818:20;6809:29;;6847:48;6889:5;6847:48;:::i;:::-;6732:169;;;;:::o;6907:117::-;7016:1;7013;7006:12;7030:117;7139:1;7136;7129:12;7153:117;7262:1;7259;7252:12;7293:568;7366:8;7376:6;7426:3;7419:4;7411:6;7407:17;7403:27;7393:122;;7434:79;;:::i;:::-;7393:122;7547:6;7534:20;7524:30;;7577:18;7569:6;7566:30;7563:117;;;7599:79;;:::i;:::-;7563:117;7713:4;7705:6;7701:17;7689:29;;7767:3;7759:4;7751:6;7747:17;7737:8;7733:32;7730:41;7727:128;;;7774:79;;:::i;:::-;7727:128;7293:568;;;;;:::o;7884:::-;7957:8;7967:6;8017:3;8010:4;8002:6;7998:17;7994:27;7984:122;;8025:79;;:::i;:::-;7984:122;8138:6;8125:20;8115:30;;8168:18;8160:6;8157:30;8154:117;;;8190:79;;:::i;:::-;8154:117;8304:4;8296:6;8292:17;8280:29;;8358:3;8350:4;8342:6;8338:17;8328:8;8324:32;8321:41;8318:128;;;8365:79;;:::i;:::-;8318:128;7884:568;;;;;:::o;8458:1109::-;8604:6;8612;8620;8628;8636;8685:2;8673:9;8664:7;8660:23;8656:32;8653:119;;;8691:79;;:::i;:::-;8653:119;8811:1;8836:68;8896:7;8887:6;8876:9;8872:22;8836:68;:::i;:::-;8826:78;;8782:132;8981:2;8970:9;8966:18;8953:32;9012:18;9004:6;9001:30;8998:117;;;9034:79;;:::i;:::-;8998:117;9147:80;9219:7;9210:6;9199:9;9195:22;9147:80;:::i;:::-;9129:98;;;;8924:313;9304:2;9293:9;9289:18;9276:32;9335:18;9327:6;9324:30;9321:117;;;9357:79;;:::i;:::-;9321:117;9470:80;9542:7;9533:6;9522:9;9518:22;9470:80;:::i;:::-;9452:98;;;;9247:313;8458:1109;;;;;;;;:::o;9573:329::-;9632:6;9681:2;9669:9;9660:7;9656:23;9652:32;9649:119;;;9687:79;;:::i;:::-;9649:119;9807:1;9832:53;9877:7;9868:6;9857:9;9853:22;9832:53;:::i;:::-;9822:63;;9778:117;9573:329;;;;:::o;9908:114::-;9975:6;10009:5;10003:12;9993:22;;9908:114;;;:::o;10028:184::-;10127:11;10161:6;10156:3;10149:19;10201:4;10196:3;10192:14;10177:29;;10028:184;;;;:::o;10218:132::-;10285:4;10308:3;10300:11;;10338:4;10333:3;10329:14;10321:22;;10218:132;;;:::o;10356:108::-;10433:24;10451:5;10433:24;:::i;:::-;10428:3;10421:37;10356:108;;:::o;10470:179::-;10539:10;10560:46;10602:3;10594:6;10560:46;:::i;:::-;10638:4;10633:3;10629:14;10615:28;;10470:179;;;;:::o;10655:113::-;10725:4;10757;10752:3;10748:14;10740:22;;10655:113;;;:::o;10804:732::-;10923:3;10952:54;11000:5;10952:54;:::i;:::-;11022:86;11101:6;11096:3;11022:86;:::i;:::-;11015:93;;11132:56;11182:5;11132:56;:::i;:::-;11211:7;11242:1;11227:284;11252:6;11249:1;11246:13;11227:284;;;11328:6;11322:13;11355:63;11414:3;11399:13;11355:63;:::i;:::-;11348:70;;11441:60;11494:6;11441:60;:::i;:::-;11431:70;;11287:224;11274:1;11271;11267:9;11262:14;;11227:284;;;11231:14;11527:3;11520:10;;10928:608;;;10804:732;;;;:::o;11542:373::-;11685:4;11723:2;11712:9;11708:18;11700:26;;11772:9;11766:4;11762:20;11758:1;11747:9;11743:17;11736:47;11800:108;11903:4;11894:6;11800:108;:::i;:::-;11792:116;;11542:373;;;;:::o;11921:117::-;12030:1;12027;12020:12;12044:180;12092:77;12089:1;12082:88;12189:4;12186:1;12179:15;12213:4;12210:1;12203:15;12230:281;12313:27;12335:4;12313:27;:::i;:::-;12305:6;12301:40;12443:6;12431:10;12428:22;12407:18;12395:10;12392:34;12389:62;12386:88;;;12454:18;;:::i;:::-;12386:88;12494:10;12490:2;12483:22;12273:238;12230:281;;:::o;12517:129::-;12551:6;12578:20;;:::i;:::-;12568:30;;12607:33;12635:4;12627:6;12607:33;:::i;:::-;12517:129;;;:::o;12652:308::-;12714:4;12804:18;12796:6;12793:30;12790:56;;;12826:18;;:::i;:::-;12790:56;12864:29;12886:6;12864:29;:::i;:::-;12856:37;;12948:4;12942;12938:15;12930:23;;12652:308;;;:::o;12966:146::-;13063:6;13058:3;13053;13040:30;13104:1;13095:6;13090:3;13086:16;13079:27;12966:146;;;:::o;13118:425::-;13196:5;13221:66;13237:49;13279:6;13237:49;:::i;:::-;13221:66;:::i;:::-;13212:75;;13310:6;13303:5;13296:21;13348:4;13341:5;13337:16;13386:3;13377:6;13372:3;13368:16;13365:25;13362:112;;;13393:79;;:::i;:::-;13362:112;13483:54;13530:6;13525:3;13520;13483:54;:::i;:::-;13202:341;13118:425;;;;;:::o;13563:340::-;13619:5;13668:3;13661:4;13653:6;13649:17;13645:27;13635:122;;13676:79;;:::i;:::-;13635:122;13793:6;13780:20;13818:79;13893:3;13885:6;13878:4;13870:6;13866:17;13818:79;:::i;:::-;13809:88;;13625:278;13563:340;;;;:::o;13909:509::-;13978:6;14027:2;14015:9;14006:7;14002:23;13998:32;13995:119;;;14033:79;;:::i;:::-;13995:119;14181:1;14170:9;14166:17;14153:31;14211:18;14203:6;14200:30;14197:117;;;14233:79;;:::i;:::-;14197:117;14338:63;14393:7;14384:6;14373:9;14369:22;14338:63;:::i;:::-;14328:73;;14124:287;13909:509;;;;:::o;14424:113::-;14478:7;14507:24;14525:5;14507:24;:::i;:::-;14496:35;;14424:113;;;:::o;14543:156::-;14633:41;14668:5;14633:41;:::i;:::-;14626:5;14623:52;14613:80;;14689:1;14686;14679:12;14613:80;14543:156;:::o;14705:173::-;14768:5;14806:6;14793:20;14784:29;;14822:50;14866:5;14822:50;:::i;:::-;14705:173;;;;:::o;14884:1489::-;15068:6;15076;15084;15092;15100;15108;15116;15165:3;15153:9;15144:7;15140:23;15136:33;15133:120;;;15172:79;;:::i;:::-;15133:120;15292:1;15317:70;15379:7;15370:6;15359:9;15355:22;15317:70;:::i;:::-;15307:80;;15263:134;15464:2;15453:9;15449:18;15436:32;15495:18;15487:6;15484:30;15481:117;;;15517:79;;:::i;:::-;15481:117;15630:80;15702:7;15693:6;15682:9;15678:22;15630:80;:::i;:::-;15612:98;;;;15407:313;15787:2;15776:9;15772:18;15759:32;15818:18;15810:6;15807:30;15804:117;;;15840:79;;:::i;:::-;15804:117;15953:80;16025:7;16016:6;16005:9;16001:22;15953:80;:::i;:::-;15935:98;;;;15730:313;16110:2;16099:9;16095:18;16082:32;16141:18;16133:6;16130:30;16127:117;;;16163:79;;:::i;:::-;16127:117;16276:80;16348:7;16339:6;16328:9;16324:22;16276:80;:::i;:::-;16258:98;;;;16053:313;14884:1489;;;;;;;;;;:::o;16379:468::-;16444:6;16452;16501:2;16489:9;16480:7;16476:23;16472:32;16469:119;;;16507:79;;:::i;:::-;16469:119;16627:1;16652:53;16697:7;16688:6;16677:9;16673:22;16652:53;:::i;:::-;16642:63;;16598:117;16754:2;16780:50;16822:7;16813:6;16802:9;16798:22;16780:50;:::i;:::-;16770:60;;16725:115;16379:468;;;;;:::o;16853:307::-;16914:4;17004:18;16996:6;16993:30;16990:56;;;17026:18;;:::i;:::-;16990:56;17064:29;17086:6;17064:29;:::i;:::-;17056:37;;17148:4;17142;17138:15;17130:23;;16853:307;;;:::o;17166:423::-;17243:5;17268:65;17284:48;17325:6;17284:48;:::i;:::-;17268:65;:::i;:::-;17259:74;;17356:6;17349:5;17342:21;17394:4;17387:5;17383:16;17432:3;17423:6;17418:3;17414:16;17411:25;17408:112;;;17439:79;;:::i;:::-;17408:112;17529:54;17576:6;17571:3;17566;17529:54;:::i;:::-;17249:340;17166:423;;;;;:::o;17608:338::-;17663:5;17712:3;17705:4;17697:6;17693:17;17689:27;17679:122;;17720:79;;:::i;:::-;17679:122;17837:6;17824:20;17862:78;17936:3;17928:6;17921:4;17913:6;17909:17;17862:78;:::i;:::-;17853:87;;17669:277;17608:338;;;;:::o;17952:943::-;18047:6;18055;18063;18071;18120:3;18108:9;18099:7;18095:23;18091:33;18088:120;;;18127:79;;:::i;:::-;18088:120;18247:1;18272:53;18317:7;18308:6;18297:9;18293:22;18272:53;:::i;:::-;18262:63;;18218:117;18374:2;18400:53;18445:7;18436:6;18425:9;18421:22;18400:53;:::i;:::-;18390:63;;18345:118;18502:2;18528:53;18573:7;18564:6;18553:9;18549:22;18528:53;:::i;:::-;18518:63;;18473:118;18658:2;18647:9;18643:18;18630:32;18689:18;18681:6;18678:30;18675:117;;;18711:79;;:::i;:::-;18675:117;18816:62;18870:7;18861:6;18850:9;18846:22;18816:62;:::i;:::-;18806:72;;18601:287;17952:943;;;;;;;:::o;18901:111::-;18953:7;18982:24;19000:5;18982:24;:::i;:::-;18971:35;;18901:111;;;:::o;19018:152::-;19106:39;19139:5;19106:39;:::i;:::-;19099:5;19096:50;19086:78;;19160:1;19157;19150:12;19086:78;19018:152;:::o;19176:169::-;19237:5;19275:6;19262:20;19253:29;;19291:48;19333:5;19291:48;:::i;:::-;19176:169;;;;:::o;19351:1109::-;19497:6;19505;19513;19521;19529;19578:2;19566:9;19557:7;19553:23;19549:32;19546:119;;;19584:79;;:::i;:::-;19546:119;19704:1;19729:68;19789:7;19780:6;19769:9;19765:22;19729:68;:::i;:::-;19719:78;;19675:132;19874:2;19863:9;19859:18;19846:32;19905:18;19897:6;19894:30;19891:117;;;19927:79;;:::i;:::-;19891:117;20040:80;20112:7;20103:6;20092:9;20088:22;20040:80;:::i;:::-;20022:98;;;;19817:313;20197:2;20186:9;20182:18;20169:32;20228:18;20220:6;20217:30;20214:117;;;20250:79;;:::i;:::-;20214:117;20363:80;20435:7;20426:6;20415:9;20411:22;20363:80;:::i;:::-;20345:98;;;;20140:313;19351:1109;;;;;;;;:::o;20466:474::-;20534:6;20542;20591:2;20579:9;20570:7;20566:23;20562:32;20559:119;;;20597:79;;:::i;:::-;20559:119;20717:1;20742:53;20787:7;20778:6;20767:9;20763:22;20742:53;:::i;:::-;20732:63;;20688:117;20844:2;20870:53;20915:7;20906:6;20895:9;20891:22;20870:53;:::i;:::-;20860:63;;20815:118;20466:474;;;;;:::o;20946:182::-;21086:34;21082:1;21074:6;21070:14;21063:58;20946:182;:::o;21134:366::-;21276:3;21297:67;21361:2;21356:3;21297:67;:::i;:::-;21290:74;;21373:93;21462:3;21373:93;:::i;:::-;21491:2;21486:3;21482:12;21475:19;;21134:366;;;:::o;21506:419::-;21672:4;21710:2;21699:9;21695:18;21687:26;;21759:9;21753:4;21749:20;21745:1;21734:9;21730:17;21723:47;21787:131;21913:4;21787:131;:::i;:::-;21779:139;;21506:419;;;:::o;21931:180::-;21979:77;21976:1;21969:88;22076:4;22073:1;22066:15;22100:4;22097:1;22090:15;22117:320;22161:6;22198:1;22192:4;22188:12;22178:22;;22245:1;22239:4;22235:12;22266:18;22256:81;;22322:4;22314:6;22310:17;22300:27;;22256:81;22384:2;22376:6;22373:14;22353:18;22350:38;22347:84;;22403:18;;:::i;:::-;22347:84;22168:269;22117:320;;;:::o;22443:231::-;22583:34;22579:1;22571:6;22567:14;22560:58;22652:14;22647:2;22639:6;22635:15;22628:39;22443:231;:::o;22680:366::-;22822:3;22843:67;22907:2;22902:3;22843:67;:::i;:::-;22836:74;;22919:93;23008:3;22919:93;:::i;:::-;23037:2;23032:3;23028:12;23021:19;;22680:366;;;:::o;23052:419::-;23218:4;23256:2;23245:9;23241:18;23233:26;;23305:9;23299:4;23295:20;23291:1;23280:9;23276:17;23269:47;23333:131;23459:4;23333:131;:::i;:::-;23325:139;;23052:419;;;:::o;23477:220::-;23617:34;23613:1;23605:6;23601:14;23594:58;23686:3;23681:2;23673:6;23669:15;23662:28;23477:220;:::o;23703:366::-;23845:3;23866:67;23930:2;23925:3;23866:67;:::i;:::-;23859:74;;23942:93;24031:3;23942:93;:::i;:::-;24060:2;24055:3;24051:12;24044:19;;23703:366;;;:::o;24075:419::-;24241:4;24279:2;24268:9;24264:18;24256:26;;24328:9;24322:4;24318:20;24314:1;24303:9;24299:17;24292:47;24356:131;24482:4;24356:131;:::i;:::-;24348:139;;24075:419;;;:::o;24500:243::-;24640:34;24636:1;24628:6;24624:14;24617:58;24709:26;24704:2;24696:6;24692:15;24685:51;24500:243;:::o;24749:366::-;24891:3;24912:67;24976:2;24971:3;24912:67;:::i;:::-;24905:74;;24988:93;25077:3;24988:93;:::i;:::-;25106:2;25101:3;25097:12;25090:19;;24749:366;;;:::o;25121:419::-;25287:4;25325:2;25314:9;25310:18;25302:26;;25374:9;25368:4;25364:20;25360:1;25349:9;25345:17;25338:47;25402:131;25528:4;25402:131;:::i;:::-;25394:139;;25121:419;;;:::o;25546:236::-;25686:34;25682:1;25674:6;25670:14;25663:58;25755:19;25750:2;25742:6;25738:15;25731:44;25546:236;:::o;25788:366::-;25930:3;25951:67;26015:2;26010:3;25951:67;:::i;:::-;25944:74;;26027:93;26116:3;26027:93;:::i;:::-;26145:2;26140:3;26136:12;26129:19;;25788:366;;;:::o;26160:419::-;26326:4;26364:2;26353:9;26349:18;26341:26;;26413:9;26407:4;26403:20;26399:1;26388:9;26384:17;26377:47;26441:131;26567:4;26441:131;:::i;:::-;26433:139;;26160:419;;;:::o;26585:229::-;26725:34;26721:1;26713:6;26709:14;26702:58;26794:12;26789:2;26781:6;26777:15;26770:37;26585:229;:::o;26820:366::-;26962:3;26983:67;27047:2;27042:3;26983:67;:::i;:::-;26976:74;;27059:93;27148:3;27059:93;:::i;:::-;27177:2;27172:3;27168:12;27161:19;;26820:366;;;:::o;27192:419::-;27358:4;27396:2;27385:9;27381:18;27373:26;;27445:9;27439:4;27435:20;27431:1;27420:9;27416:17;27409:47;27473:131;27599:4;27473:131;:::i;:::-;27465:139;;27192:419;;;:::o;27617:180::-;27665:77;27662:1;27655:88;27762:4;27759:1;27752:15;27786:4;27783:1;27776:15;27803:442;27952:4;27990:2;27979:9;27975:18;27967:26;;28003:71;28071:1;28060:9;28056:17;28047:6;28003:71;:::i;:::-;28084:72;28152:2;28141:9;28137:18;28128:6;28084:72;:::i;:::-;28166;28234:2;28223:9;28219:18;28210:6;28166:72;:::i;:::-;27803:442;;;;;;:::o;28251:137::-;28305:5;28336:6;28330:13;28321:22;;28352:30;28376:5;28352:30;:::i;:::-;28251:137;;;;:::o;28394:345::-;28461:6;28510:2;28498:9;28489:7;28485:23;28481:32;28478:119;;;28516:79;;:::i;:::-;28478:119;28636:1;28661:61;28714:7;28705:6;28694:9;28690:22;28661:61;:::i;:::-;28651:71;;28607:125;28394:345;;;;:::o;28745:180::-;28793:77;28790:1;28783:88;28890:4;28887:1;28880:15;28914:4;28911:1;28904:15;28931:233;28970:3;28993:24;29011:5;28993:24;:::i;:::-;28984:33;;29039:66;29032:5;29029:77;29026:103;;29109:18;;:::i;:::-;29026:103;29156:1;29149:5;29145:13;29138:20;;28931:233;;;:::o;29170:230::-;29310:34;29306:1;29298:6;29294:14;29287:58;29379:13;29374:2;29366:6;29362:15;29355:38;29170:230;:::o;29406:366::-;29548:3;29569:67;29633:2;29628:3;29569:67;:::i;:::-;29562:74;;29645:93;29734:3;29645:93;:::i;:::-;29763:2;29758:3;29754:12;29747:19;;29406:366;;;:::o;29778:419::-;29944:4;29982:2;29971:9;29967:18;29959:26;;30031:9;30025:4;30021:20;30017:1;30006:9;30002:17;29995:47;30059:131;30185:4;30059:131;:::i;:::-;30051:139;;29778:419;;;:::o;30203:348::-;30243:7;30266:20;30284:1;30266:20;:::i;:::-;30261:25;;30300:20;30318:1;30300:20;:::i;:::-;30295:25;;30488:1;30420:66;30416:74;30413:1;30410:81;30405:1;30398:9;30391:17;30387:105;30384:131;;;30495:18;;:::i;:::-;30384:131;30543:1;30540;30536:9;30525:20;;30203:348;;;;:::o;30557:180::-;30605:77;30602:1;30595:88;30702:4;30699:1;30692:15;30726:4;30723:1;30716:15;30743:185;30783:1;30800:20;30818:1;30800:20;:::i;:::-;30795:25;;30834:20;30852:1;30834:20;:::i;:::-;30829:25;;30873:1;30863:35;;30878:18;;:::i;:::-;30863:35;30920:1;30917;30913:9;30908:14;;30743:185;;;;:::o;30934:147::-;31035:11;31072:3;31057:18;;30934:147;;;;:::o;31087:114::-;;:::o;31207:398::-;31366:3;31387:83;31468:1;31463:3;31387:83;:::i;:::-;31380:90;;31479:93;31568:3;31479:93;:::i;:::-;31597:1;31592:3;31588:11;31581:18;;31207:398;;;:::o;31611:379::-;31795:3;31817:147;31960:3;31817:147;:::i;:::-;31810:154;;31981:3;31974:10;;31611:379;;;:::o;31996:231::-;32136:34;32132:1;32124:6;32120:14;32113:58;32205:14;32200:2;32192:6;32188:15;32181:39;31996:231;:::o;32233:366::-;32375:3;32396:67;32460:2;32455:3;32396:67;:::i;:::-;32389:74;;32472:93;32561:3;32472:93;:::i;:::-;32590:2;32585:3;32581:12;32574:19;;32233:366;;;:::o;32605:419::-;32771:4;32809:2;32798:9;32794:18;32786:26;;32858:9;32852:4;32848:20;32844:1;32833:9;32829:17;32822:47;32886:131;33012:4;32886:131;:::i;:::-;32878:139;;32605:419;;;:::o;33030:141::-;33079:4;33102:3;33094:11;;33125:3;33122:1;33115:14;33159:4;33156:1;33146:18;33138:26;;33030:141;;;:::o;33177:93::-;33214:6;33261:2;33256;33249:5;33245:14;33241:23;33231:33;;33177:93;;;:::o;33276:107::-;33320:8;33370:5;33364:4;33360:16;33339:37;;33276:107;;;;:::o;33389:393::-;33458:6;33508:1;33496:10;33492:18;33531:97;33561:66;33550:9;33531:97;:::i;:::-;33649:39;33679:8;33668:9;33649:39;:::i;:::-;33637:51;;33721:4;33717:9;33710:5;33706:21;33697:30;;33770:4;33760:8;33756:19;33749:5;33746:30;33736:40;;33465:317;;33389:393;;;;;:::o;33788:60::-;33816:3;33837:5;33830:12;;33788:60;;;:::o;33854:142::-;33904:9;33937:53;33955:34;33964:24;33982:5;33964:24;:::i;:::-;33955:34;:::i;:::-;33937:53;:::i;:::-;33924:66;;33854:142;;;:::o;34002:75::-;34045:3;34066:5;34059:12;;34002:75;;;:::o;34083:269::-;34193:39;34224:7;34193:39;:::i;:::-;34254:91;34303:41;34327:16;34303:41;:::i;:::-;34295:6;34288:4;34282:11;34254:91;:::i;:::-;34248:4;34241:105;34159:193;34083:269;;;:::o;34358:73::-;34403:3;34358:73;:::o;34437:189::-;34514:32;;:::i;:::-;34555:65;34613:6;34605;34599:4;34555:65;:::i;:::-;34490:136;34437:189;;:::o;34632:186::-;34692:120;34709:3;34702:5;34699:14;34692:120;;;34763:39;34800:1;34793:5;34763:39;:::i;:::-;34736:1;34729:5;34725:13;34716:22;;34692:120;;;34632:186;;:::o;34824:543::-;34925:2;34920:3;34917:11;34914:446;;;34959:38;34991:5;34959:38;:::i;:::-;35043:29;35061:10;35043:29;:::i;:::-;35033:8;35029:44;35226:2;35214:10;35211:18;35208:49;;;35247:8;35232:23;;35208:49;35270:80;35326:22;35344:3;35326:22;:::i;:::-;35316:8;35312:37;35299:11;35270:80;:::i;:::-;34929:431;;34914:446;34824:543;;;:::o;35373:117::-;35427:8;35477:5;35471:4;35467:16;35446:37;;35373:117;;;;:::o;35496:169::-;35540:6;35573:51;35621:1;35617:6;35609:5;35606:1;35602:13;35573:51;:::i;:::-;35569:56;35654:4;35648;35644:15;35634:25;;35547:118;35496:169;;;;:::o;35670:295::-;35746:4;35892:29;35917:3;35911:4;35892:29;:::i;:::-;35884:37;;35954:3;35951:1;35947:11;35941:4;35938:21;35930:29;;35670:295;;;;:::o;35970:1395::-;36087:37;36120:3;36087:37;:::i;:::-;36189:18;36181:6;36178:30;36175:56;;;36211:18;;:::i;:::-;36175:56;36255:38;36287:4;36281:11;36255:38;:::i;:::-;36340:67;36400:6;36392;36386:4;36340:67;:::i;:::-;36434:1;36458:4;36445:17;;36490:2;36482:6;36479:14;36507:1;36502:618;;;;37164:1;37181:6;37178:77;;;37230:9;37225:3;37221:19;37215:26;37206:35;;37178:77;37281:67;37341:6;37334:5;37281:67;:::i;:::-;37275:4;37268:81;37137:222;36472:887;;36502:618;36554:4;36550:9;36542:6;36538:22;36588:37;36620:4;36588:37;:::i;:::-;36647:1;36661:208;36675:7;36672:1;36669:14;36661:208;;;36754:9;36749:3;36745:19;36739:26;36731:6;36724:42;36805:1;36797:6;36793:14;36783:24;;36852:2;36841:9;36837:18;36824:31;;36698:4;36695:1;36691:12;36686:17;;36661:208;;;36897:6;36888:7;36885:19;36882:179;;;36955:9;36950:3;36946:19;36940:26;36998:48;37040:4;37032:6;37028:17;37017:9;36998:48;:::i;:::-;36990:6;36983:64;36905:156;36882:179;37107:1;37103;37095:6;37091:14;37087:22;37081:4;37074:36;36509:611;;;36472:887;;36062:1303;;;35970:1395;;:::o;37371:228::-;37511:34;37507:1;37499:6;37495:14;37488:58;37580:11;37575:2;37567:6;37563:15;37556:36;37371:228;:::o;37605:366::-;37747:3;37768:67;37832:2;37827:3;37768:67;:::i;:::-;37761:74;;37844:93;37933:3;37844:93;:::i;:::-;37962:2;37957:3;37953:12;37946:19;;37605:366;;;:::o;37977:419::-;38143:4;38181:2;38170:9;38166:18;38158:26;;38230:9;38224:4;38220:20;38216:1;38205:9;38201:17;38194:47;38258:131;38384:4;38258:131;:::i;:::-;38250:139;;37977:419;;;:::o;38402:229::-;38542:34;38538:1;38530:6;38526:14;38519:58;38611:12;38606:2;38598:6;38594:15;38587:37;38402:229;:::o;38637:366::-;38779:3;38800:67;38864:2;38859:3;38800:67;:::i;:::-;38793:74;;38876:93;38965:3;38876:93;:::i;:::-;38994:2;38989:3;38985:12;38978:19;;38637:366;;;:::o;39009:419::-;39175:4;39213:2;39202:9;39198:18;39190:26;;39262:9;39256:4;39252:20;39248:1;39237:9;39233:17;39226:47;39290:131;39416:4;39290:131;:::i;:::-;39282:139;;39009:419;;;:::o;39434:225::-;39574:34;39570:1;39562:6;39558:14;39551:58;39643:8;39638:2;39630:6;39626:15;39619:33;39434:225;:::o;39665:366::-;39807:3;39828:67;39892:2;39887:3;39828:67;:::i;:::-;39821:74;;39904:93;39993:3;39904:93;:::i;:::-;40022:2;40017:3;40013:12;40006:19;;39665:366;;;:::o;40037:419::-;40203:4;40241:2;40230:9;40226:18;40218:26;;40290:9;40284:4;40280:20;40276:1;40265:9;40261:17;40254:47;40318:131;40444:4;40318:131;:::i;:::-;40310:139;;40037:419;;;:::o;40462:168::-;40545:11;40579:6;40574:3;40567:19;40619:4;40614:3;40610:14;40595:29;;40462:168;;;;:::o;40636:362::-;40777:3;40798:65;40861:1;40856:3;40798:65;:::i;:::-;40791:72;;40872:93;40961:3;40872:93;:::i;:::-;40990:1;40985:3;40981:11;40974:18;;40636:362;;;:::o;41004:859::-;41281:4;41319:3;41308:9;41304:19;41296:27;;41333:71;41401:1;41390:9;41386:17;41377:6;41333:71;:::i;:::-;41414:72;41482:2;41471:9;41467:18;41458:6;41414:72;:::i;:::-;41496;41564:2;41553:9;41549:18;41540:6;41496:72;:::i;:::-;41578;41646:2;41635:9;41631:18;41622:6;41578:72;:::i;:::-;41698:9;41692:4;41688:20;41682:3;41671:9;41667:19;41660:49;41726:130;41851:4;41726:130;:::i;:::-;41718:138;;41004:859;;;;;;;:::o;41869:191::-;41909:3;41928:20;41946:1;41928:20;:::i;:::-;41923:25;;41962:20;41980:1;41962:20;:::i;:::-;41957:25;;42005:1;42002;41998:9;41991:16;;42026:3;42023:1;42020:10;42017:36;;;42033:18;;:::i;:::-;42017:36;41869:191;;;;:::o;42066:234::-;42206:34;42202:1;42194:6;42190:14;42183:58;42275:17;42270:2;42262:6;42258:15;42251:42;42066:234;:::o;42306:366::-;42448:3;42469:67;42533:2;42528:3;42469:67;:::i;:::-;42462:74;;42545:93;42634:3;42545:93;:::i;:::-;42663:2;42658:3;42654:12;42647:19;;42306:366;;;:::o;42678:419::-;42844:4;42882:2;42871:9;42867:18;42859:26;;42931:9;42925:4;42921:20;42917:1;42906:9;42902:17;42895:47;42959:131;43085:4;42959:131;:::i;:::-;42951:139;;42678:419;;;:::o;43103:148::-;43205:11;43242:3;43227:18;;43103:148;;;;:::o;43257:390::-;43363:3;43391:39;43424:5;43391:39;:::i;:::-;43446:89;43528:6;43523:3;43446:89;:::i;:::-;43439:96;;43544:65;43602:6;43597:3;43590:4;43583:5;43579:16;43544:65;:::i;:::-;43634:6;43629:3;43625:16;43618:23;;43367:280;43257:390;;;;:::o;43677:874::-;43780:3;43817:5;43811:12;43846:36;43872:9;43846:36;:::i;:::-;43898:89;43980:6;43975:3;43898:89;:::i;:::-;43891:96;;44018:1;44007:9;44003:17;44034:1;44029:166;;;;44209:1;44204:341;;;;43996:549;;44029:166;44113:4;44109:9;44098;44094:25;44089:3;44082:38;44175:6;44168:14;44161:22;44153:6;44149:35;44144:3;44140:45;44133:52;;44029:166;;44204:341;44271:38;44303:5;44271:38;:::i;:::-;44331:1;44345:154;44359:6;44356:1;44353:13;44345:154;;;44433:7;44427:14;44423:1;44418:3;44414:11;44407:35;44483:1;44474:7;44470:15;44459:26;;44381:4;44378:1;44374:12;44369:17;;44345:154;;;44528:6;44523:3;44519:16;44512:23;;44211:334;;43996:549;;43784:767;;43677:874;;;;:::o;44557:589::-;44782:3;44804:95;44895:3;44886:6;44804:95;:::i;:::-;44797:102;;44916:95;45007:3;44998:6;44916:95;:::i;:::-;44909:102;;45028:92;45116:3;45107:6;45028:92;:::i;:::-;45021:99;;45137:3;45130:10;;44557:589;;;;;;:::o;45152:225::-;45292:34;45288:1;45280:6;45276:14;45269:58;45361:8;45356:2;45348:6;45344:15;45337:33;45152:225;:::o;45383:366::-;45525:3;45546:67;45610:2;45605:3;45546:67;:::i;:::-;45539:74;;45622:93;45711:3;45622:93;:::i;:::-;45740:2;45735:3;45731:12;45724:19;;45383:366;;;:::o;45755:419::-;45921:4;45959:2;45948:9;45944:18;45936:26;;46008:9;46002:4;45998:20;45994:1;45983:9;45979:17;45972:47;46036:131;46162:4;46036:131;:::i;:::-;46028:139;;45755:419;;;:::o;46180:231::-;46320:34;46316:1;46308:6;46304:14;46297:58;46389:14;46384:2;46376:6;46372:15;46365:39;46180:231;:::o;46417:366::-;46559:3;46580:67;46644:2;46639:3;46580:67;:::i;:::-;46573:74;;46656:93;46745:3;46656:93;:::i;:::-;46774:2;46769:3;46765:12;46758:19;;46417:366;;;:::o;46789:419::-;46955:4;46993:2;46982:9;46978:18;46970:26;;47042:9;47036:4;47032:20;47028:1;47017:9;47013:17;47006:47;47070:131;47196:4;47070:131;:::i;:::-;47062:139;;46789:419;;;:::o;47214:224::-;47354:34;47350:1;47342:6;47338:14;47331:58;47423:7;47418:2;47410:6;47406:15;47399:32;47214:224;:::o;47444:366::-;47586:3;47607:67;47671:2;47666:3;47607:67;:::i;:::-;47600:74;;47683:93;47772:3;47683:93;:::i;:::-;47801:2;47796:3;47792:12;47785:19;;47444:366;;;:::o;47816:419::-;47982:4;48020:2;48009:9;48005:18;47997:26;;48069:9;48063:4;48059:20;48055:1;48044:9;48040:17;48033:47;48097:131;48223:4;48097:131;:::i;:::-;48089:139;;47816:419;;;:::o;48241:223::-;48381:34;48377:1;48369:6;48365:14;48358:58;48450:6;48445:2;48437:6;48433:15;48426:31;48241:223;:::o;48470:366::-;48612:3;48633:67;48697:2;48692:3;48633:67;:::i;:::-;48626:74;;48709:93;48798:3;48709:93;:::i;:::-;48827:2;48822:3;48818:12;48811:19;;48470:366;;;:::o;48842:419::-;49008:4;49046:2;49035:9;49031:18;49023:26;;49095:9;49089:4;49085:20;49081:1;49070:9;49066:17;49059:47;49123:131;49249:4;49123:131;:::i;:::-;49115:139;;48842:419;;;:::o;49267:194::-;49307:4;49327:20;49345:1;49327:20;:::i;:::-;49322:25;;49361:20;49379:1;49361:20;:::i;:::-;49356:25;;49405:1;49402;49398:9;49390:17;;49429:1;49423:4;49420:11;49417:37;;;49434:18;;:::i;:::-;49417:37;49267:194;;;;:::o;49467:175::-;49607:27;49603:1;49595:6;49591:14;49584:51;49467:175;:::o;49648:366::-;49790:3;49811:67;49875:2;49870:3;49811:67;:::i;:::-;49804:74;;49887:93;49976:3;49887:93;:::i;:::-;50005:2;50000:3;49996:12;49989:19;;49648:366;;;:::o;50020:419::-;50186:4;50224:2;50213:9;50209:18;50201:26;;50273:9;50267:4;50263:20;50259:1;50248:9;50244:17;50237:47;50301:131;50427:4;50301:131;:::i;:::-;50293:139;;50020:419;;;:::o;50445:237::-;50585:34;50581:1;50573:6;50569:14;50562:58;50654:20;50649:2;50641:6;50637:15;50630:45;50445:237;:::o;50688:366::-;50830:3;50851:67;50915:2;50910:3;50851:67;:::i;:::-;50844:74;;50927:93;51016:3;50927:93;:::i;:::-;51045:2;51040:3;51036:12;51029:19;;50688:366;;;:::o;51060:419::-;51226:4;51264:2;51253:9;51249:18;51241:26;;51313:9;51307:4;51303:20;51299:1;51288:9;51284:17;51277:47;51341:131;51467:4;51341:131;:::i;:::-;51333:139;;51060:419;;;:::o;51485:176::-;51517:1;51534:20;51552:1;51534:20;:::i;:::-;51529:25;;51568:20;51586:1;51568:20;:::i;:::-;51563:25;;51607:1;51597:35;;51612:18;;:::i;:::-;51597:35;51653:1;51650;51646:9;51641:14;;51485:176;;;;:::o;51667:98::-;51718:6;51752:5;51746:12;51736:22;;51667:98;;;:::o;51771:373::-;51857:3;51885:38;51917:5;51885:38;:::i;:::-;51939:70;52002:6;51997:3;51939:70;:::i;:::-;51932:77;;52018:65;52076:6;52071:3;52064:4;52057:5;52053:16;52018:65;:::i;:::-;52108:29;52130:6;52108:29;:::i;:::-;52103:3;52099:39;52092:46;;51861:283;51771:373;;;;:::o;52150:640::-;52345:4;52383:3;52372:9;52368:19;52360:27;;52397:71;52465:1;52454:9;52450:17;52441:6;52397:71;:::i;:::-;52478:72;52546:2;52535:9;52531:18;52522:6;52478:72;:::i;:::-;52560;52628:2;52617:9;52613:18;52604:6;52560:72;:::i;:::-;52679:9;52673:4;52669:20;52664:2;52653:9;52649:18;52642:48;52707:76;52778:4;52769:6;52707:76;:::i;:::-;52699:84;;52150:640;;;;;;;:::o;52796:141::-;52852:5;52883:6;52877:13;52868:22;;52899:32;52925:5;52899:32;:::i;:::-;52796:141;;;;:::o;52943:349::-;53012:6;53061:2;53049:9;53040:7;53036:23;53032:32;53029:119;;;53067:79;;:::i;:::-;53029:119;53187:1;53212:63;53267:7;53258:6;53247:9;53243:22;53212:63;:::i;:::-;53202:73;;53158:127;52943:349;;;;:::o;53298:180::-;53346:77;53343:1;53336:88;53443:4;53440:1;53433:15;53467:4;53464:1;53457:15;53484:182;53624:34;53620:1;53612:6;53608:14;53601:58;53484:182;:::o;53672:366::-;53814:3;53835:67;53899:2;53894:3;53835:67;:::i;:::-;53828:74;;53911:93;54000:3;53911:93;:::i;:::-;54029:2;54024:3;54020:12;54013:19;;53672:366;;;:::o;54044:419::-;54210:4;54248:2;54237:9;54233:18;54225:26;;54297:9;54291:4;54287:20;54283:1;54272:9;54268:17;54261:47;54325:131;54451:4;54325:131;:::i;:::-;54317:139;;54044:419;;;:::o;54469:178::-;54609:30;54605:1;54597:6;54593:14;54586:54;54469:178;:::o;54653:366::-;54795:3;54816:67;54880:2;54875:3;54816:67;:::i;:::-;54809:74;;54892:93;54981:3;54892:93;:::i;:::-;55010:2;55005:3;55001:12;54994:19;;54653:366;;;:::o;55025:419::-;55191:4;55229:2;55218:9;55214:18;55206:26;;55278:9;55272:4;55268:20;55264:1;55253:9;55249:17;55242:47;55306:131;55432:4;55306:131;:::i;:::-;55298:139;;55025:419;;;:::o
Swarm Source
ipfs://0d45bba46b0ab2cbf56bc44d44d4494c6b0746318473c14c4dea7b85f07f57a9
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.