ETH Price: $3,271.04 (+0.83%)

Loanft (LOANFT)
 

Overview

TokenID

63

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ULoanSaft

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-10
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.11;

interface IERC165
{
 function supportsInterface(bytes4 interfaceId) external view returns (bool);
}



interface IERC721 is IERC165
{
 event Transfer( address indexed from, address indexed to, uint256 indexed tokenId);
 event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId);
 event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

 function balanceOf( address owner) external view returns (uint256 balance);
 function ownerOf( uint256 tokenId) external view returns (address owner);
 function safeTransferFrom( address from, address to, uint256 tokenId) external;
 function transferFrom( address from, address to, uint256 tokenId) external;
 function approve( address to, uint256 tokenId) external;
 function getApproved( uint256 tokenId) external view returns (address operator);
 function setApprovalForAll(address operator, bool _approved) external;
 function isApprovedForAll( address owner, address operator) external view returns (bool);
 function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data) external;
}



interface IERC721Metadata is IERC721
{
 function name() external view returns (string memory);
 function symbol() external view returns (string memory);
 function tokenURI(uint256 tokenId) external view returns (string memory);
}



interface IERC721Enumerable is IERC721
{
 function totalSupply() external view returns (uint256);
 function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
 function tokenByIndex(uint256 index) external view returns (uint256);
}



interface IERC721Receiver
{
 function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}



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



abstract contract Context
{
 function _msgSender() internal view virtual returns (address)
 {
 return msg.sender;
 }
 
 
 function _msgData() internal view virtual returns (bytes calldata)
 {
 this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
 return msg.data;
 }
}



abstract contract Ownable is Context
{
 address private _owner;

 event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

 
 constructor ()
 {
 address msgSender = _msgSender();
 _owner = msgSender;
 
 emit OwnershipTransferred(address(0), msgSender);
 }
 
 
 function owner() public view virtual returns (address)
 {
 return _owner;
 }
 
 
 modifier onlyOwner()
 {
 require(owner() == _msgSender(), "Ownable: caller is not the owner");
 _;
 }
 
 
 function renounceOwnership() public virtual onlyOwner
 {
 emit OwnershipTransferred(_owner, address(0));
 
 _owner = address(0);
 }
 
 
 function transferOwnership(address newOwner) public virtual onlyOwner
 {
 require(newOwner != address(0), "Ownable: new owner is the zero address");
 
 emit OwnershipTransferred(_owner, newOwner);
 
 _owner = newOwner;
 }
}



abstract contract ReentrancyGuard 
{
 uint256 private constant _NOT_ENTERED = 1;
 uint256 private constant _ENTERED = 2;

 uint256 private _status;

 constructor() 
 { 
 _status = _NOT_ENTERED;
 }

 modifier nonReentrant() // Prevents a contract from calling itself, directly or indirectly.
 {
 require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // On the first call to nonReentrant, _notEntered will be true
 _status = _ENTERED; // Any calls to nonReentrant after this point will fail
 _;
 _status = _NOT_ENTERED; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200)
 }
}



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

 string private _name; // Token name
 string private _symbol; // Token symbol

 mapping(uint256 => address) internal _owners; // Mapping from token ID to owner address
 mapping(address => uint256) internal _balances; // Mapping owner address to token count
 mapping(uint256 => address) private _tokenApprovals; // Mapping from token ID to approved address
 mapping(address => mapping(address => bool)) private _operatorApprovals; // Mapping from owner to operator approvals

 
 constructor(string memory name_, string memory symbol_)
 {
 _name = name_;
 _symbol = symbol_;
 }
 
 
 function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool)
 {
 return interfaceId == type(IERC721).interfaceId ||
 interfaceId == type(IERC721Metadata).interfaceId ||
 super.supportsInterface(interfaceId);
 }
 
 
 function balanceOf(address owner) public view virtual override returns (uint256)
 {
 require(owner != address(0), "ERC721: balance query for the zero address");
 
 return _balances[owner];
 }
 
 
 function ownerOf(uint256 tokenId) public view virtual override returns (address)
 {
 address owner = _owners[tokenId];
 require(owner != address(0), "ERC721: owner query for nonexistent token");
 return owner;
 }
 
 
 function name() public view virtual override returns (string memory)
 {
 return _name;
 }
 
 
 function symbol() public view virtual override returns (string memory)
 {
 return _symbol;
 }
 
 
 function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
 {
 require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

 string memory baseURI = _baseURI();
 
 return (bytes(baseURI).length>0) ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
 }
 
 
 function _baseURI() internal view virtual returns (string memory)
 {
 return "";
 }
 
 
 function approve(address to, uint256 tokenId) public virtual override
 {
 address owner = ERC721.ownerOf(tokenId);
 
 require(to!=owner, "ERC721: approval to current owner");
 require(_msgSender()==owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all");

 _approve(to, tokenId);
 }
 
 
 function getApproved(uint256 tokenId) public view virtual override returns (address)
 {
 require(_exists(tokenId), "ERC721: approved query for nonexistent token");

 return _tokenApprovals[tokenId];
 }
 
 
 function setApprovalForAll(address operator, bool approved) public virtual override
 {
 require(operator != _msgSender(), "ERC721: approve to caller");

 _operatorApprovals[_msgSender()][operator] = approved;
 
 emit ApprovalForAll(_msgSender(), operator, approved);
 }
 
 
 function isApprovedForAll(address owner, address operator) public view virtual override returns (bool)
 {
 return _operatorApprovals[owner][operator];
 }
 
 
 function transferFrom(address from, address to, uint256 tokenId) public virtual override
 {
 //----- solhint-disable-next-line max-line-length
 
 require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

 _transfer(from, to, tokenId);
 }
 
 
 function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override
 {
 safeTransferFrom(from, to, tokenId, "");
 }
 
 
 function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override
 {
 require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
 
 _safeTransfer(from, to, tokenId, _data);
 }
 
 
 function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual
 {
 _transfer(from, to, tokenId);
 
 require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
 }
 
 
 function _exists(uint256 tokenId) internal view virtual returns (bool)
 {
 return _owners[tokenId] != address(0);
 }
 
 
 function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool)
 {
 require(_exists(tokenId), "ERC721: operator query for nonexistent token");
 
 address owner = ERC721.ownerOf(tokenId);
 
 return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender));
 }
 
 
 function _safeMint(address to, uint256 tokenId) internal virtual
 {
 _safeMint(to, tokenId, "");
 }
 
 
 function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual
 {
 _mint(to, tokenId);
 
 require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
 }
 
 
 function _mint(address to, uint256 tokenId) internal virtual
 {
 require(to != address(0), "ERC721: mint to the zero address");
 require(!_exists(tokenId), "ERC721: token already minted");

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

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

 emit Transfer(address(0), to, tokenId);
 }
 
 
 function _batchMint(address to, uint256[] memory tokenIds) internal virtual
 {
 require(to != address(0), "ERC721: mint to the zero address");
 
 _balances[to] += tokenIds.length;

 for (uint256 i=0; i < tokenIds.length; i++)
 {
 require(!_exists(tokenIds[i]), "ERC721: token already minted");

 _beforeTokenTransfer(address(0), to, tokenIds[i]);

 _owners[tokenIds[i]] = to;

 emit Transfer(address(0), to, tokenIds[i]);
 }
 }
 
 
 function _burn(uint256 tokenId) internal virtual
 {
 address owner = ERC721.ownerOf(tokenId);

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

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

 _balances[owner] -= 1;

 delete _owners[tokenId];

 emit Transfer(owner, address(0), tokenId);
 }
 
 
 function _transfer(address from, address to, uint256 tokenId) internal virtual
 {
 require(ERC721.ownerOf(tokenId)==from, "ERC721: transfer of token that is not own");
 require(to != address(0), "ERC721: transfer to the zero address");

 _beforeTokenTransfer(from, to, tokenId);

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

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

 emit Transfer(from, to, tokenId);
 }
 
 
 function _approve(address to, uint256 tokenId) internal virtual
 {
 _tokenApprovals[tokenId] = to;
 
 emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
 }
 
 
 function _checkOnERC721Received(address from,address to,uint256 tokenId,bytes memory _data) private returns (bool)
 {
 if (to.isContract())
 {
 try
 
 IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
 
 returns (bytes4 retval)
 {
 return retval == IERC721Receiver(to).onERC721Received.selector;
 }
 catch (bytes memory reason)
 {
 if (reason.length==0)
 {
 revert("ERC721: transfer to non ERC721Receiver implementer");
 }
 else
 {
 assembly { revert(add(32, reason), mload(reason)) } //// solhint-disable-next-line no-inline-assembly
 }
 }
 }
 else
 {
 return true;
 }
 }
 
 
 function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual
 {
 //
 }
}



