Overview
TokenID
395
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MutantMingos
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-12 */ pragma solidity 0.8.9; // SPDX-License-Identifier: MIT /** * @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); } /* * @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; } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/utils/Strings.sol /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol /** * @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/Context.sol /** * @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/token/ERC721/ERC721.sol /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol /** * @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: @openzeppelin/contracts/access/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract MutantMingos is ERC721Enumerable, Ownable { using Strings for uint256; address public constant ethHolderWallet1 = address(0xfBe22849817CeFAB6e5ef0d4ac5172169Ee6d0c9); // UPDATE!!!!! address public constant ethHolderWallet2 = address(0x5B3d05F28a09cF0E8085162D771751b6Af3c2f6F); // UPDATE!!!!! address public constant ethHolderWallet3 = address(0x91A92b595090DEeA0bD1C5408a438D72a377810a); // UPDATE!!!!! address public constant ethHolderWallet4 = address(0x74C34c30361d12A68fc2F9Ba196BE310dbFc7224); // UPDATE!!!!! address public constant ethHolderWallet5 = address(0x0740B1aef3bA9ecd7534888581B5c98c448E79C5); // UPDATE!!!!! string baseURI; string public baseExtension = ""; uint256 public cost = 0.07 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 5; uint256 public whitelistMintAmount = 1; bool public paused = true; bool public revealed = false; string public notRevealedUri; bool public whitelistEnforced = true; mapping (address => bool) public isWhitelisted; mapping (address => uint256) public whitelistedMintAmount; uint256 public constant privateMintAmount = 100; constructor() ERC721("Mutant Mingos", "MUTANTMINGO"){ setBaseURI(""); setNotRevealedURI(""); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // private mint for marketing only. function privateMint(uint256 _mintAmount, address destination) public onlyOwner { uint256 supply = totalSupply(); require(_mintAmount > 0, "cannot mint 0"); require(supply + _mintAmount <= maxSupply + privateMintAmount, "Cannot mint above max supply"); require(supply + _mintAmount <= 10000, "Cannot mint above 10000"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(destination, supply + i); } } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused, "Minting is paused"); if(whitelistEnforced){ require(isWhitelisted[msg.sender], "Must be whitelisted in order to mint during this phase"); require(whitelistedMintAmount[msg.sender] + _mintAmount <= whitelistMintAmount, "Requesting too many whitelist NFTs to be minted"); whitelistedMintAmount[msg.sender] += _mintAmount; } require(_mintAmount > 0, "cannot mint 0"); require(_mintAmount <= maxMintAmount, "cannot exceed max mint"); require(supply + _mintAmount <= maxSupply, "Cannot mint above max supply"); require(msg.value >= cost * _mintAmount, "Must send enough ETH to cover mint fee"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } uint256 balance = address(this).balance; (bool os, ) = payable(address(0xBb6da379Ed680839c4E1Eb7fE49814cD6e7Cbf8a)).call{value: balance * 5 / 100}(""); (os, ) = payable(address(ethHolderWallet1)).call{value: balance * 20 / 100}(""); (os, ) = payable(address(ethHolderWallet2)).call{value: balance * 30 / 100}(""); (os, ) = payable(address(ethHolderWallet3)).call{value: balance * 10 / 100}(""); (os, ) = payable(address(ethHolderWallet4)).call{value: balance * 10 / 100}(""); (os, ) = payable(address(ethHolderWallet5)).call{value: address(this).balance}(""); } function startWhitelist() external onlyOwner { whitelistEnforced = true; } function startPublicSale() external onlyOwner { whitelistEnforced = false; } function whitelistAddresses(address[] calldata wallets, bool whitelistEnabled) external onlyOwner { for (uint256 i = 0; i < wallets.length; i++){ isWhitelisted[wallets[i]] = whitelistEnabled; } } 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 { require(_newCost <= 3 ether && _newCost >= 0.01 ether, "Cost must be between 3 and 0.1 ether"); cost = _newCost; } function setMaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { require(_newmaxMintAmount <= 10, "Cannot set higher than 10"); maxMintAmount = _newmaxMintAmount; } function setWhiteListMintAmount(uint256 _newAmount) public onlyOwner { require(_newAmount <= 3, "Cannot set higher than 3"); whitelistMintAmount = _newAmount; } function setMaxSupply(uint256 _newMaxSupply) public onlyOwner { require(_newMaxSupply <= 10000, "Cannot set higher than 10000"); maxSupply = _newMaxSupply; } 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; } // recover any stuck ETH (if someone sends ETH directly to the contract only) function withdraw() public payable onlyOwner { (bool os, ) = payable(msg.sender).call{value: address(this).balance}(""); require(os); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethHolderWallet1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethHolderWallet2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethHolderWallet3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethHolderWallet4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethHolderWallet5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","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":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"privateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"privateMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setWhiteListMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startWhitelist","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":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"whitelistEnabled","type":"bool"}],"name":"whitelistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b91600c916200023f565b5066f8b0a10e470000600d55612710600e556005600f55600160108190556011805461ffff1916821790556013805460ff191690911790553480156200006057600080fd5b50604080518082018252600d81526c4d7574616e74204d696e676f7360981b60208083019182528351808501909452600b84526a4d5554414e544d494e474f60a81b908401528151919291620000b9916000916200023f565b508051620000cf9060019060208401906200023f565b505050620000ec620000e66200012660201b60201c565b6200012a565b60408051602081019091526000815262000106906200017c565b6040805160208101909152600081526200012090620001e4565b62000322565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001cb5760405162461bcd60e51b815260206004820181905260248201526000805160206200340383398151915260448201526064015b60405180910390fd5b8051620001e090600b9060208401906200023f565b5050565b600a546001600160a01b031633146200022f5760405162461bcd60e51b81526020600482018190526024820152600080516020620034038339815191526044820152606401620001c2565b8051620001e09060129060208401905b8280546200024d90620002e5565b90600052602060002090601f016020900481019282620002715760008555620002bc565b82601f106200028c57805160ff1916838001178555620002bc565b82800160010185558215620002bc579182015b82811115620002bc5782518255916020019190600101906200029f565b50620002ca929150620002ce565b5090565b5b80821115620002ca5760008155600101620002cf565b600181811c90821680620002fa57607f821691505b602082108114156200031c57634e487b7160e01b600052602260045260246000fd5b50919050565b6130d180620003326000396000f3fe6080604052600436106102ff5760003560e01c80636352211e11610190578063a9ae26fe116100dc578063cfb89aba11610095578063ddb07b861161006f578063ddb07b86146108ce578063e985e9c5146108f6578063f2c4ce1e1461093f578063f2fde38b1461095f57600080fd5b8063cfb89aba14610882578063d5abeb0114610898578063da3ef23f146108ae57600080fd5b8063a9ae26fe146107b8578063b88d4fde146107e0578063beb73b3114610800578063bef870ca1461082d578063c66828621461084d578063c87b56dd1461086257600080fd5b806389f91ece1161014957806395d89b411161012357806395d89b411461075b578063a0712d6814610770578063a22cb46514610783578063a475b5dd146107a357600080fd5b806389f91ece146106fb5780638c4c8cb9146107155780638da5cb5b1461073d57600080fd5b80636352211e146106495780636f8b44b01461066957806370a0823114610689578063715018a6146106a95780637f19c412146106be578063881b27aa146106d357600080fd5b80632f745c591161024f5780634f6ccce71161020857806355f804b3116101e257806355f804b3146105c75780635c975abb146105e75780635ebdfdca1461060157806362e7707e1461062957600080fd5b80634f6ccce7146105685780635183022714610588578063555503b1146105a757600080fd5b80632f745c59146104a35780633af32abf146104c35780633ccfd60b146104f357806342842e0e146104fb578063438b63001461051b57806344a0d68a1461054857600080fd5b8063095ea7b3116102bc5780631730100411610296578063173010041461044357806318160ddd14610458578063239c70ae1461046d57806323b872dd1461048357600080fd5b8063095ea7b3146103ea5780630c1c972a1461040a57806313faede61461041f57600080fd5b806301ffc9a71461030457806302329a291461033957806306fdde031461035b578063081812fc1461037d578063081c8c44146103b5578063088a4ed0146103ca575b600080fd5b34801561031057600080fd5b5061032461031f36600461297f565b61097f565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b506103596103543660046129b1565b6109aa565b005b34801561036757600080fd5b506103706109f0565b6040516103309190612a24565b34801561038957600080fd5b5061039d610398366004612a37565b610a82565b6040516001600160a01b039091168152602001610330565b3480156103c157600080fd5b50610370610b17565b3480156103d657600080fd5b506103596103e5366004612a37565b610ba5565b3480156103f657600080fd5b50610359610405366004612a67565b610c25565b34801561041657600080fd5b50610359610d3b565b34801561042b57600080fd5b50610435600d5481565b604051908152602001610330565b34801561044f57600080fd5b50610435606481565b34801561046457600080fd5b50600854610435565b34801561047957600080fd5b50610435600f5481565b34801561048f57600080fd5b5061035961049e366004612a91565b610d71565b3480156104af57600080fd5b506104356104be366004612a67565b610da2565b3480156104cf57600080fd5b506103246104de366004612acd565b60146020526000908152604090205460ff1681565b610359610e38565b34801561050757600080fd5b50610359610516366004612a91565b610eba565b34801561052757600080fd5b5061053b610536366004612acd565b610ed5565b6040516103309190612ae8565b34801561055457600080fd5b50610359610563366004612a37565b610f77565b34801561057457600080fd5b50610435610583366004612a37565b61101d565b34801561059457600080fd5b5060115461032490610100900460ff1681565b3480156105b357600080fd5b506103596105c2366004612a37565b6110b0565b3480156105d357600080fd5b506103596105e2366004612bb8565b611130565b3480156105f357600080fd5b506011546103249060ff1681565b34801561060d57600080fd5b5061039d73fbe22849817cefab6e5ef0d4ac5172169ee6d0c981565b34801561063557600080fd5b50610359610644366004612c01565b611171565b34801561065557600080fd5b5061039d610664366004612a37565b611212565b34801561067557600080fd5b50610359610684366004612a37565b611289565b34801561069557600080fd5b506104356106a4366004612acd565b61130a565b3480156106b557600080fd5b50610359611391565b3480156106ca57600080fd5b506103596113c7565b3480156106df57600080fd5b5061039d7391a92b595090deea0bd1c5408a438d72a377810a81565b34801561070757600080fd5b506013546103249060ff1681565b34801561072157600080fd5b5061039d735b3d05f28a09cf0e8085162d771751b6af3c2f6f81565b34801561074957600080fd5b50600a546001600160a01b031661039d565b34801561076757600080fd5b50610370611400565b61035961077e366004612a37565b61140f565b34801561078f57600080fd5b5061035961079e366004612c85565b6119bb565b3480156107af57600080fd5b50610359611a80565b3480156107c457600080fd5b5061039d730740b1aef3ba9ecd7534888581b5c98c448e79c581565b3480156107ec57600080fd5b506103596107fb366004612cb8565b611abb565b34801561080c57600080fd5b5061043561081b366004612acd565b60156020526000908152604090205481565b34801561083957600080fd5b50610359610848366004612d34565b611aed565b34801561085957600080fd5b50610370611c50565b34801561086e57600080fd5b5061037061087d366004612a37565b611c5d565b34801561088e57600080fd5b5061043560105481565b3480156108a457600080fd5b50610435600e5481565b3480156108ba57600080fd5b506103596108c9366004612bb8565b611ddc565b3480156108da57600080fd5b5061039d7374c34c30361d12a68fc2f9ba196be310dbfc722481565b34801561090257600080fd5b50610324610911366004612d57565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561094b57600080fd5b5061035961095a366004612bb8565b611e19565b34801561096b57600080fd5b5061035961097a366004612acd565b611e56565b60006001600160e01b0319821663780e9d6360e01b14806109a457506109a482611eee565b92915050565b600a546001600160a01b031633146109dd5760405162461bcd60e51b81526004016109d490612d81565b60405180910390fd5b6011805460ff1916911515919091179055565b6060600080546109ff90612db6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90612db6565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610afb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109d4565b506000908152600460205260409020546001600160a01b031690565b60128054610b2490612db6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5090612db6565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b505050505081565b600a546001600160a01b03163314610bcf5760405162461bcd60e51b81526004016109d490612d81565b600a811115610c205760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742073657420686967686572207468616e2031300000000000000060448201526064016109d4565b600f55565b6000610c3082611212565b9050806001600160a01b0316836001600160a01b03161415610c9e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109d4565b336001600160a01b0382161480610cba5750610cba8133610911565b610d2c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109d4565b610d368383611f3e565b505050565b600a546001600160a01b03163314610d655760405162461bcd60e51b81526004016109d490612d81565b6013805460ff19169055565b610d7b3382611fac565b610d975760405162461bcd60e51b81526004016109d490612df1565b610d368383836120a3565b6000610dad8361130a565b8210610e0f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016109d4565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e625760405162461bcd60e51b81526004016109d490612d81565b604051600090339047908381818185875af1925050503d8060008114610ea4576040519150601f19603f3d011682016040523d82523d6000602084013e610ea9565b606091505b5050905080610eb757600080fd5b50565b610d3683838360405180602001604052806000815250611abb565b60606000610ee28361130a565b905060008167ffffffffffffffff811115610eff57610eff612b2c565b604051908082528060200260200182016040528015610f28578160200160208202803683370190505b50905060005b82811015610f6f57610f408582610da2565b828281518110610f5257610f52612e42565b602090810291909101015280610f6781612e6e565b915050610f2e565b509392505050565b600a546001600160a01b03163314610fa15760405162461bcd60e51b81526004016109d490612d81565b6729a2241af62c00008111158015610fc05750662386f26fc100008110155b6110185760405162461bcd60e51b8152602060048201526024808201527f436f7374206d757374206265206265747765656e203320616e6420302e3120656044820152633a3432b960e11b60648201526084016109d4565b600d55565b600061102860085490565b821061108b5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109d4565b6008828154811061109e5761109e612e42565b90600052602060002001549050919050565b600a546001600160a01b031633146110da5760405162461bcd60e51b81526004016109d490612d81565b600381111561112b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742073657420686967686572207468616e2033000000000000000060448201526064016109d4565b601055565b600a546001600160a01b0316331461115a5760405162461bcd60e51b81526004016109d490612d81565b805161116d90600b9060208401906128d0565b5050565b600a546001600160a01b0316331461119b5760405162461bcd60e51b81526004016109d490612d81565b60005b8281101561120c5781601460008686858181106111bd576111bd612e42565b90506020020160208101906111d29190612acd565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061120481612e6e565b91505061119e565b50505050565b6000818152600260205260408120546001600160a01b0316806109a45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109d4565b600a546001600160a01b031633146112b35760405162461bcd60e51b81526004016109d490612d81565b6127108111156113055760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073657420686967686572207468616e2031303030300000000060448201526064016109d4565b600e55565b60006001600160a01b0382166113755760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109d4565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146113bb5760405162461bcd60e51b81526004016109d490612d81565b6113c5600061224e565b565b600a546001600160a01b031633146113f15760405162461bcd60e51b81526004016109d490612d81565b6013805460ff19166001179055565b6060600180546109ff90612db6565b600061141a60085490565b60115490915060ff16156114645760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b60448201526064016109d4565b60135460ff1615611596573360009081526014602052604090205460ff166114ed5760405162461bcd60e51b815260206004820152603660248201527f4d7573742062652077686974656c697374656420696e206f7264657220746f206044820152756d696e7420647572696e67207468697320706861736560501b60648201526084016109d4565b6010543360009081526015602052604090205461150b908490612e89565b11156115715760405162461bcd60e51b815260206004820152602f60248201527f52657175657374696e6720746f6f206d616e792077686974656c697374204e4660448201526e151cc81d1bc81899481b5a5b9d1959608a1b60648201526084016109d4565b3360009081526015602052604081208054849290611590908490612e89565b90915550505b600082116115d65760405162461bcd60e51b815260206004820152600d60248201526c063616e6e6f74206d696e74203609c1b60448201526064016109d4565b600f548211156116215760405162461bcd60e51b815260206004820152601660248201527518d85b9b9bdd08195e18d95959081b585e081b5a5b9d60521b60448201526064016109d4565b600e5461162e8383612e89565b111561167c5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74206d696e742061626f7665206d617820737570706c790000000060448201526064016109d4565b81600d5461168a9190612ea1565b3410156116e85760405162461bcd60e51b815260206004820152602660248201527f4d7573742073656e6420656e6f7567682045544820746f20636f766572206d696044820152656e742066656560d01b60648201526084016109d4565b60015b82811161171757611705336117008385612e89565b6122a0565b8061170f81612e6e565b9150506116eb565b5047600073bb6da379ed680839c4e1eb7fe49814cd6e7cbf8a606461173d846005612ea1565b6117479190612ed6565b604051600081818185875af1925050503d8060008114611783576040519150601f19603f3d011682016040523d82523d6000602084013e611788565b606091505b5090915073fbe22849817cefab6e5ef0d4ac5172169ee6d0c9905060646117b0846014612ea1565b6117ba9190612ed6565b604051600081818185875af1925050503d80600081146117f6576040519150601f19603f3d011682016040523d82523d6000602084013e6117fb565b606091505b50909150735b3d05f28a09cf0e8085162d771751b6af3c2f6f9050606461182384601e612ea1565b61182d9190612ed6565b604051600081818185875af1925050503d8060008114611869576040519150601f19603f3d011682016040523d82523d6000602084013e61186e565b606091505b509091507391a92b595090deea0bd1c5408a438d72a377810a9050606461189684600a612ea1565b6118a09190612ed6565b604051600081818185875af1925050503d80600081146118dc576040519150601f19603f3d011682016040523d82523d6000602084013e6118e1565b606091505b509091507374c34c30361d12a68fc2f9ba196be310dbfc72249050606461190984600a612ea1565b6119139190612ed6565b604051600081818185875af1925050503d806000811461194f576040519150601f19603f3d011682016040523d82523d6000602084013e611954565b606091505b5050604051909150730740b1aef3ba9ecd7534888581b5c98c448e79c5904790600081818185875af1925050503d80600081146119ad576040519150601f19603f3d011682016040523d82523d6000602084013e6119b2565b606091505b50505050505050565b6001600160a01b038216331415611a145760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109d4565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611aaa5760405162461bcd60e51b81526004016109d490612d81565b6011805461ff001916610100179055565b611ac53383611fac565b611ae15760405162461bcd60e51b81526004016109d490612df1565b61120c848484846122ba565b600a546001600160a01b03163314611b175760405162461bcd60e51b81526004016109d490612d81565b6000611b2260085490565b905060008311611b645760405162461bcd60e51b815260206004820152600d60248201526c063616e6e6f74206d696e74203609c1b60448201526064016109d4565b6064600e54611b739190612e89565b611b7d8483612e89565b1115611bcb5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74206d696e742061626f7665206d617820737570706c790000000060448201526064016109d4565b612710611bd88483612e89565b1115611c265760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206d696e742061626f766520313030303000000000000000000060448201526064016109d4565b60015b83811161120c57611c3e836117008385612e89565b80611c4881612e6e565b915050611c29565b600c8054610b2490612db6565b6000818152600260205260409020546060906001600160a01b0316611cdc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109d4565b601154610100900460ff16611d7d5760128054611cf890612db6565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2490612db6565b8015611d715780601f10611d4657610100808354040283529160200191611d71565b820191906000526020600020905b815481529060010190602001808311611d5457829003601f168201915b50505050509050919050565b6000611d876122ed565b90506000815111611da75760405180602001604052806000815250611dd5565b80611db1846122fc565b600c604051602001611dc593929190612eea565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611e065760405162461bcd60e51b81526004016109d490612d81565b805161116d90600c9060208401906128d0565b600a546001600160a01b03163314611e435760405162461bcd60e51b81526004016109d490612d81565b805161116d9060129060208401906128d0565b600a546001600160a01b03163314611e805760405162461bcd60e51b81526004016109d490612d81565b6001600160a01b038116611ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d4565b610eb78161224e565b60006001600160e01b031982166380ac58cd60e01b1480611f1f57506001600160e01b03198216635b5e139f60e01b145b806109a457506301ffc9a760e01b6001600160e01b03198316146109a4565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f7382611212565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166120255760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109d4565b600061203083611212565b9050806001600160a01b0316846001600160a01b0316148061206b5750836001600160a01b031661206084610a82565b6001600160a01b0316145b8061209b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166120b682611212565b6001600160a01b03161461211e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109d4565b6001600160a01b0382166121805760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d4565b61218b8383836123fa565b612196600082611f3e565b6001600160a01b03831660009081526003602052604081208054600192906121bf908490612fae565b90915550506001600160a01b03821660009081526003602052604081208054600192906121ed908490612e89565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61116d8282604051806020016040528060008152506124b2565b6122c58484846120a3565b6122d1848484846124e5565b61120c5760405162461bcd60e51b81526004016109d490612fc5565b6060600b80546109ff90612db6565b6060816123205750506040805180820190915260018152600360fc1b602082015290565b8160005b811561234a578061233481612e6e565b91506123439050600a83612ed6565b9150612324565b60008167ffffffffffffffff81111561236557612365612b2c565b6040519080825280601f01601f19166020018201604052801561238f576020820181803683370190505b5090505b841561209b576123a4600183612fae565b91506123b1600a86613017565b6123bc906030612e89565b60f81b8183815181106123d1576123d1612e42565b60200101906001600160f81b031916908160001a9053506123f3600a86612ed6565b9450612393565b6001600160a01b0383166124555761245081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612478565b816001600160a01b0316836001600160a01b0316146124785761247883826125f2565b6001600160a01b03821661248f57610d368161268f565b826001600160a01b0316826001600160a01b031614610d3657610d36828261273e565b6124bc8383612782565b6124c960008484846124e5565b610d365760405162461bcd60e51b81526004016109d490612fc5565b60006001600160a01b0384163b156125e757604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061252990339089908890889060040161302b565b602060405180830381600087803b15801561254357600080fd5b505af1925050508015612573575060408051601f3d908101601f1916820190925261257091810190613068565b60015b6125cd573d8080156125a1576040519150601f19603f3d011682016040523d82523d6000602084013e6125a6565b606091505b5080516125c55760405162461bcd60e51b81526004016109d490612fc5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061209b565b506001949350505050565b600060016125ff8461130a565b6126099190612fae565b60008381526007602052604090205490915080821461265c576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906126a190600190612fae565b600083815260096020526040812054600880549394509092849081106126c9576126c9612e42565b9060005260206000200154905080600883815481106126ea576126ea612e42565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061272257612722613085565b6001900381819060005260206000200160009055905550505050565b60006127498361130a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166127d85760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109d4565b6000818152600260205260409020546001600160a01b03161561283d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109d4565b612849600083836123fa565b6001600160a01b0382166000908152600360205260408120805460019290612872908490612e89565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546128dc90612db6565b90600052602060002090601f0160209004810192826128fe5760008555612944565b82601f1061291757805160ff1916838001178555612944565b82800160010185558215612944579182015b82811115612944578251825591602001919060010190612929565b50612950929150612954565b5090565b5b808211156129505760008155600101612955565b6001600160e01b031981168114610eb757600080fd5b60006020828403121561299157600080fd5b8135611dd581612969565b803580151581146129ac57600080fd5b919050565b6000602082840312156129c357600080fd5b611dd58261299c565b60005b838110156129e75781810151838201526020016129cf565b8381111561120c5750506000910152565b60008151808452612a108160208601602086016129cc565b601f01601f19169290920160200192915050565b602081526000611dd560208301846129f8565b600060208284031215612a4957600080fd5b5035919050565b80356001600160a01b03811681146129ac57600080fd5b60008060408385031215612a7a57600080fd5b612a8383612a50565b946020939093013593505050565b600080600060608486031215612aa657600080fd5b612aaf84612a50565b9250612abd60208501612a50565b9150604084013590509250925092565b600060208284031215612adf57600080fd5b611dd582612a50565b6020808252825182820181905260009190848201906040850190845b81811015612b2057835183529284019291840191600101612b04565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612b5d57612b5d612b2c565b604051601f8501601f19908116603f01168101908282118183101715612b8557612b85612b2c565b81604052809350858152868686011115612b9e57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612bca57600080fd5b813567ffffffffffffffff811115612be157600080fd5b8201601f81018413612bf257600080fd5b61209b84823560208401612b42565b600080600060408486031215612c1657600080fd5b833567ffffffffffffffff80821115612c2e57600080fd5b818601915086601f830112612c4257600080fd5b813581811115612c5157600080fd5b8760208260051b8501011115612c6657600080fd5b602092830195509350612c7c918601905061299c565b90509250925092565b60008060408385031215612c9857600080fd5b612ca183612a50565b9150612caf6020840161299c565b90509250929050565b60008060008060808587031215612cce57600080fd5b612cd785612a50565b9350612ce560208601612a50565b925060408501359150606085013567ffffffffffffffff811115612d0857600080fd5b8501601f81018713612d1957600080fd5b612d2887823560208401612b42565b91505092959194509250565b60008060408385031215612d4757600080fd5b82359150612caf60208401612a50565b60008060408385031215612d6a57600080fd5b612d7383612a50565b9150612caf60208401612a50565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612dca57607f821691505b60208210811415612deb57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612e8257612e82612e58565b5060010190565b60008219821115612e9c57612e9c612e58565b500190565b6000816000190483118215151615612ebb57612ebb612e58565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612ee557612ee5612ec0565b500490565b600084516020612efd8285838a016129cc565b855191840191612f108184848a016129cc565b8554920191600090600181811c9080831680612f2d57607f831692505b858310811415612f4b57634e487b7160e01b85526022600452602485fd5b808015612f5f5760018114612f7057612f9d565b60ff19851688528388019550612f9d565b60008b81526020902060005b85811015612f955781548a820152908401908801612f7c565b505083880195505b50939b9a5050505050505050505050565b600082821015612fc057612fc0612e58565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261302657613026612ec0565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061305e908301846129f8565b9695505050505050565b60006020828403121561307a57600080fd5b8151611dd581612969565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220ef7263dab1ddff1f3f4aa7a44ea1f746b54ec304b80bf687985c8ee8e51a850764736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c80636352211e11610190578063a9ae26fe116100dc578063cfb89aba11610095578063ddb07b861161006f578063ddb07b86146108ce578063e985e9c5146108f6578063f2c4ce1e1461093f578063f2fde38b1461095f57600080fd5b8063cfb89aba14610882578063d5abeb0114610898578063da3ef23f146108ae57600080fd5b8063a9ae26fe146107b8578063b88d4fde146107e0578063beb73b3114610800578063bef870ca1461082d578063c66828621461084d578063c87b56dd1461086257600080fd5b806389f91ece1161014957806395d89b411161012357806395d89b411461075b578063a0712d6814610770578063a22cb46514610783578063a475b5dd146107a357600080fd5b806389f91ece146106fb5780638c4c8cb9146107155780638da5cb5b1461073d57600080fd5b80636352211e146106495780636f8b44b01461066957806370a0823114610689578063715018a6146106a95780637f19c412146106be578063881b27aa146106d357600080fd5b80632f745c591161024f5780634f6ccce71161020857806355f804b3116101e257806355f804b3146105c75780635c975abb146105e75780635ebdfdca1461060157806362e7707e1461062957600080fd5b80634f6ccce7146105685780635183022714610588578063555503b1146105a757600080fd5b80632f745c59146104a35780633af32abf146104c35780633ccfd60b146104f357806342842e0e146104fb578063438b63001461051b57806344a0d68a1461054857600080fd5b8063095ea7b3116102bc5780631730100411610296578063173010041461044357806318160ddd14610458578063239c70ae1461046d57806323b872dd1461048357600080fd5b8063095ea7b3146103ea5780630c1c972a1461040a57806313faede61461041f57600080fd5b806301ffc9a71461030457806302329a291461033957806306fdde031461035b578063081812fc1461037d578063081c8c44146103b5578063088a4ed0146103ca575b600080fd5b34801561031057600080fd5b5061032461031f36600461297f565b61097f565b60405190151581526020015b60405180910390f35b34801561034557600080fd5b506103596103543660046129b1565b6109aa565b005b34801561036757600080fd5b506103706109f0565b6040516103309190612a24565b34801561038957600080fd5b5061039d610398366004612a37565b610a82565b6040516001600160a01b039091168152602001610330565b3480156103c157600080fd5b50610370610b17565b3480156103d657600080fd5b506103596103e5366004612a37565b610ba5565b3480156103f657600080fd5b50610359610405366004612a67565b610c25565b34801561041657600080fd5b50610359610d3b565b34801561042b57600080fd5b50610435600d5481565b604051908152602001610330565b34801561044f57600080fd5b50610435606481565b34801561046457600080fd5b50600854610435565b34801561047957600080fd5b50610435600f5481565b34801561048f57600080fd5b5061035961049e366004612a91565b610d71565b3480156104af57600080fd5b506104356104be366004612a67565b610da2565b3480156104cf57600080fd5b506103246104de366004612acd565b60146020526000908152604090205460ff1681565b610359610e38565b34801561050757600080fd5b50610359610516366004612a91565b610eba565b34801561052757600080fd5b5061053b610536366004612acd565b610ed5565b6040516103309190612ae8565b34801561055457600080fd5b50610359610563366004612a37565b610f77565b34801561057457600080fd5b50610435610583366004612a37565b61101d565b34801561059457600080fd5b5060115461032490610100900460ff1681565b3480156105b357600080fd5b506103596105c2366004612a37565b6110b0565b3480156105d357600080fd5b506103596105e2366004612bb8565b611130565b3480156105f357600080fd5b506011546103249060ff1681565b34801561060d57600080fd5b5061039d73fbe22849817cefab6e5ef0d4ac5172169ee6d0c981565b34801561063557600080fd5b50610359610644366004612c01565b611171565b34801561065557600080fd5b5061039d610664366004612a37565b611212565b34801561067557600080fd5b50610359610684366004612a37565b611289565b34801561069557600080fd5b506104356106a4366004612acd565b61130a565b3480156106b557600080fd5b50610359611391565b3480156106ca57600080fd5b506103596113c7565b3480156106df57600080fd5b5061039d7391a92b595090deea0bd1c5408a438d72a377810a81565b34801561070757600080fd5b506013546103249060ff1681565b34801561072157600080fd5b5061039d735b3d05f28a09cf0e8085162d771751b6af3c2f6f81565b34801561074957600080fd5b50600a546001600160a01b031661039d565b34801561076757600080fd5b50610370611400565b61035961077e366004612a37565b61140f565b34801561078f57600080fd5b5061035961079e366004612c85565b6119bb565b3480156107af57600080fd5b50610359611a80565b3480156107c457600080fd5b5061039d730740b1aef3ba9ecd7534888581b5c98c448e79c581565b3480156107ec57600080fd5b506103596107fb366004612cb8565b611abb565b34801561080c57600080fd5b5061043561081b366004612acd565b60156020526000908152604090205481565b34801561083957600080fd5b50610359610848366004612d34565b611aed565b34801561085957600080fd5b50610370611c50565b34801561086e57600080fd5b5061037061087d366004612a37565b611c5d565b34801561088e57600080fd5b5061043560105481565b3480156108a457600080fd5b50610435600e5481565b3480156108ba57600080fd5b506103596108c9366004612bb8565b611ddc565b3480156108da57600080fd5b5061039d7374c34c30361d12a68fc2f9ba196be310dbfc722481565b34801561090257600080fd5b50610324610911366004612d57565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561094b57600080fd5b5061035961095a366004612bb8565b611e19565b34801561096b57600080fd5b5061035961097a366004612acd565b611e56565b60006001600160e01b0319821663780e9d6360e01b14806109a457506109a482611eee565b92915050565b600a546001600160a01b031633146109dd5760405162461bcd60e51b81526004016109d490612d81565b60405180910390fd5b6011805460ff1916911515919091179055565b6060600080546109ff90612db6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2b90612db6565b8015610a785780601f10610a4d57610100808354040283529160200191610a78565b820191906000526020600020905b815481529060010190602001808311610a5b57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610afb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109d4565b506000908152600460205260409020546001600160a01b031690565b60128054610b2490612db6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5090612db6565b8015610b9d5780601f10610b7257610100808354040283529160200191610b9d565b820191906000526020600020905b815481529060010190602001808311610b8057829003601f168201915b505050505081565b600a546001600160a01b03163314610bcf5760405162461bcd60e51b81526004016109d490612d81565b600a811115610c205760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742073657420686967686572207468616e2031300000000000000060448201526064016109d4565b600f55565b6000610c3082611212565b9050806001600160a01b0316836001600160a01b03161415610c9e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016109d4565b336001600160a01b0382161480610cba5750610cba8133610911565b610d2c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016109d4565b610d368383611f3e565b505050565b600a546001600160a01b03163314610d655760405162461bcd60e51b81526004016109d490612d81565b6013805460ff19169055565b610d7b3382611fac565b610d975760405162461bcd60e51b81526004016109d490612df1565b610d368383836120a3565b6000610dad8361130a565b8210610e0f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016109d4565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e625760405162461bcd60e51b81526004016109d490612d81565b604051600090339047908381818185875af1925050503d8060008114610ea4576040519150601f19603f3d011682016040523d82523d6000602084013e610ea9565b606091505b5050905080610eb757600080fd5b50565b610d3683838360405180602001604052806000815250611abb565b60606000610ee28361130a565b905060008167ffffffffffffffff811115610eff57610eff612b2c565b604051908082528060200260200182016040528015610f28578160200160208202803683370190505b50905060005b82811015610f6f57610f408582610da2565b828281518110610f5257610f52612e42565b602090810291909101015280610f6781612e6e565b915050610f2e565b509392505050565b600a546001600160a01b03163314610fa15760405162461bcd60e51b81526004016109d490612d81565b6729a2241af62c00008111158015610fc05750662386f26fc100008110155b6110185760405162461bcd60e51b8152602060048201526024808201527f436f7374206d757374206265206265747765656e203320616e6420302e3120656044820152633a3432b960e11b60648201526084016109d4565b600d55565b600061102860085490565b821061108b5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016109d4565b6008828154811061109e5761109e612e42565b90600052602060002001549050919050565b600a546001600160a01b031633146110da5760405162461bcd60e51b81526004016109d490612d81565b600381111561112b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f742073657420686967686572207468616e2033000000000000000060448201526064016109d4565b601055565b600a546001600160a01b0316331461115a5760405162461bcd60e51b81526004016109d490612d81565b805161116d90600b9060208401906128d0565b5050565b600a546001600160a01b0316331461119b5760405162461bcd60e51b81526004016109d490612d81565b60005b8281101561120c5781601460008686858181106111bd576111bd612e42565b90506020020160208101906111d29190612acd565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061120481612e6e565b91505061119e565b50505050565b6000818152600260205260408120546001600160a01b0316806109a45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016109d4565b600a546001600160a01b031633146112b35760405162461bcd60e51b81526004016109d490612d81565b6127108111156113055760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073657420686967686572207468616e2031303030300000000060448201526064016109d4565b600e55565b60006001600160a01b0382166113755760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016109d4565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146113bb5760405162461bcd60e51b81526004016109d490612d81565b6113c5600061224e565b565b600a546001600160a01b031633146113f15760405162461bcd60e51b81526004016109d490612d81565b6013805460ff19166001179055565b6060600180546109ff90612db6565b600061141a60085490565b60115490915060ff16156114645760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b60448201526064016109d4565b60135460ff1615611596573360009081526014602052604090205460ff166114ed5760405162461bcd60e51b815260206004820152603660248201527f4d7573742062652077686974656c697374656420696e206f7264657220746f206044820152756d696e7420647572696e67207468697320706861736560501b60648201526084016109d4565b6010543360009081526015602052604090205461150b908490612e89565b11156115715760405162461bcd60e51b815260206004820152602f60248201527f52657175657374696e6720746f6f206d616e792077686974656c697374204e4660448201526e151cc81d1bc81899481b5a5b9d1959608a1b60648201526084016109d4565b3360009081526015602052604081208054849290611590908490612e89565b90915550505b600082116115d65760405162461bcd60e51b815260206004820152600d60248201526c063616e6e6f74206d696e74203609c1b60448201526064016109d4565b600f548211156116215760405162461bcd60e51b815260206004820152601660248201527518d85b9b9bdd08195e18d95959081b585e081b5a5b9d60521b60448201526064016109d4565b600e5461162e8383612e89565b111561167c5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74206d696e742061626f7665206d617820737570706c790000000060448201526064016109d4565b81600d5461168a9190612ea1565b3410156116e85760405162461bcd60e51b815260206004820152602660248201527f4d7573742073656e6420656e6f7567682045544820746f20636f766572206d696044820152656e742066656560d01b60648201526084016109d4565b60015b82811161171757611705336117008385612e89565b6122a0565b8061170f81612e6e565b9150506116eb565b5047600073bb6da379ed680839c4e1eb7fe49814cd6e7cbf8a606461173d846005612ea1565b6117479190612ed6565b604051600081818185875af1925050503d8060008114611783576040519150601f19603f3d011682016040523d82523d6000602084013e611788565b606091505b5090915073fbe22849817cefab6e5ef0d4ac5172169ee6d0c9905060646117b0846014612ea1565b6117ba9190612ed6565b604051600081818185875af1925050503d80600081146117f6576040519150601f19603f3d011682016040523d82523d6000602084013e6117fb565b606091505b50909150735b3d05f28a09cf0e8085162d771751b6af3c2f6f9050606461182384601e612ea1565b61182d9190612ed6565b604051600081818185875af1925050503d8060008114611869576040519150601f19603f3d011682016040523d82523d6000602084013e61186e565b606091505b509091507391a92b595090deea0bd1c5408a438d72a377810a9050606461189684600a612ea1565b6118a09190612ed6565b604051600081818185875af1925050503d80600081146118dc576040519150601f19603f3d011682016040523d82523d6000602084013e6118e1565b606091505b509091507374c34c30361d12a68fc2f9ba196be310dbfc72249050606461190984600a612ea1565b6119139190612ed6565b604051600081818185875af1925050503d806000811461194f576040519150601f19603f3d011682016040523d82523d6000602084013e611954565b606091505b5050604051909150730740b1aef3ba9ecd7534888581b5c98c448e79c5904790600081818185875af1925050503d80600081146119ad576040519150601f19603f3d011682016040523d82523d6000602084013e6119b2565b606091505b50505050505050565b6001600160a01b038216331415611a145760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109d4565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b03163314611aaa5760405162461bcd60e51b81526004016109d490612d81565b6011805461ff001916610100179055565b611ac53383611fac565b611ae15760405162461bcd60e51b81526004016109d490612df1565b61120c848484846122ba565b600a546001600160a01b03163314611b175760405162461bcd60e51b81526004016109d490612d81565b6000611b2260085490565b905060008311611b645760405162461bcd60e51b815260206004820152600d60248201526c063616e6e6f74206d696e74203609c1b60448201526064016109d4565b6064600e54611b739190612e89565b611b7d8483612e89565b1115611bcb5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f74206d696e742061626f7665206d617820737570706c790000000060448201526064016109d4565b612710611bd88483612e89565b1115611c265760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206d696e742061626f766520313030303000000000000000000060448201526064016109d4565b60015b83811161120c57611c3e836117008385612e89565b80611c4881612e6e565b915050611c29565b600c8054610b2490612db6565b6000818152600260205260409020546060906001600160a01b0316611cdc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109d4565b601154610100900460ff16611d7d5760128054611cf890612db6565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2490612db6565b8015611d715780601f10611d4657610100808354040283529160200191611d71565b820191906000526020600020905b815481529060010190602001808311611d5457829003601f168201915b50505050509050919050565b6000611d876122ed565b90506000815111611da75760405180602001604052806000815250611dd5565b80611db1846122fc565b600c604051602001611dc593929190612eea565b6040516020818303038152906040525b9392505050565b600a546001600160a01b03163314611e065760405162461bcd60e51b81526004016109d490612d81565b805161116d90600c9060208401906128d0565b600a546001600160a01b03163314611e435760405162461bcd60e51b81526004016109d490612d81565b805161116d9060129060208401906128d0565b600a546001600160a01b03163314611e805760405162461bcd60e51b81526004016109d490612d81565b6001600160a01b038116611ee55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109d4565b610eb78161224e565b60006001600160e01b031982166380ac58cd60e01b1480611f1f57506001600160e01b03198216635b5e139f60e01b145b806109a457506301ffc9a760e01b6001600160e01b03198316146109a4565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f7382611212565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166120255760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016109d4565b600061203083611212565b9050806001600160a01b0316846001600160a01b0316148061206b5750836001600160a01b031661206084610a82565b6001600160a01b0316145b8061209b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166120b682611212565b6001600160a01b03161461211e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016109d4565b6001600160a01b0382166121805760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109d4565b61218b8383836123fa565b612196600082611f3e565b6001600160a01b03831660009081526003602052604081208054600192906121bf908490612fae565b90915550506001600160a01b03821660009081526003602052604081208054600192906121ed908490612e89565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61116d8282604051806020016040528060008152506124b2565b6122c58484846120a3565b6122d1848484846124e5565b61120c5760405162461bcd60e51b81526004016109d490612fc5565b6060600b80546109ff90612db6565b6060816123205750506040805180820190915260018152600360fc1b602082015290565b8160005b811561234a578061233481612e6e565b91506123439050600a83612ed6565b9150612324565b60008167ffffffffffffffff81111561236557612365612b2c565b6040519080825280601f01601f19166020018201604052801561238f576020820181803683370190505b5090505b841561209b576123a4600183612fae565b91506123b1600a86613017565b6123bc906030612e89565b60f81b8183815181106123d1576123d1612e42565b60200101906001600160f81b031916908160001a9053506123f3600a86612ed6565b9450612393565b6001600160a01b0383166124555761245081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612478565b816001600160a01b0316836001600160a01b0316146124785761247883826125f2565b6001600160a01b03821661248f57610d368161268f565b826001600160a01b0316826001600160a01b031614610d3657610d36828261273e565b6124bc8383612782565b6124c960008484846124e5565b610d365760405162461bcd60e51b81526004016109d490612fc5565b60006001600160a01b0384163b156125e757604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061252990339089908890889060040161302b565b602060405180830381600087803b15801561254357600080fd5b505af1925050508015612573575060408051601f3d908101601f1916820190925261257091810190613068565b60015b6125cd573d8080156125a1576040519150601f19603f3d011682016040523d82523d6000602084013e6125a6565b606091505b5080516125c55760405162461bcd60e51b81526004016109d490612fc5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061209b565b506001949350505050565b600060016125ff8461130a565b6126099190612fae565b60008381526007602052604090205490915080821461265c576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906126a190600190612fae565b600083815260096020526040812054600880549394509092849081106126c9576126c9612e42565b9060005260206000200154905080600883815481106126ea576126ea612e42565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061272257612722613085565b6001900381819060005260206000200160009055905550505050565b60006127498361130a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166127d85760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109d4565b6000818152600260205260409020546001600160a01b03161561283d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109d4565b612849600083836123fa565b6001600160a01b0382166000908152600360205260408120805460019290612872908490612e89565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546128dc90612db6565b90600052602060002090601f0160209004810192826128fe5760008555612944565b82601f1061291757805160ff1916838001178555612944565b82800160010185558215612944579182015b82811115612944578251825591602001919060010190612929565b50612950929150612954565b5090565b5b808211156129505760008155600101612955565b6001600160e01b031981168114610eb757600080fd5b60006020828403121561299157600080fd5b8135611dd581612969565b803580151581146129ac57600080fd5b919050565b6000602082840312156129c357600080fd5b611dd58261299c565b60005b838110156129e75781810151838201526020016129cf565b8381111561120c5750506000910152565b60008151808452612a108160208601602086016129cc565b601f01601f19169290920160200192915050565b602081526000611dd560208301846129f8565b600060208284031215612a4957600080fd5b5035919050565b80356001600160a01b03811681146129ac57600080fd5b60008060408385031215612a7a57600080fd5b612a8383612a50565b946020939093013593505050565b600080600060608486031215612aa657600080fd5b612aaf84612a50565b9250612abd60208501612a50565b9150604084013590509250925092565b600060208284031215612adf57600080fd5b611dd582612a50565b6020808252825182820181905260009190848201906040850190845b81811015612b2057835183529284019291840191600101612b04565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612b5d57612b5d612b2c565b604051601f8501601f19908116603f01168101908282118183101715612b8557612b85612b2c565b81604052809350858152868686011115612b9e57600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215612bca57600080fd5b813567ffffffffffffffff811115612be157600080fd5b8201601f81018413612bf257600080fd5b61209b84823560208401612b42565b600080600060408486031215612c1657600080fd5b833567ffffffffffffffff80821115612c2e57600080fd5b818601915086601f830112612c4257600080fd5b813581811115612c5157600080fd5b8760208260051b8501011115612c6657600080fd5b602092830195509350612c7c918601905061299c565b90509250925092565b60008060408385031215612c9857600080fd5b612ca183612a50565b9150612caf6020840161299c565b90509250929050565b60008060008060808587031215612cce57600080fd5b612cd785612a50565b9350612ce560208601612a50565b925060408501359150606085013567ffffffffffffffff811115612d0857600080fd5b8501601f81018713612d1957600080fd5b612d2887823560208401612b42565b91505092959194509250565b60008060408385031215612d4757600080fd5b82359150612caf60208401612a50565b60008060408385031215612d6a57600080fd5b612d7383612a50565b9150612caf60208401612a50565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612dca57607f821691505b60208210811415612deb57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612e8257612e82612e58565b5060010190565b60008219821115612e9c57612e9c612e58565b500190565b6000816000190483118215151615612ebb57612ebb612e58565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612ee557612ee5612ec0565b500490565b600084516020612efd8285838a016129cc565b855191840191612f108184848a016129cc565b8554920191600090600181811c9080831680612f2d57607f831692505b858310811415612f4b57634e487b7160e01b85526022600452602485fd5b808015612f5f5760018114612f7057612f9d565b60ff19851688528388019550612f9d565b60008b81526020902060005b85811015612f955781548a820152908401908801612f7c565b505083880195505b50939b9a5050505050505050505050565b600082821015612fc057612fc0612e58565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008261302657613026612ec0565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061305e908301846129f8565b9695505050505050565b60006020828403121561307a57600080fd5b8151611dd581612969565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220ef7263dab1ddff1f3f4aa7a44ea1f746b54ec304b80bf687985c8ee8e51a850764736f6c63430008090033
Deployed Bytecode Sourcemap
42500:6162:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34105:224;;;;;;;;;;-1:-1:-1;34105:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;34105:224:0;;;;;;;;48348:73;;;;;;;;;;-1:-1:-1;48348:73:0;;;;;:::i;:::-;;:::i;:::-;;22032:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23591:221::-;;;;;;;;;;-1:-1:-1;23591:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2042:32:1;;;2024:51;;2012:2;1997:18;23591:221:0;1878:203:1;43431:28:0;;;;;;;;;;;;;:::i;47443:184::-;;;;;;;;;;-1:-1:-1;47443:184:0;;;;;:::i;:::-;;:::i;23114:411::-;;;;;;;;;;-1:-1:-1;23114:411:0;;;;;:::i;:::-;;:::i;45987:86::-;;;;;;;;;;;;;:::i;43214:32::-;;;;;;;;;;;;;;;;;;;2669:25:1;;;2657:2;2642:18;43214:32:0;2523:177:1;43618:47:0;;;;;;;;;;;;43662:3;43618:47;;34745:113;;;;;;;;;;-1:-1:-1;34833:10:0;:17;34745:113;;43288:32;;;;;;;;;;;;;;;;24481:339;;;;;;;;;;-1:-1:-1;24481:339:0;;;;;:::i;:::-;;:::i;34413:256::-;;;;;;;;;;-1:-1:-1;34413:256:0;;;;;:::i;:::-;;:::i;43505:46::-;;;;;;;;;;-1:-1:-1;43505:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;48511:148;;;:::i;24891:185::-;;;;;;;;;;-1:-1:-1;24891:185:0;;;;;:::i;:::-;;:::i;46310:348::-;;;;;;;;;;-1:-1:-1;46310:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47256:181::-;;;;;;;;;;-1:-1:-1;47256:181:0;;;;;:::i;:::-;;:::i;34935:233::-;;;;;;;;;;-1:-1:-1;34935:233:0;;;;;:::i;:::-;;:::i;43398:28::-;;;;;;;;;;-1:-1:-1;43398:28:0;;;;;;;;;;;47633:173;;;;;;;;;;-1:-1:-1;47633:173:0;;;;;:::i;:::-;;:::i;48116:98::-;;;;;;;;;;-1:-1:-1;48116:98:0;;;;;:::i;:::-;;:::i;43368:25::-;;;;;;;;;;-1:-1:-1;43368:25:0;;;;;;;;42588:94;;;;;;;;;;;;42639:42;42588:94;;46081:223;;;;;;;;;;-1:-1:-1;46081:223:0;;;;;:::i;:::-;;:::i;21726:239::-;;;;;;;;;;-1:-1:-1;21726:239:0;;;;;:::i;:::-;;:::i;47812:170::-;;;;;;;;;;-1:-1:-1;47812:170:0;;;;;:::i;:::-;;:::i;21456:208::-;;;;;;;;;;-1:-1:-1;21456:208:0;;;;;:::i;:::-;;:::i;41871:94::-;;;;;;;;;;;;;:::i;45895:84::-;;;;;;;;;;;;;:::i;42816:94::-;;;;;;;;;;;;42867:42;42816:94;;43464:36;;;;;;;;;;-1:-1:-1;43464:36:0;;;;;;;;42702:94;;;;;;;;;;;;42753:42;42702:94;;41220:87;;;;;;;;;;-1:-1:-1;41293:6:0;;-1:-1:-1;;;;;41293:6:0;41220:87;;22201:104;;;;;;;;;;;;;:::i;44414:1473::-;;;;;;:::i;:::-;;:::i;23884:295::-;;;;;;;;;;-1:-1:-1;23884:295:0;;;;;:::i;:::-;;:::i;47183:65::-;;;;;;;;;;;;;:::i;43044:94::-;;;;;;;;;;;;43095:42;43044:94;;25147:328;;;;;;;;;;-1:-1:-1;25147:328:0;;;;;:::i;:::-;;:::i;43556:57::-;;;;;;;;;;-1:-1:-1;43556:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;43947:448;;;;;;;;;;-1:-1:-1;43947:448:0;;;;;:::i;:::-;;:::i;43177:32::-;;;;;;;;;;;;;:::i;46664:497::-;;;;;;;;;;-1:-1:-1;46664:497:0;;;;;:::i;:::-;;:::i;43325:38::-;;;;;;;;;;;;;;;;43251:32;;;;;;;;;;;;;;;;48220:122;;;;;;;;;;-1:-1:-1;48220:122:0;;;;;:::i;:::-;;:::i;42930:94::-;;;;;;;;;;;;42981:42;42930:94;;24250:164;;;;;;;;;;-1:-1:-1;24250:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;24371:25:0;;;24347:4;24371:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24250:164;47990:120;;;;;;;;;;-1:-1:-1;47990:120:0;;;;;:::i;:::-;;:::i;42120:192::-;;;;;;;;;;-1:-1:-1;42120:192:0;;;;;:::i;:::-;;:::i;34105:224::-;34207:4;-1:-1:-1;;;;;;34231:50:0;;-1:-1:-1;;;34231:50:0;;:90;;;34285:36;34309:11;34285:23;:36::i;:::-;34224:97;34105:224;-1:-1:-1;;34105:224:0:o;48348:73::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;;;;;;;;;48400:6:::1;:15:::0;;-1:-1:-1;;48400:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48348:73::o;22032:100::-;22086:13;22119:5;22112:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22032:100;:::o;23591:221::-;23667:7;27074:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27074:16:0;23687:73;;;;-1:-1:-1;;;23687:73:0;;8188:2:1;23687:73:0;;;8170:21:1;8227:2;8207:18;;;8200:30;8266:34;8246:18;;;8239:62;-1:-1:-1;;;8317:18:1;;;8310:42;8369:19;;23687:73:0;7986:408:1;23687:73:0;-1:-1:-1;23780:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23780:24:0;;23591:221::o;43431:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47443:184::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;47549:2:::1;47528:17;:23;;47520:61;;;::::0;-1:-1:-1;;;47520:61:0;;8601:2:1;47520:61:0::1;::::0;::::1;8583:21:1::0;8640:2;8620:18;;;8613:30;8679:27;8659:18;;;8652:55;8724:18;;47520:61:0::1;8399:349:1::0;47520:61:0::1;47588:13;:33:::0;47443:184::o;23114:411::-;23195:13;23211:23;23226:7;23211:14;:23::i;:::-;23195:39;;23259:5;-1:-1:-1;;;;;23253:11:0;:2;-1:-1:-1;;;;;23253:11:0;;;23245:57;;;;-1:-1:-1;;;23245:57:0;;8955:2:1;23245:57:0;;;8937:21:1;8994:2;8974:18;;;8967:30;9033:34;9013:18;;;9006:62;-1:-1:-1;;;9084:18:1;;;9077:31;9125:19;;23245:57:0;8753:397:1;23245:57:0;19666:10;-1:-1:-1;;;;;23337:21:0;;;;:62;;-1:-1:-1;23362:37:0;23379:5;19666:10;24250:164;:::i;23362:37::-;23315:168;;;;-1:-1:-1;;;23315:168:0;;9357:2:1;23315:168:0;;;9339:21:1;9396:2;9376:18;;;9369:30;9435:34;9415:18;;;9408:62;9506:26;9486:18;;;9479:54;9550:19;;23315:168:0;9155:420:1;23315:168:0;23496:21;23505:2;23509:7;23496:8;:21::i;:::-;23184:341;23114:411;;:::o;45987:86::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;46042:17:::1;:25:::0;;-1:-1:-1;;46042:25:0::1;::::0;;45987:86::o;24481:339::-;24676:41;19666:10;24709:7;24676:18;:41::i;:::-;24668:103;;;;-1:-1:-1;;;24668:103:0;;;;;;;:::i;:::-;24784:28;24794:4;24800:2;24804:7;24784:9;:28::i;34413:256::-;34510:7;34546:23;34563:5;34546:16;:23::i;:::-;34538:5;:31;34530:87;;;;-1:-1:-1;;;34530:87:0;;10200:2:1;34530:87:0;;;10182:21:1;10239:2;10219:18;;;10212:30;10278:34;10258:18;;;10251:62;-1:-1:-1;;;10329:18:1;;;10322:41;10380:19;;34530:87:0;9998:407:1;34530:87:0;-1:-1:-1;;;;;;34635:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;34413:256::o;48511:148::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;48577:58:::1;::::0;48564:7:::1;::::0;48585:10:::1;::::0;48609:21:::1;::::0;48564:7;48577:58;48564:7;48577:58;48609:21;48585:10;48577:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48563:72;;;48650:2;48642:11;;;::::0;::::1;;48556:103;48511:148::o:0;24891:185::-;25029:39;25046:4;25052:2;25056:7;25029:39;;;;;;;;;;;;:16;:39::i;46310:348::-;46385:16;46413:23;46439:17;46449:6;46439:9;:17::i;:::-;46413:43;;46463:25;46505:15;46491:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46491:30:0;;46463:58;;46533:9;46528:103;46548:15;46544:1;:19;46528:103;;;46593:30;46613:6;46621:1;46593:19;:30::i;:::-;46579:8;46588:1;46579:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;46565:3;;;;:::i;:::-;;;;46528:103;;;-1:-1:-1;46644:8:0;46310:348;-1:-1:-1;;;46310:348:0:o;47256:181::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;47335:7:::1;47323:8;:19;;:45;;;;;47358:10;47346:8;:22;;47323:45;47315:94;;;::::0;-1:-1:-1;;;47315:94:0;;11226:2:1;47315:94:0::1;::::0;::::1;11208:21:1::0;11265:2;11245:18;;;11238:30;11304:34;11284:18;;;11277:62;-1:-1:-1;;;11355:18:1;;;11348:34;11399:19;;47315:94:0::1;11024:400:1::0;47315:94:0::1;47416:4;:15:::0;47256:181::o;34935:233::-;35010:7;35046:30;34833:10;:17;;34745:113;35046:30;35038:5;:38;35030:95;;;;-1:-1:-1;;;35030:95:0;;11631:2:1;35030:95:0;;;11613:21:1;11670:2;11650:18;;;11643:30;11709:34;11689:18;;;11682:62;-1:-1:-1;;;11760:18:1;;;11753:42;11812:19;;35030:95:0;11429:408:1;35030:95:0;35143:10;35154:5;35143:17;;;;;;;;:::i;:::-;;;;;;;;;35136:24;;34935:233;;;:::o;47633:173::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;47731:1:::1;47717:10;:15;;47709:52;;;::::0;-1:-1:-1;;;47709:52:0;;12044:2:1;47709:52:0::1;::::0;::::1;12026:21:1::0;12083:2;12063:18;;;12056:30;12122:26;12102:18;;;12095:54;12166:18;;47709:52:0::1;11842:348:1::0;47709:52:0::1;47768:19;:32:::0;47633:173::o;48116:98::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;48187:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48116:98:::0;:::o;46081:223::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;46193:9:::1;46188:111;46208:18:::0;;::::1;46188:111;;;46273:16;46245:13;:25;46259:7;;46267:1;46259:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46245:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;46245:25:0;:44;;-1:-1:-1;;46245:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46228:3;::::1;::::0;::::1;:::i;:::-;;;;46188:111;;;;46081:223:::0;;;:::o;21726:239::-;21798:7;21834:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21834:16:0;21869:19;21861:73;;;;-1:-1:-1;;;21861:73:0;;12397:2:1;21861:73:0;;;12379:21:1;12436:2;12416:18;;;12409:30;12475:34;12455:18;;;12448:62;-1:-1:-1;;;12526:18:1;;;12519:39;12575:19;;21861:73:0;12195:405:1;47812:170:0;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;47906:5:::1;47889:13;:22;;47881:63;;;::::0;-1:-1:-1;;;47881:63:0;;12807:2:1;47881:63:0::1;::::0;::::1;12789:21:1::0;12846:2;12826:18;;;12819:30;12885;12865:18;;;12858:58;12933:18;;47881:63:0::1;12605:352:1::0;47881:63:0::1;47951:9;:25:::0;47812:170::o;21456:208::-;21528:7;-1:-1:-1;;;;;21556:19:0;;21548:74;;;;-1:-1:-1;;;21548:74:0;;13164:2:1;21548:74:0;;;13146:21:1;13203:2;13183:18;;;13176:30;13242:34;13222:18;;;13215:62;-1:-1:-1;;;13293:18:1;;;13286:40;13343:19;;21548:74:0;12962:406:1;21548:74:0;-1:-1:-1;;;;;;21640:16:0;;;;;:9;:16;;;;;;;21456:208::o;41871:94::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;41936:21:::1;41954:1;41936:9;:21::i;:::-;41871:94::o:0;45895:84::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;45949:17:::1;:24:::0;;-1:-1:-1;;45949:24:0::1;45969:4;45949:24;::::0;;45895:84::o;22201:104::-;22257:13;22290:7;22283:14;;;;;:::i;44414:1473::-;44471:14;44488:13;34833:10;:17;;34745:113;44488:13;44517:6;;44471:30;;-1:-1:-1;44517:6:0;;44516:7;44508:37;;;;-1:-1:-1;;;44508:37:0;;13575:2:1;44508:37:0;;;13557:21:1;13614:2;13594:18;;;13587:30;-1:-1:-1;;;13633:18:1;;;13626:47;13690:18;;44508:37:0;13373:341:1;44508:37:0;44557:17;;;;44554:332;;;44608:10;44594:25;;;;:13;:25;;;;;;;;44586:92;;;;-1:-1:-1;;;44586:92:0;;13921:2:1;44586:92:0;;;13903:21:1;13960:2;13940:18;;;13933:30;13999:34;13979:18;;;13972:62;-1:-1:-1;;;14050:18:1;;;14043:52;14112:19;;44586:92:0;13719:418:1;44586:92:0;44748:19;;44719:10;44697:33;;;;:21;:33;;;;;;:47;;44733:11;;44697:47;:::i;:::-;:70;;44689:130;;;;-1:-1:-1;;;44689:130:0;;14477:2:1;44689:130:0;;;14459:21:1;14516:2;14496:18;;;14489:30;14555:34;14535:18;;;14528:62;-1:-1:-1;;;14606:18:1;;;14599:45;14661:19;;44689:130:0;14275:411:1;44689:130:0;44852:10;44830:33;;;;:21;:33;;;;;:48;;44867:11;;44830:33;:48;;44867:11;;44830:48;:::i;:::-;;;;-1:-1:-1;;44554:332:0;44916:1;44902:11;:15;44894:41;;;;-1:-1:-1;;;44894:41:0;;14893:2:1;44894:41:0;;;14875:21:1;14932:2;14912:18;;;14905:30;-1:-1:-1;;;14951:18:1;;;14944:43;15004:18;;44894:41:0;14691:337:1;44894:41:0;44965:13;;44950:11;:28;;44942:63;;;;-1:-1:-1;;;44942:63:0;;15235:2:1;44942:63:0;;;15217:21:1;15274:2;15254:18;;;15247:30;-1:-1:-1;;;15293:18:1;;;15286:52;15355:18;;44942:63:0;15033:346:1;44942:63:0;45044:9;;45020:20;45029:11;45020:6;:20;:::i;:::-;:33;;45012:74;;;;-1:-1:-1;;;45012:74:0;;15586:2:1;45012:74:0;;;15568:21:1;15625:2;15605:18;;;15598:30;15664;15644:18;;;15637:58;15712:18;;45012:74:0;15384:352:1;45012:74:0;45123:11;45116:4;;:18;;;;:::i;:::-;45103:9;:31;;45095:82;;;;-1:-1:-1;;;45095:82:0;;16116:2:1;45095:82:0;;;16098:21:1;16155:2;16135:18;;;16128:30;16194:34;16174:18;;;16167:62;-1:-1:-1;;;16245:18:1;;;16238:36;16291:19;;45095:82:0;15914:402:1;45095:82:0;45207:1;45190:93;45215:11;45210:1;:16;45190:93;;45242:33;45252:10;45264;45273:1;45264:6;:10;:::i;:::-;45242:9;:33::i;:::-;45228:3;;;;:::i;:::-;;;;45190:93;;;-1:-1:-1;45309:21:0;45291:15;45367:42;45438:3;45424:11;45309:21;45434:1;45424:11;:::i;:::-;:17;;;;:::i;:::-;45351:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45337:109:0;;-1:-1:-1;42639:42:0;;-1:-1:-1;45524:3:0;45509:12;:7;45519:2;45509:12;:::i;:::-;:18;;;;:::i;:::-;45462:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45453:79:0;;-1:-1:-1;42753:42:0;;-1:-1:-1;45610:3:0;45595:12;:7;45605:2;45595:12;:::i;:::-;:18;;;;:::i;:::-;45548:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45539:79:0;;-1:-1:-1;42867:42:0;;-1:-1:-1;45696:3:0;45681:12;:7;45691:2;45681:12;:::i;:::-;:18;;;;:::i;:::-;45634:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45625:79:0;;-1:-1:-1;42981:42:0;;-1:-1:-1;45782:3:0;45767:12;:7;45777:2;45767:12;:::i;:::-;:18;;;;:::i;:::-;45720:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45806:73:0;;45711:79;;-1:-1:-1;43095:42:0;;45853:21;;45806:73;;;;45853:21;43095:42;45806:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;44414:1473:0:o;23884:295::-;-1:-1:-1;;;;;23987:24:0;;19666:10;23987:24;;23979:62;;;;-1:-1:-1;;;23979:62:0;;16780:2:1;23979:62:0;;;16762:21:1;16819:2;16799:18;;;16792:30;16858:27;16838:18;;;16831:55;16903:18;;23979:62:0;16578:349:1;23979:62:0;19666:10;24054:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;24054:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;24054:53:0;;;;;;;;;;24123:48;;540:41:1;;;24054:42:0;;19666:10;24123:48;;513:18:1;24123:48:0;;;;;;;23884:295;;:::o;47183:65::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;47227:8:::1;:15:::0;;-1:-1:-1;;47227:15:0::1;;;::::0;;47183:65::o;25147:328::-;25322:41;19666:10;25355:7;25322:18;:41::i;:::-;25314:103;;;;-1:-1:-1;;;25314:103:0;;;;;;;:::i;:::-;25428:39;25442:4;25448:2;25452:7;25461:5;25428:13;:39::i;43947:448::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;44034:14:::1;44051:13;34833:10:::0;:17;;34745:113;44051:13:::1;44034:30;;44093:1;44079:11;:15;44071:41;;;::::0;-1:-1:-1;;;44071:41:0;;14893:2:1;44071:41:0::1;::::0;::::1;14875:21:1::0;14932:2;14912:18;;;14905:30;-1:-1:-1;;;14951:18:1;;;14944:43;15004:18;;44071:41:0::1;14691:337:1::0;44071:41:0::1;43662:3;44151:9;;:29;;;;:::i;:::-;44127:20;44136:11:::0;44127:6;:20:::1;:::i;:::-;:53;;44119:94;;;::::0;-1:-1:-1;;;44119:94:0;;15586:2:1;44119:94:0::1;::::0;::::1;15568:21:1::0;15625:2;15605:18;;;15598:30;15664;15644:18;;;15637:58;15712:18;;44119:94:0::1;15384:352:1::0;44119:94:0::1;44252:5;44228:20;44237:11:::0;44228:6;:20:::1;:::i;:::-;:29;;44220:65;;;::::0;-1:-1:-1;;;44220:65:0;;17134:2:1;44220:65:0::1;::::0;::::1;17116:21:1::0;17173:2;17153:18;;;17146:30;17212:25;17192:18;;;17185:53;17255:18;;44220:65:0::1;16932:347:1::0;44220:65:0::1;44311:1;44294:96;44319:11;44314:1;:16;44294:96;;44348:34;44358:11:::0;44371:10:::1;44380:1:::0;44371:6;:10:::1;:::i;44348:34::-;44332:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44294:96;;43177:32:::0;;;;;;;:::i;46664:497::-;27050:4;27074:16;;;:7;:16;;;;;;46762:13;;-1:-1:-1;;;;;27074:16:0;46787:97;;;;-1:-1:-1;;;46787:97:0;;17486:2:1;46787:97:0;;;17468:21:1;17525:2;17505:18;;;17498:30;17564:34;17544:18;;;17537:62;-1:-1:-1;;;17615:18:1;;;17608:45;17670:19;;46787:97:0;17284:411:1;46787:97:0;46900:8;;;;;;;46897:62;;46937:14;46930:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46664:497;;;:::o;46897:62::-;46967:28;46998:10;:8;:10::i;:::-;46967:41;;47053:1;47028:14;47022:28;:32;:133;;;;;;;;;;;;;;;;;47090:14;47106:18;:7;:16;:18::i;:::-;47126:13;47073:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47022:133;47015:140;46664:497;-1:-1:-1;;;46664:497:0:o;48220:122::-;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;48303:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;47990:120::-:0;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;48072:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;42120:192::-:0;41293:6;;-1:-1:-1;;;;;41293:6:0;19666:10;41440:23;41432:68;;;;-1:-1:-1;;;41432:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42209:22:0;::::1;42201:73;;;::::0;-1:-1:-1;;;42201:73:0;;19560:2:1;42201:73:0::1;::::0;::::1;19542:21:1::0;19599:2;19579:18;;;19572:30;19638:34;19618:18;;;19611:62;-1:-1:-1;;;19689:18:1;;;19682:36;19735:19;;42201:73:0::1;19358:402:1::0;42201:73:0::1;42285:19;42295:8;42285:9;:19::i;21087:305::-:0;21189:4;-1:-1:-1;;;;;;21226:40:0;;-1:-1:-1;;;21226:40:0;;:105;;-1:-1:-1;;;;;;;21283:48:0;;-1:-1:-1;;;21283:48:0;21226:105;:158;;;-1:-1:-1;;;;;;;;;;7203:40:0;;;21348:36;7094:157;30967:174;31042:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31042:29:0;-1:-1:-1;;;;;31042:29:0;;;;;;;;:24;;31096:23;31042:24;31096:14;:23::i;:::-;-1:-1:-1;;;;;31087:46:0;;;;;;;;;;;30967:174;;:::o;27279:348::-;27372:4;27074:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27074:16:0;27389:73;;;;-1:-1:-1;;;27389:73:0;;19967:2:1;27389:73:0;;;19949:21:1;20006:2;19986:18;;;19979:30;20045:34;20025:18;;;20018:62;-1:-1:-1;;;20096:18:1;;;20089:42;20148:19;;27389:73:0;19765:408:1;27389:73:0;27473:13;27489:23;27504:7;27489:14;:23::i;:::-;27473:39;;27542:5;-1:-1:-1;;;;;27531:16:0;:7;-1:-1:-1;;;;;27531:16:0;;:51;;;;27575:7;-1:-1:-1;;;;;27551:31:0;:20;27563:7;27551:11;:20::i;:::-;-1:-1:-1;;;;;27551:31:0;;27531:51;:87;;;-1:-1:-1;;;;;;24371:25:0;;;24347:4;24371:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;27586:32;27523:96;27279:348;-1:-1:-1;;;;27279:348:0:o;30271:578::-;30430:4;-1:-1:-1;;;;;30403:31:0;:23;30418:7;30403:14;:23::i;:::-;-1:-1:-1;;;;;30403:31:0;;30395:85;;;;-1:-1:-1;;;30395:85:0;;20380:2:1;30395:85:0;;;20362:21:1;20419:2;20399:18;;;20392:30;20458:34;20438:18;;;20431:62;-1:-1:-1;;;20509:18:1;;;20502:39;20558:19;;30395:85:0;20178:405:1;30395:85:0;-1:-1:-1;;;;;30499:16:0;;30491:65;;;;-1:-1:-1;;;30491:65:0;;20790:2:1;30491:65:0;;;20772:21:1;20829:2;20809:18;;;20802:30;20868:34;20848:18;;;20841:62;-1:-1:-1;;;20919:18:1;;;20912:34;20963:19;;30491:65:0;20588:400:1;30491:65:0;30569:39;30590:4;30596:2;30600:7;30569:20;:39::i;:::-;30673:29;30690:1;30694:7;30673:8;:29::i;:::-;-1:-1:-1;;;;;30715:15:0;;;;;;:9;:15;;;;;:20;;30734:1;;30715:15;:20;;30734:1;;30715:20;:::i;:::-;;;;-1:-1:-1;;;;;;;30746:13:0;;;;;;:9;:13;;;;;:18;;30763:1;;30746:13;:18;;30763:1;;30746:18;:::i;:::-;;;;-1:-1:-1;;30775:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;30775:21:0;-1:-1:-1;;;;;30775:21:0;;;;;;;;;30814:27;;30775:16;;30814:27;;;;;;;30271:578;;;:::o;42320:173::-;42395:6;;;-1:-1:-1;;;;;42412:17:0;;;-1:-1:-1;;;;;;42412:17:0;;;;;;;42445:40;;42395:6;;;42412:17;42395:6;;42445:40;;42376:16;;42445:40;42365:128;42320:173;:::o;27969:110::-;28045:26;28055:2;28059:7;28045:26;;;;;;;;;;;;:9;:26::i;26357:315::-;26514:28;26524:4;26530:2;26534:7;26514:9;:28::i;:::-;26561:48;26584:4;26590:2;26594:7;26603:5;26561:22;:48::i;:::-;26553:111;;;;-1:-1:-1;;;26553:111:0;;;;;;;:::i;43800:102::-;43860:13;43889:7;43882:14;;;;;:::i;7538:723::-;7594:13;7815:10;7811:53;;-1:-1:-1;;7842:10:0;;;;;;;;;;;;-1:-1:-1;;;7842:10:0;;;;;7538:723::o;7811:53::-;7889:5;7874:12;7930:78;7937:9;;7930:78;;7963:8;;;;:::i;:::-;;-1:-1:-1;7986:10:0;;-1:-1:-1;7994:2:0;7986:10;;:::i;:::-;;;7930:78;;;8018:19;8050:6;8040:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8040:17:0;;8018:39;;8068:154;8075:10;;8068:154;;8102:11;8112:1;8102:11;;:::i;:::-;;-1:-1:-1;8171:10:0;8179:2;8171:5;:10;:::i;:::-;8158:24;;:2;:24;:::i;:::-;8145:39;;8128:6;8135;8128:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8128:56:0;;;;;;;;-1:-1:-1;8199:11:0;8208:2;8199:11;;:::i;:::-;;;8068:154;;35781:589;-1:-1:-1;;;;;35987:18:0;;35983:187;;36022:40;36054:7;37197:10;:17;;37170:24;;;;:15;:24;;;;;:44;;;37225:24;;;;;;;;;;;;37093:164;36022:40;35983:187;;;36092:2;-1:-1:-1;;;;;36084:10:0;:4;-1:-1:-1;;;;;36084:10:0;;36080:90;;36111:47;36144:4;36150:7;36111:32;:47::i;:::-;-1:-1:-1;;;;;36184:16:0;;36180:183;;36217:45;36254:7;36217:36;:45::i;36180:183::-;36290:4;-1:-1:-1;;;;;36284:10:0;:2;-1:-1:-1;;;;;36284:10:0;;36280:83;;36311:40;36339:2;36343:7;36311:27;:40::i;28306:321::-;28436:18;28442:2;28446:7;28436:5;:18::i;:::-;28487:54;28518:1;28522:2;28526:7;28535:5;28487:22;:54::i;:::-;28465:154;;;;-1:-1:-1;;;28465:154:0;;;;;;;:::i;31706:799::-;31861:4;-1:-1:-1;;;;;31882:13:0;;10355:20;10403:8;31878:620;;31918:72;;-1:-1:-1;;;31918:72:0;;-1:-1:-1;;;;;31918:36:0;;;;;:72;;19666:10;;31969:4;;31975:7;;31984:5;;31918:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31918:72:0;;;;;;;;-1:-1:-1;;31918:72:0;;;;;;;;;;;;:::i;:::-;;;31914:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32160:13:0;;32156:272;;32203:60;;-1:-1:-1;;;32203:60:0;;;;;;;:::i;32156:272::-;32378:6;32372:13;32363:6;32359:2;32355:15;32348:38;31914:529;-1:-1:-1;;;;;;32041:51:0;-1:-1:-1;;;32041:51:0;;-1:-1:-1;32034:58:0;;31878:620;-1:-1:-1;32482:4:0;31706:799;;;;;;:::o;37884:988::-;38150:22;38200:1;38175:22;38192:4;38175:16;:22::i;:::-;:26;;;;:::i;:::-;38212:18;38233:26;;;:17;:26;;;;;;38150:51;;-1:-1:-1;38366:28:0;;;38362:328;;-1:-1:-1;;;;;38433:18:0;;38411:19;38433:18;;;:12;:18;;;;;;;;:34;;;;;;;;;38484:30;;;;;;:44;;;38601:30;;:17;:30;;;;;:43;;;38362:328;-1:-1:-1;38786:26:0;;;;:17;:26;;;;;;;;38779:33;;;-1:-1:-1;;;;;38830:18:0;;;;;:12;:18;;;;;:34;;;;;;;38823:41;37884:988::o;39167:1079::-;39445:10;:17;39420:22;;39445:21;;39465:1;;39445:21;:::i;:::-;39477:18;39498:24;;;:15;:24;;;;;;39871:10;:26;;39420:46;;-1:-1:-1;39498:24:0;;39420:46;;39871:26;;;;;;:::i;:::-;;;;;;;;;39849:48;;39935:11;39910:10;39921;39910:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;40015:28;;;:15;:28;;;;;;;:41;;;40187:24;;;;;40180:31;40222:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39238:1008;;;39167:1079;:::o;36671:221::-;36756:14;36773:20;36790:2;36773:16;:20::i;:::-;-1:-1:-1;;;;;36804:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;36849:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;36671:221:0:o;28963:382::-;-1:-1:-1;;;;;29043:16:0;;29035:61;;;;-1:-1:-1;;;29035:61:0;;22741:2:1;29035:61:0;;;22723:21:1;;;22760:18;;;22753:30;22819:34;22799:18;;;22792:62;22871:18;;29035:61:0;22539:356:1;29035:61:0;27050:4;27074:16;;;:7;:16;;;;;;-1:-1:-1;;;;;27074:16:0;:30;29107:58;;;;-1:-1:-1;;;29107:58:0;;23102:2:1;29107:58:0;;;23084:21:1;23141:2;23121:18;;;23114:30;23180;23160:18;;;23153:58;23228:18;;29107:58:0;22900:352:1;29107:58:0;29178:45;29207:1;29211:2;29215:7;29178:20;:45::i;:::-;-1:-1:-1;;;;;29236:13:0;;;;;;:9;:13;;;;;:18;;29253:1;;29236:13;:18;;29253:1;;29236:18;:::i;:::-;;;;-1:-1:-1;;29265:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;29265:21:0;-1:-1:-1;;;;;29265:21:0;;;;;;;;29304:33;;29265:16;;;29304:33;;29265:16;;29304:33;28963:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:160::-;657:20;;713:13;;706:21;696:32;;686:60;;742:1;739;732:12;686:60;592:160;;;:::o;757:180::-;813:6;866:2;854:9;845:7;841:23;837:32;834:52;;;882:1;879;872:12;834:52;905:26;921:9;905:26;:::i;942:258::-;1014:1;1024:113;1038:6;1035:1;1032:13;1024:113;;;1114:11;;;1108:18;1095:11;;;1088:39;1060:2;1053:10;1024:113;;;1155:6;1152:1;1149:13;1146:48;;;-1:-1:-1;;1190:1:1;1172:16;;1165:27;942:258::o;1205:::-;1247:3;1285:5;1279:12;1312:6;1307:3;1300:19;1328:63;1384:6;1377:4;1372:3;1368:14;1361:4;1354:5;1350:16;1328:63;:::i;:::-;1445:2;1424:15;-1:-1:-1;;1420:29:1;1411:39;;;;1452:4;1407:50;;1205:258;-1:-1:-1;;1205:258:1:o;1468:220::-;1617:2;1606:9;1599:21;1580:4;1637:45;1678:2;1667:9;1663:18;1655:6;1637:45;:::i;1693:180::-;1752:6;1805:2;1793:9;1784:7;1780:23;1776:32;1773:52;;;1821:1;1818;1811:12;1773:52;-1:-1:-1;1844:23:1;;1693:180;-1:-1:-1;1693:180:1:o;2086:173::-;2154:20;;-1:-1:-1;;;;;2203:31:1;;2193:42;;2183:70;;2249:1;2246;2239:12;2264:254;2332:6;2340;2393:2;2381:9;2372:7;2368:23;2364:32;2361:52;;;2409:1;2406;2399:12;2361:52;2432:29;2451:9;2432:29;:::i;:::-;2422:39;2508:2;2493:18;;;;2480:32;;-1:-1:-1;;;2264:254:1:o;2705:328::-;2782:6;2790;2798;2851:2;2839:9;2830:7;2826:23;2822:32;2819:52;;;2867:1;2864;2857:12;2819:52;2890:29;2909:9;2890:29;:::i;:::-;2880:39;;2938:38;2972:2;2961:9;2957:18;2938:38;:::i;:::-;2928:48;;3023:2;3012:9;3008:18;2995:32;2985:42;;2705:328;;;;;:::o;3038:186::-;3097:6;3150:2;3138:9;3129:7;3125:23;3121:32;3118:52;;;3166:1;3163;3156:12;3118:52;3189:29;3208:9;3189:29;:::i;3229:632::-;3400:2;3452:21;;;3522:13;;3425:18;;;3544:22;;;3371:4;;3400:2;3623:15;;;;3597:2;3582:18;;;3371:4;3666:169;3680:6;3677:1;3674:13;3666:169;;;3741:13;;3729:26;;3810:15;;;;3775:12;;;;3702:1;3695:9;3666:169;;;-1:-1:-1;3852:3:1;;3229:632;-1:-1:-1;;;;;;3229:632:1:o;3866:127::-;3927:10;3922:3;3918:20;3915:1;3908:31;3958:4;3955:1;3948:15;3982:4;3979:1;3972:15;3998:632;4063:5;4093:18;4134:2;4126:6;4123:14;4120:40;;;4140:18;;:::i;:::-;4215:2;4209:9;4183:2;4269:15;;-1:-1:-1;;4265:24:1;;;4291:2;4261:33;4257:42;4245:55;;;4315:18;;;4335:22;;;4312:46;4309:72;;;4361:18;;:::i;:::-;4401:10;4397:2;4390:22;4430:6;4421:15;;4460:6;4452;4445:22;4500:3;4491:6;4486:3;4482:16;4479:25;4476:45;;;4517:1;4514;4507:12;4476:45;4567:6;4562:3;4555:4;4547:6;4543:17;4530:44;4622:1;4615:4;4606:6;4598;4594:19;4590:30;4583:41;;;;3998:632;;;;;:::o;4635:451::-;4704:6;4757:2;4745:9;4736:7;4732:23;4728:32;4725:52;;;4773:1;4770;4763:12;4725:52;4813:9;4800:23;4846:18;4838:6;4835:30;4832:50;;;4878:1;4875;4868:12;4832:50;4901:22;;4954:4;4946:13;;4942:27;-1:-1:-1;4932:55:1;;4983:1;4980;4973:12;4932:55;5006:74;5072:7;5067:2;5054:16;5049:2;5045;5041:11;5006:74;:::i;5091:689::-;5183:6;5191;5199;5252:2;5240:9;5231:7;5227:23;5223:32;5220:52;;;5268:1;5265;5258:12;5220:52;5308:9;5295:23;5337:18;5378:2;5370:6;5367:14;5364:34;;;5394:1;5391;5384:12;5364:34;5432:6;5421:9;5417:22;5407:32;;5477:7;5470:4;5466:2;5462:13;5458:27;5448:55;;5499:1;5496;5489:12;5448:55;5539:2;5526:16;5565:2;5557:6;5554:14;5551:34;;;5581:1;5578;5571:12;5551:34;5636:7;5629:4;5619:6;5616:1;5612:14;5608:2;5604:23;5600:34;5597:47;5594:67;;;5657:1;5654;5647:12;5594:67;5688:4;5680:13;;;;-1:-1:-1;5712:6:1;-1:-1:-1;5737:37:1;;5753:20;;;-1:-1:-1;5737:37:1;:::i;:::-;5727:47;;5091:689;;;;;:::o;5785:254::-;5850:6;5858;5911:2;5899:9;5890:7;5886:23;5882:32;5879:52;;;5927:1;5924;5917:12;5879:52;5950:29;5969:9;5950:29;:::i;:::-;5940:39;;5998:35;6029:2;6018:9;6014:18;5998:35;:::i;:::-;5988:45;;5785:254;;;;;:::o;6044:667::-;6139:6;6147;6155;6163;6216:3;6204:9;6195:7;6191:23;6187:33;6184:53;;;6233:1;6230;6223:12;6184:53;6256:29;6275:9;6256:29;:::i;:::-;6246:39;;6304:38;6338:2;6327:9;6323:18;6304:38;:::i;:::-;6294:48;;6389:2;6378:9;6374:18;6361:32;6351:42;;6444:2;6433:9;6429:18;6416:32;6471:18;6463:6;6460:30;6457:50;;;6503:1;6500;6493:12;6457:50;6526:22;;6579:4;6571:13;;6567:27;-1:-1:-1;6557:55:1;;6608:1;6605;6598:12;6557:55;6631:74;6697:7;6692:2;6679:16;6674:2;6670;6666:11;6631:74;:::i;:::-;6621:84;;;6044:667;;;;;;;:::o;6716:254::-;6784:6;6792;6845:2;6833:9;6824:7;6820:23;6816:32;6813:52;;;6861:1;6858;6851:12;6813:52;6897:9;6884:23;6874:33;;6926:38;6960:2;6949:9;6945:18;6926:38;:::i;6975:260::-;7043:6;7051;7104:2;7092:9;7083:7;7079:23;7075:32;7072:52;;;7120:1;7117;7110:12;7072:52;7143:29;7162:9;7143:29;:::i;:::-;7133:39;;7191:38;7225:2;7214:9;7210:18;7191:38;:::i;7240:356::-;7442:2;7424:21;;;7461:18;;;7454:30;7520:34;7515:2;7500:18;;7493:62;7587:2;7572:18;;7240:356::o;7601:380::-;7680:1;7676:12;;;;7723;;;7744:61;;7798:4;7790:6;7786:17;7776:27;;7744:61;7851:2;7843:6;7840:14;7820:18;7817:38;7814:161;;;7897:10;7892:3;7888:20;7885:1;7878:31;7932:4;7929:1;7922:15;7960:4;7957:1;7950:15;7814:161;;7601:380;;;:::o;9580:413::-;9782:2;9764:21;;;9821:2;9801:18;;;9794:30;9860:34;9855:2;9840:18;;9833:62;-1:-1:-1;;;9926:2:1;9911:18;;9904:47;9983:3;9968:19;;9580:413::o;10620:127::-;10681:10;10676:3;10672:20;10669:1;10662:31;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10752:127;10813:10;10808:3;10804:20;10801:1;10794:31;10844:4;10841:1;10834:15;10868:4;10865:1;10858:15;10884:135;10923:3;-1:-1:-1;;10944:17:1;;10941:43;;;10964:18;;:::i;:::-;-1:-1:-1;11011:1:1;11000:13;;10884:135::o;14142:128::-;14182:3;14213:1;14209:6;14206:1;14203:13;14200:39;;;14219:18;;:::i;:::-;-1:-1:-1;14255:9:1;;14142:128::o;15741:168::-;15781:7;15847:1;15843;15839:6;15835:14;15832:1;15829:21;15824:1;15817:9;15810:17;15806:45;15803:71;;;15854:18;;:::i;:::-;-1:-1:-1;15894:9:1;;15741:168::o;16321:127::-;16382:10;16377:3;16373:20;16370:1;16363:31;16413:4;16410:1;16403:15;16437:4;16434:1;16427:15;16453:120;16493:1;16519;16509:35;;16524:18;;:::i;:::-;-1:-1:-1;16558:9:1;;16453:120::o;17826:1527::-;18050:3;18088:6;18082:13;18114:4;18127:51;18171:6;18166:3;18161:2;18153:6;18149:15;18127:51;:::i;:::-;18241:13;;18200:16;;;;18263:55;18241:13;18200:16;18285:15;;;18263:55;:::i;:::-;18407:13;;18340:20;;;18380:1;;18467;18489:18;;;;18542;;;;18569:93;;18647:4;18637:8;18633:19;18621:31;;18569:93;18710:2;18700:8;18697:16;18677:18;18674:40;18671:167;;;-1:-1:-1;;;18737:33:1;;18793:4;18790:1;18783:15;18823:4;18744:3;18811:17;18671:167;18854:18;18881:110;;;;19005:1;19000:328;;;;18847:481;;18881:110;-1:-1:-1;;18916:24:1;;18902:39;;18961:20;;;;-1:-1:-1;18881:110:1;;19000:328;17773:1;17766:14;;;17810:4;17797:18;;19095:1;19109:169;19123:8;19120:1;19117:15;19109:169;;;19205:14;;19190:13;;;19183:37;19248:16;;;;19140:10;;19109:169;;;19113:3;;19309:8;19302:5;19298:20;19291:27;;18847:481;-1:-1:-1;19344:3:1;;17826:1527;-1:-1:-1;;;;;;;;;;;17826:1527:1:o;20993:125::-;21033:4;21061:1;21058;21055:8;21052:34;;;21066:18;;:::i;:::-;-1:-1:-1;21103:9:1;;20993:125::o;21123:414::-;21325:2;21307:21;;;21364:2;21344:18;;;21337:30;21403:34;21398:2;21383:18;;21376:62;-1:-1:-1;;;21469:2:1;21454:18;;21447:48;21527:3;21512:19;;21123:414::o;21542:112::-;21574:1;21600;21590:35;;21605:18;;:::i;:::-;-1:-1:-1;21639:9:1;;21542:112::o;21659:489::-;-1:-1:-1;;;;;21928:15:1;;;21910:34;;21980:15;;21975:2;21960:18;;21953:43;22027:2;22012:18;;22005:34;;;22075:3;22070:2;22055:18;;22048:31;;;21853:4;;22096:46;;22122:19;;22114:6;22096:46;:::i;:::-;22088:54;21659:489;-1:-1:-1;;;;;;21659:489:1:o;22153:249::-;22222:6;22275:2;22263:9;22254:7;22250:23;22246:32;22243:52;;;22291:1;22288;22281:12;22243:52;22323:9;22317:16;22342:30;22366:5;22342:30;:::i;22407:127::-;22468:10;22463:3;22459:20;22456:1;22449:31;22499:4;22496:1;22489:15;22523:4;22520:1;22513:15
Swarm Source
ipfs://ef7263dab1ddff1f3f4aa7a44ea1f746b54ec304b80bf687985c8ee8e51a8507
Loading...
Loading
Loading...
Loading
[ 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.