Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
500 ELYGENESIS
Holders
269
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ElyGenesisCollection
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: APGL-3.0-only pragma solidity >=0.8.0; import {Ownable} from "./Ownable.sol"; import {ERC1155} from "./solmate/tokens/ERC1155.sol"; /// @title ElyGenesisCollection /// @notice Minting contract for Ely's Genesis Collection (https://twitter.com/ratkingnft). /// @author 0xMetas (https://twitter.com/0xMetas) contract ElyGenesisCollection is ERC1155, Ownable { ////////////////////// /// External State /// ////////////////////// /// @notice The name of the contract. /// @dev EIP-1155 doesn't define `name()` so that the metadata JSON returned by `uri` is /// the definitive name, but it's provided for compatibility with existing front-ends. string public constant name = "Ely Genesis Collection"; // solhint-disable-line const-name-snakecase /// @notice The symbol of the contract. /// @dev EIP-1155 doesn't define `symbol()` because it isn't a "globally useful piece of /// data", but, again, it's provided for compatibility with existing front-ends. string public constant symbol = "ELYGENESIS"; // solhint-disable-line const-name-snakecase /// @notice The price of each token. uint256 public constant PRICE = 0.05 ether; /// @notice The maximum supply of all tokens. uint256 public constant MAX_SUPPLY = 500; /// @notice The maximum supply of each token. uint256 public constant MAX_SUPPLY_PER_ID = 100; /// @notice True if the metadata (URI) can no longer be modified. bool public metadataFrozen = false; /// @notice The maximum number of tokens you can purchase in a single transaction. uint256 public transactionLimit = 3; /// @notice True if the sale is open. bool public purchaseable = false; /// @notice The total supply of all tokens. /// @dev EIP-1155 requires enumeration off-chain, but the contract provides `totalSupplyAll` /// for convenience, and compatibility with marketplaces and other front-ends. uint256 public totalSupplyAll = 0; /// @notice The total supply of an individual token. /// @dev See `totalSupplyAll`. uint8[5] public totalSupply; ////////////////////// /// Internal State /// ////////////////////// /// @dev The ids available to mint. This array is used when generating a random index for the mint. /// Ids are removed from this array when their max amount has been minted. uint8[] private availableIds = [0, 1, 2, 3, 4]; /// @dev The 'dynamic' length of the `availableIds` array. Since it's a static array, it's actual /// length cannot be modified, so this variable is used instead. uint8 private availableIdsLength = 5; /// @dev The base of the generated URI returned by `uri(uint256)`. string private baseUri; ////////////// /// Errors /// ////////////// error WithdrawFail(); error FrozenMetadata(); error NotPurchaseable(); error SoldOut(); error InsufficientValue(); error InvalidPurchaseAmount(); error ExternalAccountOnly(); ////////////// /// Events /// ////////////// event PermanentURI(string uri, uint256 indexed id); event Purchaseable(bool state); event TransactionLimit(uint256 previousLimit, uint256 newLimit); // solhint-disable-next-line no-empty-blocks constructor() {} /// @notice Purchase `amount` number of tokens. /// @param amount The number of tokens to purchase. function purchase(uint256 amount) public payable { if (!purchaseable) revert NotPurchaseable(); if (amount + totalSupplyAll > MAX_SUPPLY) revert SoldOut(); if (msg.value != amount * PRICE) revert InsufficientValue(); if (msg.sender.code.length != 0) revert ExternalAccountOnly(); if (amount > transactionLimit || amount < 1) revert InvalidPurchaseAmount(); for (uint256 i; i < amount; ) { uint256 idx = getPseudorandom() % availableIdsLength; uint256 id = availableIds[idx]; _mint(msg.sender, id, 1, ""); // `totalSupplyAll` needs to be incremented in the loop to provide a unique nonce for // each call to `getPseudorandom()`. unchecked { ++i; ++totalSupplyAll; ++totalSupply[id]; } // Remove the token from `availableIds` if it's reached the supply limit if (totalSupply[id] == MAX_SUPPLY_PER_ID) removeIndex(idx); } } /// @notice Returns a deterministically generated URI for the given token ID. /// @return string function uri(uint256 id) public view override returns (string memory) { return bytes(baseUri).length > 0 ? string(abi.encodePacked(baseUri, toString(id), ".json")) : ""; } ////////////////////// /// Administration /// ////////////////////// /// @notice Prevents any future changes to the URI of any token ID. /// @dev Emits a `PermanentURI(string, uint256 indexed)` event for each token ID with the permanent URI. function freezeMetadata() public onlyOwner { metadataFrozen = true; for (uint256 i = 0; i < 5; ++i) { emit PermanentURI(uri(i), i); } } /// @notice Updates the base of the generated URI returned by `uri(uint256)`. /// @dev The URI event isn't emitted because there is no applicable ID to emit the event for. The /// baseURI given here applies to all token IDs. function setBaseUri(string memory newBaseUri) public onlyOwner { if (metadataFrozen == true) revert FrozenMetadata(); baseUri = newBaseUri; } /// @notice Sets the current state of the sale. `false` will disable sale, `true` will enable it. function setPurchaseable(bool state) public onlyOwner { purchaseable = state; emit Purchaseable(purchaseable); } /// @notice Withdraws entire balance of this contract to the `owner` address. function withdrawEth() public onlyOwner { (bool success, ) = owner.call{value: address(this).balance}(""); if (!success) revert WithdrawFail(); } /// @notice Sets the maximum purchase amount per transaction. function setTransactionLimit(uint256 newTransactionLimit) public onlyOwner { emit TransactionLimit(transactionLimit, newTransactionLimit); transactionLimit = newTransactionLimit; } //////////////// /// Internal /// //////////////// /// @dev Generates a pseudorandom number to use when determining an ID for purchase. True randomness isn't /// necessary because IDs have no rarity (no ID is inherently more valuable than another). function getPseudorandom() internal view returns (uint256) { // solhint-disable not-rely-on-time unchecked { return uint256( keccak256( abi.encodePacked( block.timestamp, msg.sender, totalSupplyAll ) ) ); } // solhint-enable not-rely-on-time } /// @dev Removes the specified index from the `availableIds` array. This function is used when the max supply /// of the token ID at `index` has already been purchased. The index isn't checked because useage is internal. function removeIndex(uint256 index) internal { availableIds[index] = availableIds[availableIdsLength - 1]; availableIdsLength--; } /// @dev Taken from OpenZeppelin's implementation /// (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol) function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Minimalist and gas efficient standard ERC1155 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol) abstract contract ERC1155 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 amount ); event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] amounts ); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); event URI(string value, uint256 indexed id); /*/////////////////////////////////////////////////////////////// ERC1155 STORAGE //////////////////////////////////////////////////////////////*/ mapping(address => mapping(uint256 => uint256)) public balanceOf; mapping(address => mapping(address => bool)) public isApprovedForAll; /*/////////////////////////////////////////////////////////////// METADATA LOGIC //////////////////////////////////////////////////////////////*/ function uri(uint256 id) public view virtual returns (string memory); /*/////////////////////////////////////////////////////////////// ERC1155 LOGIC //////////////////////////////////////////////////////////////*/ function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual { require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED"); balanceOf[from][id] -= amount; balanceOf[to][id] += amount; emit TransferSingle(msg.sender, from, to, id, amount); require( to.code.length == 0 ? to != address(0) : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) == ERC1155TokenReceiver.onERC1155Received.selector, "UNSAFE_RECIPIENT" ); } function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual { uint256 idsLength = ids.length; // Saves MLOADs. require(idsLength == amounts.length, "LENGTH_MISMATCH"); require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED"); for (uint256 i = 0; i < idsLength; ) { uint256 id = ids[i]; uint256 amount = amounts[i]; balanceOf[from][id] -= amount; balanceOf[to][id] += amount; // An array can't have a total length // larger than the max uint256 value. unchecked { i++; } } emit TransferBatch(msg.sender, from, to, ids, amounts); require( to.code.length == 0 ? to != address(0) : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) == ERC1155TokenReceiver.onERC1155BatchReceived.selector, "UNSAFE_RECIPIENT" ); } function balanceOfBatch(address[] memory owners, uint256[] memory ids) public view virtual returns (uint256[] memory balances) { uint256 ownersLength = owners.length; // Saves MLOADs. require(ownersLength == ids.length, "LENGTH_MISMATCH"); balances = new uint256[](owners.length); // Unchecked because the only math done is incrementing // the array index counter which cannot possibly overflow. unchecked { for (uint256 i = 0; i < ownersLength; i++) { balances[i] = balanceOf[owners[i]][ids[i]]; } } } /*/////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155 interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal { balanceOf[to][id] += amount; emit TransferSingle(msg.sender, address(0), to, id, amount); require( to.code.length == 0 ? to != address(0) : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, amount, data) == ERC1155TokenReceiver.onERC1155Received.selector, "UNSAFE_RECIPIENT" ); } function _batchMint( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal { uint256 idsLength = ids.length; // Saves MLOADs. require(idsLength == amounts.length, "LENGTH_MISMATCH"); for (uint256 i = 0; i < idsLength; ) { balanceOf[to][ids[i]] += amounts[i]; // An array can't have a total length // larger than the max uint256 value. unchecked { i++; } } emit TransferBatch(msg.sender, address(0), to, ids, amounts); require( to.code.length == 0 ? to != address(0) : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, address(0), ids, amounts, data) == ERC1155TokenReceiver.onERC1155BatchReceived.selector, "UNSAFE_RECIPIENT" ); } function _batchBurn( address from, uint256[] memory ids, uint256[] memory amounts ) internal { uint256 idsLength = ids.length; // Saves MLOADs. require(idsLength == amounts.length, "LENGTH_MISMATCH"); for (uint256 i = 0; i < idsLength; ) { balanceOf[from][ids[i]] -= amounts[i]; // An array can't have a total length // larger than the max uint256 value. unchecked { i++; } } emit TransferBatch(msg.sender, from, address(0), ids, amounts); } function _burn( address from, uint256 id, uint256 amount ) internal { balanceOf[from][id] -= amount; emit TransferSingle(msg.sender, from, address(0), id, amount); } } /// @notice A generic interface for a contract which properly accepts ERC1155 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC1155.sol) interface ERC1155TokenReceiver { function onERC1155Received( address operator, address from, uint256 id, uint256 amount, bytes calldata data ) external returns (bytes4); function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: Unlicense pragma solidity >=0.8.0; /// @title Ownable /// @notice Provides a modifier to authenticate contract owner. /// @dev The default owner is the contract deployer, but this can be modified /// afterwards using `transferOwnership`. There is no check when transferring /// ownership so ensure you don't use `address(0)` unintentionally. The modifier /// to guard functions with is `onlyOwner`. /// @author 0xMetas /// @author Based on OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol) abstract contract Ownable { /// @notice This emits when the owner changes. /// @param previousOwner The address of the previous owner. /// @param newOwner The address of the new owner. event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /// @dev Error thrown when `onlyOwner` is called by an address other than `owner`. error NotOwner(); /// @notice The address of the owner. address public owner; /// @dev Sets the value of `owner` to `msg.sender`. constructor() { owner = msg.sender; } /// @dev Reverts if `msg.sender` is not `owner`. modifier onlyOwner() { if (msg.sender != owner) revert NotOwner(); _; } /// @notice Sets the `owner` address to a new one. /// @dev Use `address(0)` to renounce ownership. /// @param newOwner The address of the new owner of the contract. function transferOwnership(address newOwner) external onlyOwner { emit OwnershipTransferred(owner, newOwner); owner = newOwner; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ExternalAccountOnly","type":"error"},{"inputs":[],"name":"FrozenMetadata","type":"error"},{"inputs":[],"name":"InsufficientValue","type":"error"},{"inputs":[],"name":"InvalidPurchaseAmount","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotPurchaseable","type":"error"},{"inputs":[],"name":"SoldOut","type":"error"},{"inputs":[],"name":"WithdrawFail","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"PermanentURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"Purchaseable","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"TransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY_PER_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"purchaseable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","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":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseUri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setPurchaseable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTransactionLimit","type":"uint256"}],"name":"setTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyAll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6002805460ff60a01b1916815560038080556004805460ff19168155600060058181556101206040526080918252600160a05260c09490945260e0929092526101005262000051916007919062000085565b506008805460ff191660051790553480156200006c57600080fd5b50600280546001600160a01b0319163317905562000149565b82805482825590600052602060002090601f01602090048101928215620001205791602002820160005b83821115620000ef57835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302620000af565b80156200011e5782816101000a81549060ff0219169055600101602081600001049283019260010302620000ef565b505b506200012e92915062000132565b5090565b5b808211156200012e576000815560010162000133565b611e3a80620001596000396000f3fe6080604052600436106101805760003560e01c8063a0ef91df116100d1578063e985e9c51161008a578063f242432a11610064578063f242432a146104c5578063f2fde38b146104e5578063f62b85f014610505578063fb3cc6c21461051f57600080fd5b8063e985e9c514610461578063efef39a11461049c578063f19605d6146104af57600080fd5b8063a0ef91df146103ba578063a22cb465146103cf578063b42394f1146103ef578063bd85b03914610405578063cbb2e55e14610437578063d111515d1461044c57600080fd5b80634e1273f41161013e5780638da5cb5b116101185780638da5cb5b1461030c57806395d89b41146103445780639f3b298c1461037a578063a0bcfc7f1461039a57600080fd5b80634e1273f4146102a457806364bfa546146102d15780638d859f3e146102f157600080fd5b8062fdd58e1461018557806301ffc9a7146101cd57806306fdde03146101fd5780630e89341c1461024c5780632eb2c2d61461026c57806332cb6b0c1461028e575b600080fd5b34801561019157600080fd5b506101ba6101a036600461180b565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b3480156101d957600080fd5b506101ed6101e8366004611917565b610540565b60405190151581526020016101c4565b34801561020957600080fd5b5061023f6040518060400160405280601681526020017522b63c9023b2b732b9b4b99021b7b63632b1ba34b7b760511b81525081565b6040516101c49190611bcc565b34801561025857600080fd5b5061023f61026736600461199a565b610592565b34801561027857600080fd5b5061028c6102873660046116d2565b6105f0565b005b34801561029a57600080fd5b506101ba6101f481565b3480156102b057600080fd5b506102c46102bf366004611835565b6108b6565b6040516101c49190611b94565b3480156102dd57600080fd5b5061028c6102ec36600461199a565b6109e4565b3480156102fd57600080fd5b506101ba66b1a2bc2ec5000081565b34801561031857600080fd5b5060025461032c906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b34801561035057600080fd5b5061023f6040518060400160405280600a815260200169454c5947454e4553495360b01b81525081565b34801561038657600080fd5b5061028c6103953660046118fc565b610a50565b3480156103a657600080fd5b5061028c6103b5366004611951565b610ac8565b3480156103c657600080fd5b5061028c610b3a565b3480156103db57600080fd5b5061028c6103ea3660046117e1565b610bdb565b3480156103fb57600080fd5b506101ba60055481565b34801561041157600080fd5b5061042561042036600461199a565b610c47565b60405160ff90911681526020016101c4565b34801561044357600080fd5b506101ba606481565b34801561045857600080fd5b5061028c610c71565b34801561046d57600080fd5b506101ed61047c36600461169f565b600160209081526000928352604080842090915290825290205460ff1681565b61028c6104aa36600461199a565b610d0b565b3480156104bb57600080fd5b506101ba60035481565b3480156104d157600080fd5b5061028c6104e036600461177c565b610f2f565b3480156104f157600080fd5b5061028c610500366004611684565b611135565b34801561051157600080fd5b506004546101ed9060ff1681565b34801561052b57600080fd5b506002546101ed90600160a01b900460ff1681565b60006301ffc9a760e01b6001600160e01b0319831614806105715750636cdb3d1360e11b6001600160e01b03198316145b8061058c57506303a24d0760e21b6001600160e01b03198316145b92915050565b60606000600980546105a390611d2c565b9050116105bf576040518060200160405280600081525061058c565b60096105ca836111bc565b6040516020016105db929190611a36565b60405160208183030381529060405292915050565b8251825181146106395760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064015b60405180910390fd5b336001600160a01b038716148061067357506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6106b05760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610630565b60005b818110156107855760008582815181106106cf576106cf611dc2565b6020026020010151905060008583815181106106ed576106ed611dc2565b60200260200101519050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020600082825461073c9190611ca9565b90915550506001600160a01b03881660009081526020818152604080832085845290915281208054839290610772908490611c5e565b9091555050600190920191506106b39050565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516107d5929190611ba7565b60405180910390a46001600160a01b0385163b156108855760405163bc197c8160e01b808252906001600160a01b0387169063bc197c81906108239033908b908a908a908a90600401611af1565b602060405180830381600087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190611934565b6001600160e01b03191614610892565b6001600160a01b03851615155b6108ae5760405162461bcd60e51b815260040161063090611bdf565b505050505050565b815181516060919081146108fe5760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610630565b835167ffffffffffffffff81111561091857610918611dd8565b604051908082528060200260200182016040528015610941578160200160208202803683370190505b50915060005b818110156109dc5760008086838151811061096457610964611dc2565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008583815181106109a0576109a0611dc2565b60200260200101518152602001908152602001600020548382815181106109c9576109c9611dc2565b6020908102919091010152600101610947565b505092915050565b6002546001600160a01b03163314610a0f576040516330cd747160e01b815260040160405180910390fd5b60035460408051918252602082018390527f8d58ccd5206002488239707fd642ac4a62a6d15f7b4f99713b4a0fbd55da416e910160405180910390a1600355565b6002546001600160a01b03163314610a7b576040516330cd747160e01b815260040160405180910390fd5b6004805460ff191682151590811790915560405160ff909116151581527f0ec2dd5d69dfe2cecabed945dd5b31e43c736304d8de05c6e456f27f5796c2f29060200160405180910390a150565b6002546001600160a01b03163314610af3576040516330cd747160e01b815260040160405180910390fd5b600254600160a01b900460ff16151560011415610b23576040516311e1788760e01b815260040160405180910390fd5b8051610b369060099060208401906114ce565b5050565b6002546001600160a01b03163314610b65576040516330cd747160e01b815260040160405180910390fd5b6002546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610bb2576040519150601f19603f3d011682016040523d82523d6000602084013e610bb7565b606091505b5050905080610bd85760405162c0f29960e01b815260040160405180910390fd5b50565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60068160058110610c5757600080fd5b60209182820401919006915054906101000a900460ff1681565b6002546001600160a01b03163314610c9c576040516330cd747160e01b815260040160405180910390fd5b6002805460ff60a01b1916600160a01b17905560005b6005811015610bd857807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207610ce683610592565b604051610cf39190611bcc565b60405180910390a2610d0481611d67565b9050610cb2565b60045460ff16610d2e57604051633a64231960e21b815260040160405180910390fd5b6101f460055482610d3f9190611c5e565b1115610d5e576040516352df9fe560e01b815260040160405180910390fd5b610d6f66b1a2bc2ec5000082611c8a565b3414610d8e5760405163044044a560e21b815260040160405180910390fd5b333b15610dae5760405163feed781d60e01b815260040160405180910390fd5b600354811180610dbe5750600181105b15610ddc57604051638e4353d360e01b815260040160405180910390fd5b60005b81811015610b365760085460009060ff16610e3e60055460408051426020808301919091523360601b6bffffffffffffffffffffffff191682840152605480830194909452825180830390940184526074909101909152815191012090565b610e489190611d82565b9050600060078281548110610e5f57610e5f611dc2565b90600052602060002090602091828204019190069054906101000a900460ff1660ff169050610ea033826001604051806020016040528060008152506112c2565b60058054600190810182559093019260069082908110610ec257610ec2611dc2565b60208104919091018054601f9092166101000a60ff8181021984169382900481166001011602919091179055606460068260058110610f0357610f03611dc2565b602081049091015460ff601f9092166101000a9004161415610f2857610f2882611419565b5050610ddf565b336001600160a01b0386161480610f6957506001600160a01b038516600090815260016020908152604080832033845290915290205460ff165b610fa65760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610630565b6001600160a01b03851660009081526020818152604080832086845290915281208054849290610fd7908490611ca9565b90915550506001600160a01b0384166000908152602081815260408083208684529091528120805484929061100d908490611c5e565b909155505060408051848152602081018490526001600160a01b03808716929088169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b156111055760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e61906110a39033908a90899089908990600401611b4f565b602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611934565b6001600160e01b03191614611112565b6001600160a01b03841615155b61112e5760405162461bcd60e51b815260040161063090611bdf565b5050505050565b6002546001600160a01b03163314611160576040516330cd747160e01b815260040160405180910390fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6060816111e05750506040805180820190915260018152600360fc1b602082015290565b8160005b811561120a57806111f481611d67565b91506112039050600a83611c76565b91506111e4565b60008167ffffffffffffffff81111561122557611225611dd8565b6040519080825280601f01601f19166020018201604052801561124f576020820181803683370190505b5090505b84156112ba57611264600183611ca9565b9150611271600a86611d82565b61127c906030611c5e565b60f81b81838151811061129157611291611dc2565b60200101906001600160f81b031916908160001a9053506112b3600a86611c76565b9450611253565b949350505050565b6001600160a01b038416600090815260208181526040808320868452909152812080548492906112f3908490611c5e565b909155505060408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b156113ea5760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e6190611388903390600090899089908990600401611b4f565b602060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190611934565b6001600160e01b031916146113f7565b6001600160a01b03841615155b6114135760405162461bcd60e51b815260040161063090611bdf565b50505050565b60085460079061142e9060019060ff16611cc0565b60ff168154811061144157611441611dc2565b90600052602060002090602091828204019190069054906101000a900460ff166007828154811061147457611474611dc2565b6000918252602080832090820401805460ff948516601f9093166101000a92830292850219169190911790556008805490921691906114b283611d0f565b91906101000a81548160ff021916908360ff1602179055505050565b8280546114da90611d2c565b90600052602060002090601f0160209004810192826114fc5760008555611542565b82601f1061151557805160ff1916838001178555611542565b82800160010185558215611542579182015b82811115611542578251825591602001919060010190611527565b5061154e929150611552565b5090565b5b8082111561154e5760008155600101611553565b600067ffffffffffffffff83111561158157611581611dd8565b611594601f8401601f1916602001611c09565b90508281528383830111156115a857600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146115d657600080fd5b919050565b600082601f8301126115ec57600080fd5b813560206116016115fc83611c3a565b611c09565b80838252828201915082860187848660051b890101111561162157600080fd5b60005b8581101561164057813584529284019290840190600101611624565b5090979650505050505050565b803580151581146115d657600080fd5b600082601f83011261166e57600080fd5b61167d83833560208501611567565b9392505050565b60006020828403121561169657600080fd5b61167d826115bf565b600080604083850312156116b257600080fd5b6116bb836115bf565b91506116c9602084016115bf565b90509250929050565b600080600080600060a086880312156116ea57600080fd5b6116f3866115bf565b9450611701602087016115bf565b9350604086013567ffffffffffffffff8082111561171e57600080fd5b61172a89838a016115db565b9450606088013591508082111561174057600080fd5b61174c89838a016115db565b9350608088013591508082111561176257600080fd5b5061176f8882890161165d565b9150509295509295909350565b600080600080600060a0868803121561179457600080fd5b61179d866115bf565b94506117ab602087016115bf565b93506040860135925060608601359150608086013567ffffffffffffffff8111156117d557600080fd5b61176f8882890161165d565b600080604083850312156117f457600080fd5b6117fd836115bf565b91506116c96020840161164d565b6000806040838503121561181e57600080fd5b611827836115bf565b946020939093013593505050565b6000806040838503121561184857600080fd5b823567ffffffffffffffff8082111561186057600080fd5b818501915085601f83011261187457600080fd5b813560206118846115fc83611c3a565b8083825282820191508286018a848660051b89010111156118a457600080fd5b600096505b848710156118ce576118ba816115bf565b8352600196909601959183019183016118a9565b50965050860135925050808211156118e557600080fd5b506118f2858286016115db565b9150509250929050565b60006020828403121561190e57600080fd5b61167d8261164d565b60006020828403121561192957600080fd5b813561167d81611dee565b60006020828403121561194657600080fd5b815161167d81611dee565b60006020828403121561196357600080fd5b813567ffffffffffffffff81111561197a57600080fd5b8201601f8101841361198b57600080fd5b6112ba84823560208401611567565b6000602082840312156119ac57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156119e3578151875295820195908201906001016119c7565b509495945050505050565b60008151808452611a06816020860160208601611ce3565b601f01601f19169290920160200192915050565b60008151611a2c818560208601611ce3565b9290920192915050565b600080845481600182811c915080831680611a5257607f831692505b6020808410821415611a7257634e487b7160e01b86526022600452602486fd5b818015611a865760018114611a9757611ac4565b60ff19861689528489019650611ac4565b60008b81526020902060005b86811015611abc5781548b820152908501908301611aa3565b505084890196505b505050505050611ae8611ad78286611a1a565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0386811682528516602082015260a060408201819052600090611b1d908301866119b3565b8281036060840152611b2f81866119b3565b90508281036080840152611b4381856119ee565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611b89908301846119ee565b979650505050505050565b60208152600061167d60208301846119b3565b604081526000611bba60408301856119b3565b8281036020840152611ae881856119b3565b60208152600061167d60208301846119ee565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611c3257611c32611dd8565b604052919050565b600067ffffffffffffffff821115611c5457611c54611dd8565b5060051b60200190565b60008219821115611c7157611c71611d96565b500190565b600082611c8557611c85611dac565b500490565b6000816000190483118215151615611ca457611ca4611d96565b500290565b600082821015611cbb57611cbb611d96565b500390565b600060ff821660ff841680821015611cda57611cda611d96565b90039392505050565b60005b83811015611cfe578181015183820152602001611ce6565b838111156114135750506000910152565b600060ff821680611d2257611d22611d96565b6000190192915050565b600181811c90821680611d4057607f821691505b60208210811415611d6157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611d7b57611d7b611d96565b5060010190565b600082611d9157611d91611dac565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610bd857600080fdfea2646970667358221220c533d9b8124f713823343c563b58b6b39969ff1a7c019ecaf786872b11c9af6f64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101805760003560e01c8063a0ef91df116100d1578063e985e9c51161008a578063f242432a11610064578063f242432a146104c5578063f2fde38b146104e5578063f62b85f014610505578063fb3cc6c21461051f57600080fd5b8063e985e9c514610461578063efef39a11461049c578063f19605d6146104af57600080fd5b8063a0ef91df146103ba578063a22cb465146103cf578063b42394f1146103ef578063bd85b03914610405578063cbb2e55e14610437578063d111515d1461044c57600080fd5b80634e1273f41161013e5780638da5cb5b116101185780638da5cb5b1461030c57806395d89b41146103445780639f3b298c1461037a578063a0bcfc7f1461039a57600080fd5b80634e1273f4146102a457806364bfa546146102d15780638d859f3e146102f157600080fd5b8062fdd58e1461018557806301ffc9a7146101cd57806306fdde03146101fd5780630e89341c1461024c5780632eb2c2d61461026c57806332cb6b0c1461028e575b600080fd5b34801561019157600080fd5b506101ba6101a036600461180b565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b3480156101d957600080fd5b506101ed6101e8366004611917565b610540565b60405190151581526020016101c4565b34801561020957600080fd5b5061023f6040518060400160405280601681526020017522b63c9023b2b732b9b4b99021b7b63632b1ba34b7b760511b81525081565b6040516101c49190611bcc565b34801561025857600080fd5b5061023f61026736600461199a565b610592565b34801561027857600080fd5b5061028c6102873660046116d2565b6105f0565b005b34801561029a57600080fd5b506101ba6101f481565b3480156102b057600080fd5b506102c46102bf366004611835565b6108b6565b6040516101c49190611b94565b3480156102dd57600080fd5b5061028c6102ec36600461199a565b6109e4565b3480156102fd57600080fd5b506101ba66b1a2bc2ec5000081565b34801561031857600080fd5b5060025461032c906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b34801561035057600080fd5b5061023f6040518060400160405280600a815260200169454c5947454e4553495360b01b81525081565b34801561038657600080fd5b5061028c6103953660046118fc565b610a50565b3480156103a657600080fd5b5061028c6103b5366004611951565b610ac8565b3480156103c657600080fd5b5061028c610b3a565b3480156103db57600080fd5b5061028c6103ea3660046117e1565b610bdb565b3480156103fb57600080fd5b506101ba60055481565b34801561041157600080fd5b5061042561042036600461199a565b610c47565b60405160ff90911681526020016101c4565b34801561044357600080fd5b506101ba606481565b34801561045857600080fd5b5061028c610c71565b34801561046d57600080fd5b506101ed61047c36600461169f565b600160209081526000928352604080842090915290825290205460ff1681565b61028c6104aa36600461199a565b610d0b565b3480156104bb57600080fd5b506101ba60035481565b3480156104d157600080fd5b5061028c6104e036600461177c565b610f2f565b3480156104f157600080fd5b5061028c610500366004611684565b611135565b34801561051157600080fd5b506004546101ed9060ff1681565b34801561052b57600080fd5b506002546101ed90600160a01b900460ff1681565b60006301ffc9a760e01b6001600160e01b0319831614806105715750636cdb3d1360e11b6001600160e01b03198316145b8061058c57506303a24d0760e21b6001600160e01b03198316145b92915050565b60606000600980546105a390611d2c565b9050116105bf576040518060200160405280600081525061058c565b60096105ca836111bc565b6040516020016105db929190611a36565b60405160208183030381529060405292915050565b8251825181146106395760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064015b60405180910390fd5b336001600160a01b038716148061067357506001600160a01b038616600090815260016020908152604080832033845290915290205460ff165b6106b05760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610630565b60005b818110156107855760008582815181106106cf576106cf611dc2565b6020026020010151905060008583815181106106ed576106ed611dc2565b60200260200101519050806000808b6001600160a01b03166001600160a01b031681526020019081526020016000206000848152602001908152602001600020600082825461073c9190611ca9565b90915550506001600160a01b03881660009081526020818152604080832085845290915281208054839290610772908490611c5e565b9091555050600190920191506106b39050565b50846001600160a01b0316866001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516107d5929190611ba7565b60405180910390a46001600160a01b0385163b156108855760405163bc197c8160e01b808252906001600160a01b0387169063bc197c81906108239033908b908a908a908a90600401611af1565b602060405180830381600087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108759190611934565b6001600160e01b03191614610892565b6001600160a01b03851615155b6108ae5760405162461bcd60e51b815260040161063090611bdf565b505050505050565b815181516060919081146108fe5760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b6044820152606401610630565b835167ffffffffffffffff81111561091857610918611dd8565b604051908082528060200260200182016040528015610941578160200160208202803683370190505b50915060005b818110156109dc5760008086838151811061096457610964611dc2565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008583815181106109a0576109a0611dc2565b60200260200101518152602001908152602001600020548382815181106109c9576109c9611dc2565b6020908102919091010152600101610947565b505092915050565b6002546001600160a01b03163314610a0f576040516330cd747160e01b815260040160405180910390fd5b60035460408051918252602082018390527f8d58ccd5206002488239707fd642ac4a62a6d15f7b4f99713b4a0fbd55da416e910160405180910390a1600355565b6002546001600160a01b03163314610a7b576040516330cd747160e01b815260040160405180910390fd5b6004805460ff191682151590811790915560405160ff909116151581527f0ec2dd5d69dfe2cecabed945dd5b31e43c736304d8de05c6e456f27f5796c2f29060200160405180910390a150565b6002546001600160a01b03163314610af3576040516330cd747160e01b815260040160405180910390fd5b600254600160a01b900460ff16151560011415610b23576040516311e1788760e01b815260040160405180910390fd5b8051610b369060099060208401906114ce565b5050565b6002546001600160a01b03163314610b65576040516330cd747160e01b815260040160405180910390fd5b6002546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610bb2576040519150601f19603f3d011682016040523d82523d6000602084013e610bb7565b606091505b5050905080610bd85760405162c0f29960e01b815260040160405180910390fd5b50565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60068160058110610c5757600080fd5b60209182820401919006915054906101000a900460ff1681565b6002546001600160a01b03163314610c9c576040516330cd747160e01b815260040160405180910390fd5b6002805460ff60a01b1916600160a01b17905560005b6005811015610bd857807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207610ce683610592565b604051610cf39190611bcc565b60405180910390a2610d0481611d67565b9050610cb2565b60045460ff16610d2e57604051633a64231960e21b815260040160405180910390fd5b6101f460055482610d3f9190611c5e565b1115610d5e576040516352df9fe560e01b815260040160405180910390fd5b610d6f66b1a2bc2ec5000082611c8a565b3414610d8e5760405163044044a560e21b815260040160405180910390fd5b333b15610dae5760405163feed781d60e01b815260040160405180910390fd5b600354811180610dbe5750600181105b15610ddc57604051638e4353d360e01b815260040160405180910390fd5b60005b81811015610b365760085460009060ff16610e3e60055460408051426020808301919091523360601b6bffffffffffffffffffffffff191682840152605480830194909452825180830390940184526074909101909152815191012090565b610e489190611d82565b9050600060078281548110610e5f57610e5f611dc2565b90600052602060002090602091828204019190069054906101000a900460ff1660ff169050610ea033826001604051806020016040528060008152506112c2565b60058054600190810182559093019260069082908110610ec257610ec2611dc2565b60208104919091018054601f9092166101000a60ff8181021984169382900481166001011602919091179055606460068260058110610f0357610f03611dc2565b602081049091015460ff601f9092166101000a9004161415610f2857610f2882611419565b5050610ddf565b336001600160a01b0386161480610f6957506001600160a01b038516600090815260016020908152604080832033845290915290205460ff165b610fa65760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610630565b6001600160a01b03851660009081526020818152604080832086845290915281208054849290610fd7908490611ca9565b90915550506001600160a01b0384166000908152602081815260408083208684529091528120805484929061100d908490611c5e565b909155505060408051848152602081018490526001600160a01b03808716929088169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b156111055760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e61906110a39033908a90899089908990600401611b4f565b602060405180830381600087803b1580156110bd57600080fd5b505af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f59190611934565b6001600160e01b03191614611112565b6001600160a01b03841615155b61112e5760405162461bcd60e51b815260040161063090611bdf565b5050505050565b6002546001600160a01b03163314611160576040516330cd747160e01b815260040160405180910390fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6060816111e05750506040805180820190915260018152600360fc1b602082015290565b8160005b811561120a57806111f481611d67565b91506112039050600a83611c76565b91506111e4565b60008167ffffffffffffffff81111561122557611225611dd8565b6040519080825280601f01601f19166020018201604052801561124f576020820181803683370190505b5090505b84156112ba57611264600183611ca9565b9150611271600a86611d82565b61127c906030611c5e565b60f81b81838151811061129157611291611dc2565b60200101906001600160f81b031916908160001a9053506112b3600a86611c76565b9450611253565b949350505050565b6001600160a01b038416600090815260208181526040808320868452909152812080548492906112f3908490611c5e565b909155505060408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46001600160a01b0384163b156113ea5760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e6190611388903390600090899089908990600401611b4f565b602060405180830381600087803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190611934565b6001600160e01b031916146113f7565b6001600160a01b03841615155b6114135760405162461bcd60e51b815260040161063090611bdf565b50505050565b60085460079061142e9060019060ff16611cc0565b60ff168154811061144157611441611dc2565b90600052602060002090602091828204019190069054906101000a900460ff166007828154811061147457611474611dc2565b6000918252602080832090820401805460ff948516601f9093166101000a92830292850219169190911790556008805490921691906114b283611d0f565b91906101000a81548160ff021916908360ff1602179055505050565b8280546114da90611d2c565b90600052602060002090601f0160209004810192826114fc5760008555611542565b82601f1061151557805160ff1916838001178555611542565b82800160010185558215611542579182015b82811115611542578251825591602001919060010190611527565b5061154e929150611552565b5090565b5b8082111561154e5760008155600101611553565b600067ffffffffffffffff83111561158157611581611dd8565b611594601f8401601f1916602001611c09565b90508281528383830111156115a857600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146115d657600080fd5b919050565b600082601f8301126115ec57600080fd5b813560206116016115fc83611c3a565b611c09565b80838252828201915082860187848660051b890101111561162157600080fd5b60005b8581101561164057813584529284019290840190600101611624565b5090979650505050505050565b803580151581146115d657600080fd5b600082601f83011261166e57600080fd5b61167d83833560208501611567565b9392505050565b60006020828403121561169657600080fd5b61167d826115bf565b600080604083850312156116b257600080fd5b6116bb836115bf565b91506116c9602084016115bf565b90509250929050565b600080600080600060a086880312156116ea57600080fd5b6116f3866115bf565b9450611701602087016115bf565b9350604086013567ffffffffffffffff8082111561171e57600080fd5b61172a89838a016115db565b9450606088013591508082111561174057600080fd5b61174c89838a016115db565b9350608088013591508082111561176257600080fd5b5061176f8882890161165d565b9150509295509295909350565b600080600080600060a0868803121561179457600080fd5b61179d866115bf565b94506117ab602087016115bf565b93506040860135925060608601359150608086013567ffffffffffffffff8111156117d557600080fd5b61176f8882890161165d565b600080604083850312156117f457600080fd5b6117fd836115bf565b91506116c96020840161164d565b6000806040838503121561181e57600080fd5b611827836115bf565b946020939093013593505050565b6000806040838503121561184857600080fd5b823567ffffffffffffffff8082111561186057600080fd5b818501915085601f83011261187457600080fd5b813560206118846115fc83611c3a565b8083825282820191508286018a848660051b89010111156118a457600080fd5b600096505b848710156118ce576118ba816115bf565b8352600196909601959183019183016118a9565b50965050860135925050808211156118e557600080fd5b506118f2858286016115db565b9150509250929050565b60006020828403121561190e57600080fd5b61167d8261164d565b60006020828403121561192957600080fd5b813561167d81611dee565b60006020828403121561194657600080fd5b815161167d81611dee565b60006020828403121561196357600080fd5b813567ffffffffffffffff81111561197a57600080fd5b8201601f8101841361198b57600080fd5b6112ba84823560208401611567565b6000602082840312156119ac57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156119e3578151875295820195908201906001016119c7565b509495945050505050565b60008151808452611a06816020860160208601611ce3565b601f01601f19169290920160200192915050565b60008151611a2c818560208601611ce3565b9290920192915050565b600080845481600182811c915080831680611a5257607f831692505b6020808410821415611a7257634e487b7160e01b86526022600452602486fd5b818015611a865760018114611a9757611ac4565b60ff19861689528489019650611ac4565b60008b81526020902060005b86811015611abc5781548b820152908501908301611aa3565b505084890196505b505050505050611ae8611ad78286611a1a565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b0386811682528516602082015260a060408201819052600090611b1d908301866119b3565b8281036060840152611b2f81866119b3565b90508281036080840152611b4381856119ee565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611b89908301846119ee565b979650505050505050565b60208152600061167d60208301846119b3565b604081526000611bba60408301856119b3565b8281036020840152611ae881856119b3565b60208152600061167d60208301846119ee565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715611c3257611c32611dd8565b604052919050565b600067ffffffffffffffff821115611c5457611c54611dd8565b5060051b60200190565b60008219821115611c7157611c71611d96565b500190565b600082611c8557611c85611dac565b500490565b6000816000190483118215151615611ca457611ca4611d96565b500290565b600082821015611cbb57611cbb611d96565b500390565b600060ff821660ff841680821015611cda57611cda611d96565b90039392505050565b60005b83811015611cfe578181015183820152602001611ce6565b838111156114135750506000910152565b600060ff821680611d2257611d22611d96565b6000190192915050565b600181811c90821680611d4057607f821691505b60208210811415611d6157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611d7b57611d7b611d96565b5060010190565b600082611d9157611d91611dac565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610bd857600080fdfea2646970667358221220c533d9b8124f713823343c563b58b6b39969ff1a7c019ecaf786872b11c9af6f64736f6c63430008070033
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.