abstract contract ERC721Enumerable is ERC721, IERC721Enumerable
{
 mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from owner to list of owned token IDs
 mapping(uint256 => uint256) private _ownedTokensIndex; // Mapping from token ID to index of the owner tokens list
 mapping(uint256 => uint256) private _allTokensIndex; // Mapping from token id to position in the allTokens array

 uint256[] private _allTokens; // Array with all token ids, used for enumeration

 function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool)
 {
 return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
 }

 function totalSupply() public view virtual override returns (uint256)
 {
 return _allTokens.length;
 }

 function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256)
 {
 require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
 
 return _ownedTokens[owner][index];
 }

 function tokenByIndex(uint256 index) public view virtual override returns (uint256)
 {
 require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
 
 return _allTokens[index];
 }

 function _beforeTokenTransfer(address from,address to,uint256 tokenId) internal virtual override
 {
 super._beforeTokenTransfer(from, to, tokenId);

 if (from == address(0)) _addTokenToAllTokensEnumeration(tokenId);
 else if (from != to) _removeTokenFromOwnerEnumeration(from, tokenId);
 
 if (to == address(0)) _removeTokenFromAllTokensEnumeration(tokenId);
 else if (to != from) _addTokenToOwnerEnumeration(to, tokenId);
 }

 function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private
 {
 uint256 length = ERC721.balanceOf(to);
 
 _ownedTokens[to][length] = tokenId;
 _ownedTokensIndex[tokenId] = length;
 }

 function _addTokenToAllTokensEnumeration(uint256 tokenId) private
 {
 _allTokensIndex[tokenId] = _allTokens.length;
 
 _allTokens.push(tokenId);
 }

 function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private
 {
 // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
 // then delete the last slot (swap and pop).

 uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
 uint256 tokenIndex = _ownedTokensIndex[tokenId];

 // When the token to delete is the last token, the swap operation is unnecessary
 if (tokenIndex != lastTokenIndex) {
 uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

 _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
 _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
 }

 // This also deletes the contents at the last position of the array
 delete _ownedTokensIndex[tokenId];
 delete _ownedTokens[from][lastTokenIndex];
 }

 function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private
 {
 // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
 // then delete the last slot (swap and pop).

 uint256 lastTokenIndex = _allTokens.length - 1;
 uint256 tokenIndex = _allTokensIndex[tokenId];

 // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
 // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
 // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
 uint256 lastTokenId = _allTokens[lastTokenIndex];

 _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
 _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

 // This also deletes the contents at the last position of the array
 delete _allTokensIndex[tokenId];
 _allTokens.pop();
 }
}


library Strings
{
 bytes16 private constant alphabet = "0123456789abcdef";

 
 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);
 }
 
 
 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);
 }
 
 
 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] = alphabet[value & 0xf];
 value >>= 4;
 }
 
 require(value == 0, "Strings: hex length insufficient");
 return string(buffer);
 }
}



library Address
{
 function isContract(address account) internal view returns (bool)
 {
 uint256 size;
 
 assembly { size := extcodesize(account) } // solhint-disable-next-line no-inline-assembly
 return size > 0;
 }
 
 
 function sendValue(address payable recipient, uint256 amount) internal
 {
 require(address(this).balance >= amount, "Address: insufficient balance");

 (bool success, ) = recipient.call{ value: amount }(""); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value

 require(success, "Address: unable to send value, recipient may have reverted");
 }
 
 
 function functionCall(address target, bytes memory data) internal returns (bytes memory)
 {
 return functionCall(target, data, "Address: low-level call failed");
 }
 
 
 function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory)
 {
 return functionCallWithValue(target, data, 0, errorMessage);
 }
 
 
 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");
 }
 
 
 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); // solhint-disable-next-line avoid-low-level-calls

 return _verifyCallResult(success, returndata, errorMessage);
 }
 
 
 function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory)
 {
 return functionStaticCall(target, data, "Address: low-level static call failed");
 }
 
 
 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); // solhint-disable-next-line avoid-low-level-calls

 return _verifyCallResult(success, returndata, errorMessage);
 }
 
 
 function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory)
 {
 return functionDelegateCall(target, data, "Address: low-level delegate call failed");
 }
 
 
 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); // solhint-disable-next-line avoid-low-level-calls
 
 return _verifyCallResult(success, returndata, errorMessage);
 }
 
 
 function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory)
 {
 if (success)
 {
 return returndata;
 }
 else
 {
 if (returndata.length > 0) // Look for revert reason and bubble it up if present
 {
 // The easiest way to bubble the revert reason is using memory via assembly
 // solhint-disable-next-line no-inline-assembly
 assembly
 {
 let returndata_size := mload(returndata)
 revert(add(32, returndata), returndata_size)
 }
 }
 else
 {
 revert(errorMessage);
 }
 }
 }
}



