ERC-721
NFT
Overview
Max Total Supply
465 BMADVRKFOREST1OF1
Holders
263
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 BMADVRKFOREST1OF1Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BlvckMarketDvrkForestUnique
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2022-03-20 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } 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); } 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); } contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) private _supportedInterfaces; function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return _supportedInterfaces[interfaceId]; } function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); 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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); 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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); 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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); 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 { // 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } library EnumerableMap { struct MapEntry { bytes32 _key; bytes32 _value; } struct Map { // Storage of map keys and values MapEntry[] _entries; // Position of the entry defined by a key in the `entries` array, plus 1 // because index 0 means a key is not in the map. mapping (bytes32 => uint256) _indexes; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) { // Equivalent to !contains(map, key) map._entries.push(MapEntry({ _key: key, _value: value })); // The entry is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value map._indexes[key] = map._entries.length; return true; } else { map._entries[keyIndex - 1]._value = value; return false; } } /** * @dev Removes a key-value pair from a map. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function _remove(Map storage map, bytes32 key) private returns (bool) { // We read and store the key's index to prevent multiple reads from the same storage slot uint256 keyIndex = map._indexes[key]; if (keyIndex != 0) { // Equivalent to contains(map, key) // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one // in the array, and then remove the last entry (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = keyIndex - 1; uint256 lastIndex = map._entries.length - 1; // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. MapEntry storage lastEntry = map._entries[lastIndex]; // Move the last entry to the index where the entry to delete is map._entries[toDeleteIndex] = lastEntry; // Update the index for the moved entry map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved entry was stored map._entries.pop(); // Delete the index for the deleted slot delete map._indexes[key]; return true; } else { return false; } } /** * @dev Returns true if the key is in the map. O(1). */ function _contains(Map storage map, bytes32 key) private view returns (bool) { return map._indexes[key] != 0; } /** * @dev Returns the number of key-value pairs in the map. O(1). */ function _length(Map storage map) private view returns (uint256) { return map._entries.length; } /** * @dev Returns the key-value pair stored at position `index` in the map. O(1). * * Note that there are no guarantees on the ordering of entries inside the * array, and it may change when more entries are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) { require(map._entries.length > index, "EnumerableMap: index out of bounds"); MapEntry storage entry = map._entries[index]; return (entry._key, entry._value); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. */ function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) { uint256 keyIndex = map._indexes[key]; if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key) return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function _get(Map storage map, bytes32 key) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } /** * @dev Same as {_get}, with a custom error message when `key` is not in the map. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {_tryGet}. */ function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) { uint256 keyIndex = map._indexes[key]; require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key) return map._entries[keyIndex - 1]._value; // All indexes are 1-based } // UintToAddressMap struct UintToAddressMap { Map _inner; } /** * @dev Adds a key-value pair to a map, or updates the value for an existing * key. O(1). * * Returns true if the key was added to the map, that is if it was not * already present. */ function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the key was removed from the map, that is if it was present. */ function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { return _remove(map._inner, bytes32(key)); } /** * @dev Returns true if the key is in the map. O(1). */ function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { return _contains(map._inner, bytes32(key)); } /** * @dev Returns the number of elements in the map. O(1). */ function length(UintToAddressMap storage map) internal view returns (uint256) { return _length(map._inner); } function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { (bytes32 key, bytes32 value) = _at(map._inner, index); return (uint256(key), address(uint160(uint256(value)))); } /** * @dev Tries to returns the value associated with `key`. O(1). * Does not revert if `key` is not in the map. * * _Available since v3.4._ */ function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key)); return (success, address(uint160(uint256(value)))); } /** * @dev Returns the value associated with `key`. O(1). * * Requirements: * * - `key` must be in the map. */ function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key))))); } function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) { return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))); } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using SafeMath for uint256; using Address for address; using EnumerableSet for EnumerableSet.UintSet; using EnumerableMap for EnumerableMap.UintToAddressMap; using Strings for uint256; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from holder address to their (enumerable) set of owned tokens mapping (address => EnumerableSet.UintSet) private _holderTokens; // Mapping from owner to list of owned token IDs mapping (address => uint256[]) internal ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal ownedTokensIndex; // Enumerable mapping from token ids to their owners EnumerableMap.UintToAddressMap private _tokenOwners; // 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; // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping (uint256 => string) private _tokenURIs; // Array with all token ids, used for enumeration uint256[] internal allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal allTokensIndex; // Base URI string private _baseURI; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); _registerInterface(_INTERFACE_ID_ERC721_METADATA); _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } modifier canTransfer(uint256 _tokenId) { require(_isApprovedOrOwner(msg.sender, _tokenId)); _; } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _holderTokens[owner].length(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token"); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI. return string(abi.encodePacked(base, tokenId.toString())); } /** * @dev Returns the base URI set via {_setBaseURI}. This will be * automatically added as a prefix in {tokenURI} to each token's URI, or * to the token ID if no specific URI is set for that token ID. */ function baseURI() public view virtual returns (string memory) { return _baseURI; } function totalSupplyString() public view virtual returns (string memory) { return _tokenOwners.length().toString(); } function addTokenTo(address _to, uint256 _tokenId) internal { uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } function removeTokenFrom(address _from, uint256 _tokenId) internal { uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; ownedTokens[_from].pop(); ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { return _holderTokens[owner].at(index); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds return _tokenOwners.length(); } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { (uint256 tokenId, ) = _tokenOwners.at(index); return tokenId; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId); } function _safeTransfer(address from, address to, uint256 tokenId) internal virtual { _transfer(from, to, tokenId); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _tokenOwners.contains(tokenId); } 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 { _mint(to, tokenId); } 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"); allTokensIndex[tokenId] = allTokens.length; allTokens.push(tokenId); _beforeTokenTransfer(address(0), to, tokenId); _holderTokens[to].add(tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); // internal owner _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); removeTokenFrom(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } _holderTokens[owner].remove(tokenId); _tokenOwners.remove(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"); // internal owner require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _holderTokens[from].remove(tokenId); _holderTokens[to].add(tokenId); removeTokenFrom(from, tokenId); addTokenTo(to, tokenId); _tokenOwners.set(tokenId, to); emit Transfer(from, to, tokenId); } function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } function _setBaseURI(string memory baseURI_) internal virtual { _baseURI = baseURI_; } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (!to.isContract()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } function _approve(address to, uint256 tokenId) private { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } contract Ownable is Context { address public _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; } } contract BlvckMarketDvrkForestUnique is Ownable, ERC721 { using Strings for string; using Strings for uint256; using SafeMath for uint256; constructor () ERC721("BlvckMarketDvrkForestUnique" ,"BMADVRKFOREST1OF1"){} struct SnakeNFT { string ipfsHash; address publisher; uint id; } address payable public artistWallet = payable(0x43bF6C711ceA984e55926fCa73D602309769aBF6); address payable public teamWallet = payable(0x7E66E23b0Cc2eB712a1af1dE9b6aF0FbABbd42C3); address payable public treasuryWallet = payable(0x1196f89b8DA779CF24613cA7572B991927d3E9ad); address payable public taxWallet = payable(0xD5d8B27a62b46e4e4fA78F38aE8C843F1fD69b79); address payable public BMAWallet = payable(0x25f67d7e553174F8c170Cfa48A794FC5090e197F); uint public artistTax = 22; uint public teamTax = 6; uint public treasuryTax = 11; uint public taxTax = 50; uint public BMATax = 11; bool public enableSecurityPayment = false; bool public enableDutchAuction = false; bool public enableBlvcklist = true; mapping(address => address) public blvcklist; uint256 public priceMint = 1000000000000000000; uint256 public priceMint1 = 1000000000000000000; uint256 public priceMint2 = 2000000000000000000; uint256 public priceMint3 = 3000000000000000000; uint256 public priceMint4 = 4000000000000000000; uint256 public mintCount = 0; uint256 public MAX_SNAKE = 888; string public baseExtension = ".json"; bool public pauseMint = false; SnakeNFT[] public snakesNFTs; mapping (string => uint256) ipfsHashToTokenId; mapping (address => uint256) internal publishedTokensCount; mapping (address => uint256[]) internal publishedTokens; mapping(address => mapping (uint256 => uint256)) internal publishedTokensIndex; function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function withdraw() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function setBaseExtension(string memory _value) public onlyOwner { baseExtension = _value; } function setPricesDutchAuction( uint256 _value1, uint256 _value2, uint256 _value3, uint256 _value4 ) public onlyOwner { priceMint1 = _value1; priceMint2 = _value2; priceMint3 = _value3; priceMint4 = _value4; } function setPriceMint(uint256 _value) public onlyOwner { priceMint = _value; } function setBaseURI(string memory _value) public onlyOwner { _setBaseURI(_value); } function setPauseMint(bool _value) public onlyOwner { pauseMint = _value; } function setEnableSecurityPayment(bool _value) public onlyOwner { enableSecurityPayment = _value; } function setEnableDutchAuction(bool _value) public onlyOwner { enableDutchAuction = _value; } function setBMATax(uint _value) public onlyOwner { BMATax = _value; } function setTaxTax(uint _value) public onlyOwner { taxTax = _value; } function setTreasuryTax(uint _value) public onlyOwner { treasuryTax = _value; } function setTeamTax(uint _value) public onlyOwner { teamTax = _value; } function setArtistTax(uint _value) public onlyOwner { artistTax = _value; } function setBMAWallet(address payable _value) public onlyOwner { BMAWallet = _value; } function setTaxWallet(address payable _value) public onlyOwner { taxWallet = _value; } function setTreasuryWallet(address payable _value) public onlyOwner { treasuryWallet = _value; } function setTeamWallet(address payable _value) public onlyOwner { teamWallet = _value; } function setArtistWallet(address payable _value) public onlyOwner { artistWallet = _value; } function setEnableBlvcklist(bool _value) public onlyOwner { enableBlvcklist = _value; } function setBlvcklist(address[] memory _address) public onlyOwner { for(uint i = 0; _address.length > i; i++) blvcklist[_address[i]] = _address[i]; } function getIpfsHashToTokenId(string memory _string) public view returns (uint256){ return ipfsHashToTokenId[_string]; } function getOwnedTokens(address _owner) public view returns (uint256[] memory) { return ownedTokens[_owner]; } function mintNFT(uint256 _amount) public payable { require(!pauseMint, "Mint paused."); require(totalSupply().add(_amount) <= MAX_SNAKE, "Limit exceeded."); if(mintCount == 444) { setEnableBlvcklist(false); setEnableDutchAuction(true); } if(mintCount == 685) { setPauseMint(true); } if(enableBlvcklist) { require(blvcklist[msg.sender] == msg.sender, "Blvcklist Not Found."); delete blvcklist[msg.sender]; } uint256 priceItemEther; if(enableDutchAuction){ require(msg.value == calculateDutchAuction().mul(_amount <= 0 ? 1 : _amount)); priceItemEther = calculateDutchAuction().mul(_amount <= 0 ? 1 : _amount); }else{ require(msg.value == priceMint.mul(_amount <= 0 ? 1 : _amount)); priceItemEther = priceMint; } if(enableSecurityPayment){ BMAWallet.transfer(priceItemEther); }else{ artistWallet.transfer(priceItemEther.mul(artistTax).div(100)); teamWallet.transfer(priceItemEther.mul(teamTax).div(100)); treasuryWallet.transfer(priceItemEther.mul(treasuryTax).div(100)); taxWallet.transfer(priceItemEther.mul(taxTax).div(100)); BMAWallet.transfer(priceItemEther.mul(BMATax).div(100)); } for(uint256 i = 0; i < _amount; i++){ SnakeNFT memory _snakesNFT = SnakeNFT({ ipfsHash: " ", publisher: msg.sender, id: 0 }); snakesNFTs.push(_snakesNFT); uint256 newSnakesNFTId = snakesNFTs.length - 1; snakesNFTs[newSnakesNFTId].id = newSnakesNFTId; string memory baseURI = baseURI(); string memory hashMetadata = string(abi.encodePacked(baseURI, newSnakesNFTId.toString() , baseExtension)); snakesNFTs[newSnakesNFTId].ipfsHash = hashMetadata; ipfsHashToTokenId[hashMetadata] = newSnakesNFTId; _mint(msg.sender, newSnakesNFTId); publishedTokensCount[msg.sender]++; uint256 length = publishedTokens[msg.sender].length; publishedTokens[msg.sender].push(newSnakesNFTId); publishedTokensIndex[msg.sender][newSnakesNFTId] = length; mintCount++; } } function generateSnakes(address[] memory _addresses) public onlyOwner { require(totalSupply() <= MAX_SNAKE, "Limit exceeded."); for(uint256 i = 0; i < _addresses.length; i++){ SnakeNFT memory _snakesNFT = SnakeNFT({ ipfsHash: " ", publisher: _addresses[i], id: 0 }); snakesNFTs.push(_snakesNFT); uint256 newSnakesNFTId = snakesNFTs.length - 1; snakesNFTs[newSnakesNFTId].id = newSnakesNFTId; string memory baseURI = baseURI(); string memory hashMetadata = string(abi.encodePacked(baseURI, newSnakesNFTId.toString() , baseExtension)); snakesNFTs[newSnakesNFTId].ipfsHash = hashMetadata; ipfsHashToTokenId[hashMetadata] = newSnakesNFTId; _mint(_addresses[i], newSnakesNFTId); publishedTokensCount[_addresses[i]]++; uint256 length = publishedTokens[_addresses[i]].length; publishedTokens[_addresses[i]].push(newSnakesNFTId); publishedTokensIndex[_addresses[i]][newSnakesNFTId] = length; mintCount++; } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function calculateDutchAuction() public view returns (uint256) { uint256 price = mintCount <= 444 ? priceMint1 : mintCount > 444 && mintCount <= 524 ? priceMint2 : mintCount > 524 && mintCount <= 604 ? priceMint3 : mintCount > 604 ? priceMint4 : priceMint1; return price; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BMATax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BMAWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SNAKE","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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artistTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"artistWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blvcklist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateDutchAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableBlvcklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableDutchAuction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSecurityPayment","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"generateSnakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_string","type":"string"}],"name":"getIpfsHashToTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getOwnedTokens","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":"mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceMint4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setArtistTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setArtistWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBMATax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setBMAWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_value","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"}],"name":"setBlvcklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setEnableBlvcklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setEnableDutchAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setEnableSecurityPayment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPauseMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPriceMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value1","type":"uint256"},{"internalType":"uint256","name":"_value2","type":"uint256"},{"internalType":"uint256","name":"_value3","type":"uint256"},{"internalType":"uint256","name":"_value4","type":"uint256"}],"name":"setPricesDutchAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTaxTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTeamTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setTreasuryTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_value","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"snakesNFTs","outputs":[{"internalType":"string","name":"ipfsHash","type":"string"},{"internalType":"address","name":"publisher","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"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":[],"name":"taxTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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":[],"name":"totalSupplyString","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"treasuryTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
600f80546001600160a01b03199081167343bf6c711cea984e55926fca73d602309769abf617909155601080548216737e66e23b0cc2eb712a1af1de9b6af0fbabbd42c3179055601180548216731196f89b8da779cf24613ca7572b991927d3e9ad17905560128054821673d5d8b27a62b46e4e4fa78f38ae8c843f1fd69b79179055601380549091167325f67d7e553174f8c170cfa48a794fc5090e197f179055601660148190556006601555600b9081905560326017556018556019805462ffffff191662010000179055670de0b6b3a7640000601b819055601c55671bc16d674ec80000601d556729a2241af62c0000601e55673782dace9d900000601f55600060205561037860215560c06040526005608081905264173539b7b760d91b60a0908152620001359160229190620002ff565b506023805460ff191690553480156200014d57600080fd5b506040518060400160405280601b81526020017f426c76636b4d61726b65744476726b466f72657374556e69717565000000000081525060405180604001604052806011815260200170424d414456524b464f52455354314f463160781b8152506000620001c06200027460201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200021f906009906020850190620002ff565b5080516200023590600a906020840190620002ff565b50620002486380ac58cd60e01b62000278565b6200025a635b5e139f60e01b62000278565b6200026c63780e9d6360e01b62000278565b5050620003e2565b3390565b6001600160e01b03198082161415620002d75760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b8280546200030d90620003a5565b90600052602060002090601f0160209004810192826200033157600085556200037c565b82601f106200034c57805160ff19168380011785556200037c565b828001600101855582156200037c579182015b828111156200037c5782518255916020019190600101906200035f565b506200038a9291506200038e565b5090565b5b808211156200038a57600081556001016200038f565b600181811c90821680620003ba57607f821691505b60208210811415620003dc57634e487b7160e01b600052602260045260246000fd5b50919050565b61399980620003f26000396000f3fe6080604052600436106104105760003560e01c8063710b3cdb1161021e578063cd85cdb511610123578063df38fd41116100ab578063ecfeb5ba1161007a578063ecfeb5ba14610c2d578063f2fde38b14610c43578063f59e26d014610c63578063f73fb6d814610c83578063fce57fd914610c9d57600080fd5b8063df38fd4114610b8e578063e985e9c514610ba4578063ea414b2814610bed578063eb77babc14610c0d57600080fd5b8063d862686b116100f2578063d862686b14610b03578063d9d6165514610b19578063da3ef23f14610b39578063da6fa46c14610b59578063ddcdaa9414610b6e57600080fd5b8063cd85cdb514610a94578063d122ae1314610aae578063d1fe033d14610ac4578063d34a6a3314610ae357600080fd5b8063a3342fba116101a6578063b2bdfa7b11610175578063b2bdfa7b146109ff578063b3eb583514610a1f578063c668286214610a3f578063c87b56dd14610a54578063cd6840d514610a7457600080fd5b8063a3342fba1461097a578063a40f232f1461099a578063a5b59043146109c9578063a8602fea146109df57600080fd5b806392642744116101ed5780639264274414610906578063932733c71461091957806395d89b411461092f5780639659867e14610944578063a22cb4651461095a57600080fd5b8063710b3cdb1461089d578063715018a6146108bd5780637cd1c310146108d25780638da5cb5b146108e857600080fd5b8063334635f01161032457806354fd1467116102ac5780635f7b144a1161027b5780635f7b144a146108125780636352211e146108285780636bb4c459146108485780636c0360eb1461086857806370a082311461087d57600080fd5b806354fd14671461077c57806355f804b3146107b257806356ea64ad146107d257806359927044146107f257600080fd5b806345136c4b116102f357806345136c4b146106f05780634626402b146107105780634f6ccce71461073057806354be17141461075057806354ed458a1461076657600080fd5b8063334635f0146106785780633ccfd60b1461068e57806342842e0e146106a3578063438b6300146106c357600080fd5b80631525ff7d116103a757806327ea2df01161037657806327ea2df0146105d857806329f3265b146105f85780632dc0562d146106185780632f745c59146106385780632fe5cba11461065857600080fd5b80631525ff7d1461056357806318160ddd1461058357806323b872dd14610598578063256a7998146105b857600080fd5b8063095ea7b3116103e3578063095ea7b3146104e0578063098154d2146105005780630dee18e4146105235780630ea427501461054357600080fd5b806301ffc9a7146104155780630256276d1461046457806306fdde0314610486578063081812fc146104a8575b600080fd5b34801561042157600080fd5b5061044f610430366004613469565b6001600160e01b03191660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561047057600080fd5b5061048461047f366004613528565b610cbd565b005b34801561049257600080fd5b5061049b610cf5565b60405161045b91906136c3565b3480156104b457600080fd5b506104c86104c3366004613528565b610d87565b6040516001600160a01b03909116815260200161045b565b3480156104ec57600080fd5b506104846104fb366004613369565b610e0f565b34801561050c57600080fd5b50610515610f25565b60405190815260200161045b565b34801561052f57600080fd5b5061048461053e366004613528565b610f9f565b34801561054f57600080fd5b5061048461055e366004613395565b610fce565b34801561056f57600080fd5b5061048461057e36600461329d565b611097565b34801561058f57600080fd5b506105156110e3565b3480156105a457600080fd5b506104846105b33660046132f3565b6110f4565b3480156105c457600080fd5b5060195461044f9062010000900460ff1681565b3480156105e457600080fd5b506105156105f3366004613493565b611126565b34801561060457600080fd5b50610484610613366004613395565b61114e565b34801561062457600080fd5b506012546104c8906001600160a01b031681565b34801561064457600080fd5b50610515610653366004613369565b611501565b34801561066457600080fd5b506013546104c8906001600160a01b031681565b34801561068457600080fd5b50610515601e5481565b34801561069a57600080fd5b5061048461152a565b3480156106af57600080fd5b506104846106be3660046132f3565b611583565b3480156106cf57600080fd5b506106e36106de36600461329d565b6115b3565b60405161045b919061367f565b3480156106fc57600080fd5b5061048461070b36600461329d565b611655565b34801561071c57600080fd5b506011546104c8906001600160a01b031681565b34801561073c57600080fd5b5061051561074b366004613528565b6116a1565b34801561075c57600080fd5b5061051560185481565b34801561077257600080fd5b50610515601d5481565b34801561078857600080fd5b506104c861079736600461329d565b601a602052600090815260409020546001600160a01b031681565b3480156107be57600080fd5b506104846107cd366004613493565b6116af565b3480156107de57600080fd5b506104846107ed366004613528565b6116e2565b3480156107fe57600080fd5b506010546104c8906001600160a01b031681565b34801561081e57600080fd5b5061051560175481565b34801561083457600080fd5b506104c8610843366004613528565b611711565b34801561085457600080fd5b50610484610863366004613528565b611739565b34801561087457600080fd5b5061049b611768565b34801561088957600080fd5b5061051561089836600461329d565b611777565b3480156108a957600080fd5b506104846108b8366004613541565b611803565b3480156108c957600080fd5b50610484611841565b3480156108de57600080fd5b50610515601f5481565b3480156108f457600080fd5b506000546001600160a01b03166104c8565b610484610914366004613528565b6118b5565b34801561092557600080fd5b5061051560155481565b34801561093b57600080fd5b5061049b611e8b565b34801561095057600080fd5b5061051560205481565b34801561096657600080fd5b50610484610975366004613334565b611e9a565b34801561098657600080fd5b50600f546104c8906001600160a01b031681565b3480156109a657600080fd5b506109ba6109b5366004613528565b611f5f565b60405161045b939291906136d6565b3480156109d557600080fd5b50610515601b5481565b3480156109eb57600080fd5b506104846109fa36600461329d565b61202b565b348015610a0b57600080fd5b506000546104c8906001600160a01b031681565b348015610a2b57600080fd5b50610484610a3a366004613528565b612077565b348015610a4b57600080fd5b5061049b6120a6565b348015610a6057600080fd5b5061049b610a6f366004613528565b612134565b348015610a8057600080fd5b50610484610a8f366004613528565b612201565b348015610aa057600080fd5b5060235461044f9060ff1681565b348015610aba57600080fd5b50610515601c5481565b348015610ad057600080fd5b5060195461044f90610100900460ff1681565b348015610aef57600080fd5b50610484610afe36600461344e565b612230565b348015610b0f57600080fd5b5061051560145481565b348015610b2557600080fd5b506106e3610b3436600461329d565b61226d565b348015610b4557600080fd5b50610484610b54366004613493565b6122d9565b348015610b6557600080fd5b5061049b612316565b348015610b7a57600080fd5b50610484610b8936600461344e565b61232a565b348015610b9a57600080fd5b5061051560215481565b348015610bb057600080fd5b5061044f610bbf3660046132ba565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b348015610bf957600080fd5b50610484610c0836600461329d565b61236e565b348015610c1957600080fd5b50610484610c2836600461344e565b6123ba565b348015610c3957600080fd5b5061051560165481565b348015610c4f57600080fd5b50610484610c5e36600461329d565b612400565b348015610c6f57600080fd5b50610484610c7e36600461344e565b6124ea565b348015610c8f57600080fd5b5060195461044f9060ff1681565b348015610ca957600080fd5b50610484610cb836600461329d565b612527565b6000546001600160a01b03163314610cf05760405162461bcd60e51b8152600401610ce790613704565b60405180910390fd5b601555565b606060098054610d049061384d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d309061384d565b8015610d7d5780601f10610d5257610100808354040283529160200191610d7d565b820191906000526020600020905b815481529060010190602001808311610d6057829003601f168201915b5050505050905090565b6000610d9282612573565b610df35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ce7565b506000908152600760205260409020546001600160a01b031690565b6000610e1a82611711565b9050806001600160a01b0316836001600160a01b03161415610e885760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ce7565b336001600160a01b0382161480610ea45750610ea48133610bbf565b610f165760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ce7565b610f208383612580565b505050565b6000806101bc6020541115610f95576101bc602054118015610f4b575061020c60205411155b610f8d5761020c602054118015610f66575061025c60205411155b610f855761025c60205411610f7d57601c54610f99565b601f54610f99565b601e54610f99565b601d54610f99565b601c545b92915050565b6000546001600160a01b03163314610fc95760405162461bcd60e51b8152600401610ce790613704565b601b55565b6000546001600160a01b03163314610ff85760405162461bcd60e51b8152600401610ce790613704565b60005b808251111561109357818181518110611016576110166138f9565b6020026020010151601a6000848481518110611034576110346138f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550808061108b90613888565b915050610ffb565b5050565b6000546001600160a01b031633146110c15760405162461bcd60e51b8152600401610ce790613704565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60006110ef60056125ee565b905090565b6110ff335b826125f8565b61111b5760405162461bcd60e51b8152600401610ce790613739565b610f208383836126e2565b6000602582604051611138919061359f565b9081526020016040518091039020549050919050565b6000546001600160a01b031633146111785760405162461bcd60e51b8152600401610ce790613704565b6021546111836110e3565b11156111c35760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610ce7565b60005b81518110156110935760006040518060600160405280604051806040016040528060018152602001600160fd1b815250815260200184848151811061120d5761120d6138f9565b6020908102919091018101516001600160a01b03168252600091810182905260248054600181018255925282518051939450849360039093027f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec4019261127692849201906131ef565b506020820151600182810180546001600160a01b0319166001600160a01b03909316929092179091556040909201516002909101556024546000916112ba91613806565b905080602482815481106112d0576112d06138f9565b90600052602060002090600302016002018190555060006112ef611768565b90506000816112fd84612877565b6022604051602001611311939291906135bb565b60405160208183030381529060405290508060248481548110611336576113366138f9565b9060005260206000209060030201600001908051906020019061135a9291906131ef565b508260258260405161136c919061359f565b9081526020016040518091039020819055506113a1868681518110611393576113936138f9565b602002602001015184612975565b602660008787815181106113b7576113b76138f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008154809291906113f090613888565b919050555060006027600088888151811061140d5761140d6138f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002080549050905060276000888881518110611451576114516138f9565b6020908102919091018101516001600160a01b031682528181019290925260400160009081208054600181018255908252918120909101859055875182916028918a908a9081106114a4576114a46138f9565b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081208882528352908120929092558054916114e483613888565b9190505550505050505080806114f990613888565b9150506111c6565b6001600160a01b03821660009081526002602052604081206115239083612ad7565b9392505050565b6000546001600160a01b031633146115545760405162461bcd60e51b8152600401610ce790613704565b60405133904780156108fc02916000818181858888f19350505050158015611580573d6000803e3d6000fd5b50565b61158c336110f9565b6115a85760405162461bcd60e51b8152600401610ce790613739565b610f2083838361111b565b606060006115c083611777565b905060008167ffffffffffffffff8111156115dd576115dd61390f565b604051908082528060200260200182016040528015611606578160200160208202803683370190505b50905060005b8281101561164d5761161e8582611501565b828281518110611630576116306138f9565b60209081029190910101528061164581613888565b91505061160c565b509392505050565b6000546001600160a01b0316331461167f5760405162461bcd60e51b8152600401610ce790613704565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b60008061164d600584612ae3565b6000546001600160a01b031633146116d95760405162461bcd60e51b8152600401610ce790613704565b61158081612aff565b6000546001600160a01b0316331461170c5760405162461bcd60e51b8152600401610ce790613704565b601455565b6000610f998260405180606001604052806029815260200161393b6029913960059190612b12565b6000546001600160a01b031633146117635760405162461bcd60e51b8152600401610ce790613704565b601855565b6060600e8054610d049061384d565b60006001600160a01b0382166117e25760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610ce7565b6001600160a01b0382166000908152600260205260409020610f99906125ee565b6000546001600160a01b0316331461182d5760405162461bcd60e51b8152600401610ce790613704565b601c93909355601d91909155601e55601f55565b6000546001600160a01b0316331461186b5760405162461bcd60e51b8152600401610ce790613704565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60235460ff16156118f75760405162461bcd60e51b815260206004820152600c60248201526b26b4b73a103830bab9b2b21760a11b6044820152606401610ce7565b60215461190c826119066110e3565b90612b1f565b111561194c5760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610ce7565b6020546101bc141561196c5761196260006123ba565b61196c600161232a565b6020546102ad14156119825761198260016124ea565b60195462010000900460ff1615611a0e57336000818152601a60205260409020546001600160a01b0316146119f05760405162461bcd60e51b815260206004820152601460248201527321363b31b5b634b9ba102737ba102337bab7321760611b6044820152606401610ce7565b336000908152601a6020526040902080546001600160a01b03191690555b601954600090610100900460ff1615611a6257611a418215611a305782611a33565b60015b611a3b610f25565b90612b7e565b3414611a4c57600080fd5b611a5b8215611a305782611a33565b9050611a8d565b611a7d8215611a715782611a74565b60015b601b5490612b7e565b3414611a8857600080fd5b50601b545b60195460ff1615611ad8576013546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611ad2573d6000803e3d6000fd5b50611c74565b600f546014546001600160a01b03909116906108fc90611b0690606490611b00908690612b7e565b90612bfd565b6040518115909202916000818181858888f19350505050158015611b2e573d6000803e3d6000fd5b506010546015546001600160a01b03909116906108fc90611b5790606490611b00908690612b7e565b6040518115909202916000818181858888f19350505050158015611b7f573d6000803e3d6000fd5b506011546016546001600160a01b03909116906108fc90611ba890606490611b00908690612b7e565b6040518115909202916000818181858888f19350505050158015611bd0573d6000803e3d6000fd5b506012546017546001600160a01b03909116906108fc90611bf990606490611b00908690612b7e565b6040518115909202916000818181858888f19350505050158015611c21573d6000803e3d6000fd5b506013546018546001600160a01b03909116906108fc90611c4a90606490611b00908690612b7e565b6040518115909202916000818181858888f19350505050158015611c72573d6000803e3d6000fd5b505b60005b82811015610f20576040805160a081018252600160608201818152600160fd1b60808401528252336020808401919091526000938301849052602480549283018155909352815180519293849360039093027f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40192611cf992849201906131ef565b506020820151600182810180546001600160a01b0319166001600160a01b0390931692909217909155604090920151600290910155602454600091611d3d91613806565b90508060248281548110611d5357611d536138f9565b9060005260206000209060030201600201819055506000611d72611768565b9050600081611d8084612877565b6022604051602001611d94939291906135bb565b60405160208183030381529060405290508060248481548110611db957611db96138f9565b90600052602060002090600302016000019080519060200190611ddd9291906131ef565b5082602582604051611def919061359f565b90815260405190819003602001902055611e093384612975565b336000908152602660205260408120805491611e2483613888565b9091555050336000818152602760209081526040808320805460018101825590845282842081018890559383526028825280832087845282528220839055805491611e6e83613888565b919050555050505050508080611e8390613888565b915050611c77565b6060600a8054610d049061384d565b6001600160a01b038216331415611ef35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ce7565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60248181548110611f6f57600080fd5b9060005260206000209060030201600091509050806000018054611f929061384d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fbe9061384d565b801561200b5780601f10611fe05761010080835404028352916020019161200b565b820191906000526020600020905b815481529060010190602001808311611fee57829003601f168201915b50505050600183015460029093015491926001600160a01b031691905083565b6000546001600160a01b031633146120555760405162461bcd60e51b8152600401610ce790613704565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120a15760405162461bcd60e51b8152600401610ce790613704565b601755565b602280546120b39061384d565b80601f01602080910402602001604051908101604052809291908181526020018280546120df9061384d565b801561212c5780601f106121015761010080835404028352916020019161212c565b820191906000526020600020905b81548152906001019060200180831161210f57829003601f168201915b505050505081565b606061213f82612573565b6121a35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610ce7565b60006121ad611768565b905060008151116121cd5760405180602001604052806000815250611523565b806121d784612877565b60226040516020016121eb939291906135bb565b6040516020818303038152906040529392505050565b6000546001600160a01b0316331461222b5760405162461bcd60e51b8152600401610ce790613704565b601655565b6000546001600160a01b0316331461225a5760405162461bcd60e51b8152600401610ce790613704565b6019805460ff1916911515919091179055565b6001600160a01b0381166000908152600360209081526040918290208054835181840281018401909452808452606093928301828280156122cd57602002820191906000526020600020905b8154815260200190600101908083116122b9575b50505050509050919050565b6000546001600160a01b031633146123035760405162461bcd60e51b8152600401610ce790613704565b80516110939060229060208401906131ef565b60606110ef61232560056125ee565b612877565b6000546001600160a01b031633146123545760405162461bcd60e51b8152600401610ce790613704565b601980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146123985760405162461bcd60e51b8152600401610ce790613704565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123e45760405162461bcd60e51b8152600401610ce790613704565b60198054911515620100000262ff000019909216919091179055565b6000546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610ce790613704565b6001600160a01b03811661248f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ce7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125145760405162461bcd60e51b8152600401610ce790613704565b6023805460ff1916911515919091179055565b6000546001600160a01b031633146125515760405162461bcd60e51b8152600401610ce790613704565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f99600583612c58565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906125b582611711565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610f99825490565b600061260382612573565b6126645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ce7565b600061266f83611711565b9050806001600160a01b0316846001600160a01b031614806126aa5750836001600160a01b031661269f84610d87565b6001600160a01b0316145b806126da57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166126f582611711565b6001600160a01b03161461275d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610ce7565b6001600160a01b0382166127bf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce7565b6127ca600082612580565b6001600160a01b03831660009081526002602052604090206127ec9082612c70565b506001600160a01b038216600090815260026020526040902061280f9082612c7c565b5061281a8382612c88565b6128248282612dd2565b61283060058284612e0e565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60608161289b5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156128c557806128af81613888565b91506128be9050600a836137d3565b915061289f565b60008167ffffffffffffffff8111156128e0576128e061390f565b6040519080825280601f01601f19166020018201604052801561290a576020820181803683370190505b5090505b84156126da5761291f600183613806565b915061292c600a866138a3565b6129379060306137bb565b60f81b81838151811061294c5761294c6138f9565b60200101906001600160f81b031916908160001a90535061296e600a866137d3565b945061290e565b6001600160a01b0382166129cb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ce7565b6129d481612573565b15612a215760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ce7565b600c80546000838152600d60209081526040808320849055600184019094557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79092018490556001600160a01b0385168152600290915220612a839082612c7c565b50612a8e8282612dd2565b612a9a60058284612e0e565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006115238383612e24565b6000808080612af28686612eaa565b9097909650945050505050565b805161109390600e9060208401906131ef565b60006126da848484612f47565b600080612b2c83856137bb565b9050838110156115235760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ce7565b600082612b8d57506000610f99565b6000612b9983856137e7565b905082612ba685836137d3565b146115235760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ce7565b6000808211612c4e5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610ce7565b61152382846137d3565b60008181526001830160205260408120541515611523565b60006115238383612fb0565b600061152383836130a3565b6000818152600460209081526040808320546001600160a01b03861684526003909252822054909190612cbc9060016130f2565b6001600160a01b03851660009081526003602052604081208054929350909183908110612ceb57612ceb6138f9565b906000526020600020015490508060036000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110612d2f57612d2f6138f9565b60009182526020808320909101929092556001600160a01b0387168152600390915260408120805484908110612d6757612d676138f9565b60009182526020808320909101929092556001600160a01b0387168152600390915260409020805480612d9c57612d9c6138e3565b60008281526020808220830160001990810183905590920190925594815260049094526040808520859055908452909220555050565b6001600160a01b039091166000908152600360209081526040808320805460018101825590845282842081018590559383526004909152902055565b60006126da84846001600160a01b03851661314e565b81546000908210612e825760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610ce7565b826000018281548110612e9757612e976138f9565b9060005260206000200154905092915050565b815460009081908310612f0a5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610ce7565b6000846000018481548110612f2157612f216138f9565b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281612f775760405162461bcd60e51b8152600401610ce791906136c3565b5084612f84600183613806565b81548110612f9457612f946138f9565b9060005260206000209060020201600101549150509392505050565b60008181526001830160205260408120548015613099576000612fd4600183613806565b8554909150600090612fe890600190613806565b90506000866000018281548110613001576130016138f9565b9060005260206000200154905080876000018481548110613024576130246138f9565b60009182526020909120015561303b8360016137bb565b6000828152600189016020526040902055865487908061305d5761305d6138e3565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f99565b6000915050610f99565b60008181526001830160205260408120546130ea57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f99565b506000610f99565b6000828211156131445760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610ce7565b6115238284613806565b6000828152600184016020526040812054806131b3575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611523565b82856131c0600184613806565b815481106131d0576131d06138f9565b9060005260206000209060020201600101819055506000915050611523565b8280546131fb9061384d565b90600052602060002090601f01602090048101928261321d5760008555613263565b82601f1061323657805160ff1916838001178555613263565b82800160010185558215613263579182015b82811115613263578251825591602001919060010190613248565b5061326f929150613273565b5090565b5b8082111561326f5760008155600101613274565b8035801515811461329857600080fd5b919050565b6000602082840312156132af57600080fd5b813561152381613925565b600080604083850312156132cd57600080fd5b82356132d881613925565b915060208301356132e881613925565b809150509250929050565b60008060006060848603121561330857600080fd5b833561331381613925565b9250602084013561332381613925565b929592945050506040919091013590565b6000806040838503121561334757600080fd5b823561335281613925565b915061336060208401613288565b90509250929050565b6000806040838503121561337c57600080fd5b823561338781613925565b946020939093013593505050565b600060208083850312156133a857600080fd5b823567ffffffffffffffff808211156133c057600080fd5b818501915085601f8301126133d457600080fd5b8135818111156133e6576133e661390f565b8060051b91506133f784830161378a565b8181528481019084860184860187018a101561341257600080fd5b600095505b83861015613441578035945061342c85613925565b84835260019590950194918601918601613417565b5098975050505050505050565b60006020828403121561346057600080fd5b61152382613288565b60006020828403121561347b57600080fd5b81356001600160e01b03198116811461152357600080fd5b600060208083850312156134a657600080fd5b823567ffffffffffffffff808211156134be57600080fd5b818501915085601f8301126134d257600080fd5b8135818111156134e4576134e461390f565b6134f6601f8201601f1916850161378a565b9150808252868482850101111561350c57600080fd5b8084840185840137600090820190930192909252509392505050565b60006020828403121561353a57600080fd5b5035919050565b6000806000806080858703121561355757600080fd5b5050823594602084013594506040840135936060013592509050565b6000815180845261358b81602086016020860161381d565b601f01601f19169290920160200192915050565b600082516135b181846020870161381d565b9190910192915050565b6000845160206135ce8285838a0161381d565b8551918401916135e18184848a0161381d565b8554920191600090600181811c90808316806135fe57607f831692505b85831081141561361c57634e487b7160e01b85526022600452602485fd5b80801561363057600181146136415761366e565b60ff1985168852838801955061366e565b60008b81526020902060005b858110156136665781548a82015290840190880161364d565b505083880195505b50939b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136b75783518352928401929184019160010161369b565b50909695505050505050565b6020815260006115236020830184613573565b6060815260006136e96060830186613573565b6001600160a01b039490941660208301525060400152919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156137b3576137b361390f565b604052919050565b600082198211156137ce576137ce6138b7565b500190565b6000826137e2576137e26138cd565b500490565b6000816000190483118215151615613801576138016138b7565b500290565b600082821015613818576138186138b7565b500390565b60005b83811015613838578181015183820152602001613820565b83811115613847576000848401525b50505050565b600181811c9082168061386157607f821691505b6020821081141561388257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561389c5761389c6138b7565b5060010190565b6000826138b2576138b26138cd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461158057600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220e0d3ef238c64c3052134058a38877ee877f761674a723a223913e660d0cfdc0864736f6c63430008070033
Deployed Bytecode
0x6080604052600436106104105760003560e01c8063710b3cdb1161021e578063cd85cdb511610123578063df38fd41116100ab578063ecfeb5ba1161007a578063ecfeb5ba14610c2d578063f2fde38b14610c43578063f59e26d014610c63578063f73fb6d814610c83578063fce57fd914610c9d57600080fd5b8063df38fd4114610b8e578063e985e9c514610ba4578063ea414b2814610bed578063eb77babc14610c0d57600080fd5b8063d862686b116100f2578063d862686b14610b03578063d9d6165514610b19578063da3ef23f14610b39578063da6fa46c14610b59578063ddcdaa9414610b6e57600080fd5b8063cd85cdb514610a94578063d122ae1314610aae578063d1fe033d14610ac4578063d34a6a3314610ae357600080fd5b8063a3342fba116101a6578063b2bdfa7b11610175578063b2bdfa7b146109ff578063b3eb583514610a1f578063c668286214610a3f578063c87b56dd14610a54578063cd6840d514610a7457600080fd5b8063a3342fba1461097a578063a40f232f1461099a578063a5b59043146109c9578063a8602fea146109df57600080fd5b806392642744116101ed5780639264274414610906578063932733c71461091957806395d89b411461092f5780639659867e14610944578063a22cb4651461095a57600080fd5b8063710b3cdb1461089d578063715018a6146108bd5780637cd1c310146108d25780638da5cb5b146108e857600080fd5b8063334635f01161032457806354fd1467116102ac5780635f7b144a1161027b5780635f7b144a146108125780636352211e146108285780636bb4c459146108485780636c0360eb1461086857806370a082311461087d57600080fd5b806354fd14671461077c57806355f804b3146107b257806356ea64ad146107d257806359927044146107f257600080fd5b806345136c4b116102f357806345136c4b146106f05780634626402b146107105780634f6ccce71461073057806354be17141461075057806354ed458a1461076657600080fd5b8063334635f0146106785780633ccfd60b1461068e57806342842e0e146106a3578063438b6300146106c357600080fd5b80631525ff7d116103a757806327ea2df01161037657806327ea2df0146105d857806329f3265b146105f85780632dc0562d146106185780632f745c59146106385780632fe5cba11461065857600080fd5b80631525ff7d1461056357806318160ddd1461058357806323b872dd14610598578063256a7998146105b857600080fd5b8063095ea7b3116103e3578063095ea7b3146104e0578063098154d2146105005780630dee18e4146105235780630ea427501461054357600080fd5b806301ffc9a7146104155780630256276d1461046457806306fdde0314610486578063081812fc146104a8575b600080fd5b34801561042157600080fd5b5061044f610430366004613469565b6001600160e01b03191660009081526001602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561047057600080fd5b5061048461047f366004613528565b610cbd565b005b34801561049257600080fd5b5061049b610cf5565b60405161045b91906136c3565b3480156104b457600080fd5b506104c86104c3366004613528565b610d87565b6040516001600160a01b03909116815260200161045b565b3480156104ec57600080fd5b506104846104fb366004613369565b610e0f565b34801561050c57600080fd5b50610515610f25565b60405190815260200161045b565b34801561052f57600080fd5b5061048461053e366004613528565b610f9f565b34801561054f57600080fd5b5061048461055e366004613395565b610fce565b34801561056f57600080fd5b5061048461057e36600461329d565b611097565b34801561058f57600080fd5b506105156110e3565b3480156105a457600080fd5b506104846105b33660046132f3565b6110f4565b3480156105c457600080fd5b5060195461044f9062010000900460ff1681565b3480156105e457600080fd5b506105156105f3366004613493565b611126565b34801561060457600080fd5b50610484610613366004613395565b61114e565b34801561062457600080fd5b506012546104c8906001600160a01b031681565b34801561064457600080fd5b50610515610653366004613369565b611501565b34801561066457600080fd5b506013546104c8906001600160a01b031681565b34801561068457600080fd5b50610515601e5481565b34801561069a57600080fd5b5061048461152a565b3480156106af57600080fd5b506104846106be3660046132f3565b611583565b3480156106cf57600080fd5b506106e36106de36600461329d565b6115b3565b60405161045b919061367f565b3480156106fc57600080fd5b5061048461070b36600461329d565b611655565b34801561071c57600080fd5b506011546104c8906001600160a01b031681565b34801561073c57600080fd5b5061051561074b366004613528565b6116a1565b34801561075c57600080fd5b5061051560185481565b34801561077257600080fd5b50610515601d5481565b34801561078857600080fd5b506104c861079736600461329d565b601a602052600090815260409020546001600160a01b031681565b3480156107be57600080fd5b506104846107cd366004613493565b6116af565b3480156107de57600080fd5b506104846107ed366004613528565b6116e2565b3480156107fe57600080fd5b506010546104c8906001600160a01b031681565b34801561081e57600080fd5b5061051560175481565b34801561083457600080fd5b506104c8610843366004613528565b611711565b34801561085457600080fd5b50610484610863366004613528565b611739565b34801561087457600080fd5b5061049b611768565b34801561088957600080fd5b5061051561089836600461329d565b611777565b3480156108a957600080fd5b506104846108b8366004613541565b611803565b3480156108c957600080fd5b50610484611841565b3480156108de57600080fd5b50610515601f5481565b3480156108f457600080fd5b506000546001600160a01b03166104c8565b610484610914366004613528565b6118b5565b34801561092557600080fd5b5061051560155481565b34801561093b57600080fd5b5061049b611e8b565b34801561095057600080fd5b5061051560205481565b34801561096657600080fd5b50610484610975366004613334565b611e9a565b34801561098657600080fd5b50600f546104c8906001600160a01b031681565b3480156109a657600080fd5b506109ba6109b5366004613528565b611f5f565b60405161045b939291906136d6565b3480156109d557600080fd5b50610515601b5481565b3480156109eb57600080fd5b506104846109fa36600461329d565b61202b565b348015610a0b57600080fd5b506000546104c8906001600160a01b031681565b348015610a2b57600080fd5b50610484610a3a366004613528565b612077565b348015610a4b57600080fd5b5061049b6120a6565b348015610a6057600080fd5b5061049b610a6f366004613528565b612134565b348015610a8057600080fd5b50610484610a8f366004613528565b612201565b348015610aa057600080fd5b5060235461044f9060ff1681565b348015610aba57600080fd5b50610515601c5481565b348015610ad057600080fd5b5060195461044f90610100900460ff1681565b348015610aef57600080fd5b50610484610afe36600461344e565b612230565b348015610b0f57600080fd5b5061051560145481565b348015610b2557600080fd5b506106e3610b3436600461329d565b61226d565b348015610b4557600080fd5b50610484610b54366004613493565b6122d9565b348015610b6557600080fd5b5061049b612316565b348015610b7a57600080fd5b50610484610b8936600461344e565b61232a565b348015610b9a57600080fd5b5061051560215481565b348015610bb057600080fd5b5061044f610bbf3660046132ba565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b348015610bf957600080fd5b50610484610c0836600461329d565b61236e565b348015610c1957600080fd5b50610484610c2836600461344e565b6123ba565b348015610c3957600080fd5b5061051560165481565b348015610c4f57600080fd5b50610484610c5e36600461329d565b612400565b348015610c6f57600080fd5b50610484610c7e36600461344e565b6124ea565b348015610c8f57600080fd5b5060195461044f9060ff1681565b348015610ca957600080fd5b50610484610cb836600461329d565b612527565b6000546001600160a01b03163314610cf05760405162461bcd60e51b8152600401610ce790613704565b60405180910390fd5b601555565b606060098054610d049061384d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d309061384d565b8015610d7d5780601f10610d5257610100808354040283529160200191610d7d565b820191906000526020600020905b815481529060010190602001808311610d6057829003601f168201915b5050505050905090565b6000610d9282612573565b610df35760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ce7565b506000908152600760205260409020546001600160a01b031690565b6000610e1a82611711565b9050806001600160a01b0316836001600160a01b03161415610e885760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ce7565b336001600160a01b0382161480610ea45750610ea48133610bbf565b610f165760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610ce7565b610f208383612580565b505050565b6000806101bc6020541115610f95576101bc602054118015610f4b575061020c60205411155b610f8d5761020c602054118015610f66575061025c60205411155b610f855761025c60205411610f7d57601c54610f99565b601f54610f99565b601e54610f99565b601d54610f99565b601c545b92915050565b6000546001600160a01b03163314610fc95760405162461bcd60e51b8152600401610ce790613704565b601b55565b6000546001600160a01b03163314610ff85760405162461bcd60e51b8152600401610ce790613704565b60005b808251111561109357818181518110611016576110166138f9565b6020026020010151601a6000848481518110611034576110346138f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550808061108b90613888565b915050610ffb565b5050565b6000546001600160a01b031633146110c15760405162461bcd60e51b8152600401610ce790613704565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60006110ef60056125ee565b905090565b6110ff335b826125f8565b61111b5760405162461bcd60e51b8152600401610ce790613739565b610f208383836126e2565b6000602582604051611138919061359f565b9081526020016040518091039020549050919050565b6000546001600160a01b031633146111785760405162461bcd60e51b8152600401610ce790613704565b6021546111836110e3565b11156111c35760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610ce7565b60005b81518110156110935760006040518060600160405280604051806040016040528060018152602001600160fd1b815250815260200184848151811061120d5761120d6138f9565b6020908102919091018101516001600160a01b03168252600091810182905260248054600181018255925282518051939450849360039093027f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec4019261127692849201906131ef565b506020820151600182810180546001600160a01b0319166001600160a01b03909316929092179091556040909201516002909101556024546000916112ba91613806565b905080602482815481106112d0576112d06138f9565b90600052602060002090600302016002018190555060006112ef611768565b90506000816112fd84612877565b6022604051602001611311939291906135bb565b60405160208183030381529060405290508060248481548110611336576113366138f9565b9060005260206000209060030201600001908051906020019061135a9291906131ef565b508260258260405161136c919061359f565b9081526020016040518091039020819055506113a1868681518110611393576113936138f9565b602002602001015184612975565b602660008787815181106113b7576113b76138f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008154809291906113f090613888565b919050555060006027600088888151811061140d5761140d6138f9565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002080549050905060276000888881518110611451576114516138f9565b6020908102919091018101516001600160a01b031682528181019290925260400160009081208054600181018255908252918120909101859055875182916028918a908a9081106114a4576114a46138f9565b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081208882528352908120929092558054916114e483613888565b9190505550505050505080806114f990613888565b9150506111c6565b6001600160a01b03821660009081526002602052604081206115239083612ad7565b9392505050565b6000546001600160a01b031633146115545760405162461bcd60e51b8152600401610ce790613704565b60405133904780156108fc02916000818181858888f19350505050158015611580573d6000803e3d6000fd5b50565b61158c336110f9565b6115a85760405162461bcd60e51b8152600401610ce790613739565b610f2083838361111b565b606060006115c083611777565b905060008167ffffffffffffffff8111156115dd576115dd61390f565b604051908082528060200260200182016040528015611606578160200160208202803683370190505b50905060005b8281101561164d5761161e8582611501565b828281518110611630576116306138f9565b60209081029190910101528061164581613888565b91505061160c565b509392505050565b6000546001600160a01b0316331461167f5760405162461bcd60e51b8152600401610ce790613704565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b60008061164d600584612ae3565b6000546001600160a01b031633146116d95760405162461bcd60e51b8152600401610ce790613704565b61158081612aff565b6000546001600160a01b0316331461170c5760405162461bcd60e51b8152600401610ce790613704565b601455565b6000610f998260405180606001604052806029815260200161393b6029913960059190612b12565b6000546001600160a01b031633146117635760405162461bcd60e51b8152600401610ce790613704565b601855565b6060600e8054610d049061384d565b60006001600160a01b0382166117e25760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610ce7565b6001600160a01b0382166000908152600260205260409020610f99906125ee565b6000546001600160a01b0316331461182d5760405162461bcd60e51b8152600401610ce790613704565b601c93909355601d91909155601e55601f55565b6000546001600160a01b0316331461186b5760405162461bcd60e51b8152600401610ce790613704565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60235460ff16156118f75760405162461bcd60e51b815260206004820152600c60248201526b26b4b73a103830bab9b2b21760a11b6044820152606401610ce7565b60215461190c826119066110e3565b90612b1f565b111561194c5760405162461bcd60e51b815260206004820152600f60248201526e2634b6b4ba1032bc31b2b2b232b21760891b6044820152606401610ce7565b6020546101bc141561196c5761196260006123ba565b61196c600161232a565b6020546102ad14156119825761198260016124ea565b60195462010000900460ff1615611a0e57336000818152601a60205260409020546001600160a01b0316146119f05760405162461bcd60e51b815260206004820152601460248201527321363b31b5b634b9ba102737ba102337bab7321760611b6044820152606401610ce7565b336000908152601a6020526040902080546001600160a01b03191690555b601954600090610100900460ff1615611a6257611a418215611a305782611a33565b60015b611a3b610f25565b90612b7e565b3414611a4c57600080fd5b611a5b8215611a305782611a33565b9050611a8d565b611a7d8215611a715782611a74565b60015b601b5490612b7e565b3414611a8857600080fd5b50601b545b60195460ff1615611ad8576013546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611ad2573d6000803e3d6000fd5b50611c74565b600f546014546001600160a01b03909116906108fc90611b0690606490611b00908690612b7e565b90612bfd565b6040518115909202916000818181858888f19350505050158015611b2e573d6000803e3d6000fd5b506010546015546001600160a01b03909116906108fc90611b5790606490611b00908690612b7e565b6040518115909202916000818181858888f19350505050158015611b7f573d6000803e3d6000fd5b506011546016546001600160a01b03909116906108fc90611ba890606490611b00908690612b7e565b6040518115909202916000818181858888f19350505050158015611bd0573d6000803e3d6000fd5b506012546017546001600160a01b03909116906108fc90611bf990606490611b00908690612b7e565b6040518115909202916000818181858888f19350505050158015611c21573d6000803e3d6000fd5b506013546018546001600160a01b03909116906108fc90611c4a90606490611b00908690612b7e565b6040518115909202916000818181858888f19350505050158015611c72573d6000803e3d6000fd5b505b60005b82811015610f20576040805160a081018252600160608201818152600160fd1b60808401528252336020808401919091526000938301849052602480549283018155909352815180519293849360039093027f7cd332d19b93bcabe3cce7ca0c18a052f57e5fd03b4758a09f30f5ddc4b22ec40192611cf992849201906131ef565b506020820151600182810180546001600160a01b0319166001600160a01b0390931692909217909155604090920151600290910155602454600091611d3d91613806565b90508060248281548110611d5357611d536138f9565b9060005260206000209060030201600201819055506000611d72611768565b9050600081611d8084612877565b6022604051602001611d94939291906135bb565b60405160208183030381529060405290508060248481548110611db957611db96138f9565b90600052602060002090600302016000019080519060200190611ddd9291906131ef565b5082602582604051611def919061359f565b90815260405190819003602001902055611e093384612975565b336000908152602660205260408120805491611e2483613888565b9091555050336000818152602760209081526040808320805460018101825590845282842081018890559383526028825280832087845282528220839055805491611e6e83613888565b919050555050505050508080611e8390613888565b915050611c77565b6060600a8054610d049061384d565b6001600160a01b038216331415611ef35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ce7565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60248181548110611f6f57600080fd5b9060005260206000209060030201600091509050806000018054611f929061384d565b80601f0160208091040260200160405190810160405280929190818152602001828054611fbe9061384d565b801561200b5780601f10611fe05761010080835404028352916020019161200b565b820191906000526020600020905b815481529060010190602001808311611fee57829003601f168201915b50505050600183015460029093015491926001600160a01b031691905083565b6000546001600160a01b031633146120555760405162461bcd60e51b8152600401610ce790613704565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120a15760405162461bcd60e51b8152600401610ce790613704565b601755565b602280546120b39061384d565b80601f01602080910402602001604051908101604052809291908181526020018280546120df9061384d565b801561212c5780601f106121015761010080835404028352916020019161212c565b820191906000526020600020905b81548152906001019060200180831161210f57829003601f168201915b505050505081565b606061213f82612573565b6121a35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610ce7565b60006121ad611768565b905060008151116121cd5760405180602001604052806000815250611523565b806121d784612877565b60226040516020016121eb939291906135bb565b6040516020818303038152906040529392505050565b6000546001600160a01b0316331461222b5760405162461bcd60e51b8152600401610ce790613704565b601655565b6000546001600160a01b0316331461225a5760405162461bcd60e51b8152600401610ce790613704565b6019805460ff1916911515919091179055565b6001600160a01b0381166000908152600360209081526040918290208054835181840281018401909452808452606093928301828280156122cd57602002820191906000526020600020905b8154815260200190600101908083116122b9575b50505050509050919050565b6000546001600160a01b031633146123035760405162461bcd60e51b8152600401610ce790613704565b80516110939060229060208401906131ef565b60606110ef61232560056125ee565b612877565b6000546001600160a01b031633146123545760405162461bcd60e51b8152600401610ce790613704565b601980549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146123985760405162461bcd60e51b8152600401610ce790613704565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123e45760405162461bcd60e51b8152600401610ce790613704565b60198054911515620100000262ff000019909216919091179055565b6000546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610ce790613704565b6001600160a01b03811661248f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ce7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125145760405162461bcd60e51b8152600401610ce790613704565b6023805460ff1916911515919091179055565b6000546001600160a01b031633146125515760405162461bcd60e51b8152600401610ce790613704565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610f99600583612c58565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906125b582611711565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610f99825490565b600061260382612573565b6126645760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610ce7565b600061266f83611711565b9050806001600160a01b0316846001600160a01b031614806126aa5750836001600160a01b031661269f84610d87565b6001600160a01b0316145b806126da57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166126f582611711565b6001600160a01b03161461275d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610ce7565b6001600160a01b0382166127bf5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce7565b6127ca600082612580565b6001600160a01b03831660009081526002602052604090206127ec9082612c70565b506001600160a01b038216600090815260026020526040902061280f9082612c7c565b5061281a8382612c88565b6128248282612dd2565b61283060058284612e0e565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60608161289b5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156128c557806128af81613888565b91506128be9050600a836137d3565b915061289f565b60008167ffffffffffffffff8111156128e0576128e061390f565b6040519080825280601f01601f19166020018201604052801561290a576020820181803683370190505b5090505b84156126da5761291f600183613806565b915061292c600a866138a3565b6129379060306137bb565b60f81b81838151811061294c5761294c6138f9565b60200101906001600160f81b031916908160001a90535061296e600a866137d3565b945061290e565b6001600160a01b0382166129cb5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ce7565b6129d481612573565b15612a215760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ce7565b600c80546000838152600d60209081526040808320849055600184019094557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79092018490556001600160a01b0385168152600290915220612a839082612c7c565b50612a8e8282612dd2565b612a9a60058284612e0e565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006115238383612e24565b6000808080612af28686612eaa565b9097909650945050505050565b805161109390600e9060208401906131ef565b60006126da848484612f47565b600080612b2c83856137bb565b9050838110156115235760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ce7565b600082612b8d57506000610f99565b6000612b9983856137e7565b905082612ba685836137d3565b146115235760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ce7565b6000808211612c4e5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610ce7565b61152382846137d3565b60008181526001830160205260408120541515611523565b60006115238383612fb0565b600061152383836130a3565b6000818152600460209081526040808320546001600160a01b03861684526003909252822054909190612cbc9060016130f2565b6001600160a01b03851660009081526003602052604081208054929350909183908110612ceb57612ceb6138f9565b906000526020600020015490508060036000876001600160a01b03166001600160a01b031681526020019081526020016000208481548110612d2f57612d2f6138f9565b60009182526020808320909101929092556001600160a01b0387168152600390915260408120805484908110612d6757612d676138f9565b60009182526020808320909101929092556001600160a01b0387168152600390915260409020805480612d9c57612d9c6138e3565b60008281526020808220830160001990810183905590920190925594815260049094526040808520859055908452909220555050565b6001600160a01b039091166000908152600360209081526040808320805460018101825590845282842081018590559383526004909152902055565b60006126da84846001600160a01b03851661314e565b81546000908210612e825760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610ce7565b826000018281548110612e9757612e976138f9565b9060005260206000200154905092915050565b815460009081908310612f0a5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610ce7565b6000846000018481548110612f2157612f216138f9565b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281612f775760405162461bcd60e51b8152600401610ce791906136c3565b5084612f84600183613806565b81548110612f9457612f946138f9565b9060005260206000209060020201600101549150509392505050565b60008181526001830160205260408120548015613099576000612fd4600183613806565b8554909150600090612fe890600190613806565b90506000866000018281548110613001576130016138f9565b9060005260206000200154905080876000018481548110613024576130246138f9565b60009182526020909120015561303b8360016137bb565b6000828152600189016020526040902055865487908061305d5761305d6138e3565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f99565b6000915050610f99565b60008181526001830160205260408120546130ea57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f99565b506000610f99565b6000828211156131445760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610ce7565b6115238284613806565b6000828152600184016020526040812054806131b3575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611523565b82856131c0600184613806565b815481106131d0576131d06138f9565b9060005260206000209060020201600101819055506000915050611523565b8280546131fb9061384d565b90600052602060002090601f01602090048101928261321d5760008555613263565b82601f1061323657805160ff1916838001178555613263565b82800160010185558215613263579182015b82811115613263578251825591602001919060010190613248565b5061326f929150613273565b5090565b5b8082111561326f5760008155600101613274565b8035801515811461329857600080fd5b919050565b6000602082840312156132af57600080fd5b813561152381613925565b600080604083850312156132cd57600080fd5b82356132d881613925565b915060208301356132e881613925565b809150509250929050565b60008060006060848603121561330857600080fd5b833561331381613925565b9250602084013561332381613925565b929592945050506040919091013590565b6000806040838503121561334757600080fd5b823561335281613925565b915061336060208401613288565b90509250929050565b6000806040838503121561337c57600080fd5b823561338781613925565b946020939093013593505050565b600060208083850312156133a857600080fd5b823567ffffffffffffffff808211156133c057600080fd5b818501915085601f8301126133d457600080fd5b8135818111156133e6576133e661390f565b8060051b91506133f784830161378a565b8181528481019084860184860187018a101561341257600080fd5b600095505b83861015613441578035945061342c85613925565b84835260019590950194918601918601613417565b5098975050505050505050565b60006020828403121561346057600080fd5b61152382613288565b60006020828403121561347b57600080fd5b81356001600160e01b03198116811461152357600080fd5b600060208083850312156134a657600080fd5b823567ffffffffffffffff808211156134be57600080fd5b818501915085601f8301126134d257600080fd5b8135818111156134e4576134e461390f565b6134f6601f8201601f1916850161378a565b9150808252868482850101111561350c57600080fd5b8084840185840137600090820190930192909252509392505050565b60006020828403121561353a57600080fd5b5035919050565b6000806000806080858703121561355757600080fd5b5050823594602084013594506040840135936060013592509050565b6000815180845261358b81602086016020860161381d565b601f01601f19169290920160200192915050565b600082516135b181846020870161381d565b9190910192915050565b6000845160206135ce8285838a0161381d565b8551918401916135e18184848a0161381d565b8554920191600090600181811c90808316806135fe57607f831692505b85831081141561361c57634e487b7160e01b85526022600452602485fd5b80801561363057600181146136415761366e565b60ff1985168852838801955061366e565b60008b81526020902060005b858110156136665781548a82015290840190880161364d565b505083880195505b50939b9a5050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136b75783518352928401929184019160010161369b565b50909695505050505050565b6020815260006115236020830184613573565b6060815260006136e96060830186613573565b6001600160a01b039490941660208301525060400152919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156137b3576137b361390f565b604052919050565b600082198211156137ce576137ce6138b7565b500190565b6000826137e2576137e26138cd565b500490565b6000816000190483118215151615613801576138016138b7565b500290565b600082821015613818576138186138b7565b500390565b60005b83811015613838578181015183820152602001613820565b83811115613847576000848401525b50505050565b600181811c9082168061386157607f821691505b6020821081141561388257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561389c5761389c6138b7565b5060010190565b6000826138b2576138b26138cd565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461158057600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220e0d3ef238c64c3052134058a38877ee877f761674a723a223913e660d0cfdc0864736f6c63430008070033
Deployed Bytecode Sourcemap
38106:9509:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2292:150;;;;;;;;;;-1:-1:-1;2292:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;;2401:33:0;2377:4;2401:33;;;:20;:33;;;;;;;;;2292:150;;;;8352:14:1;;8345:22;8327:41;;8315:2;8300:18;2292:150:0;;;;;;;;41852:85;;;;;;;;;;-1:-1:-1;41852:85:0;;;;;:::i;:::-;;:::i;:::-;;27601:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31246:221::-;;;;;;;;;;-1:-1:-1;31246:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7282:32:1;;;7264:51;;7252:2;7237:18;31246:221:0;7118:203:1;30776:404:0;;;;;;;;;;-1:-1:-1;30776:404:0;;;;;:::i;:::-;;:::i;47230:381::-;;;;;;;;;;;;;:::i;:::-;;;18008:25:1;;;17996:2;17981:18;47230:381:0;17862:177:1;41031:92:0;;;;;;;;;;-1:-1:-1;41031:92:0;;;;;:::i;:::-;;:::i;42709:176::-;;;;;;;;;;-1:-1:-1;42709:176:0;;;;;:::i;:::-;;:::i;42376:102::-;;;;;;;;;;-1:-1:-1;42376:102:0;;;;;:::i;:::-;;:::i;30254:211::-;;;;;;;;;;;;;:::i;32136:313::-;;;;;;;;;;-1:-1:-1;32136:313:0;;;;;:::i;:::-;;:::i;39187:34::-;;;;;;;;;;-1:-1:-1;39187:34:0;;;;;;;;;;;42893:134;;;;;;;;;;-1:-1:-1;42893:134:0;;;;;:::i;:::-;;:::i;45636:1188::-;;;;;;;;;;-1:-1:-1;45636:1188:0;;;;;:::i;:::-;;:::i;38746:86::-;;;;;;;;;;-1:-1:-1;38746:86:0;;;;-1:-1:-1;;;;;38746:86:0;;;30016:162;;;;;;;;;;-1:-1:-1;30016:162:0;;;;;:::i;:::-;;:::i;38839:86::-;;;;;;;;;;-1:-1:-1;38839:86:0;;;;-1:-1:-1;;;;;38839:86:0;;;39447:47;;;;;;;;;;;;;;;;40509:107;;;;;;;;;;;;;:::i;32520:258::-;;;;;;;;;;-1:-1:-1;32520:258:0;;;;;:::i;:::-;;:::i;46832:390::-;;;;;;;;;;-1:-1:-1;46832:390:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;42042:100::-;;;;;;;;;;-1:-1:-1;42042:100:0;;;;;:::i;:::-;;:::i;38648:91::-;;;;;;;;;;-1:-1:-1;38648:91:0;;;;-1:-1:-1;;;;;38648:91:0;;;30542:172;;;;;;;;;;-1:-1:-1;30542:172:0;;;;;:::i;:::-;;:::i;39062:23::-;;;;;;;;;;;;;;;;39393:47;;;;;;;;;;;;;;;;39230:44;;;;;;;;;;-1:-1:-1;39230:44:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;39230:44:0;;;41131:97;;;;;;;;;;-1:-1:-1;41131:97:0;;;;;:::i;:::-;;:::i;41945:89::-;;;;;;;;;;-1:-1:-1;41945:89:0;;;;;:::i;:::-;;:::i;38554:87::-;;;;;;;;;;-1:-1:-1;38554:87:0;;;;-1:-1:-1;;;;;38554:87:0;;;39032:23;;;;;;;;;;;;;;;;27357:177;;;;;;;;;;-1:-1:-1;27357:177:0;;;;;:::i;:::-;;:::i;41569:83::-;;;;;;;;;;-1:-1:-1;41569:83:0;;;;;:::i;:::-;;:::i;28976:97::-;;;;;;;;;;;;;:::i;27074:221::-;;;;;;;;;;-1:-1:-1;27074:221:0;;;;;:::i;:::-;;:::i;40738:285::-;;;;;;;;;;-1:-1:-1;40738:285:0;;;;;:::i;:::-;;:::i;37699:148::-;;;;;;;;;;;;;:::i;39501:47::-;;;;;;;;;;;;;;;;37476:87;;;;;;;;;;-1:-1:-1;37522:7:0;37549:6;-1:-1:-1;;;;;37549:6:0;37476:87;;43167:2461;;;;;;:::i;:::-;;:::i;38967:23::-;;;;;;;;;;;;;;;;27770:104;;;;;;;;;;;;;:::i;39557:28::-;;;;;;;;;;;;;;;;31539:295;;;;;;;;;;-1:-1:-1;31539:295:0;;;;;:::i;:::-;;:::i;38458:89::-;;;;;;;;;;-1:-1:-1;38458:89:0;;;;-1:-1:-1;;;;;38458:89:0;;;39714:28;;;;;;;;;;-1:-1:-1;39714:28:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;39283:47::-;;;;;;;;;;;;;;;;42258:110;;;;;;;;;;-1:-1:-1;42258:110:0;;;;;:::i;:::-;;:::i;37192:21::-;;;;;;;;;;-1:-1:-1;37192:21:0;;;;-1:-1:-1;;;;;37192:21:0;;;41660:83;;;;;;;;;;-1:-1:-1;41660:83:0;;;;;:::i;:::-;;:::i;39631:37::-;;;;;;;;;;;;;:::i;40019:482::-;;;;;;;;;;-1:-1:-1;40019:482:0;;;;;:::i;:::-;;:::i;41751:93::-;;;;;;;;;;-1:-1:-1;41751:93:0;;;;;:::i;:::-;;:::i;39675:29::-;;;;;;;;;;-1:-1:-1;39675:29:0;;;;;;;;39339:47;;;;;;;;;;;;;;;;39142:38;;;;;;;;;;-1:-1:-1;39142:38:0;;;;;;;;;;;41333:113;;;;;;;;;;-1:-1:-1;41333:113:0;;;;;:::i;:::-;;:::i;38934:26::-;;;;;;;;;;;;;;;;43035:124;;;;;;;;;;-1:-1:-1;43035:124:0;;;;;:::i;:::-;;:::i;40624:106::-;;;;;;;;;;-1:-1:-1;40624:106:0;;;;;:::i;:::-;;:::i;29081:131::-;;;;;;;;;;;;;:::i;41454:107::-;;;;;;;;;;-1:-1:-1;41454:107:0;;;;;:::i;:::-;;:::i;39594:30::-;;;;;;;;;;;;;;;;31905:164;;;;;;;;;;-1:-1:-1;31905:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32026:25:0;;;32002:4;32026:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;31905:164;42150:100;;;;;;;;;;-1:-1:-1;42150:100:0;;;;;:::i;:::-;;:::i;42600:101::-;;;;;;;;;;-1:-1:-1;42600:101:0;;;;;:::i;:::-;;:::i;38997:28::-;;;;;;;;;;;;;;;;37855:244;;;;;;;;;;-1:-1:-1;37855:244:0;;;;;:::i;:::-;;:::i;41236:89::-;;;;;;;;;;-1:-1:-1;41236:89:0;;;;;:::i;:::-;;:::i;39094:41::-;;;;;;;;;;-1:-1:-1;39094:41:0;;;;;;;;42486:106;;;;;;;;;;-1:-1:-1;42486:106:0;;;;;:::i;:::-;;:::i;41852:85::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;;;;;;;;;41913:7:::1;:16:::0;41852:85::o;27601:100::-;27655:13;27688:5;27681:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27601:100;:::o;31246:221::-;31322:7;31350:16;31358:7;31350;:16::i;:::-;31342:73;;;;-1:-1:-1;;;31342:73:0;;15644:2:1;31342:73:0;;;15626:21:1;15683:2;15663:18;;;15656:30;15722:34;15702:18;;;15695:62;-1:-1:-1;;;15773:18:1;;;15766:42;15825:19;;31342:73:0;15442:408:1;31342:73:0;-1:-1:-1;31435:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31435:24:0;;31246:221::o;30776:404::-;30857:13;30873:23;30888:7;30873:14;:23::i;:::-;30857:39;;30921:5;-1:-1:-1;;;;;30915:11:0;:2;-1:-1:-1;;;;;30915:11:0;;;30907:57;;;;-1:-1:-1;;;30907:57:0;;17244:2:1;30907:57:0;;;17226:21:1;17283:2;17263:18;;;17256:30;17322:34;17302:18;;;17295:62;-1:-1:-1;;;17373:18:1;;;17366:31;17414:19;;30907:57:0;17042:397:1;30907:57:0;191:10;-1:-1:-1;;;;;30985:21:0;;;;:69;;-1:-1:-1;31010:44:0;31034:5;191:10;31905:164;:::i;31010:44::-;30977:161;;;;-1:-1:-1;;;30977:161:0;;13642:2:1;30977:161:0;;;13624:21:1;13681:2;13661:18;;;13654:30;13720:34;13700:18;;;13693:62;13791:26;13771:18;;;13764:54;13835:19;;30977:161:0;13440:420:1;30977:161:0;31151:21;31160:2;31164:7;31151:8;:21::i;:::-;30846:334;30776:404;;:::o;47230:381::-;47284:7;47305:13;47335:3;47322:9;;:16;;:256;;47393:3;47381:9;;:15;:35;;;;;47413:3;47400:9;;:16;;47381:35;:197;;47471:3;47459:9;;:15;:35;;;;;47491:3;47478:9;;:16;;47459:35;:119;;47549:3;47537:9;;:15;:41;;47568:10;;47322:256;;47537:41;47555:10;;47322:256;;47459:119;47497:10;;47322:256;;47381:197;47419:10;;47322:256;;;47341:10;;47322:256;47305:273;47230:381;-1:-1:-1;;47230:381:0:o;41031:92::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41097:9:::1;:18:::0;41031:92::o;42709:176::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42790:6:::1;42786:91;42820:1;42802:8;:15;:19;42786:91;;;42866:8;42875:1;42866:11;;;;;;;;:::i;:::-;;;;;;;42841:9;:22;42851:8;42860:1;42851:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;42841:22:0::1;-1:-1:-1::0;;;;;42841:22:0::1;;;;;;;;;;;;;:36;;;;;-1:-1:-1::0;;;;;42841:36:0::1;;;;;-1:-1:-1::0;;;;;42841:36:0::1;;;;;;42823:3;;;;;:::i;:::-;;;;42786:91;;;;42709:176:::0;:::o;42376:102::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42451:10:::1;:19:::0;;-1:-1:-1;;;;;;42451:19:0::1;-1:-1:-1::0;;;;;42451:19:0;;;::::1;::::0;;;::::1;::::0;;42376:102::o;30254:211::-;30315:7;30436:21;:12;:19;:21::i;:::-;30429:28;;30254:211;:::o;32136:313::-;32297:41;191:10;32316:12;32330:7;32297:18;:41::i;:::-;32289:103;;;;-1:-1:-1;;;32289:103:0;;;;;;;:::i;:::-;32413:28;32423:4;32429:2;32433:7;32413:9;:28::i;42893:134::-;42967:7;42993:17;43011:7;42993:26;;;;;;:::i;:::-;;;;;;;;;;;;;;42986:33;;42893:134;;;:::o;45636:1188::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;45742:9:::1;;45725:13;:11;:13::i;:::-;:26;;45717:54;;;::::0;-1:-1:-1;;;45717:54:0;;12530:2:1;45717:54:0::1;::::0;::::1;12512:21:1::0;12569:2;12549:18;;;12542:30;-1:-1:-1;;;12588:18:1;;;12581:45;12643:18;;45717:54:0::1;12328:339:1::0;45717:54:0::1;45788:9;45784:1033;45807:10;:17;45803:1;:21;45784:1033;;;45845:26;45874:126;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;45874:126:0::1;;::::0;::::1;;;;45946:10;45957:1;45946:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;45874:126:0::1;::::0;;45983:1:::1;45874:126:::0;;::::1;::::0;;;46017:10:::1;:27:::0;;::::1;::::0;::::1;::::0;;;;;;;;45845:155;;-1:-1:-1;45845:155:0;;46017:27:::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;46017:27:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;46017:27:0::1;-1:-1:-1::0;;;;;46017:27:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;46086:10:::1;:17:::0;-1:-1:-1;;46086:21:0::1;::::0;::::1;:::i;:::-;46061:46;;46154:14;46122:10;46133:14;46122:26;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:46;;;;46183:21;46207:9;:7;:9::i;:::-;46183:33;;46231:26;46284:7;46293:25;:14;:23;:25::i;:::-;46321:13;46267:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46231:105;;46389:12;46351:10;46362:14;46351:26;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;:50;;;;;;;;;;;;:::i;:::-;;46450:14;46416:17;46434:12;46416:31;;;;;;:::i;:::-;;;;;;;;;;;;;:48;;;;46479:36;46485:10;46496:1;46485:13;;;;;;;;:::i;:::-;;;;;;;46500:14;46479:5;:36::i;:::-;46532:20;:35;46553:10;46564:1;46553:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;46532:35:0::1;-1:-1:-1::0;;;;;46532:35:0::1;;;;;;;;;;;;;:37;;;;;;;;;:::i;:::-;;;;;;46584:14;46601:15;:30;46617:10;46628:1;46617:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;46601:30:0::1;-1:-1:-1::0;;;;;46601:30:0::1;;;;;;;;;;;;:37;;;;46584:54;;46653:15;:30;46669:10;46680:1;46669:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;46653:30:0::1;::::0;;;;::::1;::::0;;;;;;-1:-1:-1;46653:30:0;;;:51;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;;;46740:13;;46773:6;;46719:20:::1;::::0;46740:10;;46751:1;;46740:13;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;46719:35:0::1;::::0;;;;::::1;::::0;;;;;;;;-1:-1:-1;46719:35:0;;;:51;;;;;;;;:60;;;;46794:11;;;::::1;::::0;::::1;:::i;:::-;;;;;;45830:987;;;;;45826:3;;;;;:::i;:::-;;;;45784:1033;;30016:162:::0;-1:-1:-1;;;;;30140:20:0;;30113:7;30140:20;;;:13;:20;;;;;:30;;30164:5;30140:23;:30::i;:::-;30133:37;30016:162;-1:-1:-1;;;30016:162:0:o;40509:107::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40557:51:::1;::::0;40565:10:::1;::::0;40586:21:::1;40557:51:::0;::::1;;;::::0;::::1;::::0;;;40586:21;40565:10;40557:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40509:107::o:0;32520:258::-;32632:41;191:10;32651:12;95:115;32632:41;32624:103;;;;-1:-1:-1;;;32624:103:0;;;;;;;:::i;:::-;32738:32;32752:4;32758:2;32762:7;32738:13;:32::i;46832:390::-;46919:16;46953:23;46979:17;46989:6;46979:9;:17::i;:::-;46953:43;;47007:25;47049:15;47035:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47035:30:0;;47007:58;;47081:9;47076:113;47096:15;47092:1;:19;47076:113;;;47147:30;47167:6;47175:1;47147:19;:30::i;:::-;47133:8;47142:1;47133:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;47113:3;;;;:::i;:::-;;;;47076:113;;;-1:-1:-1;47206:8:0;46832:390;-1:-1:-1;;;46832:390:0:o;42042:100::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42116:9:::1;:18:::0;;-1:-1:-1;;;;;;42116:18:0::1;-1:-1:-1::0;;;;;42116:18:0;;;::::1;::::0;;;::::1;::::0;;42042:100::o;30542:172::-;30617:7;;30659:22;:12;30675:5;30659:15;:22::i;41131:97::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41201:19:::1;41213:6;41201:11;:19::i;41945:89::-:0;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42008:9:::1;:18:::0;41945:89::o;27357:177::-;27429:7;27456:70;27473:7;27456:70;;;;;;;;;;;;;;;;;:12;;:70;:16;:70::i;41569:83::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41629:6:::1;:15:::0;41569:83::o;28976:97::-;29024:13;29057:8;29050:15;;;;;:::i;27074:221::-;27146:7;-1:-1:-1;;;;;27174:19:0;;27166:74;;;;-1:-1:-1;;;27166:74:0;;14067:2:1;27166:74:0;;;14049:21:1;14106:2;14086:18;;;14079:30;14145:34;14125:18;;;14118:62;-1:-1:-1;;;14196:18:1;;;14189:40;14246:19;;27166:74:0;13865:406:1;27166:74:0;-1:-1:-1;;;;;27258:20:0;;;;;;:13;:20;;;;;:29;;:27;:29::i;40738:285::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40902:10:::1;:20:::0;;;;40933:10:::1;:20:::0;;;;40964:10:::1;:20:::0;40995:10:::1;:20:::0;40738:285::o;37699:148::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;37806:1:::1;37790:6:::0;;37769:40:::1;::::0;-1:-1:-1;;;;;37790:6:0;;::::1;::::0;37769:40:::1;::::0;37806:1;;37769:40:::1;37837:1;37820:19:::0;;-1:-1:-1;;;;;;37820:19:0::1;::::0;;37699:148::o;43167:2461::-;43236:9;;;;43235:10;43227:35;;;;-1:-1:-1;;;43227:35:0;;10009:2:1;43227:35:0;;;9991:21:1;10048:2;10028:18;;;10021:30;-1:-1:-1;;;10067:18:1;;;10060:42;10119:18;;43227:35:0;9807:336:1;43227:35:0;43311:9;;43281:26;43299:7;43281:13;:11;:13::i;:::-;:17;;:26::i;:::-;:39;;43273:67;;;;-1:-1:-1;;;43273:67:0;;12530:2:1;43273:67:0;;;12512:21:1;12569:2;12549:18;;;12542:30;-1:-1:-1;;;12588:18:1;;;12581:45;12643:18;;43273:67:0;12328:339:1;43273:67:0;43356:9;;43369:3;43356:16;43353:115;;;43389:25;43408:5;43389:18;:25::i;:::-;43429:27;43451:4;43429:21;:27::i;:::-;43483:9;;43496:3;43483:16;43480:66;;;43516:18;43529:4;43516:12;:18::i;:::-;43561:15;;;;;;;43558:159;;;43627:10;43602:21;;;;:9;:21;;;;;;-1:-1:-1;;;;;43602:21:0;:35;43594:68;;;;-1:-1:-1;;;43594:68:0;;11063:2:1;43594:68:0;;;11045:21:1;11102:2;11082:18;;;11075:30;-1:-1:-1;;;11121:18:1;;;11114:50;11181:18;;43594:68:0;10861:344:1;43594:68:0;43694:10;43684:21;;;;:9;:21;;;;;43677:28;;-1:-1:-1;;;;;;43677:28:0;;;43558:159;43767:18;;43729:22;;43767:18;;;;;43764:348;;;43822:55;43850:12;;:26;;43869:7;43850:26;;;43865:1;43850:26;43822:23;:21;:23::i;:::-;:27;;:55::i;:::-;43809:9;:68;43801:77;;;;;;43910:55;43938:12;;:26;;43957:7;43938:26;;43910:55;43893:72;;43764:348;;;44017:41;44031:12;;:26;;44050:7;44031:26;;;44046:1;44031:26;44017:9;;;:13;:41::i;:::-;44004:9;:54;43996:63;;;;;;-1:-1:-1;44091:9:0;;43764:348;44129:21;;;;44126:470;;;44166:9;;:34;;-1:-1:-1;;;;;44166:9:0;;;;:34;;;;;44185:14;;44166:9;:34;:9;:34;44185:14;44166:9;:34;;;;;;;;;;;;;;;;;;;;;44126:470;;;44231:12;;44272:9;;-1:-1:-1;;;;;44231:12:0;;;;:61;;44253:38;;44287:3;;44253:29;;:14;;:18;:29::i;:::-;:33;;:38::i;:::-;44231:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44307:10:0;;44346:7;;-1:-1:-1;;;;;44307:10:0;;;;:57;;44327:36;;44359:3;;44327:27;;:14;;:18;:27::i;:36::-;44307:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44379:14:0;;44422:11;;-1:-1:-1;;;;;44379:14:0;;;;:65;;44403:40;;44439:3;;44403:31;;:14;;:18;:31::i;:40::-;44379:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44459:9:0;;44497:6;;-1:-1:-1;;;;;44459:9:0;;;;:55;;44478:35;;44509:3;;44478:26;;:14;;:18;:26::i;:35::-;44459:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44529:9:0;;44567:6;;-1:-1:-1;;;;;44529:9:0;;;;:55;;44548:35;;44579:3;;44548:26;;:14;;:18;:26::i;:35::-;44529:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44126:470;44620:9;44616:1005;44639:7;44635:1;:11;44616:1005;;;44696:123;;;;;;;;;;;;;;;-1:-1:-1;;;44696:123:0;;;;;;44768:10;44696:123;;;;;;;;44667:26;44696:123;;;;;;44836:10;:27;;;;;;;;;;;;;;44696:123;;;;44836:27;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;44836:27:0;;;;;;;;;;-1:-1:-1;;;;;;44836:27:0;-1:-1:-1;;;;;44836:27:0;;;;;;;;;;;;;;;;;;;;44905:10;:17;-1:-1:-1;;44905:21:0;;;:::i;:::-;44880:46;;44973:14;44941:10;44952:14;44941:26;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;:46;;;;45002:21;45026:9;:7;:9::i;:::-;45002:33;;45050:26;45103:7;45112:25;:14;:23;:25::i;:::-;45140:13;45086:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45050:105;;45208:12;45170:10;45181:14;45170:26;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;:50;;;;;;;;;;;;:::i;:::-;;45269:14;45235:17;45253:12;45235:31;;;;;;:::i;:::-;;;;;;;;;;;;;;:48;45298:33;45304:10;45316:14;45298:5;:33::i;:::-;45369:10;45348:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;;45430:10:0;45397:14;45414:27;;;:15;:27;;;;;;;;:34;;45463:48;;;;;;;;;;;;;;;;45526:32;;;:20;:32;;;;;:48;;;;;;;:57;;;45598:11;;;;;;:::i;:::-;;;;;;44652:969;;;;;44648:3;;;;;:::i;:::-;;;;44616:1005;;27770:104;27826:13;27859:7;27852:14;;;;;:::i;31539:295::-;-1:-1:-1;;;;;31642:24:0;;191:10;31642:24;;31634:62;;;;-1:-1:-1;;;31634:62:0;;11817:2:1;31634:62:0;;;11799:21:1;11856:2;11836:18;;;11829:30;11895:27;11875:18;;;11868:55;11940:18;;31634:62:0;11615:349:1;31634:62:0;191:10;31709:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;31709:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;31709:53:0;;;;;;;;;;31778:48;;8327:41:1;;;31709:42:0;;191:10;31778:48;;8300:18:1;31778:48:0;;;;;;;31539:295;;:::o;39714:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;39714:28:0;;;;;;;;;;;-1:-1:-1;;;;;39714:28:0;;;-1:-1:-1;39714:28:0;:::o;42258:110::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42337:14:::1;:23:::0;;-1:-1:-1;;;;;;42337:23:0::1;-1:-1:-1::0;;;;;42337:23:0;;;::::1;::::0;;;::::1;::::0;;42258:110::o;41660:83::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41720:6:::1;:15:::0;41660:83::o;39631:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40019:482::-;40137:13;40186:16;40194:7;40186;:16::i;:::-;40168:105;;;;-1:-1:-1;;;40168:105:0;;16828:2:1;40168:105:0;;;16810:21:1;16867:2;16847:18;;;16840:30;16906:34;16886:18;;;16879:62;-1:-1:-1;;;16957:18:1;;;16950:45;17012:19;;40168:105:0;16626:411:1;40168:105:0;40294:28;40325:9;:7;:9::i;:::-;40294:40;;40383:1;40358:14;40352:28;:32;:141;;;;;;;;;;;;;;;;;40424:14;40440:18;:7;:16;:18::i;:::-;40460:13;40407:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40345:148;40019:482;-1:-1:-1;;;40019:482:0:o;41751:93::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41816:11:::1;:20:::0;41751:93::o;41333:113::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41408:21:::1;:30:::0;;-1:-1:-1;;41408:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41333:113::o;43035:124::-;-1:-1:-1;;;;;43132:19:0;;;;;;:11;:19;;;;;;;;;43125:26;;;;;;;;;;;;;;;;;43096:16;;43125:26;;;43132:19;43125:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43035:124;;;:::o;40624:106::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;40700:22;;::::1;::::0;:13:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;29081:131::-:0;29139:13;29172:32;:21;:12;:19;:21::i;:::-;:30;:32::i;41454:107::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41526:18:::1;:27:::0;;;::::1;;;;-1:-1:-1::0;;41526:27:0;;::::1;::::0;;;::::1;::::0;;41454:107::o;42150:100::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42224:9:::1;:18:::0;;-1:-1:-1;;;;;;42224:18:0::1;-1:-1:-1::0;;;;;42224:18:0;;;::::1;::::0;;;::::1;::::0;;42150:100::o;42600:101::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42669:15:::1;:24:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;42669:24:0;;::::1;::::0;;;::::1;::::0;;42600:101::o;37855:244::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37944:22:0;::::1;37936:73;;;::::0;-1:-1:-1;;;37936:73:0;;9602:2:1;37936:73:0::1;::::0;::::1;9584:21:1::0;9641:2;9621:18;;;9614:30;9680:34;9660:18;;;9653:62;-1:-1:-1;;;9731:18:1;;;9724:36;9777:19;;37936:73:0::1;9400:402:1::0;37936:73:0::1;38046:6;::::0;;38025:38:::1;::::0;-1:-1:-1;;;;;38025:38:0;;::::1;::::0;38046:6;::::1;::::0;38025:38:::1;::::0;::::1;38074:6;:17:::0;;-1:-1:-1;;;;;;38074:17:0::1;-1:-1:-1::0;;;;;38074:17:0;;;::::1;::::0;;;::::1;::::0;;37855:244::o;41236:89::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;41299:9:::1;:18:::0;;-1:-1:-1;;41299:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41236:89::o;42486:106::-;37522:7;37549:6;-1:-1:-1;;;;;37549:6:0;191:10;37611:23;37603:68;;;;-1:-1:-1;;;37603:68:0;;;;;;;:::i;:::-;42563:12:::1;:21:::0;;-1:-1:-1;;;;;;42563:21:0::1;-1:-1:-1::0;;;;;42563:21:0;;;::::1;::::0;;;::::1;::::0;;42486:106::o;32924:127::-;32989:4;33013:30;:12;33035:7;33013:21;:30::i;36866:183::-;36932:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;36932:29:0;-1:-1:-1;;;;;36932:29:0;;;;;;;;:24;;36986:23;36932:24;36986:14;:23::i;:::-;-1:-1:-1;;;;;36977:46:0;;;;;;;;;;;36866:183;;:::o;21082:123::-;21151:7;21178:19;21186:3;17744:19;;17661:110;33061:355;33154:4;33179:16;33187:7;33179;:16::i;:::-;33171:73;;;;-1:-1:-1;;;33171:73:0;;12874:2:1;33171:73:0;;;12856:21:1;12913:2;12893:18;;;12886:30;12952:34;12932:18;;;12925:62;-1:-1:-1;;;13003:18:1;;;12996:42;13055:19;;33171:73:0;12672:408:1;33171:73:0;33255:13;33271:23;33286:7;33271:14;:23::i;:::-;33255:39;;33324:5;-1:-1:-1;;;;;33313:16:0;:7;-1:-1:-1;;;;;33313:16:0;;:51;;;;33357:7;-1:-1:-1;;;;;33333:31:0;:20;33345:7;33333:11;:20::i;:::-;-1:-1:-1;;;;;33333:31:0;;33313:51;:94;;;-1:-1:-1;;;;;;32026:25:0;;;32002:4;32026:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;33368:39;33305:103;33061:355;-1:-1:-1;;;;33061:355:0:o;34672:684::-;34797:4;-1:-1:-1;;;;;34770:31:0;:23;34785:7;34770:14;:23::i;:::-;-1:-1:-1;;;;;34770:31:0;;34762:85;;;;-1:-1:-1;;;34762:85:0;;16418:2:1;34762:85:0;;;16400:21:1;16457:2;16437:18;;;16430:30;16496:34;16476:18;;;16469:62;-1:-1:-1;;;16547:18:1;;;16540:39;16596:19;;34762:85:0;16216:405:1;34762:85:0;-1:-1:-1;;;;;34884:16:0;;34876:65;;;;-1:-1:-1;;;34876:65:0;;11412:2:1;34876:65:0;;;11394:21:1;11451:2;11431:18;;;11424:30;11490:34;11470:18;;;11463:62;-1:-1:-1;;;11541:18:1;;;11534:34;11585:19;;34876:65:0;11210:400:1;34876:65:0;35058:29;35075:1;35079:7;35058:8;:29::i;:::-;-1:-1:-1;;;;;35100:19:0;;;;;;:13;:19;;;;;:35;;35127:7;35100:26;:35::i;:::-;-1:-1:-1;;;;;;35146:17:0;;;;;;:13;:17;;;;;:30;;35168:7;35146:21;:30::i;:::-;;35189;35205:4;35211:7;35189:15;:30::i;:::-;35230:23;35241:2;35245:7;35230:10;:23::i;:::-;35274:29;:12;35291:7;35300:2;35274:16;:29::i;:::-;;35340:7;35336:2;-1:-1:-1;;;;;35321:27:0;35330:4;-1:-1:-1;;;;;35321:27:0;;;;;;;;;;;34672:684;;;:::o;22669:723::-;22725:13;22946:10;22942:53;;-1:-1:-1;;22973:10:0;;;;;;;;;;;;-1:-1:-1;;;22973:10:0;;;;;22669:723::o;22942:53::-;23020:5;23005:12;23061:78;23068:9;;23061:78;;23094:8;;;;:::i;:::-;;-1:-1:-1;23117:10:0;;-1:-1:-1;23125:2:0;23117:10;;:::i;:::-;;;23061:78;;;23149:19;23181:6;23171:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23171:17:0;;23149:39;;23199:154;23206:10;;23199:154;;23233:11;23243:1;23233:11;;:::i;:::-;;-1:-1:-1;23302:10:0;23310:2;23302:5;:10;:::i;:::-;23289:24;;:2;:24;:::i;:::-;23276:39;;23259:6;23266;23259:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;23259:56:0;;;;;;;;-1:-1:-1;23330:11:0;23339:2;23330:11;;:::i;:::-;;;23199:154;;33534:529;-1:-1:-1;;;;;33614:16:0;;33606:61;;;;-1:-1:-1;;;33606:61:0;;14881:2:1;33606:61:0;;;14863:21:1;;;14900:18;;;14893:30;14959:34;14939:18;;;14932:62;15011:18;;33606:61:0;14679:356:1;33606:61:0;33687:16;33695:7;33687;:16::i;:::-;33686:17;33678:58;;;;-1:-1:-1;;;33678:58:0;;10350:2:1;33678:58:0;;;10332:21:1;10389:2;10369:18;;;10362:30;10428;10408:18;;;10401:58;10476:18;;33678:58:0;10148:352:1;33678:58:0;33775:9;:16;;33749:23;;;;:14;:23;;;;;;;;:42;;;33802:23;;;;;;;;;;;;;-1:-1:-1;;;;;33896:17:0;;;;:13;:17;;;;:30;;33749:23;33896:21;:30::i;:::-;;33939:23;33950:2;33954:7;33939:10;:23::i;:::-;33975:29;:12;33992:7;34001:2;33975:16;:29::i;:::-;-1:-1:-1;34022:33:0;;34047:7;;-1:-1:-1;;;;;34022:33:0;;;34039:1;;34022:33;;34039:1;;34022:33;33534:529;;:::o;14165:137::-;14236:7;14271:22;14275:3;14287:5;14271:3;:22::i;21215:236::-;21295:7;;;;21355:22;21359:3;21371:5;21355:3;:22::i;:::-;21324:53;;;;-1:-1:-1;21215:236:0;-1:-1:-1;;;;;21215:236:0:o;35589:100::-;35662:19;;;;:8;;:19;;;;;:::i;22223:213::-;22330:7;22381:44;22386:3;22406;22412:12;22381:4;:44::i;3590:179::-;3648:7;;3680:5;3684:1;3680;:5;:::i;:::-;3668:17;;3709:1;3704;:6;;3696:46;;;;-1:-1:-1;;;3696:46:0;;10707:2:1;3696:46:0;;;10689:21:1;10746:2;10726:18;;;10719:30;10785:29;10765:18;;;10758:57;10832:18;;3696:46:0;10505:351:1;3943:220:0;4001:7;4025:6;4021:20;;-1:-1:-1;4040:1:0;4033:8;;4021:20;4052:9;4064:5;4068:1;4064;:5;:::i;:::-;4052:17;-1:-1:-1;4097:1:0;4088:5;4092:1;4052:17;4088:5;:::i;:::-;:10;4080:56;;;;-1:-1:-1;;;4080:56:0;;15242:2:1;4080:56:0;;;15224:21:1;15281:2;15261:18;;;15254:30;15320:34;15300:18;;;15293:62;-1:-1:-1;;;15371:18:1;;;15364:31;15412:19;;4080:56:0;15040:397:1;4171:153:0;4229:7;4261:1;4257;:5;4249:44;;;;-1:-1:-1;;;4249:44:0;;13287:2:1;4249:44:0;;;13269:21:1;13326:2;13306:18;;;13299:30;13365:28;13345:18;;;13338:56;13411:18;;4249:44:0;13085:350:1;4249:44:0;4311:5;4315:1;4311;:5;:::i;20843:151::-;20927:4;17536:17;;;:12;;;:17;;;;;;:22;;20951:35;17441:125;13588:137;13658:4;13682:35;13690:3;13710:5;13682:7;:35::i;13281:131::-;13348:4;13372:32;13377:3;13397:5;13372:4;:32::i;29435:499::-;29513:18;29534:26;;;:16;:26;;;;;;;;;-1:-1:-1;;;;;29596:18:0;;;;:11;:18;;;;;:25;29534:26;;29513:18;29596:32;;29626:1;29596:29;:32::i;:::-;-1:-1:-1;;;;;29659:18:0;;29639:17;29659:18;;;:11;:18;;;;;:34;;29571:57;;-1:-1:-1;29639:17:0;;29571:57;;29659:34;;;;;;:::i;:::-;;;;;;;;;29639:54;;29739:9;29706:11;:18;29718:5;-1:-1:-1;;;;;29706:18:0;-1:-1:-1;;;;;29706:18:0;;;;;;;;;;;;29725:10;29706:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:42;;;;-1:-1:-1;;;;;29759:18:0;;;;:11;:18;;;;;;:34;;29778:14;;29759:34;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;-1:-1:-1;;;;;29810:18:0;;;;:11;:18;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;29810:24:0;;;;;;;;;;;;29845:26;;;:16;:26;;;;;;;:30;;;29886:27;;;;;;:40;-1:-1:-1;;29435:499:0:o;29220:207::-;-1:-1:-1;;;;;29308:16:0;;;29291:14;29308:16;;;:11;:16;;;;;;;;:23;;29342:31;;;;;;;;;;;;;;;;29384:26;;;:16;:26;;;;;:35;29220:207::o;20266:185::-;20355:4;20379:64;20384:3;20404;-1:-1:-1;;;;;20418:23:0;;20379:4;:64::i;10877:204::-;10972:18;;10944:7;;10972:26;-1:-1:-1;10964:73:0;;;;-1:-1:-1;;;10964:73:0;;9199:2:1;10964:73:0;;;9181:21:1;9238:2;9218:18;;;9211:30;9277:34;9257:18;;;9250:62;-1:-1:-1;;;9328:18:1;;;9321:32;9370:19;;10964:73:0;8997:398:1;10964:73:0;11055:3;:11;;11067:5;11055:18;;;;;;;;:::i;:::-;;;;;;;;;11048:25;;10877:204;;;;:::o;18126:279::-;18230:19;;18193:7;;;;18230:27;-1:-1:-1;18222:74:0;;;;-1:-1:-1;;;18222:74:0;;14478:2:1;18222:74:0;;;14460:21:1;14517:2;14497:18;;;14490:30;14556:34;14536:18;;;14529:62;-1:-1:-1;;;14607:18:1;;;14600:32;14649:19;;18222:74:0;14276:398:1;18222:74:0;18309:22;18334:3;:12;;18347:5;18334:19;;;;;;;;:::i;:::-;;;;;;;;;;;18309:44;;18372:5;:10;;;18384:5;:12;;;18364:33;;;;;18126:279;;;;;:::o;19623:319::-;19717:7;19756:17;;;:12;;;:17;;;;;;19807:12;19792:13;19784:36;;;;-1:-1:-1;;;19784:36:0;;;;;;;;:::i;:::-;-1:-1:-1;19874:3:0;19887:12;19898:1;19887:8;:12;:::i;:::-;19874:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;19867:40;;;19623:319;;;;;:::o;9587:1026::-;9653:4;9792:19;;;:12;;;:19;;;;;;9828:15;;9824:782;;9900:21;9924:14;9937:1;9924:10;:14;:::i;:::-;9973:18;;9900:38;;-1:-1:-1;9953:17:0;;9973:22;;9994:1;;9973:22;:::i;:::-;9953:42;;10012:17;10032:3;:11;;10044:9;10032:22;;;;;;;;:::i;:::-;;;;;;;;;10012:42;;10178:9;10149:3;:11;;10161:13;10149:26;;;;;;;;:::i;:::-;;;;;;;;;;:38;10281:17;:13;10297:1;10281:17;:::i;:::-;10255:23;;;;:12;;;:23;;;;;:43;10407:17;;10255:3;;10407:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10502:3;:12;;:19;10515:5;10502:19;;;;;;;;;;;10495:26;;;10545:4;10538:11;;;;;;;;9824:782;10589:5;10582:12;;;;;9165:414;9228:4;17536:17;;;:12;;;:17;;;;;;9245:327;;-1:-1:-1;9288:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;9471:18;;9449:19;;;:12;;;:19;;;;;;:40;;;;9504:11;;9245:327;-1:-1:-1;9555:5:0;9548:12;;3777:158;3835:7;3868:1;3863;:6;;3855:49;;;;-1:-1:-1;;;3855:49:0;;12171:2:1;3855:49:0;;;12153:21:1;12210:2;12190:18;;;12183:30;12249:32;12229:18;;;12222:60;12299:18;;3855:49:0;11969:354:1;3855:49:0;3922:5;3926:1;3922;:5;:::i;14941:692::-;15017:4;15152:17;;;:12;;;:17;;;;;;15186:13;15182:444;;-1:-1:-1;;15271:38:0;;;;;;;;;;;;;;;;;;15253:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;15468:19;;15448:17;;;:12;;;:17;;;;;;;:39;15502:11;;15182:444;15582:5;15546:3;15559:12;15570:1;15559:8;:12;:::i;:::-;15546:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:41;;;;15609:5;15602:12;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:160:1;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;691:388;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1084:456;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1084:456::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1545:315;;;;;:::o;1865:::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:52;;;2010:1;2007;2000:12;1962:52;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1865:315:1:o;2185:1032::-;2269:6;2300:2;2343;2331:9;2322:7;2318:23;2314:32;2311:52;;;2359:1;2356;2349:12;2311:52;2399:9;2386:23;2428:18;2469:2;2461:6;2458:14;2455:34;;;2485:1;2482;2475:12;2455:34;2523:6;2512:9;2508:22;2498:32;;2568:7;2561:4;2557:2;2553:13;2549:27;2539:55;;2590:1;2587;2580:12;2539:55;2626:2;2613:16;2648:2;2644;2641:10;2638:36;;;2654:18;;:::i;:::-;2700:2;2697:1;2693:10;2683:20;;2723:28;2747:2;2743;2739:11;2723:28;:::i;:::-;2785:15;;;2816:12;;;;2848:11;;;2878;;;2874:20;;2871:33;-1:-1:-1;2868:53:1;;;2917:1;2914;2907:12;2868:53;2939:1;2930:10;;2949:238;2963:2;2960:1;2957:9;2949:238;;;3034:3;3021:17;3008:30;;3051:31;3076:5;3051:31;:::i;:::-;3095:18;;;2981:1;2974:9;;;;;3133:12;;;;3165;;2949:238;;;-1:-1:-1;3206:5:1;2185:1032;-1:-1:-1;;;;;;;;2185:1032:1:o;3222:180::-;3278:6;3331:2;3319:9;3310:7;3306:23;3302:32;3299:52;;;3347:1;3344;3337:12;3299:52;3370:26;3386:9;3370:26;:::i;3407:286::-;3465:6;3518:2;3506:9;3497:7;3493:23;3489:32;3486:52;;;3534:1;3531;3524:12;3486:52;3560:23;;-1:-1:-1;;;;;;3612:32:1;;3602:43;;3592:71;;3659:1;3656;3649:12;3698:764;3767:6;3798:2;3841;3829:9;3820:7;3816:23;3812:32;3809:52;;;3857:1;3854;3847:12;3809:52;3897:9;3884:23;3926:18;3967:2;3959:6;3956:14;3953:34;;;3983:1;3980;3973:12;3953:34;4021:6;4010:9;4006:22;3996:32;;4066:7;4059:4;4055:2;4051:13;4047:27;4037:55;;4088:1;4085;4078:12;4037:55;4124:2;4111:16;4146:2;4142;4139:10;4136:36;;;4152:18;;:::i;:::-;4194:53;4237:2;4218:13;;-1:-1:-1;;4214:27:1;4210:36;;4194:53;:::i;:::-;4181:66;;4270:2;4263:5;4256:17;4310:7;4305:2;4300;4296;4292:11;4288:20;4285:33;4282:53;;;4331:1;4328;4321:12;4282:53;4386:2;4381;4377;4373:11;4368:2;4361:5;4357:14;4344:45;4430:1;4409:14;;;4405:23;;;4398:34;;;;-1:-1:-1;4413:5:1;3698:764;-1:-1:-1;;;3698:764:1:o;4467:180::-;4526:6;4579:2;4567:9;4558:7;4554:23;4550:32;4547:52;;;4595:1;4592;4585:12;4547:52;-1:-1:-1;4618:23:1;;4467:180;-1:-1:-1;4467:180:1:o;4652:385::-;4738:6;4746;4754;4762;4815:3;4803:9;4794:7;4790:23;4786:33;4783:53;;;4832:1;4829;4822:12;4783:53;-1:-1:-1;;4855:23:1;;;4925:2;4910:18;;4897:32;;-1:-1:-1;4976:2:1;4961:18;;4948:32;;5027:2;5012:18;4999:32;;-1:-1:-1;4652:385:1;-1:-1:-1;4652:385:1:o;5042:258::-;5084:3;5122:5;5116:12;5149:6;5144:3;5137:19;5165:63;5221:6;5214:4;5209:3;5205:14;5198:4;5191:5;5187:16;5165:63;:::i;:::-;5282:2;5261:15;-1:-1:-1;;5257:29:1;5248:39;;;;5289:4;5244:50;;5042:258;-1:-1:-1;;5042:258:1:o;5305:276::-;5436:3;5474:6;5468:13;5490:53;5536:6;5531:3;5524:4;5516:6;5512:17;5490:53;:::i;:::-;5559:16;;;;;5305:276;-1:-1:-1;;5305:276:1:o;5586:1527::-;5810:3;5848:6;5842:13;5874:4;5887:51;5931:6;5926:3;5921:2;5913:6;5909:15;5887:51;:::i;:::-;6001:13;;5960:16;;;;6023:55;6001:13;5960:16;6045:15;;;6023:55;:::i;:::-;6167:13;;6100:20;;;6140:1;;6227;6249:18;;;;6302;;;;6329:93;;6407:4;6397:8;6393:19;6381:31;;6329:93;6470:2;6460:8;6457:16;6437:18;6434:40;6431:167;;;-1:-1:-1;;;6497:33:1;;6553:4;6550:1;6543:15;6583:4;6504:3;6571:17;6431:167;6614:18;6641:110;;;;6765:1;6760:328;;;;6607:481;;6641:110;-1:-1:-1;;6676:24:1;;6662:39;;6721:20;;;;-1:-1:-1;6641:110:1;;6760:328;18397:1;18390:14;;;18434:4;18421:18;;6855:1;6869:169;6883:8;6880:1;6877:15;6869:169;;;6965:14;;6950:13;;;6943:37;7008:16;;;;6900:10;;6869:169;;;6873:3;;7069:8;7062:5;7058:20;7051:27;;6607:481;-1:-1:-1;7104:3:1;;5586:1527;-1:-1:-1;;;;;;;;;;;5586:1527:1:o;7550:632::-;7721:2;7773:21;;;7843:13;;7746:18;;;7865:22;;;7692:4;;7721:2;7944:15;;;;7918:2;7903:18;;;7692:4;7987:169;8001:6;7998:1;7995:13;7987:169;;;8062:13;;8050:26;;8131:15;;;;8096:12;;;;8023:1;8016:9;7987:169;;;-1:-1:-1;8173:3:1;;7550:632;-1:-1:-1;;;;;;7550:632:1:o;8379:220::-;8528:2;8517:9;8510:21;8491:4;8548:45;8589:2;8578:9;8574:18;8566:6;8548:45;:::i;8604:388::-;8809:2;8798:9;8791:21;8772:4;8829:45;8870:2;8859:9;8855:18;8847:6;8829:45;:::i;:::-;-1:-1:-1;;;;;8910:32:1;;;;8905:2;8890:18;;8883:60;-1:-1:-1;8974:2:1;8959:18;8952:34;8821:53;8604:388;-1:-1:-1;8604:388:1:o;15855:356::-;16057:2;16039:21;;;16076:18;;;16069:30;16135:34;16130:2;16115:18;;16108:62;16202:2;16187:18;;15855:356::o;17444:413::-;17646:2;17628:21;;;17685:2;17665:18;;;17658:30;17724:34;17719:2;17704:18;;17697:62;-1:-1:-1;;;17790:2:1;17775:18;;17768:47;17847:3;17832:19;;17444:413::o;18044:275::-;18115:2;18109:9;18180:2;18161:13;;-1:-1:-1;;18157:27:1;18145:40;;18215:18;18200:34;;18236:22;;;18197:62;18194:88;;;18262:18;;:::i;:::-;18298:2;18291:22;18044:275;;-1:-1:-1;18044:275:1:o;18450:128::-;18490:3;18521:1;18517:6;18514:1;18511:13;18508:39;;;18527:18;;:::i;:::-;-1:-1:-1;18563:9:1;;18450:128::o;18583:120::-;18623:1;18649;18639:35;;18654:18;;:::i;:::-;-1:-1:-1;18688:9:1;;18583:120::o;18708:168::-;18748:7;18814:1;18810;18806:6;18802:14;18799:1;18796:21;18791:1;18784:9;18777:17;18773:45;18770:71;;;18821:18;;:::i;:::-;-1:-1:-1;18861:9:1;;18708:168::o;18881:125::-;18921:4;18949:1;18946;18943:8;18940:34;;;18954:18;;:::i;:::-;-1:-1:-1;18991:9:1;;18881:125::o;19011:258::-;19083:1;19093:113;19107:6;19104:1;19101:13;19093:113;;;19183:11;;;19177:18;19164:11;;;19157:39;19129:2;19122:10;19093:113;;;19224:6;19221:1;19218:13;19215:48;;;19259:1;19250:6;19245:3;19241:16;19234:27;19215:48;;19011:258;;;:::o;19274:380::-;19353:1;19349:12;;;;19396;;;19417:61;;19471:4;19463:6;19459:17;19449:27;;19417:61;19524:2;19516:6;19513:14;19493:18;19490:38;19487:161;;;19570:10;19565:3;19561:20;19558:1;19551:31;19605:4;19602:1;19595:15;19633:4;19630:1;19623:15;19487:161;;19274:380;;;:::o;19659:135::-;19698:3;-1:-1:-1;;19719:17:1;;19716:43;;;19739:18;;:::i;:::-;-1:-1:-1;19786:1:1;19775:13;;19659:135::o;19799:112::-;19831:1;19857;19847:35;;19862:18;;:::i;:::-;-1:-1:-1;19896:9:1;;19799:112::o;19916:127::-;19977:10;19972:3;19968:20;19965:1;19958:31;20008:4;20005:1;19998:15;20032:4;20029:1;20022:15;20048:127;20109:10;20104:3;20100:20;20097:1;20090:31;20140:4;20137:1;20130:15;20164:4;20161:1;20154:15;20180:127;20241:10;20236:3;20232:20;20229:1;20222:31;20272:4;20269:1;20262:15;20296:4;20293:1;20286:15;20312:127;20373:10;20368:3;20364:20;20361:1;20354:31;20404:4;20401:1;20394:15;20428:4;20425:1;20418:15;20444:127;20505:10;20500:3;20496:20;20493:1;20486:31;20536:4;20533:1;20526:15;20560:4;20557:1;20550:15;20576:131;-1:-1:-1;;;;;20651:31:1;;20641:42;;20631:70;;20697:1;20694;20687:12
Swarm Source
ipfs://e0d3ef238c64c3052134058a38877ee877f761674a723a223913e660d0cfdc08
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.