Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
4,362 8BITBARBARIANS
Holders
1,126
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 8BITBARBARIANSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BITBARBARIANS
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.2; import "@openzeppelin/contracts/access/Ownable.sol"; import "erc721a/contracts/ERC721A.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract BITBARBARIANS is ERC721A, Ownable, ReentrancyGuard { enum Status { Waiting, Started, Finished } using Strings for uint256; Status public status; string private baseURI; uint256 public constant MAX_MINT_PER_ADDR = 15; uint256 public constant MAX_FREE_MINT_PER_ADDR = 2; uint256 public PUBLIC_PRICE = 0.0015 * 10**18; uint256 public constant MAX_SUPPLY = 5000; uint256 public constant FREE_MINT_SUPPLY = 1000; uint256 public INSTANT_FREE_MINTED = 0; event Minted(address minter, uint256 amount); constructor(string memory initBaseURI) ERC721A("8BitBarbarians", "8BITBARBARIANS") { baseURI = initBaseURI; } function _baseURI() internal view override returns (string memory) { return baseURI; } function _startTokenId() internal view virtual override returns (uint256) { return 1; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); return string( abi.encodePacked(baseURI, "/", _tokenId.toString(), ".json") ); } function setBaseURI(string calldata newBaseURI) external onlyOwner { baseURI = newBaseURI; } function mint(uint256 quantity) external payable nonReentrant { require(status == Status.Started, "-Not started yet-"); require(tx.origin == msg.sender, "-Contract call not allowed-"); require( numberMinted(msg.sender) + quantity <= MAX_MINT_PER_ADDR, "-This is more than allowed-" ); require( totalSupply() + quantity <= MAX_SUPPLY, "-Not enough quantity-" ); uint256 _cost; if (INSTANT_FREE_MINTED < FREE_MINT_SUPPLY) { uint256 remainFreeAmont = (numberMinted(msg.sender) < MAX_FREE_MINT_PER_ADDR) ? (MAX_FREE_MINT_PER_ADDR - numberMinted(msg.sender)) : 0; _cost = PUBLIC_PRICE * ( (quantity <= remainFreeAmont) ? 0 : (quantity - remainFreeAmont) ); INSTANT_FREE_MINTED += ( (quantity <= remainFreeAmont) ? quantity : remainFreeAmont ); } else { _cost = PUBLIC_PRICE * quantity; } require(msg.value >= _cost, "-Not enough ETH-"); _safeMint(msg.sender, quantity); emit Minted(msg.sender, quantity); } function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function setStatus(Status _status) external onlyOwner { status = _status; } function withdraw(address payable recipient) external onlyOwner nonReentrant { uint256 balance = address(this).balance; (bool success, ) = recipient.call{value: balance}(""); require(success, "-Withdraw failed-"); } function updatePrice(uint256 __price) external onlyOwner { PUBLIC_PRICE = __price; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // Creator: Chiru Labs pragma solidity ^0.8.4; import '@openzeppelin/contracts/token/ERC721/IERC721.sol'; import '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol'; import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol'; import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol'; import '@openzeppelin/contracts/utils/Address.sol'; import '@openzeppelin/contracts/utils/Context.sol'; import '@openzeppelin/contracts/utils/Strings.sol'; import '@openzeppelin/contracts/utils/introspection/ERC165.sol'; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error BurnedQueryForZeroAddress(); error AuxQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev See {IERC721Enumerable-totalSupply}. * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { if (owner == address(0)) revert MintedQueryForZeroAddress(); return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { if (owner == address(0)) revert BurnedQueryForZeroAddress(); return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { if (owner == address(0)) revert AuxQueryForZeroAddress(); return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { if (owner == address(0)) revert AuxQueryForZeroAddress(); _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { if (operator == _msgSender()) revert ApproveToCaller(); _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 { _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 { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || isApprovedForAll(prevOwnership.addr, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @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 { TokenOwnership memory prevOwnership = ownershipOf(tokenId); _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[prevOwnership.addr].balance -= 1; _addressData[prevOwnership.addr].numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. _ownerships[tokenId].addr = prevOwnership.addr; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); _ownerships[tokenId].burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId < _currentIndex) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(prevOwnership.addr, address(0), tokenId); _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/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 // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) 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 // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) 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); /** * @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 // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) 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 // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"MintedQueryForZeroAddress","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","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":[],"name":"FREE_MINT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INSTANT_FREE_MINTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FREE_MINT_PER_ADDR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_ADDR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum BITBARBARIANS.Status","name":"_status","type":"uint8"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"enum BITBARBARIANS.Status","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__price","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526605543df729c000600c556000600d553480156200002157600080fd5b50604051620040ad380380620040ad83398181016040528101906200004791906200033e565b6040518060400160405280600e81526020017f3842697442617262617269616e730000000000000000000000000000000000008152506040518060400160405280600e81526020017f3842495442415242415249414e530000000000000000000000000000000000008152508160029080519060200190620000cb9291906200021c565b508060039080519060200190620000e49291906200021c565b50620000f56200014560201b60201c565b60008190555050506200011d620001116200014e60201b60201c565b6200015660201b60201c565b600160098190555080600b90805190602001906200013d9291906200021c565b5050620004f3565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022a9062000418565b90600052602060002090601f0160209004810192826200024e57600085556200029a565b82601f106200026957805160ff19168380011785556200029a565b828001600101855582156200029a579182015b82811115620002995782518255916020019190600101906200027c565b5b509050620002a99190620002ad565b5090565b5b80821115620002c8576000816000905550600101620002ae565b5090565b6000620002e3620002dd84620003ac565b62000383565b905082815260208101848484011115620002fc57600080fd5b62000309848285620003e2565b509392505050565b600082601f8301126200032357600080fd5b815162000335848260208601620002cc565b91505092915050565b6000602082840312156200035157600080fd5b600082015167ffffffffffffffff8111156200036c57600080fd5b6200037a8482850162000311565b91505092915050565b60006200038f620003a2565b90506200039d82826200044e565b919050565b6000604051905090565b600067ffffffffffffffff821115620003ca57620003c9620004b3565b5b620003d582620004e2565b9050602081019050919050565b60005b8381101562000402578082015181840152602081019050620003e5565b8381111562000412576000848401525b50505050565b600060028204905060018216806200043157607f821691505b6020821081141562000448576200044762000484565b5b50919050565b6200045982620004e2565b810181811067ffffffffffffffff821117156200047b576200047a620004b3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613baa80620005036000396000f3fe6080604052600436106101cd5760003560e01c80636352211e116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610643578063dc33e68114610680578063e985e9c5146106bd578063f2fde38b146106fa576101cd565b806395d89b41146105aa578063a0712d68146105d5578063a22cb465146105f1578063b88d4fde1461061a576101cd565b8063715018a6116100d1578063715018a61461051457806382481c0e1461052b5780638d6cc56d146105565780638da5cb5b1461057f576101cd565b80636352211e1461046f57806363eb8bb6146104ac57806370a08231146104d7576101cd565b8063200d2ed21161016f57806342842e0e1161013e57806342842e0e146103c957806351cff8d9146103f257806355f804b31461041b578063611f3f1014610444576101cd565b8063200d2ed21461032157806323b872dd1461034c5780632e49d78b1461037557806332cb6b0c1461039e576101cd565b8063081812fc116101ab578063081812fc14610265578063095ea7b3146102a257806316154862146102cb57806318160ddd146102f6576101cd565b806301ffc9a7146101d25780630528eb431461020f57806306fdde031461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612d6e565b610723565b604051610206919061325b565b60405180910390f35b34801561021b57600080fd5b50610224610805565b60405161023191906133f3565b60405180910390f35b34801561024657600080fd5b5061024f61080a565b60405161025c9190613291565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190612e2e565b61089c565b60405161029991906131cb565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612d32565b610918565b005b3480156102d757600080fd5b506102e0610a23565b6040516102ed91906133f3565b60405180910390f35b34801561030257600080fd5b5061030b610a28565b60405161031891906133f3565b60405180910390f35b34801561032d57600080fd5b50610336610a3f565b6040516103439190613276565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190612c2c565b610a52565b005b34801561038157600080fd5b5061039c60048036038101906103979190612dc0565b610a62565b005b3480156103aa57600080fd5b506103b3610b31565b6040516103c091906133f3565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190612c2c565b610b37565b005b3480156103fe57600080fd5b5061041960048036038101906104149190612bc7565b610b57565b005b34801561042757600080fd5b50610442600480360381019061043d9190612de9565b610cdf565b005b34801561045057600080fd5b50610459610d71565b60405161046691906133f3565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190612e2e565b610d77565b6040516104a391906131cb565b60405180910390f35b3480156104b857600080fd5b506104c1610d8d565b6040516104ce91906133f3565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190612b9e565b610d93565b60405161050b91906133f3565b60405180910390f35b34801561052057600080fd5b50610529610e63565b005b34801561053757600080fd5b50610540610eeb565b60405161054d91906133f3565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612e2e565b610ef1565b005b34801561058b57600080fd5b50610594610f77565b6040516105a191906131cb565b60405180910390f35b3480156105b657600080fd5b506105bf610fa1565b6040516105cc9190613291565b60405180910390f35b6105ef60048036038101906105ea9190612e2e565b611033565b005b3480156105fd57600080fd5b5061061860048036038101906106139190612cf6565b61139a565b005b34801561062657600080fd5b50610641600480360381019061063c9190612c7b565b611512565b005b34801561064f57600080fd5b5061066a60048036038101906106659190612e2e565b61158e565b6040516106779190613291565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190612b9e565b61160a565b6040516106b491906133f3565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190612bf0565b61161c565b6040516106f1919061325b565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190612b9e565b6116b0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107fe57506107fd826117a8565b5b9050919050565b600281565b606060028054610819906136c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610845906136c9565b80156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050905090565b60006108a782611812565b6108dd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092382610d77565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109aa611860565b73ffffffffffffffffffffffffffffffffffffffff16141580156109dc57506109da816109d5611860565b61161c565b155b15610a13576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a1e838383611868565b505050565b600f81565b6000610a3261191a565b6001546000540303905090565b600a60009054906101000a900460ff1681565b610a5d838383611923565b505050565b610a6a611860565b73ffffffffffffffffffffffffffffffffffffffff16610a88610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613373565b60405180910390fd5b80600a60006101000a81548160ff02191690836002811115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555050565b61138881565b610b5283838360405180602001604052806000815250611512565b505050565b610b5f611860565b73ffffffffffffffffffffffffffffffffffffffff16610b7d610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca90613373565b60405180910390fd5b60026009541415610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c10906133b3565b60405180910390fd5b6002600981905550600047905060008273ffffffffffffffffffffffffffffffffffffffff1682604051610c4c906131b6565b60006040518083038185875af1925050503d8060008114610c89576040519150601f19603f3d011682016040523d82523d6000602084013e610c8e565b606091505b5050905080610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc9906132d3565b60405180910390fd5b5050600160098190555050565b610ce7611860565b73ffffffffffffffffffffffffffffffffffffffff16610d05610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290613373565b60405180910390fd5b8181600b9190610d6c929190612973565b505050565b600c5481565b6000610d8282611e14565b600001519050919050565b6103e881565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dfb576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e6b611860565b73ffffffffffffffffffffffffffffffffffffffff16610e89610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690613373565b60405180910390fd5b610ee960006120a3565b565b600d5481565b610ef9611860565b73ffffffffffffffffffffffffffffffffffffffff16610f17610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490613373565b60405180910390fd5b80600c8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610fb0906136c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdc906136c9565b80156110295780601f10610ffe57610100808354040283529160200191611029565b820191906000526020600020905b81548152906001019060200180831161100c57829003601f168201915b5050505050905090565b60026009541415611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906133b3565b60405180910390fd5b6002600981905550600160028111156110bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600a60009054906101000a900460ff166002811115611103577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a906133d3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a8906132f3565b60405180910390fd5b600f816111bd3361160a565b6111c791906134c7565b1115611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613353565b60405180910390fd5b61138881611214610a28565b61121e91906134c7565b111561125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613333565b60405180910390fd5b60006103e8600d5410156112f7576000600261127a3361160a565b1061128657600061129c565b61128f3361160a565b600261129b91906135a8565b5b9050808311156112b75780836112b291906135a8565b6112ba565b60005b600c546112c7919061354e565b9150808311156112d757806112d9565b825b600d60008282546112ea91906134c7565b9250508190555050611308565b81600c54611305919061354e565b90505b8034101561134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134290613313565b60405180910390fd5b6113553383612169565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe3383604051611386929190613232565b60405180910390a150600160098190555050565b6113a2611860565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611407576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611414611860565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114c1611860565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611506919061325b565b60405180910390a35050565b61151d848484611923565b61153c8373ffffffffffffffffffffffffffffffffffffffff16612187565b8015611551575061154f848484846121aa565b155b15611588576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061159982611812565b6115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613393565b60405180910390fd5b600b6115e38361230a565b6040516020016115f492919061317c565b6040516020818303038152906040529050919050565b6000611615826124b7565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116b8611860565b73ffffffffffffffffffffffffffffffffffffffff166116d6610f77565b73ffffffffffffffffffffffffffffffffffffffff161461172c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172390613373565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611793906132b3565b60405180910390fd5b6117a5816120a3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161181d61191a565b1115801561182c575060005482105b8015611859575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061192e82611e14565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611955611860565b73ffffffffffffffffffffffffffffffffffffffff16148061198857506119878260000151611982611860565b61161c565b5b806119cd5750611996611860565b73ffffffffffffffffffffffffffffffffffffffff166119b58461089c565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611a06576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ad6576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae38585856001612587565b611af36000848460000151611868565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611da457600054811015611da35782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e0d858585600161258d565b5050505050565b611e1c6129f9565b600082905080611e2a61191a565b11158015611e39575060005481105b1561206c576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161206a57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f4e57809250505061209e565b5b60011561206957818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461206457809250505061209e565b611f4f565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612183828260405180602001604052806000815250612593565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121d0611860565b8786866040518563ffffffff1660e01b81526004016121f294939291906131e6565b602060405180830381600087803b15801561220c57600080fd5b505af192505050801561223d57506040513d601f19601f8201168201806040525081019061223a9190612d97565b60015b6122b7573d806000811461226d576040519150601f19603f3d011682016040523d82523d6000602084013e612272565b606091505b506000815114156122af576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612352576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b2565b600082905060005b6000821461238457808061236d9061372c565b915050600a8261237d919061351d565b915061235a565b60008167ffffffffffffffff8111156123c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123f85781602001600182028036833780820191505090505b5090505b600085146124ab5760018261241191906135a8565b9150600a856124209190613775565b603061242c91906134c7565b60f81b818381518110612468577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124a4919061351d565b94506123fc565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561251f576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6125a083838360016125a5565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612612576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561264d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61265a6000868387612587565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561282457506128238773ffffffffffffffffffffffffffffffffffffffff16612187565b5b156128ea575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461289960008884806001019550886121aa565b6128cf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561282a5782600054146128e557600080fd5b612956565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156128eb575b81600081905550505061296c600086838761258d565b5050505050565b82805461297f906136c9565b90600052602060002090601f0160209004810192826129a157600085556129e8565b82601f106129ba57803560ff19168380011785556129e8565b828001600101855582156129e8579182015b828111156129e75782358255916020019190600101906129cc565b5b5090506129f59190612a3c565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612a55576000816000905550600101612a3d565b5090565b6000612a6c612a6784613433565b61340e565b905082815260208101848484011115612a8457600080fd5b612a8f848285613687565b509392505050565b600081359050612aa681613af1565b92915050565b600081359050612abb81613b08565b92915050565b600081359050612ad081613b1f565b92915050565b600081359050612ae581613b36565b92915050565b600081519050612afa81613b36565b92915050565b600082601f830112612b1157600080fd5b8135612b21848260208601612a59565b91505092915050565b600081359050612b3981613b4d565b92915050565b60008083601f840112612b5157600080fd5b8235905067ffffffffffffffff811115612b6a57600080fd5b602083019150836001820283011115612b8257600080fd5b9250929050565b600081359050612b9881613b5d565b92915050565b600060208284031215612bb057600080fd5b6000612bbe84828501612a97565b91505092915050565b600060208284031215612bd957600080fd5b6000612be784828501612aac565b91505092915050565b60008060408385031215612c0357600080fd5b6000612c1185828601612a97565b9250506020612c2285828601612a97565b9150509250929050565b600080600060608486031215612c4157600080fd5b6000612c4f86828701612a97565b9350506020612c6086828701612a97565b9250506040612c7186828701612b89565b9150509250925092565b60008060008060808587031215612c9157600080fd5b6000612c9f87828801612a97565b9450506020612cb087828801612a97565b9350506040612cc187828801612b89565b925050606085013567ffffffffffffffff811115612cde57600080fd5b612cea87828801612b00565b91505092959194509250565b60008060408385031215612d0957600080fd5b6000612d1785828601612a97565b9250506020612d2885828601612ac1565b9150509250929050565b60008060408385031215612d4557600080fd5b6000612d5385828601612a97565b9250506020612d6485828601612b89565b9150509250929050565b600060208284031215612d8057600080fd5b6000612d8e84828501612ad6565b91505092915050565b600060208284031215612da957600080fd5b6000612db784828501612aeb565b91505092915050565b600060208284031215612dd257600080fd5b6000612de084828501612b2a565b91505092915050565b60008060208385031215612dfc57600080fd5b600083013567ffffffffffffffff811115612e1657600080fd5b612e2285828601612b3f565b92509250509250929050565b600060208284031215612e4057600080fd5b6000612e4e84828501612b89565b91505092915050565b612e60816135dc565b82525050565b612e6f81613600565b82525050565b6000612e8082613479565b612e8a818561348f565b9350612e9a818560208601613696565b612ea381613891565b840191505092915050565b612eb781613675565b82525050565b6000612ec882613484565b612ed281856134ab565b9350612ee2818560208601613696565b612eeb81613891565b840191505092915050565b6000612f0182613484565b612f0b81856134bc565b9350612f1b818560208601613696565b80840191505092915050565b60008154612f34816136c9565b612f3e81866134bc565b94506001821660008114612f595760018114612f6a57612f9d565b60ff19831686528186019350612f9d565b612f7385613464565b60005b83811015612f9557815481890152600182019150602081019050612f76565b838801955050505b50505092915050565b6000612fb36026836134ab565b9150612fbe826138a2565b604082019050919050565b6000612fd66011836134ab565b9150612fe1826138f1565b602082019050919050565b6000612ff9601b836134ab565b91506130048261391a565b602082019050919050565b600061301c6010836134ab565b915061302782613943565b602082019050919050565b600061303f6015836134ab565b915061304a8261396c565b602082019050919050565b6000613062601b836134ab565b915061306d82613995565b602082019050919050565b60006130856005836134bc565b9150613090826139be565b600582019050919050565b60006130a86020836134ab565b91506130b3826139e7565b602082019050919050565b60006130cb602f836134ab565b91506130d682613a10565b604082019050919050565b60006130ee6000836134a0565b91506130f982613a5f565b600082019050919050565b6000613111601f836134ab565b915061311c82613a62565b602082019050919050565b60006131346011836134ab565b915061313f82613a8b565b602082019050919050565b60006131576001836134bc565b915061316282613ab4565b600182019050919050565b6131768161366b565b82525050565b60006131888285612f27565b91506131938261314a565b915061319f8284612ef6565b91506131aa82613078565b91508190509392505050565b60006131c1826130e1565b9150819050919050565b60006020820190506131e06000830184612e57565b92915050565b60006080820190506131fb6000830187612e57565b6132086020830186612e57565b613215604083018561316d565b81810360608301526132278184612e75565b905095945050505050565b60006040820190506132476000830185612e57565b613254602083018461316d565b9392505050565b60006020820190506132706000830184612e66565b92915050565b600060208201905061328b6000830184612eae565b92915050565b600060208201905081810360008301526132ab8184612ebd565b905092915050565b600060208201905081810360008301526132cc81612fa6565b9050919050565b600060208201905081810360008301526132ec81612fc9565b9050919050565b6000602082019050818103600083015261330c81612fec565b9050919050565b6000602082019050818103600083015261332c8161300f565b9050919050565b6000602082019050818103600083015261334c81613032565b9050919050565b6000602082019050818103600083015261336c81613055565b9050919050565b6000602082019050818103600083015261338c8161309b565b9050919050565b600060208201905081810360008301526133ac816130be565b9050919050565b600060208201905081810360008301526133cc81613104565b9050919050565b600060208201905081810360008301526133ec81613127565b9050919050565b6000602082019050613408600083018461316d565b92915050565b6000613418613429565b905061342482826136fb565b919050565b6000604051905090565b600067ffffffffffffffff82111561344e5761344d613862565b5b61345782613891565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006134d28261366b565b91506134dd8361366b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613512576135116137a6565b5b828201905092915050565b60006135288261366b565b91506135338361366b565b925082613543576135426137d5565b5b828204905092915050565b60006135598261366b565b91506135648361366b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561359d5761359c6137a6565b5b828202905092915050565b60006135b38261366b565b91506135be8361366b565b9250828210156135d1576135d06137a6565b5b828203905092915050565b60006135e78261364b565b9050919050565b60006135f98261364b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061364682613add565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061368082613638565b9050919050565b82818337600083830152505050565b60005b838110156136b4578082015181840152602081019050613699565b838111156136c3576000848401525b50505050565b600060028204905060018216806136e157607f821691505b602082108114156136f5576136f4613833565b5b50919050565b61370482613891565b810181811067ffffffffffffffff8211171561372357613722613862565b5b80604052505050565b60006137378261366b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561376a576137696137a6565b5b600182019050919050565b60006137808261366b565b915061378b8361366b565b92508261379b5761379a6137d5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f2d5769746864726177206661696c65642d000000000000000000000000000000600082015250565b7f2d436f6e74726163742063616c6c206e6f7420616c6c6f7765642d0000000000600082015250565b7f2d4e6f7420656e6f756768204554482d00000000000000000000000000000000600082015250565b7f2d4e6f7420656e6f756768207175616e746974792d0000000000000000000000600082015250565b7f2d54686973206973206d6f7265207468616e20616c6c6f7765642d0000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2d4e6f742073746172746564207965742d000000000000000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b60038110613aee57613aed613804565b5b50565b613afa816135dc565b8114613b0557600080fd5b50565b613b11816135ee565b8114613b1c57600080fd5b50565b613b2881613600565b8114613b3357600080fd5b50565b613b3f8161360c565b8114613b4a57600080fd5b50565b60038110613b5a57600080fd5b50565b613b668161366b565b8114613b7157600080fd5b5056fea2646970667358221220ac177167d670e3023b01149b6650887a1909a9dafa3f518f9b78dc629ebbbe1864736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5152524e4646417a6864516a46376b556b70394c585562775763387a636156786f54676b72625450484333450000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c80636352211e116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610643578063dc33e68114610680578063e985e9c5146106bd578063f2fde38b146106fa576101cd565b806395d89b41146105aa578063a0712d68146105d5578063a22cb465146105f1578063b88d4fde1461061a576101cd565b8063715018a6116100d1578063715018a61461051457806382481c0e1461052b5780638d6cc56d146105565780638da5cb5b1461057f576101cd565b80636352211e1461046f57806363eb8bb6146104ac57806370a08231146104d7576101cd565b8063200d2ed21161016f57806342842e0e1161013e57806342842e0e146103c957806351cff8d9146103f257806355f804b31461041b578063611f3f1014610444576101cd565b8063200d2ed21461032157806323b872dd1461034c5780632e49d78b1461037557806332cb6b0c1461039e576101cd565b8063081812fc116101ab578063081812fc14610265578063095ea7b3146102a257806316154862146102cb57806318160ddd146102f6576101cd565b806301ffc9a7146101d25780630528eb431461020f57806306fdde031461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612d6e565b610723565b604051610206919061325b565b60405180910390f35b34801561021b57600080fd5b50610224610805565b60405161023191906133f3565b60405180910390f35b34801561024657600080fd5b5061024f61080a565b60405161025c9190613291565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190612e2e565b61089c565b60405161029991906131cb565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612d32565b610918565b005b3480156102d757600080fd5b506102e0610a23565b6040516102ed91906133f3565b60405180910390f35b34801561030257600080fd5b5061030b610a28565b60405161031891906133f3565b60405180910390f35b34801561032d57600080fd5b50610336610a3f565b6040516103439190613276565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190612c2c565b610a52565b005b34801561038157600080fd5b5061039c60048036038101906103979190612dc0565b610a62565b005b3480156103aa57600080fd5b506103b3610b31565b6040516103c091906133f3565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190612c2c565b610b37565b005b3480156103fe57600080fd5b5061041960048036038101906104149190612bc7565b610b57565b005b34801561042757600080fd5b50610442600480360381019061043d9190612de9565b610cdf565b005b34801561045057600080fd5b50610459610d71565b60405161046691906133f3565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190612e2e565b610d77565b6040516104a391906131cb565b60405180910390f35b3480156104b857600080fd5b506104c1610d8d565b6040516104ce91906133f3565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190612b9e565b610d93565b60405161050b91906133f3565b60405180910390f35b34801561052057600080fd5b50610529610e63565b005b34801561053757600080fd5b50610540610eeb565b60405161054d91906133f3565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612e2e565b610ef1565b005b34801561058b57600080fd5b50610594610f77565b6040516105a191906131cb565b60405180910390f35b3480156105b657600080fd5b506105bf610fa1565b6040516105cc9190613291565b60405180910390f35b6105ef60048036038101906105ea9190612e2e565b611033565b005b3480156105fd57600080fd5b5061061860048036038101906106139190612cf6565b61139a565b005b34801561062657600080fd5b50610641600480360381019061063c9190612c7b565b611512565b005b34801561064f57600080fd5b5061066a60048036038101906106659190612e2e565b61158e565b6040516106779190613291565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190612b9e565b61160a565b6040516106b491906133f3565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190612bf0565b61161c565b6040516106f1919061325b565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190612b9e565b6116b0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107fe57506107fd826117a8565b5b9050919050565b600281565b606060028054610819906136c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610845906136c9565b80156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050905090565b60006108a782611812565b6108dd576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061092382610d77565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109aa611860565b73ffffffffffffffffffffffffffffffffffffffff16141580156109dc57506109da816109d5611860565b61161c565b155b15610a13576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a1e838383611868565b505050565b600f81565b6000610a3261191a565b6001546000540303905090565b600a60009054906101000a900460ff1681565b610a5d838383611923565b505050565b610a6a611860565b73ffffffffffffffffffffffffffffffffffffffff16610a88610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad590613373565b60405180910390fd5b80600a60006101000a81548160ff02191690836002811115610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555050565b61138881565b610b5283838360405180602001604052806000815250611512565b505050565b610b5f611860565b73ffffffffffffffffffffffffffffffffffffffff16610b7d610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca90613373565b60405180910390fd5b60026009541415610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c10906133b3565b60405180910390fd5b6002600981905550600047905060008273ffffffffffffffffffffffffffffffffffffffff1682604051610c4c906131b6565b60006040518083038185875af1925050503d8060008114610c89576040519150601f19603f3d011682016040523d82523d6000602084013e610c8e565b606091505b5050905080610cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc9906132d3565b60405180910390fd5b5050600160098190555050565b610ce7611860565b73ffffffffffffffffffffffffffffffffffffffff16610d05610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290613373565b60405180910390fd5b8181600b9190610d6c929190612973565b505050565b600c5481565b6000610d8282611e14565b600001519050919050565b6103e881565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dfb576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e6b611860565b73ffffffffffffffffffffffffffffffffffffffff16610e89610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690613373565b60405180910390fd5b610ee960006120a3565b565b600d5481565b610ef9611860565b73ffffffffffffffffffffffffffffffffffffffff16610f17610f77565b73ffffffffffffffffffffffffffffffffffffffff1614610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490613373565b60405180910390fd5b80600c8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054610fb0906136c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fdc906136c9565b80156110295780601f10610ffe57610100808354040283529160200191611029565b820191906000526020600020905b81548152906001019060200180831161100c57829003601f168201915b5050505050905090565b60026009541415611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906133b3565b60405180910390fd5b6002600981905550600160028111156110bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600a60009054906101000a900460ff166002811115611103577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a906133d3565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a8906132f3565b60405180910390fd5b600f816111bd3361160a565b6111c791906134c7565b1115611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613353565b60405180910390fd5b61138881611214610a28565b61121e91906134c7565b111561125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613333565b60405180910390fd5b60006103e8600d5410156112f7576000600261127a3361160a565b1061128657600061129c565b61128f3361160a565b600261129b91906135a8565b5b9050808311156112b75780836112b291906135a8565b6112ba565b60005b600c546112c7919061354e565b9150808311156112d757806112d9565b825b600d60008282546112ea91906134c7565b9250508190555050611308565b81600c54611305919061354e565b90505b8034101561134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134290613313565b60405180910390fd5b6113553383612169565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe3383604051611386929190613232565b60405180910390a150600160098190555050565b6113a2611860565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611407576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611414611860565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114c1611860565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611506919061325b565b60405180910390a35050565b61151d848484611923565b61153c8373ffffffffffffffffffffffffffffffffffffffff16612187565b8015611551575061154f848484846121aa565b155b15611588576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061159982611812565b6115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613393565b60405180910390fd5b600b6115e38361230a565b6040516020016115f492919061317c565b6040516020818303038152906040529050919050565b6000611615826124b7565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116b8611860565b73ffffffffffffffffffffffffffffffffffffffff166116d6610f77565b73ffffffffffffffffffffffffffffffffffffffff161461172c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172390613373565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611793906132b3565b60405180910390fd5b6117a5816120a3565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008161181d61191a565b1115801561182c575060005482105b8015611859575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b600061192e82611e14565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611955611860565b73ffffffffffffffffffffffffffffffffffffffff16148061198857506119878260000151611982611860565b61161c565b5b806119cd5750611996611860565b73ffffffffffffffffffffffffffffffffffffffff166119b58461089c565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611a06576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ad6576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ae38585856001612587565b611af36000848460000151611868565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611da457600054811015611da35782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e0d858585600161258d565b5050505050565b611e1c6129f9565b600082905080611e2a61191a565b11158015611e39575060005481105b1561206c576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161206a57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611f4e57809250505061209e565b5b60011561206957818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461206457809250505061209e565b611f4f565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612183828260405180602001604052806000815250612593565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121d0611860565b8786866040518563ffffffff1660e01b81526004016121f294939291906131e6565b602060405180830381600087803b15801561220c57600080fd5b505af192505050801561223d57506040513d601f19601f8201168201806040525081019061223a9190612d97565b60015b6122b7573d806000811461226d576040519150601f19603f3d011682016040523d82523d6000602084013e612272565b606091505b506000815114156122af576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612352576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124b2565b600082905060005b6000821461238457808061236d9061372c565b915050600a8261237d919061351d565b915061235a565b60008167ffffffffffffffff8111156123c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156123f85781602001600182028036833780820191505090505b5090505b600085146124ab5760018261241191906135a8565b9150600a856124209190613775565b603061242c91906134c7565b60f81b818381518110612468577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124a4919061351d565b94506123fc565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561251f576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6125a083838360016125a5565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612612576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561264d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61265a6000868387612587565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561282457506128238773ffffffffffffffffffffffffffffffffffffffff16612187565b5b156128ea575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461289960008884806001019550886121aa565b6128cf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561282a5782600054146128e557600080fd5b612956565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808214156128eb575b81600081905550505061296c600086838761258d565b5050505050565b82805461297f906136c9565b90600052602060002090601f0160209004810192826129a157600085556129e8565b82601f106129ba57803560ff19168380011785556129e8565b828001600101855582156129e8579182015b828111156129e75782358255916020019190600101906129cc565b5b5090506129f59190612a3c565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612a55576000816000905550600101612a3d565b5090565b6000612a6c612a6784613433565b61340e565b905082815260208101848484011115612a8457600080fd5b612a8f848285613687565b509392505050565b600081359050612aa681613af1565b92915050565b600081359050612abb81613b08565b92915050565b600081359050612ad081613b1f565b92915050565b600081359050612ae581613b36565b92915050565b600081519050612afa81613b36565b92915050565b600082601f830112612b1157600080fd5b8135612b21848260208601612a59565b91505092915050565b600081359050612b3981613b4d565b92915050565b60008083601f840112612b5157600080fd5b8235905067ffffffffffffffff811115612b6a57600080fd5b602083019150836001820283011115612b8257600080fd5b9250929050565b600081359050612b9881613b5d565b92915050565b600060208284031215612bb057600080fd5b6000612bbe84828501612a97565b91505092915050565b600060208284031215612bd957600080fd5b6000612be784828501612aac565b91505092915050565b60008060408385031215612c0357600080fd5b6000612c1185828601612a97565b9250506020612c2285828601612a97565b9150509250929050565b600080600060608486031215612c4157600080fd5b6000612c4f86828701612a97565b9350506020612c6086828701612a97565b9250506040612c7186828701612b89565b9150509250925092565b60008060008060808587031215612c9157600080fd5b6000612c9f87828801612a97565b9450506020612cb087828801612a97565b9350506040612cc187828801612b89565b925050606085013567ffffffffffffffff811115612cde57600080fd5b612cea87828801612b00565b91505092959194509250565b60008060408385031215612d0957600080fd5b6000612d1785828601612a97565b9250506020612d2885828601612ac1565b9150509250929050565b60008060408385031215612d4557600080fd5b6000612d5385828601612a97565b9250506020612d6485828601612b89565b9150509250929050565b600060208284031215612d8057600080fd5b6000612d8e84828501612ad6565b91505092915050565b600060208284031215612da957600080fd5b6000612db784828501612aeb565b91505092915050565b600060208284031215612dd257600080fd5b6000612de084828501612b2a565b91505092915050565b60008060208385031215612dfc57600080fd5b600083013567ffffffffffffffff811115612e1657600080fd5b612e2285828601612b3f565b92509250509250929050565b600060208284031215612e4057600080fd5b6000612e4e84828501612b89565b91505092915050565b612e60816135dc565b82525050565b612e6f81613600565b82525050565b6000612e8082613479565b612e8a818561348f565b9350612e9a818560208601613696565b612ea381613891565b840191505092915050565b612eb781613675565b82525050565b6000612ec882613484565b612ed281856134ab565b9350612ee2818560208601613696565b612eeb81613891565b840191505092915050565b6000612f0182613484565b612f0b81856134bc565b9350612f1b818560208601613696565b80840191505092915050565b60008154612f34816136c9565b612f3e81866134bc565b94506001821660008114612f595760018114612f6a57612f9d565b60ff19831686528186019350612f9d565b612f7385613464565b60005b83811015612f9557815481890152600182019150602081019050612f76565b838801955050505b50505092915050565b6000612fb36026836134ab565b9150612fbe826138a2565b604082019050919050565b6000612fd66011836134ab565b9150612fe1826138f1565b602082019050919050565b6000612ff9601b836134ab565b91506130048261391a565b602082019050919050565b600061301c6010836134ab565b915061302782613943565b602082019050919050565b600061303f6015836134ab565b915061304a8261396c565b602082019050919050565b6000613062601b836134ab565b915061306d82613995565b602082019050919050565b60006130856005836134bc565b9150613090826139be565b600582019050919050565b60006130a86020836134ab565b91506130b3826139e7565b602082019050919050565b60006130cb602f836134ab565b91506130d682613a10565b604082019050919050565b60006130ee6000836134a0565b91506130f982613a5f565b600082019050919050565b6000613111601f836134ab565b915061311c82613a62565b602082019050919050565b60006131346011836134ab565b915061313f82613a8b565b602082019050919050565b60006131576001836134bc565b915061316282613ab4565b600182019050919050565b6131768161366b565b82525050565b60006131888285612f27565b91506131938261314a565b915061319f8284612ef6565b91506131aa82613078565b91508190509392505050565b60006131c1826130e1565b9150819050919050565b60006020820190506131e06000830184612e57565b92915050565b60006080820190506131fb6000830187612e57565b6132086020830186612e57565b613215604083018561316d565b81810360608301526132278184612e75565b905095945050505050565b60006040820190506132476000830185612e57565b613254602083018461316d565b9392505050565b60006020820190506132706000830184612e66565b92915050565b600060208201905061328b6000830184612eae565b92915050565b600060208201905081810360008301526132ab8184612ebd565b905092915050565b600060208201905081810360008301526132cc81612fa6565b9050919050565b600060208201905081810360008301526132ec81612fc9565b9050919050565b6000602082019050818103600083015261330c81612fec565b9050919050565b6000602082019050818103600083015261332c8161300f565b9050919050565b6000602082019050818103600083015261334c81613032565b9050919050565b6000602082019050818103600083015261336c81613055565b9050919050565b6000602082019050818103600083015261338c8161309b565b9050919050565b600060208201905081810360008301526133ac816130be565b9050919050565b600060208201905081810360008301526133cc81613104565b9050919050565b600060208201905081810360008301526133ec81613127565b9050919050565b6000602082019050613408600083018461316d565b92915050565b6000613418613429565b905061342482826136fb565b919050565b6000604051905090565b600067ffffffffffffffff82111561344e5761344d613862565b5b61345782613891565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006134d28261366b565b91506134dd8361366b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613512576135116137a6565b5b828201905092915050565b60006135288261366b565b91506135338361366b565b925082613543576135426137d5565b5b828204905092915050565b60006135598261366b565b91506135648361366b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561359d5761359c6137a6565b5b828202905092915050565b60006135b38261366b565b91506135be8361366b565b9250828210156135d1576135d06137a6565b5b828203905092915050565b60006135e78261364b565b9050919050565b60006135f98261364b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061364682613add565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061368082613638565b9050919050565b82818337600083830152505050565b60005b838110156136b4578082015181840152602081019050613699565b838111156136c3576000848401525b50505050565b600060028204905060018216806136e157607f821691505b602082108114156136f5576136f4613833565b5b50919050565b61370482613891565b810181811067ffffffffffffffff8211171561372357613722613862565b5b80604052505050565b60006137378261366b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561376a576137696137a6565b5b600182019050919050565b60006137808261366b565b915061378b8361366b565b92508261379b5761379a6137d5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f2d5769746864726177206661696c65642d000000000000000000000000000000600082015250565b7f2d436f6e74726163742063616c6c206e6f7420616c6c6f7765642d0000000000600082015250565b7f2d4e6f7420656e6f756768204554482d00000000000000000000000000000000600082015250565b7f2d4e6f7420656e6f756768207175616e746974792d0000000000000000000000600082015250565b7f2d54686973206973206d6f7265207468616e20616c6c6f7765642d0000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f2d4e6f742073746172746564207965742d000000000000000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b60038110613aee57613aed613804565b5b50565b613afa816135dc565b8114613b0557600080fd5b50565b613b11816135ee565b8114613b1c57600080fd5b50565b613b2881613600565b8114613b3357600080fd5b50565b613b3f8161360c565b8114613b4a57600080fd5b50565b60038110613b5a57600080fd5b50565b613b668161366b565b8114613b7157600080fd5b5056fea2646970667358221220ac177167d670e3023b01149b6650887a1909a9dafa3f518f9b78dc629ebbbe1864736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5152524e4646417a6864516a46376b556b70394c585562775763387a636156786f54676b72625450484333450000000000000000000000
-----Decoded View---------------
Arg [0] : initBaseURI (string): ipfs://QmQRRNFFAzhdQjF7kUkp9LXUbwWc8zcaVxoTgkrbTPHC3E
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [2] : 697066733a2f2f516d5152524e4646417a6864516a46376b556b70394c585562
Arg [3] : 775763387a636156786f54676b72625450484333450000000000000000000000
Deployed Bytecode Sourcemap
214:3324:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4843:300:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;492:50:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8139:98:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9595:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9172:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;440:46:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4114:297:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;386:20:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10426:164:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3070:87:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;599:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10656:179:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3163:271:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1537:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;548:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7955:122:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;646:47:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5202:203:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;;;;;;;;;;;:::i;:::-;;699:38:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3440:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1036:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8301:102:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1647:1300:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9862:274:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10901:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1143:388:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2953:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10202:162:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4843:300:12;4945:4;4995:25;4980:40;;;:11;:40;;;;:104;;;;5051:33;5036:48;;;:11;:48;;;;4980:104;:156;;;;5100:36;5124:11;5100:23;:36::i;:::-;4980:156;4961:175;;4843:300;;;:::o;492:50:11:-;541:1;492:50;:::o;8139:98:12:-;8193:13;8225:5;8218:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8139:98;:::o;9595:200::-;9663:7;9687:16;9695:7;9687;:16::i;:::-;9682:64;;9712:34;;;;;;;;;;;;;;9682:64;9764:15;:24;9780:7;9764:24;;;;;;;;;;;;;;;;;;;;;9757:31;;9595:200;;;:::o;9172:362::-;9244:13;9260:24;9276:7;9260:15;:24::i;:::-;9244:40;;9304:5;9298:11;;:2;:11;;;9294:48;;;9318:24;;;;;;;;;;;;;;9294:48;9373:5;9357:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;9383:37;9400:5;9407:12;:10;:12::i;:::-;9383:16;:37::i;:::-;9382:38;9357:63;9353:136;;;9443:35;;;;;;;;;;;;;;9353:136;9499:28;9508:2;9512:7;9521:5;9499:8;:28::i;:::-;9172:362;;;:::o;440:46:11:-;484:2;440:46;:::o;4114:297:12:-;4158:7;4379:15;:13;:15::i;:::-;4364:12;;4348:13;;:28;:46;4341:53;;4114:297;:::o;386:20:11:-;;;;;;;;;;;;;:::o;10426:164:12:-;10555:28;10565:4;10571:2;10575:7;10555:9;:28::i;:::-;10426:164;;;:::o;3070:87:11:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3143:7:11::1;3134:6;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3070:87:::0;:::o;599:41::-;636:4;599:41;:::o;10656:179:12:-;10789:39;10806:4;10812:2;10816:7;10789:39;;;;;;;;;;;;:16;:39::i;:::-;10656:179;;;:::o;3163:271:11:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:1::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;3278:15:11::2;3296:21;3278:39;;3328:12;3346:9;:14;;3368:7;3346:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3327:53;;;3398:7;3390:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;2484:1:1;;1701::::1;2628:7;:22;;;;3163:271:11::0;:::o;1537:104::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1624:10:11::1;;1614:7;:20;;;;;;;:::i;:::-;;1537:104:::0;;:::o;548:45::-;;;;:::o;7955:122:12:-;8019:7;8045:20;8057:7;8045:11;:20::i;:::-;:25;;;8038:32;;7955:122;;;:::o;646:47:11:-;689:4;646:47;:::o;5202:203:12:-;5266:7;5306:1;5289:19;;:5;:19;;;5285:60;;;5317:28;;;;;;;;;;;;;;5285:60;5370:12;:19;5383:5;5370:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;5362:36;;5355:43;;5202:203;;;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;699:38:11:-;;;;:::o;3440:96::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3522:7:11::1;3507:12;:22;;;;3440:96:::0;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;8301:102:12:-;8357:13;8389:7;8382:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8301:102;:::o;1647:1300:11:-;1744:1:1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;1737:14:11::1;1727:24;;;;;;;;;;;;;;;;:6;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;1719:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;1804:10;1791:23;;:9;:23;;;1783:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;484:2;1904:8;1877:24;1890:10;1877:12;:24::i;:::-;:35;;;;:::i;:::-;:56;;1856:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;636:4;2033:8;2017:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;1996:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;2113:13;689:4;2140:19;;:38;2136:664;;;2194:23;541:1;2221:24;2234:10;2221:12;:24::i;:::-;:65;2220:157;;2376:1;2220:157;;;2332:24;2345:10;2332:12;:24::i;:::-;541:1;2307:49;;;;:::i;:::-;2220:157;2194:183;;2482:15;2470:8;:27;;2469:112;;2565:15;2554:8;:26;;;;:::i;:::-;2469:112;;;2525:1;2469:112;2416:12;;:183;;;;:::i;:::-;2392:207;;2668:15;2656:8;:27;;2655:58;;2698:15;2655:58;;;2687:8;2655:58;2614:19;;:113;;;;;;;:::i;:::-;;;;;;;;2136:664;;;;2781:8;2766:12;;:23;;;;:::i;:::-;2758:31;;2136:664;2830:5;2817:9;:18;;2809:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;2866:31;2876:10;2888:8;2866:9;:31::i;:::-;2912:28;2919:10;2931:8;2912:28;;;;;;;:::i;:::-;;;;;;;;2484:1:1;1701::::0;2628:7;:22;;;;1647:1300:11;:::o;9862:274:12:-;9964:12;:10;:12::i;:::-;9952:24;;:8;:24;;;9948:54;;;9985:17;;;;;;;;;;;;;;9948:54;10058:8;10013:18;:32;10032:12;:10;:12::i;:::-;10013:32;;;;;;;;;;;;;;;:42;10046:8;10013:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;10110:8;10081:48;;10096:12;:10;:12::i;:::-;10081:48;;;10120:8;10081:48;;;;;;:::i;:::-;;;;;;;;9862:274;;:::o;10901:359::-;11062:28;11072:4;11078:2;11082:7;11062:9;:28::i;:::-;11104:15;:2;:13;;;:15::i;:::-;:76;;;;;11124:56;11155:4;11161:2;11165:7;11174:5;11124:30;:56::i;:::-;11123:57;11104:76;11100:154;;;11203:40;;;;;;;;;;;;;;11100:154;10901:359;;;;:::o;1143:388:11:-;1257:13;1307:17;1315:8;1307:7;:17::i;:::-;1286:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;1467:7;1481:19;:8;:17;:19::i;:::-;1450:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1407:117;;1143:388;;;:::o;2953:111::-;3011:7;3037:20;3051:5;3037:13;:20::i;:::-;3030:27;;2953:111;;;:::o;10202:162:12:-;10299:4;10322:18;:25;10341:5;10322:25;;;;;;;;;;;;;;;:35;10348:8;10322:35;;;;;;;;;;;;;;;;;;;;;;;;;10315:42;;10202:162;;;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;829:155:9:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;11506:184:12:-;11563:4;11605:7;11586:15;:13;:15::i;:::-;:26;;:53;;;;;11626:13;;11616:7;:23;11586:53;:97;;;;;11656:11;:20;11668:7;11656:20;;;;;;;;;;;:27;;;;;;;;;;;;11655:28;11586:97;11579:104;;11506:184;;;:::o;640:96:7:-;693:7;719:10;712:17;;640:96;:::o;18922:189:12:-;19059:2;19032:15;:24;19048:7;19032:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19096:7;19092:2;19076:28;;19085:5;19076:28;;;;;;;;;;;;18922:189;;;:::o;1038:99:11:-;1103:7;1129:1;1122:8;;1038:99;:::o;14528:2067:12:-;14638:35;14676:20;14688:7;14676:11;:20::i;:::-;14638:58;;14707:22;14749:13;:18;;;14733:34;;:12;:10;:12::i;:::-;:34;;;:100;;;;14783:50;14800:13;:18;;;14820:12;:10;:12::i;:::-;14783:16;:50::i;:::-;14733:100;:152;;;;14873:12;:10;:12::i;:::-;14849:36;;:20;14861:7;14849:11;:20::i;:::-;:36;;;14733:152;14707:179;;14902:17;14897:66;;14928:35;;;;;;;;;;;;;;14897:66;14999:4;14977:26;;:13;:18;;;:26;;;14973:67;;15012:28;;;;;;;;;;;;;;14973:67;15068:1;15054:16;;:2;:16;;;15050:52;;;15079:23;;;;;;;;;;;;;;15050:52;15113:43;15135:4;15141:2;15145:7;15154:1;15113:21;:43::i;:::-;15218:49;15235:1;15239:7;15248:13;:18;;;15218:8;:49::i;:::-;15587:1;15557:12;:18;15570:4;15557:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15630:1;15602:12;:16;15615:2;15602:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15674:2;15646:11;:20;15658:7;15646:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;15735:15;15690:11;:20;15702:7;15690:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;15999:19;16031:1;16021:7;:11;15999:33;;16091:1;16050:43;;:11;:24;16062:11;16050:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;16046:438;;;16272:13;;16258:11;:27;16254:216;;;16341:13;:18;;;16309:11;:24;16321:11;16309:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;16423:13;:28;;;16381:11;:24;16393:11;16381:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;16254:216;16046:438;14528:2067;16528:7;16524:2;16509:27;;16518:4;16509:27;;;;;;;;;;;;16546:42;16567:4;16573:2;16577:7;16586:1;16546:20;:42::i;:::-;14528:2067;;;;;:::o;6815:1083::-;6876:21;;:::i;:::-;6909:12;6924:7;6909:22;;6989:4;6970:15;:13;:15::i;:::-;:23;;:47;;;;;7004:13;;6997:4;:20;6970:47;6966:868;;;7037:31;7071:11;:17;7083:4;7071:17;;;;;;;;;;;7037:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7111:9;:16;;;7106:714;;7181:1;7155:28;;:9;:14;;;:28;;;7151:99;;7218:9;7211:16;;;;;;7151:99;7547:255;7554:4;7547:255;;;7586:6;;;;;;;;7630:11;:17;7642:4;7630:17;;;;;;;;;;;7618:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7703:1;7677:28;;:9;:14;;;:28;;;7673:107;;7744:9;7737:16;;;;;;7673:107;7547:255;;;7106:714;6966:868;;7860:31;;;;;;;;;;;;;;6815:1083;;;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2270:187;;:::o;11696:102:12:-;11764:27;11774:2;11778:8;11764:27;;;;;;;;;;;;:9;:27::i;:::-;11696:102;;:::o;1175:320:6:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;19592:650:12:-;19750:4;19786:2;19770:36;;;19807:12;:10;:12::i;:::-;19821:4;19827:7;19836:5;19770:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19766:470;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20018:1;20001:6;:13;:18;19997:229;;;20046:40;;;;;;;;;;;;;;19997:229;20186:6;20180:13;20171:6;20167:2;20163:15;20156:38;19766:470;19898:45;;;19888:55;;;:6;:55;;;;19881:62;;;19592:650;;;;;;:::o;328:703:8:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;5482:204:12:-;5543:7;5583:1;5566:19;;:5;:19;;;5562:59;;;5594:27;;;;;;;;;;;;;;5562:59;5646:12;:19;5659:5;5646:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;5638:41;;5631:48;;5482:204;;;:::o;20873:154::-;;;;;:::o;21668:153::-;;;;;:::o;12149:157::-;12267:32;12273:2;12277:8;12287:5;12294:4;12267:5;:32::i;:::-;12149:157;;;:::o;12553:1733::-;12686:20;12709:13;;12686:36;;12750:1;12736:16;;:2;:16;;;12732:48;;;12761:19;;;;;;;;;;;;;;12732:48;12806:1;12794:8;:13;12790:44;;;12816:18;;;;;;;;;;;;;;12790:44;12845:61;12875:1;12879:2;12883:12;12897:8;12845:21;:61::i;:::-;13212:8;13177:12;:16;13190:2;13177:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13275:8;13235:12;:16;13248:2;13235:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13332:2;13299:11;:25;13311:12;13299:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;13398:15;13348:11;:25;13360:12;13348:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;13429:20;13452:12;13429:35;;13478:11;13507:8;13492:12;:23;13478:37;;13534:4;:23;;;;;13542:15;:2;:13;;;:15::i;:::-;13534:23;13530:628;;;13577:309;13632:12;13628:2;13607:38;;13624:1;13607:38;;;;;;;;;;;;13672:69;13711:1;13715:2;13719:14;;;;;;13735:5;13672:30;:69::i;:::-;13667:172;;13776:40;;;;;;;;;;;;;;13667:172;13881:3;13865:12;:19;;13577:309;;13965:12;13948:13;;:29;13944:43;;13979:8;;;13944:43;13530:628;;;14026:118;14081:14;;;;;;14077:2;14056:40;;14073:1;14056:40;;;;;;;;;;;;14139:3;14123:12;:19;;14026:118;;13530:628;14187:12;14171:13;:28;;;;12553:1733;;14219:60;14248:1;14252:2;14256:12;14270:8;14219:20;:60::i;:::-;12553:1733;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:13:-;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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:155::-;555:5;593:6;580:20;571:29;;609:41;644:5;609:41;:::i;:::-;561:95;;;;:::o;662:133::-;705:5;743:6;730:20;721:29;;759:30;783:5;759:30;:::i;:::-;711:84;;;;:::o;801:137::-;846:5;884:6;871:20;862:29;;900:32;926:5;900:32;:::i;:::-;852:86;;;;:::o;944:141::-;1000:5;1031:6;1025:13;1016:22;;1047:32;1073:5;1047:32;:::i;:::-;1006:79;;;;:::o;1104:271::-;1159:5;1208:3;1201:4;1193:6;1189:17;1185:27;1175:2;;1226:1;1223;1216:12;1175:2;1266:6;1253:20;1291:78;1365:3;1357:6;1350:4;1342:6;1338:17;1291:78;:::i;:::-;1282:87;;1165:210;;;;;:::o;1381:159::-;1437:5;1475:6;1462:20;1453:29;;1491:43;1528:5;1491:43;:::i;:::-;1443:97;;;;:::o;1560:352::-;1618:8;1628:6;1678:3;1671:4;1663:6;1659:17;1655:27;1645:2;;1696:1;1693;1686:12;1645:2;1732:6;1719:20;1709:30;;1762:18;1754:6;1751:30;1748:2;;;1794:1;1791;1784:12;1748:2;1831:4;1823:6;1819:17;1807:29;;1885:3;1877:4;1869:6;1865:17;1855:8;1851:32;1848:41;1845:2;;;1902:1;1899;1892:12;1845:2;1635:277;;;;;:::o;1918:139::-;1964:5;2002:6;1989:20;1980:29;;2018:33;2045:5;2018:33;:::i;:::-;1970:87;;;;:::o;2063:262::-;2122:6;2171:2;2159:9;2150:7;2146:23;2142:32;2139:2;;;2187:1;2184;2177:12;2139:2;2230:1;2255:53;2300:7;2291:6;2280:9;2276:22;2255:53;:::i;:::-;2245:63;;2201:117;2129:196;;;;:::o;2331:278::-;2398:6;2447:2;2435:9;2426:7;2422:23;2418:32;2415:2;;;2463:1;2460;2453:12;2415:2;2506:1;2531:61;2584:7;2575:6;2564:9;2560:22;2531:61;:::i;:::-;2521:71;;2477:125;2405:204;;;;:::o;2615:407::-;2683:6;2691;2740:2;2728:9;2719:7;2715:23;2711:32;2708:2;;;2756:1;2753;2746:12;2708:2;2799:1;2824:53;2869:7;2860:6;2849:9;2845:22;2824:53;:::i;:::-;2814:63;;2770:117;2926:2;2952:53;2997:7;2988:6;2977:9;2973:22;2952:53;:::i;:::-;2942:63;;2897:118;2698:324;;;;;:::o;3028:552::-;3105:6;3113;3121;3170:2;3158:9;3149:7;3145:23;3141:32;3138:2;;;3186:1;3183;3176:12;3138:2;3229:1;3254:53;3299:7;3290:6;3279:9;3275:22;3254:53;:::i;:::-;3244:63;;3200:117;3356:2;3382:53;3427:7;3418:6;3407:9;3403:22;3382:53;:::i;:::-;3372:63;;3327:118;3484:2;3510:53;3555:7;3546:6;3535:9;3531:22;3510:53;:::i;:::-;3500:63;;3455:118;3128:452;;;;;:::o;3586:809::-;3681:6;3689;3697;3705;3754:3;3742:9;3733:7;3729:23;3725:33;3722:2;;;3771:1;3768;3761:12;3722:2;3814:1;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3785:117;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;4069:2;4095:53;4140:7;4131:6;4120:9;4116:22;4095:53;:::i;:::-;4085:63;;4040:118;4225:2;4214:9;4210:18;4197:32;4256:18;4248:6;4245:30;4242:2;;;4288:1;4285;4278:12;4242:2;4316:62;4370:7;4361:6;4350:9;4346:22;4316:62;:::i;:::-;4306:72;;4168:220;3712:683;;;;;;;:::o;4401:401::-;4466:6;4474;4523:2;4511:9;4502:7;4498:23;4494:32;4491:2;;;4539:1;4536;4529:12;4491:2;4582:1;4607:53;4652:7;4643:6;4632:9;4628:22;4607:53;:::i;:::-;4597:63;;4553:117;4709:2;4735:50;4777:7;4768:6;4757:9;4753:22;4735:50;:::i;:::-;4725:60;;4680:115;4481:321;;;;;:::o;4808:407::-;4876:6;4884;4933:2;4921:9;4912:7;4908:23;4904:32;4901:2;;;4949:1;4946;4939:12;4901:2;4992:1;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4963:117;5119:2;5145:53;5190:7;5181:6;5170:9;5166:22;5145:53;:::i;:::-;5135:63;;5090:118;4891:324;;;;;:::o;5221:260::-;5279:6;5328:2;5316:9;5307:7;5303:23;5299:32;5296:2;;;5344:1;5341;5334:12;5296:2;5387:1;5412:52;5456:7;5447:6;5436:9;5432:22;5412:52;:::i;:::-;5402:62;;5358:116;5286:195;;;;:::o;5487:282::-;5556:6;5605:2;5593:9;5584:7;5580:23;5576:32;5573:2;;;5621:1;5618;5611:12;5573:2;5664:1;5689:63;5744:7;5735:6;5724:9;5720:22;5689:63;:::i;:::-;5679:73;;5635:127;5563:206;;;;:::o;5775:282::-;5844:6;5893:2;5881:9;5872:7;5868:23;5864:32;5861:2;;;5909:1;5906;5899:12;5861:2;5952:1;5977:63;6032:7;6023:6;6012:9;6008:22;5977:63;:::i;:::-;5967:73;;5923:127;5851:206;;;;:::o;6063:395::-;6134:6;6142;6191:2;6179:9;6170:7;6166:23;6162:32;6159:2;;;6207:1;6204;6197:12;6159:2;6278:1;6267:9;6263:17;6250:31;6308:18;6300:6;6297:30;6294:2;;;6340:1;6337;6330:12;6294:2;6376:65;6433:7;6424:6;6413:9;6409:22;6376:65;:::i;:::-;6358:83;;;;6221:230;6149:309;;;;;:::o;6464:262::-;6523:6;6572:2;6560:9;6551:7;6547:23;6543:32;6540:2;;;6588:1;6585;6578:12;6540:2;6631:1;6656:53;6701:7;6692:6;6681:9;6677:22;6656:53;:::i;:::-;6646:63;;6602:117;6530:196;;;;:::o;6732:118::-;6819:24;6837:5;6819:24;:::i;:::-;6814:3;6807:37;6797:53;;:::o;6856:109::-;6937:21;6952:5;6937:21;:::i;:::-;6932:3;6925:34;6915:50;;:::o;6971:360::-;7057:3;7085:38;7117:5;7085:38;:::i;:::-;7139:70;7202:6;7197:3;7139:70;:::i;:::-;7132:77;;7218:52;7263:6;7258:3;7251:4;7244:5;7240:16;7218:52;:::i;:::-;7295:29;7317:6;7295:29;:::i;:::-;7290:3;7286:39;7279:46;;7061:270;;;;;:::o;7337:147::-;7432:45;7471:5;7432:45;:::i;:::-;7427:3;7420:58;7410:74;;:::o;7490:364::-;7578:3;7606:39;7639:5;7606:39;:::i;:::-;7661:71;7725:6;7720:3;7661:71;:::i;:::-;7654:78;;7741:52;7786:6;7781:3;7774:4;7767:5;7763:16;7741:52;:::i;:::-;7818:29;7840:6;7818:29;:::i;:::-;7813:3;7809:39;7802:46;;7582:272;;;;;:::o;7860:377::-;7966:3;7994:39;8027:5;7994:39;:::i;:::-;8049:89;8131:6;8126:3;8049:89;:::i;:::-;8042:96;;8147:52;8192:6;8187:3;8180:4;8173:5;8169:16;8147:52;:::i;:::-;8224:6;8219:3;8215:16;8208:23;;7970:267;;;;;:::o;8267:845::-;8370:3;8407:5;8401:12;8436:36;8462:9;8436:36;:::i;:::-;8488:89;8570:6;8565:3;8488:89;:::i;:::-;8481:96;;8608:1;8597:9;8593:17;8624:1;8619:137;;;;8770:1;8765:341;;;;8586:520;;8619:137;8703:4;8699:9;8688;8684:25;8679:3;8672:38;8739:6;8734:3;8730:16;8723:23;;8619:137;;8765:341;8832:38;8864:5;8832:38;:::i;:::-;8892:1;8906:154;8920:6;8917:1;8914:13;8906:154;;;8994:7;8988:14;8984:1;8979:3;8975:11;8968:35;9044:1;9035:7;9031:15;9020:26;;8942:4;8939:1;8935:12;8930:17;;8906:154;;;9089:6;9084:3;9080:16;9073:23;;8772:334;;8586:520;;8374:738;;;;;;:::o;9118:366::-;9260:3;9281:67;9345:2;9340:3;9281:67;:::i;:::-;9274:74;;9357:93;9446:3;9357:93;:::i;:::-;9475:2;9470:3;9466:12;9459:19;;9264:220;;;:::o;9490:366::-;9632:3;9653:67;9717:2;9712:3;9653:67;:::i;:::-;9646:74;;9729:93;9818:3;9729:93;:::i;:::-;9847:2;9842:3;9838:12;9831:19;;9636:220;;;:::o;9862:366::-;10004:3;10025:67;10089:2;10084:3;10025:67;:::i;:::-;10018:74;;10101:93;10190:3;10101:93;:::i;:::-;10219:2;10214:3;10210:12;10203:19;;10008:220;;;:::o;10234:366::-;10376:3;10397:67;10461:2;10456:3;10397:67;:::i;:::-;10390:74;;10473:93;10562:3;10473:93;:::i;:::-;10591:2;10586:3;10582:12;10575:19;;10380:220;;;:::o;10606:366::-;10748:3;10769:67;10833:2;10828:3;10769:67;:::i;:::-;10762:74;;10845:93;10934:3;10845:93;:::i;:::-;10963:2;10958:3;10954:12;10947:19;;10752:220;;;:::o;10978:366::-;11120:3;11141:67;11205:2;11200:3;11141:67;:::i;:::-;11134:74;;11217:93;11306:3;11217:93;:::i;:::-;11335:2;11330:3;11326:12;11319:19;;11124:220;;;:::o;11350:400::-;11510:3;11531:84;11613:1;11608:3;11531:84;:::i;:::-;11524:91;;11624:93;11713:3;11624:93;:::i;:::-;11742:1;11737:3;11733:11;11726:18;;11514:236;;;:::o;11756:366::-;11898:3;11919:67;11983:2;11978:3;11919:67;:::i;:::-;11912:74;;11995:93;12084:3;11995:93;:::i;:::-;12113:2;12108:3;12104:12;12097:19;;11902:220;;;:::o;12128:366::-;12270:3;12291:67;12355:2;12350:3;12291:67;:::i;:::-;12284:74;;12367:93;12456:3;12367:93;:::i;:::-;12485:2;12480:3;12476:12;12469:19;;12274:220;;;:::o;12500:398::-;12659:3;12680:83;12761:1;12756:3;12680:83;:::i;:::-;12673:90;;12772:93;12861:3;12772:93;:::i;:::-;12890:1;12885:3;12881:11;12874:18;;12663:235;;;:::o;12904:366::-;13046:3;13067:67;13131:2;13126:3;13067:67;:::i;:::-;13060:74;;13143:93;13232:3;13143:93;:::i;:::-;13261:2;13256:3;13252:12;13245:19;;13050:220;;;:::o;13276:366::-;13418:3;13439:67;13503:2;13498:3;13439:67;:::i;:::-;13432:74;;13515:93;13604:3;13515:93;:::i;:::-;13633:2;13628:3;13624:12;13617:19;;13422:220;;;:::o;13648:400::-;13808:3;13829:84;13911:1;13906:3;13829:84;:::i;:::-;13822:91;;13922:93;14011:3;13922:93;:::i;:::-;14040:1;14035:3;14031:11;14024:18;;13812:236;;;:::o;14054:118::-;14141:24;14159:5;14141:24;:::i;:::-;14136:3;14129:37;14119:53;;:::o;14178:961::-;14557:3;14579:92;14667:3;14658:6;14579:92;:::i;:::-;14572:99;;14688:148;14832:3;14688:148;:::i;:::-;14681:155;;14853:95;14944:3;14935:6;14853:95;:::i;:::-;14846:102;;14965:148;15109:3;14965:148;:::i;:::-;14958:155;;15130:3;15123:10;;14561:578;;;;;:::o;15145:379::-;15329:3;15351:147;15494:3;15351:147;:::i;:::-;15344:154;;15515:3;15508:10;;15333:191;;;:::o;15530:222::-;15623:4;15661:2;15650:9;15646:18;15638:26;;15674:71;15742:1;15731:9;15727:17;15718:6;15674:71;:::i;:::-;15628:124;;;;:::o;15758:640::-;15953:4;15991:3;15980:9;15976:19;15968:27;;16005:71;16073:1;16062:9;16058:17;16049:6;16005:71;:::i;:::-;16086:72;16154:2;16143:9;16139:18;16130:6;16086:72;:::i;:::-;16168;16236:2;16225:9;16221:18;16212:6;16168:72;:::i;:::-;16287:9;16281:4;16277:20;16272:2;16261:9;16257:18;16250:48;16315:76;16386:4;16377:6;16315:76;:::i;:::-;16307:84;;15958:440;;;;;;;:::o;16404:332::-;16525:4;16563:2;16552:9;16548:18;16540:26;;16576:71;16644:1;16633:9;16629:17;16620:6;16576:71;:::i;:::-;16657:72;16725:2;16714:9;16710:18;16701:6;16657:72;:::i;:::-;16530:206;;;;;:::o;16742:210::-;16829:4;16867:2;16856:9;16852:18;16844:26;;16880:65;16942:1;16931:9;16927:17;16918:6;16880:65;:::i;:::-;16834:118;;;;:::o;16958:238::-;17059:4;17097:2;17086:9;17082:18;17074:26;;17110:79;17186:1;17175:9;17171:17;17162:6;17110:79;:::i;:::-;17064:132;;;;:::o;17202:313::-;17315:4;17353:2;17342:9;17338:18;17330:26;;17402:9;17396:4;17392:20;17388:1;17377:9;17373:17;17366:47;17430:78;17503:4;17494:6;17430:78;:::i;:::-;17422:86;;17320:195;;;;:::o;17521:419::-;17687:4;17725:2;17714:9;17710:18;17702:26;;17774:9;17768:4;17764:20;17760:1;17749:9;17745:17;17738:47;17802:131;17928:4;17802:131;:::i;:::-;17794:139;;17692:248;;;:::o;17946:419::-;18112:4;18150:2;18139:9;18135:18;18127:26;;18199:9;18193:4;18189:20;18185:1;18174:9;18170:17;18163:47;18227:131;18353:4;18227:131;:::i;:::-;18219:139;;18117:248;;;:::o;18371:419::-;18537:4;18575:2;18564:9;18560:18;18552:26;;18624:9;18618:4;18614:20;18610:1;18599:9;18595:17;18588:47;18652:131;18778:4;18652:131;:::i;:::-;18644:139;;18542:248;;;:::o;18796:419::-;18962:4;19000:2;18989:9;18985:18;18977:26;;19049:9;19043:4;19039:20;19035:1;19024:9;19020:17;19013:47;19077:131;19203:4;19077:131;:::i;:::-;19069:139;;18967:248;;;:::o;19221:419::-;19387:4;19425:2;19414:9;19410:18;19402:26;;19474:9;19468:4;19464:20;19460:1;19449:9;19445:17;19438:47;19502:131;19628:4;19502:131;:::i;:::-;19494:139;;19392:248;;;:::o;19646:419::-;19812:4;19850:2;19839:9;19835:18;19827:26;;19899:9;19893:4;19889:20;19885:1;19874:9;19870:17;19863:47;19927:131;20053:4;19927:131;:::i;:::-;19919:139;;19817:248;;;:::o;20071:419::-;20237:4;20275:2;20264:9;20260:18;20252:26;;20324:9;20318:4;20314:20;20310:1;20299:9;20295:17;20288:47;20352:131;20478:4;20352:131;:::i;:::-;20344:139;;20242:248;;;:::o;20496:419::-;20662:4;20700:2;20689:9;20685:18;20677:26;;20749:9;20743:4;20739:20;20735:1;20724:9;20720:17;20713:47;20777:131;20903:4;20777:131;:::i;:::-;20769:139;;20667:248;;;:::o;20921:419::-;21087:4;21125:2;21114:9;21110:18;21102:26;;21174:9;21168:4;21164:20;21160:1;21149:9;21145:17;21138:47;21202:131;21328:4;21202:131;:::i;:::-;21194:139;;21092:248;;;:::o;21346:419::-;21512:4;21550:2;21539:9;21535:18;21527:26;;21599:9;21593:4;21589:20;21585:1;21574:9;21570:17;21563:47;21627:131;21753:4;21627:131;:::i;:::-;21619:139;;21517:248;;;:::o;21771:222::-;21864:4;21902:2;21891:9;21887:18;21879:26;;21915:71;21983:1;21972:9;21968:17;21959:6;21915:71;:::i;:::-;21869:124;;;;:::o;21999:129::-;22033:6;22060:20;;:::i;:::-;22050:30;;22089:33;22117:4;22109:6;22089:33;:::i;:::-;22040:88;;;:::o;22134:75::-;22167:6;22200:2;22194:9;22184:19;;22174:35;:::o;22215:307::-;22276:4;22366:18;22358:6;22355:30;22352:2;;;22388:18;;:::i;:::-;22352:2;22426:29;22448:6;22426:29;:::i;:::-;22418:37;;22510:4;22504;22500:15;22492:23;;22281:241;;;:::o;22528:141::-;22577:4;22600:3;22592:11;;22623:3;22620:1;22613:14;22657:4;22654:1;22644:18;22636:26;;22582:87;;;:::o;22675:98::-;22726:6;22760:5;22754:12;22744:22;;22733:40;;;:::o;22779:99::-;22831:6;22865:5;22859:12;22849:22;;22838:40;;;:::o;22884:168::-;22967:11;23001:6;22996:3;22989:19;23041:4;23036:3;23032:14;23017:29;;22979:73;;;;:::o;23058:147::-;23159:11;23196:3;23181:18;;23171:34;;;;:::o;23211:169::-;23295:11;23329:6;23324:3;23317:19;23369:4;23364:3;23360:14;23345:29;;23307:73;;;;:::o;23386:148::-;23488:11;23525:3;23510:18;;23500:34;;;;:::o;23540:305::-;23580:3;23599:20;23617:1;23599:20;:::i;:::-;23594:25;;23633:20;23651:1;23633:20;:::i;:::-;23628:25;;23787:1;23719:66;23715:74;23712:1;23709:81;23706:2;;;23793:18;;:::i;:::-;23706:2;23837:1;23834;23830:9;23823:16;;23584:261;;;;:::o;23851:185::-;23891:1;23908:20;23926:1;23908:20;:::i;:::-;23903:25;;23942:20;23960:1;23942:20;:::i;:::-;23937:25;;23981:1;23971:2;;23986:18;;:::i;:::-;23971:2;24028:1;24025;24021:9;24016:14;;23893:143;;;;:::o;24042:348::-;24082:7;24105:20;24123:1;24105:20;:::i;:::-;24100:25;;24139:20;24157:1;24139:20;:::i;:::-;24134:25;;24327:1;24259:66;24255:74;24252:1;24249:81;24244:1;24237:9;24230:17;24226:105;24223:2;;;24334:18;;:::i;:::-;24223:2;24382:1;24379;24375:9;24364:20;;24090:300;;;;:::o;24396:191::-;24436:4;24456:20;24474:1;24456:20;:::i;:::-;24451:25;;24490:20;24508:1;24490:20;:::i;:::-;24485:25;;24529:1;24526;24523:8;24520:2;;;24534:18;;:::i;:::-;24520:2;24579:1;24576;24572:9;24564:17;;24441:146;;;;:::o;24593:96::-;24630:7;24659:24;24677:5;24659:24;:::i;:::-;24648:35;;24638:51;;;:::o;24695:104::-;24740:7;24769:24;24787:5;24769:24;:::i;:::-;24758:35;;24748:51;;;:::o;24805:90::-;24839:7;24882:5;24875:13;24868:21;24857:32;;24847:48;;;:::o;24901:149::-;24937:7;24977:66;24970:5;24966:78;24955:89;;24945:105;;;:::o;25056:131::-;25103:7;25132:5;25121:16;;25138:43;25175:5;25138:43;:::i;:::-;25111:76;;;:::o;25193:126::-;25230:7;25270:42;25263:5;25259:54;25248:65;;25238:81;;;:::o;25325:77::-;25362:7;25391:5;25380:16;;25370:32;;;:::o;25408:131::-;25466:9;25499:34;25527:5;25499:34;:::i;:::-;25486:47;;25476:63;;;:::o;25545:154::-;25629:6;25624:3;25619;25606:30;25691:1;25682:6;25677:3;25673:16;25666:27;25596:103;;;:::o;25705:307::-;25773:1;25783:113;25797:6;25794:1;25791:13;25783:113;;;25882:1;25877:3;25873:11;25867:18;25863:1;25858:3;25854:11;25847:39;25819:2;25816:1;25812:10;25807:15;;25783:113;;;25914:6;25911:1;25908:13;25905:2;;;25994:1;25985:6;25980:3;25976:16;25969:27;25905:2;25754:258;;;;:::o;26018:320::-;26062:6;26099:1;26093:4;26089:12;26079:22;;26146:1;26140:4;26136:12;26167:18;26157:2;;26223:4;26215:6;26211:17;26201:27;;26157:2;26285;26277:6;26274:14;26254:18;26251:38;26248:2;;;26304:18;;:::i;:::-;26248:2;26069:269;;;;:::o;26344:281::-;26427:27;26449:4;26427:27;:::i;:::-;26419:6;26415:40;26557:6;26545:10;26542:22;26521:18;26509:10;26506:34;26503:62;26500:2;;;26568:18;;:::i;:::-;26500:2;26608:10;26604:2;26597:22;26387:238;;;:::o;26631:233::-;26670:3;26693:24;26711:5;26693:24;:::i;:::-;26684:33;;26739:66;26732:5;26729:77;26726:2;;;26809:18;;:::i;:::-;26726:2;26856:1;26849:5;26845:13;26838:20;;26674:190;;;:::o;26870:176::-;26902:1;26919:20;26937:1;26919:20;:::i;:::-;26914:25;;26953:20;26971:1;26953:20;:::i;:::-;26948:25;;26992:1;26982:2;;26997:18;;:::i;:::-;26982:2;27038:1;27035;27031:9;27026:14;;26904:142;;;;:::o;27052:180::-;27100:77;27097:1;27090:88;27197:4;27194:1;27187:15;27221:4;27218:1;27211:15;27238:180;27286:77;27283:1;27276:88;27383:4;27380:1;27373:15;27407:4;27404:1;27397:15;27424:180;27472:77;27469:1;27462:88;27569:4;27566:1;27559:15;27593:4;27590:1;27583:15;27610:180;27658:77;27655:1;27648:88;27755:4;27752:1;27745:15;27779:4;27776:1;27769:15;27796:180;27844:77;27841:1;27834:88;27941:4;27938:1;27931:15;27965:4;27962:1;27955:15;27982:102;28023:6;28074:2;28070:7;28065:2;28058:5;28054:14;28050:28;28040:38;;28030:54;;;:::o;28090:225::-;28230:34;28226:1;28218:6;28214:14;28207:58;28299:8;28294:2;28286:6;28282:15;28275:33;28196:119;:::o;28321:167::-;28461:19;28457:1;28449:6;28445:14;28438:43;28427:61;:::o;28494:177::-;28634:29;28630:1;28622:6;28618:14;28611:53;28600:71;:::o;28677:166::-;28817:18;28813:1;28805:6;28801:14;28794:42;28783:60;:::o;28849:171::-;28989:23;28985:1;28977:6;28973:14;28966:47;28955:65;:::o;29026:177::-;29166:29;29162:1;29154:6;29150:14;29143:53;29132:71;:::o;29209:155::-;29349:7;29345:1;29337:6;29333:14;29326:31;29315:49;:::o;29370:182::-;29510:34;29506:1;29498:6;29494:14;29487:58;29476:76;:::o;29558:234::-;29698:34;29694:1;29686:6;29682:14;29675:58;29767:17;29762:2;29754:6;29750:15;29743:42;29664:128;:::o;29798:114::-;29904:8;:::o;29918:181::-;30058:33;30054:1;30046:6;30042:14;30035:57;30024:75;:::o;30105:167::-;30245:19;30241:1;30233:6;30229:14;30222:43;30211:61;:::o;30278:151::-;30418:3;30414:1;30406:6;30402:14;30395:27;30384:45;:::o;30435:115::-;30518:1;30511:5;30508:12;30498:2;;30524:18;;:::i;:::-;30498:2;30488:62;:::o;30556:122::-;30629:24;30647:5;30629:24;:::i;:::-;30622:5;30619:35;30609:2;;30668:1;30665;30658:12;30609:2;30599:79;:::o;30684:138::-;30765:32;30791:5;30765:32;:::i;:::-;30758:5;30755:43;30745:2;;30812:1;30809;30802:12;30745:2;30735:87;:::o;30828:116::-;30898:21;30913:5;30898:21;:::i;:::-;30891:5;30888:32;30878:2;;30934:1;30931;30924:12;30878:2;30868:76;:::o;30950:120::-;31022:23;31039:5;31022:23;:::i;:::-;31015:5;31012:34;31002:2;;31060:1;31057;31050:12;31002:2;30992:78;:::o;31076:109::-;31159:1;31152:5;31149:12;31139:2;;31175:1;31172;31165:12;31139:2;31129:56;:::o;31191:122::-;31264:24;31282:5;31264:24;:::i;:::-;31257:5;31254:35;31244:2;;31303:1;31300;31293:12;31244:2;31234:79;:::o
Swarm Source
ipfs://ac177167d670e3023b01149b6650887a1909a9dafa3f518f9b78dc629ebbbe18
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.