contract ULoanSaft is ERC721Enumerable
{
 using Address for address;
 using Strings for uint256;

 modifier callerIsUser()
 {
 require(tx.origin == msg.sender, "The caller is another contract");
 _;
 }

 event onWidthdrawal(address from, address to, uint256 amount);

 uint256 private totalTokens = 65;
 uint256 private leftTokenCount = totalTokens;
 uint256 private mintedTokenCount = 0;

 string private baseURI = '/';

 address private ownerWallet;

 mapping(address => uint256) private walletMintCounts;
 mapping(address => uint256) private walletMintedTokenIds;
 
 mapping(uint256 => uint256) private mintedTokenTimestamps;


 constructor() ERC721("Loanft", "LOANFT") // temporary Symbol and title
 {
 ownerWallet = msg.sender;
 }
 
 function isERC721ReceivedCheck(address from,address to,uint256 tokenId,bytes memory _data) private returns (bool)
 {
 if (to.isContract())
 {
 try
 
 IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
 
 returns (bytes4 retval)
 {
 return retval == IERC721Receiver(to).onERC721Received.selector;
 }
 catch (bytes memory reason)
 {
 if (reason.length==0)
 {
 revert("ERC721: transfer to non ERC721Receiver implementer");
 }
 else
 {
 assembly { revert(add(32, reason), mload(reason)) } //// solhint-disable-next-line no-inline-assembly
 }
 }
 }
 else
 {
 return true;
 }
 }


 function setBaseTokenURI(string memory newUri) external onlyOwner
 {
 baseURI = newUri;
 }
 
 
 function addAvailableTokens(uint256 extraAmount) external onlyOwner
 {
 totalTokens += extraAmount;
 leftTokenCount += extraAmount;
 }
 
 
 function subAvailableTokens(uint256 subAmount) external onlyOwner
 {
 require(subAmount < totalTokens, "Invalid subAmount for totalTokens");
 require(subAmount < leftTokenCount, "Invalid subAmount for leftTokenCount");

 totalTokens -= subAmount;
 leftTokenCount -= subAmount;
 }
 
 
 function baseTokenURI() external view returns (string memory)
 {
 return baseURI;
 }
 
 
 function getAvailableTokens() external view returns (uint256)
 {
 return leftTokenCount;
 }


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


 function getTokenIdsByWallet(address walletAddress) external view returns(uint256[] memory)
 {
 require(walletAddress!=address(0), "BlackHole wallet is not a real owner");
 
 uint256 count = balanceOf(walletAddress);
 uint256[] memory result = new uint256[](count);
 
 for (uint256 i=0; i<count; i++)
 {
 result[i] = tokenOfOwnerByIndex(walletAddress, i);
 }
 
 return result;
 }
 

 function reserve(uint256 amount) external onlyOwner
 {
 require(amount <= 200, "Reserve is limited to 200 per call at max");
 require(leftTokenCount >= amount, "Not enough tokens left to reserve anymore");

 walletMintCounts[msg.sender] += amount;

 for (uint256 i=0; i < amount; i++)
 {
 mintedTokenCount++;
 
 mintedTokenTimestamps[mintedTokenCount] = block.timestamp;
 
 _safeMint(msg.sender, mintedTokenCount);
 }

 leftTokenCount = totalTokens - mintedTokenCount;
 }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"onWidthdrawal","type":"event"},{"inputs":[{"internalType":"uint256","name":"extraAmount","type":"uint256"}],"name":"addAvailableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAvailableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"getTokenIdsByWallet","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserve","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":"newUri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subAmount","type":"uint256"}],"name":"subAvailableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6041600c819055600d556000600e5560c060405260016080819052602f60f81b60a09081526200003391600f91906200012a565b503480156200004157600080fd5b5060405180604001604052806006815260200165131bd85b999d60d21b815250604051806040016040528060068152602001651313d053919560d21b8152506000620000926200012660201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180558151620000f59060029060208501906200012a565b5080516200010b9060039060208401906200012a565b5050601080546001600160a01b03191633179055506200020d565b3390565b8280546200013890620001d0565b90600052602060002090601f0160209004810192826200015c5760008555620001a7565b82601f106200017757805160ff1916838001178555620001a7565b82800160010185558215620001a7579182015b82811115620001a75782518255916020019190600101906200018a565b50620001b5929150620001b9565b5090565b5b80821115620001b55760008155600101620001ba565b600181811c90821680620001e557607f821691505b602082108114156200020757634e487b7160e01b600052602260045260246000fd5b50919050565b61201e806200021d6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063b88d4fde11610097578063e35568cb11610071578063e35568cb1461034f578063e6b3601214610357578063e985e9c51461036a578063f2fde38b146103a657600080fd5b8063b88d4fde14610321578063c87b56dd14610334578063d547cfb71461034757600080fd5b806370a08231146102c7578063715018a6146102da578063819b25ba146102e25780638da5cb5b146102f557806395d89b4114610306578063a22cb4651461030e57600080fd5b806323b872dd1161014b5780633c1aa170116101255780633c1aa1701461027b57806342842e0e1461028e5780634f6ccce7146102a15780636352211e146102b457600080fd5b806323b872dd146102425780632f745c591461025557806330176e131461026857600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb5780631660b7321461021057806318160ddd14610230575b600080fd5b6101a66101a1366004611a40565b6103b9565b60405190151581526020015b60405180910390f35b6101c36103e4565b6040516101b29190611ab5565b6101e36101de366004611ac8565b610476565b6040516001600160a01b0390911681526020016101b2565b61020e610209366004611afd565b610510565b005b61022361021e366004611b27565b610626565b6040516101b29190611b42565b600b545b6040519081526020016101b2565b61020e610250366004611b86565b61072a565b610234610263366004611afd565b61075b565b61020e610276366004611c4e565b6107f1565b61020e610289366004611ac8565b610832565b61020e61029c366004611b86565b610947565b6102346102af366004611ac8565b610962565b6101e36102c2366004611ac8565b6109f5565b6102346102d5366004611b27565b610a6c565b61020e610af3565b61020e6102f0366004611ac8565b610b67565b6000546001600160a01b03166101e3565b6101c3610ce7565b61020e61031c366004611c97565b610cf6565b61020e61032f366004611cd3565b610dbb565b6101c3610342366004611ac8565b610df3565b6101c3610ece565b600d54610234565b61020e610365366004611ac8565b610edd565b6101a6610378366004611d4f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61020e6103b4366004611b27565b610f32565b60006001600160e01b0319821663780e9d6360e01b14806103de57506103de8261101c565b92915050565b6060600280546103f390611d82565b80601f016020809104026020016040519081016040528092919081815260200182805461041f90611d82565b801561046c5780601f106104415761010080835404028352916020019161046c565b820191906000526020600020905b81548152906001019060200180831161044f57829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166104f45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061051b826109f5565b9050806001600160a01b0316836001600160a01b031614156105895760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104eb565b336001600160a01b03821614806105a557506105a58133610378565b6106175760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016104eb565b610621838361106c565b505050565b60606001600160a01b03821661068a5760405162461bcd60e51b8152602060048201526024808201527f426c61636b486f6c652077616c6c6574206973206e6f742061207265616c206f6044820152633bb732b960e11b60648201526084016104eb565b600061069583610a6c565b905060008167ffffffffffffffff8111156106b2576106b2611bc2565b6040519080825280602002602001820160405280156106db578160200160208202803683370190505b50905060005b82811015610722576106f3858261075b565b82828151811061070557610705611dbd565b60209081029190910101528061071a81611de9565b9150506106e1565b509392505050565b61073433826110da565b6107505760405162461bcd60e51b81526004016104eb90611e04565b6106218383836111d1565b600061076683610a6c565b82106107c85760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016104eb565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6000546001600160a01b0316331461081b5760405162461bcd60e51b81526004016104eb90611e55565b805161082e90600f90602084019061198e565b5050565b6000546001600160a01b0316331461085c5760405162461bcd60e51b81526004016104eb90611e55565b600c5481106108b75760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420737562416d6f756e7420666f7220746f74616c546f6b656e6044820152607360f81b60648201526084016104eb565b600d5481106109145760405162461bcd60e51b8152602060048201526024808201527f496e76616c696420737562416d6f756e7420666f72206c656674546f6b656e436044820152631bdd5b9d60e21b60648201526084016104eb565b80600c60008282546109269190611e8a565b9250508190555080600d600082825461093f9190611e8a565b909155505050565b61062183838360405180602001604052806000815250610dbb565b600061096d600b5490565b82106109d05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016104eb565b600b82815481106109e3576109e3611dbd565b90600052602060002001549050919050565b6000818152600460205260408120546001600160a01b0316806103de5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016104eb565b60006001600160a01b038216610ad75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016104eb565b506001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610b1d5760405162461bcd60e51b81526004016104eb90611e55565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b915760405162461bcd60e51b81526004016104eb90611e55565b60c8811115610bf45760405162461bcd60e51b815260206004820152602960248201527f52657365727665206973206c696d6974656420746f20323030207065722063616044820152680d8d840c2e840dac2f60bb1b60648201526084016104eb565b80600d541015610c585760405162461bcd60e51b815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e73206c65667420746f207265736572766044820152686520616e796d6f726560b81b60648201526084016104eb565b3360009081526011602052604081208054839290610c77908490611ea1565b90915550600090505b81811015610cd057600e8054906000610c9883611de9565b9091555050600e8054600090815260136020526040902042905554610cbe90339061137c565b80610cc881611de9565b915050610c80565b50600e54600c54610ce19190611e8a565b600d5550565b6060600380546103f390611d82565b6001600160a01b038216331415610d4f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104eb565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610dc533836110da565b610de15760405162461bcd60e51b81526004016104eb90611e04565b610ded84848484611396565b50505050565b6000818152600460205260409020546060906001600160a01b0316610e725760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016104eb565b6000610e7c610ece565b90506000815111610e9c5760405180602001604052806000815250610ec7565b80610ea6846113c9565b604051602001610eb7929190611eb9565b6040516020818303038152906040525b9392505050565b6060600f80546103f390611d82565b6000546001600160a01b03163314610f075760405162461bcd60e51b81526004016104eb90611e55565b80600c6000828254610f199190611ea1565b9250508190555080600d600082825461093f9190611ea1565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b81526004016104eb90611e55565b6001600160a01b038116610fc15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104eb565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061104d57506001600160e01b03198216635b5e139f60e01b145b806103de57506301ffc9a760e01b6001600160e01b03198316146103de565b600081815260066020526040902080546001600160a01b0319166001600160a01b03841690811790915581906110a1826109f5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600460205260408120546001600160a01b03166111535760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104eb565b600061115e836109f5565b9050806001600160a01b0316846001600160a01b031614806111995750836001600160a01b031661118e84610476565b6001600160a01b0316145b806111c957506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166111e4826109f5565b6001600160a01b03161461124c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016104eb565b6001600160a01b0382166112ae5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104eb565b6112b98383836114c7565b6112c460008261106c565b6001600160a01b03831660009081526005602052604081208054600192906112ed908490611e8a565b90915550506001600160a01b038216600090815260056020526040812080546001929061131b908490611ea1565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61082e82826040518060200160405280600081525061157f565b6113a18484846111d1565b6113ad848484846115b2565b610ded5760405162461bcd60e51b81526004016104eb90611ee8565b6060816113ed5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611417578061140181611de9565b91506114109050600a83611f50565b91506113f1565b60008167ffffffffffffffff81111561143257611432611bc2565b6040519080825280601f01601f19166020018201604052801561145c576020820181803683370190505b5090505b84156111c957611471600183611e8a565b915061147e600a86611f64565b611489906030611ea1565b60f81b81838151811061149e5761149e611dbd565b60200101906001600160f81b031916908160001a9053506114c0600a86611f50565b9450611460565b6001600160a01b0383166115225761151d81600b80546000838152600a60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b611545565b816001600160a01b0316836001600160a01b0316146115455761154583826116b0565b6001600160a01b03821661155c576106218161174d565b826001600160a01b0316826001600160a01b0316146106215761062182826117fc565b6115898383611840565b61159660008484846115b2565b6106215760405162461bcd60e51b81526004016104eb90611ee8565b60006001600160a01b0384163b156116a557604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906115f6903390899088908890600401611f78565b6020604051808303816000875af1925050508015611631575060408051601f3d908101601f1916820190925261162e91810190611fb5565b60015b61168b573d80801561165f576040519150601f19603f3d011682016040523d82523d6000602084013e611664565b606091505b5080516116835760405162461bcd60e51b81526004016104eb90611ee8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506111c9565b506001949350505050565b600060016116bd84610a6c565b6116c79190611e8a565b60008381526009602052604090205490915080821461171a576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600b5460009061175f90600190611e8a565b6000838152600a6020526040812054600b805493945090928490811061178757611787611dbd565b9060005260206000200154905080600b83815481106117a8576117a8611dbd565b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600b8054806117e0576117e0611fd2565b6001900381819060005260206000200160009055905550505050565b600061180783610a6c565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b6001600160a01b0382166118965760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104eb565b6000818152600460205260409020546001600160a01b0316156118fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104eb565b611907600083836114c7565b6001600160a01b0382166000908152600560205260408120805460019290611930908490611ea1565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461199a90611d82565b90600052602060002090601f0160209004810192826119bc5760008555611a02565b82601f106119d557805160ff1916838001178555611a02565b82800160010185558215611a02579182015b82811115611a025782518255916020019190600101906119e7565b50611a0e929150611a12565b5090565b5b80821115611a0e5760008155600101611a13565b6001600160e01b031981168114611a3d57600080fd5b50565b600060208284031215611a5257600080fd5b8135610ec781611a27565b60005b83811015611a78578181015183820152602001611a60565b83811115610ded5750506000910152565b60008151808452611aa1816020860160208601611a5d565b601f01601f19169290920160200192915050565b602081526000610ec76020830184611a89565b600060208284031215611ada57600080fd5b5035919050565b80356001600160a01b0381168114611af857600080fd5b919050565b60008060408385031215611b1057600080fd5b611b1983611ae1565b946020939093013593505050565b600060208284031215611b3957600080fd5b610ec782611ae1565b6020808252825182820181905260009190848201906040850190845b81811015611b7a57835183529284019291840191600101611b5e565b50909695505050505050565b600080600060608486031215611b9b57600080fd5b611ba484611ae1565b9250611bb260208501611ae1565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611bf357611bf3611bc2565b604051601f8501601f19908116603f01168101908282118183101715611c1b57611c1b611bc2565b81604052809350858152868686011115611c3457600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611c6057600080fd5b813567ffffffffffffffff811115611c7757600080fd5b8201601f81018413611c8857600080fd5b6111c984823560208401611bd8565b60008060408385031215611caa57600080fd5b611cb383611ae1565b915060208301358015158114611cc857600080fd5b809150509250929050565b60008060008060808587031215611ce957600080fd5b611cf285611ae1565b9350611d0060208601611ae1565b925060408501359150606085013567ffffffffffffffff811115611d2357600080fd5b8501601f81018713611d3457600080fd5b611d4387823560208401611bd8565b91505092959194509250565b60008060408385031215611d6257600080fd5b611d6b83611ae1565b9150611d7960208401611ae1565b90509250929050565b600181811c90821680611d9657607f821691505b60208210811415611db757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611dfd57611dfd611dd3565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082821015611e9c57611e9c611dd3565b500390565b60008219821115611eb457611eb4611dd3565b500190565b60008351611ecb818460208801611a5d565b835190830190611edf818360208801611a5d565b01949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082611f5f57611f5f611f3a565b500490565b600082611f7357611f73611f3a565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611fab90830184611a89565b9695505050505050565b600060208284031215611fc757600080fd5b8151610ec781611a27565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203b4898c55387b10bcf87e7362647876be5ac6d8d3625876e0d8be5f74e5ee61664736f6c634300080b0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de578063b88d4fde11610097578063e35568cb11610071578063e35568cb1461034f578063e6b3601214610357578063e985e9c51461036a578063f2fde38b146103a657600080fd5b8063b88d4fde14610321578063c87b56dd14610334578063d547cfb71461034757600080fd5b806370a08231146102c7578063715018a6146102da578063819b25ba146102e25780638da5cb5b146102f557806395d89b4114610306578063a22cb4651461030e57600080fd5b806323b872dd1161014b5780633c1aa170116101255780633c1aa1701461027b57806342842e0e1461028e5780634f6ccce7146102a15780636352211e146102b457600080fd5b806323b872dd146102425780632f745c591461025557806330176e131461026857600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb5780631660b7321461021057806318160ddd14610230575b600080fd5b6101a66101a1366004611a40565b6103b9565b60405190151581526020015b60405180910390f35b6101c36103e4565b6040516101b29190611ab5565b6101e36101de366004611ac8565b610476565b6040516001600160a01b0390911681526020016101b2565b61020e610209366004611afd565b610510565b005b61022361021e366004611b27565b610626565b6040516101b29190611b42565b600b545b6040519081526020016101b2565b61020e610250366004611b86565b61072a565b610234610263366004611afd565b61075b565b61020e610276366004611c4e565b6107f1565b61020e610289366004611ac8565b610832565b61020e61029c366004611b86565b610947565b6102346102af366004611ac8565b610962565b6101e36102c2366004611ac8565b6109f5565b6102346102d5366004611b27565b610a6c565b61020e610af3565b61020e6102f0366004611ac8565b610b67565b6000546001600160a01b03166101e3565b6101c3610ce7565b61020e61031c366004611c97565b610cf6565b61020e61032f366004611cd3565b610dbb565b6101c3610342366004611ac8565b610df3565b6101c3610ece565b600d54610234565b61020e610365366004611ac8565b610edd565b6101a6610378366004611d4f565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61020e6103b4366004611b27565b610f32565b60006001600160e01b0319821663780e9d6360e01b14806103de57506103de8261101c565b92915050565b6060600280546103f390611d82565b80601f016020809104026020016040519081016040528092919081815260200182805461041f90611d82565b801561046c5780601f106104415761010080835404028352916020019161046c565b820191906000526020600020905b81548152906001019060200180831161044f57829003601f168201915b5050505050905090565b6000818152600460205260408120546001600160a01b03166104f45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061051b826109f5565b9050806001600160a01b0316836001600160a01b031614156105895760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104eb565b336001600160a01b03821614806105a557506105a58133610378565b6106175760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016104eb565b610621838361106c565b505050565b60606001600160a01b03821661068a5760405162461bcd60e51b8152602060048201526024808201527f426c61636b486f6c652077616c6c6574206973206e6f742061207265616c206f6044820152633bb732b960e11b60648201526084016104eb565b600061069583610a6c565b905060008167ffffffffffffffff8111156106b2576106b2611bc2565b6040519080825280602002602001820160405280156106db578160200160208202803683370190505b50905060005b82811015610722576106f3858261075b565b82828151811061070557610705611dbd565b60209081029190910101528061071a81611de9565b9150506106e1565b509392505050565b61073433826110da565b6107505760405162461bcd60e51b81526004016104eb90611e04565b6106218383836111d1565b600061076683610a6c565b82106107c85760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016104eb565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6000546001600160a01b0316331461081b5760405162461bcd60e51b81526004016104eb90611e55565b805161082e90600f90602084019061198e565b5050565b6000546001600160a01b0316331461085c5760405162461bcd60e51b81526004016104eb90611e55565b600c5481106108b75760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420737562416d6f756e7420666f7220746f74616c546f6b656e6044820152607360f81b60648201526084016104eb565b600d5481106109145760405162461bcd60e51b8152602060048201526024808201527f496e76616c696420737562416d6f756e7420666f72206c656674546f6b656e436044820152631bdd5b9d60e21b60648201526084016104eb565b80600c60008282546109269190611e8a565b9250508190555080600d600082825461093f9190611e8a565b909155505050565b61062183838360405180602001604052806000815250610dbb565b600061096d600b5490565b82106109d05760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016104eb565b600b82815481106109e3576109e3611dbd565b90600052602060002001549050919050565b6000818152600460205260408120546001600160a01b0316806103de5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016104eb565b60006001600160a01b038216610ad75760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016104eb565b506001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610b1d5760405162461bcd60e51b81526004016104eb90611e55565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b915760405162461bcd60e51b81526004016104eb90611e55565b60c8811115610bf45760405162461bcd60e51b815260206004820152602960248201527f52657365727665206973206c696d6974656420746f20323030207065722063616044820152680d8d840c2e840dac2f60bb1b60648201526084016104eb565b80600d541015610c585760405162461bcd60e51b815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e73206c65667420746f207265736572766044820152686520616e796d6f726560b81b60648201526084016104eb565b3360009081526011602052604081208054839290610c77908490611ea1565b90915550600090505b81811015610cd057600e8054906000610c9883611de9565b9091555050600e8054600090815260136020526040902042905554610cbe90339061137c565b80610cc881611de9565b915050610c80565b50600e54600c54610ce19190611e8a565b600d5550565b6060600380546103f390611d82565b6001600160a01b038216331415610d4f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104eb565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610dc533836110da565b610de15760405162461bcd60e51b81526004016104eb90611e04565b610ded84848484611396565b50505050565b6000818152600460205260409020546060906001600160a01b0316610e725760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016104eb565b6000610e7c610ece565b90506000815111610e9c5760405180602001604052806000815250610ec7565b80610ea6846113c9565b604051602001610eb7929190611eb9565b6040516020818303038152906040525b9392505050565b6060600f80546103f390611d82565b6000546001600160a01b03163314610f075760405162461bcd60e51b81526004016104eb90611e55565b80600c6000828254610f199190611ea1565b9250508190555080600d600082825461093f9190611ea1565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b81526004016104eb90611e55565b6001600160a01b038116610fc15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104eb565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b031982166380ac58cd60e01b148061104d57506001600160e01b03198216635b5e139f60e01b145b806103de57506301ffc9a760e01b6001600160e01b03198316146103de565b600081815260066020526040902080546001600160a01b0319166001600160a01b03841690811790915581906110a1826109f5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600460205260408120546001600160a01b03166111535760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104eb565b600061115e836109f5565b9050806001600160a01b0316846001600160a01b031614806111995750836001600160a01b031661118e84610476565b6001600160a01b0316145b806111c957506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166111e4826109f5565b6001600160a01b03161461124c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016104eb565b6001600160a01b0382166112ae5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104eb565b6112b98383836114c7565b6112c460008261106c565b6001600160a01b03831660009081526005602052604081208054600192906112ed908490611e8a565b90915550506001600160a01b038216600090815260056020526040812080546001929061131b908490611ea1565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61082e82826040518060200160405280600081525061157f565b6113a18484846111d1565b6113ad848484846115b2565b610ded5760405162461bcd60e51b81526004016104eb90611ee8565b6060816113ed5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611417578061140181611de9565b91506114109050600a83611f50565b91506113f1565b60008167ffffffffffffffff81111561143257611432611bc2565b6040519080825280601f01601f19166020018201604052801561145c576020820181803683370190505b5090505b84156111c957611471600183611e8a565b915061147e600a86611f64565b611489906030611ea1565b60f81b81838151811061149e5761149e611dbd565b60200101906001600160f81b031916908160001a9053506114c0600a86611f50565b9450611460565b6001600160a01b0383166115225761151d81600b80546000838152600a60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b611545565b816001600160a01b0316836001600160a01b0316146115455761154583826116b0565b6001600160a01b03821661155c576106218161174d565b826001600160a01b0316826001600160a01b0316146106215761062182826117fc565b6115898383611840565b61159660008484846115b2565b6106215760405162461bcd60e51b81526004016104eb90611ee8565b60006001600160a01b0384163b156116a557604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906115f6903390899088908890600401611f78565b6020604051808303816000875af1925050508015611631575060408051601f3d908101601f1916820190925261162e91810190611fb5565b60015b61168b573d80801561165f576040519150601f19603f3d011682016040523d82523d6000602084013e611664565b606091505b5080516116835760405162461bcd60e51b81526004016104eb90611ee8565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506111c9565b506001949350505050565b600060016116bd84610a6c565b6116c79190611e8a565b60008381526009602052604090205490915080821461171a576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600b5460009061175f90600190611e8a565b6000838152600a6020526040812054600b805493945090928490811061178757611787611dbd565b9060005260206000200154905080600b83815481106117a8576117a8611dbd565b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600b8054806117e0576117e0611fd2565b6001900381819060005260206000200160009055905550505050565b600061180783610a6c565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b6001600160a01b0382166118965760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104eb565b6000818152600460205260409020546001600160a01b0316156118fb5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104eb565b611907600083836114c7565b6001600160a01b0382166000908152600560205260408120805460019290611930908490611ea1565b909155505060008181526004602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461199a90611d82565b90600052602060002090601f0160209004810192826119bc5760008555611a02565b82601f106119d557805160ff1916838001178555611a02565b82800160010185558215611a02579182015b82811115611a025782518255916020019190600101906119e7565b50611a0e929150611a12565b5090565b5b80821115611a0e5760008155600101611a13565b6001600160e01b031981168114611a3d57600080fd5b50565b600060208284031215611a5257600080fd5b8135610ec781611a27565b60005b83811015611a78578181015183820152602001611a60565b83811115610ded5750506000910152565b60008151808452611aa1816020860160208601611a5d565b601f01601f19169290920160200192915050565b602081526000610ec76020830184611a89565b600060208284031215611ada57600080fd5b5035919050565b80356001600160a01b0381168114611af857600080fd5b919050565b60008060408385031215611b1057600080fd5b611b1983611ae1565b946020939093013593505050565b600060208284031215611b3957600080fd5b610ec782611ae1565b6020808252825182820181905260009190848201906040850190845b81811015611b7a57835183529284019291840191600101611b5e565b50909695505050505050565b600080600060608486031215611b9b57600080fd5b611ba484611ae1565b9250611bb260208501611ae1565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611bf357611bf3611bc2565b604051601f8501601f19908116603f01168101908282118183101715611c1b57611c1b611bc2565b81604052809350858152868686011115611c3457600080fd5b858560208301376000602087830101525050509392505050565b600060208284031215611c6057600080fd5b813567ffffffffffffffff811115611c7757600080fd5b8201601f81018413611c8857600080fd5b6111c984823560208401611bd8565b60008060408385031215611caa57600080fd5b611cb383611ae1565b915060208301358015158114611cc857600080fd5b809150509250929050565b60008060008060808587031215611ce957600080fd5b611cf285611ae1565b9350611d0060208601611ae1565b925060408501359150606085013567ffffffffffffffff811115611d2357600080fd5b8501601f81018713611d3457600080fd5b611d4387823560208401611bd8565b91505092959194509250565b60008060408385031215611d6257600080fd5b611d6b83611ae1565b9150611d7960208401611ae1565b90509250929050565b600181811c90821680611d9657607f821691505b60208210811415611db757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611dfd57611dfd611dd3565b5060010190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082821015611e9c57611e9c611dd3565b500390565b60008219821115611eb457611eb4611dd3565b500190565b60008351611ecb818460208801611a5d565b835190830190611edf818360208801611a5d565b01949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082611f5f57611f5f611f3a565b500490565b600082611f7357611f73611f3a565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611fab90830184611a89565b9695505050505050565b600060208284031215611fc757600080fd5b8151610ec781611a27565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203b4898c55387b10bcf87e7362647876be5ac6d8d3625876e0d8be5f74e5ee61664736f6c634300080b0033

Deployed Bytecode Sourcemap

20307:3141:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11993:216;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;11993:216:0;;;;;;;;5480:92;;;:::i;:::-;;;;;;;:::i;6463:206::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;6463:206:0;1528:203:1;6105:349:0;;;;;;:::i;:::-;;:::i;:::-;;22555:392;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12214:105::-;12297:10;:17;12214:105;;;3147:25:1;;;3135:2;3120:18;12214:105:0;3001:177:1;7128:292:0;;;;;;:::i;:::-;;:::i;12324:244::-;;;;;;:::i;:::-;;:::i;21707:93::-;;;;;;:::i;:::-;;:::i;21956:286::-;;;;;;:::i;:::-;;:::i;7429:143::-;;;;;;:::i;:::-;;:::i;12573:221::-;;;;;;:::i;:::-;;:::i;5254:217::-;;;;;;:::i;:::-;;:::i;5049:196::-;;;;;;:::i;:::-;;:::i;2970:136::-;;;:::i;22955:488::-;;;;;;:::i;:::-;;:::i;2768:79::-;2814:7;2836:6;-1:-1:-1;;;;;2836:6:0;2768:79;;5581:96;;;:::i;6678:276::-;;;;;;:::i;:::-;;:::i;7581:273::-;;;;;;:::i;:::-;;:::i;5686:315::-;;;;;;:::i;:::-;;:::i;22251:87::-;;;:::i;22347:94::-;22422:14;;22347:94;;21809:138;;;;;;:::i;:::-;;:::i;6963:156::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7079:25:0;;;7060:4;7079:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;6963:156;3115:228;;;;;;:::i;:::-;;:::i;11993:216::-;12095:4;-1:-1:-1;;;;;;12114:50:0;;-1:-1:-1;;;12114:50:0;;:90;;;12168:36;12192:11;12168:23;:36::i;:::-;12107:97;11993:216;-1:-1:-1;;11993:216:0:o;5480:92::-;5534:13;5562:5;5555:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5480:92;:::o;6463:206::-;6539:7;8216:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8216:16:0;6554:73;;;;-1:-1:-1;;;6554:73:0;;6617:2:1;6554:73:0;;;6599:21:1;6656:2;6636:18;;;6629:30;6695:34;6675:18;;;6668:62;-1:-1:-1;;;6746:18:1;;;6739:42;6798:19;;6554:73:0;;;;;;;;;-1:-1:-1;6640:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;6640:24:0;;6463:206::o;6105:349::-;6181:13;6197:23;6212:7;6197:14;:23::i;:::-;6181:39;;6239:5;-1:-1:-1;;;;;6235:9:0;:2;-1:-1:-1;;;;;6235:9:0;;;6227:55;;;;-1:-1:-1;;;6227:55:0;;7030:2:1;6227:55:0;;;7012:21:1;7069:2;7049:18;;;7042:30;7108:34;7088:18;;;7081:62;-1:-1:-1;;;7159:18:1;;;7152:31;7200:19;;6227:55:0;6828:397:1;6227:55:0;2207:10;-1:-1:-1;;;;;6294:19:0;;;;:67;;-1:-1:-1;6317:44:0;6341:5;2207:10;6963:156;:::i;6317:44::-;6286:136;;;;-1:-1:-1;;;6286:136:0;;7432:2:1;6286:136:0;;;7414:21:1;7471:2;7451:18;;;7444:30;7510:34;7490:18;;;7483:62;7581:26;7561:18;;;7554:54;7625:19;;6286:136:0;7230:420:1;6286:136:0;6428:21;6437:2;6441:7;6428:8;:21::i;:::-;6177:277;6105:349;;:::o;22555:392::-;22629:16;-1:-1:-1;;;;;22661:25:0;;22653:74;;;;-1:-1:-1;;;22653:74:0;;7857:2:1;22653:74:0;;;7839:21:1;7896:2;7876:18;;;7869:30;7935:34;7915:18;;;7908:62;-1:-1:-1;;;7986:18:1;;;7979:34;8030:19;;22653:74:0;7655:400:1;22653:74:0;22734:13;22750:24;22760:13;22750:9;:24::i;:::-;22734:40;;22778:23;22818:5;22804:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22804:20:0;;22778:46;;22836:9;22831:92;22851:5;22849:1;:7;22831:92;;;22881:37;22901:13;22916:1;22881:19;:37::i;:::-;22869:6;22876:1;22869:9;;;;;;;;:::i;:::-;;;;;;;;;;:49;22858:3;;;;:::i;:::-;;;;22831:92;;;-1:-1:-1;22936:6:0;22555:392;-1:-1:-1;;;22555:392:0:o;7128:292::-;7286:41;2207:10;7319:7;7286:18;:41::i;:::-;7278:103;;;;-1:-1:-1;;;7278:103:0;;;;;;;:::i;:::-;7387:28;7397:4;7403:2;7407:7;7387:9;:28::i;12324:244::-;12421:7;12452:23;12469:5;12452:16;:23::i;:::-;12444:5;:31;12436:87;;;;-1:-1:-1;;;12436:87:0;;9084:2:1;12436:87:0;;;9066:21:1;9123:2;9103:18;;;9096:30;9162:34;9142:18;;;9135:62;-1:-1:-1;;;9213:18:1;;;9206:41;9264:19;;12436:87:0;8882:407:1;12436:87:0;-1:-1:-1;;;;;;12537:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;12324:244::o;21707:93::-;2814:7;2836:6;-1:-1:-1;;;;;2836:6:0;2207:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;21779:16;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;;21707:93:::0;:::o;21956:286::-;2814:7;2836:6;-1:-1:-1;;;;;2836:6:0;2207:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;22048:11:::1;;22036:9;:23;22028:69;;;::::0;-1:-1:-1;;;22028:69:0;;9857:2:1;22028:69:0::1;::::0;::::1;9839:21:1::0;9896:2;9876:18;;;9869:30;9935:34;9915:18;;;9908:62;-1:-1:-1;;;9986:18:1;;;9979:31;10027:19;;22028:69:0::1;9655:397:1::0;22028:69:0::1;22121:14;;22109:9;:26;22101:75;;;::::0;-1:-1:-1;;;22101:75:0;;10259:2:1;22101:75:0::1;::::0;::::1;10241:21:1::0;10298:2;10278:18;;;10271:30;10337:34;10317:18;;;10310:62;-1:-1:-1;;;10388:18:1;;;10381:34;10432:19;;22101:75:0::1;10057:400:1::0;22101:75:0::1;22197:9;22182:11;;:24;;;;;;;:::i;:::-;;;;;;;;22228:9;22210:14;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;21956:286:0:o;7429:143::-;7528:39;7545:4;7551:2;7555:7;7528:39;;;;;;;;;;;;:16;:39::i;12573:221::-;12648:7;12679:30;12297:10;:17;;12214:105;12679:30;12671:5;:38;12663:95;;;;-1:-1:-1;;;12663:95:0;;10794:2:1;12663:95:0;;;10776:21:1;10833:2;10813:18;;;10806:30;10872:34;10852:18;;;10845:62;-1:-1:-1;;;10923:18:1;;;10916:42;10975:19;;12663:95:0;10592:408:1;12663:95:0;12772:10;12783:5;12772:17;;;;;;;;:::i;:::-;;;;;;;;;12765:24;;12573:221;;;:::o;5254:217::-;5326:7;5357:16;;;:7;:16;;;;;;-1:-1:-1;;;;;5357:16:0;5385:19;5377:73;;;;-1:-1:-1;;;5377:73:0;;11207:2:1;5377:73:0;;;11189:21:1;11246:2;11226:18;;;11219:30;11285:34;11265:18;;;11258:62;-1:-1:-1;;;11336:18:1;;;11329:39;11385:19;;5377:73:0;11005:405:1;5049:196:0;5121:7;-1:-1:-1;;;;;5144:19:0;;5136:74;;;;-1:-1:-1;;;5136:74:0;;11617:2:1;5136:74:0;;;11599:21:1;11656:2;11636:18;;;11629:30;11695:34;11675:18;;;11668:62;-1:-1:-1;;;11746:18:1;;;11739:40;11796:19;;5136:74:0;11415:406:1;5136:74:0;-1:-1:-1;;;;;;5224:16:0;;;;;:9;:16;;;;;;;5049:196::o;2970:136::-;2814:7;2836:6;-1:-1:-1;;;;;2836:6:0;2207:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;3072:1:::1;3056:6:::0;;3035:40:::1;::::0;-1:-1:-1;;;;;3056:6:0;;::::1;::::0;3035:40:::1;::::0;3072:1;;3035:40:::1;3099:1;3082:19:::0;;-1:-1:-1;;;;;;3082:19:0::1;::::0;;2970:136::o;22955:488::-;2814:7;2836:6;-1:-1:-1;;;;;2836:6:0;2207:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;23031:3:::1;23021:6;:13;;23013:67;;;::::0;-1:-1:-1;;;23013:67:0;;12028:2:1;23013:67:0::1;::::0;::::1;12010:21:1::0;12067:2;12047:18;;;12040:30;12106:34;12086:18;;;12079:62;-1:-1:-1;;;12157:18:1;;;12150:39;12206:19;;23013:67:0::1;11826:405:1::0;23013:67:0::1;23110:6;23092:14;;:24;;23084:78;;;::::0;-1:-1:-1;;;23084:78:0;;12438:2:1;23084:78:0::1;::::0;::::1;12420:21:1::0;12477:2;12457:18;;;12450:30;12516:34;12496:18;;;12489:62;-1:-1:-1;;;12567:18:1;;;12560:39;12616:19;;23084:78:0::1;12236:405:1::0;23084:78:0::1;23185:10;23168:28;::::0;;;:16:::1;:28;::::0;;;;:38;;23200:6;;23168:28;:38:::1;::::0;23200:6;;23168:38:::1;:::i;:::-;::::0;;;-1:-1:-1;23217:9:0::1;::::0;-1:-1:-1;23212:174:0::1;23234:6;23230:1;:10;23212:174;;;23253:16;:18:::0;;;:16:::1;:18;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;23300:16:0::1;::::0;;23278:39:::1;::::0;;;:21:::1;:39;::::0;;;;23320:15:::1;23278:57:::0;;23364:16;23342:39:::1;::::0;23352:10:::1;::::0;23342:9:::1;:39::i;:::-;23242:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23212:174;;;;23422:16;;23408:11;;:30;;;;:::i;:::-;23391:14;:47:::0;-1:-1:-1;22955:488:0:o;5581:96::-;5637:13;5665:7;5658:14;;;;;:::i;6678:276::-;-1:-1:-1;;;;;6776:24:0;;2207:10;6776:24;;6768:62;;;;-1:-1:-1;;;6768:62:0;;12981:2:1;6768:62:0;;;12963:21:1;13020:2;13000:18;;;12993:30;13059:27;13039:18;;;13032:55;13104:18;;6768:62:0;12779:349:1;6768:62:0;2207:10;6836:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;6836:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;6836:53:0;;;;;;;;;;6901:48;;540:41:1;;;6836:42:0;;2207:10;6901:48;;513:18:1;6901:48:0;;;;;;;6678:276;;:::o;7581:273::-;7708:41;2207:10;7741:7;7708:18;:41::i;:::-;7700:103;;;;-1:-1:-1;;;7700:103:0;;;;;;;:::i;:::-;7810:39;7824:4;7830:2;7834:7;7843:5;7810:13;:39::i;:::-;7581:273;;;;:::o;5686:315::-;8197:4;8216:16;;;:7;:16;;;;;;5759:13;;-1:-1:-1;;;;;8216:16:0;5780:76;;;;-1:-1:-1;;;5780:76:0;;13335:2:1;5780:76:0;;;13317:21:1;13374:2;13354:18;;;13347:30;13413:34;13393:18;;;13386:62;-1:-1:-1;;;13464:18:1;;;13457:45;13519:19;;5780:76:0;13133:411:1;5780:76:0;5862:21;5886:10;:8;:10::i;:::-;5862:34;;5933:1;5917:7;5911:21;:23;5910:86;;;;;;;;;;;;;;;;;5962:7;5971:18;:7;:16;:18::i;:::-;5945:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5910:86;5903:93;5686:315;-1:-1:-1;;;5686:315:0:o;22251:87::-;22298:13;22326:7;22319:14;;;;;:::i;21809:138::-;2814:7;2836:6;-1:-1:-1;;;;;2836:6:0;2207:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;21898:11:::1;21883;;:26;;;;;;;:::i;:::-;;;;;;;;21931:11;21913:14;;:29;;;;;;;:::i;3115:228::-:0;2814:7;2836:6;-1:-1:-1;;;;;2836:6:0;2207:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3199:22:0;::::1;3191:73;;;::::0;-1:-1:-1;;;3191:73:0;;14226:2:1;3191:73:0::1;::::0;::::1;14208:21:1::0;14265:2;14245:18;;;14238:30;14304:34;14284:18;;;14277:62;-1:-1:-1;;;14355:18:1;;;14348:36;14401:19;;3191:73:0::1;14024:402:1::0;3191:73:0::1;3297:6;::::0;;3276:38:::1;::::0;-1:-1:-1;;;;;3276:38:0;;::::1;::::0;3297:6;::::1;::::0;3276:38:::1;::::0;::::1;3321:6;:17:::0;;-1:-1:-1;;;;;;3321:17:0::1;-1:-1:-1::0;;;;;3321:17:0;;;::::1;::::0;;;::::1;::::0;;3115:228::o;4778:262::-;4880:4;-1:-1:-1;;;;;;4899:40:0;;-1:-1:-1;;;4899:40:0;;:94;;-1:-1:-1;;;;;;;4945:48:0;;-1:-1:-1;;;4945:48:0;4899:94;:136;;;-1:-1:-1;;;;;;;;;;2044:40:0;;;4999:36;1939:151;10570:162;10640:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;10640:29:0;-1:-1:-1;;;;;10640:29:0;;;;;;;;:24;;10690:23;10640:24;10690:14;:23::i;:::-;-1:-1:-1;;;;;10681:46:0;;;;;;;;;;;10570:162;;:::o;8260:339::-;8353:4;8216:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8216:16:0;8365:73;;;;-1:-1:-1;;;8365:73:0;;14633:2:1;8365:73:0;;;14615:21:1;14672:2;14652:18;;;14645:30;14711:34;14691:18;;;14684:62;-1:-1:-1;;;14762:18:1;;;14755:42;14814:19;;8365:73:0;14431:408:1;8365:73:0;8445:13;8461:23;8476:7;8461:14;:23::i;:::-;8445:39;;8510:5;-1:-1:-1;;;;;8499:16:0;:7;-1:-1:-1;;;;;8499:16:0;;:51;;;;8543:7;-1:-1:-1;;;;;8519:31:0;:20;8531:7;8519:11;:20::i;:::-;-1:-1:-1;;;;;8519:31:0;;8499:51;:94;;;-1:-1:-1;;;;;;7079:25:0;;;7060:4;7079:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;8554:39;8491:103;8260:339;-1:-1:-1;;;;8260:339:0:o;10085:476::-;10203:4;-1:-1:-1;;;;;10178:29:0;:23;10193:7;10178:14;:23::i;:::-;-1:-1:-1;;;;;10178:29:0;;10170:83;;;;-1:-1:-1;;;10170:83:0;;15046:2:1;10170:83:0;;;15028:21:1;15085:2;15065:18;;;15058:30;15124:34;15104:18;;;15097:62;-1:-1:-1;;;15175:18:1;;;15168:39;15224:19;;10170:83:0;14844:405:1;10170:83:0;-1:-1:-1;;;;;10265:16:0;;10257:65;;;;-1:-1:-1;;;10257:65:0;;15456:2:1;10257:65:0;;;15438:21:1;15495:2;15475:18;;;15468:30;15534:34;15514:18;;;15507:62;-1:-1:-1;;;15585:18:1;;;15578:34;15629:19;;10257:65:0;15254:400:1;10257:65:0;10328:39;10349:4;10355:2;10359:7;10328:20;:39::i;:::-;10373:29;10390:1;10394:7;10373:8;:29::i;:::-;-1:-1:-1;;;;;10451:15:0;;;;;;:9;:15;;;;;:20;;10470:1;;10451:15;:20;;10470:1;;10451:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10475:13:0;;;;;;:9;:13;;;;;:18;;10492:1;;10475:13;:18;;10492:1;;10475:18;:::i;:::-;;;;-1:-1:-1;;10497:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10497:21:0;-1:-1:-1;;;;;10497:21:0;;;;;;;;;10529:27;;10497:16;;10529:27;;;;;;;10085:476;;;:::o;8608:102::-;8679:26;8689:2;8693:7;8679:26;;;;;;;;;;;;:9;:26::i;7863:260::-;7972:28;7982:4;7988:2;7992:7;7972:9;:28::i;:::-;8015:48;8038:4;8044:2;8048:7;8057:5;8015:22;:48::i;:::-;8007:111;;;;-1:-1:-1;;;8007:111:0;;;;;;;:::i;15571:579::-;15627:13;15829:8;15825:24;;-1:-1:-1;;15839:10:0;;;;;;;;;;;;-1:-1:-1;;;15839:10:0;;;;;15571:579::o;15825:24::-;15871:5;15856:12;15901:49;15908:7;;15901:49;;15923:8;;;;:::i;:::-;;-1:-1:-1;15935:10:0;;-1:-1:-1;15943:2:0;15935:10;;:::i;:::-;;;15901:49;;;15956:19;15988:6;15978:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15978:17:0;;15956:39;;16002:116;16009:10;;16002:116;;16027:11;16037:1;16027:11;;:::i;:::-;;-1:-1:-1;16085:10:0;16093:2;16085:5;:10;:::i;:::-;16072:24;;:2;:24;:::i;:::-;16059:39;;16042:6;16049;16042:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16042:56:0;;;;;;;;-1:-1:-1;16102:11:0;16111:2;16102:11;;:::i;:::-;;;16002:116;;12799:434;-1:-1:-1;;;;;12957:18:0;;12953:136;;12977:40;13009:7;13544:10;:17;;13517:24;;;;:15;:24;;;;;:44;;;13568:24;;;;;;;;;;;;13445:152;12977:40;12953:136;;;13038:2;-1:-1:-1;;;;;13030:10:0;:4;-1:-1:-1;;;;;13030:10:0;;13026:63;;13042:47;13075:4;13081:7;13042:32;:47::i;:::-;-1:-1:-1;;;;;13100:16:0;;13096:132;;13118:45;13155:7;13118:36;:45::i;13096:132::-;13182:4;-1:-1:-1;;;;;13176:10:0;:2;-1:-1:-1;;;;;13176:10:0;;13172:56;;13188:40;13216:2;13220:7;13188:27;:40::i;8719:238::-;8810:18;8816:2;8820:7;8810:5;:18::i;:::-;8843:54;8874:1;8878:2;8882:7;8891:5;8843:22;:54::i;:::-;8835:117;;;;-1:-1:-1;;;8835:117:0;;;;;;;:::i;10741:623::-;10850:4;-1:-1:-1;;;;;10866:13:0;;16946:20;17026:8;10862:498;;10898:72;;-1:-1:-1;;;10898:72:0;;-1:-1:-1;;;;;10898:36:0;;;;;:72;;2207:10;;10949:4;;10955:7;;10964:5;;10898:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10898:72:0;;;;;;;;-1:-1:-1;;10898:72:0;;;;;;;;;;;;:::i;:::-;;;10889:437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11114:13:0;;11110:212;;11138:60;;-1:-1:-1;;;11138:60:0;;;;;;;:::i;11110:212::-;11258:6;11252:13;11243:6;11239:2;11235:15;11228:38;10889:437;-1:-1:-1;;;;;;11013:55:0;-1:-1:-1;;;11013:55:0;;-1:-1:-1;11006:62:0;;10862:498;-1:-1:-1;11351:4:0;10741:623;;;;;;:::o;13602:884::-;13849:22;13899:1;13874:22;13891:4;13874:16;:22::i;:::-;:26;;;;:::i;:::-;13904:18;13925:26;;;:17;:26;;;;;;13849:51;;-1:-1:-1;14044:28:0;;;14040:288;;-1:-1:-1;;;;;14100:18:0;;14078:19;14100:18;;;:12;:18;;;;;;;;:34;;;;;;;;;14140:30;;;;;;:44;;;14246:30;;:17;:30;;;;;:43;;;14040:288;-1:-1:-1;14410:26:0;;;;:17;:26;;;;;;;;14403:33;;;-1:-1:-1;;;;;14447:18:0;;;;;:12;:18;;;;;:34;;;;;;;14440:41;13602:884::o;14491:987::-;14750:10;:17;14725:22;;14750:21;;14770:1;;14750:21;:::i;:::-;14775:18;14796:24;;;:15;:24;;;;;;15141:10;:26;;14725:46;;-1:-1:-1;14796:24:0;;14725:46;;15141:26;;;;;;:::i;:::-;;;;;;;;;15119:48;;15198:11;15173:10;15184;15173:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;15271:28;;;:15;:28;;;;;;;:41;;;15429:24;;;;;15422:31;15457:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14564:914;;;14491:987;:::o;13238:202::-;13318:14;13335:20;13352:2;13335:16;:20::i;:::-;-1:-1:-1;;;;;13362:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;13400:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;13238:202:0:o;8966:339::-;-1:-1:-1;;;;;9041:16:0;;9033:61;;;;-1:-1:-1;;;9033:61:0;;17534:2:1;9033:61:0;;;17516:21:1;;;17553:18;;;17546:30;17612:34;17592:18;;;17585:62;17664:18;;9033:61:0;17332:356:1;9033:61:0;8197:4;8216:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8216:16:0;:30;9098:58;;;;-1:-1:-1;;;9098:58:0;;17895:2:1;9098:58:0;;;17877:21:1;17934:2;17914:18;;;17907:30;17973;17953:18;;;17946:58;18021:18;;9098:58:0;17693:352:1;9098:58:0;9162:45;9191:1;9195:2;9199:7;9162:20;:45::i;:::-;-1:-1:-1;;;;;9213:13:0;;;;;;:9;:13;;;;;:18;;9230:1;;9213:13;:18;;9230:1;;9213:18;:::i;:::-;;;;-1:-1:-1;;9235:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9235:21:0;-1:-1:-1;;;;;9235:21:0;;;;;;;;9267:33;;9235:16;;;9267:33;;9235:16;;9267:33;8966:339;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2173:186::-;2232:6;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2324:29;2343:9;2324:29;:::i;2364:632::-;2535:2;2587:21;;;2657:13;;2560:18;;;2679:22;;;2506:4;;2535:2;2758:15;;;;2732:2;2717:18;;;2506:4;2801:169;2815:6;2812:1;2809:13;2801:169;;;2876:13;;2864:26;;2945:15;;;;2910:12;;;;2837:1;2830:9;2801:169;;;-1:-1:-1;2987:3:1;;2364:632;-1:-1:-1;;;;;;2364:632:1:o;3183:328::-;3260:6;3268;3276;3329:2;3317:9;3308:7;3304:23;3300:32;3297:52;;;3345:1;3342;3335:12;3297:52;3368:29;3387:9;3368:29;:::i;:::-;3358:39;;3416:38;3450:2;3439:9;3435:18;3416:38;:::i;:::-;3406:48;;3501:2;3490:9;3486:18;3473:32;3463:42;;3183:328;;;;;:::o;3516:127::-;3577:10;3572:3;3568:20;3565:1;3558:31;3608:4;3605:1;3598:15;3632:4;3629:1;3622:15;3648:632;3713:5;3743:18;3784:2;3776:6;3773:14;3770:40;;;3790:18;;:::i;:::-;3865:2;3859:9;3833:2;3919:15;;-1:-1:-1;;3915:24:1;;;3941:2;3911:33;3907:42;3895:55;;;3965:18;;;3985:22;;;3962:46;3959:72;;;4011:18;;:::i;:::-;4051:10;4047:2;4040:22;4080:6;4071:15;;4110:6;4102;4095:22;4150:3;4141:6;4136:3;4132:16;4129:25;4126:45;;;4167:1;4164;4157:12;4126:45;4217:6;4212:3;4205:4;4197:6;4193:17;4180:44;4272:1;4265:4;4256:6;4248;4244:19;4240:30;4233:41;;;;3648:632;;;;;:::o;4285:451::-;4354:6;4407:2;4395:9;4386:7;4382:23;4378:32;4375:52;;;4423:1;4420;4413:12;4375:52;4463:9;4450:23;4496:18;4488:6;4485:30;4482:50;;;4528:1;4525;4518:12;4482:50;4551:22;;4604:4;4596:13;;4592:27;-1:-1:-1;4582:55:1;;4633:1;4630;4623:12;4582:55;4656:74;4722:7;4717:2;4704:16;4699:2;4695;4691:11;4656:74;:::i;4741:347::-;4806:6;4814;4867:2;4855:9;4846:7;4842:23;4838:32;4835:52;;;4883:1;4880;4873:12;4835:52;4906:29;4925:9;4906:29;:::i;:::-;4896:39;;4985:2;4974:9;4970:18;4957:32;5032:5;5025:13;5018:21;5011:5;5008:32;4998:60;;5054:1;5051;5044:12;4998:60;5077:5;5067:15;;;4741:347;;;;;:::o;5093:667::-;5188:6;5196;5204;5212;5265:3;5253:9;5244:7;5240:23;5236:33;5233:53;;;5282:1;5279;5272:12;5233:53;5305:29;5324:9;5305:29;:::i;:::-;5295:39;;5353:38;5387:2;5376:9;5372:18;5353:38;:::i;:::-;5343:48;;5438:2;5427:9;5423:18;5410:32;5400:42;;5493:2;5482:9;5478:18;5465:32;5520:18;5512:6;5509:30;5506:50;;;5552:1;5549;5542:12;5506:50;5575:22;;5628:4;5620:13;;5616:27;-1:-1:-1;5606:55:1;;5657:1;5654;5647:12;5606:55;5680:74;5746:7;5741:2;5728:16;5723:2;5719;5715:11;5680:74;:::i;:::-;5670:84;;;5093:667;;;;;;;:::o;5765:260::-;5833:6;5841;5894:2;5882:9;5873:7;5869:23;5865:32;5862:52;;;5910:1;5907;5900:12;5862:52;5933:29;5952:9;5933:29;:::i;:::-;5923:39;;5981:38;6015:2;6004:9;6000:18;5981:38;:::i;:::-;5971:48;;5765:260;;;;;:::o;6030:380::-;6109:1;6105:12;;;;6152;;;6173:61;;6227:4;6219:6;6215:17;6205:27;;6173:61;6280:2;6272:6;6269:14;6249:18;6246:38;6243:161;;;6326:10;6321:3;6317:20;6314:1;6307:31;6361:4;6358:1;6351:15;6389:4;6386:1;6379:15;6243:161;;6030:380;;;:::o;8060:127::-;8121:10;8116:3;8112:20;8109:1;8102:31;8152:4;8149:1;8142:15;8176:4;8173:1;8166:15;8192:127;8253:10;8248:3;8244:20;8241:1;8234:31;8284:4;8281:1;8274:15;8308:4;8305:1;8298:15;8324:135;8363:3;-1:-1:-1;;8384:17:1;;8381:43;;;8404:18;;:::i;:::-;-1:-1:-1;8451:1:1;8440:13;;8324:135::o;8464:413::-;8666:2;8648:21;;;8705:2;8685:18;;;8678:30;8744:34;8739:2;8724:18;;8717:62;-1:-1:-1;;;8810:2:1;8795:18;;8788:47;8867:3;8852:19;;8464:413::o;9294:356::-;9496:2;9478:21;;;9515:18;;;9508:30;9574:34;9569:2;9554:18;;9547:62;9641:2;9626:18;;9294:356::o;10462:125::-;10502:4;10530:1;10527;10524:8;10521:34;;;10535:18;;:::i;:::-;-1:-1:-1;10572:9:1;;10462:125::o;12646:128::-;12686:3;12717:1;12713:6;12710:1;12707:13;12704:39;;;12723:18;;:::i;:::-;-1:-1:-1;12759:9:1;;12646:128::o;13549:470::-;13728:3;13766:6;13760:13;13782:53;13828:6;13823:3;13816:4;13808:6;13804:17;13782:53;:::i;:::-;13898:13;;13857:16;;;;13920:57;13898:13;13857:16;13954:4;13942:17;;13920:57;:::i;:::-;13993:20;;13549:470;-1:-1:-1;;;;13549:470:1:o;15659:414::-;15861:2;15843:21;;;15900:2;15880:18;;;15873:30;15939:34;15934:2;15919:18;;15912:62;-1:-1:-1;;;16005:2:1;15990:18;;15983:48;16063:3;16048:19;;15659:414::o;16078:127::-;16139:10;16134:3;16130:20;16127:1;16120:31;16170:4;16167:1;16160:15;16194:4;16191:1;16184:15;16210:120;16250:1;16276;16266:35;;16281:18;;:::i;:::-;-1:-1:-1;16315:9:1;;16210:120::o;16335:112::-;16367:1;16393;16383:35;;16398:18;;:::i;:::-;-1:-1:-1;16432:9:1;;16335:112::o;16452:489::-;-1:-1:-1;;;;;16721:15:1;;;16703:34;;16773:15;;16768:2;16753:18;;16746:43;16820:2;16805:18;;16798:34;;;16868:3;16863:2;16848:18;;16841:31;;;16646:4;;16889:46;;16915:19;;16907:6;16889:46;:::i;:::-;16881:54;16452:489;-1:-1:-1;;;;;;16452:489:1:o;16946:249::-;17015:6;17068:2;17056:9;17047:7;17043:23;17039:32;17036:52;;;17084:1;17081;17074:12;17036:52;17116:9;17110:16;17135:30;17159:5;17135:30;:::i;17200:127::-;17261:10;17256:3;17252:20;17249:1;17242:31;17292:4;17289:1;17282:15;17316:4;17313:1;17306:15

Swarm Source

ipfs://3b4898c55387b10bcf87e7362647876be5ac6d8d3625876e0d8be5f74e5ee616
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.