Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
0 Colonists
Holders
1,288
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ColonistsLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Colonist
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/security/Pausable.sol"; import "./ERC721.sol"; import "./interfaces/IColonist.sol"; import "./interfaces/ITColonist.sol"; import "./interfaces/IHColonist.sol"; import "./interfaces/IEON.sol"; import "./interfaces/IPytheas.sol"; import "./interfaces/IRandomizer.sol"; contract Colonist is IColonist, ERC721, Pausable { /*/////////////////////////////////////////////////////// Global STATE ///////////////////////////////////////////////////////*/ event ColonistMinted(uint256 indexed tokenId); event ColonistBurned(uint256 indexed tokenId); event ColonistStolen(uint256 indexed tokenId); event ColonistNamed(uint256 indexed tokenId, string newName); // toggle naming bool public namingActive; // max number of tokens that can be minted - 60000 uint256 public MAX_TOKENS = 60000; // number of ERC721s for sale in eth uint256 public PAID_TOKENS = 10000; // an arbatrary counter to dish out IDs uint16 public override minted; // counter of colonist in circulation uint256 public override totalCir; // counter of _mint to honors amount uint256 public honorMints; // max number of colonist to mint to honor members uint256 public constant maxHonorMints = 450; // cost to name uint256 public constant costToName = 2000 ether; // mapping from tokenId to a struct containing the colonist token's traits mapping(uint256 => Colonist) public tokenTraitsColonist; // mapping from tokenId to a stuct containing the honors colonist mapping(uint256 => HColonist) public tokenTraitsHonors; mapping(uint256 => bool) public isHonors; // mapping from hashed(tokenTrait) to the tokenId it's associated with // used to ensure there are no duplicates mapping(uint256 => uint256) public existingCombinations; // Mapping from token ID to name mapping(uint256 => string) private _tokenName; mapping(uint256 => bool) private _hasName; // Mapping if certain name string has already been reserved mapping(string => bool) private _nameReserved; // address => used in allowing system communication between contracts mapping(address => bool) private admins; // list of probabilities for each trait type uint8[][8] public rarities; uint8[][8] public aliases; // reference to the Pytheas for transfers without approval IPytheas public pytheas; // reference to Traits ITColonist public traits; // reference to honors traits IHColonist public honorTraits; //reference to Randomizer IRandomizer public randomizer; //reference to EON IEON public EON; address public pirateGames; address private imperialGuildTreasury; address public auth; /** * instantiates contract and rarity tables */ constructor() ERC721("ShatteredEon", "Colonists") { auth = msg.sender; admins[msg.sender] = true; // Saves users gas by making lookup O(1) // A.J. Walker's Alias Algorithm // Credit to WolfGame devs // colonist // background rarities[0] = [255, 255, 255, 255, 255]; aliases[0] = [4, 1, 0, 3, 2]; // body rarities[1] = [255, 220, 210, 255, 220, 200]; aliases[1] = [0, 1, 2, 3, 4, 5]; // shirt rarities[2] = [120, 150, 150, 120, 20, 200, 255, 255, 190, 255, 40]; aliases[2] = [6, 7, 6, 7, 9, 6, 7, 9, 0, 1, 0]; // jacket rarities[3] = [ 20, 100, 205, 185, 235, 195, 215, 190, 215, 130, 40, 30, 220, 255 ]; aliases[3] = [3, 13, 5, 13, 13, 9, 13, 7, 13, 3, 13, 13, 12, 13]; // jaw rarities[4] = [255, 255, 100, 110, 250, 125, 245, 40, 200, 35, 255]; aliases[4] = [0, 1, 1, 6, 0, 2, 1, 6, 9, 2, 1]; // hair rarities[5] = [ 245, 245, 120, 245, 200, 245, 245, 122, 220, 225, 175, 40, 25, 233 ]; aliases[5] = [1, 4, 5, 8, 9, 13, 13, 9, 8, 5, 4, 1, 13, 1]; // eyes rarities[6] = [60, 225, 200, 50, 90, 200, 145, 125, 50, 255]; aliases[6] = [2, 1, 9, 1, 9, 5, 1, 1, 9, 9]; //held rarities[7] = [ 220, 245, 139, 120, 120, 230, 190, 35, 40, 245, 190, 90, 134 ]; aliases[7] = [0, 1, 5, 4, 6, 10, 1, 0, 1, 5, 4, 1, 0]; } modifier onlyOwner() { require(msg.sender == auth); _; } function setContracts( address _traits, address _honorTraits, address _pytheas, address _rand, address _pirateGames, address _eon ) external onlyOwner { traits = ITColonist(_traits); honorTraits = IHColonist(_honorTraits); pytheas = IPytheas(_pytheas); randomizer = IRandomizer(_rand); EON = IEON(_eon); pirateGames = _pirateGames; } /*/////////////////////////////////////////////////////////////// EXTERNAL //////////////////////////////////////////////////////////////*/ /** * Mint a token - any payment / game logic should be handled in the game contract. * This will just generate random traits and mint a token to a designated address. */ function _mintColonist(address recipient, uint256 seed) external override { require(admins[msg.sender], "Only Admins"); require(minted + 1 <= MAX_TOKENS, "All colonists deployed"); minted++; totalCir++; generateColonist(minted, seed); if (tx.origin != recipient && recipient != address(pytheas)) { // Stolen! emit ColonistStolen(minted); } _mint(recipient, minted); } function _mintHonors(address recipient, uint8 id) external whenNotPaused { require(admins[msg.sender], "Only Admins"); require(minted + 1 <= MAX_TOKENS, "All colonist deployed"); minted++; totalCir++; generateHonors(minted, id); _mint(recipient, minted); } function _mintToHonors(address recipient, uint256 seed) external override { require(admins[msg.sender], "Only Admins"); require(minted + 1 <= MAX_TOKENS, "All colonists deployed"); require( honorMints + 1 <= maxHonorMints, "All honor mints have been sent" ); minted++; totalCir++; generateColonist(minted, seed); _mint(recipient, minted); } /** * Burn a token - any game logic should be handled before this function. */ function burn(uint256 tokenId) external override whenNotPaused { require(admins[msg.sender]); require( ownerOf[tokenId] == tx.origin || msg.sender == address(pytheas) || msg.sender == address(pirateGames), "Colonist: Not Owner" ); totalCir--; _burn(tokenId); emit ColonistBurned(tokenId); } function transferFrom( address from, address to, uint256 id ) public override(ERC721, IColonist) { require(from == ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); // allow admin contracts to send without approval if (!admins[msg.sender]) { require( msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED" ); } // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { balanceOf[from]--; balanceOf[to]++; } ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function generateColonist(uint256 tokenId, uint256 seed) internal returns (Colonist memory t) { t = selectColTraits(tokenId, seed); if (existingCombinations[structToHashCol(t)] == 0) { tokenTraitsColonist[tokenId] = t; existingCombinations[structToHashCol(t)] = tokenId; emit ColonistMinted(tokenId); return t; } return generateColonist(tokenId, randomizer.random(seed)); } function generateHonors(uint256 tokenId, uint8 id) internal returns (HColonist memory q) { q.Legendary = id; tokenTraitsHonors[minted] = q; isHonors[minted] = true; emit ColonistMinted(tokenId); return q; } /** * uses A.J. Walker's Alias algorithm for O(1) rarity table lookup * ensuring O(1) instead of O(n) reduces mint cost by more than 50% * probability & alias tables are generated off-chain beforehand * @param seed portion of the 256 bit seed to remove trait correlation * @param traitType the trait type to select a trait for * @return the ID of the randomly selected trait */ function selectTrait(uint16 seed, uint8 traitType) internal view returns (uint8) { uint8 trait = uint8(seed) % uint8(rarities[traitType].length); // If a selected random trait probability is selected (biased coin) return that trait if (seed >> 8 < rarities[traitType][trait]) return trait; return aliases[traitType][trait]; } function selectGen(uint256 tokenId) internal pure returns (uint8 gen) { if (tokenId <= (60000 / 6)) return 0; //0k-10k if (tokenId <= (60000 * 8) / 24) return 1; //10k-20k if (tokenId <= (60000 * 12) / 24) return 2; //20k-30k if (tokenId <= (60000 * 16) / 24) return 3; //30k-40k if (tokenId <= (60000 * 20) / 24) return 4; //40k-50k if (tokenId <= (60000 * 22) / 24) return 5; //50k-60k else return 5; } /** * selects the species and all of its traits based on the seed value * @param seed a pseudorandom 256 bit number to derive traits from * @return t - a struct of randomly selected traits */ function selectColTraits(uint256 tokenId, uint256 seed) internal view returns (Colonist memory t) { t.isColonist = true; seed >>= 16; t.background = selectTrait(uint16(seed & 0xFFFF), 0); seed >>= 16; t.body = selectTrait(uint16(seed & 0xFFFF), 1); seed >>= 16; t.shirt = selectTrait(uint16(seed & 0xFFFF), 2); seed >>= 16; t.jacket = selectTrait(uint16(seed & 0xFFFF), 3); seed >>= 16; t.jaw = selectTrait(uint16(seed & 0xFFFF), 4); seed >>= 16; t.hair = selectTrait(uint16(seed & 0xFFFF), 5); seed >>= 16; t.eyes = selectTrait(uint16(seed & 0xFFFF), 6); seed >>= 16; t.held = selectTrait(uint16(seed & 0xFFFF), 7); uint8 gen = selectGen(tokenId); t.gen = gen; } function structToHashCol(Colonist memory s) internal pure returns (uint256) { return uint256( keccak256( abi.encodePacked( s.background, s.body, s.shirt, s.jacket, s.jaw, s.hair, s.eyes, s.held, s.gen ) ) ); } function tokenNameByIndex(uint256 index) public view returns (string memory) { return _tokenName[index]; } function isNameReserved(string memory nameString) public view returns (bool) { return _nameReserved[toLower(nameString)]; } function hasBeenNamed(uint256 tokenId) public view returns (bool) { return _hasName[tokenId]; } function nameColonist(uint256 tokenId, string memory newName) public { require(namingActive == true, "naming not yet available"); require(ownerOf[tokenId] == msg.sender, "Not your colonist to name"); require(hasBeenNamed(tokenId) == false, "Colonist already named"); require(validateName(newName) == true, "Not a valid name"); require(isNameReserved(newName) == false, "Name already reserved"); // IERC20(_eonAddress).transferFrom(msg.sender, address(this), NAME_CHANGE_PRICE); toggleReserveName(newName, true); toggleHasName(tokenId, true); _tokenName[tokenId] = newName; EON.burn(_msgSender(), costToName); emit ColonistNamed(tokenId, newName); } /** * @dev Reserves the name if isReserve is set to true, de-reserves if set to false */ function toggleReserveName(string memory str, bool isReserve) internal { _nameReserved[toLower(str)] = isReserve; } function toggleHasName(uint256 tokenId, bool hasName) internal { _hasName[tokenId] = hasName; } /** * @dev Check if the name string is valid (Alphanumeric and spaces without leading or trailing space) */ function validateName(string memory str) public pure returns (bool) { bytes memory b = bytes(str); if (b.length < 1) return false; if (b.length > 25) return false; // Cannot be longer than 25 characters if (b[0] == 0x20) return false; // Leading space if (b[b.length - 1] == 0x20) return false; // Trailing space bytes1 lastChar = b[0]; for (uint256 i; i < b.length; i++) { bytes1 char = b[i]; if (char == 0x20 && lastChar == 0x20) return false; // Cannot contain continous spaces if ( !(char >= 0x30 && char <= 0x39) && //9-0 !(char >= 0x41 && char <= 0x5A) && //A-Z !(char >= 0x61 && char <= 0x7A) && //a-z !(char == 0x20) //space ) return false; lastChar = char; } return true; } /** * @dev Converts the string to lowercase */ function toLower(string memory str) public pure returns (string memory) { bytes memory bStr = bytes(str); bytes memory bLower = new bytes(bStr.length); for (uint256 i = 0; i < bStr.length; i++) { // Uppercase character if ((uint8(bStr[i]) >= 65) && (uint8(bStr[i]) <= 90)) { bLower[i] = bytes1(uint8(bStr[i]) + 32); } else { bLower[i] = bStr[i]; } } return string(bLower); } function getMaxTokens() external view override returns (uint256) { return MAX_TOKENS; } function getPaidTokens() external view override returns (uint256) { return PAID_TOKENS; } /** * enables owner to pause / unpause minting */ function setPaused(bool _paused) external onlyOwner { if (_paused) _pause(); else _unpause(); } /** * enables an address to mint / burn * @param addr the address to enable */ function addAdmin(address addr) external onlyOwner { admins[addr] = true; } /** * disables an address from minting / burning * @param addr the address to disbale */ function removeAdmin(address addr) external onlyOwner { admins[addr] = false; } function transferOwnership(address newOwner) external onlyOwner { auth = newOwner; } function toggleNameing(bool _namingActive) external onlyOwner { namingActive = _namingActive; } function setImperialGuildTreasury(address _imperialTreasury) external onlyOwner { imperialGuildTreasury = _imperialTreasury; } /** Traits */ function getTokenTraitsColonist(uint256 tokenId) external view override(IColonist) returns (Colonist memory) { return tokenTraitsColonist[tokenId]; } function getTokenTraitsHonors(uint256 tokenId) external view override(IColonist) returns (HColonist memory) { return tokenTraitsHonors[tokenId]; } function tokenURI(uint256 tokenId) public view override returns (string memory) { if (isHonors[tokenId]) { return honorTraits.tokenURI(tokenId); } return traits.tokenURI(tokenId); } function isOwner(uint256 tokenId) public view returns (address) { address addr = ownerOf[tokenId]; return addr; } function safeTransferFrom( address from, address to, uint256 id ) public override(ERC721, IColonist) { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, "" ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public override(ERC721, IColonist) { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, data ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } // For OpenSeas function owner() public view virtual returns (address) { return auth; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern, minimalist, and gas efficient ERC-721 implementation. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) /// @dev Note that balanceOf does not revert if passed the zero address, in defiance of the ERC. abstract contract ERC721 { /*/////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); event Approval( address indexed owner, address indexed spender, uint256 indexed tokenId ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /*/////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 id) public view virtual returns (string memory); /*/////////////////////////////////////////////////////////////// ERC721 STORAGE //////////////////////////////////////////////////////////////*/ mapping(address => uint256) public balanceOf; mapping(uint256 => address) public ownerOf; mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*/////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*/////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 id) public virtual { address owner = ownerOf[id]; require( msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED" ); getApproved[id] = spender; emit Approval(owner, spender, id); } function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom( address from, address to, uint256 id ) public virtual { require(from == ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); require( msg.sender == from || msg.sender == getApproved[id] || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED" ); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { balanceOf[from]--; balanceOf[to]++; } ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, "" ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes memory data ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received( msg.sender, from, id, data ) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } /*/////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*/////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 id) internal virtual { require(to != address(0), "INVALID_RECIPIENT"); require(ownerOf[id] == address(0), "ALREADY_MINTED"); // Counter overflow is incredibly unrealistic. unchecked { balanceOf[to]++; } ownerOf[id] = to; emit Transfer(address(0), to, id); } function _burn(uint256 id) internal virtual { address owner = ownerOf[id]; require(ownerOf[id] != address(0), "NOT_MINTED"); // Ownership check above ensures no underflow. unchecked { balanceOf[owner]--; } delete ownerOf[id]; delete getApproved[id]; emit Transfer(owner, address(0), id); } } /// @notice A generic interface for a contract which properly accepts ERC721 tokens. /// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) interface ERC721TokenReceiver { function onERC721Received( address operator, address from, uint256 id, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IColonist { // struct to store each Colonist's traits struct Colonist { bool isColonist; uint8 background; uint8 body; uint8 shirt; uint8 jacket; uint8 jaw; uint8 eyes; uint8 hair; uint8 held; uint8 gen; } struct HColonist { uint8 Legendary; } function transferFrom( address from, address to, uint256 tokenId ) external; function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) external; function safeTransferFrom( address from, address to, uint256 tokenId ) external; function isOwner(uint256 tokenId) external view returns (address); function minted() external returns (uint16); function totalCir() external returns (uint256); function _mintColonist(address recipient, uint256 seed) external; function _mintToHonors(address recipient, uint256 seed) external; function _mintHonors(address recipient, uint8 id) external; function burn(uint256 tokenId) external; function getMaxTokens() external view returns (uint256); function getPaidTokens() external view returns (uint256); function getTokenTraitsColonist(uint256 tokenId) external view returns (Colonist memory); function getTokenTraitsHonors(uint256 tokenId) external view returns (HColonist memory); function tokenNameByIndex(uint256 index) external view returns (string memory); function hasBeenNamed(uint256 tokenId) external view returns (bool); function nameColonist(uint256 tokenId, string memory newName) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IEON { function mint(address to, uint256 amount) external; function burn(address from, uint256 amount) external; function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IHColonist { function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IPytheas { function addColonistToPytheas(address account, uint16[] calldata tokenIds) external; function claimColonistFromPytheas(address account, uint16[] calldata tokenIds, bool unstake) external; function getColonistMined(address account, uint16 tokenId) external returns (uint256); function handleJoinPirates(address addr, uint16 tokenId) external; function payUp( uint16 tokenId, uint256 amtMined, address addr ) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IRandomizer { function random(uint256) external returns (uint256); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface ITColonist { function tokenURI(uint256 tokenId) external view returns (string memory); }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "details": { "constantOptimizer": true, "cse": true, "deduplicate": true, "inliner": true, "jumpdestRemover": true, "orderLiterals": true, "peephole": true, "yul": true, "yulDetails": { "optimizerSteps": "dhfoDgvulfnTUtnIf", "stackAllocation": true } }, "runs": 2000 }, "remappings": [], "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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ColonistBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ColonistMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"newName","type":"string"}],"name":"ColonistNamed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ColonistStolen","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"EON","outputs":[{"internalType":"contract IEON","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAID_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"_mintColonist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint8","name":"id","type":"uint8"}],"name":"_mintHonors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"_mintToHonors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"aliases","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"costToName","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"existingCombinations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPaidTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenTraitsColonist","outputs":[{"components":[{"internalType":"bool","name":"isColonist","type":"bool"},{"internalType":"uint8","name":"background","type":"uint8"},{"internalType":"uint8","name":"body","type":"uint8"},{"internalType":"uint8","name":"shirt","type":"uint8"},{"internalType":"uint8","name":"jacket","type":"uint8"},{"internalType":"uint8","name":"jaw","type":"uint8"},{"internalType":"uint8","name":"eyes","type":"uint8"},{"internalType":"uint8","name":"hair","type":"uint8"},{"internalType":"uint8","name":"held","type":"uint8"},{"internalType":"uint8","name":"gen","type":"uint8"}],"internalType":"struct IColonist.Colonist","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenTraitsHonors","outputs":[{"components":[{"internalType":"uint8","name":"Legendary","type":"uint8"}],"internalType":"struct IColonist.HColonist","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"hasBeenNamed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"honorMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"honorTraits","outputs":[{"internalType":"contract IHColonist","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isHonors","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nameString","type":"string"}],"name":"isNameReserved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHonorMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newName","type":"string"}],"name":"nameColonist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"namingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pirateGames","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pytheas","outputs":[{"internalType":"contract IPytheas","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomizer","outputs":[{"internalType":"contract IRandomizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarities","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_traits","type":"address"},{"internalType":"address","name":"_honorTraits","type":"address"},{"internalType":"address","name":"_pytheas","type":"address"},{"internalType":"address","name":"_rand","type":"address"},{"internalType":"address","name":"_pirateGames","type":"address"},{"internalType":"address","name":"_eon","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_imperialTreasury","type":"address"}],"name":"setImperialGuildTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","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":"string","name":"str","type":"string"}],"name":"toLower","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_namingActive","type":"bool"}],"name":"toggleNameing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenNameByIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenTraitsColonist","outputs":[{"internalType":"bool","name":"isColonist","type":"bool"},{"internalType":"uint8","name":"background","type":"uint8"},{"internalType":"uint8","name":"body","type":"uint8"},{"internalType":"uint8","name":"shirt","type":"uint8"},{"internalType":"uint8","name":"jacket","type":"uint8"},{"internalType":"uint8","name":"jaw","type":"uint8"},{"internalType":"uint8","name":"eyes","type":"uint8"},{"internalType":"uint8","name":"hair","type":"uint8"},{"internalType":"uint8","name":"held","type":"uint8"},{"internalType":"uint8","name":"gen","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenTraitsHonors","outputs":[{"internalType":"uint8","name":"Legendary","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCir","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"traits","outputs":[{"internalType":"contract ITColonist","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"validateName","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
608060405261ea606007556127106008553480156200001d57600080fd5b50604080518082018252600c81526b29b430ba3a32b932b222b7b760a11b602080830191825283518085019094526009845268436f6c6f6e6973747360b81b908401528151919291620000739160009162000772565b5080516200008990600190602084019062000772565b50506006805460ff19908116909155602b80546001600160a01b0319163390811790915560009081526013602090815260408083208054909416600117909355825160a08101845260ff8082529181018290529283018190526060830181905260808301529091506014906200010492910190600562000801565b506040805160a081018252600481526001602082015260009181019190915260036060820152600260808201526200014190601c90600562000801565b506040805160c08101825260ff80825260dc6020830181905260d2938301939093526060820152608081019190915260c860a08201526200018790601590600662000801565b506040805160c08101825260008152600160208201526002918101919091526003606082015260046080820152600560a0820152620001cb90601d90600662000801565b50604080516101608101825260788082526096602083018190529282019290925260608101919091526014608082015260c860a082015260ff60c0820181905260e0820181905260be61010083015261012082015260286101408201526200023890601690600b62000801565b50604080516101608101825260068082526007602083018190529282018190526060820183905260096080830181905260a083019190915260c082019290925260e0810191909152600061010082018190526001610120830152610140820152620002a890601e90600b62000801565b50604080516101c081018252601481526064602082015260cd9181019190915260b9606082015260eb608082015260c360a082015260d760c0820181905260be60e083015261010082015260826101208201526028610140820152601e61016082015260dc61018082015260ff6101a08201526200032b90601790600e62000801565b50604080516101c0810182526003808252600d602083018190526005938301939093526060820183905260808201839052600960a083015260c08201839052600760e0830152610100820183905261012082015261014081018290526101608101829052600c6101808201526101a0810191909152620003b090601f90600e62000801565b50604080516101608101825260ff80825260208201819052606492820192909252606e606082015260fa6080820152607d60a082015260f560c0820152602860e082015260c861010082015260236101208201526101408101919091526200041d90601890600b62000801565b5060408051610160810182526000808252600160208084018290529383018190526006606084018190526080840192909252600260a0840181905260c0840182905260e084019290925260096101008401526101208301919091526101408201526200048c9190600b62000801565b50604080516101c08101825260f5808252602082018190526078928201929092526060810182905260c8608082015260a0810182905260c0810191909152607a60e082015260dc61010082015260e161012082015260af61014082015260286101608201526019610180820181905260e96101a08301526200051091600e62000801565b50604080516101c08101825260018082526004602083018190526005938301849052600860608401819052600960808501819052600d60a0860181905260c0860181905260e0860191909152610100850191909152610120840185905261014084019190915261016083018290526101808301526101a082015290601c906200059e92910190600e62000801565b506040805161014081018252603c815260e1602082015260c8918101829052603260608201819052605a608083015260a0820192909252609160c0820152607d60e082015261010081019190915260ff6101208201526200060490601a90600a62000801565b5060408051610140810182526002815260016020820181905260099282018390526060820181905260808201839052600560a083015260c0820181905260e082015261010081018290526101208101919091526200066790602290600a62000801565b50604080516101a08101825260dc815260f560208201819052608b92820192909252607860608201819052608082015260e660a082015260be60c08201819052602360e08301526028610100830152610120820192909252610140810191909152605a6101608201526086610180820152620006e890601b90600d62000801565b50604080516101a0810182526000808252600160208301819052600593830184905260046060840181905260066080850152600a60a085015260c0840182905260e0840183905261010084018290526101208401949094526101408301939093526101608201929092526101808101919091526200076b90602390600d62000801565b5062000902565b8280546200078090620008d1565b90600052602060002090601f016020900481019282620007a45760008555620007ef565b82601f10620007bf57805160ff1916838001178555620007ef565b82800160010185558215620007ef579182015b82811115620007ef578251825591602001919060010190620007d2565b50620007fd929150620008a4565b5090565b82805482825590600052602060002090601f01602090048101928215620007ef5791602002820160005b838211156200086b57835183826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026200082b565b80156200089a5782816101000a81549060ff02191690556001016020816000010492830192600103026200086b565b5050620007fd9291505b5b80821115620007fd5760008155600101620008a5565b634e487b7160e01b600052602260045260246000fd5b600281046001821680620008e657607f821691505b60208210811415620008fc57620008fc620008bb565b50919050565b6138ee80620009126000396000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c806375ab9b76116101de578063b656f09d1161010f578063d41d416d116100ad578063e985e9c51161007c578063e985e9c514610a00578063f10fb58414610a2e578063f2fde38b14610a41578063f47c84c514610a5457600080fd5b8063d41d416d14610994578063de9375f2146109b7578063e1fc334f146109ca578063e6073869146109dd57600080fd5b8063bb5434de116100e9578063bb5434de1461095c578063bea093d214610965578063c084f54014610978578063c87b56dd1461098157600080fd5b8063b656f09d14610923578063b6a7195314610936578063b88d4fde1461094957600080fd5b806395d89b411161017c578063a22cb46511610156578063a22cb465146108ad578063a70e847b146108c0578063ab32e8a3146108c9578063b07ba6a7146108dc57600080fd5b806395d89b41146108725780639ffdb65a1461087a578063a1b8f3741461088d57600080fd5b80638f58e7a8116101b85780638f58e7a81461082057806392b086f41461084357806393de58231461084c5780639416b4231461085f57600080fd5b806375ab9b76146107ec57806383c79d43146107ff5780638da5cb5b1461080f57600080fd5b80634018b1f8116102c35780636352211e116102615780636d522418116102305780636d522418146107005780637048027514610713578063704b3bec1461072657806370a08231146107cc57600080fd5b80636352211e1461069c578063693fe4db146106c55780636abcded1146106d85780636ca865ba146106e057600080fd5b806347486c751161029d57806347486c75146105345780634806e930146105465780634f02c420146106765780635c975abb1461069157600080fd5b80634018b1f8146104fd57806342842e0e1461050e57806342966c681461052157600080fd5b806316c38b3c116103305780632463a55a1161030a5780632463a55a1461048e57806333df4b2c146104a157806336838391146104c157806339c7639c146104d457600080fd5b806316c38b3c146104555780631785f53c1461046857806323b872dd1461047b57600080fd5b8063081812fc1161036c578063081812fc146103e6578063095ea7b31461041c5780631509f2941461042f57806315b56d101461044257600080fd5b806301ffc9a71461039357806302815835146103bc57806306fdde03146103d1575b600080fd5b6103a66103a1366004612928565b610a5d565b6040516103b3919061295b565b60405180910390f35b6103cf6103ca36600461297c565b610b42565b005b6103d9610b73565b6040516103b391906129fb565b61040f6103f4366004612a1d565b6004602052600090815260409020546001600160a01b031681565b6040516103b39190612a58565b6103cf61042a366004612a7a565b610c01565b6103cf61043d366004612ab7565b610cd8565b6103a6610450366004612bc6565b610d1e565b6103cf61046336600461297c565b610d51565b6103cf610476366004612ab7565b610d81565b6103cf610489366004612c01565b610db9565b6103cf61049c366004612c51565b610f42565b6104b46104af366004612cdb565b610fd6565b6040516103b39190612d06565b6104b46104cf366004612cdb565b61101c565b61040f6104e2366004612a1d565b6000908152600360205260409020546001600160a01b031690565b6008545b6040516103b39190612d1a565b6103cf61051c366004612c01565b61102c565b6103cf61052f366004612a1d565b61111c565b6006546103a690610100900460ff1681565b610669610554366004612a1d565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152506000908152600c6020908152604091829020825161014081018452905460ff808216151583526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152650100000000008104841660a083015266010000000000008104841660c08301526701000000000000008104841660e0830152680100000000000000008104841692820192909252690100000000000000000090910490911661012082015290565b6040516103b39190612de3565b6009546106849061ffff1681565b6040516103b39190612dfc565b60065460ff166103a6565b61040f6106aa366004612a1d565b6003602052600090815260409020546001600160a01b031681565b6103cf6106d3366004612a7a565b611207565b600754610501565b6028546106f3906001600160a01b031681565b6040516103b39190612e29565b6103d961070e366004612a1d565b61130c565b6103cf610721366004612ab7565b6113ae565b6107b6610734366004612a1d565b600c6020526000908152604090205460ff80821691610100810482169162010000820481169163010000008104821691640100000000820481169165010000000000810482169166010000000000008204811691670100000000000000810482169168010000000000000000820481169169010000000000000000009004168a565b6040516103b39a99989796959493929190612e37565b6105016107da366004612ab7565b60026020526000908152604090205481565b6026546106f3906001600160a01b031681565b610501686c6b935b8bbd40000081565b602b546001600160a01b031661040f565b6103a661082e366004612a1d565b60009081526011602052604090205460ff1690565b6105016101c281565b6024546106f3906001600160a01b031681565b6103d961086d366004612bc6565b6113e9565b6103d961157c565b6103a6610888366004612bc6565b611589565b61050161089b366004612a1d565b600f6020526000908152604090205481565b6103cf6108bb366004612ecc565b611840565b610501600a5481565b60295461040f906001600160a01b031681565b6109166108ea366004612a1d565b6040805160208082018352600091829052928152600d835281902081519283019091525460ff16815290565b6040516103b39190612f0b565b6103cf610931366004612a7a565b6118af565b6103cf610944366004612f2d565b6119e0565b6103cf610957366004612f60565b611ac1565b610501600b5481565b6103cf610973366004612fdf565b611bb4565b61050160085481565b6103d961098f366004612a1d565b611d7a565b6104b46109a2366004612a1d565b600d6020526000908152604090205460ff1681565b602b5461040f906001600160a01b031681565b6025546106f3906001600160a01b031681565b6103a66109eb366004612a1d565b600e6020526000908152604090205460ff1681565b6103a6610a0e36600461302d565b600560209081526000928352604080842090915290825290205460ff1681565b6027546106f3906001600160a01b031681565b6103cf610a4f366004612ab7565b611e6b565b61050160075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610af057507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610b3c57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b602b546001600160a01b03163314610b5957600080fd5b600680549115156101000261ff0019909216919091179055565b60008054610b8090613076565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac90613076565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b505050505081565b6000818152600360205260409020546001600160a01b031633811480610c4a57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610c6f5760405162461bcd60e51b8152600401610c66906130d7565b60405180910390fd5b600082815260046020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b602b546001600160a01b03163314610cef57600080fd5b602a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60006012610d2b836113e9565b604051610d389190613109565b9081526040519081900360200190205460ff1692915050565b602b546001600160a01b03163314610d6857600080fd5b8015610d7957610d76611eb1565b50565b610d76611f20565b602b546001600160a01b03163314610d9857600080fd5b6001600160a01b03166000908152601360205260409020805460ff19169055565b6000818152600360205260409020546001600160a01b03848116911614610df25760405162461bcd60e51b8152600401610c6690613145565b6001600160a01b038216610e185760405162461bcd60e51b8152600401610c6690613187565b3360009081526013602052604090205460ff16610ea657336001600160a01b0384161480610e5c57506000818152600460205260409020546001600160a01b031633145b80610e8a57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b610ea65760405162461bcd60e51b8152600401610c66906130d7565b6001600160a01b03808416600081815260026020908152604080832080546000190190559386168083528483208054600101905585835260038252848320805473ffffffffffffffffffffffffffffffffffffffff199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b602b546001600160a01b03163314610f5957600080fd5b6025805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039889161790915560268054821696881696909617909555602480548616948716949094179093556027805485169286169290921790915560288054841692851692909217909155602980549092169216919091179055565b60148260088110610fe657600080fd5b018181548110610ff557600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b601c8260088110610fe657600080fd5b611037838383610db9565b6001600160a01b0382163b15806110fb57506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0384169063150b7a029061109490339088908790600401613197565b6020604051808303816000875af11580156110b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d791906131e3565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6111175760405162461bcd60e51b8152600401610c6690613236565b505050565b60065460ff161561113f5760405162461bcd60e51b8152600401610c6690613278565b3360009081526013602052604090205460ff1661115b57600080fd5b6000818152600360205260409020546001600160a01b031632148061118a57506024546001600160a01b031633145b8061119f57506029546001600160a01b031633145b6111bb5760405162461bcd60e51b8152600401610c66906132ba565b600a80549060006111cb836132e0565b91905055506111d981611f73565b60405181907f04758eba0e440c213770b194262bd033c02424a06dd27169bdb94d5e1582c6b790600090a250565b3360009081526013602052604090205460ff166112365760405162461bcd60e51b8152600401610c6690613329565b60075460095461124b9061ffff166001613339565b61ffff16111561126d5760405162461bcd60e51b8152600401610c6690613394565b6101c2600b54600161127f91906133a4565b111561129d5760405162461bcd60e51b8152600401610c66906133e9565b6009805461ffff169060006112b1836133f9565b91906101000a81548161ffff021916908361ffff16021790555050600a60008154809291906112df9061341b565b90915550506009546112f59061ffff1682612030565b5060095461130890839061ffff166123b8565b5050565b600081815260106020526040902080546060919061132990613076565b80601f016020809104026020016040519081016040528092919081815260200182805461135590613076565b80156113a25780601f10611377576101008083540402835291602001916113a2565b820191906000526020600020905b81548152906001019060200180831161138557829003601f168201915b50505050509050919050565b602b546001600160a01b031633146113c557600080fd5b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b606060008290506000815167ffffffffffffffff81111561140c5761140c612ad8565b6040519080825280601f01601f191660200182016040528015611436576020820181803683370190505b50905060005b82518110156115745760418382815181106114595761145961342f565b016020015160f81c108015906114895750605a83828151811061147e5761147e61342f565b016020015160f81c11155b15611503578281815181106114a0576114a061342f565b602001015160f81c60f81b60f81c60206114ba9190613445565b60f81b8282815181106114cf576114cf61342f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611562565b8281815181106115155761151561342f565b602001015160f81c60f81b8282815181106115325761153261342f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8061156c8161341b565b91505061143c565b509392505050565b60018054610b8090613076565b6000808290506001815110156115a25750600092915050565b6019815111156115b55750600092915050565b806000815181106115c8576115c861342f565b6020910101516001600160f81b031916600160fd1b14156115ec5750600092915050565b80600182516115fb9190613466565b8151811061160b5761160b61342f565b6020910101516001600160f81b031916600160fd1b141561162f5750600092915050565b6000816000815181106116445761164461342f565b01602001516001600160f81b031916905060005b82518110156118355760008382815181106116755761167561342f565b01602001516001600160f81b0319169050600160fd1b811480156116a65750600160fd1b6001600160f81b03198416145b156116b75750600095945050505050565b7f30000000000000000000000000000000000000000000000000000000000000006001600160f81b031982161080159061171b57507f39000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b15801561178957507f41000000000000000000000000000000000000000000000000000000000000006001600160f81b031982161080159061178757507f5a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b80156117f657507f61000000000000000000000000000000000000000000000000000000000000006001600160f81b03198216108015906117f457507f7a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b80156118105750600160fd1b6001600160f81b0319821614155b156118215750600095945050505050565b91508061182d8161341b565b915050611658565b506001949350505050565b3360008181526005602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31906118a390859061295b565b60405180910390a35050565b3360009081526013602052604090205460ff166118de5760405162461bcd60e51b8152600401610c6690613329565b6007546009546118f39061ffff166001613339565b61ffff1611156119155760405162461bcd60e51b8152600401610c6690613394565b6009805461ffff16906000611929836133f9565b91906101000a81548161ffff021916908361ffff16021790555050600a60008154809291906119579061341b565b909155505060095461196d9061ffff1682612030565b50326001600160a01b0383161480159061199557506024546001600160a01b03838116911614155b156119ce5760095460405161ffff909116907fb2e017be121bc5ebd43482997d41cf19fa0e0e024f0befb11c71e35083e2555190600090a25b60095461130890839061ffff166123b8565b60065460ff1615611a035760405162461bcd60e51b8152600401610c6690613278565b3360009081526013602052604090205460ff16611a325760405162461bcd60e51b8152600401610c6690613329565b600754600954611a479061ffff166001613339565b61ffff161115611a695760405162461bcd60e51b8152600401610c66906134af565b6009805461ffff16906000611a7d836133f9565b91906101000a81548161ffff021916908361ffff16021790555050600a6000815480929190611aab9061341b565b90915550506009546112f59061ffff168261248b565b611acc848484610db9565b6001600160a01b0383163b1580611b9257506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0385169063150b7a0290611b2b9033908990889088906004016134bf565b6020604051808303816000875af1158015611b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6e91906131e3565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b611bae5760405162461bcd60e51b8152600401610c6690613236565b50505050565b60065460ff610100909104161515600114611be15760405162461bcd60e51b8152600401610c6690613535565b6000828152600360205260409020546001600160a01b03163314611c175760405162461bcd60e51b8152600401610c6690613577565b60008281526011602052604090205460ff1615611c465760405162461bcd60e51b8152600401610c66906135b9565b611c4f81611589565b1515600114611c705760405162461bcd60e51b8152600401610c66906135fb565b611c7981610d1e565b15611c965760405162461bcd60e51b8152600401610c669061363d565b611ca1816001612509565b6000828152601160209081526040808320805460ff19166001179055601082529091208251611cd292840190612855565b506028546001600160a01b0316639dc29fac33686c6b935b8bbd4000006040518363ffffffff1660e01b8152600401611d0c92919061364d565b600060405180830381600087803b158015611d2657600080fd5b505af1158015611d3a573d6000803e3d6000fd5b50505050817f557ccefdb621ec53187da31464572dbe5ad475e5cc300ba8d528cb8134de1aae82604051611d6e91906129fb565b60405180910390a25050565b6000818152600e602052604090205460609060ff1615611e22576026546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c87b56dd90611ddd908590600401612d1a565b600060405180830381865afa158015611dfa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b3c91908101906136c0565b6025546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c87b56dd90611ddd908590600401612d1a565b602b546001600160a01b03163314611e8257600080fd5b602b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60065460ff1615611ed45760405162461bcd60e51b8152600401610c6690613278565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f093390565b604051611f169190612a58565b60405180910390a1565b60065460ff16611f425760405162461bcd60e51b8152600401610c669061372d565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611f09565b6000818152600360205260409020546001600160a01b031680611fa85760405162461bcd60e51b8152600401610c669061376f565b6001600160a01b0381166000818152600260209081526040808320805460001901905585835260038252808320805473ffffffffffffffffffffffffffffffffffffffff1990811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915261208b8383612546565b9050600f600061209a836126a4565b8152602001908152602001600020546000141561231a576000838152600c602090815260408083208451815493860151928601516060870151608088015160a089015160c08a015160e08b0151610100808d01516101208e01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909c1698151561ff0019169890981760ff9a8b16909102177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1662010000968a16969096027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1695909517630100000094891694909402939093177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff16640100000000928816929092027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff16919091176501000000000091871691909102177fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff166601000000000000918616919091027fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff161767010000000000000091851691909102177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1668010000000000000000918416919091027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1617690100000000000000000092909316919091029190911790558390600f906122d6846126a4565b815260200190815260200160002081905550827f917ce909ba5a9cf4c718eefa4de73bf0e8c10a72be6ea753886cb66293ac3f6260405160405180910390a2610b3c565b6027546040517fb863bd370000000000000000000000000000000000000000000000000000000081526123b19185916001600160a01b039091169063b863bd3790612369908790600401612d1a565b6020604051808303816000875af1158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ac919061378a565b612030565b9392505050565b6001600160a01b0382166123de5760405162461bcd60e51b8152600401610c6690613187565b6000818152600360205260409020546001600160a01b0316156124135760405162461bcd60e51b8152600401610c66906137dd565b6001600160a01b0382166000818152600260209081526040808320805460010190558483526003909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b604080516020808201835260ff84811683526009805461ffff9081166000908152600d855286812086518154951660ff199586161790559154168152600e909252838220805490911660011790559151909184917f917ce909ba5a9cf4c718eefa4de73bf0e8c10a72be6ea753886cb66293ac3f629190a292915050565b806012612515846113e9565b6040516125229190613109565b908152604051908190036020019020805491151560ff199092169190911790555050565b6040805161014081018252600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526001815260109290921c91906125ae9061ffff841690612704565b60ff16602082015260109190911c906125cc61ffff83166001612704565b60ff16604082015260109190911c906125ea61ffff83166002612704565b60ff16606082015260109190911c9061260861ffff83166003612704565b60ff16608082015260109190911c9061262661ffff83166004612704565b60ff1660a082015260109190911c9061264461ffff83166005612704565b60ff1660e082015260109190911c9061266261ffff83166006612704565b60ff1660c082015260109190911c9061268061ffff83166007612704565b60ff166101008201526000612694846127e0565b60ff166101208301525092915050565b6020808201516040808401516060850151608086015160a087015160e088015160c08901516101008a01516101208b0151975160009a6126e69a999101613805565b60408051601f19818403018152919052805160209091012092915050565b60008060148360ff166008811061271d5761271d61342f565b0154612729908561389d565b905060148360ff16600881106127415761274161342f565b018160ff16815481106127565761275661342f565b60009182526020918290209181049091015460ff601f9092166101000a90048116600886901c909116101561278c579050610b3c565b601c8360ff16600881106127a2576127a261342f565b018160ff16815481106127b7576127b761342f565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b600061271082116127f357506000919050565b614e20821161280457506001919050565b617530821161281557506002919050565b619c40821161282657506003919050565b61c350821161283757506004919050565b61d6d8821161284857506005919050565b506005919050565b919050565b82805461286190613076565b90600052602060002090601f01602090048101928261288357600085556128c9565b82601f1061289c57805160ff19168380011785556128c9565b828001600101855582156128c9579182015b828111156128c95782518255916020019190600101906128ae565b506128d59291506128d9565b5090565b5b808211156128d557600081556001016128da565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610d7657600080fd5b8035610b3c816128ee565b60006020828403121561293d5761293d600080fd5b6000612949848461291d565b949350505050565b8015155b82525050565b60208101610b3c8284612951565b801515612912565b8035610b3c81612969565b60006020828403121561299157612991600080fd5b60006129498484612971565b60005b838110156129b85781810151838201526020016129a0565b83811115611bae5750506000910152565b60006129d3825190565b8084526020840193506129ea81856020860161299d565b601f01601f19169290920192915050565b602080825281016123b181846129c9565b80612912565b8035610b3c81612a0c565b600060208284031215612a3257612a32600080fd5b60006129498484612a12565b60006001600160a01b038216610b3c565b61295581612a3e565b60208101610b3c8284612a4f565b61291281612a3e565b8035610b3c81612a66565b60008060408385031215612a9057612a90600080fd5b6000612a9c8585612a6f565b9250506020612aad85828601612a12565b9150509250929050565b600060208284031215612acc57612acc600080fd5b60006129498484612a6f565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715612b1457612b14612ad8565b6040525050565b6000612b2660405190565b90506128508282612aee565b600067ffffffffffffffff821115612b4c57612b4c612ad8565b601f19601f83011660200192915050565b82818337506000910152565b6000612b7c612b7784612b32565b612b1b565b905082815260208101848484011115612b9757612b97600080fd5b611574848285612b5d565b600082601f830112612bb657612bb6600080fd5b8135612949848260208601612b69565b600060208284031215612bdb57612bdb600080fd5b813567ffffffffffffffff811115612bf557612bf5600080fd5b61294984828501612ba2565b600080600060608486031215612c1957612c19600080fd5b6000612c258686612a6f565b9350506020612c3686828701612a6f565b9250506040612c4786828701612a12565b9150509250925092565b60008060008060008060c08789031215612c6d57612c6d600080fd5b6000612c798989612a6f565b9650506020612c8a89828a01612a6f565b9550506040612c9b89828a01612a6f565b9450506060612cac89828a01612a6f565b9350506080612cbd89828a01612a6f565b92505060a0612cce89828a01612a6f565b9150509295509295509295565b60008060408385031215612cf157612cf1600080fd5b6000612a9c8585612a12565b60ff8116612955565b60208101610b3c8284612cfd565b80612955565b60208101610b3c8284612d14565b8051612d348382612951565b506020810151612d476020840182612cfd565b506040810151612d5a6040840182612cfd565b506060810151612d6d6060840182612cfd565b506080810151612d806080840182612cfd565b5060a0810151612d9360a0840182612cfd565b5060c0810151612da660c0840182612cfd565b5060e0810151612db960e0840182612cfd565b50610100810151612dce610100840182612cfd565b50610120810151611117610120840182612cfd565b6101408101610b3c8284612d28565b61ffff8116612955565b60208101610b3c8284612df2565b6000610b3c82612a3e565b6000610b3c82612e0a565b61295581612e15565b60208101610b3c8284612e20565b6101408101612e46828d612951565b612e53602083018c612cfd565b612e60604083018b612cfd565b612e6d606083018a612cfd565b612e7a6080830189612cfd565b612e8760a0830188612cfd565b612e9460c0830187612cfd565b612ea160e0830186612cfd565b612eaf610100830185612cfd565b612ebd610120830184612cfd565b9b9a5050505050505050505050565b60008060408385031215612ee257612ee2600080fd5b6000612eee8585612a6f565b9250506020612aad85828601612971565b80516111178382612cfd565b60208101610b3c8284612eff565b60ff8116612912565b8035610b3c81612f19565b60008060408385031215612f4357612f43600080fd5b6000612f4f8585612a6f565b9250506020612aad85828601612f22565b60008060008060808587031215612f7957612f79600080fd5b6000612f858787612a6f565b9450506020612f9687828801612a6f565b9350506040612fa787828801612a12565b925050606085013567ffffffffffffffff811115612fc757612fc7600080fd5b612fd387828801612ba2565b91505092959194509250565b60008060408385031215612ff557612ff5600080fd5b60006130018585612a12565b925050602083013567ffffffffffffffff81111561302157613021600080fd5b612aad85828601612ba2565b6000806040838503121561304357613043600080fd5b600061304f8585612a6f565b9250506020612aad85828601612a6f565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061308a57607f821691505b6020821081141561309d5761309d613060565b50919050565b600e8152602081017f4e4f545f415554484f52495a4544000000000000000000000000000000000000815290505b60200190565b60208082528101610b3c816130a3565b60006130f1825190565b6130ff81856020860161299d565b9290920192915050565b610b3c81836130e7565b600a8152602081017f57524f4e475f46524f4d00000000000000000000000000000000000000000000815290506130d1565b60208082528101610b3c81613113565b60118152602081017f494e56414c49445f524543495049454e54000000000000000000000000000000815290506130d1565b60208082528101610b3c81613155565b608081016131a58286612a4f565b6131b26020830185612a4f565b6131bf6040830184612d14565b8181036060830152600081526020810195945050505050565b8051610b3c816128ee565b6000602082840312156131f8576131f8600080fd5b600061294984846131d8565b60108152602081017f554e534146455f524543495049454e5400000000000000000000000000000000815290506130d1565b60208082528101610b3c81613204565b60108152602081017f5061757361626c653a2070617573656400000000000000000000000000000000815290506130d1565b60208082528101610b3c81613246565b60138152602081017f436f6c6f6e6973743a204e6f74204f776e657200000000000000000000000000815290506130d1565b60208082528101610b3c81613288565b634e487b7160e01b600052601160045260246000fd5b6000816132ef576132ef6132ca565b506000190190565b600b8152602081017f4f6e6c792041646d696e73000000000000000000000000000000000000000000815290506130d1565b60208082528101610b3c816132f7565b61ffff8116905061ffff8216915060008261ffff0382111561335d5761335d6132ca565b500190565b60168152602081017f416c6c20636f6c6f6e69737473206465706c6f79656400000000000000000000815290506130d1565b60208082528101610b3c81613362565b6000821982111561335d5761335d6132ca565b601e8152602081017f416c6c20686f6e6f72206d696e74732068617665206265656e2073656e740000815290506130d1565b60208082528101610b3c816133b7565b61ffff81169050600061ffff821415613414576134146132ca565b5060010190565b6000600019821415613414576134146132ca565b634e487b7160e01b600052603260045260246000fd5b60ff8116905060ff8216915060008260ff0382111561335d5761335d6132ca565b600082821015613478576134786132ca565b500390565b60158152602081017f416c6c20636f6c6f6e697374206465706c6f7965640000000000000000000000815290506130d1565b60208082528101610b3c8161347d565b608081016134cd8287612a4f565b6134da6020830186612a4f565b6134e76040830185612d14565b81810360608301526134f981846129c9565b9695505050505050565b60188152602081017f6e616d696e67206e6f742079657420617661696c61626c650000000000000000815290506130d1565b60208082528101610b3c81613503565b60198152602081017f4e6f7420796f757220636f6c6f6e69737420746f206e616d6500000000000000815290506130d1565b60208082528101610b3c81613545565b60168152602081017f436f6c6f6e69737420616c7265616479206e616d656400000000000000000000815290506130d1565b60208082528101610b3c81613587565b60108152602081017f4e6f7420612076616c6964206e616d6500000000000000000000000000000000815290506130d1565b60208082528101610b3c816135c9565b60158152602081017f4e616d6520616c72656164792072657365727665640000000000000000000000815290506130d1565b60208082528101610b3c8161360b565b6040810161365b8285612a4f565b6123b16020830184612d14565b6000613676612b7784612b32565b90508281526020810184848401111561369157613691600080fd5b61157484828561299d565b600082601f8301126136b0576136b0600080fd5b8151612949848260208601613668565b6000602082840312156136d5576136d5600080fd5b815167ffffffffffffffff8111156136ef576136ef600080fd5b6129498482850161369c565b60148152602081017f5061757361626c653a206e6f7420706175736564000000000000000000000000815290506130d1565b60208082528101610b3c816136fb565b600a8152602081017f4e4f545f4d494e54454400000000000000000000000000000000000000000000815290506130d1565b60208082528101610b3c8161373d565b8051610b3c81612a0c565b60006020828403121561379f5761379f600080fd5b6000612949848461377f565b600e8152602081017f414c52454144595f4d494e544544000000000000000000000000000000000000815290506130d1565b60208082528101610b3c816137ab565b6000610b3c8260f81b90565b61295560ff82166137ed565b61380f818b6137f9565b60010161381c818a6137f9565b60010161382981896137f9565b60010161383681886137f9565b60010161384381876137f9565b60010161385081866137f9565b60010161385d81856137f9565b60010161386a81846137f9565b60010161387781836137f9565b6001019998505050505050505050565b634e487b7160e01b600052601260045260246000fd5b60ff91821691166000826138b3576138b3613887565b50069056fea2646970667358221220304cd02a588c1f0cef0eed9a6095a8de48abd0d9655ca12869ad94ba5bc1c3f764736f6c634300080b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061038e5760003560e01c806375ab9b76116101de578063b656f09d1161010f578063d41d416d116100ad578063e985e9c51161007c578063e985e9c514610a00578063f10fb58414610a2e578063f2fde38b14610a41578063f47c84c514610a5457600080fd5b8063d41d416d14610994578063de9375f2146109b7578063e1fc334f146109ca578063e6073869146109dd57600080fd5b8063bb5434de116100e9578063bb5434de1461095c578063bea093d214610965578063c084f54014610978578063c87b56dd1461098157600080fd5b8063b656f09d14610923578063b6a7195314610936578063b88d4fde1461094957600080fd5b806395d89b411161017c578063a22cb46511610156578063a22cb465146108ad578063a70e847b146108c0578063ab32e8a3146108c9578063b07ba6a7146108dc57600080fd5b806395d89b41146108725780639ffdb65a1461087a578063a1b8f3741461088d57600080fd5b80638f58e7a8116101b85780638f58e7a81461082057806392b086f41461084357806393de58231461084c5780639416b4231461085f57600080fd5b806375ab9b76146107ec57806383c79d43146107ff5780638da5cb5b1461080f57600080fd5b80634018b1f8116102c35780636352211e116102615780636d522418116102305780636d522418146107005780637048027514610713578063704b3bec1461072657806370a08231146107cc57600080fd5b80636352211e1461069c578063693fe4db146106c55780636abcded1146106d85780636ca865ba146106e057600080fd5b806347486c751161029d57806347486c75146105345780634806e930146105465780634f02c420146106765780635c975abb1461069157600080fd5b80634018b1f8146104fd57806342842e0e1461050e57806342966c681461052157600080fd5b806316c38b3c116103305780632463a55a1161030a5780632463a55a1461048e57806333df4b2c146104a157806336838391146104c157806339c7639c146104d457600080fd5b806316c38b3c146104555780631785f53c1461046857806323b872dd1461047b57600080fd5b8063081812fc1161036c578063081812fc146103e6578063095ea7b31461041c5780631509f2941461042f57806315b56d101461044257600080fd5b806301ffc9a71461039357806302815835146103bc57806306fdde03146103d1575b600080fd5b6103a66103a1366004612928565b610a5d565b6040516103b3919061295b565b60405180910390f35b6103cf6103ca36600461297c565b610b42565b005b6103d9610b73565b6040516103b391906129fb565b61040f6103f4366004612a1d565b6004602052600090815260409020546001600160a01b031681565b6040516103b39190612a58565b6103cf61042a366004612a7a565b610c01565b6103cf61043d366004612ab7565b610cd8565b6103a6610450366004612bc6565b610d1e565b6103cf61046336600461297c565b610d51565b6103cf610476366004612ab7565b610d81565b6103cf610489366004612c01565b610db9565b6103cf61049c366004612c51565b610f42565b6104b46104af366004612cdb565b610fd6565b6040516103b39190612d06565b6104b46104cf366004612cdb565b61101c565b61040f6104e2366004612a1d565b6000908152600360205260409020546001600160a01b031690565b6008545b6040516103b39190612d1a565b6103cf61051c366004612c01565b61102c565b6103cf61052f366004612a1d565b61111c565b6006546103a690610100900460ff1681565b610669610554366004612a1d565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152506000908152600c6020908152604091829020825161014081018452905460ff808216151583526101008083048216948401949094526201000082048116948301949094526301000000810484166060830152640100000000810484166080830152650100000000008104841660a083015266010000000000008104841660c08301526701000000000000008104841660e0830152680100000000000000008104841692820192909252690100000000000000000090910490911661012082015290565b6040516103b39190612de3565b6009546106849061ffff1681565b6040516103b39190612dfc565b60065460ff166103a6565b61040f6106aa366004612a1d565b6003602052600090815260409020546001600160a01b031681565b6103cf6106d3366004612a7a565b611207565b600754610501565b6028546106f3906001600160a01b031681565b6040516103b39190612e29565b6103d961070e366004612a1d565b61130c565b6103cf610721366004612ab7565b6113ae565b6107b6610734366004612a1d565b600c6020526000908152604090205460ff80821691610100810482169162010000820481169163010000008104821691640100000000820481169165010000000000810482169166010000000000008204811691670100000000000000810482169168010000000000000000820481169169010000000000000000009004168a565b6040516103b39a99989796959493929190612e37565b6105016107da366004612ab7565b60026020526000908152604090205481565b6026546106f3906001600160a01b031681565b610501686c6b935b8bbd40000081565b602b546001600160a01b031661040f565b6103a661082e366004612a1d565b60009081526011602052604090205460ff1690565b6105016101c281565b6024546106f3906001600160a01b031681565b6103d961086d366004612bc6565b6113e9565b6103d961157c565b6103a6610888366004612bc6565b611589565b61050161089b366004612a1d565b600f6020526000908152604090205481565b6103cf6108bb366004612ecc565b611840565b610501600a5481565b60295461040f906001600160a01b031681565b6109166108ea366004612a1d565b6040805160208082018352600091829052928152600d835281902081519283019091525460ff16815290565b6040516103b39190612f0b565b6103cf610931366004612a7a565b6118af565b6103cf610944366004612f2d565b6119e0565b6103cf610957366004612f60565b611ac1565b610501600b5481565b6103cf610973366004612fdf565b611bb4565b61050160085481565b6103d961098f366004612a1d565b611d7a565b6104b46109a2366004612a1d565b600d6020526000908152604090205460ff1681565b602b5461040f906001600160a01b031681565b6025546106f3906001600160a01b031681565b6103a66109eb366004612a1d565b600e6020526000908152604090205460ff1681565b6103a6610a0e36600461302d565b600560209081526000928352604080842090915290825290205460ff1681565b6027546106f3906001600160a01b031681565b6103cf610a4f366004612ab7565b611e6b565b61050160075481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610af057507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b80610b3c57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b602b546001600160a01b03163314610b5957600080fd5b600680549115156101000261ff0019909216919091179055565b60008054610b8090613076565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac90613076565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b505050505081565b6000818152600360205260409020546001600160a01b031633811480610c4a57506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b610c6f5760405162461bcd60e51b8152600401610c66906130d7565b60405180910390fd5b600082815260046020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b602b546001600160a01b03163314610cef57600080fd5b602a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60006012610d2b836113e9565b604051610d389190613109565b9081526040519081900360200190205460ff1692915050565b602b546001600160a01b03163314610d6857600080fd5b8015610d7957610d76611eb1565b50565b610d76611f20565b602b546001600160a01b03163314610d9857600080fd5b6001600160a01b03166000908152601360205260409020805460ff19169055565b6000818152600360205260409020546001600160a01b03848116911614610df25760405162461bcd60e51b8152600401610c6690613145565b6001600160a01b038216610e185760405162461bcd60e51b8152600401610c6690613187565b3360009081526013602052604090205460ff16610ea657336001600160a01b0384161480610e5c57506000818152600460205260409020546001600160a01b031633145b80610e8a57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b610ea65760405162461bcd60e51b8152600401610c66906130d7565b6001600160a01b03808416600081815260026020908152604080832080546000190190559386168083528483208054600101905585835260038252848320805473ffffffffffffffffffffffffffffffffffffffff199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b602b546001600160a01b03163314610f5957600080fd5b6025805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b039889161790915560268054821696881696909617909555602480548616948716949094179093556027805485169286169290921790915560288054841692851692909217909155602980549092169216919091179055565b60148260088110610fe657600080fd5b018181548110610ff557600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b601c8260088110610fe657600080fd5b611037838383610db9565b6001600160a01b0382163b15806110fb57506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0384169063150b7a029061109490339088908790600401613197565b6020604051808303816000875af11580156110b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d791906131e3565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b6111175760405162461bcd60e51b8152600401610c6690613236565b505050565b60065460ff161561113f5760405162461bcd60e51b8152600401610c6690613278565b3360009081526013602052604090205460ff1661115b57600080fd5b6000818152600360205260409020546001600160a01b031632148061118a57506024546001600160a01b031633145b8061119f57506029546001600160a01b031633145b6111bb5760405162461bcd60e51b8152600401610c66906132ba565b600a80549060006111cb836132e0565b91905055506111d981611f73565b60405181907f04758eba0e440c213770b194262bd033c02424a06dd27169bdb94d5e1582c6b790600090a250565b3360009081526013602052604090205460ff166112365760405162461bcd60e51b8152600401610c6690613329565b60075460095461124b9061ffff166001613339565b61ffff16111561126d5760405162461bcd60e51b8152600401610c6690613394565b6101c2600b54600161127f91906133a4565b111561129d5760405162461bcd60e51b8152600401610c66906133e9565b6009805461ffff169060006112b1836133f9565b91906101000a81548161ffff021916908361ffff16021790555050600a60008154809291906112df9061341b565b90915550506009546112f59061ffff1682612030565b5060095461130890839061ffff166123b8565b5050565b600081815260106020526040902080546060919061132990613076565b80601f016020809104026020016040519081016040528092919081815260200182805461135590613076565b80156113a25780601f10611377576101008083540402835291602001916113a2565b820191906000526020600020905b81548152906001019060200180831161138557829003601f168201915b50505050509050919050565b602b546001600160a01b031633146113c557600080fd5b6001600160a01b03166000908152601360205260409020805460ff19166001179055565b606060008290506000815167ffffffffffffffff81111561140c5761140c612ad8565b6040519080825280601f01601f191660200182016040528015611436576020820181803683370190505b50905060005b82518110156115745760418382815181106114595761145961342f565b016020015160f81c108015906114895750605a83828151811061147e5761147e61342f565b016020015160f81c11155b15611503578281815181106114a0576114a061342f565b602001015160f81c60f81b60f81c60206114ba9190613445565b60f81b8282815181106114cf576114cf61342f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611562565b8281815181106115155761151561342f565b602001015160f81c60f81b8282815181106115325761153261342f565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b8061156c8161341b565b91505061143c565b509392505050565b60018054610b8090613076565b6000808290506001815110156115a25750600092915050565b6019815111156115b55750600092915050565b806000815181106115c8576115c861342f565b6020910101516001600160f81b031916600160fd1b14156115ec5750600092915050565b80600182516115fb9190613466565b8151811061160b5761160b61342f565b6020910101516001600160f81b031916600160fd1b141561162f5750600092915050565b6000816000815181106116445761164461342f565b01602001516001600160f81b031916905060005b82518110156118355760008382815181106116755761167561342f565b01602001516001600160f81b0319169050600160fd1b811480156116a65750600160fd1b6001600160f81b03198416145b156116b75750600095945050505050565b7f30000000000000000000000000000000000000000000000000000000000000006001600160f81b031982161080159061171b57507f39000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b15801561178957507f41000000000000000000000000000000000000000000000000000000000000006001600160f81b031982161080159061178757507f5a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b80156117f657507f61000000000000000000000000000000000000000000000000000000000000006001600160f81b03198216108015906117f457507f7a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b80156118105750600160fd1b6001600160f81b0319821614155b156118215750600095945050505050565b91508061182d8161341b565b915050611658565b506001949350505050565b3360008181526005602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31906118a390859061295b565b60405180910390a35050565b3360009081526013602052604090205460ff166118de5760405162461bcd60e51b8152600401610c6690613329565b6007546009546118f39061ffff166001613339565b61ffff1611156119155760405162461bcd60e51b8152600401610c6690613394565b6009805461ffff16906000611929836133f9565b91906101000a81548161ffff021916908361ffff16021790555050600a60008154809291906119579061341b565b909155505060095461196d9061ffff1682612030565b50326001600160a01b0383161480159061199557506024546001600160a01b03838116911614155b156119ce5760095460405161ffff909116907fb2e017be121bc5ebd43482997d41cf19fa0e0e024f0befb11c71e35083e2555190600090a25b60095461130890839061ffff166123b8565b60065460ff1615611a035760405162461bcd60e51b8152600401610c6690613278565b3360009081526013602052604090205460ff16611a325760405162461bcd60e51b8152600401610c6690613329565b600754600954611a479061ffff166001613339565b61ffff161115611a695760405162461bcd60e51b8152600401610c66906134af565b6009805461ffff16906000611a7d836133f9565b91906101000a81548161ffff021916908361ffff16021790555050600a6000815480929190611aab9061341b565b90915550506009546112f59061ffff168261248b565b611acc848484610db9565b6001600160a01b0383163b1580611b9257506040517f150b7a0200000000000000000000000000000000000000000000000000000000808252906001600160a01b0385169063150b7a0290611b2b9033908990889088906004016134bf565b6020604051808303816000875af1158015611b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6e91906131e3565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b611bae5760405162461bcd60e51b8152600401610c6690613236565b50505050565b60065460ff610100909104161515600114611be15760405162461bcd60e51b8152600401610c6690613535565b6000828152600360205260409020546001600160a01b03163314611c175760405162461bcd60e51b8152600401610c6690613577565b60008281526011602052604090205460ff1615611c465760405162461bcd60e51b8152600401610c66906135b9565b611c4f81611589565b1515600114611c705760405162461bcd60e51b8152600401610c66906135fb565b611c7981610d1e565b15611c965760405162461bcd60e51b8152600401610c669061363d565b611ca1816001612509565b6000828152601160209081526040808320805460ff19166001179055601082529091208251611cd292840190612855565b506028546001600160a01b0316639dc29fac33686c6b935b8bbd4000006040518363ffffffff1660e01b8152600401611d0c92919061364d565b600060405180830381600087803b158015611d2657600080fd5b505af1158015611d3a573d6000803e3d6000fd5b50505050817f557ccefdb621ec53187da31464572dbe5ad475e5cc300ba8d528cb8134de1aae82604051611d6e91906129fb565b60405180910390a25050565b6000818152600e602052604090205460609060ff1615611e22576026546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c87b56dd90611ddd908590600401612d1a565b600060405180830381865afa158015611dfa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b3c91908101906136c0565b6025546040517fc87b56dd0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c87b56dd90611ddd908590600401612d1a565b602b546001600160a01b03163314611e8257600080fd5b602b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60065460ff1615611ed45760405162461bcd60e51b8152600401610c6690613278565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f093390565b604051611f169190612a58565b60405180910390a1565b60065460ff16611f425760405162461bcd60e51b8152600401610c669061372d565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611f09565b6000818152600360205260409020546001600160a01b031680611fa85760405162461bcd60e51b8152600401610c669061376f565b6001600160a01b0381166000818152600260209081526040808320805460001901905585835260038252808320805473ffffffffffffffffffffffffffffffffffffffff1990811690915560049092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081019190915261208b8383612546565b9050600f600061209a836126a4565b8152602001908152602001600020546000141561231a576000838152600c602090815260408083208451815493860151928601516060870151608088015160a089015160c08a015160e08b0151610100808d01516101208e01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909c1698151561ff0019169890981760ff9a8b16909102177fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff1662010000968a16969096027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1695909517630100000094891694909402939093177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff16640100000000928816929092027fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff16919091176501000000000091871691909102177fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff166601000000000000918616919091027fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff161767010000000000000091851691909102177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1668010000000000000000918416919091027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1617690100000000000000000092909316919091029190911790558390600f906122d6846126a4565b815260200190815260200160002081905550827f917ce909ba5a9cf4c718eefa4de73bf0e8c10a72be6ea753886cb66293ac3f6260405160405180910390a2610b3c565b6027546040517fb863bd370000000000000000000000000000000000000000000000000000000081526123b19185916001600160a01b039091169063b863bd3790612369908790600401612d1a565b6020604051808303816000875af1158015612388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ac919061378a565b612030565b9392505050565b6001600160a01b0382166123de5760405162461bcd60e51b8152600401610c6690613187565b6000818152600360205260409020546001600160a01b0316156124135760405162461bcd60e51b8152600401610c66906137dd565b6001600160a01b0382166000818152600260209081526040808320805460010190558483526003909152808220805473ffffffffffffffffffffffffffffffffffffffff19168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b604080516020808201835260ff84811683526009805461ffff9081166000908152600d855286812086518154951660ff199586161790559154168152600e909252838220805490911660011790559151909184917f917ce909ba5a9cf4c718eefa4de73bf0e8c10a72be6ea753886cb66293ac3f629190a292915050565b806012612515846113e9565b6040516125229190613109565b908152604051908190036020019020805491151560ff199092169190911790555050565b6040805161014081018252600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526001815260109290921c91906125ae9061ffff841690612704565b60ff16602082015260109190911c906125cc61ffff83166001612704565b60ff16604082015260109190911c906125ea61ffff83166002612704565b60ff16606082015260109190911c9061260861ffff83166003612704565b60ff16608082015260109190911c9061262661ffff83166004612704565b60ff1660a082015260109190911c9061264461ffff83166005612704565b60ff1660e082015260109190911c9061266261ffff83166006612704565b60ff1660c082015260109190911c9061268061ffff83166007612704565b60ff166101008201526000612694846127e0565b60ff166101208301525092915050565b6020808201516040808401516060850151608086015160a087015160e088015160c08901516101008a01516101208b0151975160009a6126e69a999101613805565b60408051601f19818403018152919052805160209091012092915050565b60008060148360ff166008811061271d5761271d61342f565b0154612729908561389d565b905060148360ff16600881106127415761274161342f565b018160ff16815481106127565761275661342f565b60009182526020918290209181049091015460ff601f9092166101000a90048116600886901c909116101561278c579050610b3c565b601c8360ff16600881106127a2576127a261342f565b018160ff16815481106127b7576127b761342f565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b600061271082116127f357506000919050565b614e20821161280457506001919050565b617530821161281557506002919050565b619c40821161282657506003919050565b61c350821161283757506004919050565b61d6d8821161284857506005919050565b506005919050565b919050565b82805461286190613076565b90600052602060002090601f01602090048101928261288357600085556128c9565b82601f1061289c57805160ff19168380011785556128c9565b828001600101855582156128c9579182015b828111156128c95782518255916020019190600101906128ae565b506128d59291506128d9565b5090565b5b808211156128d557600081556001016128da565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610d7657600080fd5b8035610b3c816128ee565b60006020828403121561293d5761293d600080fd5b6000612949848461291d565b949350505050565b8015155b82525050565b60208101610b3c8284612951565b801515612912565b8035610b3c81612969565b60006020828403121561299157612991600080fd5b60006129498484612971565b60005b838110156129b85781810151838201526020016129a0565b83811115611bae5750506000910152565b60006129d3825190565b8084526020840193506129ea81856020860161299d565b601f01601f19169290920192915050565b602080825281016123b181846129c9565b80612912565b8035610b3c81612a0c565b600060208284031215612a3257612a32600080fd5b60006129498484612a12565b60006001600160a01b038216610b3c565b61295581612a3e565b60208101610b3c8284612a4f565b61291281612a3e565b8035610b3c81612a66565b60008060408385031215612a9057612a90600080fd5b6000612a9c8585612a6f565b9250506020612aad85828601612a12565b9150509250929050565b600060208284031215612acc57612acc600080fd5b60006129498484612a6f565b634e487b7160e01b600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff82111715612b1457612b14612ad8565b6040525050565b6000612b2660405190565b90506128508282612aee565b600067ffffffffffffffff821115612b4c57612b4c612ad8565b601f19601f83011660200192915050565b82818337506000910152565b6000612b7c612b7784612b32565b612b1b565b905082815260208101848484011115612b9757612b97600080fd5b611574848285612b5d565b600082601f830112612bb657612bb6600080fd5b8135612949848260208601612b69565b600060208284031215612bdb57612bdb600080fd5b813567ffffffffffffffff811115612bf557612bf5600080fd5b61294984828501612ba2565b600080600060608486031215612c1957612c19600080fd5b6000612c258686612a6f565b9350506020612c3686828701612a6f565b9250506040612c4786828701612a12565b9150509250925092565b60008060008060008060c08789031215612c6d57612c6d600080fd5b6000612c798989612a6f565b9650506020612c8a89828a01612a6f565b9550506040612c9b89828a01612a6f565b9450506060612cac89828a01612a6f565b9350506080612cbd89828a01612a6f565b92505060a0612cce89828a01612a6f565b9150509295509295509295565b60008060408385031215612cf157612cf1600080fd5b6000612a9c8585612a12565b60ff8116612955565b60208101610b3c8284612cfd565b80612955565b60208101610b3c8284612d14565b8051612d348382612951565b506020810151612d476020840182612cfd565b506040810151612d5a6040840182612cfd565b506060810151612d6d6060840182612cfd565b506080810151612d806080840182612cfd565b5060a0810151612d9360a0840182612cfd565b5060c0810151612da660c0840182612cfd565b5060e0810151612db960e0840182612cfd565b50610100810151612dce610100840182612cfd565b50610120810151611117610120840182612cfd565b6101408101610b3c8284612d28565b61ffff8116612955565b60208101610b3c8284612df2565b6000610b3c82612a3e565b6000610b3c82612e0a565b61295581612e15565b60208101610b3c8284612e20565b6101408101612e46828d612951565b612e53602083018c612cfd565b612e60604083018b612cfd565b612e6d606083018a612cfd565b612e7a6080830189612cfd565b612e8760a0830188612cfd565b612e9460c0830187612cfd565b612ea160e0830186612cfd565b612eaf610100830185612cfd565b612ebd610120830184612cfd565b9b9a5050505050505050505050565b60008060408385031215612ee257612ee2600080fd5b6000612eee8585612a6f565b9250506020612aad85828601612971565b80516111178382612cfd565b60208101610b3c8284612eff565b60ff8116612912565b8035610b3c81612f19565b60008060408385031215612f4357612f43600080fd5b6000612f4f8585612a6f565b9250506020612aad85828601612f22565b60008060008060808587031215612f7957612f79600080fd5b6000612f858787612a6f565b9450506020612f9687828801612a6f565b9350506040612fa787828801612a12565b925050606085013567ffffffffffffffff811115612fc757612fc7600080fd5b612fd387828801612ba2565b91505092959194509250565b60008060408385031215612ff557612ff5600080fd5b60006130018585612a12565b925050602083013567ffffffffffffffff81111561302157613021600080fd5b612aad85828601612ba2565b6000806040838503121561304357613043600080fd5b600061304f8585612a6f565b9250506020612aad85828601612a6f565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061308a57607f821691505b6020821081141561309d5761309d613060565b50919050565b600e8152602081017f4e4f545f415554484f52495a4544000000000000000000000000000000000000815290505b60200190565b60208082528101610b3c816130a3565b60006130f1825190565b6130ff81856020860161299d565b9290920192915050565b610b3c81836130e7565b600a8152602081017f57524f4e475f46524f4d00000000000000000000000000000000000000000000815290506130d1565b60208082528101610b3c81613113565b60118152602081017f494e56414c49445f524543495049454e54000000000000000000000000000000815290506130d1565b60208082528101610b3c81613155565b608081016131a58286612a4f565b6131b26020830185612a4f565b6131bf6040830184612d14565b8181036060830152600081526020810195945050505050565b8051610b3c816128ee565b6000602082840312156131f8576131f8600080fd5b600061294984846131d8565b60108152602081017f554e534146455f524543495049454e5400000000000000000000000000000000815290506130d1565b60208082528101610b3c81613204565b60108152602081017f5061757361626c653a2070617573656400000000000000000000000000000000815290506130d1565b60208082528101610b3c81613246565b60138152602081017f436f6c6f6e6973743a204e6f74204f776e657200000000000000000000000000815290506130d1565b60208082528101610b3c81613288565b634e487b7160e01b600052601160045260246000fd5b6000816132ef576132ef6132ca565b506000190190565b600b8152602081017f4f6e6c792041646d696e73000000000000000000000000000000000000000000815290506130d1565b60208082528101610b3c816132f7565b61ffff8116905061ffff8216915060008261ffff0382111561335d5761335d6132ca565b500190565b60168152602081017f416c6c20636f6c6f6e69737473206465706c6f79656400000000000000000000815290506130d1565b60208082528101610b3c81613362565b6000821982111561335d5761335d6132ca565b601e8152602081017f416c6c20686f6e6f72206d696e74732068617665206265656e2073656e740000815290506130d1565b60208082528101610b3c816133b7565b61ffff81169050600061ffff821415613414576134146132ca565b5060010190565b6000600019821415613414576134146132ca565b634e487b7160e01b600052603260045260246000fd5b60ff8116905060ff8216915060008260ff0382111561335d5761335d6132ca565b600082821015613478576134786132ca565b500390565b60158152602081017f416c6c20636f6c6f6e697374206465706c6f7965640000000000000000000000815290506130d1565b60208082528101610b3c8161347d565b608081016134cd8287612a4f565b6134da6020830186612a4f565b6134e76040830185612d14565b81810360608301526134f981846129c9565b9695505050505050565b60188152602081017f6e616d696e67206e6f742079657420617661696c61626c650000000000000000815290506130d1565b60208082528101610b3c81613503565b60198152602081017f4e6f7420796f757220636f6c6f6e69737420746f206e616d6500000000000000815290506130d1565b60208082528101610b3c81613545565b60168152602081017f436f6c6f6e69737420616c7265616479206e616d656400000000000000000000815290506130d1565b60208082528101610b3c81613587565b60108152602081017f4e6f7420612076616c6964206e616d6500000000000000000000000000000000815290506130d1565b60208082528101610b3c816135c9565b60158152602081017f4e616d6520616c72656164792072657365727665640000000000000000000000815290506130d1565b60208082528101610b3c8161360b565b6040810161365b8285612a4f565b6123b16020830184612d14565b6000613676612b7784612b32565b90508281526020810184848401111561369157613691600080fd5b61157484828561299d565b600082601f8301126136b0576136b0600080fd5b8151612949848260208601613668565b6000602082840312156136d5576136d5600080fd5b815167ffffffffffffffff8111156136ef576136ef600080fd5b6129498482850161369c565b60148152602081017f5061757361626c653a206e6f7420706175736564000000000000000000000000815290506130d1565b60208082528101610b3c816136fb565b600a8152602081017f4e4f545f4d494e54454400000000000000000000000000000000000000000000815290506130d1565b60208082528101610b3c8161373d565b8051610b3c81612a0c565b60006020828403121561379f5761379f600080fd5b6000612949848461377f565b600e8152602081017f414c52454144595f4d494e544544000000000000000000000000000000000000815290506130d1565b60208082528101610b3c816137ab565b6000610b3c8260f81b90565b61295560ff82166137ed565b61380f818b6137f9565b60010161381c818a6137f9565b60010161382981896137f9565b60010161383681886137f9565b60010161384381876137f9565b60010161385081866137f9565b60010161385d81856137f9565b60010161386a81846137f9565b60010161387781836137f9565b6001019998505050505050505050565b634e487b7160e01b600052601260045260246000fd5b60ff91821691166000826138b3576138b3613887565b50069056fea2646970667358221220304cd02a588c1f0cef0eed9a6095a8de48abd0d9655ca12869ad94ba5bc1c3f764736f6c634300080b0033
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.