Overview
TokenID
106
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:
Whoami
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT // https://t3rm.dev pragma solidity ^0.8.0; import "./ERC721Enumerable.sol"; import "./Ownable.sol"; import "./Counters.sol"; contract Whoami is ERC721Enumerable, Ownable { /** * Token IDs counter. * * Provides an auto-incremented ID for each token minted. */ using Counters for Counters.Counter; Counters.Counter private _tokenIDs; /** * Launch block number. * * Prevents minting until the platform launches. */ uint private _launchBlock; /** * Mint fee * * Defines the price required to register a package. */ uint private _mintFee; /** * Mint fee floor * * Defines the lowest price for the minting fee. */ uint private _mintFeeFloor; /** * List mint at. * * Internally stores the block numbers for the last mint event. * Used to calculate the block delta for price adjustments. */ uint private _lastMintAt; /** * Update frequency. * * Defines the frequency for the mint fee adjustment. * * Example: A value of 500 increases the _mintFee if a new token is * minted with fewer than 500 blocks since the previous minting, and * decreases the value if more than 500 blocks have been created. * * This is used to optimize prices to achieve a steady flow of dev. */ uint private _updateFreq; /** * Update amount. * * Defines the divisor used in the mint fee rebalancing update. * * Example: A value of 20 will increase or decrease the _mintFee * by 5 percent. */ uint private _updateAmt; /** * Total identities. * * Defines the total number of available identities to be * recovered by the system. * */ uint private _totalIdentities; /** * Constructor to deploy the contract. * * Sets the initial settings for the contract. */ constructor( string memory _name, string memory _symbol, uint __mintFee, uint __mintFeeFloor, uint __updateFreq, uint __updatAmt, uint __launchBlock, uint __totalIdentities ) ERC721(_name, _symbol) { _mintFee = __mintFee; _mintFeeFloor = __mintFeeFloor; _updateFreq = __updateFreq; _updateAmt = __updatAmt; _launchBlock = __launchBlock; _totalIdentities = __totalIdentities; } /** * Contract metadata URI * * Provides the URI for the contract metadata. */ function contractURI() public view returns (string memory) { return string(abi.encodePacked(_baseURI(), "contract")); } /** * Override for the OpenZeppelin ERC721 baseURI function. * * All tokenURIs will use a t3rm.dev whoami base. */ function _baseURI() internal view virtual override returns (string memory) { return "https://t3rm.dev/whoami/"; } /** * Get the launch block. * * Returns the block number when tokens can be minted. */ function launchBlock() public view returns (uint) { return _launchBlock; } /** * Total identities. * * Returns the maximum allowed identities. */ function totalIdentities() public view returns (uint) { return _totalIdentities; } /** * Get the current mint fee. * * Returns the current transfer amount required to mint * a new token. */ function mintFee() public view returns (uint) { return _mintFee; } /** * Get the current mint fee floor price. * * Returns the lowest price for a token minting. */ function mintFeeFloor() public view returns (uint) { return _mintFeeFloor; } /** * Update the mint fee. * * Adjusts the mint fee based on the block delta between * the last token minted. */ function _updateMintFee() private { uint blockDelta = block.number - _lastMintAt; blockDelta > _updateFreq ? _mintFee -= _mintFee/_updateAmt : _mintFee += _mintFee/_updateAmt; if (_mintFee < _mintFeeFloor) _mintFee = _mintFeeFloor; } /** * Mint a token to an address. * * Requires payment of _mintFee. */ function mintTo(address _receiver) public payable returns (uint) { require(block.number >= _launchBlock, "Platform hasn't launched."); require(msg.value >= _mintFee, "Requires minimum fee."); require(totalSupply() < _totalIdentities, "Max supply reached."); payable(owner()).transfer(msg.value); _updateMintFee(); _lastMintAt = block.number; _tokenIDs.increment(); uint tokenId = _tokenIDs.current(); _mint(_receiver, tokenId); return tokenId; } /** * Mint a token to the sender. * * Requires payment of _mintFee. */ function mint() public payable returns (uint) { return mintTo(msg.sender); } /** * Admin function: Update mint fee. * * Updates the _mintFee value. */ function adminUpdateMintFee(uint __mintFee) onlyOwner public { _mintFee = __mintFee; } /** * Admin function: Update mint fee floor. * * Updates the _mintFeeFloor value. */ function adminUpdateMintFeeFloor(uint __mintFeeFloor) onlyOwner public { _mintFeeFloor = __mintFeeFloor; if (_mintFeeFloor > _mintFee) _mintFee = _mintFeeFloor; } /** * Admin function: Update total identities. * * Updates the _mintFeeFloor value. */ function adminUpdateTotalIdentities(uint __totalIdentities) onlyOwner public { _totalIdentities = __totalIdentities; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.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 {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.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(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC721.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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.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); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"__mintFee","type":"uint256"},{"internalType":"uint256","name":"__mintFeeFloor","type":"uint256"},{"internalType":"uint256","name":"__updateFreq","type":"uint256"},{"internalType":"uint256","name":"__updatAmt","type":"uint256"},{"internalType":"uint256","name":"__launchBlock","type":"uint256"},{"internalType":"uint256","name":"__totalIdentities","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"__mintFee","type":"uint256"}],"name":"adminUpdateMintFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__mintFeeFloor","type":"uint256"}],"name":"adminUpdateMintFeeFloor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__totalIdentities","type":"uint256"}],"name":"adminUpdateTotalIdentities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFeeFloor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"totalIdentities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620040bf380380620040bf8339818101604052810190620000379190620002d8565b878781600090805190602001906200005192919062000193565b5080600190805190602001906200006a92919062000193565b5050506200008d62000081620000c560201b60201c565b620000cd60201b60201c565b85600d8190555084600e81905550836010819055508260118190555081600c8190555080601281905550505050505050505062000587565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001a1906200047e565b90600052602060002090601f016020900481019282620001c5576000855562000211565b82601f10620001e057805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000210578251825591602001919060010190620001f3565b5b50905062000220919062000224565b5090565b5b808211156200023f57600081600090555060010162000225565b5090565b60006200025a620002548462000408565b620003df565b9050828152602081018484840111156200027957620002786200054d565b5b6200028684828562000448565b509392505050565b600082601f830112620002a657620002a562000548565b5b8151620002b884826020860162000243565b91505092915050565b600081519050620002d2816200056d565b92915050565b600080600080600080600080610100898b031215620002fc57620002fb62000557565b5b600089015167ffffffffffffffff8111156200031d576200031c62000552565b5b6200032b8b828c016200028e565b985050602089015167ffffffffffffffff8111156200034f576200034e62000552565b5b6200035d8b828c016200028e565b9750506040620003708b828c01620002c1565b9650506060620003838b828c01620002c1565b9550506080620003968b828c01620002c1565b94505060a0620003a98b828c01620002c1565b93505060c0620003bc8b828c01620002c1565b92505060e0620003cf8b828c01620002c1565b9150509295985092959890939650565b6000620003eb620003fe565b9050620003f98282620004b4565b919050565b6000604051905090565b600067ffffffffffffffff82111562000426576200042562000519565b5b62000431826200055c565b9050602081019050919050565b6000819050919050565b60005b83811015620004685780820151818401526020810190506200044b565b8381111562000478576000848401525b50505050565b600060028204905060018216806200049757607f821691505b60208210811415620004ae57620004ad620004ea565b5b50919050565b620004bf826200055c565b810181811067ffffffffffffffff82111715620004e157620004e062000519565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b62000578816200043e565b81146200058457600080fd5b50565b613b2880620005976000396000f3fe6080604052600436106101c25760003560e01c806370a08231116100f7578063c87b56dd11610095578063e8a3d48511610064578063e8a3d4851461064c578063e985e9c514610677578063f2fde38b146106b4578063f5c5987b146106dd576101c2565b8063c87b56dd14610592578063d00efb2f146105cf578063e35fe037146105fa578063e7450a4a14610623576101c2565b80638da5cb5b116100d15780638da5cb5b146104ea57806395d89b4114610515578063a22cb46514610540578063b88d4fde14610569576101c2565b806370a0823114610466578063715018a6146104a3578063755edd17146104ba576101c2565b80631ef727781161016457806342842e0e1161013e57806342842e0e1461039a5780634f6ccce7146103c35780635bb98910146104005780636352211e14610429576101c2565b80631ef727781461030957806323b872dd146103345780632f745c591461035d576101c2565b8063095ea7b3116101a0578063095ea7b31461026c5780631249c58b1461029557806313966db5146102b357806318160ddd146102de576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906128d8565b610708565b6040516101fb9190612dde565b60405180910390f35b34801561021057600080fd5b50610219610782565b6040516102269190612df9565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612932565b610814565b6040516102639190612d77565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612898565b610899565b005b61029d6109b1565b6040516102aa91906130bb565b60405180910390f35b3480156102bf57600080fd5b506102c86109c1565b6040516102d591906130bb565b60405180910390f35b3480156102ea57600080fd5b506102f36109cb565b60405161030091906130bb565b60405180910390f35b34801561031557600080fd5b5061031e6109d8565b60405161032b91906130bb565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190612782565b6109e2565b005b34801561036957600080fd5b50610384600480360381019061037f9190612898565b610a42565b60405161039191906130bb565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190612782565b610ae7565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190612932565b610b07565b6040516103f791906130bb565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190612932565b610b78565b005b34801561043557600080fd5b50610450600480360381019061044b9190612932565b610bfe565b60405161045d9190612d77565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190612715565b610cb0565b60405161049a91906130bb565b60405180910390f35b3480156104af57600080fd5b506104b8610d68565b005b6104d460048036038101906104cf9190612715565b610df0565b6040516104e191906130bb565b60405180910390f35b3480156104f657600080fd5b506104ff610f4f565b60405161050c9190612d77565b60405180910390f35b34801561052157600080fd5b5061052a610f79565b6040516105379190612df9565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612858565b61100b565b005b34801561057557600080fd5b50610590600480360381019061058b91906127d5565b61118c565b005b34801561059e57600080fd5b506105b960048036038101906105b49190612932565b6111ee565b6040516105c69190612df9565b60405180910390f35b3480156105db57600080fd5b506105e4611295565b6040516105f191906130bb565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c9190612932565b61129f565b005b34801561062f57600080fd5b5061064a60048036038101906106459190612932565b611325565b005b34801561065857600080fd5b506106616113c1565b60405161066e9190612df9565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190612742565b6113ef565b6040516106ab9190612dde565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190612715565b611483565b005b3480156106e957600080fd5b506106f261157b565b6040516106ff91906130bb565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077b575061077a82611585565b5b9050919050565b606060008054610791906132e0565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd906132e0565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b600061081f82611667565b61085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085590612fbb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a482610bfe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9061305b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109346116d3565b73ffffffffffffffffffffffffffffffffffffffff16148061096357506109628161095d6116d3565b6113ef565b5b6109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990612f1b565b60405180910390fd5b6109ac83836116db565b505050565b60006109bc33610df0565b905090565b6000600d54905090565b6000600880549050905090565b6000600e54905090565b6109f36109ed6116d3565b82611794565b610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a299061307b565b60405180910390fd5b610a3d838383611872565b505050565b6000610a4d83610cb0565b8210610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590612e1b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b028383836040518060200160405280600081525061118c565b505050565b6000610b116109cb565b8210610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b499061309b565b60405180910390fd5b60088281548110610b6657610b65613479565b5b90600052602060002001549050919050565b610b806116d3565b73ffffffffffffffffffffffffffffffffffffffff16610b9e610f4f565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90612fdb565b60405180910390fd5b80600d8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90612f5b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890612f3b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d706116d3565b73ffffffffffffffffffffffffffffffffffffffff16610d8e610f4f565b73ffffffffffffffffffffffffffffffffffffffff1614610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90612fdb565b60405180910390fd5b610dee6000611ace565b565b6000600c54431015610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90612f9b565b60405180910390fd5b600d54341015610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390612e9b565b60405180910390fd5b601254610e876109cb565b10610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe9061303b565b60405180910390fd5b610ecf610f4f565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610f14573d6000803e3d6000fd5b50610f1d611b94565b43600f81905550610f2e600b611c1d565b6000610f3a600b611c33565b9050610f468382611c41565b80915050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f88906132e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb4906132e0565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b5050505050905090565b6110136116d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890612edb565b60405180910390fd5b806005600061108e6116d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661113b6116d3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111809190612dde565b60405180910390a35050565b61119d6111976116d3565b83611794565b6111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d39061307b565b60405180910390fd5b6111e884848484611e0f565b50505050565b60606111f982611667565b611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f9061301b565b60405180910390fd5b6000611242611e6b565b90506000815111611262576040518060200160405280600081525061128d565b8061126c84611ea8565b60405160200161127d929190612d31565b6040516020818303038152906040525b915050919050565b6000600c54905090565b6112a76116d3565b73ffffffffffffffffffffffffffffffffffffffff166112c5610f4f565b73ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290612fdb565b60405180910390fd5b8060128190555050565b61132d6116d3565b73ffffffffffffffffffffffffffffffffffffffff1661134b610f4f565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890612fdb565b60405180910390fd5b80600e81905550600d54600e5411156113be57600e54600d819055505b50565b60606113cb611e6b565b6040516020016113db9190612d55565b604051602081830303815290604052905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61148b6116d3565b73ffffffffffffffffffffffffffffffffffffffff166114a9610f4f565b73ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690612fdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690612e5b565b60405180910390fd5b61157881611ace565b50565b6000601254905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061165057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611660575061165f82612009565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661174e83610bfe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061179f82611667565b6117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590612efb565b60405180910390fd5b60006117e983610bfe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061185857508373ffffffffffffffffffffffffffffffffffffffff1661184084610814565b73ffffffffffffffffffffffffffffffffffffffff16145b80611869575061186881856113ef565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661189282610bfe565b73ffffffffffffffffffffffffffffffffffffffff16146118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90612ffb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90612ebb565b60405180910390fd5b611963838383612073565b61196e6000826116db565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119be91906131f6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a15919061316f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600f5443611ba491906131f6565b90506010548111611bdb57601154600d54611bbf91906131c5565b600d6000828254611bd0919061316f565b925050819055611c03565b601154600d54611beb91906131c5565b600d6000828254611bfc91906131f6565b9250508190555b50600e54600d541015611c1a57600e54600d819055505b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890612f7b565b60405180910390fd5b611cba81611667565b15611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf190612e7b565b60405180910390fd5b611d0660008383612073565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d56919061316f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611e1a848484611872565b611e2684848484612187565b611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90612e3b565b60405180910390fd5b50505050565b60606040518060400160405280601881526020017f68747470733a2f2f7433726d2e6465762f77686f616d692f0000000000000000815250905090565b60606000821415611ef0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612004565b600082905060005b60008214611f22578080611f0b90613343565b915050600a82611f1b91906131c5565b9150611ef8565b60008167ffffffffffffffff811115611f3e57611f3d6134a8565b5b6040519080825280601f01601f191660200182016040528015611f705781602001600182028036833780820191505090505b5090505b60008514611ffd57600182611f8991906131f6565b9150600a85611f98919061338c565b6030611fa4919061316f565b60f81b818381518110611fba57611fb9613479565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ff691906131c5565b9450611f74565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61207e83838361231e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120c1576120bc81612323565b612100565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120ff576120fe838261236c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121435761213e816124d9565b612182565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121815761218082826125aa565b5b5b505050565b60006121a88473ffffffffffffffffffffffffffffffffffffffff16612629565b15612311578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121d16116d3565b8786866040518563ffffffff1660e01b81526004016121f39493929190612d92565b602060405180830381600087803b15801561220d57600080fd5b505af192505050801561223e57506040513d601f19601f8201168201806040525081019061223b9190612905565b60015b6122c1573d806000811461226e576040519150601f19603f3d011682016040523d82523d6000602084013e612273565b606091505b506000815114156122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b090612e3b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612316565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161237984610cb0565b61238391906131f6565b9050600060076000848152602001908152602001600020549050818114612468576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506124ed91906131f6565b905060006009600084815260200190815260200160002054905060006008838154811061251d5761251c613479565b5b90600052602060002001549050806008838154811061253f5761253e613479565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061258e5761258d61344a565b5b6001900381819060005260206000200160009055905550505050565b60006125b583610cb0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600061264f61264a846130fb565b6130d6565b90508281526020810184848401111561266b5761266a6134dc565b5b61267684828561329e565b509392505050565b60008135905061268d81613a96565b92915050565b6000813590506126a281613aad565b92915050565b6000813590506126b781613ac4565b92915050565b6000815190506126cc81613ac4565b92915050565b600082601f8301126126e7576126e66134d7565b5b81356126f784826020860161263c565b91505092915050565b60008135905061270f81613adb565b92915050565b60006020828403121561272b5761272a6134e6565b5b60006127398482850161267e565b91505092915050565b60008060408385031215612759576127586134e6565b5b60006127678582860161267e565b92505060206127788582860161267e565b9150509250929050565b60008060006060848603121561279b5761279a6134e6565b5b60006127a98682870161267e565b93505060206127ba8682870161267e565b92505060406127cb86828701612700565b9150509250925092565b600080600080608085870312156127ef576127ee6134e6565b5b60006127fd8782880161267e565b945050602061280e8782880161267e565b935050604061281f87828801612700565b925050606085013567ffffffffffffffff8111156128405761283f6134e1565b5b61284c878288016126d2565b91505092959194509250565b6000806040838503121561286f5761286e6134e6565b5b600061287d8582860161267e565b925050602061288e85828601612693565b9150509250929050565b600080604083850312156128af576128ae6134e6565b5b60006128bd8582860161267e565b92505060206128ce85828601612700565b9150509250929050565b6000602082840312156128ee576128ed6134e6565b5b60006128fc848285016126a8565b91505092915050565b60006020828403121561291b5761291a6134e6565b5b6000612929848285016126bd565b91505092915050565b600060208284031215612948576129476134e6565b5b600061295684828501612700565b91505092915050565b6129688161322a565b82525050565b6129778161323c565b82525050565b60006129888261312c565b6129928185613142565b93506129a28185602086016132ad565b6129ab816134eb565b840191505092915050565b60006129c182613137565b6129cb8185613153565b93506129db8185602086016132ad565b6129e4816134eb565b840191505092915050565b60006129fa82613137565b612a048185613164565b9350612a148185602086016132ad565b80840191505092915050565b6000612a2d602b83613153565b9150612a38826134fc565b604082019050919050565b6000612a50603283613153565b9150612a5b8261354b565b604082019050919050565b6000612a73602683613153565b9150612a7e8261359a565b604082019050919050565b6000612a96601c83613153565b9150612aa1826135e9565b602082019050919050565b6000612ab9601583613153565b9150612ac482613612565b602082019050919050565b6000612adc602483613153565b9150612ae78261363b565b604082019050919050565b6000612aff601983613153565b9150612b0a8261368a565b602082019050919050565b6000612b22602c83613153565b9150612b2d826136b3565b604082019050919050565b6000612b45603883613153565b9150612b5082613702565b604082019050919050565b6000612b68602a83613153565b9150612b7382613751565b604082019050919050565b6000612b8b602983613153565b9150612b96826137a0565b604082019050919050565b6000612bae600883613164565b9150612bb9826137ef565b600882019050919050565b6000612bd1602083613153565b9150612bdc82613818565b602082019050919050565b6000612bf4601983613153565b9150612bff82613841565b602082019050919050565b6000612c17602c83613153565b9150612c228261386a565b604082019050919050565b6000612c3a602083613153565b9150612c45826138b9565b602082019050919050565b6000612c5d602983613153565b9150612c68826138e2565b604082019050919050565b6000612c80602f83613153565b9150612c8b82613931565b604082019050919050565b6000612ca3601383613153565b9150612cae82613980565b602082019050919050565b6000612cc6602183613153565b9150612cd1826139a9565b604082019050919050565b6000612ce9603183613153565b9150612cf4826139f8565b604082019050919050565b6000612d0c602c83613153565b9150612d1782613a47565b604082019050919050565b612d2b81613294565b82525050565b6000612d3d82856129ef565b9150612d4982846129ef565b91508190509392505050565b6000612d6182846129ef565b9150612d6c82612ba1565b915081905092915050565b6000602082019050612d8c600083018461295f565b92915050565b6000608082019050612da7600083018761295f565b612db4602083018661295f565b612dc16040830185612d22565b8181036060830152612dd3818461297d565b905095945050505050565b6000602082019050612df3600083018461296e565b92915050565b60006020820190508181036000830152612e1381846129b6565b905092915050565b60006020820190508181036000830152612e3481612a20565b9050919050565b60006020820190508181036000830152612e5481612a43565b9050919050565b60006020820190508181036000830152612e7481612a66565b9050919050565b60006020820190508181036000830152612e9481612a89565b9050919050565b60006020820190508181036000830152612eb481612aac565b9050919050565b60006020820190508181036000830152612ed481612acf565b9050919050565b60006020820190508181036000830152612ef481612af2565b9050919050565b60006020820190508181036000830152612f1481612b15565b9050919050565b60006020820190508181036000830152612f3481612b38565b9050919050565b60006020820190508181036000830152612f5481612b5b565b9050919050565b60006020820190508181036000830152612f7481612b7e565b9050919050565b60006020820190508181036000830152612f9481612bc4565b9050919050565b60006020820190508181036000830152612fb481612be7565b9050919050565b60006020820190508181036000830152612fd481612c0a565b9050919050565b60006020820190508181036000830152612ff481612c2d565b9050919050565b6000602082019050818103600083015261301481612c50565b9050919050565b6000602082019050818103600083015261303481612c73565b9050919050565b6000602082019050818103600083015261305481612c96565b9050919050565b6000602082019050818103600083015261307481612cb9565b9050919050565b6000602082019050818103600083015261309481612cdc565b9050919050565b600060208201905081810360008301526130b481612cff565b9050919050565b60006020820190506130d06000830184612d22565b92915050565b60006130e06130f1565b90506130ec8282613312565b919050565b6000604051905090565b600067ffffffffffffffff821115613116576131156134a8565b5b61311f826134eb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061317a82613294565b915061318583613294565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131ba576131b96133bd565b5b828201905092915050565b60006131d082613294565b91506131db83613294565b9250826131eb576131ea6133ec565b5b828204905092915050565b600061320182613294565b915061320c83613294565b92508282101561321f5761321e6133bd565b5b828203905092915050565b600061323582613274565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156132cb5780820151818401526020810190506132b0565b838111156132da576000848401525b50505050565b600060028204905060018216806132f857607f821691505b6020821081141561330c5761330b61341b565b5b50919050565b61331b826134eb565b810181811067ffffffffffffffff8211171561333a576133396134a8565b5b80604052505050565b600061334e82613294565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613381576133806133bd565b5b600182019050919050565b600061339782613294565b91506133a283613294565b9250826133b2576133b16133ec565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5265717569726573206d696e696d756d206665652e0000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f636f6e7472616374000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f506c6174666f726d206861736e2774206c61756e636865642e00000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d617820737570706c7920726561636865642e00000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613a9f8161322a565b8114613aaa57600080fd5b50565b613ab68161323c565b8114613ac157600080fd5b50565b613acd81613248565b8114613ad857600080fd5b50565b613ae481613294565b8114613aef57600080fd5b5056fea264697066735822122065a39091fb8ef1b64feab6d4c196f404f7246b963fb474a9815808c334f4b61f64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000258689ac70a8000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000c8d5cc0000000000000000000000000000000000000000000000000000000000000539000000000000000000000000000000000000000000000000000000000000000677686f616d690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000677686f616d690000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101c25760003560e01c806370a08231116100f7578063c87b56dd11610095578063e8a3d48511610064578063e8a3d4851461064c578063e985e9c514610677578063f2fde38b146106b4578063f5c5987b146106dd576101c2565b8063c87b56dd14610592578063d00efb2f146105cf578063e35fe037146105fa578063e7450a4a14610623576101c2565b80638da5cb5b116100d15780638da5cb5b146104ea57806395d89b4114610515578063a22cb46514610540578063b88d4fde14610569576101c2565b806370a0823114610466578063715018a6146104a3578063755edd17146104ba576101c2565b80631ef727781161016457806342842e0e1161013e57806342842e0e1461039a5780634f6ccce7146103c35780635bb98910146104005780636352211e14610429576101c2565b80631ef727781461030957806323b872dd146103345780632f745c591461035d576101c2565b8063095ea7b3116101a0578063095ea7b31461026c5780631249c58b1461029557806313966db5146102b357806318160ddd146102de576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906128d8565b610708565b6040516101fb9190612dde565b60405180910390f35b34801561021057600080fd5b50610219610782565b6040516102269190612df9565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612932565b610814565b6040516102639190612d77565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612898565b610899565b005b61029d6109b1565b6040516102aa91906130bb565b60405180910390f35b3480156102bf57600080fd5b506102c86109c1565b6040516102d591906130bb565b60405180910390f35b3480156102ea57600080fd5b506102f36109cb565b60405161030091906130bb565b60405180910390f35b34801561031557600080fd5b5061031e6109d8565b60405161032b91906130bb565b60405180910390f35b34801561034057600080fd5b5061035b60048036038101906103569190612782565b6109e2565b005b34801561036957600080fd5b50610384600480360381019061037f9190612898565b610a42565b60405161039191906130bb565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190612782565b610ae7565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190612932565b610b07565b6040516103f791906130bb565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190612932565b610b78565b005b34801561043557600080fd5b50610450600480360381019061044b9190612932565b610bfe565b60405161045d9190612d77565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190612715565b610cb0565b60405161049a91906130bb565b60405180910390f35b3480156104af57600080fd5b506104b8610d68565b005b6104d460048036038101906104cf9190612715565b610df0565b6040516104e191906130bb565b60405180910390f35b3480156104f657600080fd5b506104ff610f4f565b60405161050c9190612d77565b60405180910390f35b34801561052157600080fd5b5061052a610f79565b6040516105379190612df9565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190612858565b61100b565b005b34801561057557600080fd5b50610590600480360381019061058b91906127d5565b61118c565b005b34801561059e57600080fd5b506105b960048036038101906105b49190612932565b6111ee565b6040516105c69190612df9565b60405180910390f35b3480156105db57600080fd5b506105e4611295565b6040516105f191906130bb565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c9190612932565b61129f565b005b34801561062f57600080fd5b5061064a60048036038101906106459190612932565b611325565b005b34801561065857600080fd5b506106616113c1565b60405161066e9190612df9565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190612742565b6113ef565b6040516106ab9190612dde565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190612715565b611483565b005b3480156106e957600080fd5b506106f261157b565b6040516106ff91906130bb565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061077b575061077a82611585565b5b9050919050565b606060008054610791906132e0565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd906132e0565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b600061081f82611667565b61085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085590612fbb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108a482610bfe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9061305b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109346116d3565b73ffffffffffffffffffffffffffffffffffffffff16148061096357506109628161095d6116d3565b6113ef565b5b6109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990612f1b565b60405180910390fd5b6109ac83836116db565b505050565b60006109bc33610df0565b905090565b6000600d54905090565b6000600880549050905090565b6000600e54905090565b6109f36109ed6116d3565b82611794565b610a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a299061307b565b60405180910390fd5b610a3d838383611872565b505050565b6000610a4d83610cb0565b8210610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590612e1b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b028383836040518060200160405280600081525061118c565b505050565b6000610b116109cb565b8210610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b499061309b565b60405180910390fd5b60088281548110610b6657610b65613479565b5b90600052602060002001549050919050565b610b806116d3565b73ffffffffffffffffffffffffffffffffffffffff16610b9e610f4f565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90612fdb565b60405180910390fd5b80600d8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90612f5b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890612f3b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d706116d3565b73ffffffffffffffffffffffffffffffffffffffff16610d8e610f4f565b73ffffffffffffffffffffffffffffffffffffffff1614610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90612fdb565b60405180910390fd5b610dee6000611ace565b565b6000600c54431015610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90612f9b565b60405180910390fd5b600d54341015610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390612e9b565b60405180910390fd5b601254610e876109cb565b10610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe9061303b565b60405180910390fd5b610ecf610f4f565b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610f14573d6000803e3d6000fd5b50610f1d611b94565b43600f81905550610f2e600b611c1d565b6000610f3a600b611c33565b9050610f468382611c41565b80915050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610f88906132e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb4906132e0565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b5050505050905090565b6110136116d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107890612edb565b60405180910390fd5b806005600061108e6116d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661113b6116d3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111809190612dde565b60405180910390a35050565b61119d6111976116d3565b83611794565b6111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d39061307b565b60405180910390fd5b6111e884848484611e0f565b50505050565b60606111f982611667565b611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f9061301b565b60405180910390fd5b6000611242611e6b565b90506000815111611262576040518060200160405280600081525061128d565b8061126c84611ea8565b60405160200161127d929190612d31565b6040516020818303038152906040525b915050919050565b6000600c54905090565b6112a76116d3565b73ffffffffffffffffffffffffffffffffffffffff166112c5610f4f565b73ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290612fdb565b60405180910390fd5b8060128190555050565b61132d6116d3565b73ffffffffffffffffffffffffffffffffffffffff1661134b610f4f565b73ffffffffffffffffffffffffffffffffffffffff16146113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890612fdb565b60405180910390fd5b80600e81905550600d54600e5411156113be57600e54600d819055505b50565b60606113cb611e6b565b6040516020016113db9190612d55565b604051602081830303815290604052905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61148b6116d3565b73ffffffffffffffffffffffffffffffffffffffff166114a9610f4f565b73ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690612fdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561156f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156690612e5b565b60405180910390fd5b61157881611ace565b50565b6000601254905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061165057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611660575061165f82612009565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661174e83610bfe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061179f82611667565b6117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590612efb565b60405180910390fd5b60006117e983610bfe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061185857508373ffffffffffffffffffffffffffffffffffffffff1661184084610814565b73ffffffffffffffffffffffffffffffffffffffff16145b80611869575061186881856113ef565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661189282610bfe565b73ffffffffffffffffffffffffffffffffffffffff16146118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90612ffb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90612ebb565b60405180910390fd5b611963838383612073565b61196e6000826116db565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119be91906131f6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a15919061316f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600f5443611ba491906131f6565b90506010548111611bdb57601154600d54611bbf91906131c5565b600d6000828254611bd0919061316f565b925050819055611c03565b601154600d54611beb91906131c5565b600d6000828254611bfc91906131f6565b9250508190555b50600e54600d541015611c1a57600e54600d819055505b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca890612f7b565b60405180910390fd5b611cba81611667565b15611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf190612e7b565b60405180910390fd5b611d0660008383612073565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d56919061316f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611e1a848484611872565b611e2684848484612187565b611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90612e3b565b60405180910390fd5b50505050565b60606040518060400160405280601881526020017f68747470733a2f2f7433726d2e6465762f77686f616d692f0000000000000000815250905090565b60606000821415611ef0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612004565b600082905060005b60008214611f22578080611f0b90613343565b915050600a82611f1b91906131c5565b9150611ef8565b60008167ffffffffffffffff811115611f3e57611f3d6134a8565b5b6040519080825280601f01601f191660200182016040528015611f705781602001600182028036833780820191505090505b5090505b60008514611ffd57600182611f8991906131f6565b9150600a85611f98919061338c565b6030611fa4919061316f565b60f81b818381518110611fba57611fb9613479565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ff691906131c5565b9450611f74565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61207e83838361231e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120c1576120bc81612323565b612100565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146120ff576120fe838261236c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121435761213e816124d9565b612182565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121815761218082826125aa565b5b5b505050565b60006121a88473ffffffffffffffffffffffffffffffffffffffff16612629565b15612311578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121d16116d3565b8786866040518563ffffffff1660e01b81526004016121f39493929190612d92565b602060405180830381600087803b15801561220d57600080fd5b505af192505050801561223e57506040513d601f19601f8201168201806040525081019061223b9190612905565b60015b6122c1573d806000811461226e576040519150601f19603f3d011682016040523d82523d6000602084013e612273565b606091505b506000815114156122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b090612e3b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612316565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161237984610cb0565b61238391906131f6565b9050600060076000848152602001908152602001600020549050818114612468576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506124ed91906131f6565b905060006009600084815260200190815260200160002054905060006008838154811061251d5761251c613479565b5b90600052602060002001549050806008838154811061253f5761253e613479565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061258e5761258d61344a565b5b6001900381819060005260206000200160009055905550505050565b60006125b583610cb0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600061264f61264a846130fb565b6130d6565b90508281526020810184848401111561266b5761266a6134dc565b5b61267684828561329e565b509392505050565b60008135905061268d81613a96565b92915050565b6000813590506126a281613aad565b92915050565b6000813590506126b781613ac4565b92915050565b6000815190506126cc81613ac4565b92915050565b600082601f8301126126e7576126e66134d7565b5b81356126f784826020860161263c565b91505092915050565b60008135905061270f81613adb565b92915050565b60006020828403121561272b5761272a6134e6565b5b60006127398482850161267e565b91505092915050565b60008060408385031215612759576127586134e6565b5b60006127678582860161267e565b92505060206127788582860161267e565b9150509250929050565b60008060006060848603121561279b5761279a6134e6565b5b60006127a98682870161267e565b93505060206127ba8682870161267e565b92505060406127cb86828701612700565b9150509250925092565b600080600080608085870312156127ef576127ee6134e6565b5b60006127fd8782880161267e565b945050602061280e8782880161267e565b935050604061281f87828801612700565b925050606085013567ffffffffffffffff8111156128405761283f6134e1565b5b61284c878288016126d2565b91505092959194509250565b6000806040838503121561286f5761286e6134e6565b5b600061287d8582860161267e565b925050602061288e85828601612693565b9150509250929050565b600080604083850312156128af576128ae6134e6565b5b60006128bd8582860161267e565b92505060206128ce85828601612700565b9150509250929050565b6000602082840312156128ee576128ed6134e6565b5b60006128fc848285016126a8565b91505092915050565b60006020828403121561291b5761291a6134e6565b5b6000612929848285016126bd565b91505092915050565b600060208284031215612948576129476134e6565b5b600061295684828501612700565b91505092915050565b6129688161322a565b82525050565b6129778161323c565b82525050565b60006129888261312c565b6129928185613142565b93506129a28185602086016132ad565b6129ab816134eb565b840191505092915050565b60006129c182613137565b6129cb8185613153565b93506129db8185602086016132ad565b6129e4816134eb565b840191505092915050565b60006129fa82613137565b612a048185613164565b9350612a148185602086016132ad565b80840191505092915050565b6000612a2d602b83613153565b9150612a38826134fc565b604082019050919050565b6000612a50603283613153565b9150612a5b8261354b565b604082019050919050565b6000612a73602683613153565b9150612a7e8261359a565b604082019050919050565b6000612a96601c83613153565b9150612aa1826135e9565b602082019050919050565b6000612ab9601583613153565b9150612ac482613612565b602082019050919050565b6000612adc602483613153565b9150612ae78261363b565b604082019050919050565b6000612aff601983613153565b9150612b0a8261368a565b602082019050919050565b6000612b22602c83613153565b9150612b2d826136b3565b604082019050919050565b6000612b45603883613153565b9150612b5082613702565b604082019050919050565b6000612b68602a83613153565b9150612b7382613751565b604082019050919050565b6000612b8b602983613153565b9150612b96826137a0565b604082019050919050565b6000612bae600883613164565b9150612bb9826137ef565b600882019050919050565b6000612bd1602083613153565b9150612bdc82613818565b602082019050919050565b6000612bf4601983613153565b9150612bff82613841565b602082019050919050565b6000612c17602c83613153565b9150612c228261386a565b604082019050919050565b6000612c3a602083613153565b9150612c45826138b9565b602082019050919050565b6000612c5d602983613153565b9150612c68826138e2565b604082019050919050565b6000612c80602f83613153565b9150612c8b82613931565b604082019050919050565b6000612ca3601383613153565b9150612cae82613980565b602082019050919050565b6000612cc6602183613153565b9150612cd1826139a9565b604082019050919050565b6000612ce9603183613153565b9150612cf4826139f8565b604082019050919050565b6000612d0c602c83613153565b9150612d1782613a47565b604082019050919050565b612d2b81613294565b82525050565b6000612d3d82856129ef565b9150612d4982846129ef565b91508190509392505050565b6000612d6182846129ef565b9150612d6c82612ba1565b915081905092915050565b6000602082019050612d8c600083018461295f565b92915050565b6000608082019050612da7600083018761295f565b612db4602083018661295f565b612dc16040830185612d22565b8181036060830152612dd3818461297d565b905095945050505050565b6000602082019050612df3600083018461296e565b92915050565b60006020820190508181036000830152612e1381846129b6565b905092915050565b60006020820190508181036000830152612e3481612a20565b9050919050565b60006020820190508181036000830152612e5481612a43565b9050919050565b60006020820190508181036000830152612e7481612a66565b9050919050565b60006020820190508181036000830152612e9481612a89565b9050919050565b60006020820190508181036000830152612eb481612aac565b9050919050565b60006020820190508181036000830152612ed481612acf565b9050919050565b60006020820190508181036000830152612ef481612af2565b9050919050565b60006020820190508181036000830152612f1481612b15565b9050919050565b60006020820190508181036000830152612f3481612b38565b9050919050565b60006020820190508181036000830152612f5481612b5b565b9050919050565b60006020820190508181036000830152612f7481612b7e565b9050919050565b60006020820190508181036000830152612f9481612bc4565b9050919050565b60006020820190508181036000830152612fb481612be7565b9050919050565b60006020820190508181036000830152612fd481612c0a565b9050919050565b60006020820190508181036000830152612ff481612c2d565b9050919050565b6000602082019050818103600083015261301481612c50565b9050919050565b6000602082019050818103600083015261303481612c73565b9050919050565b6000602082019050818103600083015261305481612c96565b9050919050565b6000602082019050818103600083015261307481612cb9565b9050919050565b6000602082019050818103600083015261309481612cdc565b9050919050565b600060208201905081810360008301526130b481612cff565b9050919050565b60006020820190506130d06000830184612d22565b92915050565b60006130e06130f1565b90506130ec8282613312565b919050565b6000604051905090565b600067ffffffffffffffff821115613116576131156134a8565b5b61311f826134eb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061317a82613294565b915061318583613294565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131ba576131b96133bd565b5b828201905092915050565b60006131d082613294565b91506131db83613294565b9250826131eb576131ea6133ec565b5b828204905092915050565b600061320182613294565b915061320c83613294565b92508282101561321f5761321e6133bd565b5b828203905092915050565b600061323582613274565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156132cb5780820151818401526020810190506132b0565b838111156132da576000848401525b50505050565b600060028204905060018216806132f857607f821691505b6020821081141561330c5761330b61341b565b5b50919050565b61331b826134eb565b810181811067ffffffffffffffff8211171561333a576133396134a8565b5b80604052505050565b600061334e82613294565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613381576133806133bd565b5b600182019050919050565b600061339782613294565b91506133a283613294565b9250826133b2576133b16133ec565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5265717569726573206d696e696d756d206665652e0000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f636f6e7472616374000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f506c6174666f726d206861736e2774206c61756e636865642e00000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d617820737570706c7920726561636865642e00000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613a9f8161322a565b8114613aaa57600080fd5b50565b613ab68161323c565b8114613ac157600080fd5b50565b613acd81613248565b8114613ad857600080fd5b50565b613ae481613294565b8114613aef57600080fd5b5056fea264697066735822122065a39091fb8ef1b64feab6d4c196f404f7246b963fb474a9815808c334f4b61f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000258689ac70a8000000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000c8d5cc0000000000000000000000000000000000000000000000000000000000000539000000000000000000000000000000000000000000000000000000000000000677686f616d690000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000677686f616d690000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): whoami
Arg [1] : _symbol (string): whoami
Arg [2] : __mintFee (uint256): 169000000000000000
Arg [3] : __mintFeeFloor (uint256): 10000000000000000
Arg [4] : __updateFreq (uint256): 1920
Arg [5] : __updatAmt (uint256): 420
Arg [6] : __launchBlock (uint256): 13161932
Arg [7] : __totalIdentities (uint256): 1337
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 0000000000000000000000000000000000000000000000000258689ac70a8000
Arg [3] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000780
Arg [5] : 00000000000000000000000000000000000000000000000000000000000001a4
Arg [6] : 0000000000000000000000000000000000000000000000000000000000c8d5cc
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000539
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [9] : 77686f616d690000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [11] : 77686f616d690000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
160:5194:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:222:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2349:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4582:82:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3250:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1534:111:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3437:82:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1210:253:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5120:179:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1717:230:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4756:92:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2052:235:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:11;;;;;;;;;;;;;:::i;:::-;;4002:491:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;966:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:102:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4144:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5365:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2679:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2865:80:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5228:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4951:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2383:125;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4500:162:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3034:88:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;909:222:5;1011:4;1049:35;1034:50;;;:11;:50;;;;:90;;;;1088:36;1112:11;1088:23;:36::i;:::-;1034:90;1027:97;;909:222;;;:::o;2349:98:4:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;4582:82:13:-;4622:4;4641:18;4648:10;4641:6;:18::i;:::-;4634:25;;4582:82;:::o;3250:72::-;3290:4;3309:8;;3302:15;;3250:72;:::o;1534:111:5:-;1595:7;1621:10;:17;;;;1614:24;;1534:111;:::o;3437:82:13:-;3482:4;3501:13;;3494:20;;3437:82;:::o;4724:330:4:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;1210:253:5:-;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1430:12;:19;1443:5;1430:19;;;;;;;;;;;;;;;:26;1450:5;1430:26;;;;;;;;;;;;1423:33;;1210:253;;;;:::o;5120:179:4:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;1717:230:5:-;1792:7;1827:30;:28;:30::i;:::-;1819:5;:38;1811:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1923:10;1934:5;1923:17;;;;;;;;:::i;:::-;;;;;;;;;;1916:24;;1717:230;;;:::o;4756:92:13:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4834:9:13::1;4823:8;:20;;;;4756:92:::0;:::o;2052:235:4:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;1790:205::-;1862:7;1906:1;1889:19;;:5;:19;;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1598:92:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;4002:491:13:-;4061:4;4097:12;;4081;:28;;4073:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4166:8;;4153:9;:21;;4145:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4230:16;;4214:13;:11;:13::i;:::-;:32;4206:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4285:7;:5;:7::i;:::-;4277:25;;:36;4303:9;4277:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4320:16;:14;:16::i;:::-;4356:12;4342:11;:26;;;;4375:21;:9;:19;:21::i;:::-;4402:12;4417:19;:9;:17;:19::i;:::-;4402:34;;4442:25;4448:9;4459:7;4442:5;:25::i;:::-;4481:7;4474:14;;;4002:491;;;:::o;966:85:11:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;2511:102:4:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;4144:290::-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;5365:320::-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;2679:329::-;2752:13;2785:16;2793:7;2785;:16::i;:::-;2777:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;2864:21;2888:10;:8;:10::i;:::-;2864:34;;2939:1;2921:7;2915:21;:25;:86;;;;;;;;;;;;;;;;;2967:7;2976:18;:7;:16;:18::i;:::-;2950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2915:86;2908:93;;;2679:329;;;:::o;2865:80:13:-;2909:4;2928:12;;2921:19;;2865:80;:::o;5228:124::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5330:17:13::1;5311:16;:36;;;;5228:124:::0;:::o;4951:172::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5044:14:13::1;5028:13;:30;;;;5084:8;;5068:13;;:24;5064:54;;;5105:13;;5094:8;:24;;;;5064:54;4951:172:::0;:::o;2383:125::-;2427:13;2479:10;:8;:10::i;:::-;2462:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;2448:55;;2383:125;:::o;4500:162:4:-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;1839:189:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;3034:88:13:-;3082:4;3101:16;;3094:23;;3034:88;:::o;1431:300:4:-;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;7157:125::-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;11008:171:4:-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;2034:169:11:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;3653:260:13:-;3693:15;3726:11;;3711:12;:26;;;;:::i;:::-;3693:44;;3756:11;;3743:10;:24;:104;;3837:10;;3828:8;;:19;;;;:::i;:::-;3816:8;;:31;;;;;;;:::i;:::-;;;;;;;3743:104;;;3797:10;;3788:8;;:19;;;;:::i;:::-;3776:8;;:31;;;;;;;:::i;:::-;;;;;;;3743:104;;3869:13;;3858:8;;:24;3854:54;;;3895:13;;3884:8;:24;;;;3854:54;3687:226;3653:260::o;891:123:2:-;996:1;978:7;:14;;;:19;;;;;;;;;;;891:123;:::o;773:112::-;838:7;864;:14;;;857:21;;773:112;;;:::o;9076:372:4:-;9169:1;9155:16;;:2;:16;;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;6547:307::-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;2641:119:13:-;2701:13;2722:33;;;;;;;;;;;;;;;;;;;2641:119;:::o;275:703:12:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;763:155:3:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;2543:572:5:-;2682:45;2709:4;2715:2;2719:7;2682:26;:45::i;:::-;2758:1;2742:18;;:4;:18;;;2738:183;;;2776:40;2808:7;2776:31;:40::i;:::-;2738:183;;;2845:2;2837:10;;:4;:10;;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;2833:88;2738:183;2948:1;2934:16;;:2;:16;;;2930:179;;;2966:45;3003:7;2966:36;:45::i;:::-;2930:179;;;3038:4;3032:10;;:2;:10;;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;:::-;3028:81;2930:179;2543:572;;;:::o;11732:778:4:-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;13066:122::-;;;;:::o;3821:161:5:-;3924:10;:17;;;;3897:15;:24;3913:7;3897:24;;;;;;;;;;;:44;;;;3951:10;3967:7;3951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:161;:::o;4599:970::-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4861:51;;4922:18;4943:17;:26;4961:7;4943:26;;;;;;;;;;;;4922:47;;5087:14;5073:10;:28;5069:323;;5117:19;5139:12;:18;5152:4;5139:18;;;;;;;;;;;;;;;:34;5158:14;5139:34;;;;;;;;;;;;5117:56;;5221:11;5188:12;:18;5201:4;5188:18;;;;;;;;;;;;;;;:30;5207:10;5188:30;;;;;;;;;;;:44;;;;5337:10;5304:17;:30;5322:11;5304:30;;;;;;;;;;;:43;;;;5103:289;5069:323;5485:17;:26;5503:7;5485:26;;;;;;;;;;;5478:33;;;5528:12;:18;5541:4;5528:18;;;;;;;;;;;;;;;:34;5547:14;5528:34;;;;;;;;;;;5521:41;;;4680:889;;4599:970;;:::o;5857:1061::-;6106:22;6151:1;6131:10;:17;;;;:21;;;;:::i;:::-;6106:46;;6162:18;6183:15;:24;6199:7;6183:24;;;;;;;;;;;;6162:45;;6529:19;6551:10;6562:14;6551:26;;;;;;;;:::i;:::-;;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6723:10;6692:15;:28;6708:11;6692:28;;;;;;;;;;;:41;;;;6861:15;:24;6877:7;6861:24;;;;;;;;;;;6854:31;;;6895:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5928:990;;;5857:1061;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;3493:37;;3567:7;3540:12;:16;3553:2;3540:16;;;;;;;;;;;;;;;:24;3557:6;3540:24;;;;;;;;;;;:34;;;;3613:6;3584:17;:26;3602:7;3584:26;;;;;;;;;;;:35;;;;3483:143;3409:217;;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;7:410:14:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;6840:377;;;;:::o;7223:366::-;7365:3;7386:67;7450:2;7445:3;7386:67;:::i;:::-;7379:74;;7462:93;7551:3;7462:93;:::i;:::-;7580:2;7575:3;7571:12;7564:19;;7223:366;;;:::o;7595:::-;7737:3;7758:67;7822:2;7817:3;7758:67;:::i;:::-;7751:74;;7834:93;7923:3;7834:93;:::i;:::-;7952:2;7947:3;7943:12;7936:19;;7595:366;;;:::o;7967:::-;8109:3;8130:67;8194:2;8189:3;8130:67;:::i;:::-;8123:74;;8206:93;8295:3;8206:93;:::i;:::-;8324:2;8319:3;8315:12;8308:19;;7967:366;;;:::o;8339:::-;8481:3;8502:67;8566:2;8561:3;8502:67;:::i;:::-;8495:74;;8578:93;8667:3;8578:93;:::i;:::-;8696:2;8691:3;8687:12;8680:19;;8339:366;;;:::o;8711:::-;8853:3;8874:67;8938:2;8933:3;8874:67;:::i;:::-;8867:74;;8950:93;9039:3;8950:93;:::i;:::-;9068:2;9063:3;9059:12;9052:19;;8711:366;;;:::o;9083:::-;9225:3;9246:67;9310:2;9305:3;9246:67;:::i;:::-;9239:74;;9322:93;9411:3;9322:93;:::i;:::-;9440:2;9435:3;9431:12;9424:19;;9083:366;;;:::o;9455:::-;9597:3;9618:67;9682:2;9677:3;9618:67;:::i;:::-;9611:74;;9694:93;9783:3;9694:93;:::i;:::-;9812:2;9807:3;9803:12;9796:19;;9455:366;;;:::o;9827:::-;9969:3;9990:67;10054:2;10049:3;9990:67;:::i;:::-;9983:74;;10066:93;10155:3;10066:93;:::i;:::-;10184:2;10179:3;10175:12;10168:19;;9827:366;;;:::o;10199:::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10199:366;;;:::o;10571:::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10571:366;;;:::o;10943:::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:400::-;11475:3;11496:84;11578:1;11573:3;11496:84;:::i;:::-;11489:91;;11589:93;11678:3;11589:93;:::i;:::-;11707:1;11702:3;11698:11;11691:18;;11315:400;;;:::o;11721:366::-;11863:3;11884:67;11948:2;11943:3;11884:67;:::i;:::-;11877:74;;11960:93;12049:3;11960:93;:::i;:::-;12078:2;12073:3;12069:12;12062:19;;11721:366;;;:::o;12093:::-;12235:3;12256:67;12320:2;12315:3;12256:67;:::i;:::-;12249:74;;12332:93;12421:3;12332:93;:::i;:::-;12450:2;12445:3;12441:12;12434:19;;12093:366;;;:::o;12465:::-;12607:3;12628:67;12692:2;12687:3;12628:67;:::i;:::-;12621:74;;12704:93;12793:3;12704:93;:::i;:::-;12822:2;12817:3;12813:12;12806:19;;12465:366;;;:::o;12837:::-;12979:3;13000:67;13064:2;13059:3;13000:67;:::i;:::-;12993:74;;13076:93;13165:3;13076:93;:::i;:::-;13194:2;13189:3;13185:12;13178:19;;12837:366;;;:::o;13209:::-;13351:3;13372:67;13436:2;13431:3;13372:67;:::i;:::-;13365:74;;13448:93;13537:3;13448:93;:::i;:::-;13566:2;13561:3;13557:12;13550:19;;13209:366;;;:::o;13581:::-;13723:3;13744:67;13808:2;13803:3;13744:67;:::i;:::-;13737:74;;13820:93;13909:3;13820:93;:::i;:::-;13938:2;13933:3;13929:12;13922:19;;13581:366;;;:::o;13953:::-;14095:3;14116:67;14180:2;14175:3;14116:67;:::i;:::-;14109:74;;14192:93;14281:3;14192:93;:::i;:::-;14310:2;14305:3;14301:12;14294:19;;13953:366;;;:::o;14325:::-;14467:3;14488:67;14552:2;14547:3;14488:67;:::i;:::-;14481:74;;14564:93;14653:3;14564:93;:::i;:::-;14682:2;14677:3;14673:12;14666:19;;14325:366;;;:::o;14697:::-;14839:3;14860:67;14924:2;14919:3;14860:67;:::i;:::-;14853:74;;14936:93;15025:3;14936:93;:::i;:::-;15054:2;15049:3;15045:12;15038:19;;14697:366;;;:::o;15069:::-;15211:3;15232:67;15296:2;15291:3;15232:67;:::i;:::-;15225:74;;15308:93;15397:3;15308:93;:::i;:::-;15426:2;15421:3;15417:12;15410:19;;15069:366;;;:::o;15441:118::-;15528:24;15546:5;15528:24;:::i;:::-;15523:3;15516:37;15441:118;;:::o;15565:435::-;15745:3;15767:95;15858:3;15849:6;15767:95;:::i;:::-;15760:102;;15879:95;15970:3;15961:6;15879:95;:::i;:::-;15872:102;;15991:3;15984:10;;15565:435;;;;;:::o;16006:541::-;16239:3;16261:95;16352:3;16343:6;16261:95;:::i;:::-;16254:102;;16373:148;16517:3;16373:148;:::i;:::-;16366:155;;16538:3;16531:10;;16006:541;;;;:::o;16553:222::-;16646:4;16684:2;16673:9;16669:18;16661:26;;16697:71;16765:1;16754:9;16750:17;16741:6;16697:71;:::i;:::-;16553:222;;;;:::o;16781:640::-;16976:4;17014:3;17003:9;16999:19;16991:27;;17028:71;17096:1;17085:9;17081:17;17072:6;17028:71;:::i;:::-;17109:72;17177:2;17166:9;17162:18;17153:6;17109:72;:::i;:::-;17191;17259:2;17248:9;17244:18;17235:6;17191:72;:::i;:::-;17310:9;17304:4;17300:20;17295:2;17284:9;17280:18;17273:48;17338:76;17409:4;17400:6;17338:76;:::i;:::-;17330:84;;16781:640;;;;;;;:::o;17427:210::-;17514:4;17552:2;17541:9;17537:18;17529:26;;17565:65;17627:1;17616:9;17612:17;17603:6;17565:65;:::i;:::-;17427:210;;;;:::o;17643:313::-;17756:4;17794:2;17783:9;17779:18;17771:26;;17843:9;17837:4;17833:20;17829:1;17818:9;17814:17;17807:47;17871:78;17944:4;17935:6;17871:78;:::i;:::-;17863:86;;17643:313;;;;:::o;17962:419::-;18128:4;18166:2;18155:9;18151:18;18143:26;;18215:9;18209:4;18205:20;18201:1;18190:9;18186:17;18179:47;18243:131;18369:4;18243:131;:::i;:::-;18235:139;;17962:419;;;:::o;18387:::-;18553:4;18591:2;18580:9;18576:18;18568:26;;18640:9;18634:4;18630:20;18626:1;18615:9;18611:17;18604:47;18668:131;18794:4;18668:131;:::i;:::-;18660:139;;18387:419;;;:::o;18812:::-;18978:4;19016:2;19005:9;19001:18;18993:26;;19065:9;19059:4;19055:20;19051:1;19040:9;19036:17;19029:47;19093:131;19219:4;19093:131;:::i;:::-;19085:139;;18812:419;;;:::o;19237:::-;19403:4;19441:2;19430:9;19426:18;19418:26;;19490:9;19484:4;19480:20;19476:1;19465:9;19461:17;19454:47;19518:131;19644:4;19518:131;:::i;:::-;19510:139;;19237:419;;;:::o;19662:::-;19828:4;19866:2;19855:9;19851:18;19843:26;;19915:9;19909:4;19905:20;19901:1;19890:9;19886:17;19879:47;19943:131;20069:4;19943:131;:::i;:::-;19935:139;;19662:419;;;:::o;20087:::-;20253:4;20291:2;20280:9;20276:18;20268:26;;20340:9;20334:4;20330:20;20326:1;20315:9;20311:17;20304:47;20368:131;20494:4;20368:131;:::i;:::-;20360:139;;20087:419;;;:::o;20512:::-;20678:4;20716:2;20705:9;20701:18;20693:26;;20765:9;20759:4;20755:20;20751:1;20740:9;20736:17;20729:47;20793:131;20919:4;20793:131;:::i;:::-;20785:139;;20512:419;;;:::o;20937:::-;21103:4;21141:2;21130:9;21126:18;21118:26;;21190:9;21184:4;21180:20;21176:1;21165:9;21161:17;21154:47;21218:131;21344:4;21218:131;:::i;:::-;21210:139;;20937:419;;;:::o;21362:::-;21528:4;21566:2;21555:9;21551:18;21543:26;;21615:9;21609:4;21605:20;21601:1;21590:9;21586:17;21579:47;21643:131;21769:4;21643:131;:::i;:::-;21635:139;;21362:419;;;:::o;21787:::-;21953:4;21991:2;21980:9;21976:18;21968:26;;22040:9;22034:4;22030:20;22026:1;22015:9;22011:17;22004:47;22068:131;22194:4;22068:131;:::i;:::-;22060:139;;21787:419;;;:::o;22212:::-;22378:4;22416:2;22405:9;22401:18;22393:26;;22465:9;22459:4;22455:20;22451:1;22440:9;22436:17;22429:47;22493:131;22619:4;22493:131;:::i;:::-;22485:139;;22212:419;;;:::o;22637:::-;22803:4;22841:2;22830:9;22826:18;22818:26;;22890:9;22884:4;22880:20;22876:1;22865:9;22861:17;22854:47;22918:131;23044:4;22918:131;:::i;:::-;22910:139;;22637:419;;;:::o;23062:::-;23228:4;23266:2;23255:9;23251:18;23243:26;;23315:9;23309:4;23305:20;23301:1;23290:9;23286:17;23279:47;23343:131;23469:4;23343:131;:::i;:::-;23335:139;;23062:419;;;:::o;23487:::-;23653:4;23691:2;23680:9;23676:18;23668:26;;23740:9;23734:4;23730:20;23726:1;23715:9;23711:17;23704:47;23768:131;23894:4;23768:131;:::i;:::-;23760:139;;23487:419;;;:::o;23912:::-;24078:4;24116:2;24105:9;24101:18;24093:26;;24165:9;24159:4;24155:20;24151:1;24140:9;24136:17;24129:47;24193:131;24319:4;24193:131;:::i;:::-;24185:139;;23912:419;;;:::o;24337:::-;24503:4;24541:2;24530:9;24526:18;24518:26;;24590:9;24584:4;24580:20;24576:1;24565:9;24561:17;24554:47;24618:131;24744:4;24618:131;:::i;:::-;24610:139;;24337:419;;;:::o;24762:::-;24928:4;24966:2;24955:9;24951:18;24943:26;;25015:9;25009:4;25005:20;25001:1;24990:9;24986:17;24979:47;25043:131;25169:4;25043:131;:::i;:::-;25035:139;;24762:419;;;:::o;25187:::-;25353:4;25391:2;25380:9;25376:18;25368:26;;25440:9;25434:4;25430:20;25426:1;25415:9;25411:17;25404:47;25468:131;25594:4;25468:131;:::i;:::-;25460:139;;25187:419;;;:::o;25612:::-;25778:4;25816:2;25805:9;25801:18;25793:26;;25865:9;25859:4;25855:20;25851:1;25840:9;25836:17;25829:47;25893:131;26019:4;25893:131;:::i;:::-;25885:139;;25612:419;;;:::o;26037:::-;26203:4;26241:2;26230:9;26226:18;26218:26;;26290:9;26284:4;26280:20;26276:1;26265:9;26261:17;26254:47;26318:131;26444:4;26318:131;:::i;:::-;26310:139;;26037:419;;;:::o;26462:::-;26628:4;26666:2;26655:9;26651:18;26643:26;;26715:9;26709:4;26705:20;26701:1;26690:9;26686:17;26679:47;26743:131;26869:4;26743:131;:::i;:::-;26735:139;;26462:419;;;:::o;26887:222::-;26980:4;27018:2;27007:9;27003:18;26995:26;;27031:71;27099:1;27088:9;27084:17;27075:6;27031:71;:::i;:::-;26887:222;;;;:::o;27115:129::-;27149:6;27176:20;;:::i;:::-;27166:30;;27205:33;27233:4;27225:6;27205:33;:::i;:::-;27115:129;;;:::o;27250:75::-;27283:6;27316:2;27310:9;27300:19;;27250:75;:::o;27331:307::-;27392:4;27482:18;27474:6;27471:30;27468:56;;;27504:18;;:::i;:::-;27468:56;27542:29;27564:6;27542:29;:::i;:::-;27534:37;;27626:4;27620;27616:15;27608:23;;27331:307;;;:::o;27644:98::-;27695:6;27729:5;27723:12;27713:22;;27644:98;;;:::o;27748:99::-;27800:6;27834:5;27828:12;27818:22;;27748:99;;;:::o;27853:168::-;27936:11;27970:6;27965:3;27958:19;28010:4;28005:3;28001:14;27986:29;;27853:168;;;;:::o;28027:169::-;28111:11;28145:6;28140:3;28133:19;28185:4;28180:3;28176:14;28161:29;;28027:169;;;;:::o;28202:148::-;28304:11;28341:3;28326:18;;28202:148;;;;:::o;28356:305::-;28396:3;28415:20;28433:1;28415:20;:::i;:::-;28410:25;;28449:20;28467:1;28449:20;:::i;:::-;28444:25;;28603:1;28535:66;28531:74;28528:1;28525:81;28522:107;;;28609:18;;:::i;:::-;28522:107;28653:1;28650;28646:9;28639:16;;28356:305;;;;:::o;28667:185::-;28707:1;28724:20;28742:1;28724:20;:::i;:::-;28719:25;;28758:20;28776:1;28758:20;:::i;:::-;28753:25;;28797:1;28787:35;;28802:18;;:::i;:::-;28787:35;28844:1;28841;28837:9;28832:14;;28667:185;;;;:::o;28858:191::-;28898:4;28918:20;28936:1;28918:20;:::i;:::-;28913:25;;28952:20;28970:1;28952:20;:::i;:::-;28947:25;;28991:1;28988;28985:8;28982:34;;;28996:18;;:::i;:::-;28982:34;29041:1;29038;29034:9;29026:17;;28858:191;;;;:::o;29055:96::-;29092:7;29121:24;29139:5;29121:24;:::i;:::-;29110:35;;29055:96;;;:::o;29157:90::-;29191:7;29234:5;29227:13;29220:21;29209:32;;29157:90;;;:::o;29253:149::-;29289:7;29329:66;29322:5;29318:78;29307:89;;29253:149;;;:::o;29408:126::-;29445:7;29485:42;29478:5;29474:54;29463:65;;29408:126;;;:::o;29540:77::-;29577:7;29606:5;29595:16;;29540:77;;;:::o;29623:154::-;29707:6;29702:3;29697;29684:30;29769:1;29760:6;29755:3;29751:16;29744:27;29623:154;;;:::o;29783:307::-;29851:1;29861:113;29875:6;29872:1;29869:13;29861:113;;;29960:1;29955:3;29951:11;29945:18;29941:1;29936:3;29932:11;29925:39;29897:2;29894:1;29890:10;29885:15;;29861:113;;;29992:6;29989:1;29986:13;29983:101;;;30072:1;30063:6;30058:3;30054:16;30047:27;29983:101;29832:258;29783:307;;;:::o;30096:320::-;30140:6;30177:1;30171:4;30167:12;30157:22;;30224:1;30218:4;30214:12;30245:18;30235:81;;30301:4;30293:6;30289:17;30279:27;;30235:81;30363:2;30355:6;30352:14;30332:18;30329:38;30326:84;;;30382:18;;:::i;:::-;30326:84;30147:269;30096:320;;;:::o;30422:281::-;30505:27;30527:4;30505:27;:::i;:::-;30497:6;30493:40;30635:6;30623:10;30620:22;30599:18;30587:10;30584:34;30581:62;30578:88;;;30646:18;;:::i;:::-;30578:88;30686:10;30682:2;30675:22;30465:238;30422:281;;:::o;30709:233::-;30748:3;30771:24;30789:5;30771:24;:::i;:::-;30762:33;;30817:66;30810:5;30807:77;30804:103;;;30887:18;;:::i;:::-;30804:103;30934:1;30927:5;30923:13;30916:20;;30709:233;;;:::o;30948:176::-;30980:1;30997:20;31015:1;30997:20;:::i;:::-;30992:25;;31031:20;31049:1;31031:20;:::i;:::-;31026:25;;31070:1;31060:35;;31075:18;;:::i;:::-;31060:35;31116:1;31113;31109:9;31104:14;;30948:176;;;;:::o;31130:180::-;31178:77;31175:1;31168:88;31275:4;31272:1;31265:15;31299:4;31296:1;31289:15;31316:180;31364:77;31361:1;31354:88;31461:4;31458:1;31451:15;31485:4;31482:1;31475:15;31502:180;31550:77;31547:1;31540:88;31647:4;31644:1;31637:15;31671:4;31668:1;31661:15;31688:180;31736:77;31733:1;31726:88;31833:4;31830:1;31823:15;31857:4;31854:1;31847:15;31874:180;31922:77;31919:1;31912:88;32019:4;32016:1;32009:15;32043:4;32040:1;32033:15;32060:180;32108:77;32105:1;32098:88;32205:4;32202:1;32195:15;32229:4;32226:1;32219:15;32246:117;32355:1;32352;32345:12;32369:117;32478:1;32475;32468:12;32492:117;32601:1;32598;32591:12;32615:117;32724:1;32721;32714:12;32738:102;32779:6;32830:2;32826:7;32821:2;32814:5;32810:14;32806:28;32796:38;;32738:102;;;:::o;32846:230::-;32986:34;32982:1;32974:6;32970:14;32963:58;33055:13;33050:2;33042:6;33038:15;33031:38;32846:230;:::o;33082:237::-;33222:34;33218:1;33210:6;33206:14;33199:58;33291:20;33286:2;33278:6;33274:15;33267:45;33082:237;:::o;33325:225::-;33465:34;33461:1;33453:6;33449:14;33442:58;33534:8;33529:2;33521:6;33517:15;33510:33;33325:225;:::o;33556:178::-;33696:30;33692:1;33684:6;33680:14;33673:54;33556:178;:::o;33740:171::-;33880:23;33876:1;33868:6;33864:14;33857:47;33740:171;:::o;33917:223::-;34057:34;34053:1;34045:6;34041:14;34034:58;34126:6;34121:2;34113:6;34109:15;34102:31;33917:223;:::o;34146:175::-;34286:27;34282:1;34274:6;34270:14;34263:51;34146:175;:::o;34327:231::-;34467:34;34463:1;34455:6;34451:14;34444:58;34536:14;34531:2;34523:6;34519:15;34512:39;34327:231;:::o;34564:243::-;34704:34;34700:1;34692:6;34688:14;34681:58;34773:26;34768:2;34760:6;34756:15;34749:51;34564:243;:::o;34813:229::-;34953:34;34949:1;34941:6;34937:14;34930:58;35022:12;35017:2;35009:6;35005:15;34998:37;34813:229;:::o;35048:228::-;35188:34;35184:1;35176:6;35172:14;35165:58;35257:11;35252:2;35244:6;35240:15;35233:36;35048:228;:::o;35282:158::-;35422:10;35418:1;35410:6;35406:14;35399:34;35282:158;:::o;35446:182::-;35586:34;35582:1;35574:6;35570:14;35563:58;35446:182;:::o;35634:175::-;35774:27;35770:1;35762:6;35758:14;35751:51;35634:175;:::o;35815:231::-;35955:34;35951:1;35943:6;35939:14;35932:58;36024:14;36019:2;36011:6;36007:15;36000:39;35815:231;:::o;36052:182::-;36192:34;36188:1;36180:6;36176:14;36169:58;36052:182;:::o;36240:228::-;36380:34;36376:1;36368:6;36364:14;36357:58;36449:11;36444:2;36436:6;36432:15;36425:36;36240:228;:::o;36474:234::-;36614:34;36610:1;36602:6;36598:14;36591:58;36683:17;36678:2;36670:6;36666:15;36659:42;36474:234;:::o;36714:169::-;36854:21;36850:1;36842:6;36838:14;36831:45;36714:169;:::o;36889:220::-;37029:34;37025:1;37017:6;37013:14;37006:58;37098:3;37093:2;37085:6;37081:15;37074:28;36889:220;:::o;37115:236::-;37255:34;37251:1;37243:6;37239:14;37232:58;37324:19;37319:2;37311:6;37307:15;37300:44;37115:236;:::o;37357:231::-;37497:34;37493:1;37485:6;37481:14;37474:58;37566:14;37561:2;37553:6;37549:15;37542:39;37357:231;:::o;37594:122::-;37667:24;37685:5;37667:24;:::i;:::-;37660:5;37657:35;37647:63;;37706:1;37703;37696:12;37647:63;37594:122;:::o;37722:116::-;37792:21;37807:5;37792:21;:::i;:::-;37785:5;37782:32;37772:60;;37828:1;37825;37818:12;37772:60;37722:116;:::o;37844:120::-;37916:23;37933:5;37916:23;:::i;:::-;37909:5;37906:34;37896:62;;37954:1;37951;37944:12;37896:62;37844:120;:::o;37970:122::-;38043:24;38061:5;38043:24;:::i;:::-;38036:5;38033:35;38023:63;;38082:1;38079;38072:12;38023:63;37970:122;:::o
Swarm Source
ipfs://65a39091fb8ef1b64feab6d4c196f404f7246b963fb474a9815808c334f4b61f
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.