Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RBT_NFT
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-13 */ // SPDX-License-Identifier: CC-BY-ND-4.0 pragma solidity ^0.8.18; interface iStacks { function getPiecesPerStack() external view returns(uint); function getOwnedPieces(address _owner) external view returns (bytes32[] memory); function getPieceCode(uint tokenId) external view returns (string memory); function getPieceRarity(uint tokenId) external view returns (uint); function getAllPieces() external view returns (bytes32[] memory common, bytes32[] memory uncommon, bytes32[] memory rare); function getStacksForEdition(uint edition) external view returns (bytes32[] memory); } contract protected { mapping (address => bool) is_auth; function authorized(address addy) public view returns(bool) { return is_auth[addy]; } function set_authorized(address addy, bool booly) public onlyAuth { is_auth[addy] = booly; } modifier onlyAuth() { require( is_auth[msg.sender] || msg.sender==owner, "not owner"); _; } address owner; modifier onlyOwner() { require(msg.sender==owner, "not owner"); _; } bool locked; modifier safe() { require(!locked, "reentrant"); locked = true; _; locked = false; } function change_owner(address new_owner) public onlyAuth { owner = new_owner; } receive() external payable {} fallback() external payable {} } // SECTION Interfaces interface ERC165 { function supportsInterface(bytes4 interfaceID) external view returns (bool); } interface ERC721 is ERC165 { 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); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; function transferFrom(address _from, address _to, uint256 _tokenId) external; function approve(address _approved, uint256 _tokenId) external; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool); } interface IERC20 { function balanceOf(address _owner) external view returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } interface IERC721Receiver { function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns(bytes4); } // !SECTION Interfaces error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintedQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerIndexOutOfBounds(); error OwnerQueryForNonexistentToken(); error TokenIndexOutOfBounds(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error UnableDetermineTokenOwner(); error UnableGetTokenOwnerByIndex(); error URIQueryForNonexistentToken(); /** * @notice Updated, minimalist and gas efficient version of OpenZeppelins ERC721 contract. * Includes the Metadata and Enumerable extension. * * @dev Token IDs are minted in sequential order starting at 0 (e.g. 0, 1, 2, ...). * Does not support burning tokens. * * @author beskay0x * Credits: chiru-labs, solmate, transmissions11, nftchance, squeebo_nft and others */ contract RBT_NFT is ERC721, protected { /*/////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name = "White Rabbit NFT"; string public symbol = "RBTNFT"; string public baseURI = "https://whiterabbit.mypinata.cloud/ipfs/"; mapping (uint256 => string) private _tokenURIs; function setBaseURI(string memory _baseURI) public onlyAuth { baseURI = _baseURI; } function setTokenURIHash(uint256 tokenId, string memory _tokenURI) public onlyAuth { _tokenURIs[tokenId] = _tokenURI; } function tokenURI(uint256 tokenId) public view returns (string memory) { require(_exists(tokenId), "URIQueryForNonexistentToken"); string memory _tokenId = _tokenURIs[tokenId]; return string(abi.encodePacked(baseURI, _tokenId)); } /*/////////////////////////////////////////////////////////////// ERC721 STORAGE //////////////////////////////////////////////////////////////*/ // Array which maps token ID to address (index is tokenID) address[] internal _owners; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor() { owner = msg.sender; is_auth[msg.sender] = true; } /*/////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x780e9d63 || // ERC165 Interface ID for ERC721Enumerable interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*/////////////////////////////////////////////////////////////// ERC721ENUMERABLE LOGIC //////////////////////////////////////////////////////////////*/ /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * It is not recommended to call this function on chain from another smart contract, * as it can become quite expensive for larger collections. */ function tokenOfOwnerByIndex(address _owner, uint256 index) public view virtual returns (uint256 tokenId) { if (index >= balanceOf(_owner)) revert OwnerIndexOutOfBounds(); uint256 count; uint256 qty = _owners.length; // Cannot realistically overflow, since we are using uint256 unchecked { for (tokenId; tokenId < qty; tokenId++) { if (_owner == ownerOf(tokenId)) { if (count == index) return tokenId; else count++; } } } revert UnableGetTokenOwnerByIndex(); } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual returns (uint256) { if (index >= totalSupply()) revert TokenIndexOutOfBounds(); return index; } /*/////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ /** * @dev Returns the number of tokens in `owner`'s account. * Iterates through _owners array -- it is not recommended to call this function * from another contract, as it can become quite expensive for larger collections. */ function balanceOf(address _owner) public view virtual returns (uint256) { if (_owner == address(0)) revert BalanceQueryForZeroAddress(); uint256 count; uint256 qty = _owners.length; // Cannot realistically overflow, since we are using uint256 unchecked { for (uint256 i; i < qty; i++) { if (_owner == ownerOf(i)) { count++; } } } return count; } /** * @dev See {IERC721-ownerOf}. * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownerOf(uint256 tokenId) public view virtual returns (address) { if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); // Cannot realistically overflow, since we are using uint256 unchecked { for (tokenId; ; tokenId++) { if (_owners[tokenId] != address(0)) { return _owners[tokenId]; } } } revert UnableDetermineTokenOwner(); } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual { address _owner = ownerOf(tokenId); if (to == _owner) revert ApprovalToCurrentOwner(); if (msg.sender != _owner && !isApprovedForAll(_owner, msg.sender)) revert ApprovalCallerNotOwnerNorApproved(); _tokenApprovals[tokenId] = to; emit Approval(_owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual { if (operator == msg.sender) revert ApproveToCaller(); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address _owner, address operator) public view virtual returns (bool) { return _operatorApprovals[_owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual { if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); if (ownerOf(tokenId) != from) revert TransferFromIncorrectOwner(); if (to == address(0)) revert TransferToZeroAddress(); bool isApprovedOrOwner = (msg.sender == from || msg.sender == getApproved(tokenId) || isApprovedForAll(from, msg.sender)); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); // delete token approvals from previous owner delete _tokenApprovals[tokenId]; _owners[tokenId] = to; // if token ID below transferred one isnt set, set it to previous owner // if tokenid is zero, skip this to prevent underflow if (tokenId > 0 && _owners[tokenId - 1] == address(0)) { _owners[tokenId - 1] = from; } emit Transfer(from, to, tokenId); } function _internalTransfer(address from, address to, uint tokenId) internal { if (_owners[tokenId] != from) revert TransferFromIncorrectOwner(); if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken(); // delete token approvals from previous owner delete _tokenApprovals[tokenId]; _owners[tokenId] = to; // if token ID below transferred one isnt set, set it to previous owner // if tokenid is zero, skip this to prevent underflow if (tokenId > 0 && _owners[tokenId - 1] == address(0)) { _owners[tokenId - 1] = from; } emit Transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id ) public virtual { safeTransferFrom(from, to, id, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public virtual { transferFrom(from, to, id); if (!_checkOnERC721Received(from, to, id, data)) revert TransferToNonERC721ReceiverImplementer(); } /** * @dev Returns whether `tokenId` exists. */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length; } /** * @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.code.length == 0) return true; try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) revert TransferToNonERC721ReceiverImplementer(); assembly { revert(add(32, reason), mload(reason)) } } } /*/////////////////////////////////////////////////////////////// INTERNAL MINT LOGIC //////////////////////////////////////////////////////////////*/ /** * @dev Safely mints `qty` tokens and transfers them to `to`. * * If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received} * * Unlike in the standard ERC721 implementation {IERC721Receiver-onERC721Received} * is only called once. If the receiving contract confirms the transfer of one token, * all additional tokens are automatically confirmed too. */ function _safeMint(address to, uint256 qty) internal virtual { _safeMint(to, qty, ''); } /** * @dev Equivalent to {safeMint(to, qty)}, but accepts an additional data argument. */ function _safeMint( address to, uint256 qty, bytes memory data ) internal virtual { _mint(to, qty); if (!_checkOnERC721Received(address(0), to, _owners.length - 1, data)) revert TransferToNonERC721ReceiverImplementer(); } /** * @dev Mints `qty` tokens and transfers them to `to`. * Emits a {Transfer} event for each mint. */ function _mint(address to, uint256 qty) internal virtual { if (to == address(0)) revert MintToZeroAddress(); if (qty == 0) revert MintZeroQuantity(); uint256 _currentIndex = _owners.length; // Cannot realistically overflow, since we are using uint256 unchecked { for (uint256 i; i < qty - 1; i++) { _owners.push(); emit Transfer(address(0), to, _currentIndex + i); } } // set last index to receiver _owners.push(to); emit Transfer(address(0), to, _currentIndex + (qty - 1)); } // SECTION Completion methods address public StackNFTAddress; iStacks public StackNFT; struct COMPOSED_NFT { bytes32[] tokenPieces; bool composed; } mapping (uint256 => COMPOSED_NFT) composedNFTs; // composedNFTs[tokenId] = COMPOSED_NFT // ANCHOR Public methods function getComposedNFT(uint256 tokenId) public view returns (bytes32[] memory pieces, bool composed, address owner) { return (composedNFTs[tokenId].tokenPieces, composedNFTs[tokenId].composed, ownerOf(tokenId)); } // NOTE This function is called to have a list of all the composed NFTs available and not available function getAllComposedNFTs() external view returns (bytes32[] memory _composedNFTs, bytes32[] memory _inactiveComposedNFTs) { uint256 _length = _owners.length; _composedNFTs = new bytes32[](_length); _inactiveComposedNFTs = new bytes32[](_length); for (uint256 i = 0; i < _length; i++) { // Check if the NFT is yet to compose if (!composedNFTs[i].composed) { _composedNFTs[i] = composedNFTs[i].tokenPieces[0]; } else { _inactiveComposedNFTs[i] = composedNFTs[i].tokenPieces[0]; } } // Delete empty elements uint256 _composedNFTsLength = 0; uint256 _inactiveComposedNFTsLength = 0; for (uint256 i = 0; i < _length; i++) { if (_composedNFTs[i] != bytes32(0)) { _composedNFTs[_composedNFTsLength] = _composedNFTs[i]; _composedNFTsLength++; } if (_inactiveComposedNFTs[i] != bytes32(0)) { _inactiveComposedNFTs[_inactiveComposedNFTsLength] = _inactiveComposedNFTs[i]; _inactiveComposedNFTsLength++; } } assembly { mstore(_composedNFTs, _composedNFTsLength) mstore(_inactiveComposedNFTs, _inactiveComposedNFTsLength) } } // NOTE This function should be called by the owner of all the pieces of the NFT function composeNFT(uint256 tokenId) external safe { // Check if the NFT is not already composed require(!composedNFTs[tokenId].composed, "NFT already composed"); // Check if the owner of the NFT is the owner of all the pieces bool _allPiecesOwned = _hasAllPieces(tokenId, msg.sender); // Transfer the NFT to the owner of the pieces if (_allPiecesOwned) { composedNFTs[tokenId].composed = true; _internalTransfer(address(this), msg.sender, tokenId); } else { revert("You don't own all the pieces of the NFT"); } } function hasAllPieces(uint256 tokenId) public view returns (bool) { return _hasAllPieces(tokenId, msg.sender); } function _hasAllPieces(uint256 tokenId, address _owner) internal view returns (bool) { bytes32[] memory _tokenPieces = composedNFTs[tokenId].tokenPieces; bytes32[] memory _ownedPieces = StackNFT.getOwnedPieces(_owner); // Check if the owner of the NFT is the owner of all the pieces of the NFT bool _allPiecesOwned = true; for (uint i = 0; i < _tokenPieces.length; i++) { // For each piece of the NFT bool _pieceOwned = false; // Each piece starts as not owned for (uint j = 0; j < _ownedPieces.length; j++) { // For each piece owned if (_tokenPieces[i] == _ownedPieces[j]) { _pieceOwned = true; // If the piece is found, we proceed to the next piece break; } } if (!_pieceOwned) { _allPiecesOwned = false; // If even one piece is not owned, we stop the loop break; } } return _allPiecesOwned; } // ANCHOR Admin methods function setStackNFTAddress(address _address) external onlyOwner { StackNFTAddress = _address; StackNFT = iStacks(_address); } // NOTE This creates and store in the contract the composed NFT function createComposedNFT(bytes32[] memory tokenPieces) external onlyOwner { require(tokenPieces.length == 6, "Invalid number of pieces"); uint256 tokenId = _owners.length; _mint(address(this), 1); composedNFTs[tokenId] = COMPOSED_NFT(tokenPieces, false); } // NOTE This creates and store in the contract the composed NFT automatically function createComposedNFTAuto(uint seed) external onlyOwner { uint piecesNumber = 6; uint256 tokenId = _owners.length; // Getting the pieces from the StackNFT contract bytes32[] memory _common; bytes32[] memory _uncommon; bytes32[] memory _rare; (_common, _uncommon, _rare) = StackNFT.getAllPieces(); // Select randomly 1 rare 2 uncommon and 3 common pieces bytes32[] memory tokenPieces = new bytes32[](piecesNumber); tokenPieces[0] = _rare[uint(keccak256(abi.encodePacked(seed))) % _rare.length]; tokenPieces[1] = _uncommon[uint(keccak256(abi.encodePacked(seed + 1))) % _uncommon.length]; tokenPieces[2] = _uncommon[uint(keccak256(abi.encodePacked(seed + 2))) % _uncommon.length]; tokenPieces[3] = _common[uint(keccak256(abi.encodePacked(seed + 3))) % _common.length]; tokenPieces[4] = _common[uint(keccak256(abi.encodePacked(seed + 4))) % _common.length]; tokenPieces[5] = _common[uint(keccak256(abi.encodePacked(seed + 5))) % _common.length]; // Store the NFT composedNFTs[tokenId] = COMPOSED_NFT(tokenPieces, false); _mint(address(this), 1); } // !SECTION Completion methods // String manipulation functions function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len; while (_i != 0) { k = k-1; uint8 temp = (48 + uint8(_i - _i / 10 * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableDetermineTokenOwner","type":"error"},{"inputs":[],"name":"UnableGetTokenOwnerByIndex","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"StackNFT","outputs":[{"internalType":"contract iStacks","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StackNFTAddress","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":[{"internalType":"address","name":"addy","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"new_owner","type":"address"}],"name":"change_owner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"composeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"tokenPieces","type":"bytes32[]"}],"name":"createComposedNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"createComposedNFTAuto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllComposedNFTs","outputs":[{"internalType":"bytes32[]","name":"_composedNFTs","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_inactiveComposedNFTs","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getComposedNFT","outputs":[{"internalType":"bytes32[]","name":"pieces","type":"bytes32[]"},{"internalType":"bool","name":"composed","type":"bool"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"hasAllPieces","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setStackNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURIHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_authorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052601060809081526f15da1a5d1948149858989a5d0813919560821b60a0526002906200003190826200016f565b5060408051808201909152600681526514909513919560d21b60208201526003906200005e90826200016f565b5060405180606001604052806028815260200162002a5d602891396004906200008890826200016f565b503480156200009657600080fd5b50600180546001600160a01b0319163390811782556000908152602081905260409020805460ff191690911790556200023b565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000f557607f821691505b6020821081036200011657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200016a57600081815260208120601f850160051c81016020861015620001455750805b601f850160051c820191505b81811015620001665782815560010162000151565b5050505b505050565b81516001600160401b038111156200018b576200018b620000ca565b620001a3816200019c8454620000e0565b846200011c565b602080601f831160018114620001db5760008415620001c25750858301515b600019600386901b1c1916600185901b17855562000166565b600085815260208120601f198616915b828110156200020c57888601518255948401946001909101908401620001eb565b50858210156200022b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612812806200024b6000396000f3fe6080604052600436106101c45760003560e01c80634f6ccce7116100f6578063995c85631161008f578063bdfa08eb11610061578063bdfa08eb14610574578063c42b2d1714610594578063c87b56dd146105b4578063e985e9c5146105d457005b8063995c8563146104db578063a22cb465146104fb578063b88d4fde1461051b578063b91816111461053b57005b80636c0360eb116100c85780636c0360eb1461047157806370a08231146104865780637f7512c3146104a657806395d89b41146104c657005b80634f6ccce7146103e25780635150d2981461040257806355f804b3146104315780636352211e1461045157005b806323b872dd11610168578063374a8af71161013a578063374a8af71461036257806342842e0e1461038257806347d0d4e3146103a25780634cd0dda7146103c257005b806323b872dd146102e2578063253c8bd4146103025780632bfe8742146103225780632f745c591461034257005b8063081812fc116101a1578063081812fc1461024b578063095ea7b31461028357806318160ddd146102a357806322bb3e1b146102c257005b806301393a7a146101cd57806301ffc9a7146101f957806306fdde031461022957005b366101cb57005b005b3480156101d957600080fd5b506101e26105f4565b6040516101f0929190611f33565b60405180910390f35b34801561020557600080fd5b50610219610214366004611f7a565b61084c565b60405190151581526020016101f0565b34801561023557600080fd5b5061023e6108b9565b6040516101f09190611fee565b34801561025757600080fd5b5061026b610266366004612001565b610947565b6040516001600160a01b0390911681526020016101f0565b34801561028f57600080fd5b506101cb61029e366004612036565b61098d565b3480156102af57600080fd5b506006545b6040519081526020016101f0565b3480156102ce57600080fd5b506101cb6102dd36600461211d565b610a66565b3480156102ee57600080fd5b506101cb6102fd366004612163565b610ad0565b34801561030e57600080fd5b506101cb61031d36600461219f565b610ce3565b34801561032e57600080fd5b506101cb61033d3660046121ba565b610d49565b34801561034e57600080fd5b506102b461035d366004612036565b610db8565b34801561036e57600080fd5b506101cb61037d366004612001565b610e4b565b34801561038e57600080fd5b506101cb61039d366004612163565b611278565b3480156103ae57600080fd5b506101cb6103bd366004612001565b611293565b3480156103ce57600080fd5b5060095461026b906001600160a01b031681565b3480156103ee57600080fd5b506102b46103fd366004612001565b6113ee565b34801561040e57600080fd5b5061042261041d366004612001565b61141c565b6040516101f0939291906121f6565b34801561043d57600080fd5b506101cb61044c366004612229565b61149c565b34801561045d57600080fd5b5061026b61046c366004612001565b6114f0565b34801561047d57600080fd5b5061023e61158b565b34801561049257600080fd5b506102b46104a136600461219f565b611598565b3480156104b257600080fd5b506101cb6104c136600461219f565b61160a565b3480156104d257600080fd5b5061023e611660565b3480156104e757600080fd5b506102196104f6366004612001565b61166d565b34801561050757600080fd5b506101cb6105163660046121ba565b611679565b34801561052757600080fd5b506101cb61053636600461225d565b61170e565b34801561054757600080fd5b5061021961055636600461219f565b6001600160a01b031660009081526020819052604090205460ff1690565b34801561058057600080fd5b506101cb61058f3660046122fb565b611748565b3480156105a057600080fd5b50600a5461026b906001600160a01b031681565b3480156105c057600080fd5b5061023e6105cf366004612001565b611826565b3480156105e057600080fd5b506102196105ef366004612390565b611943565b6006546060908190806001600160401b0381111561061457610614612060565b60405190808252806020026020018201604052801561063d578160200160208202803683370190505b509250806001600160401b0381111561065857610658612060565b604051908082528060200260200182016040528015610681578160200160208202803683370190505b50915060005b81811015610750576000818152600b602052604090206001015460ff166106f5576000818152600b6020526040812080549091906106c7576106c76123c3565b90600052602060002001548482815181106106e4576106e46123c3565b60200260200101818152505061073e565b6000818152600b602052604081208054909190610714576107146123c3565b9060005260206000200154838281518110610731576107316123c3565b6020026020010181815250505b80610748816123ef565b915050610687565b5060008060005b83811015610841576000801b868281518110610775576107756123c3565b6020026020010151146107c757858181518110610794576107946123c3565b60200260200101518684815181106107ae576107ae6123c3565b6020908102919091010152826107c3816123ef565b9350505b6000801b8582815181106107dd576107dd6123c3565b60200260200101511461082f578481815181106107fc576107fc6123c3565b6020026020010151858381518110610816576108166123c3565b60209081029190910101528161082b816123ef565b9250505b80610839816123ef565b915050610757565b509084528252509091565b60006301ffc9a760e01b6001600160e01b03198316148061087d57506380ac58cd60e01b6001600160e01b03198316145b80610898575063780e9d6360e01b6001600160e01b03198316145b806108b35750635b5e139f60e01b6001600160e01b03198316145b92915050565b600280546108c690612408565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290612408565b801561093f5780601f106109145761010080835404028352916020019161093f565b820191906000526020600020905b81548152906001019060200180831161092257829003601f168201915b505050505081565b6000610954826006541190565b610971576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610998826114f0565b9050806001600160a01b0316836001600160a01b0316036109cc5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906109ec57506109ea8133611943565b155b15610a0a576040516367d9dca160e11b815260040160405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b3360009081526020819052604090205460ff1680610a8e57506001546001600160a01b031633145b610ab35760405162461bcd60e51b8152600401610aaa90612442565b60405180910390fd5b6000828152600560205260409020610acb82826124b3565b505050565b610adb816006541190565b610af857604051636f96cda160e11b815260040160405180910390fd5b826001600160a01b0316610b0b826114f0565b6001600160a01b031614610b315760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038216610b5857604051633a954ecd60e21b815260040160405180910390fd5b6000336001600160a01b0385161480610b8a5750610b7582610947565b6001600160a01b0316336001600160a01b0316145b80610b9a5750610b9a8433611943565b905080610bba57604051632ce44b5f60e11b815260040160405180910390fd5b600082815260076020526040902080546001600160a01b03191690556006805484919084908110610bed57610bed6123c3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600082118015610c5c575060006006610c35600185612572565b81548110610c4557610c456123c3565b6000918252602090912001546001600160a01b0316145b15610cae57836006610c6f600185612572565b81548110610c7f57610c7f6123c3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b81836001600160a01b0316856001600160a01b03166000805160206127bd83398151915260405160405180910390a450505050565b3360009081526020819052604090205460ff1680610d0b57506001546001600160a01b031633145b610d275760405162461bcd60e51b8152600401610aaa90612442565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff1680610d7157506001546001600160a01b031633145b610d8d5760405162461bcd60e51b8152600401610aaa90612442565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b6000610dc383611598565b8210610de2576040516306ed618760e11b815260040160405180910390fd5b6006546000905b80831015610e3257610dfa836114f0565b6001600160a01b0316856001600160a01b031603610e2757838203610e205750506108b3565b6001909101905b600190920191610de9565b604051637339954760e01b815260040160405180910390fd5b6001546001600160a01b03163314610e755760405162461bcd60e51b8152600401610aaa90612442565b60068054600a5460408051630d6fcb8160e41b81529051606092839283926001600160a01b039092169163d6fcb810916004808201926000929091908290030181865afa158015610eca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ef291908101906125eb565b919450925090506000856001600160401b03811115610f1357610f13612060565b604051908082528060200260200182016040528015610f3c578160200160208202803683370190505b50905081825188604051602001610f5591815260200190565b6040516020818303038152906040528051906020012060001c610f789190612672565b81518110610f8857610f886123c3565b602002602001015181600081518110610fa357610fa36123c3565b602090810291909101015282518390610fbd896001612694565b604051602001610fcf91815260200190565b6040516020818303038152906040528051906020012060001c610ff29190612672565b81518110611002576110026123c3565b60200260200101518160018151811061101d5761101d6123c3565b602090810291909101015282518390611037896002612694565b60405160200161104991815260200190565b6040516020818303038152906040528051906020012060001c61106c9190612672565b8151811061107c5761107c6123c3565b602002602001015181600281518110611097576110976123c3565b6020908102919091010152835184906110b1896003612694565b6040516020016110c391815260200190565b6040516020818303038152906040528051906020012060001c6110e69190612672565b815181106110f6576110f66123c3565b602002602001015181600381518110611111576111116123c3565b60209081029190910101528351849061112b896004612694565b60405160200161113d91815260200190565b6040516020818303038152906040528051906020012060001c6111609190612672565b81518110611170576111706123c3565b60200260200101518160048151811061118b5761118b6123c3565b6020908102919091010152835184906111a5896005612694565b6040516020016111b791815260200190565b6040516020818303038152906040528051906020012060001c6111da9190612672565b815181106111ea576111ea6123c3565b602002602001015181600581518110611205576112056123c3565b6020908102919091018101919091526040805180820182528381526000818401819052888152600b84529190912081518051929391926112489284920190611ea1565b50602091909101516001918201805460ff191691151591909117905561126f903090611971565b50505050505050565b610acb8383836040518060200160405280600081525061170e565b600154600160a01b900460ff16156112d95760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610aaa565b6001805460ff60a01b1916600160a01b1781556000828152600b60205260409020015460ff16156113435760405162461bcd60e51b815260206004820152601460248201527313919508185b1c9958591e4818dbdb5c1bdcd95960621b6044820152606401610aaa565b600061134f8233611a8e565b90508015611385576000828152600b602052604090206001908101805460ff19169091179055611380303384611bfd565b6113dd565b60405162461bcd60e51b815260206004820152602760248201527f596f7520646f6e2774206f776e20616c6c2074686520706965636573206f66206044820152661d1a194813919560ca1b6064820152608401610aaa565b50506001805460ff60a01b19169055565b60006113f960065490565b8210611418576040516329c8c00760e21b815260040160405180910390fd5b5090565b6000818152600b60205260408120600181015460609291829160ff16611441866114f0565b82546040805160208084028201810190925282815291859183018282801561148857602002820191906000526020600020905b815481526020019060010190808311611474575b505050505092509250925092509193909250565b3360009081526020819052604090205460ff16806114c457506001546001600160a01b031633145b6114e05760405162461bcd60e51b8152600401610aaa90612442565b60046114ec82826124b3565b5050565b60006114fd826006541190565b61151a57604051636f96cda160e11b815260040160405180910390fd5b60006001600160a01b031660068381548110611538576115386123c3565b6000918252602090912001546001600160a01b0316146115805760068281548110611565576115656123c3565b6000918252602090912001546001600160a01b031692915050565b60019091019061151a565b600480546108c690612408565b60006001600160a01b0382166115c1576040516323d3ad8160e21b815260040160405180910390fd5b600654600090815b81811015611601576115da816114f0565b6001600160a01b0316856001600160a01b0316036115f9576001909201915b6001016115c9565b50909392505050565b6001546001600160a01b031633146116345760405162461bcd60e51b8152600401610aaa90612442565b600980546001600160a01b039092166001600160a01b03199283168117909155600a8054909216179055565b600380546108c690612408565b60006108b38233611a8e565b336001600160a01b038316036116a25760405163b06307db60e01b815260040160405180910390fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611719848484610ad0565b61172584848484611d9c565b611742576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6001546001600160a01b031633146117725760405162461bcd60e51b8152600401610aaa90612442565b80516006146117c35760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206e756d626572206f662070696563657300000000000000006044820152606401610aaa565b6006546117d1306001611971565b60408051808201825283815260006020808301829052848252600b815292902081518051929391926118069284920190611ea1565b50602091909101516001909101805460ff19169115159190911790555050565b6060611833826006541190565b61187f5760405162461bcd60e51b815260206004820152601b60248201527f5552495175657279466f724e6f6e6578697374656e74546f6b656e00000000006044820152606401610aaa565b6000828152600560205260408120805461189890612408565b80601f01602080910402602001604051908101604052809291908181526020018280546118c490612408565b80156119115780601f106118e657610100808354040283529160200191611911565b820191906000526020600020905b8154815290600101906020018083116118f457829003601f168201915b5050505050905060048160405160200161192c9291906126a7565b604051602081830303815290604052915050919050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6001600160a01b03821661199757604051622e076360e81b815260040160405180910390fd5b806000036119b85760405163b562e8dd60e01b815260040160405180910390fd5b60065460005b60018303811015611a04576006805460010181556000908152604051838301916001600160a01b038716916000805160206127bd833981519152908290a46001016119be565b5060068054600180820183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b038616179055611a5b9083612572565b611a659082612694565b6040516001600160a01b038516906000906000805160206127bd833981519152908290a4505050565b6000828152600b6020908152604080832080548251818502810185019093528083528493830182828015611ae157602002820191906000526020600020905b815481526020019060010190808311611acd575b5050600a54604051631d808f8160e31b81526001600160a01b038981166004830152959650600095909116935063ec047c0892506024019050600060405180830381865afa158015611b37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b5f919081019061272e565b9050600160005b8351811015611bf3576000805b8451811015611bd057848181518110611b8e57611b8e6123c3565b6020026020010151868481518110611ba857611ba86123c3565b602002602001015103611bbe5760019150611bd0565b80611bc8816123ef565b915050611b73565b5080611be0576000925050611bf3565b5080611beb816123ef565b915050611b66565b5095945050505050565b826001600160a01b031660068281548110611c1a57611c1a6123c3565b6000918252602090912001546001600160a01b031614611c4c5760405162a1148160e81b815260040160405180910390fd5b611c57816006541190565b611c7457604051636f96cda160e11b815260040160405180910390fd5b600081815260076020526040902080546001600160a01b03191690556006805483919083908110611ca757611ca76123c3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600081118015611d16575060006006611cef600184612572565b81548110611cff57611cff6123c3565b6000918252602090912001546001600160a01b0316145b15611d6857826006611d29600184612572565b81548110611d3957611d396123c3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80826001600160a01b0316846001600160a01b03166000805160206127bd83398151915260405160405180910390a4505050565b6000836001600160a01b03163b600003611db857506001611e99565b604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611dea903390899088908890600401612762565b6020604051808303816000875af1925050508015611e25575060408051601f3d908101601f19168201909252611e229181019061279f565b60015b611e83573d808015611e53576040519150601f19603f3d011682016040523d82523d6000602084013e611e58565b606091505b508051600003611e7b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b828054828255906000526020600020908101928215611edc579160200282015b82811115611edc578251825591602001919060010190611ec1565b506114189291505b808211156114185760008155600101611ee4565b600081518084526020808501945080840160005b83811015611f2857815187529582019590820190600101611f0c565b509495945050505050565b604081526000611f466040830185611ef8565b8281036020840152611f588185611ef8565b95945050505050565b6001600160e01b031981168114611f7757600080fd5b50565b600060208284031215611f8c57600080fd5b8135611f9781611f61565b9392505050565b60005b83811015611fb9578181015183820152602001611fa1565b50506000910152565b60008151808452611fda816020860160208601611f9e565b601f01601f19169290920160200192915050565b602081526000611f976020830184611fc2565b60006020828403121561201357600080fd5b5035919050565b80356001600160a01b038116811461203157600080fd5b919050565b6000806040838503121561204957600080fd5b6120528361201a565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561209e5761209e612060565b604052919050565b60006001600160401b038311156120bf576120bf612060565b6120d2601f8401601f1916602001612076565b90508281528383830111156120e657600080fd5b828260208301376000602084830101529392505050565b600082601f83011261210e57600080fd5b611f97838335602085016120a6565b6000806040838503121561213057600080fd5b8235915060208301356001600160401b0381111561214d57600080fd5b612159858286016120fd565b9150509250929050565b60008060006060848603121561217857600080fd5b6121818461201a565b925061218f6020850161201a565b9150604084013590509250925092565b6000602082840312156121b157600080fd5b611f978261201a565b600080604083850312156121cd57600080fd5b6121d68361201a565b9150602083013580151581146121eb57600080fd5b809150509250929050565b6060815260006122096060830186611ef8565b9315156020830152506001600160a01b0391909116604090910152919050565b60006020828403121561223b57600080fd5b81356001600160401b0381111561225157600080fd5b611e99848285016120fd565b6000806000806080858703121561227357600080fd5b61227c8561201a565b935061228a6020860161201a565b92506040850135915060608501356001600160401b038111156122ac57600080fd5b8501601f810187136122bd57600080fd5b6122cc878235602084016120a6565b91505092959194509250565b60006001600160401b038211156122f1576122f1612060565b5060051b60200190565b6000602080838503121561230e57600080fd5b82356001600160401b0381111561232457600080fd5b8301601f8101851361233557600080fd5b8035612348612343826122d8565b612076565b81815260059190911b8201830190838101908783111561236757600080fd5b928401925b828410156123855783358252928401929084019061236c565b979650505050505050565b600080604083850312156123a357600080fd5b6123ac8361201a565b91506123ba6020840161201a565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612401576124016123d9565b5060010190565b600181811c9082168061241c57607f821691505b60208210810361243c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b601f821115610acb57600081815260208120601f850160051c8101602086101561248c5750805b601f850160051c820191505b818110156124ab57828155600101612498565b505050505050565b81516001600160401b038111156124cc576124cc612060565b6124e0816124da8454612408565b84612465565b602080601f83116001811461251557600084156124fd5750858301515b600019600386901b1c1916600185901b1785556124ab565b600085815260208120601f198616915b8281101561254457888601518255948401946001909101908401612525565b50858210156125625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156108b3576108b36123d9565b600082601f83011261259657600080fd5b815160206125a6612343836122d8565b82815260059290921b840181019181810190868411156125c557600080fd5b8286015b848110156125e057805183529183019183016125c9565b509695505050505050565b60008060006060848603121561260057600080fd5b83516001600160401b038082111561261757600080fd5b61262387838801612585565b9450602086015191508082111561263957600080fd5b61264587838801612585565b9350604086015191508082111561265b57600080fd5b5061266886828701612585565b9150509250925092565b60008261268f57634e487b7160e01b600052601260045260246000fd5b500690565b808201808211156108b3576108b36123d9565b60008084546126b581612408565b600182811680156126cd57600181146126e257612711565b60ff1984168752821515830287019450612711565b8860005260208060002060005b858110156127085781548a8201529084019082016126ef565b50505082870194505b505050508351612725818360208801611f9e565b01949350505050565b60006020828403121561274057600080fd5b81516001600160401b0381111561275657600080fd5b611e9984828501612585565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061279590830184611fc2565b9695505050505050565b6000602082840312156127b157600080fd5b8151611f9781611f6156feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a0fc48e08f15cbf0bbd38c0f01a0b815f049521a312409f80fb28185f95717d364736f6c6343000812003368747470733a2f2f77686974657261626269742e6d7970696e6174612e636c6f75642f697066732f
Deployed Bytecode
0x6080604052600436106101c45760003560e01c80634f6ccce7116100f6578063995c85631161008f578063bdfa08eb11610061578063bdfa08eb14610574578063c42b2d1714610594578063c87b56dd146105b4578063e985e9c5146105d457005b8063995c8563146104db578063a22cb465146104fb578063b88d4fde1461051b578063b91816111461053b57005b80636c0360eb116100c85780636c0360eb1461047157806370a08231146104865780637f7512c3146104a657806395d89b41146104c657005b80634f6ccce7146103e25780635150d2981461040257806355f804b3146104315780636352211e1461045157005b806323b872dd11610168578063374a8af71161013a578063374a8af71461036257806342842e0e1461038257806347d0d4e3146103a25780634cd0dda7146103c257005b806323b872dd146102e2578063253c8bd4146103025780632bfe8742146103225780632f745c591461034257005b8063081812fc116101a1578063081812fc1461024b578063095ea7b31461028357806318160ddd146102a357806322bb3e1b146102c257005b806301393a7a146101cd57806301ffc9a7146101f957806306fdde031461022957005b366101cb57005b005b3480156101d957600080fd5b506101e26105f4565b6040516101f0929190611f33565b60405180910390f35b34801561020557600080fd5b50610219610214366004611f7a565b61084c565b60405190151581526020016101f0565b34801561023557600080fd5b5061023e6108b9565b6040516101f09190611fee565b34801561025757600080fd5b5061026b610266366004612001565b610947565b6040516001600160a01b0390911681526020016101f0565b34801561028f57600080fd5b506101cb61029e366004612036565b61098d565b3480156102af57600080fd5b506006545b6040519081526020016101f0565b3480156102ce57600080fd5b506101cb6102dd36600461211d565b610a66565b3480156102ee57600080fd5b506101cb6102fd366004612163565b610ad0565b34801561030e57600080fd5b506101cb61031d36600461219f565b610ce3565b34801561032e57600080fd5b506101cb61033d3660046121ba565b610d49565b34801561034e57600080fd5b506102b461035d366004612036565b610db8565b34801561036e57600080fd5b506101cb61037d366004612001565b610e4b565b34801561038e57600080fd5b506101cb61039d366004612163565b611278565b3480156103ae57600080fd5b506101cb6103bd366004612001565b611293565b3480156103ce57600080fd5b5060095461026b906001600160a01b031681565b3480156103ee57600080fd5b506102b46103fd366004612001565b6113ee565b34801561040e57600080fd5b5061042261041d366004612001565b61141c565b6040516101f0939291906121f6565b34801561043d57600080fd5b506101cb61044c366004612229565b61149c565b34801561045d57600080fd5b5061026b61046c366004612001565b6114f0565b34801561047d57600080fd5b5061023e61158b565b34801561049257600080fd5b506102b46104a136600461219f565b611598565b3480156104b257600080fd5b506101cb6104c136600461219f565b61160a565b3480156104d257600080fd5b5061023e611660565b3480156104e757600080fd5b506102196104f6366004612001565b61166d565b34801561050757600080fd5b506101cb6105163660046121ba565b611679565b34801561052757600080fd5b506101cb61053636600461225d565b61170e565b34801561054757600080fd5b5061021961055636600461219f565b6001600160a01b031660009081526020819052604090205460ff1690565b34801561058057600080fd5b506101cb61058f3660046122fb565b611748565b3480156105a057600080fd5b50600a5461026b906001600160a01b031681565b3480156105c057600080fd5b5061023e6105cf366004612001565b611826565b3480156105e057600080fd5b506102196105ef366004612390565b611943565b6006546060908190806001600160401b0381111561061457610614612060565b60405190808252806020026020018201604052801561063d578160200160208202803683370190505b509250806001600160401b0381111561065857610658612060565b604051908082528060200260200182016040528015610681578160200160208202803683370190505b50915060005b81811015610750576000818152600b602052604090206001015460ff166106f5576000818152600b6020526040812080549091906106c7576106c76123c3565b90600052602060002001548482815181106106e4576106e46123c3565b60200260200101818152505061073e565b6000818152600b602052604081208054909190610714576107146123c3565b9060005260206000200154838281518110610731576107316123c3565b6020026020010181815250505b80610748816123ef565b915050610687565b5060008060005b83811015610841576000801b868281518110610775576107756123c3565b6020026020010151146107c757858181518110610794576107946123c3565b60200260200101518684815181106107ae576107ae6123c3565b6020908102919091010152826107c3816123ef565b9350505b6000801b8582815181106107dd576107dd6123c3565b60200260200101511461082f578481815181106107fc576107fc6123c3565b6020026020010151858381518110610816576108166123c3565b60209081029190910101528161082b816123ef565b9250505b80610839816123ef565b915050610757565b509084528252509091565b60006301ffc9a760e01b6001600160e01b03198316148061087d57506380ac58cd60e01b6001600160e01b03198316145b80610898575063780e9d6360e01b6001600160e01b03198316145b806108b35750635b5e139f60e01b6001600160e01b03198316145b92915050565b600280546108c690612408565b80601f01602080910402602001604051908101604052809291908181526020018280546108f290612408565b801561093f5780601f106109145761010080835404028352916020019161093f565b820191906000526020600020905b81548152906001019060200180831161092257829003601f168201915b505050505081565b6000610954826006541190565b610971576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610998826114f0565b9050806001600160a01b0316836001600160a01b0316036109cc5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906109ec57506109ea8133611943565b155b15610a0a576040516367d9dca160e11b815260040160405180910390fd5b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b3360009081526020819052604090205460ff1680610a8e57506001546001600160a01b031633145b610ab35760405162461bcd60e51b8152600401610aaa90612442565b60405180910390fd5b6000828152600560205260409020610acb82826124b3565b505050565b610adb816006541190565b610af857604051636f96cda160e11b815260040160405180910390fd5b826001600160a01b0316610b0b826114f0565b6001600160a01b031614610b315760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038216610b5857604051633a954ecd60e21b815260040160405180910390fd5b6000336001600160a01b0385161480610b8a5750610b7582610947565b6001600160a01b0316336001600160a01b0316145b80610b9a5750610b9a8433611943565b905080610bba57604051632ce44b5f60e11b815260040160405180910390fd5b600082815260076020526040902080546001600160a01b03191690556006805484919084908110610bed57610bed6123c3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600082118015610c5c575060006006610c35600185612572565b81548110610c4557610c456123c3565b6000918252602090912001546001600160a01b0316145b15610cae57836006610c6f600185612572565b81548110610c7f57610c7f6123c3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b81836001600160a01b0316856001600160a01b03166000805160206127bd83398151915260405160405180910390a450505050565b3360009081526020819052604090205460ff1680610d0b57506001546001600160a01b031633145b610d275760405162461bcd60e51b8152600401610aaa90612442565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff1680610d7157506001546001600160a01b031633145b610d8d5760405162461bcd60e51b8152600401610aaa90612442565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b6000610dc383611598565b8210610de2576040516306ed618760e11b815260040160405180910390fd5b6006546000905b80831015610e3257610dfa836114f0565b6001600160a01b0316856001600160a01b031603610e2757838203610e205750506108b3565b6001909101905b600190920191610de9565b604051637339954760e01b815260040160405180910390fd5b6001546001600160a01b03163314610e755760405162461bcd60e51b8152600401610aaa90612442565b60068054600a5460408051630d6fcb8160e41b81529051606092839283926001600160a01b039092169163d6fcb810916004808201926000929091908290030181865afa158015610eca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ef291908101906125eb565b919450925090506000856001600160401b03811115610f1357610f13612060565b604051908082528060200260200182016040528015610f3c578160200160208202803683370190505b50905081825188604051602001610f5591815260200190565b6040516020818303038152906040528051906020012060001c610f789190612672565b81518110610f8857610f886123c3565b602002602001015181600081518110610fa357610fa36123c3565b602090810291909101015282518390610fbd896001612694565b604051602001610fcf91815260200190565b6040516020818303038152906040528051906020012060001c610ff29190612672565b81518110611002576110026123c3565b60200260200101518160018151811061101d5761101d6123c3565b602090810291909101015282518390611037896002612694565b60405160200161104991815260200190565b6040516020818303038152906040528051906020012060001c61106c9190612672565b8151811061107c5761107c6123c3565b602002602001015181600281518110611097576110976123c3565b6020908102919091010152835184906110b1896003612694565b6040516020016110c391815260200190565b6040516020818303038152906040528051906020012060001c6110e69190612672565b815181106110f6576110f66123c3565b602002602001015181600381518110611111576111116123c3565b60209081029190910101528351849061112b896004612694565b60405160200161113d91815260200190565b6040516020818303038152906040528051906020012060001c6111609190612672565b81518110611170576111706123c3565b60200260200101518160048151811061118b5761118b6123c3565b6020908102919091010152835184906111a5896005612694565b6040516020016111b791815260200190565b6040516020818303038152906040528051906020012060001c6111da9190612672565b815181106111ea576111ea6123c3565b602002602001015181600581518110611205576112056123c3565b6020908102919091018101919091526040805180820182528381526000818401819052888152600b84529190912081518051929391926112489284920190611ea1565b50602091909101516001918201805460ff191691151591909117905561126f903090611971565b50505050505050565b610acb8383836040518060200160405280600081525061170e565b600154600160a01b900460ff16156112d95760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610aaa565b6001805460ff60a01b1916600160a01b1781556000828152600b60205260409020015460ff16156113435760405162461bcd60e51b815260206004820152601460248201527313919508185b1c9958591e4818dbdb5c1bdcd95960621b6044820152606401610aaa565b600061134f8233611a8e565b90508015611385576000828152600b602052604090206001908101805460ff19169091179055611380303384611bfd565b6113dd565b60405162461bcd60e51b815260206004820152602760248201527f596f7520646f6e2774206f776e20616c6c2074686520706965636573206f66206044820152661d1a194813919560ca1b6064820152608401610aaa565b50506001805460ff60a01b19169055565b60006113f960065490565b8210611418576040516329c8c00760e21b815260040160405180910390fd5b5090565b6000818152600b60205260408120600181015460609291829160ff16611441866114f0565b82546040805160208084028201810190925282815291859183018282801561148857602002820191906000526020600020905b815481526020019060010190808311611474575b505050505092509250925092509193909250565b3360009081526020819052604090205460ff16806114c457506001546001600160a01b031633145b6114e05760405162461bcd60e51b8152600401610aaa90612442565b60046114ec82826124b3565b5050565b60006114fd826006541190565b61151a57604051636f96cda160e11b815260040160405180910390fd5b60006001600160a01b031660068381548110611538576115386123c3565b6000918252602090912001546001600160a01b0316146115805760068281548110611565576115656123c3565b6000918252602090912001546001600160a01b031692915050565b60019091019061151a565b600480546108c690612408565b60006001600160a01b0382166115c1576040516323d3ad8160e21b815260040160405180910390fd5b600654600090815b81811015611601576115da816114f0565b6001600160a01b0316856001600160a01b0316036115f9576001909201915b6001016115c9565b50909392505050565b6001546001600160a01b031633146116345760405162461bcd60e51b8152600401610aaa90612442565b600980546001600160a01b039092166001600160a01b03199283168117909155600a8054909216179055565b600380546108c690612408565b60006108b38233611a8e565b336001600160a01b038316036116a25760405163b06307db60e01b815260040160405180910390fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611719848484610ad0565b61172584848484611d9c565b611742576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6001546001600160a01b031633146117725760405162461bcd60e51b8152600401610aaa90612442565b80516006146117c35760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206e756d626572206f662070696563657300000000000000006044820152606401610aaa565b6006546117d1306001611971565b60408051808201825283815260006020808301829052848252600b815292902081518051929391926118069284920190611ea1565b50602091909101516001909101805460ff19169115159190911790555050565b6060611833826006541190565b61187f5760405162461bcd60e51b815260206004820152601b60248201527f5552495175657279466f724e6f6e6578697374656e74546f6b656e00000000006044820152606401610aaa565b6000828152600560205260408120805461189890612408565b80601f01602080910402602001604051908101604052809291908181526020018280546118c490612408565b80156119115780601f106118e657610100808354040283529160200191611911565b820191906000526020600020905b8154815290600101906020018083116118f457829003601f168201915b5050505050905060048160405160200161192c9291906126a7565b604051602081830303815290604052915050919050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6001600160a01b03821661199757604051622e076360e81b815260040160405180910390fd5b806000036119b85760405163b562e8dd60e01b815260040160405180910390fd5b60065460005b60018303811015611a04576006805460010181556000908152604051838301916001600160a01b038716916000805160206127bd833981519152908290a46001016119be565b5060068054600180820183556000929092527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b038616179055611a5b9083612572565b611a659082612694565b6040516001600160a01b038516906000906000805160206127bd833981519152908290a4505050565b6000828152600b6020908152604080832080548251818502810185019093528083528493830182828015611ae157602002820191906000526020600020905b815481526020019060010190808311611acd575b5050600a54604051631d808f8160e31b81526001600160a01b038981166004830152959650600095909116935063ec047c0892506024019050600060405180830381865afa158015611b37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b5f919081019061272e565b9050600160005b8351811015611bf3576000805b8451811015611bd057848181518110611b8e57611b8e6123c3565b6020026020010151868481518110611ba857611ba86123c3565b602002602001015103611bbe5760019150611bd0565b80611bc8816123ef565b915050611b73565b5080611be0576000925050611bf3565b5080611beb816123ef565b915050611b66565b5095945050505050565b826001600160a01b031660068281548110611c1a57611c1a6123c3565b6000918252602090912001546001600160a01b031614611c4c5760405162a1148160e81b815260040160405180910390fd5b611c57816006541190565b611c7457604051636f96cda160e11b815260040160405180910390fd5b600081815260076020526040902080546001600160a01b03191690556006805483919083908110611ca757611ca76123c3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600081118015611d16575060006006611cef600184612572565b81548110611cff57611cff6123c3565b6000918252602090912001546001600160a01b0316145b15611d6857826006611d29600184612572565b81548110611d3957611d396123c3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80826001600160a01b0316846001600160a01b03166000805160206127bd83398151915260405160405180910390a4505050565b6000836001600160a01b03163b600003611db857506001611e99565b604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611dea903390899088908890600401612762565b6020604051808303816000875af1925050508015611e25575060408051601f3d908101601f19168201909252611e229181019061279f565b60015b611e83573d808015611e53576040519150601f19603f3d011682016040523d82523d6000602084013e611e58565b606091505b508051600003611e7b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b828054828255906000526020600020908101928215611edc579160200282015b82811115611edc578251825591602001919060010190611ec1565b506114189291505b808211156114185760008155600101611ee4565b600081518084526020808501945080840160005b83811015611f2857815187529582019590820190600101611f0c565b509495945050505050565b604081526000611f466040830185611ef8565b8281036020840152611f588185611ef8565b95945050505050565b6001600160e01b031981168114611f7757600080fd5b50565b600060208284031215611f8c57600080fd5b8135611f9781611f61565b9392505050565b60005b83811015611fb9578181015183820152602001611fa1565b50506000910152565b60008151808452611fda816020860160208601611f9e565b601f01601f19169290920160200192915050565b602081526000611f976020830184611fc2565b60006020828403121561201357600080fd5b5035919050565b80356001600160a01b038116811461203157600080fd5b919050565b6000806040838503121561204957600080fd5b6120528361201a565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561209e5761209e612060565b604052919050565b60006001600160401b038311156120bf576120bf612060565b6120d2601f8401601f1916602001612076565b90508281528383830111156120e657600080fd5b828260208301376000602084830101529392505050565b600082601f83011261210e57600080fd5b611f97838335602085016120a6565b6000806040838503121561213057600080fd5b8235915060208301356001600160401b0381111561214d57600080fd5b612159858286016120fd565b9150509250929050565b60008060006060848603121561217857600080fd5b6121818461201a565b925061218f6020850161201a565b9150604084013590509250925092565b6000602082840312156121b157600080fd5b611f978261201a565b600080604083850312156121cd57600080fd5b6121d68361201a565b9150602083013580151581146121eb57600080fd5b809150509250929050565b6060815260006122096060830186611ef8565b9315156020830152506001600160a01b0391909116604090910152919050565b60006020828403121561223b57600080fd5b81356001600160401b0381111561225157600080fd5b611e99848285016120fd565b6000806000806080858703121561227357600080fd5b61227c8561201a565b935061228a6020860161201a565b92506040850135915060608501356001600160401b038111156122ac57600080fd5b8501601f810187136122bd57600080fd5b6122cc878235602084016120a6565b91505092959194509250565b60006001600160401b038211156122f1576122f1612060565b5060051b60200190565b6000602080838503121561230e57600080fd5b82356001600160401b0381111561232457600080fd5b8301601f8101851361233557600080fd5b8035612348612343826122d8565b612076565b81815260059190911b8201830190838101908783111561236757600080fd5b928401925b828410156123855783358252928401929084019061236c565b979650505050505050565b600080604083850312156123a357600080fd5b6123ac8361201a565b91506123ba6020840161201a565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612401576124016123d9565b5060010190565b600181811c9082168061241c57607f821691505b60208210810361243c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b601f821115610acb57600081815260208120601f850160051c8101602086101561248c5750805b601f850160051c820191505b818110156124ab57828155600101612498565b505050505050565b81516001600160401b038111156124cc576124cc612060565b6124e0816124da8454612408565b84612465565b602080601f83116001811461251557600084156124fd5750858301515b600019600386901b1c1916600185901b1785556124ab565b600085815260208120601f198616915b8281101561254457888601518255948401946001909101908401612525565b50858210156125625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b818103818111156108b3576108b36123d9565b600082601f83011261259657600080fd5b815160206125a6612343836122d8565b82815260059290921b840181019181810190868411156125c557600080fd5b8286015b848110156125e057805183529183019183016125c9565b509695505050505050565b60008060006060848603121561260057600080fd5b83516001600160401b038082111561261757600080fd5b61262387838801612585565b9450602086015191508082111561263957600080fd5b61264587838801612585565b9350604086015191508082111561265b57600080fd5b5061266886828701612585565b9150509250925092565b60008261268f57634e487b7160e01b600052601260045260246000fd5b500690565b808201808211156108b3576108b36123d9565b60008084546126b581612408565b600182811680156126cd57600181146126e257612711565b60ff1984168752821515830287019450612711565b8860005260208060002060005b858110156127085781548a8201529084019082016126ef565b50505082870194505b505050508351612725818360208801611f9e565b01949350505050565b60006020828403121561274057600080fd5b81516001600160401b0381111561275657600080fd5b611e9984828501612585565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061279590830184611fc2565b9695505050505050565b6000602082840312156127b157600080fd5b8151611f9781611f6156feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a0fc48e08f15cbf0bbd38c0f01a0b815f049521a312409f80fb28185f95717d364736f6c63430008120033
Deployed Bytecode Sourcemap
4655:19258:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18056:1422;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;6619:426;;;;;;;;;;-1:-1:-1;6619:426:0;;;;;:::i;:::-;;:::i;:::-;;;1475:14:1;;1468:22;1450:41;;1438:2;1423:18;6619:426:0;1310:187:1;4895:39:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10725:203::-;;;;;;;;;;-1:-1:-1;10725:203:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2607:32:1;;;2589:51;;2577:2;2562:18;10725:203:0;2443::1;10277:382:0;;;;;;;;;;-1:-1:-1;10277:382:0;;;;;:::i;:::-;;:::i;7311:93::-;;;;;;;;;;-1:-1:-1;7382:7:0;:14;7311:93;;;3234:25:1;;;3222:2;3207:18;7311:93:0;3088:177:1;5218:133:0;;;;;;;;;;-1:-1:-1;5218:133:0;;;;;:::i;:::-;;:::i;11567:1011::-;;;;;;;;;;-1:-1:-1;11567:1011:0;;;;;:::i;:::-;;:::i;1394:93::-;;;;;;;;;;-1:-1:-1;1394:93:0;;;;;:::i;:::-;;:::i;896:106::-;;;;;;;;;;-1:-1:-1;896:106:0;;;;;:::i;:::-;;:::i;7643:634::-;;;;;;;;;;-1:-1:-1;7643:634:0;;;;;:::i;:::-;;:::i;22038:1215::-;;;;;;;;;;-1:-1:-1;22038:1215:0;;;;;:::i;:::-;;:::i;13330:166::-;;;;;;;;;;-1:-1:-1;13330:166:0;;;;;:::i;:::-;;:::i;19574:629::-;;;;;;;;;;-1:-1:-1;19574:629:0;;;;;:::i;:::-;;:::i;17254:30::-;;;;;;;;;;-1:-1:-1;17254:30:0;;;;-1:-1:-1;;;;;17254:30:0;;;8354:175;;;;;;;;;;-1:-1:-1;8354:175:0;;;;;:::i;:::-;;:::i;17542:401::-;;;;;;;;;;-1:-1:-1;17542:401:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;5113:97::-;;;;;;;;;;-1:-1:-1;5113:97:0;;;;;:::i;:::-;;:::i;9735:480::-;;;;;;;;;;-1:-1:-1;9735:480:0;;;;;:::i;:::-;;:::i;4985:66::-;;;;;;;;;;;;;:::i;8990:497::-;;;;;;;;;;-1:-1:-1;8990:497:0;;;;;:::i;:::-;;:::i;21422:149::-;;;;;;;;;;-1:-1:-1;21422:149:0;;;;;:::i;:::-;;:::i;4941:31::-;;;;;;;;;;;;;:::i;20211:126::-;;;;;;;;;;-1:-1:-1;20211:126:0;;;;;:::i;:::-;;:::i;11000:272::-;;;;;;;;;;-1:-1:-1;11000:272:0;;;;;:::i;:::-;;:::i;13567:295::-;;;;;;;;;;-1:-1:-1;13567:295:0;;;;;:::i;:::-;;:::i;791:99::-;;;;;;;;;;-1:-1:-1;791:99:0;;;;;:::i;:::-;-1:-1:-1;;;;;869:13:0;845:4;869:13;;;;;;;;;;;;;;791:99;21648:299;;;;;;;;;;-1:-1:-1;21648:299:0;;;;;:::i;:::-;;:::i;17291:23::-;;;;;;;;;;-1:-1:-1;17291:23:0;;;;-1:-1:-1;;;;;17291:23:0;;;5359:262;;;;;;;;;;-1:-1:-1;5359:262:0;;;;;:::i;:::-;;:::i;11343:157::-;;;;;;;;;;-1:-1:-1;11343:157:0;;;;;:::i;:::-;;:::i;18056:1422::-;18271:7;:14;18109:30;;;;18271:14;-1:-1:-1;;;;;18312:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18312:22:0;;18296:38;;18383:7;-1:-1:-1;;;;;18369:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18369:22:0;;18345:46;;18407:9;18402:328;18426:7;18422:1;:11;18402:328;;;18511:15;;;;:12;:15;;;;;:24;;;;;18506:213;;18575:15;;;;:12;:15;;;;;:30;;:15;;;:30;;;;:::i;:::-;;;;;;;;;18556:13;18570:1;18556:16;;;;;;;;:::i;:::-;;;;;;:49;;;;;18506:213;;;18673:15;;;;:12;:15;;;;;:30;;:15;;;:30;;;;:::i;:::-;;;;;;;;;18646:21;18668:1;18646:24;;;;;;;;:::i;:::-;;;;;;:57;;;;;18506:213;18435:3;;;;:::i;:::-;;;;18402:328;;;;18774:27;18816:35;18871:9;18866:446;18890:7;18886:1;:11;18866:446;;;18951:1;18943:10;;18923:13;18937:1;18923:16;;;;;;;;:::i;:::-;;;;;;;:30;18919:164;;19011:13;19025:1;19011:16;;;;;;;;:::i;:::-;;;;;;;18974:13;18988:19;18974:34;;;;;;;;:::i;:::-;;;;;;;;;;:53;19046:21;;;;:::i;:::-;;;;18919:164;19137:1;19129:10;;19101:21;19123:1;19101:24;;;;;;;;:::i;:::-;;;;;;;:38;19097:204;;19213:21;19235:1;19213:24;;;;;;;;:::i;:::-;;;;;;;19160:21;19182:27;19160:50;;;;;;;;:::i;:::-;;;;;;;;;;:77;19256:29;;;;:::i;:::-;;;;19097:204;18899:3;;;;:::i;:::-;;;;18866:446;;;-1:-1:-1;19346:42:0;;;19402:58;;-1:-1:-1;19353:13:0;;18056:1422::o;6619:426::-;6695:4;-1:-1:-1;;;;;;;;;6732:25:0;;;;:101;;-1:-1:-1;;;;;;;;;;6808:25:0;;;6732:101;:177;;;-1:-1:-1;;;;;;;;;;6884:25:0;;;6732:177;:263;;;-1:-1:-1;;;;;;;;;;6970:25:0;;;6732:263;6712:283;6619:426;-1:-1:-1;;6619:426:0:o;4895:39::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10725:203::-;10792:7;10817:16;10825:7;14034;:14;-1:-1:-1;14024:24:0;13935:121;10817:16;10812:64;;10842:34;;-1:-1:-1;;;10842:34:0;;;;;;;;;;;10812:64;-1:-1:-1;10896:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;10896:24:0;;10725:203::o;10277:382::-;10349:14;10366:16;10374:7;10366;:16::i;:::-;10349:33;;10403:6;-1:-1:-1;;;;;10397:12:0;:2;-1:-1:-1;;;;;10397:12:0;;10393:49;;10418:24;;-1:-1:-1;;;10418:24:0;;;;;;;;;;;10393:49;10459:10;-1:-1:-1;;;;;10459:20:0;;;;;;:61;;;10484:36;10501:6;10509:10;10484:16;:36::i;:::-;10483:37;10459:61;10455:109;;;10529:35;;-1:-1:-1;;;10529:35:0;;;;;;;;;;;10455:109;10577:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;10577:29:0;-1:-1:-1;;;;;10577:29:0;;;;;;;;;10622;;10577:24;;10622:29;;;;;;;10338:321;10277:382;;:::o;5218:133::-;1056:10;1048:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;1083:5:0;;-1:-1:-1;;;;;1083:5:0;1071:10;:17;1048:40;1039:63;;;;-1:-1:-1;;;1039:63:0;;;;;;;:::i;:::-;;;;;;;;;5312:19:::1;::::0;;;:10:::1;:19;::::0;;;;:31:::1;5334:9:::0;5312:19;:31:::1;:::i;:::-;;5218:133:::0;;:::o;11567:1011::-;11697:16;11705:7;14034;:14;-1:-1:-1;14024:24:0;13935:121;11697:16;11692:61;;11722:31;;-1:-1:-1;;;11722:31:0;;;;;;;;;;;11692:61;11788:4;-1:-1:-1;;;;;11768:24:0;:16;11776:7;11768;:16::i;:::-;-1:-1:-1;;;;;11768:24:0;;11764:65;;11801:28;;-1:-1:-1;;;11801:28:0;;;;;;;;;;;11764:65;-1:-1:-1;;;;;11844:16:0;;11840:52;;11869:23;;-1:-1:-1;;;11869:23:0;;;;;;;;;;;11840:52;11905:22;11931:10;-1:-1:-1;;;;;11931:18:0;;;;:69;;;11980:20;11992:7;11980:11;:20::i;:::-;-1:-1:-1;;;;;11966:34:0;:10;-1:-1:-1;;;;;11966:34:0;;11931:69;:120;;;;12017:34;12034:4;12040:10;12017:16;:34::i;:::-;11905:147;;12068:17;12063:66;;12094:35;;-1:-1:-1;;;12094:35:0;;;;;;;;;;;12063:66;12204:24;;;;:15;:24;;;;;12197:31;;-1:-1:-1;;;;;;12197:31:0;;;12239:7;:16;;12258:2;;12239:7;12220;;12239:16;;;;;;:::i;:::-;;;;;;;;;:21;;;;;-1:-1:-1;;;;;12239:21:0;;;;;-1:-1:-1;;;;;12239:21:0;;;;;;12431:1;12421:7;:11;:49;;;;-1:-1:-1;12468:1:0;12436:7;12444:11;12454:1;12444:7;:11;:::i;:::-;12436:20;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;12436:20:0;:34;12421:49;12417:109;;;12510:4;12487:7;12495:11;12505:1;12495:7;:11;:::i;:::-;12487:20;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;-1:-1:-1;;;;;12487:27:0;;;;;-1:-1:-1;;;;;12487:27:0;;;;;;12417:109;12562:7;12558:2;-1:-1:-1;;;;;12543:27:0;12552:4;-1:-1:-1;;;;;12543:27:0;-1:-1:-1;;;;;;;;;;;12543:27:0;;;;;;;;;11681:897;11567:1011;;;:::o;1394:93::-;1056:10;1048:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;1083:5:0;;-1:-1:-1;;;;;1083:5:0;1071:10;:17;1048:40;1039:63;;;;-1:-1:-1;;;1039:63:0;;;;;;;:::i;:::-;1462:5:::1;:17:::0;;-1:-1:-1;;;;;;1462:17:0::1;-1:-1:-1::0;;;;;1462:17:0;;;::::1;::::0;;;::::1;::::0;;1394:93::o;896:106::-;1056:10;1048:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;1083:5:0;;-1:-1:-1;;;;;1083:5:0;1071:10;:17;1048:40;1039:63;;;;-1:-1:-1;;;1039:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;973:13:0;;;::::1;:7;:13:::0;;;::::1;::::0;;;;;;:21;;-1:-1:-1;;973:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;896:106::o;7643:634::-;7732:15;7773:17;7783:6;7773:9;:17::i;:::-;7764:5;:26;7760:62;;7799:23;;-1:-1:-1;;;7799:23:0;;;;;;;;;;;7760:62;7873:7;:14;7835:13;;7993:218;8017:3;8007:7;:13;7993:218;;;8066:16;8074:7;8066;:16::i;:::-;-1:-1:-1;;;;;8056:26:0;:6;-1:-1:-1;;;;;8056:26:0;;8052:144;;8120:5;8111;:14;8107:69;;8127:14;;;;8107:69;8169:7;;;;;8107:69;8022:9;;;;;7993:218;;;8241:28;;-1:-1:-1;;;8241:28:0;;;;;;;;;;;22038:1215;1200:5;;-1:-1:-1;;;;;1200:5:0;1188:10;:17;1180:39;;;;-1:-1:-1;;;1180:39:0;;;;;;;:::i;:::-;22130:1:::1;22160:14:::0;;22378:8:::1;::::0;:23:::1;::::0;;-1:-1:-1;;;22378:23:0;;;;22243:24:::1;::::0;;;;;-1:-1:-1;;;;;22378:8:0;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;22110:17:::1;::::0;22378:23;;;;;;;;:8;:23:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;22378:23:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;22348:53:::0;;-1:-1:-1;22348:53:0;-1:-1:-1;22348:53:0;-1:-1:-1;22478:28:0::1;22523:12:::0;-1:-1:-1;;;;;22509:27:0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;22509:27:0::1;;22478:58;;22564:5;22612;:12;22602:4;22585:22;;;;;;13711:19:1::0;;13755:2;13746:12;;13582:182;22585:22:0::1;;;;;;;;;;;;;22575:33;;;;;;22570:39;;:54;;;;:::i;:::-;22564:61;;;;;;;;:::i;:::-;;;;;;;22547:11;22559:1;22547:14;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:78;22709:16;;22653:9;;22695:8:::1;:4:::0;22702:1:::1;22695:8;:::i;:::-;22678:26;;;;;;13711:19:1::0;;13755:2;13746:12;;13582:182;22678:26:0::1;;;;;;;;;;;;;22668:37;;;;;;22663:43;;:62;;;;:::i;:::-;22653:73;;;;;;;;:::i;:::-;;;;;;;22636:11;22648:1;22636:14;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:90;22810:16;;22754:9;;22796:8:::1;:4:::0;22803:1:::1;22796:8;:::i;:::-;22779:26;;;;;;13711:19:1::0;;13755:2;13746:12;;13582:182;22779:26:0::1;;;;;;;;;;;;;22769:37;;;;;;22764:43;;:62;;;;:::i;:::-;22754:73;;;;;;;;:::i;:::-;;;;;;;22737:11;22749:1;22737:14;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:90;22909:14;;22855:7;;22895:8:::1;:4:::0;22902:1:::1;22895:8;:::i;:::-;22878:26;;;;;;13711:19:1::0;;13755:2;13746:12;;13582:182;22878:26:0::1;;;;;;;;;;;;;22868:37;;;;;;22863:43;;:60;;;;:::i;:::-;22855:69;;;;;;;;:::i;:::-;;;;;;;22838:11;22850:1;22838:14;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:86;23006:14;;22952:7;;22992:8:::1;:4:::0;22999:1:::1;22992:8;:::i;:::-;22975:26;;;;;;13711:19:1::0;;13755:2;13746:12;;13582:182;22975:26:0::1;;;;;;;;;;;;;22965:37;;;;;;22960:43;;:60;;;;:::i;:::-;22952:69;;;;;;;;:::i;:::-;;;;;;;22935:11;22947:1;22935:14;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:86;23103:14;;23049:7;;23089:8:::1;:4:::0;23096:1:::1;23089:8;:::i;:::-;23072:26;;;;;;13711:19:1::0;;13755:2;13746:12;;13582:182;23072:26:0::1;;;;;;;;;;;;;23062:37;;;;;;23057:43;;:60;;;;:::i;:::-;23049:69;;;;;;;;:::i;:::-;;;;;;;23032:11;23044:1;23032:14;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;:86;;;;23179:32:::1;::::0;;;;::::1;::::0;;;;;-1:-1:-1;23179:32:0;;::::1;::::0;;;23155:21;;;:12:::1;:21:::0;;;;;;:56;;;;23179:32;;23155:21;;:56:::1;::::0;:21;;:56:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;23155:56:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;23155:56:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23222:23:::1;::::0;23236:4:::1;::::0;23222:5:::1;:23::i;:::-;22099:1154;;;;;;22038:1215:::0;:::o;13330:166::-;13454:34;13471:4;13477:2;13481;13454:34;;;;;;;;;;;;:16;:34::i;19574:629::-;1299:6;;-1:-1:-1;;;1299:6:0;;;;1298:7;1290:29;;;;-1:-1:-1;;;1290:29:0;;14315:2:1;1290:29:0;;;14297:21:1;14354:1;14334:18;;;14327:29;-1:-1:-1;;;14372:18:1;;;14365:39;14421:18;;1290:29:0;14113:332:1;1290:29:0;1339:4;1330:13;;-1:-1:-1;;;;1330:13:0;-1:-1:-1;;;1330:13:0;;;;19698:21;;;:12:::1;:21;::::0;;;;:30:::1;::::0;1330:13;19698:30:::1;19697:31;19689:64;;;::::0;-1:-1:-1;;;19689:64:0;;14652:2:1;19689:64:0::1;::::0;::::1;14634:21:1::0;14691:2;14671:18;;;14664:30;-1:-1:-1;;;14710:18:1;;;14703:50;14770:18;;19689:64:0::1;14450:344:1::0;19689:64:0::1;19837:20;19860:34;19874:7;19883:10;19860:13;:34::i;:::-;19837:57;;19965:15;19961:235;;;19997:21;::::0;;;:12:::1;:21;::::0;;;;20030:4:::1;19997:30:::0;;::::1;:37:::0;;-1:-1:-1;;19997:37:0::1;::::0;;::::1;::::0;;20049:53:::1;20075:4;20082:10;20010:7:::0;20049:17:::1;:53::i;:::-;19961:235;;;20135:49;::::0;-1:-1:-1;;;20135:49:0;;15001:2:1;20135:49:0::1;::::0;::::1;14983:21:1::0;15040:2;15020:18;;;15013:30;15079:34;15059:18;;;15052:62;-1:-1:-1;;;15130:18:1;;;15123:37;15177:19;;20135:49:0::1;14799:403:1::0;19961:235:0::1;-1:-1:-1::0;;1366:6:0;:14;;-1:-1:-1;;;;1366:14:0;;;19574:629::o;8354:175::-;8420:7;8453:13;7382:7;:14;;7311:93;8453:13;8444:5;:22;8440:58;;8475:23;;-1:-1:-1;;;8475:23:0;;;;;;;;;;;8440:58;-1:-1:-1;8516:5:0;8354:175::o;17542:401::-;17699:13;17817:21;;;:12;:21;;;;;17869:30;;;;17604:23;;17699:13;;;17869:30;;17918:16;17830:7;17918;:16::i;:::-;17809:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17542:401;;;;;:::o;5113:97::-;1056:10;1048:7;:19;;;;;;;;;;;;;;:40;;-1:-1:-1;1083:5:0;;-1:-1:-1;;;;;1083:5:0;1071:10;:17;1048:40;1039:63;;;;-1:-1:-1;;;1039:63:0;;;;;;;:::i;:::-;5184:7:::1;:18;5194:8:::0;5184:7;:18:::1;:::i;:::-;;5113:97:::0;:::o;9735:480::-;9798:7;9823:16;9831:7;14034;:14;-1:-1:-1;14024:24:0;13935:121;9823:16;9818:61;;9848:31;;-1:-1:-1;;;9848:31:0;;;;;;;;;;;9818:61;10065:1;-1:-1:-1;;;;;10037:30:0;:7;10045;10037:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;10037:16:0;:30;10033:102;;10099:7;10107;10099:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;10099:16:0;;9735:480;-1:-1:-1;;9735:480:0:o;10033:102::-;10003:9;;;;;9987:163;;4985:66;;;;;;;:::i;8990:497::-;9054:7;-1:-1:-1;;;;;9078:20:0;;9074:61;;9107:28;;-1:-1:-1;;;9107:28:0;;;;;;;;;;;9074:61;9186:7;:14;9148:13;;;9306:140;9326:3;9322:1;:7;9306:140;;;9369:10;9377:1;9369:7;:10::i;:::-;-1:-1:-1;;;;;9359:20:0;:6;-1:-1:-1;;;;;9359:20:0;;9355:76;;9404:7;;;;;9355:76;9331:3;;9306:140;;;-1:-1:-1;9474:5:0;;8990:497;-1:-1:-1;;;8990:497:0:o;21422:149::-;1200:5;;-1:-1:-1;;;;;1200:5:0;1188:10;:17;1180:39;;;;-1:-1:-1;;;1180:39:0;;;;;;;:::i;:::-;21498:15:::1;:26:::0;;-1:-1:-1;;;;;21498:26:0;;::::1;-1:-1:-1::0;;;;;;21498:26:0;;::::1;::::0;::::1;::::0;;;21535:8:::1;:28:::0;;;;::::1;;::::0;;21422:149::o;4941:31::-;;;;;;;:::i;20211:126::-;20271:4;20295:34;20309:7;20318:10;20295:13;:34::i;11000:272::-;11102:10;-1:-1:-1;;;;;11090:22:0;;;11086:52;;11121:17;;-1:-1:-1;;;11121:17:0;;;;;;;;;;;11086:52;11170:10;11151:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;11151:40:0;;;;;;;;;;;;:51;;-1:-1:-1;;11151:51:0;;;;;;;;;;11218:46;;1450:41:1;;;11151:40:0;;11170:10;11218:46;;1423:18:1;11218:46:0;;;;;;;11000:272;;:::o;13567:295::-;13719:26;13732:4;13738:2;13742;13719:12;:26::i;:::-;13763:42;13786:4;13792:2;13796;13800:4;13763:22;:42::i;:::-;13758:96;;13814:40;;-1:-1:-1;;;13814:40:0;;;;;;;;;;;13758:96;13567:295;;;;:::o;21648:299::-;1200:5;;-1:-1:-1;;;;;1200:5:0;1188:10;:17;1180:39;;;;-1:-1:-1;;;1180:39:0;;;;;;;:::i;:::-;21743:11:::1;:18;21765:1;21743:23;21735:60;;;::::0;-1:-1:-1;;;21735:60:0;;15409:2:1;21735:60:0::1;::::0;::::1;15391:21:1::0;15448:2;15428:18;;;15421:30;15487:26;15467:18;;;15460:54;15531:18;;21735:60:0::1;15207:348:1::0;21735:60:0::1;21824:7;:14:::0;21849:23:::1;21863:4;21870:1;21849:5;:23::i;:::-;21907:32;::::0;;;;::::1;::::0;;;;;-1:-1:-1;21907:32:0::1;::::0;;::::1;::::0;;;21883:21;;;:12:::1;:21:::0;;;;;:56;;;;21907:32;;21883:21;;:56:::1;::::0;:21;;:56:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;21883:56:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;21883:56:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;21648:299:0:o;5359:262::-;5415:13;5449:16;5457:7;14034;:14;-1:-1:-1;14024:24:0;13935:121;5449:16;5441:56;;;;-1:-1:-1;;;5441:56:0;;15762:2:1;5441:56:0;;;15744:21:1;15801:2;15781:18;;;15774:30;15840:29;15820:18;;;15813:57;15887:18;;5441:56:0;15560:351:1;5441:56:0;5508:22;5533:19;;;:10;:19;;;;;5508:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5594:7;5603:8;5577:35;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5563:50;;;5359:262;;;:::o;11343:157::-;-1:-1:-1;;;;;11456:26:0;;;11432:4;11456:26;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;;;;11343:157::o;16581:628::-;-1:-1:-1;;;;;16653:16:0;;16649:48;;16678:19;;-1:-1:-1;;;16678:19:0;;;;;;;;;;;16649:48;16712:3;16719:1;16712:8;16708:39;;16729:18;;-1:-1:-1;;;16729:18:0;;;;;;;;;;;16708:39;16784:7;:14;16760:21;16906:150;16932:1;16926:3;:7;16922:1;:11;16906:150;;;16959:7;:14;;;;;;-1:-1:-1;16959:14:0;;;16997:43;;17022:17;;;;-1:-1:-1;;;;;16997:43:0;;;-1:-1:-1;;;;;;;;;;;16997:43:0;-1:-1:-1;;16997:43:0;16935:3;;16906:150;;;-1:-1:-1;17118:7:0;:16;;;;;;;;-1:-1:-1;17118:16:0;;;;;;;;-1:-1:-1;;;;;;17118:16:0;-1:-1:-1;;;;;17118:16:0;;;;;17192:7;;:3;:7;:::i;:::-;17175:25;;:13;:25;:::i;:::-;17150:51;;-1:-1:-1;;;;;17150:51:0;;;17167:1;;-1:-1:-1;;;;;;;;;;;17150:51:0;17167:1;;17150:51;16638:571;16581:628;;:::o;20345:1038::-;20424:4;20473:21;;;:12;:21;;;;;;;;20441:65;;;;;;;;;;;;;;;;;20424:4;;20441:65;;20473:21;20441:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20549:8:0;;:31;;-1:-1:-1;;;20549:31:0;;-1:-1:-1;;;;;2607:32:1;;;20549:31:0;;;2589:51:1;20441:65:0;;-1:-1:-1;20517:29:0;;20549:8;;;;-1:-1:-1;20549:23:0;;-1:-1:-1;2562:18:1;;;-1:-1:-1;20549:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20549:31:0;;;;;;;;;;;;:::i;:::-;20517:63;-1:-1:-1;20698:4:0;20675:20;20713:630;20734:12;:19;20730:1;:23;20713:630;;;20804:16;20882:6;20877:289;20898:12;:19;20894:1;:23;20877:289;;;20990:12;21003:1;20990:15;;;;;;;;:::i;:::-;;;;;;;20971:12;20984:1;20971:15;;;;;;;;:::i;:::-;;;;;;;:34;20967:184;;21044:4;21030:18;;21126:5;;20967:184;20919:3;;;;:::i;:::-;;;;20877:289;;;;21185:11;21180:152;;21235:5;21217:23;;21311:5;;;21180:152;-1:-1:-1;20755:3:0;;;;:::i;:::-;;;;20713:630;;;-1:-1:-1;21360:15:0;20345:1038;-1:-1:-1;;;;;20345:1038:0:o;12586:673::-;12697:4;-1:-1:-1;;;;;12677:24:0;:7;12685;12677:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;12677:16:0;:24;12673:65;;12710:28;;-1:-1:-1;;;12710:28:0;;;;;;;;;;;12673:65;12754:16;12762:7;14034;:14;-1:-1:-1;14024:24:0;13935:121;12754:16;12749:61;;12779:31;;-1:-1:-1;;;12779:31:0;;;;;;;;;;;12749:61;12885:24;;;;:15;:24;;;;;12878:31;;-1:-1:-1;;;;;;12878:31:0;;;12920:7;:16;;12939:2;;12920:7;12901;;12920:16;;;;;;:::i;:::-;;;;;;;;;:21;;;;;-1:-1:-1;;;;;12920:21:0;;;;;-1:-1:-1;;;;;12920:21:0;;;;;;13112:1;13102:7;:11;:49;;;;-1:-1:-1;13149:1:0;13117:7;13125:11;13135:1;13125:7;:11;:::i;:::-;13117:20;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;13117:20:0;:34;13102:49;13098:109;;;13191:4;13168:7;13176:11;13186:1;13176:7;:11;:::i;:::-;13168:20;;;;;;;;:::i;:::-;;;;;;;;;:27;;;;;-1:-1:-1;;;;;13168:27:0;;;;;-1:-1:-1;;;;;13168:27:0;;;;;;13098:109;13243:7;13239:2;-1:-1:-1;;;;;13224:27:0;13233:4;-1:-1:-1;;;;;13224:27:0;-1:-1:-1;;;;;;;;;;;13224:27:0;;;;;;;;;12586:673;;;:::o;14626:640::-;14781:4;14802:2;-1:-1:-1;;;;;14802:14:0;;14820:1;14802:19;14798:36;;-1:-1:-1;14830:4:0;14823:11;;14798:36;14851:70;;-1:-1:-1;;;14851:70:0;;-1:-1:-1;;;;;14851:36:0;;;;;:70;;14888:10;;14900:4;;14906:7;;14915:5;;14851:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14851:70:0;;;;;;;;-1:-1:-1;;14851:70:0;;;;;;;;;;;;:::i;:::-;;;14847:412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15083:6;:13;15100:1;15083:18;15079:71;;15110:40;;-1:-1:-1;;;15110:40:0;;;;;;;;;;;15079:71;15225:6;15219:13;15210:6;15206:2;15202:15;15195:38;14847:412;-1:-1:-1;;;;;;14968:55:0;-1:-1:-1;;;14968:55:0;;-1:-1:-1;14847:412:0;14626:640;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:435:1;67:3;105:5;99:12;132:6;127:3;120:19;158:4;187:2;182:3;178:12;171:19;;224:2;217:5;213:14;245:1;255:169;269:6;266:1;263:13;255:169;;;330:13;;318:26;;364:12;;;;399:15;;;;291:1;284:9;255:169;;;-1:-1:-1;440:3:1;;14:435;-1:-1:-1;;;;;14:435:1:o;454:465::-;711:2;700:9;693:21;674:4;737:56;789:2;778:9;774:18;766:6;737:56;:::i;:::-;841:9;833:6;829:22;824:2;813:9;809:18;802:50;869:44;906:6;898;869:44;:::i;:::-;861:52;454:465;-1:-1:-1;;;;;454:465:1:o;924:131::-;-1:-1:-1;;;;;;998:32:1;;988:43;;978:71;;1045:1;1042;1035:12;978:71;924:131;:::o;1060:245::-;1118:6;1171:2;1159:9;1150:7;1146:23;1142:32;1139:52;;;1187:1;1184;1177:12;1139:52;1226:9;1213:23;1245:30;1269:5;1245:30;:::i;:::-;1294:5;1060:245;-1:-1:-1;;;1060:245:1:o;1502:250::-;1587:1;1597:113;1611:6;1608:1;1605:13;1597:113;;;1687:11;;;1681:18;1668:11;;;1661:39;1633:2;1626:10;1597:113;;;-1:-1:-1;;1744:1:1;1726:16;;1719:27;1502:250::o;1757:271::-;1799:3;1837:5;1831:12;1864:6;1859:3;1852:19;1880:76;1949:6;1942:4;1937:3;1933:14;1926:4;1919:5;1915:16;1880:76;:::i;:::-;2010:2;1989:15;-1:-1:-1;;1985:29:1;1976:39;;;;2017:4;1972:50;;1757:271;-1:-1:-1;;1757:271:1:o;2033:220::-;2182:2;2171:9;2164:21;2145:4;2202:45;2243:2;2232:9;2228:18;2220:6;2202:45;:::i;2258:180::-;2317:6;2370:2;2358:9;2349:7;2345:23;2341:32;2338:52;;;2386:1;2383;2376:12;2338:52;-1:-1:-1;2409:23:1;;2258:180;-1:-1:-1;2258:180:1:o;2651:173::-;2719:20;;-1:-1:-1;;;;;2768:31:1;;2758:42;;2748:70;;2814:1;2811;2804:12;2748:70;2651:173;;;:::o;2829:254::-;2897:6;2905;2958:2;2946:9;2937:7;2933:23;2929:32;2926:52;;;2974:1;2971;2964:12;2926:52;2997:29;3016:9;2997:29;:::i;:::-;2987:39;3073:2;3058:18;;;;3045:32;;-1:-1:-1;;;2829:254:1:o;3270:127::-;3331:10;3326:3;3322:20;3319:1;3312:31;3362:4;3359:1;3352:15;3386:4;3383:1;3376:15;3402:275;3473:2;3467:9;3538:2;3519:13;;-1:-1:-1;;3515:27:1;3503:40;;-1:-1:-1;;;;;3558:34:1;;3594:22;;;3555:62;3552:88;;;3620:18;;:::i;:::-;3656:2;3649:22;3402:275;;-1:-1:-1;3402:275:1:o;3682:407::-;3747:5;-1:-1:-1;;;;;3773:6:1;3770:30;3767:56;;;3803:18;;:::i;:::-;3841:57;3886:2;3865:15;;-1:-1:-1;;3861:29:1;3892:4;3857:40;3841:57;:::i;:::-;3832:66;;3921:6;3914:5;3907:21;3961:3;3952:6;3947:3;3943:16;3940:25;3937:45;;;3978:1;3975;3968:12;3937:45;4027:6;4022:3;4015:4;4008:5;4004:16;3991:43;4081:1;4074:4;4065:6;4058:5;4054:18;4050:29;4043:40;3682:407;;;;;:::o;4094:222::-;4137:5;4190:3;4183:4;4175:6;4171:17;4167:27;4157:55;;4208:1;4205;4198:12;4157:55;4230:80;4306:3;4297:6;4284:20;4277:4;4269:6;4265:17;4230:80;:::i;4321:390::-;4399:6;4407;4460:2;4448:9;4439:7;4435:23;4431:32;4428:52;;;4476:1;4473;4466:12;4428:52;4512:9;4499:23;4489:33;;4573:2;4562:9;4558:18;4545:32;-1:-1:-1;;;;;4592:6:1;4589:30;4586:50;;;4632:1;4629;4622:12;4586:50;4655;4697:7;4688:6;4677:9;4673:22;4655:50;:::i;:::-;4645:60;;;4321:390;;;;;:::o;4716:328::-;4793:6;4801;4809;4862:2;4850:9;4841:7;4837:23;4833:32;4830:52;;;4878:1;4875;4868:12;4830:52;4901:29;4920:9;4901:29;:::i;:::-;4891:39;;4949:38;4983:2;4972:9;4968:18;4949:38;:::i;:::-;4939:48;;5034:2;5023:9;5019:18;5006:32;4996:42;;4716:328;;;;;:::o;5049:186::-;5108:6;5161:2;5149:9;5140:7;5136:23;5132:32;5129:52;;;5177:1;5174;5167:12;5129:52;5200:29;5219:9;5200:29;:::i;5240:347::-;5305:6;5313;5366:2;5354:9;5345:7;5341:23;5337:32;5334:52;;;5382:1;5379;5372:12;5334:52;5405:29;5424:9;5405:29;:::i;:::-;5395:39;;5484:2;5473:9;5469:18;5456:32;5531:5;5524:13;5517:21;5510:5;5507:32;5497:60;;5553:1;5550;5543:12;5497:60;5576:5;5566:15;;;5240:347;;;;;:::o;5592:439::-;5821:2;5810:9;5803:21;5784:4;5841:56;5893:2;5882:9;5878:18;5870:6;5841:56;:::i;:::-;5940:14;;5933:22;5928:2;5913:18;;5906:50;-1:-1:-1;;;;;;5992:32:1;;;;5987:2;5972:18;;;5965:60;5833:64;5592:439;-1:-1:-1;5592:439:1:o;6036:322::-;6105:6;6158:2;6146:9;6137:7;6133:23;6129:32;6126:52;;;6174:1;6171;6164:12;6126:52;6214:9;6201:23;-1:-1:-1;;;;;6239:6:1;6236:30;6233:50;;;6279:1;6276;6269:12;6233:50;6302;6344:7;6335:6;6324:9;6320:22;6302:50;:::i;6363:667::-;6458:6;6466;6474;6482;6535:3;6523:9;6514:7;6510:23;6506:33;6503:53;;;6552:1;6549;6542:12;6503:53;6575:29;6594:9;6575:29;:::i;:::-;6565:39;;6623:38;6657:2;6646:9;6642:18;6623:38;:::i;:::-;6613:48;;6708:2;6697:9;6693:18;6680:32;6670:42;;6763:2;6752:9;6748:18;6735:32;-1:-1:-1;;;;;6782:6:1;6779:30;6776:50;;;6822:1;6819;6812:12;6776:50;6845:22;;6898:4;6890:13;;6886:27;-1:-1:-1;6876:55:1;;6927:1;6924;6917:12;6876:55;6950:74;7016:7;7011:2;6998:16;6993:2;6989;6985:11;6950:74;:::i;:::-;6940:84;;;6363:667;;;;;;;:::o;7035:183::-;7095:4;-1:-1:-1;;;;;7120:6:1;7117:30;7114:56;;;7150:18;;:::i;:::-;-1:-1:-1;7195:1:1;7191:14;7207:4;7187:25;;7035:183::o;7223:891::-;7307:6;7338:2;7381;7369:9;7360:7;7356:23;7352:32;7349:52;;;7397:1;7394;7387:12;7349:52;7437:9;7424:23;-1:-1:-1;;;;;7462:6:1;7459:30;7456:50;;;7502:1;7499;7492:12;7456:50;7525:22;;7578:4;7570:13;;7566:27;-1:-1:-1;7556:55:1;;7607:1;7604;7597:12;7556:55;7643:2;7630:16;7666:60;7682:43;7722:2;7682:43;:::i;:::-;7666:60;:::i;:::-;7760:15;;;7842:1;7838:10;;;;7830:19;;7826:28;;;7791:12;;;;7866:19;;;7863:39;;;7898:1;7895;7888:12;7863:39;7922:11;;;;7942:142;7958:6;7953:3;7950:15;7942:142;;;8024:17;;8012:30;;7975:12;;;;8062;;;;7942:142;;;8103:5;7223:891;-1:-1:-1;;;;;;;7223:891:1:o;8341:260::-;8409:6;8417;8470:2;8458:9;8449:7;8445:23;8441:32;8438:52;;;8486:1;8483;8476:12;8438:52;8509:29;8528:9;8509:29;:::i;:::-;8499:39;;8557:38;8591:2;8580:9;8576:18;8557:38;:::i;:::-;8547:48;;8341:260;;;;;:::o;8606:127::-;8667:10;8662:3;8658:20;8655:1;8648:31;8698:4;8695:1;8688:15;8722:4;8719:1;8712:15;8738:127;8799:10;8794:3;8790:20;8787:1;8780:31;8830:4;8827:1;8820:15;8854:4;8851:1;8844:15;8870:135;8909:3;8930:17;;;8927:43;;8950:18;;:::i;:::-;-1:-1:-1;8997:1:1;8986:13;;8870:135::o;9010:380::-;9089:1;9085:12;;;;9132;;;9153:61;;9207:4;9199:6;9195:17;9185:27;;9153:61;9260:2;9252:6;9249:14;9229:18;9226:38;9223:161;;9306:10;9301:3;9297:20;9294:1;9287:31;9341:4;9338:1;9331:15;9369:4;9366:1;9359:15;9223:161;;9010:380;;;:::o;9395:332::-;9597:2;9579:21;;;9636:1;9616:18;;;9609:29;-1:-1:-1;;;9669:2:1;9654:18;;9647:39;9718:2;9703:18;;9395:332::o;9858:545::-;9960:2;9955:3;9952:11;9949:448;;;9996:1;10021:5;10017:2;10010:17;10066:4;10062:2;10052:19;10136:2;10124:10;10120:19;10117:1;10113:27;10107:4;10103:38;10172:4;10160:10;10157:20;10154:47;;;-1:-1:-1;10195:4:1;10154:47;10250:2;10245:3;10241:12;10238:1;10234:20;10228:4;10224:31;10214:41;;10305:82;10323:2;10316:5;10313:13;10305:82;;;10368:17;;;10349:1;10338:13;10305:82;;;10309:3;;;9858:545;;;:::o;10579:1352::-;10705:3;10699:10;-1:-1:-1;;;;;10724:6:1;10721:30;10718:56;;;10754:18;;:::i;:::-;10783:97;10873:6;10833:38;10865:4;10859:11;10833:38;:::i;:::-;10827:4;10783:97;:::i;:::-;10935:4;;10999:2;10988:14;;11016:1;11011:663;;;;11718:1;11735:6;11732:89;;;-1:-1:-1;11787:19:1;;;11781:26;11732:89;-1:-1:-1;;10536:1:1;10532:11;;;10528:24;10524:29;10514:40;10560:1;10556:11;;;10511:57;11834:81;;10981:944;;11011:663;9805:1;9798:14;;;9842:4;9829:18;;-1:-1:-1;;11047:20:1;;;11165:236;11179:7;11176:1;11173:14;11165:236;;;11268:19;;;11262:26;11247:42;;11360:27;;;;11328:1;11316:14;;;;11195:19;;11165:236;;;11169:3;11429:6;11420:7;11417:19;11414:201;;;11490:19;;;11484:26;-1:-1:-1;;11573:1:1;11569:14;;;11585:3;11565:24;11561:37;11557:42;11542:58;11527:74;;11414:201;-1:-1:-1;;;;;11661:1:1;11645:14;;;11641:22;11628:36;;-1:-1:-1;10579:1352:1:o;11936:128::-;12003:9;;;12024:11;;;12021:37;;;12038:18;;:::i;12069:659::-;12134:5;12187:3;12180:4;12172:6;12168:17;12164:27;12154:55;;12205:1;12202;12195:12;12154:55;12234:6;12228:13;12260:4;12284:60;12300:43;12340:2;12300:43;:::i;12284:60::-;12378:15;;;12464:1;12460:10;;;;12448:23;;12444:32;;;12409:12;;;;12488:15;;;12485:35;;;12516:1;12513;12506:12;12485:35;12552:2;12544:6;12540:15;12564:135;12580:6;12575:3;12572:15;12564:135;;;12646:10;;12634:23;;12677:12;;;;12597;;12564:135;;;-1:-1:-1;12717:5:1;12069:659;-1:-1:-1;;;;;;12069:659:1:o;12733:844::-;12896:6;12904;12912;12965:2;12953:9;12944:7;12940:23;12936:32;12933:52;;;12981:1;12978;12971:12;12933:52;13014:9;13008:16;-1:-1:-1;;;;;13084:2:1;13076:6;13073:14;13070:34;;;13100:1;13097;13090:12;13070:34;13123:72;13187:7;13178:6;13167:9;13163:22;13123:72;:::i;:::-;13113:82;;13241:2;13230:9;13226:18;13220:25;13204:41;;13270:2;13260:8;13257:16;13254:36;;;13286:1;13283;13276:12;13254:36;13309:74;13375:7;13364:8;13353:9;13349:24;13309:74;:::i;:::-;13299:84;;13429:2;13418:9;13414:18;13408:25;13392:41;;13458:2;13448:8;13445:16;13442:36;;;13474:1;13471;13464:12;13442:36;;13497:74;13563:7;13552:8;13541:9;13537:24;13497:74;:::i;:::-;13487:84;;;12733:844;;;;;:::o;13769:209::-;13801:1;13827;13817:132;;13871:10;13866:3;13862:20;13859:1;13852:31;13906:4;13903:1;13896:15;13934:4;13931:1;13924:15;13817:132;-1:-1:-1;13963:9:1;;13769:209::o;13983:125::-;14048:9;;;14069:10;;;14066:36;;;14082:18;;:::i;15916:1020::-;16092:3;16121:1;16154:6;16148:13;16184:36;16210:9;16184:36;:::i;:::-;16239:1;16256:18;;;16283:133;;;;16430:1;16425:356;;;;16249:532;;16283:133;-1:-1:-1;;16316:24:1;;16304:37;;16389:14;;16382:22;16370:35;;16361:45;;;-1:-1:-1;16283:133:1;;16425:356;16456:6;16453:1;16446:17;16486:4;16531:2;16528:1;16518:16;16556:1;16570:165;16584:6;16581:1;16578:13;16570:165;;;16662:14;;16649:11;;;16642:35;16705:16;;;;16599:10;;16570:165;;;16574:3;;;16764:6;16759:3;16755:16;16748:23;;16249:532;;;;;16812:6;16806:13;16828:68;16887:8;16882:3;16875:4;16867:6;16863:17;16828:68;:::i;:::-;16912:18;;15916:1020;-1:-1:-1;;;;15916:1020:1:o;16941:363::-;17036:6;17089:2;17077:9;17068:7;17064:23;17060:32;17057:52;;;17105:1;17102;17095:12;17057:52;17138:9;17132:16;-1:-1:-1;;;;;17163:6:1;17160:30;17157:50;;;17203:1;17200;17193:12;17157:50;17226:72;17290:7;17281:6;17270:9;17266:22;17226:72;:::i;17309:489::-;-1:-1:-1;;;;;17578:15:1;;;17560:34;;17630:15;;17625:2;17610:18;;17603:43;17677:2;17662:18;;17655:34;;;17725:3;17720:2;17705:18;;17698:31;;;17503:4;;17746:46;;17772:19;;17764:6;17746:46;:::i;:::-;17738:54;17309:489;-1:-1:-1;;;;;;17309:489:1:o;17803:249::-;17872:6;17925:2;17913:9;17904:7;17900:23;17896:32;17893:52;;;17941:1;17938;17931:12;17893:52;17973:9;17967:16;17992:30;18016:5;17992:30;:::i
Swarm Source
ipfs://a0fc48e08f15cbf0bbd38c0f01a0b815f049521a312409f80fb28185f95717d3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.