Overview
Max Total Supply
150,000 CS1
Holders
148,849
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CS1Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Cryptostamp
Compiler Version
v0.5.7+commit.6da8b019
Optimization Enabled:
Yes with 200 runs
Other Settings:
petersburg EvmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-05-16 */ /* * Crypto stamp * Digitalphysical collectible postage stamp * * Developed by capacity.at * for post.at */ // File: openzeppelin-solidity/contracts/introspection/IERC165.sol pragma solidity ^0.5.0; /** * @title IERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface IERC165 { /** * @notice Query if a contract implements an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol pragma solidity ^0.5.0; /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) public view returns (uint256 balance); function ownerOf(uint256 tokenId) public view returns (address owner); function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function transferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.5.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safeTransfer`. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/utils/Address.sol pragma solidity ^0.5.0; /** * Utility library of inline functions on addresses */ library Address { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: openzeppelin-solidity/contracts/introspection/ERC165.sol pragma solidity ^0.5.0; /** * @title ERC165 * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor () internal { _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev internal method for registering an interface */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff); _supportedInterfaces[interfaceId] = true; } } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol pragma solidity ^0.5.0; /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721 is ERC165, IERC721 { using SafeMath for uint256; using Address for address; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to number of owned token mapping (address => uint256) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; /* * 0x80ac58cd === * bytes4(keccak256('balanceOf(address)')) ^ * bytes4(keccak256('ownerOf(uint256)')) ^ * bytes4(keccak256('approve(address,uint256)')) ^ * bytes4(keccak256('getApproved(uint256)')) ^ * bytes4(keccak256('setApprovalForAll(address,bool)')) ^ * bytes4(keccak256('isApprovedForAll(address,address)')) ^ * bytes4(keccak256('transferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) */ constructor () public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @dev Gets the balance of the specified address * @param owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address owner) public view returns (uint256) { require(owner != address(0)); return _ownedTokensCount[owner]; } /** * @dev Gets the owner of the specified token ID * @param tokenId uint256 ID of the token to query the owner of * @return owner address currently marked as the owner of the given token ID */ function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner[tokenId]; require(owner != address(0)); return owner; } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * Can only be called by the token owner or an approved operator. * @param to address to be approved for the given token ID * @param tokenId uint256 ID of the token to be approved */ function approve(address to, uint256 tokenId) public { address owner = ownerOf(tokenId); require(to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId)); return _tokenApprovals[tokenId]; } /** * @dev Sets or unsets the approval of a given operator * An operator is allowed to transfer all tokens of the sender on their behalf * @param to operator address to set the approval * @param approved representing the status of the approval to be set */ function setApprovalForAll(address to, bool approved) public { require(to != msg.sender); _operatorApprovals[msg.sender][to] = approved; emit ApprovalForAll(msg.sender, to, approved); } /** * @dev Tells whether an operator is approved by a given owner * @param owner owner address which you want to query the approval of * @param operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address owner, address operator) public view returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Transfers the ownership of a given token ID to another address * Usage of this method is discouraged, use `safeTransferFrom` whenever possible * Requires the msg sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function transferFrom(address from, address to, uint256 tokenId) public { require(_isApprovedOrOwner(msg.sender, tokenId)); _transferFrom(from, to, tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * * Requires the msg sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public { transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data)); } /** * @dev Returns whether the specified token exists * @param tokenId uint256 ID of the token to query the existence of * @return whether the token exists */ function _exists(uint256 tokenId) internal view returns (bool) { address owner = _tokenOwner[tokenId]; return owner != address(0); } /** * @dev Returns whether the given spender can transfer a given token ID * @param spender address of the spender to query * @param tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { require(to != address(0)); require(!_exists(tokenId)); _tokenOwner[tokenId] = to; _ownedTokensCount[to] = _ownedTokensCount[to].add(1); emit Transfer(address(0), to, tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner); _clearApproval(tokenId); _ownedTokensCount[owner] = _ownedTokensCount[owner].sub(1); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { require(ownerOf(tokenId) == from); require(to != address(0)); _clearApproval(tokenId); _ownedTokensCount[from] = _ownedTokensCount[from].sub(1); _ownedTokensCount[to] = _ownedTokensCount[to].add(1); _tokenOwner[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Internal function to invoke `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 whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) internal returns (bool) { if (!to.isContract()) { return true; } bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data); return (retval == _ERC721_RECEIVED); } /** * @dev Private function to clear current approval of a given token ID * @param tokenId uint256 ID of the token to be transferred */ function _clearApproval(uint256 tokenId) private { if (_tokenApprovals[tokenId] != address(0)) { _tokenApprovals[tokenId] = address(0); } } } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol pragma solidity ^0.5.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract IERC721Enumerable is IERC721 { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId); function tokenByIndex(uint256 index) public view returns (uint256); } // File: contracts/ERC721EnumerableSimple.sol pragma solidity ^0.5.0; /* This is a simplified (and cheaper) version of OpenZeppelin's ERC721Enumerable. * ERC721Enumerable's allTokens array and allTokensIndex mapping are eliminated. * Side effects: _burn cannot be used any more with this, and creation needs to be * in ascending order, starting with 0, and have no holes in the sequence of IDs. */ /** * @title ERC-721 Non-Fungible Token with optional enumeration extension logic * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721EnumerableSimple is ERC165, ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => uint256[]) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; uint256 internal totalSupply_; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /** * 0x780e9d63 === * bytes4(keccak256('totalSupply()')) ^ * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^ * bytes4(keccak256('tokenByIndex(uint256)')) */ /** * @dev Constructor function */ constructor () public { // register the supported interface to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner * @param owner address owning the tokens list to be accessed * @param index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { require(index < balanceOf(owner), "Index is higher than number of tokens owned."); return _ownedTokens[owner][index]; } /** * @dev Gets the total amount of tokens stored by the contract * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * Reverts if the index is greater or equal to the total number of tokens * @param index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 index) public view returns (uint256) { require(index < totalSupply(), "Index is out of bounds."); return index; } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { super._transferFrom(from, to, tokenId); _removeTokenFromOwnerEnumeration(from, tokenId); _addTokenToOwnerEnumeration(to, tokenId); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param to address the beneficiary that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { super._mint(to, tokenId); _addTokenToOwnerEnumeration(to, tokenId); totalSupply_ = totalSupply_.add(1); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead * param owner owner of the token to burn * param tokenId uint256 ID of the token being burned */ function _burn(address /*owner*/, uint256 /*tokenId*/) internal { revert("This token cannot be burned."); } /** * @dev Gets the list of token IDs of the requested owner * @param owner address owning the tokens * @return uint256[] List of token IDs owned by the requested address */ function _tokensOfOwner(address owner) internal view returns (uint256[] storage) { return _ownedTokens[owner]; } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { _ownedTokensIndex[tokenId] = _ownedTokens[to].length; _ownedTokens[to].push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _ownedTokens[from].length.sub(1); uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array _ownedTokens[from].length--; // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occcupied by // lasTokenId, or just over the end of the array if the token was the last one). } } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol pragma solidity ^0.5.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol pragma solidity ^0.5.0; contract ERC721Metadata is ERC165, ERC721, IERC721Metadata { // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /** * 0x5b5e139f === * bytes4(keccak256('name()')) ^ * bytes4(keccak256('symbol()')) ^ * bytes4(keccak256('tokenURI(uint256)')) */ /** * @dev Constructor function */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_METADATA); } /** * @dev Gets the token name * @return string representing the token name */ function name() external view returns (string memory) { return _name; } /** * @dev Gets the token symbol * @return string representing the token symbol */ function symbol() external view returns (string memory) { return _symbol; } /** * @dev Returns an URI for a given token ID * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function tokenURI(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId)); return _tokenURIs[tokenId]; } /** * @dev Internal function to set the token URI for a given token * Reverts if the token ID does not exist * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal { require(_exists(tokenId)); _tokenURIs[tokenId] = uri; } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ interface IERC20 { function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/Cryptostamp.sol /* Implements ERC 721 Token standard: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ pragma solidity ^0.5.0; /* The inheritance is very much the same as OpenZeppelin's ERC721Full, * but using a simplified (and cheaper) version of ERC721Enumerable */ contract Cryptostamp is ERC721, ERC721EnumerableSimple, ERC721Metadata("Crypto stamp Edition 1", "CS1") { string public uribase; address public createControl; address public tokenAssignmentControl; bool public mintingFinished = false; constructor(address _createControl, address _tokenAssignmentControl) public { createControl = _createControl; tokenAssignmentControl = _tokenAssignmentControl; uribase = "https://test.crypto.post.at/CS1/meta/"; } modifier onlyCreateControl() { require(msg.sender == createControl, "createControl key required for this function."); _; } modifier onlyTokenAssignmentControl() { require(msg.sender == tokenAssignmentControl, "tokenAssignmentControl key required for this function."); _; } modifier requireMinting() { require(mintingFinished == false, "This call only works when minting is not finished."); _; } // Issue a new crypto stamp asset, giving it to a specific owner address. // As appending the ID into a URI in Solidity is complicated, generate both // externally and hand them over to the asset here. function create(uint256 _tokenId, address _owner) public onlyCreateControl requireMinting { // Make sure we do not get any holes in Ids so we can do more optimizations. require(_tokenId == 0 || _exists(_tokenId.sub(1)), "Previous token ID has to exist."); // _mint already ends up checking if owner != 0 and that tokenId doesn't exist yet. _mint(_owner, _tokenId); } // Batch-issue multiple crypto stamp with adjacent IDs. function createMulti(uint256 _tokenIdStart, address[] memory _owners) public onlyCreateControl requireMinting { // Make sure we do not get any holes in Ids so we can do more optimizations. require(_tokenIdStart == 0 || _exists(_tokenIdStart.sub(1)), "Previous token ID has to exist."); uint256 addrcount = _owners.length; for (uint256 i = 0; i < addrcount; i++) { // Make sure this is in sync with what create() does. _mint(_owners[i], _tokenIdStart + i); } } // Finish the creation/minting process. function finishMinting() public onlyCreateControl { mintingFinished = true; } // Set new base for the token URI. function newUriBase(string memory _newUriBase) public onlyCreateControl { uribase = _newUriBase; } // Override ERC721Metadata to create the URI from the base and ID. function tokenURI(uint256 _tokenId) external view returns (string memory) { require(_exists(_tokenId), "Token ID does not exist."); return string(abi.encodePacked(uribase, uint2str(_tokenId))); } // Returns whether the specified token exists function exists(uint256 tokenId) public view returns (bool) { return _exists(tokenId); } // Helper function from Oraclize // https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol function uint2str(uint256 inp) internal pure returns (string memory) { if (inp == 0) return "0"; uint i = inp; uint j = i; uint length; while (j != 0){ length++; j /= 10; } bytes memory bstr = new bytes(length); uint k = length - 1; while (i != 0){ bstr[k--] = byte(uint8(48 + i % 10)); i /= 10; } return string(bstr); } /*** Make sure currency doesn't get stranded in this contract ***/ // If this contract gets a balance in some ERC20 contract after it's finished, then we can rescue it. function rescueToken(IERC20 _foreignToken, address _to) external onlyTokenAssignmentControl { _foreignToken.transfer(_to, _foreignToken.balanceOf(address(this))); } // Make sure this contract cannot receive ETH. function() external payable { revert("The contract cannot receive ETH payments."); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_foreignToken","type":"address"},{"name":"_to","type":"address"}],"name":"rescueToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenIdStart","type":"uint256"},{"name":"_owners","type":"address[]"}],"name":"createMulti","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newUriBase","type":"string"}],"name":"newUriBase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uribase","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenAssignmentControl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"createControl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_owner","type":"address"}],"name":"create","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_createControl","type":"address"},{"name":"_tokenAssignmentControl","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]
Contract Creation Code
6080604052600d8054600160a01b60ff02191690553480156200002157600080fd5b5060405160408062001e26833981018060405260408110156200004357600080fd5b508051602091820151604080518082018252601681527f43727970746f207374616d702045646974696f6e203100000000000000000000818601528151808301909252600382527f4353310000000000000000000000000000000000000000000000000000000000828601529293919291620000e5907f01ffc9a70000000000000000000000000000000000000000000000000000000090620001c3811b901c565b620000fd6380ac58cd60e01b620001c360201b60201c565b6200011563780e9d6360e01b620001c360201b60201c565b81516200012a90600890602085019062000230565b5080516200014090600990602084019062000230565b5062000159635b5e139f60e01b620001c360201b60201c565b5050600c80546001600160a01b038085166001600160a01b031992831617909255600d8054928416929091169190911790556040805160608101909152602580825262001e0160208301398051620001ba91600b9160209091019062000230565b505050620002d5565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620001f357600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027357805160ff1916838001178555620002a3565b82800160010185558215620002a3579182015b82811115620002a357825182559160200191906001019062000286565b50620002b1929150620002b5565b5090565b620002d291905b80821115620002b15760008155600101620002bc565b90565b611b1c80620002e56000396000f3fe6080604052600436106101815760003560e01c80636352211e116100d1578063a22cb4651161008a578063c8c2ed5411610064578063c8c2ed54146107d6578063e66075c2146107eb578063e985e9c514610800578063f01fe6921461083b57610181565b8063a22cb4651461069e578063b88d4fde146106d9578063c87b56dd146107ac57610181565b80636352211e1461054f57806370a08231146105795780637d64bcb4146105ac578063879499f4146105c157806395d89b4114610674578063964585df1461068957610181565b806323b872dd1161013e5780634707d000116101185780634707d000146104095780634f558e79146104445780634f6ccce71461046e5780635ba13abf1461049857610181565b806323b872dd1461034a5780632f745c591461038d57806342842e0e146103c657610181565b806301ffc9a7146101bb57806305d2035b1461020357806306fdde0314610218578063081812fc146102a2578063095ea7b3146102e857806318160ddd14610323575b604051600160e51b62461bcd028152600401808060200182810382526029815260200180611a076029913960400191505060405180910390fd5b3480156101c757600080fd5b506101ef600480360360208110156101de57600080fd5b50356001600160e01b031916610874565b604080519115158252519081900360200190f35b34801561020f57600080fd5b506101ef610897565b34801561022457600080fd5b5061022d6108a7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ae57600080fd5b506102cc600480360360208110156102c557600080fd5b503561093e565b604080516001600160a01b039092168252519081900360200190f35b3480156102f457600080fd5b506103216004803603604081101561030b57600080fd5b506001600160a01b03813516906020013561096e565b005b34801561032f57600080fd5b50610338610a1b565b60408051918252519081900360200190f35b34801561035657600080fd5b506103216004803603606081101561036d57600080fd5b506001600160a01b03813581169160208101359091169060400135610a21565b34801561039957600080fd5b50610338600480360360408110156103b057600080fd5b506001600160a01b038135169060200135610a44565b3480156103d257600080fd5b50610321600480360360608110156103e957600080fd5b506001600160a01b03813581169160208101359091169060400135610ac6565b34801561041557600080fd5b506103216004803603604081101561042c57600080fd5b506001600160a01b0381358116916020013516610ae1565b34801561045057600080fd5b506101ef6004803603602081101561046757600080fd5b5035610c27565b34801561047a57600080fd5b506103386004803603602081101561049157600080fd5b5035610c38565b3480156104a457600080fd5b50610321600480360360408110156104bb57600080fd5b813591908101906040810160208201356401000000008111156104dd57600080fd5b8201836020820111156104ef57600080fd5b8035906020019184602083028401116401000000008311171561051157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c9c945050505050565b34801561055b57600080fd5b506102cc6004803603602081101561057257600080fd5b5035610ddd565b34801561058557600080fd5b506103386004803603602081101561059c57600080fd5b50356001600160a01b0316610dff565b3480156105b857600080fd5b50610321610e30565b3480156105cd57600080fd5b50610321600480360360208110156105e457600080fd5b8101906020810181356401000000008111156105ff57600080fd5b82018360208201111561061157600080fd5b8035906020019184600183028401116401000000008311171561063357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ea2945050505050565b34801561068057600080fd5b5061022d610f05565b34801561069557600080fd5b5061022d610f66565b3480156106aa57600080fd5b50610321600480360360408110156106c157600080fd5b506001600160a01b0381351690602001351515610ff4565b3480156106e557600080fd5b50610321600480360360808110156106fc57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561073757600080fd5b82018360208201111561074957600080fd5b8035906020019184600183028401116401000000008311171561076b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611078945050505050565b3480156107b857600080fd5b5061022d600480360360208110156107cf57600080fd5b5035611098565b3480156107e257600080fd5b506102cc6111c8565b3480156107f757600080fd5b506102cc6111d7565b34801561080c57600080fd5b506101ef6004803603604081101561082357600080fd5b506001600160a01b03813581169160200135166111e6565b34801561084757600080fd5b506103216004803603604081101561085e57600080fd5b50803590602001356001600160a01b0316611214565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b600d54600160a01b900460ff1681565b60088054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109335780601f1061090857610100808354040283529160200191610933565b820191906000526020600020905b81548152906001019060200180831161091657829003601f168201915b505050505090505b90565b600061094982611326565b61095257600080fd5b506000908152600260205260409020546001600160a01b031690565b600061097982610ddd565b9050806001600160a01b0316836001600160a01b0316141561099a57600080fd5b336001600160a01b03821614806109b657506109b681336111e6565b6109bf57600080fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60075490565b610a2b3382611343565b610a3457600080fd5b610a3f8383836113a2565b505050565b6000610a4f83610dff565b8210610a8f57604051600160e51b62461bcd02815260040180806020018281038252602c815260200180611a93602c913960400191505060405180910390fd5b6001600160a01b0383166000908152600560205260409020805483908110610ab357fe5b9060005260206000200154905092915050565b610a3f83838360405180602001604052806000815250611078565b600d546001600160a01b03163314610b2d57604051600160e51b62461bcd028152600401808060200182810382526036815260200180611a5d6036913960400191505060405180910390fd5b60408051600160e01b6370a0823102815230600482015290516001600160a01b0384169163a9059cbb91849184916370a0823191602480820192602092909190829003018186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d6020811015610bab57600080fd5b50516040805163ffffffff851660e01b81526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610bf757600080fd5b505af1158015610c0b573d6000803e3d6000fd5b505050506040513d6020811015610c2157600080fd5b50505050565b6000610c3282611326565b92915050565b6000610c42610a1b565b8210610c985760408051600160e51b62461bcd02815260206004820152601760248201527f496e646578206973206f7574206f6620626f756e64732e000000000000000000604482015290519081900360640190fd5b5090565b600c546001600160a01b03163314610ce857604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d54600160a01b900460ff1615610d3457604051600160e51b62461bcd028152600401808060200182810382526032815260200180611abf6032913960400191505060405180910390fd5b811580610d555750610d55610d5083600163ffffffff6113c116565b611326565b610da95760408051600160e51b62461bcd02815260206004820152601f60248201527f50726576696f757320746f6b656e2049442068617320746f2065786973742e00604482015290519081900360640190fd5b805160005b81811015610c2157610dd5838281518110610dc557fe5b60200260200101518286016113d6565b600101610dae565b6000818152600160205260408120546001600160a01b031680610c3257600080fd5b60006001600160a01b038216610e1457600080fd5b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b03163314610e7c57604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d805474ff00000000000000000000000000000000000000001916600160a01b179055565b600c546001600160a01b03163314610eee57604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b8051610f0190600b906020840190611952565b5050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109335780601f1061090857610100808354040283529160200191610933565b600b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610fec5780601f10610fc157610100808354040283529160200191610fec565b820191906000526020600020905b815481529060010190602001808311610fcf57829003601f168201915b505050505081565b6001600160a01b03821633141561100a57600080fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b611083848484610a21565b61108f84848484611405565b610c2157600080fd5b60606110a382611326565b6110f75760408051600160e51b62461bcd02815260206004820152601860248201527f546f6b656e20494420646f6573206e6f742065786973742e0000000000000000604482015290519081900360640190fd5b600b6111028361153e565b60405160200180838054600181600116156101000203166002900480156111605780601f1061113e576101008083540402835291820191611160565b820191906000526020600020905b81548152906001019060200180831161114c575b5050825160208401908083835b6020831061118c5780518252601f19909201916020918201910161116d565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050919050565b600d546001600160a01b031681565b600c546001600160a01b031681565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600c546001600160a01b0316331461126057604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d54600160a01b900460ff16156112ac57604051600160e51b62461bcd028152600401808060200182810382526032815260200180611abf6032913960400191505060405180910390fd5b8115806112c857506112c8610d5083600163ffffffff6113c116565b61131c5760408051600160e51b62461bcd02815260206004820152601f60248201527f50726576696f757320746f6b656e2049442068617320746f2065786973742e00604482015290519081900360640190fd5b610f0181836113d6565b6000908152600160205260409020546001600160a01b0316151590565b60008061134f83610ddd565b9050806001600160a01b0316846001600160a01b0316148061138a5750836001600160a01b031661137f8461093e565b6001600160a01b0316145b8061139a575061139a81856111e6565b949350505050565b6113ad838383611604565b6113b78382611711565b610a3f8282611806565b6000828211156113d057600080fd5b50900390565b6113e08282611844565b6113ea8282611806565b6007546113fe90600163ffffffff6118f616565b6007555050565b6000611419846001600160a01b031661190f565b6114255750600161139a565b604051600160e11b630a85bd0102815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b838110156114a257818101518382015260200161148a565b50505050905090810190601f1680156114cf5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156114f157600080fd5b505af1158015611505573d6000803e3d6000fd5b505050506040513d602081101561151b57600080fd5b50516001600160e01b031916600160e11b630a85bd010214915050949350505050565b60608161156657506040805180820190915260018152600160fc1b6003026020820152610892565b818060005b811561157f57600101600a8204915061156b565b6060816040519080825280601f01601f1916602001820160405280156115ac576020820181803883390190505b50905060001982015b84156115fa57600a850660300160f81b828280600190039350815181106115d857fe5b60200101906001600160f81b031916908160001a905350600a850494506115b5565b5095945050505050565b826001600160a01b031661161782610ddd565b6001600160a01b03161461162a57600080fd5b6001600160a01b03821661163d57600080fd5b61164681611915565b6001600160a01b03831660009081526003602052604090205461167090600163ffffffff6113c116565b6001600160a01b0380851660009081526003602052604080822093909355908416815220546116a690600163ffffffff6118f616565b6001600160a01b038084166000818152600360209081526040808320959095558582526001905283812080546001600160a01b031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b03821660009081526005602052604081205461173b90600163ffffffff6113c116565b6000838152600660205260409020549091508082146117d6576001600160a01b038416600090815260056020526040812080548490811061177857fe5b906000526020600020015490508060056000876001600160a01b03166001600160a01b0316815260200190815260200160002083815481106117b657fe5b600091825260208083209091019290925591825260069052604090208190555b6001600160a01b03841660009081526005602052604090208054906117ff9060001983016119cc565b5050505050565b6001600160a01b0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b6001600160a01b03821661185757600080fd5b61186081611326565b1561186a57600080fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b03881690811790915584526003909152909120546118ab916118f6565b6001600160a01b0383166000818152600360205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008282018381101561190857600080fd5b9392505050565b3b151590565b6000818152600260205260409020546001600160a01b03161561194f57600081815260026020526040902080546001600160a01b03191690555b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061199357805160ff19168380011785556119c0565b828001600101855582156119c0579182015b828111156119c05782518255916020019190600101906119a5565b50610c989291506119ec565b815481835581811115610a3f57600083815260209020610a3f9181019083015b61093b91905b80821115610c9857600081556001016119f256fe54686520636f6e74726163742063616e6e6f74207265636569766520455448207061796d656e74732e637265617465436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2e746f6b656e41737369676e6d656e74436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2e496e64657820697320686967686572207468616e206e756d626572206f6620746f6b656e73206f776e65642e546869732063616c6c206f6e6c7920776f726b73207768656e206d696e74696e67206973206e6f742066696e69736865642ea165627a7a72305820881eff59ea96168a047f88d1a174a3522c0147cee065cf96dce362140363964f002968747470733a2f2f746573742e63727970746f2e706f73742e61742f4353312f6d6574612f000000000000000000000000d39a7ad8ebe8c57aab85f868fe0d454e1aa5349e000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
Deployed Bytecode
0x6080604052600436106101815760003560e01c80636352211e116100d1578063a22cb4651161008a578063c8c2ed5411610064578063c8c2ed54146107d6578063e66075c2146107eb578063e985e9c514610800578063f01fe6921461083b57610181565b8063a22cb4651461069e578063b88d4fde146106d9578063c87b56dd146107ac57610181565b80636352211e1461054f57806370a08231146105795780637d64bcb4146105ac578063879499f4146105c157806395d89b4114610674578063964585df1461068957610181565b806323b872dd1161013e5780634707d000116101185780634707d000146104095780634f558e79146104445780634f6ccce71461046e5780635ba13abf1461049857610181565b806323b872dd1461034a5780632f745c591461038d57806342842e0e146103c657610181565b806301ffc9a7146101bb57806305d2035b1461020357806306fdde0314610218578063081812fc146102a2578063095ea7b3146102e857806318160ddd14610323575b604051600160e51b62461bcd028152600401808060200182810382526029815260200180611a076029913960400191505060405180910390fd5b3480156101c757600080fd5b506101ef600480360360208110156101de57600080fd5b50356001600160e01b031916610874565b604080519115158252519081900360200190f35b34801561020f57600080fd5b506101ef610897565b34801561022457600080fd5b5061022d6108a7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ae57600080fd5b506102cc600480360360208110156102c557600080fd5b503561093e565b604080516001600160a01b039092168252519081900360200190f35b3480156102f457600080fd5b506103216004803603604081101561030b57600080fd5b506001600160a01b03813516906020013561096e565b005b34801561032f57600080fd5b50610338610a1b565b60408051918252519081900360200190f35b34801561035657600080fd5b506103216004803603606081101561036d57600080fd5b506001600160a01b03813581169160208101359091169060400135610a21565b34801561039957600080fd5b50610338600480360360408110156103b057600080fd5b506001600160a01b038135169060200135610a44565b3480156103d257600080fd5b50610321600480360360608110156103e957600080fd5b506001600160a01b03813581169160208101359091169060400135610ac6565b34801561041557600080fd5b506103216004803603604081101561042c57600080fd5b506001600160a01b0381358116916020013516610ae1565b34801561045057600080fd5b506101ef6004803603602081101561046757600080fd5b5035610c27565b34801561047a57600080fd5b506103386004803603602081101561049157600080fd5b5035610c38565b3480156104a457600080fd5b50610321600480360360408110156104bb57600080fd5b813591908101906040810160208201356401000000008111156104dd57600080fd5b8201836020820111156104ef57600080fd5b8035906020019184602083028401116401000000008311171561051157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c9c945050505050565b34801561055b57600080fd5b506102cc6004803603602081101561057257600080fd5b5035610ddd565b34801561058557600080fd5b506103386004803603602081101561059c57600080fd5b50356001600160a01b0316610dff565b3480156105b857600080fd5b50610321610e30565b3480156105cd57600080fd5b50610321600480360360208110156105e457600080fd5b8101906020810181356401000000008111156105ff57600080fd5b82018360208201111561061157600080fd5b8035906020019184600183028401116401000000008311171561063357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ea2945050505050565b34801561068057600080fd5b5061022d610f05565b34801561069557600080fd5b5061022d610f66565b3480156106aa57600080fd5b50610321600480360360408110156106c157600080fd5b506001600160a01b0381351690602001351515610ff4565b3480156106e557600080fd5b50610321600480360360808110156106fc57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561073757600080fd5b82018360208201111561074957600080fd5b8035906020019184600183028401116401000000008311171561076b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611078945050505050565b3480156107b857600080fd5b5061022d600480360360208110156107cf57600080fd5b5035611098565b3480156107e257600080fd5b506102cc6111c8565b3480156107f757600080fd5b506102cc6111d7565b34801561080c57600080fd5b506101ef6004803603604081101561082357600080fd5b506001600160a01b03813581169160200135166111e6565b34801561084757600080fd5b506103216004803603604081101561085e57600080fd5b50803590602001356001600160a01b0316611214565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b600d54600160a01b900460ff1681565b60088054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109335780601f1061090857610100808354040283529160200191610933565b820191906000526020600020905b81548152906001019060200180831161091657829003601f168201915b505050505090505b90565b600061094982611326565b61095257600080fd5b506000908152600260205260409020546001600160a01b031690565b600061097982610ddd565b9050806001600160a01b0316836001600160a01b0316141561099a57600080fd5b336001600160a01b03821614806109b657506109b681336111e6565b6109bf57600080fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60075490565b610a2b3382611343565b610a3457600080fd5b610a3f8383836113a2565b505050565b6000610a4f83610dff565b8210610a8f57604051600160e51b62461bcd02815260040180806020018281038252602c815260200180611a93602c913960400191505060405180910390fd5b6001600160a01b0383166000908152600560205260409020805483908110610ab357fe5b9060005260206000200154905092915050565b610a3f83838360405180602001604052806000815250611078565b600d546001600160a01b03163314610b2d57604051600160e51b62461bcd028152600401808060200182810382526036815260200180611a5d6036913960400191505060405180910390fd5b60408051600160e01b6370a0823102815230600482015290516001600160a01b0384169163a9059cbb91849184916370a0823191602480820192602092909190829003018186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d6020811015610bab57600080fd5b50516040805163ffffffff851660e01b81526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610bf757600080fd5b505af1158015610c0b573d6000803e3d6000fd5b505050506040513d6020811015610c2157600080fd5b50505050565b6000610c3282611326565b92915050565b6000610c42610a1b565b8210610c985760408051600160e51b62461bcd02815260206004820152601760248201527f496e646578206973206f7574206f6620626f756e64732e000000000000000000604482015290519081900360640190fd5b5090565b600c546001600160a01b03163314610ce857604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d54600160a01b900460ff1615610d3457604051600160e51b62461bcd028152600401808060200182810382526032815260200180611abf6032913960400191505060405180910390fd5b811580610d555750610d55610d5083600163ffffffff6113c116565b611326565b610da95760408051600160e51b62461bcd02815260206004820152601f60248201527f50726576696f757320746f6b656e2049442068617320746f2065786973742e00604482015290519081900360640190fd5b805160005b81811015610c2157610dd5838281518110610dc557fe5b60200260200101518286016113d6565b600101610dae565b6000818152600160205260408120546001600160a01b031680610c3257600080fd5b60006001600160a01b038216610e1457600080fd5b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b03163314610e7c57604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d805474ff00000000000000000000000000000000000000001916600160a01b179055565b600c546001600160a01b03163314610eee57604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b8051610f0190600b906020840190611952565b5050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109335780601f1061090857610100808354040283529160200191610933565b600b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610fec5780601f10610fc157610100808354040283529160200191610fec565b820191906000526020600020905b815481529060010190602001808311610fcf57829003601f168201915b505050505081565b6001600160a01b03821633141561100a57600080fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b611083848484610a21565b61108f84848484611405565b610c2157600080fd5b60606110a382611326565b6110f75760408051600160e51b62461bcd02815260206004820152601860248201527f546f6b656e20494420646f6573206e6f742065786973742e0000000000000000604482015290519081900360640190fd5b600b6111028361153e565b60405160200180838054600181600116156101000203166002900480156111605780601f1061113e576101008083540402835291820191611160565b820191906000526020600020905b81548152906001019060200180831161114c575b5050825160208401908083835b6020831061118c5780518252601f19909201916020918201910161116d565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050919050565b600d546001600160a01b031681565b600c546001600160a01b031681565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600c546001600160a01b0316331461126057604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d54600160a01b900460ff16156112ac57604051600160e51b62461bcd028152600401808060200182810382526032815260200180611abf6032913960400191505060405180910390fd5b8115806112c857506112c8610d5083600163ffffffff6113c116565b61131c5760408051600160e51b62461bcd02815260206004820152601f60248201527f50726576696f757320746f6b656e2049442068617320746f2065786973742e00604482015290519081900360640190fd5b610f0181836113d6565b6000908152600160205260409020546001600160a01b0316151590565b60008061134f83610ddd565b9050806001600160a01b0316846001600160a01b0316148061138a5750836001600160a01b031661137f8461093e565b6001600160a01b0316145b8061139a575061139a81856111e6565b949350505050565b6113ad838383611604565b6113b78382611711565b610a3f8282611806565b6000828211156113d057600080fd5b50900390565b6113e08282611844565b6113ea8282611806565b6007546113fe90600163ffffffff6118f616565b6007555050565b6000611419846001600160a01b031661190f565b6114255750600161139a565b604051600160e11b630a85bd0102815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b838110156114a257818101518382015260200161148a565b50505050905090810190601f1680156114cf5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156114f157600080fd5b505af1158015611505573d6000803e3d6000fd5b505050506040513d602081101561151b57600080fd5b50516001600160e01b031916600160e11b630a85bd010214915050949350505050565b60608161156657506040805180820190915260018152600160fc1b6003026020820152610892565b818060005b811561157f57600101600a8204915061156b565b6060816040519080825280601f01601f1916602001820160405280156115ac576020820181803883390190505b50905060001982015b84156115fa57600a850660300160f81b828280600190039350815181106115d857fe5b60200101906001600160f81b031916908160001a905350600a850494506115b5565b5095945050505050565b826001600160a01b031661161782610ddd565b6001600160a01b03161461162a57600080fd5b6001600160a01b03821661163d57600080fd5b61164681611915565b6001600160a01b03831660009081526003602052604090205461167090600163ffffffff6113c116565b6001600160a01b0380851660009081526003602052604080822093909355908416815220546116a690600163ffffffff6118f616565b6001600160a01b038084166000818152600360209081526040808320959095558582526001905283812080546001600160a01b031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b03821660009081526005602052604081205461173b90600163ffffffff6113c116565b6000838152600660205260409020549091508082146117d6576001600160a01b038416600090815260056020526040812080548490811061177857fe5b906000526020600020015490508060056000876001600160a01b03166001600160a01b0316815260200190815260200160002083815481106117b657fe5b600091825260208083209091019290925591825260069052604090208190555b6001600160a01b03841660009081526005602052604090208054906117ff9060001983016119cc565b5050505050565b6001600160a01b0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b6001600160a01b03821661185757600080fd5b61186081611326565b1561186a57600080fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b03881690811790915584526003909152909120546118ab916118f6565b6001600160a01b0383166000818152600360205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008282018381101561190857600080fd5b9392505050565b3b151590565b6000818152600260205260409020546001600160a01b03161561194f57600081815260026020526040902080546001600160a01b03191690555b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061199357805160ff19168380011785556119c0565b828001600101855582156119c0579182015b828111156119c05782518255916020019190600101906119a5565b50610c989291506119ec565b815481835581811115610a3f57600083815260209020610a3f9181019083015b61093b91905b80821115610c9857600081556001016119f256fe54686520636f6e74726163742063616e6e6f74207265636569766520455448207061796d656e74732e637265617465436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2e746f6b656e41737369676e6d656e74436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2e496e64657820697320686967686572207468616e206e756d626572206f6620746f6b656e73206f776e65642e546869732063616c6c206f6e6c7920776f726b73207768656e206d696e74696e67206973206e6f742066696e69736865642ea165627a7a72305820881eff59ea96168a047f88d1a174a3522c0147cee065cf96dce362140363964f0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d39a7ad8ebe8c57aab85f868fe0d454e1aa5349e000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
-----Decoded View---------------
Arg [0] : _createControl (address): 0xd39a7ad8ebE8C57aaB85f868fE0d454e1Aa5349E
Arg [1] : _tokenAssignmentControl (address): 0x596E620E175C2C37A5f35A41d9F2305A991fFc89
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d39a7ad8ebe8c57aab85f868fe0d454e1aa5349e
Arg [1] : 000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
Deployed Bytecode Sourcemap
31084:4269:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35291:51;;-1:-1:-1;;;;;35291:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7277:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7277:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7277:135:0;-1:-1:-1;;;;;;7277:135:0;;:::i;:::-;;;;;;;;;;;;;;;;;;31310:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31310:35:0;;;:::i;28314:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28314:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28314:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11370:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11370:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11370:154:0;;:::i;:::-;;;;-1:-1:-1;;;;;11370:154:0;;;;;;;;;;;;;;10778:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10778:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10778:299:0;;;;;;;;:::i;:::-;;22062:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22062:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;12960:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12960:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12960:184:0;;;;;;;;;;;;;;;;;:::i;21671:233::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21671:233:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21671:233:0;;;;;;;;:::i;13797:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13797:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13797:134:0;;;;;;;;;;;;;;;;;:::i;34989:193::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34989:193:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34989:193:0;;;;;;;;;;:::i;34080:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34080:102:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34080:102:0;;:::i;22500:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22500:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22500:166:0;;:::i;32819:555::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32819:555:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32819:555:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;32819:555:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32819:555:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32819:555:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;32819:555:0;;-1:-1:-1;32819:555:0;;-1:-1:-1;;;;;32819:555:0:i;10166:181::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10166:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10166:181:0;;:::i;9782:153::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9782:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9782:153:0;-1:-1:-1;;;;;9782:153:0;;:::i;33427:106::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33427:106:0;;;:::i;33581:127::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33581:127:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33581:127:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;33581:127:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33581:127:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33581:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33581:127:0;;-1:-1:-1;33581:127:0;;-1:-1:-1;;;;;33581:127:0:i;28513:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28513:89:0;;;:::i;31197:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31197:21:0;;;:::i;11824:217::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11824:217:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11824:217:0;;;;;;;;;;:::i;14650:214::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14650:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;14650:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;14650:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14650:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14650:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14650:214:0;;-1:-1:-1;14650:214:0;;-1:-1:-1;;;;;14650:214:0:i;33788:233::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33788:233:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33788:233:0;;:::i;31264:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31264:37:0;;;:::i;31227:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31227:28:0;;;:::i;12370:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12370:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12370:147:0;;;;;;;;;;:::i;32323:427::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32323:427:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32323:427:0;;;;;;-1:-1:-1;;;;;32323:427:0;;:::i;7277:135::-;-1:-1:-1;;;;;;7371:33:0;;7347:4;7371:33;;;;;;;;;;;;;7277:135;;;;:::o;31310:35::-;;;-1:-1:-1;;;31310:35:0;;;;;:::o;28314:85::-;28386:5;28379:12;;;;;;;;-1:-1:-1;;28379:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28353:13;;28379:12;;28386:5;;28379:12;;28386:5;28379:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28314:85;;:::o;11370:154::-;11429:7;11457:16;11465:7;11457;:16::i;:::-;11449:25;;;;;;-1:-1:-1;11492:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11492:24:0;;11370:154::o;10778:299::-;10842:13;10858:16;10866:7;10858;:16::i;:::-;10842:32;;10899:5;-1:-1:-1;;;;;10893:11:0;:2;-1:-1:-1;;;;;10893:11:0;;;10885:20;;;;;;10924:10;-1:-1:-1;;;;;10924:19:0;;;;:58;;;10947:35;10964:5;10971:10;10947:16;:35::i;:::-;10916:67;;;;;;10996:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;10996:29:0;-1:-1:-1;;;;;10996:29:0;;;;;;;;;11041:28;;10996:24;;11041:28;;;;;;;10778:299;;;:::o;22062:91::-;22133:12;;22062:91;:::o;12960:184::-;13051:39;13070:10;13082:7;13051:18;:39::i;:::-;13043:48;;;;;;13104:32;13118:4;13124:2;13128:7;13104:13;:32::i;:::-;12960:184;;;:::o;21671:233::-;21751:7;21787:16;21797:5;21787:9;:16::i;:::-;21779:5;:24;21771:81;;;;-1:-1:-1;;;;;21771:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21870:19:0;;;;;;:12;:19;;;;;:26;;21890:5;;21870:26;;;;;;;;;;;;;;21863:33;;21671:233;;;;:::o;13797:134::-;13884:39;13901:4;13907:2;13911:7;13884:39;;;;;;;;;;;;:16;:39::i;34989:193::-;31845:22;;-1:-1:-1;;;;;31845:22:0;31831:10;:36;31823:103;;;;-1:-1:-1;;;;;31823:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35135:38;;;-1:-1:-1;;;;;35135:38:0;;35167:4;35135:38;;;;;;-1:-1:-1;;;;;35107:22:0;;;;;35130:3;;35107:22;;35135:23;;:38;;;;;;;;;;;;;;;35107:22;35135:38;;;5:2:-1;;;;30:1;27;20:12;5:2;35135:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35135:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35135:38:0;35107:67;;;;;;;;;;-1:-1:-1;;;;;35107:67:0;;;;;;;;;;;;;;;;;;;;35135:38;;35107:67;;;;;;;-1:-1:-1;35107:67:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;35107:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35107:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;34989:193:0:o;34080:102::-;34134:4;34158:16;34166:7;34158;:16::i;:::-;34151:23;34080:102;-1:-1:-1;;34080:102:0:o;22500:166::-;22558:7;22594:13;:11;:13::i;:::-;22586:5;:21;22578:57;;;;;-1:-1:-1;;;;;22578:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22653:5:0;22500:166::o;32819:555::-;31683:13;;-1:-1:-1;;;;;31683:13:0;31669:10;:27;31661:85;;;;-1:-1:-1;;;;;31661:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31999:15;;-1:-1:-1;;;31999:15:0;;;;:24;31991:87;;;;-1:-1:-1;;;;;31991:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33054:18;;;:51;;-1:-1:-1;33076:29:0;33084:20;:13;33102:1;33084:20;:17;:20;:::i;:::-;33076:7;:29::i;:::-;33046:95;;;;;-1:-1:-1;;;;;33046:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33172:14;;33152:17;33197:170;33221:9;33217:1;:13;33197:170;;;33319:36;33325:7;33333:1;33325:10;;;;;;;;;;;;;;33353:1;33337:13;:17;33319:5;:36::i;:::-;33232:3;;33197:170;;10166:181;10221:7;10257:20;;;:11;:20;;;;;;-1:-1:-1;;;;;10257:20:0;10296:19;10288:28;;;;;9782:153;9837:7;-1:-1:-1;;;;;9865:19:0;;9857:28;;;;;;-1:-1:-1;;;;;;9903:24:0;;;;;:17;:24;;;;;;;9782:153::o;33427:106::-;31683:13;;-1:-1:-1;;;;;31683:13:0;31669:10;:27;31661:85;;;;-1:-1:-1;;;;;31661:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33503:15;:22;;-1:-1:-1;;33503:22:0;-1:-1:-1;;;33503:22:0;;;33427:106::o;33581:127::-;31683:13;;-1:-1:-1;;;;;31683:13:0;31669:10;:27;31661:85;;;;-1:-1:-1;;;;;31661:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33679:21;;;;:7;;:21;;;;;:::i;:::-;;33581:127;:::o;28513:89::-;28587:7;28580:14;;;;;;;;-1:-1:-1;;28580:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28554:13;;28580:14;;28587:7;;28580:14;;28587:7;28580:14;;;;;;;;;;;;;;;;;;;;;;;;31197:21;;;;;;;;;;;;;;;-1:-1:-1;;31197:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11824:217::-;-1:-1:-1;;;;;11904:16:0;;11910:10;11904:16;;11896:25;;;;;;11951:10;11932:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;11932:34:0;;;;;;;;;;;;:45;;-1:-1:-1;;11932:45:0;;;;;;;;;;11993:40;;;;;;;11932:34;;11951:10;11993:40;;;;;;;;;;;11824:217;;:::o;14650:214::-;14757:31;14770:4;14776:2;14780:7;14757:12;:31::i;:::-;14807:48;14830:4;14836:2;14840:7;14849:5;14807:22;:48::i;:::-;14799:57;;;;;33788:233;33857:13;33896:17;33904:8;33896:7;:17::i;:::-;33888:54;;;;;-1:-1:-1;;;;;33888:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33984:7;33993:18;34002:8;33993;:18::i;:::-;33967:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33967:45:0;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;33967:45:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;33967:45:0;;;33953:60;;33788:233;;;:::o;31264:37::-;;;-1:-1:-1;;;;;31264:37:0;;:::o;31227:28::-;;;-1:-1:-1;;;;;31227:28:0;;:::o;12370:147::-;-1:-1:-1;;;;;12474:25:0;;;12450:4;12474:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12370:147::o;32323:427::-;31683:13;;-1:-1:-1;;;;;31683:13:0;31669:10;:27;31661:85;;;;-1:-1:-1;;;;;31661:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31999:15;;-1:-1:-1;;;31999:15:0;;;;:24;31991:87;;;;-1:-1:-1;;;;;31991:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32538:13;;;:41;;-1:-1:-1;32555:24:0;32563:15;:8;32576:1;32563:15;:12;:15;:::i;32555:24::-;32530:85;;;;;-1:-1:-1;;;;;32530:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32719:23;32725:6;32733:8;32719:5;:23::i;15060:155::-;15117:4;15150:20;;;:11;:20;;;;;;-1:-1:-1;;;;;15150:20:0;15188:19;;;15060:155::o;15587:249::-;15672:4;15689:13;15705:16;15713:7;15705;:16::i;:::-;15689:32;;15751:5;-1:-1:-1;;;;;15740:16:0;:7;-1:-1:-1;;;;;15740:16:0;;:51;;;;15784:7;-1:-1:-1;;;;;15760:31:0;:20;15772:7;15760:11;:20::i;:::-;-1:-1:-1;;;;;15760:31:0;;15740:51;:87;;;;15795:32;15812:5;15819:7;15795:16;:32::i;:::-;15732:96;15587:249;-1:-1:-1;;;;15587:249:0:o;23051:245::-;23137:38;23157:4;23163:2;23167:7;23137:19;:38::i;:::-;23188:47;23221:4;23227:7;23188:32;:47::i;:::-;23248:40;23276:2;23280:7;23248:27;:40::i;4576:150::-;4634:7;4667:1;4662;:6;;4654:15;;;;;;-1:-1:-1;4692:5:0;;;4576:150::o;23559:196::-;23623:24;23635:2;23639:7;23623:11;:24::i;:::-;23660:40;23688:2;23692:7;23660:27;:40::i;:::-;23728:12;;:19;;23745:1;23728:19;:16;:19;:::i;:::-;23713:12;:34;-1:-1:-1;;23559:196:0:o;18578:356::-;18700:4;18727:15;:2;-1:-1:-1;;;;;18727:13:0;;:15::i;:::-;18722:60;;-1:-1:-1;18766:4:0;18759:11;;18722:60;18810:70;;-1:-1:-1;;;;;18810:70:0;;18847:10;18810:70;;;;;;-1:-1:-1;;;;;18810:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18794:13;;18810:36;;;;;;18847:10;;18859:4;;18865:7;;18874:5;;18810:70;;;;;;;;;;;18794:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18810:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18810:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18810:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18810:70:0;-1:-1:-1;;;;;;18899:26:0;-1:-1:-1;;;;;18899:26:0;;-1:-1:-1;;18578:356:0;;;;;;:::o;34309:491::-;34373:13;34408:8;34404:24;;-1:-1:-1;34418:10:0;;;;;;;;;;;;-1:-1:-1;;;;;34418:10:0;;;;;;34404:24;34448:3;;34439:6;34505:71;34512:6;;34505:71;;34534:8;;34562:2;34557:7;;;;34505:71;;;34586:17;34616:6;34606:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;34606:17:0;87:34:-1;135:17;;-1:-1;34606:17:0;-1:-1:-1;34586:37:0;-1:-1:-1;;;34643:10:0;;34664:99;34671:6;;34664:99;;34725:2;34721:1;:6;34716:2;:11;34705:24;;34693:4;34698:3;;;;;;;34693:9;;;;;;;;;;;:36;-1:-1:-1;;;;;34693:36:0;;;;;;;;-1:-1:-1;34749:2:0;34744:7;;;;34664:99;;;-1:-1:-1;34787:4:0;34309:491;-1:-1:-1;;;;;34309:491:0:o;17630:414::-;17744:4;-1:-1:-1;;;;;17724:24:0;:16;17732:7;17724;:16::i;:::-;-1:-1:-1;;;;;17724:24:0;;17716:33;;;;;;-1:-1:-1;;;;;17768:16:0;;17760:25;;;;;;17798:23;17813:7;17798:14;:23::i;:::-;-1:-1:-1;;;;;17860:23:0;;;;;;:17;:23;;;;;;:30;;17888:1;17860:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;17834:23:0;;;;;;;:17;:23;;;;;;:56;;;;17925:21;;;;;;;:28;;17951:1;17925:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;17901:21:0;;;;;;;:17;:21;;;;;;;;:52;;;;17966:20;;;:11;:20;;;;;:25;;-1:-1:-1;;;;;;17966:25:0;;;;;18009:27;;17978:7;;17901:21;;18009:27;;;;;;17630:414;;;:::o;25604:1148::-;-1:-1:-1;;;;;25895:18:0;;25870:22;25895:18;;;:12;:18;;;;;:25;:32;;25925:1;25895:32;:29;:32;:::i;:::-;25938:18;25959:26;;;:17;:26;;;;;;25870:57;;-1:-1:-1;26092:28:0;;;26088:328;;-1:-1:-1;;;;;26159:18:0;;26137:19;26159:18;;;:12;:18;;;;;:34;;26178:14;;26159:34;;;;;;;;;;;;;;26137:56;;26243:11;26210:12;:18;26223:4;-1:-1:-1;;;;;26210:18:0;-1:-1:-1;;;;;26210:18:0;;;;;;;;;;;;26229:10;26210:30;;;;;;;;;;;;;;;;;;;:44;;;;26327:30;;;:17;:30;;;;;:43;;;26088:328;-1:-1:-1;;;;;26505:18:0;;;;;;:12;:18;;;;;:27;;;;;-1:-1:-1;;26505:27:0;;;:::i;:::-;;25604:1148;;;;:::o;24793:186::-;-1:-1:-1;;;;;24907:16:0;;;;;;;:12;:16;;;;;;;;:23;;24878:26;;;:17;:26;;;;;:52;;;24941:16;;;39:1:-1;23:18;;45:23;;24941:30:0;;;;;;;;24793:186::o;16087:286::-;-1:-1:-1;;;;;16159:16:0;;16151:25;;;;;;16196:16;16204:7;16196;:16::i;:::-;16195:17;16187:26;;;;;;16226:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;;;;;16226:25:0;-1:-1:-1;;;;;16226:25:0;;;;;;;;16286:21;;:17;:21;;;;;;;:28;;:25;:28::i;:::-;-1:-1:-1;;;;;16262:21:0;;;;;;:17;:21;;;;;;:52;;;;16332:33;;16357:7;;16262:21;16332:33;;16262:21;;16332:33;16087:286;;:::o;4812:150::-;4870:7;4902:5;;;4926:6;;;;4918:15;;;;;;4953:1;4812:150;-1:-1:-1;;;4812:150:0:o;5789:627::-;6361:20;6400:8;;;5789:627::o;19101:175::-;19201:1;19165:24;;;:15;:24;;;;;;-1:-1:-1;;;;;19165:24:0;:38;19161:108;;19255:1;19220:24;;;:15;:24;;;;;:37;;-1:-1:-1;;;;;;19220:37:0;;;19161:108;19101:175;:::o;31084:4269::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31084:4269:0;;;-1:-1:-1;31084:4269:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://881eff59ea96168a047f88d1a174a3522c0147cee065cf96dce362140363964f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.