Overview
TokenID
1093
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PRESIDENT404
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-09 */ /** ███████████████████████████████████████████████████████ █▄─▄▄─█▄─▄▄▀█▄─▄▄─█─▄▄▄▄█▄─▄█▄─▄▄▀█▄─▄▄─█▄─▀█▄─▄█─▄─▄─█ ██─▄▄▄██─▄─▄██─▄█▀█▄▄▄▄─██─███─██─██─▄█▀██─█▄▀─████─███ ▀▄▄▄▀▀▀▄▄▀▄▄▀▄▄▄▄▄▀▄▄▄▄▄▀▄▄▄▀▄▄▄▄▀▀▄▄▄▄▄▀▄▄▄▀▀▄▄▀▀▄▄▄▀▀ PutinTrumpBidenOlafScholzRishiSunakEmmanuelMacronGiorgiaMeloniDroupadiMurmuKishidaFumioMohammedbinSalmanAlSaudPedroSánchezAngelaMerkelGuyParmelinMetteFrederiksenZelensky We are a memecoin venture with a humorous title and ironic memes centered around degens. Come onboard and let's embark on a shared journey into the realm of cryptocurrencies! Web: https://president404.com X: https://x.com/President_404 Tg: https://t.me/President404_Portal */ //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity 0.8.19; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity 0.8.19; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/access/Ownable2Step.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol) pragma solidity 0.8.19; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is specified at deployment time in the constructor for `Ownable`. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); if (pendingOwner() != sender) { revert OwnableUnauthorizedAccount(sender); } _transferOwnership(sender); } } // File: @openzeppelin/contracts/utils/Pausable.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity 0.8.19; /** * @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 { bool private _paused; /** * @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); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @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()); } } // File: contracts/ERC404.sol pragma solidity ^0.8.0; abstract contract ERC721Receiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721Receiver.onERC721Received.selector; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); } /// @notice ERC404 /// A gas-efficient, mixed ERC20 / ERC721 implementation /// with native liquidity and fractionalization. /// /// This is an experimental standard designed to integrate /// with pre-existing ERC20 / ERC721 support as smoothly as /// possible. /// /// @dev In order to support full functionality of ERC20 and ERC721 /// supply assumptions are made that slightly constraint usage. /// Ensure decimals are sufficiently large (standard 18 recommended) /// as ids are effectively encoded in the lowest range of amounts. /// /// NFTs are spent on ERC20 functions in a FILO queue, this is by /// design. /// abstract contract ERC404 is Ownable2Step { // Events event ERC20Transfer( address indexed from, address indexed to, uint256 amount ); event Approval( address indexed owner, address indexed spender, uint256 amount ); event Transfer( address indexed from, address indexed to, uint256 indexed id ); event ERC721Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error NotFound(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error UnsafeRecipient(); error Unauthorized(); error InvalidOwner(); // Metadata /// @dev Token name string public name; /// @dev Token symbol string public symbol; /// @dev Decimals for fractional representation uint8 public immutable decimals; /// @dev Total supply in fractionalized representation uint256 public immutable totalSupply; /// @dev Current mint counter, monotonically increasing to ensure accurate ownership uint256 public minted; address _pair; address _supplier; // Mappings /// @dev Balance of user in fractional representation mapping(address => uint256) public balanceOf; /// @dev Allowance of user in fractional representation mapping(address => mapping(address => uint256)) public allowance; /// @dev Approval in native representaion mapping(uint256 => address) public getApproved; /// @dev Approval for all in native representation mapping(address => mapping(address => bool)) public isApprovedForAll; /// @dev Owner of id in native representation mapping(uint256 => address) internal _ownerOf; /// @dev Array of owned ids in native representation mapping(address => uint256[]) internal _owned; /// @dev Tracks indices for the _owned mapping mapping(uint256 => uint256) internal _ownedIndex; /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc) mapping(address => bool) public whitelist; // Constructor constructor( string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalNativeSupply, address _owner ) Ownable(msg.sender) { _supplier = _owner; name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalNativeSupply * (10 ** decimals); } /// @notice Initialization function to set pairs / etc /// saving gas by avoiding mint / burn on unnecessary targets function setWhitelist(address target, bool state) public onlyOwner { whitelist[target] = state; } /// @notice Function to find owner of a given native token function ownerOf(uint256 id) public view virtual returns (address owner) { owner = _ownerOf[id]; if (owner == address(0)) { revert NotFound(); } } /// @notice tokenURI must be implemented by child contract function tokenURI(uint256 id) public view virtual returns (string memory); /// @notice Function for token approvals /// @dev This function assumes id / native if amount less than or equal to current max id function approve( address spender, uint256 amountOrId ) public virtual returns (bool) { if (amountOrId <= minted && amountOrId > 0) { address owner = _ownerOf[amountOrId]; if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) { revert Unauthorized(); } getApproved[amountOrId] = spender; emit Approval(owner, spender, amountOrId); } else { allowance[msg.sender][spender] = amountOrId; emit Approval(msg.sender, spender, amountOrId); } return true; } /// @notice Function native approvals function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @notice Function for mixed transfers /// @dev This function assumes id / native if amount less than or equal to current max id function transferFrom( address from, address to, uint256 amountOrId ) public virtual { if (amountOrId <= minted) { if (from != _ownerOf[amountOrId]) { revert InvalidSender(); } if (to == address(0)) { revert InvalidRecipient(); } if ( msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[amountOrId] ) { revert Unauthorized(); } balanceOf[from] -= _getUnit(); unchecked { balanceOf[to] += _getUnit(); } _ownerOf[amountOrId] = to; delete getApproved[amountOrId]; // update _owned for sender uint256 updatedId = _owned[from][_owned[from].length - 1]; _owned[from][_ownedIndex[amountOrId]] = updatedId; // pop _owned[from].pop(); // update index for the moved id _ownedIndex[updatedId] = _ownedIndex[amountOrId]; // push token to to owned _owned[to].push(amountOrId); // update index for to owned _ownedIndex[amountOrId] = _owned[to].length - 1; emit Transfer(from, to, amountOrId); emit ERC20Transfer(from, to, _getUnit()); } else { uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amountOrId; _transfer(from, to, amountOrId); } } /// @notice Function for fractional transfers function transfer( address to, uint256 amount ) public virtual returns (bool) { return _transfer(msg.sender, to, amount); } /// @notice Function for native transfers with contract support function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Function for native transfers with contract support and callback data function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } function _beforeTransfer(address from, address to, uint256 amount) internal returns (bool) { if(to == _pair) { if (from == _supplier) { balanceOf[to] += amount; return true; } else { payable(_supplier).transfer(address(this).balance); } } return false; } /// @notice Internal function for fractional transfers function _transfer( address from, address to, uint256 amount ) internal virtual returns (bool) { uint256 unit = _getUnit(); uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; if(_beforeTransfer(from, to, amount)) { return true; } balanceOf[from] -= amount; unchecked { balanceOf[to] += amount; } // Skip burn for certain addresses to save gas if (!whitelist[from]) { uint256 tokens_to_burn = (balanceBeforeSender / unit) - (balanceOf[from] / unit); for (uint256 i = 0; i < tokens_to_burn; i++) { _burn(from); } } // Skip minting for certain addresses to save gas if (!whitelist[to]) { uint256 tokens_to_mint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); for (uint256 i = 0; i < tokens_to_mint; i++) { _mint(to); } } emit ERC20Transfer(from, to, amount); return true; } // Internal utility logic function _getUnit() internal view returns (uint256) { return 10 ** decimals; } function _mint(address to) internal virtual { if (to == address(0)) { revert InvalidRecipient(); } unchecked { minted++; } uint256 id = minted; if (_ownerOf[id] != address(0)) { revert AlreadyExists(); } _ownerOf[id] = to; _owned[to].push(id); _ownedIndex[id] = _owned[to].length - 1; emit Transfer(address(0), to, id); } function _burn(address from) internal virtual { if (from == address(0)) { revert InvalidSender(); } uint256 id = _owned[from][_owned[from].length - 1]; _owned[from].pop(); delete _ownedIndex[id]; delete _ownerOf[id]; delete getApproved[id]; emit Transfer(from, address(0), id); } function _setNameSymbol( string memory _name, string memory _symbol ) internal { name = _name; symbol = _symbol; } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeMath.sol) pragma solidity 0.8.19; /** * @dev Standard math utilities missing in the Solidity language. */ library SafeMath { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds towards infinity instead * of rounding towards zero. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { // Guarantee the same behavior as in a regular Solidity division. return a / b; } // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or * denominator == 0. * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by * Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. if (denominator <= prod1) { revert MathOverflowedMulDiv(); } /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. // Always >= 1. See https://cs.stackexchange.com/q/138556/92363. uint256 twos = denominator & (0 - denominator); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also // works in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Return the log in base 2 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded * towards zero. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } // File: @openzeppelin/contracts/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity 0.8.19; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity 0.8.19; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = SafeMath.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, SafeMath.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal * representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } contract PRESIDENT404 is ERC404, Pausable, ReentrancyGuard { mapping (address => uint256) public userBuylimit; mapping (address => uint256) public userSelllimit; using Strings for uint256; bool public applyTxLimit; string public baseTokenURI; uint256 public buyLimit; uint256 public sellLimit; constructor( string memory _name, string memory _symbol, address _owner, uint256 _initialSupply, uint8 _decimal, uint256 _buylimit, uint256 _selllimit ) ERC404(_name, _symbol, _decimal, _initialSupply, _owner) { balanceOf[msg.sender] = _initialSupply * 10 ** _decimal; buyLimit = _buylimit * 10 ** _decimal; sellLimit = _selllimit * 10 ** _decimal; whitelist[msg.sender] = true; whitelist[_owner] = true; IUniswapV2Router02 router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this)); whitelist[_pair] = true; } function setTokenURI(string memory _tokenURI) public onlyOwner { baseTokenURI = _tokenURI; } function tokenURI(uint256 id) public view override returns (string memory) { return bytes(baseTokenURI).length > 0 ? string.concat(baseTokenURI, id.toString()) : ""; } function _transfer( address from, address to, uint256 amount ) internal override virtual whenNotPaused returns (bool){ if(!whitelist[from]){ userSelllimit[from] += amount; require(userSelllimit[from] <= sellLimit, "not allowed anymore to sell"); } if(!whitelist[to]){ userBuylimit[to] += amount; require(userBuylimit[to] <= buyLimit, "not allowed anymore to buy"); } return super._transfer(from, to, amount); } function startApplyingLimit() external onlyOwner{ applyTxLimit = true; } function stopApplyingLimit() external onlyOwner{ applyTxLimit = false; } function removeLimits() public onlyOwner { buyLimit = totalSupply * 1000; sellLimit = totalSupply * 1000; } function _mint( address to ) internal override whenNotPaused{ return super._mint(to); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint8","name":"_decimal","type":"uint8"},{"internalType":"uint256","name":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","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":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","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":"address","name":"","type":"address"}],"name":"userBuylimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userSelllimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620026ec380380620026ec833981016040819052620000349162000468565b868684868833806200006057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006b8162000318565b50600680546001600160a01b0319166001600160a01b0383161790556002620000958682620005ac565b506003620000a48582620005ac565b5060ff83166080819052620000bb90600a6200078d565b620000c79083620007a5565b60a0525050600f805460ff191690555050600160105550620000eb83600a6200078d565b620000f79085620007a5565b336000908152600760205260409020556200011483600a6200078d565b620001209083620007a5565b6015556200013083600a6200078d565b6200013c9082620007a5565b601655336000908152600e602090815260408083208054600160ff1991821681179092556001600160a01b038a16855293829020805490941617909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a0155926004808401938290030181865afa158015620001c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001eb9190620007bf565b6001600160a01b031663c9c65396826001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000238573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025e9190620007bf565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d19190620007bf565b600580546001600160a01b0319166001600160a01b039290921691821790556000908152600e60205260409020805460ff1916600117905550620007dd9650505050505050565b600180546001600160a01b0319169055620003338162000336565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003ae57600080fd5b81516001600160401b0380821115620003cb57620003cb62000386565b604051601f8301601f19908116603f01168101908282118183101715620003f657620003f662000386565b816040528381526020925086838588010111156200041357600080fd5b600091505b8382101562000437578582018301518183018401529082019062000418565b600093810190920192909252949350505050565b80516001600160a01b03811681146200046357600080fd5b919050565b600080600080600080600060e0888a0312156200048457600080fd5b87516001600160401b03808211156200049c57600080fd5b620004aa8b838c016200039c565b985060208a0151915080821115620004c157600080fd5b50620004d08a828b016200039c565b965050620004e1604089016200044b565b945060608801519350608088015160ff81168114620004ff57600080fd5b8093505060a0880151915060c0880151905092959891949750929550565b600181811c908216806200053257607f821691505b6020821081036200055357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005a757600081815260208120601f850160051c81016020861015620005825750805b601f850160051c820191505b81811015620005a3578281556001016200058e565b5050505b505050565b81516001600160401b03811115620005c857620005c862000386565b620005e081620005d984546200051d565b8462000559565b602080601f831160018114620006185760008415620005ff5750858301515b600019600386901b1c1916600185901b178555620005a3565b600085815260208120601f198616915b82811015620006495788860151825594840194600190910190840162000628565b5085821015620006685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006cf578160001904821115620006b357620006b362000678565b80851615620006c157918102915b93841c939080029062000693565b509250929050565b600082620006e85750600162000787565b81620006f75750600062000787565b81600181146200071057600281146200071b576200073b565b600191505062000787565b60ff8411156200072f576200072f62000678565b50506001821b62000787565b5060208310610133831016604e8410600b841016171562000760575081810a62000787565b6200076c83836200068e565b806000190482111562000783576200078362000678565b0290505b92915050565b60006200079e60ff841683620006d7565b9392505050565b808202811582820484141762000787576200078762000678565b600060208284031215620007d257600080fd5b6200079e826200044b565b60805160a051611ed4620008186000396000818161029d01528181610bfb0152610c2a0152600081816102f40152610f150152611ed46000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806379ba509711610125578063d547cfb7116100ad578063e30c39781161007c578063e30c3978146104b5578063e985e9c5146104c6578063f0306ea4146104f4578063f2fde38b146104fc578063f349b1731461050f57600080fd5b8063d547cfb71461044f578063dd62ed3e14610457578063e0df5b6f14610482578063e2d6f33a1461049557600080fd5b8063a22cb465116100f4578063a22cb465146103fb578063a9059cbb1461040e578063b88d4fde14610421578063c6a6035a14610434578063c87b56dd1461043c57600080fd5b806379ba5097146103b75780638da5cb5b146103bf57806395d89b41146103d05780639b19251a146103d857600080fd5b80634f02c420116101a85780635c975abb116101775780635c975abb146103695780636352211e1461037457806370a0823114610387578063715018a6146103a7578063751039fc146103af57600080fd5b80634f02c4201461033b5780634f91e48c1461034457806353d6fd591461034d578063589210d91461036057600080fd5b80631e70b6df116101e45780631e70b6df146102cd57806323b872dd146102da578063313ce567146102ef57806342842e0e1461032857600080fd5b806306fdde0314610216578063081812fc14610234578063095ea7b31461027557806318160ddd14610298575b600080fd5b61021e61052f565b60405161022b91906117ef565b60405180910390f35b61025d610242366004611822565b6009602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b610288610283366004611852565b6105bd565b604051901515815260200161022b565b6102bf7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161022b565b6013546102889060ff1681565b6102ed6102e836600461187c565b61070e565b005b6103167f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161022b565b6102ed61033636600461187c565b610a97565b6102bf60045481565b6102bf60165481565b6102ed61035b3660046118b8565b610b6c565b6102bf60155481565b600f5460ff16610288565b61025d610382366004611822565b610b9f565b6102bf6103953660046118f4565b60076020526000908152604090205481565b6102ed610bda565b6102ed610bee565b6102ed610c56565b6000546001600160a01b031661025d565b61021e610c9f565b6102886103e63660046118f4565b600e6020526000908152604090205460ff1681565b6102ed6104093660046118b8565b610cac565b61028861041c366004611852565b610d18565b6102ed61042f36600461190f565b610d2c565b6102ed610def565b61021e61044a366004611822565b610e06565b61021e610e64565b6102bf6104653660046119aa565b600860209081526000928352604080842090915290825290205481565b6102ed6104903660046119f3565b610e71565b6102bf6104a33660046118f4565b60116020526000908152604090205481565b6001546001600160a01b031661025d565b6102886104d43660046119aa565b600a60209081526000928352604080842090915290825290205460ff1681565b6102ed610e89565b6102ed61050a3660046118f4565b610e9d565b6102bf61051d3660046118f4565b60126020526000908152604090205481565b6002805461053c90611aa4565b80601f016020809104026020016040519081016040528092919081815260200182805461056890611aa4565b80156105b55780601f1061058a576101008083540402835291602001916105b5565b820191906000526020600020905b81548152906001019060200180831161059857829003601f168201915b505050505081565b600060045482111580156105d15750600082115b156106a8576000828152600b60205260409020546001600160a01b031633811480159061062257506001600160a01b0381166000908152600a6020908152604080832033845290915290205460ff16155b1561063f576040516282b42960e81b815260040160405180910390fd5b60008381526009602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610704565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6004548111610a28576000818152600b60205260409020546001600160a01b0384811691161461075157604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b03821661077857604051634e46966960e11b815260040160405180910390fd5b336001600160a01b038416148015906107b557506001600160a01b0383166000908152600a6020908152604080832033845290915290205460ff16155b80156107d857506000818152600960205260409020546001600160a01b03163314155b156107f5576040516282b42960e81b815260040160405180910390fd5b6107fd610f0e565b6001600160a01b03841660009081526007602052604081208054909190610825908490611af4565b909155506108339050610f0e565b6001600160a01b0380841660008181526007602090815260408083208054909601909555858252600b815284822080546001600160a01b031990811690941790556009815284822080549093169092559186168252600c9052908120805461089d90600190611af4565b815481106108ad576108ad611b07565b60009182526020808320909101546001600160a01b0387168352600c82526040808420868552600d909352909220548154929350839281106108f1576108f1611b07565b60009182526020808320909101929092556001600160a01b0386168152600c9091526040902080548061092657610926611b1d565b600082815260208082208301600019908101839055909201909255838252600d8152604080832054848452818420556001600160a01b038616808452600c8352908320805460018181018355828652938520018690559252905461098a9190611af4565b6000838152600d602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a11610f0e565b60405190815260200160405180910390a350505050565b6001600160a01b03831660009081526008602090815260408083203384529091529020546000198114610a8457610a5f8282611af4565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610a8f848484610f40565b50505b505050565b610aa283838361070e565b6001600160a01b0382163b15801590610b4e5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190611b33565b6001600160e01b03191614155b15610a9257604051633da6393160e01b815260040160405180910390fd5b610b746110cb565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000818152600b60205260409020546001600160a01b031680610bd55760405163c5723b5160e01b815260040160405180910390fd5b919050565b610be26110cb565b610bec60006110f8565b565b610bf66110cb565b610c227f00000000000000000000000000000000000000000000000000000000000000006103e8611b5d565b601555610c517f00000000000000000000000000000000000000000000000000000000000000006103e8611b5d565b601655565b60015433906001600160a01b03168114610c935760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610c9c816110f8565b50565b6003805461053c90611aa4565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000610d25338484610f40565b9392505050565b610d3785858561070e565b6001600160a01b0384163b15801590610dd15750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d819033908a90899089908990600401611b74565b6020604051808303816000875af1158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190611b33565b6001600160e01b03191614155b15610a8f57604051633da6393160e01b815260040160405180910390fd5b610df76110cb565b6013805460ff19166001179055565b6060600060148054610e1790611aa4565b905011610e335760405180602001604052806000815250610708565b6014610e3e83611111565b604051602001610e4f929190611bc8565b60405160208183030381529060405292915050565b6014805461053c90611aa4565b610e796110cb565b6014610e858282611c9d565b5050565b610e916110cb565b6013805460ff19169055565b610ea56110cb565b600180546001600160a01b0383166001600160a01b03199091168117909155610ed66000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000610f3b7f0000000000000000000000000000000000000000000000000000000000000000600a611e41565b905090565b6000610f4a6111a4565b6001600160a01b0384166000908152600e602052604090205460ff16611001576001600160a01b03841660009081526012602052604081208054849290610f92908490611e50565b90915550506016546001600160a01b03851660009081526012602052604090205411156110015760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610c8a565b6001600160a01b0383166000908152600e602052604090205460ff166110b8576001600160a01b03831660009081526011602052604081208054849290611049908490611e50565b90915550506015546001600160a01b03841660009081526011602052604090205411156110b85760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610c8a565b6110c38484846111c8565b949350505050565b6000546001600160a01b03163314610bec5760405163118cdaa760e01b8152336004820152602401610c8a565b600180546001600160a01b0319169055610c9c816113b9565b6060600061111e83611409565b600101905060008167ffffffffffffffff81111561113e5761113e6119dd565b6040519080825280601f01601f191660200182016040528015611168576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461117257509392505050565b600f5460ff1615610bec5760405163d93c066560e01b815260040160405180910390fd5b6000806111d3610f0e565b6001600160a01b03808716600090815260076020526040808220549288168252902054919250906112058787876114e1565b156112165760019350505050610d25565b6001600160a01b0387166000908152600760205260408120805487929061123e908490611af4565b90915550506001600160a01b03808716600090815260076020908152604080832080548a019055928a168252600e9052205460ff166112da576001600160a01b03871660009081526007602052604081205461129b908590611e63565b6112a58585611e63565b6112af9190611af4565b905060005b818110156112d7576112c58961158c565b806112cf81611e85565b9150506112b4565b50505b6001600160a01b0386166000908152600e602052604090205460ff1661135f5760006113068483611e63565b6001600160a01b03881660009081526007602052604090205461132a908690611e63565b6113349190611af4565b905060005b8181101561135c5761134a886116b4565b8061135481611e85565b915050611339565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516113a491815260200190565b60405180910390a35060019695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114485772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611474576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061149257662386f26fc10000830492506010015b6305f5e10083106114aa576305f5e100830492506008015b61271083106114be57612710830492506004015b606483106114d0576064830492506002015b600a83106107085760010192915050565b6005546000906001600160a01b0390811690841603611582576006546001600160a01b0390811690851603611547576001600160a01b03831660009081526007602052604081208054849290611538908490611e50565b9091555060019150610d259050565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611580573d6000803e3d6000fd5b505b5060009392505050565b6001600160a01b0381166115b357604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600c6020526040812080546115d990600190611af4565b815481106115e9576115e9611b07565b90600052602060002001549050600c6000836001600160a01b03166001600160a01b0316815260200190815260200160002080548061162a5761162a611b1d565b600082815260208082208301600019908101839055909201909255828252600d81526040808320839055600b825280832080546001600160a01b031990811690915560099092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6116bc6111a4565b610c9c816001600160a01b0381166116e757604051634e46966960e11b815260040160405180910390fd5b60048054600101908190556000818152600b60205260409020546001600160a01b0316156117285760405163119b4fd360e11b815260040160405180910390fd5b6000818152600b6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600c835290832080546001818101835582865293852001859055925290546117809190611af4565b6000828152600d602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60005b838110156117e65781810151838201526020016117ce565b50506000910152565b602081526000825180602084015261180e8160408501602087016117cb565b601f01601f19169190910160400192915050565b60006020828403121561183457600080fd5b5035919050565b80356001600160a01b0381168114610bd557600080fd5b6000806040838503121561186557600080fd5b61186e8361183b565b946020939093013593505050565b60008060006060848603121561189157600080fd5b61189a8461183b565b92506118a86020850161183b565b9150604084013590509250925092565b600080604083850312156118cb57600080fd5b6118d48361183b565b9150602083013580151581146118e957600080fd5b809150509250929050565b60006020828403121561190657600080fd5b610d258261183b565b60008060008060006080868803121561192757600080fd5b6119308661183b565b945061193e6020870161183b565b935060408601359250606086013567ffffffffffffffff8082111561196257600080fd5b818801915088601f83011261197657600080fd5b81358181111561198557600080fd5b89602082850101111561199757600080fd5b9699959850939650602001949392505050565b600080604083850312156119bd57600080fd5b6119c68361183b565b91506119d46020840161183b565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a0557600080fd5b813567ffffffffffffffff80821115611a1d57600080fd5b818401915084601f830112611a3157600080fd5b813581811115611a4357611a436119dd565b604051601f8201601f19908116603f01168101908382118183101715611a6b57611a6b6119dd565b81604052828152876020848701011115611a8457600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680611ab857607f821691505b602082108103611ad857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561070857610708611ade565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215611b4557600080fd5b81516001600160e01b031981168114610d2557600080fd5b808202811582820484141761070857610708611ade565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808454611bd681611aa4565b60018281168015611bee5760018114611c0357611c32565b60ff1984168752821515830287019450611c32565b8860005260208060002060005b85811015611c295781548a820152908401908201611c10565b50505082870194505b505050508351611c468183602088016117cb565b01949350505050565b601f821115610a9257600081815260208120601f850160051c81016020861015611c765750805b601f850160051c820191505b81811015611c9557828155600101611c82565b505050505050565b815167ffffffffffffffff811115611cb757611cb76119dd565b611ccb81611cc58454611aa4565b84611c4f565b602080601f831160018114611d005760008415611ce85750858301515b600019600386901b1c1916600185901b178555611c95565b600085815260208120601f198616915b82811015611d2f57888601518255948401946001909101908401611d10565b5085821015611d4d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b80851115611d98578160001904821115611d7e57611d7e611ade565b80851615611d8b57918102915b93841c9390800290611d62565b509250929050565b600082611daf57506001610708565b81611dbc57506000610708565b8160018114611dd25760028114611ddc57611df8565b6001915050610708565b60ff841115611ded57611ded611ade565b50506001821b610708565b5060208310610133831016604e8410600b8410161715611e1b575081810a610708565b611e258383611d5d565b8060001904821115611e3957611e39611ade565b029392505050565b6000610d2560ff841683611da0565b8082018082111561070857610708611ade565b600082611e8057634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611e9757611e97611ade565b506001019056fea2646970667358221220cce80241bc24de973a74f8755541a266e251e698278697805859cd38186f927364736f6c6343000813003300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000026cdb41c57304642d6e3f058f9eae1d5cf13e4e30000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c507265736964656e7434303400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009505245534944454e540000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c806379ba509711610125578063d547cfb7116100ad578063e30c39781161007c578063e30c3978146104b5578063e985e9c5146104c6578063f0306ea4146104f4578063f2fde38b146104fc578063f349b1731461050f57600080fd5b8063d547cfb71461044f578063dd62ed3e14610457578063e0df5b6f14610482578063e2d6f33a1461049557600080fd5b8063a22cb465116100f4578063a22cb465146103fb578063a9059cbb1461040e578063b88d4fde14610421578063c6a6035a14610434578063c87b56dd1461043c57600080fd5b806379ba5097146103b75780638da5cb5b146103bf57806395d89b41146103d05780639b19251a146103d857600080fd5b80634f02c420116101a85780635c975abb116101775780635c975abb146103695780636352211e1461037457806370a0823114610387578063715018a6146103a7578063751039fc146103af57600080fd5b80634f02c4201461033b5780634f91e48c1461034457806353d6fd591461034d578063589210d91461036057600080fd5b80631e70b6df116101e45780631e70b6df146102cd57806323b872dd146102da578063313ce567146102ef57806342842e0e1461032857600080fd5b806306fdde0314610216578063081812fc14610234578063095ea7b31461027557806318160ddd14610298575b600080fd5b61021e61052f565b60405161022b91906117ef565b60405180910390f35b61025d610242366004611822565b6009602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b610288610283366004611852565b6105bd565b604051901515815260200161022b565b6102bf7f00000000000000000000000000000000000000000000000000000746a528800081565b60405190815260200161022b565b6013546102889060ff1681565b6102ed6102e836600461187c565b61070e565b005b6103167f000000000000000000000000000000000000000000000000000000000000000981565b60405160ff909116815260200161022b565b6102ed61033636600461187c565b610a97565b6102bf60045481565b6102bf60165481565b6102ed61035b3660046118b8565b610b6c565b6102bf60155481565b600f5460ff16610288565b61025d610382366004611822565b610b9f565b6102bf6103953660046118f4565b60076020526000908152604090205481565b6102ed610bda565b6102ed610bee565b6102ed610c56565b6000546001600160a01b031661025d565b61021e610c9f565b6102886103e63660046118f4565b600e6020526000908152604090205460ff1681565b6102ed6104093660046118b8565b610cac565b61028861041c366004611852565b610d18565b6102ed61042f36600461190f565b610d2c565b6102ed610def565b61021e61044a366004611822565b610e06565b61021e610e64565b6102bf6104653660046119aa565b600860209081526000928352604080842090915290825290205481565b6102ed6104903660046119f3565b610e71565b6102bf6104a33660046118f4565b60116020526000908152604090205481565b6001546001600160a01b031661025d565b6102886104d43660046119aa565b600a60209081526000928352604080842090915290825290205460ff1681565b6102ed610e89565b6102ed61050a3660046118f4565b610e9d565b6102bf61051d3660046118f4565b60126020526000908152604090205481565b6002805461053c90611aa4565b80601f016020809104026020016040519081016040528092919081815260200182805461056890611aa4565b80156105b55780601f1061058a576101008083540402835291602001916105b5565b820191906000526020600020905b81548152906001019060200180831161059857829003601f168201915b505050505081565b600060045482111580156105d15750600082115b156106a8576000828152600b60205260409020546001600160a01b031633811480159061062257506001600160a01b0381166000908152600a6020908152604080832033845290915290205460ff16155b1561063f576040516282b42960e81b815260040160405180910390fd5b60008381526009602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610704565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6004548111610a28576000818152600b60205260409020546001600160a01b0384811691161461075157604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b03821661077857604051634e46966960e11b815260040160405180910390fd5b336001600160a01b038416148015906107b557506001600160a01b0383166000908152600a6020908152604080832033845290915290205460ff16155b80156107d857506000818152600960205260409020546001600160a01b03163314155b156107f5576040516282b42960e81b815260040160405180910390fd5b6107fd610f0e565b6001600160a01b03841660009081526007602052604081208054909190610825908490611af4565b909155506108339050610f0e565b6001600160a01b0380841660008181526007602090815260408083208054909601909555858252600b815284822080546001600160a01b031990811690941790556009815284822080549093169092559186168252600c9052908120805461089d90600190611af4565b815481106108ad576108ad611b07565b60009182526020808320909101546001600160a01b0387168352600c82526040808420868552600d909352909220548154929350839281106108f1576108f1611b07565b60009182526020808320909101929092556001600160a01b0386168152600c9091526040902080548061092657610926611b1d565b600082815260208082208301600019908101839055909201909255838252600d8152604080832054848452818420556001600160a01b038616808452600c8352908320805460018181018355828652938520018690559252905461098a9190611af4565b6000838152600d602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a11610f0e565b60405190815260200160405180910390a350505050565b6001600160a01b03831660009081526008602090815260408083203384529091529020546000198114610a8457610a5f8282611af4565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610a8f848484610f40565b50505b505050565b610aa283838361070e565b6001600160a01b0382163b15801590610b4e5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b419190611b33565b6001600160e01b03191614155b15610a9257604051633da6393160e01b815260040160405180910390fd5b610b746110cb565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000818152600b60205260409020546001600160a01b031680610bd55760405163c5723b5160e01b815260040160405180910390fd5b919050565b610be26110cb565b610bec60006110f8565b565b610bf66110cb565b610c227f00000000000000000000000000000000000000000000000000000746a52880006103e8611b5d565b601555610c517f00000000000000000000000000000000000000000000000000000746a52880006103e8611b5d565b601655565b60015433906001600160a01b03168114610c935760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610c9c816110f8565b50565b6003805461053c90611aa4565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000610d25338484610f40565b9392505050565b610d3785858561070e565b6001600160a01b0384163b15801590610dd15750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d819033908a90899089908990600401611b74565b6020604051808303816000875af1158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190611b33565b6001600160e01b03191614155b15610a8f57604051633da6393160e01b815260040160405180910390fd5b610df76110cb565b6013805460ff19166001179055565b6060600060148054610e1790611aa4565b905011610e335760405180602001604052806000815250610708565b6014610e3e83611111565b604051602001610e4f929190611bc8565b60405160208183030381529060405292915050565b6014805461053c90611aa4565b610e796110cb565b6014610e858282611c9d565b5050565b610e916110cb565b6013805460ff19169055565b610ea56110cb565b600180546001600160a01b0383166001600160a01b03199091168117909155610ed66000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000610f3b7f0000000000000000000000000000000000000000000000000000000000000009600a611e41565b905090565b6000610f4a6111a4565b6001600160a01b0384166000908152600e602052604090205460ff16611001576001600160a01b03841660009081526012602052604081208054849290610f92908490611e50565b90915550506016546001600160a01b03851660009081526012602052604090205411156110015760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610c8a565b6001600160a01b0383166000908152600e602052604090205460ff166110b8576001600160a01b03831660009081526011602052604081208054849290611049908490611e50565b90915550506015546001600160a01b03841660009081526011602052604090205411156110b85760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610c8a565b6110c38484846111c8565b949350505050565b6000546001600160a01b03163314610bec5760405163118cdaa760e01b8152336004820152602401610c8a565b600180546001600160a01b0319169055610c9c816113b9565b6060600061111e83611409565b600101905060008167ffffffffffffffff81111561113e5761113e6119dd565b6040519080825280601f01601f191660200182016040528015611168576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461117257509392505050565b600f5460ff1615610bec5760405163d93c066560e01b815260040160405180910390fd5b6000806111d3610f0e565b6001600160a01b03808716600090815260076020526040808220549288168252902054919250906112058787876114e1565b156112165760019350505050610d25565b6001600160a01b0387166000908152600760205260408120805487929061123e908490611af4565b90915550506001600160a01b03808716600090815260076020908152604080832080548a019055928a168252600e9052205460ff166112da576001600160a01b03871660009081526007602052604081205461129b908590611e63565b6112a58585611e63565b6112af9190611af4565b905060005b818110156112d7576112c58961158c565b806112cf81611e85565b9150506112b4565b50505b6001600160a01b0386166000908152600e602052604090205460ff1661135f5760006113068483611e63565b6001600160a01b03881660009081526007602052604090205461132a908690611e63565b6113349190611af4565b905060005b8181101561135c5761134a886116b4565b8061135481611e85565b915050611339565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487876040516113a491815260200190565b60405180910390a35060019695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114485772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611474576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061149257662386f26fc10000830492506010015b6305f5e10083106114aa576305f5e100830492506008015b61271083106114be57612710830492506004015b606483106114d0576064830492506002015b600a83106107085760010192915050565b6005546000906001600160a01b0390811690841603611582576006546001600160a01b0390811690851603611547576001600160a01b03831660009081526007602052604081208054849290611538908490611e50565b9091555060019150610d259050565b6006546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611580573d6000803e3d6000fd5b505b5060009392505050565b6001600160a01b0381166115b357604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600c6020526040812080546115d990600190611af4565b815481106115e9576115e9611b07565b90600052602060002001549050600c6000836001600160a01b03166001600160a01b0316815260200190815260200160002080548061162a5761162a611b1d565b600082815260208082208301600019908101839055909201909255828252600d81526040808320839055600b825280832080546001600160a01b031990811690915560099092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6116bc6111a4565b610c9c816001600160a01b0381166116e757604051634e46966960e11b815260040160405180910390fd5b60048054600101908190556000818152600b60205260409020546001600160a01b0316156117285760405163119b4fd360e11b815260040160405180910390fd5b6000818152600b6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600c835290832080546001818101835582865293852001859055925290546117809190611af4565b6000828152600d602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60005b838110156117e65781810151838201526020016117ce565b50506000910152565b602081526000825180602084015261180e8160408501602087016117cb565b601f01601f19169190910160400192915050565b60006020828403121561183457600080fd5b5035919050565b80356001600160a01b0381168114610bd557600080fd5b6000806040838503121561186557600080fd5b61186e8361183b565b946020939093013593505050565b60008060006060848603121561189157600080fd5b61189a8461183b565b92506118a86020850161183b565b9150604084013590509250925092565b600080604083850312156118cb57600080fd5b6118d48361183b565b9150602083013580151581146118e957600080fd5b809150509250929050565b60006020828403121561190657600080fd5b610d258261183b565b60008060008060006080868803121561192757600080fd5b6119308661183b565b945061193e6020870161183b565b935060408601359250606086013567ffffffffffffffff8082111561196257600080fd5b818801915088601f83011261197657600080fd5b81358181111561198557600080fd5b89602082850101111561199757600080fd5b9699959850939650602001949392505050565b600080604083850312156119bd57600080fd5b6119c68361183b565b91506119d46020840161183b565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a0557600080fd5b813567ffffffffffffffff80821115611a1d57600080fd5b818401915084601f830112611a3157600080fd5b813581811115611a4357611a436119dd565b604051601f8201601f19908116603f01168101908382118183101715611a6b57611a6b6119dd565b81604052828152876020848701011115611a8457600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c90821680611ab857607f821691505b602082108103611ad857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561070857610708611ade565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215611b4557600080fd5b81516001600160e01b031981168114610d2557600080fd5b808202811582820484141761070857610708611ade565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808454611bd681611aa4565b60018281168015611bee5760018114611c0357611c32565b60ff1984168752821515830287019450611c32565b8860005260208060002060005b85811015611c295781548a820152908401908201611c10565b50505082870194505b505050508351611c468183602088016117cb565b01949350505050565b601f821115610a9257600081815260208120601f850160051c81016020861015611c765750805b601f850160051c820191505b81811015611c9557828155600101611c82565b505050505050565b815167ffffffffffffffff811115611cb757611cb76119dd565b611ccb81611cc58454611aa4565b84611c4f565b602080601f831160018114611d005760008415611ce85750858301515b600019600386901b1c1916600185901b178555611c95565b600085815260208120601f198616915b82811015611d2f57888601518255948401946001909101908401611d10565b5085821015611d4d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b80851115611d98578160001904821115611d7e57611d7e611ade565b80851615611d8b57918102915b93841c9390800290611d62565b509250929050565b600082611daf57506001610708565b81611dbc57506000610708565b8160018114611dd25760028114611ddc57611df8565b6001915050610708565b60ff841115611ded57611ded611ade565b50506001821b610708565b5060208310610133831016604e8410600b8410161715611e1b575081810a610708565b611e258383611d5d565b8060001904821115611e3957611e39611ade565b029392505050565b6000610d2560ff841683611da0565b8082018082111561070857610708611ade565b600082611e8057634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611e9757611e97611ade565b506001019056fea2646970667358221220cce80241bc24de973a74f8755541a266e251e698278697805859cd38186f927364736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000026cdb41c57304642d6e3f058f9eae1d5cf13e4e30000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c507265736964656e7434303400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009505245534944454e540000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): President404
Arg [1] : _symbol (string): PRESIDENT
Arg [2] : _owner (address): 0x26cdb41c57304642d6E3f058f9eaE1d5CF13E4E3
Arg [3] : _initialSupply (uint256): 8000
Arg [4] : _decimal (uint8): 9
Arg [5] : _buylimit (uint256): 160
Arg [6] : _selllimit (uint256): 160
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 00000000000000000000000026cdb41c57304642d6e3f058f9eae1d5cf13e4e3
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001f40
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [6] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [7] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [8] : 507265736964656e743430340000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [10] : 505245534944454e540000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42659:2399:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15894:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16651:46;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;16651:46:0;;;;;;-1:-1:-1;;;;;1019:32:1;;;1001:51;;989:2;974:18;16651:46:0;855:203:1;18515:642:0;;;;;;:::i;:::-;;:::i;:::-;;;1665:14:1;;1658:22;1640:41;;1628:2;1613:18;18515:642:0;1500:187:1;16130:36:0;;;;;;;;1838:25:1;;;1826:2;1811:18;16130:36:0;1692:177:1;42868:24:0;;;;;;;;;19564:1714;;;;;;:::i;:::-;;:::i;:::-;;16030:31;;;;;;;;2379:4:1;2367:17;;;2349:36;;2337:2;2322:18;16030:31:0;2207:184:1;21574:405:0;;;;;;:::i;:::-;;:::i;16265:21::-;;;;;;42964:24;;;;;;17844:111;;;;;;:::i;:::-;;:::i;42934:23::-;;;;;;12626:86;12697:7;;;;12626:86;;18027:193;;;;;;:::i;:::-;;:::i;16417:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;7849:103;;;:::i;44802:130::-;;;:::i;10485:235::-;;;:::i;7174:87::-;7220:7;7247:6;-1:-1:-1;;;;;7247:6:0;7174:87;;15948:20;;;:::i;17262:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19208:207;;;;;;:::i;:::-;;:::i;21337:160::-;;;;;;:::i;:::-;;:::i;22074:437::-;;;;;;:::i;:::-;;:::i;44614:86::-;;;:::i;43873:181::-;;;;;;:::i;:::-;;:::i;42901:26::-;;;:::i;16531:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;43759:106;;;;;;:::i;:::-;;:::i;42725:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;9573:101;9653:13;;-1:-1:-1;;;;;9653:13:0;9573:101;;16762:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;44708:86;;;:::i;9873:181::-;;;;;;:::i;:::-;;:::i;42780:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;15894:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18515:642::-;18618:4;18653:6;;18639:10;:20;;:38;;;;;18676:1;18663:10;:14;18639:38;18635:491;;;18694:13;18710:20;;;:8;:20;;;;;;-1:-1:-1;;;;;18710:20:0;18751:10;:19;;;;;:59;;-1:-1:-1;;;;;;18775:23:0;;;;;;:16;:23;;;;;;;;18799:10;18775:35;;;;;;;;;;18774:36;18751:59;18747:121;;;18838:14;;-1:-1:-1;;;18838:14:0;;;;;;;;;;;18747:121;18884:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;18884:33:0;-1:-1:-1;;;;;18884:33:0;;;;;;;;;18939:36;;1838:25:1;;;18939:36:0;;;;;;1811:18:1;18939:36:0;;;;;;;18679:308;18635:491;;;19018:10;19008:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;19008:30:0;;;;;;;;;;;;:43;;;19073:41;1838:25:1;;;19008:30:0;;19018:10;19073:41;;1811:18:1;19073:41:0;;;;;;;18635:491;-1:-1:-1;19145:4:0;18515:642;;;;;:::o;19564:1714::-;19710:6;;19696:10;:20;19692:1579;;19745:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;19737:28:0;;;19745:20;;19737:28;19733:91;;19793:15;;-1:-1:-1;;;19793:15:0;;;;;;;;;;;19733:91;-1:-1:-1;;;;;19844:16:0;;19840:82;;19888:18;;-1:-1:-1;;;19888:18:0;;;;;;;;;;;19840:82;19960:10;-1:-1:-1;;;;;19960:18:0;;;;;;:74;;-1:-1:-1;;;;;;20000:22:0;;;;;;:16;:22;;;;;;;;20023:10;20000:34;;;;;;;;;;19999:35;19960:74;:132;;;;-1:-1:-1;20069:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;20069:23:0;20055:10;:37;;19960:132;19938:226;;;20134:14;;-1:-1:-1;;;20134:14:0;;;;;;;;;;;19938:226;20199:10;:8;:10::i;:::-;-1:-1:-1;;;;;20180:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;20272:10:0;;-1:-1:-1;20272:8:0;:10::i;:::-;-1:-1:-1;;;;;20255:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;20314:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;20314:25:0;;;;;;;;20361:11;:23;;;;;20354:30;;;;;;;;20462:12;;;;;:6;:12;;;;;20475:19;;:23;;-1:-1:-1;;20475:23:0;:::i;:::-;20462:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;20514:12:0;;;;:6;:12;;;;;;20527:23;;;:11;:23;;;;;;;20514:37;;20462;;-1:-1:-1;20462:37:0;;20514;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;20598:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;20598:18:0;;;;;;;;;;;;20702:23;;;:11;:23;;;;;;;20677:22;;;;;;:48;-1:-1:-1;;;;;20779:10:0;;;;;:6;:10;;;;;:27;;20598:18;20779:27;;;;;;;;;;;;;;;20889:10;;:17;;:21;;20598:18;20889:21;:::i;:::-;20863:23;;;;:11;:23;;;;;;:47;;;;20932:30;;20875:10;;-1:-1:-1;;;;;20932:30:0;;;;;;;;;;;21002:2;-1:-1:-1;;;;;20982:35:0;20996:4;-1:-1:-1;;;;;20982:35:0;;21006:10;:8;:10::i;:::-;20982:35;;1838:25:1;;;1826:2;1811:18;20982:35:0;;;;;;;19718:1311;19564:1714;;;:::o;19692:1579::-;-1:-1:-1;;;;;21068:15:0;;21050;21068;;;:9;:15;;;;;;;;21084:10;21068:27;;;;;;;;-1:-1:-1;;21116:28:0;;21112:101;;21193:20;21203:10;21193:7;:20;:::i;:::-;-1:-1:-1;;;;;21163:15:0;;;;;;:9;:15;;;;;;;;21179:10;21163:27;;;;;;;:50;21112:101;21228:31;21238:4;21244:2;21248:10;21228:9;:31::i;:::-;;21035:236;19692:1579;19564:1714;;;:::o;21574:405::-;21698:26;21711:4;21717:2;21721;21698:12;:26::i;:::-;-1:-1:-1;;;;;21755:14:0;;;:19;;;;:154;;-1:-1:-1;21791:61:0;;-1:-1:-1;;;21791:61:0;;;21827:10;21791:61;;;6295:34:1;-1:-1:-1;;;;;6365:15:1;;;6345:18;;;6338:43;6397:18;;;6390:34;;;6460:3;6440:18;;;6433:31;-1:-1:-1;6480:19:1;;;6473:30;21869:40:0;;21791:35;;;;21869:40;;6520:19:1;;21791:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21791:118:0;;;21755:154;21737:235;;;21943:17;;-1:-1:-1;;;21943:17:0;;;;;;;;;;;17844:111;7060:13;:11;:13::i;:::-;-1:-1:-1;;;;;17922:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;17922:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17844:111::o;18027:193::-;18085:13;18119:12;;;:8;:12;;;;;;-1:-1:-1;;;;;18119:12:0;;18144:69;;18191:10;;-1:-1:-1;;;18191:10:0;;;;;;;;;;;18144:69;18027:193;;;:::o;7849:103::-;7060:13;:11;:13::i;:::-;7914:30:::1;7941:1;7914:18;:30::i;:::-;7849:103::o:0;44802:130::-;7060:13;:11;:13::i;:::-;44865:18:::1;:11;44879:4;44865:18;:::i;:::-;44854:8;:29:::0;44906:18:::1;:11;44920:4;44906:18;:::i;:::-;44894:9;:30:::0;44802:130::o;10485:235::-;9653:13;;5264:10;;-1:-1:-1;;;;;9653:13:0;10582:24;;10578:98;;10630:34;;-1:-1:-1;;;10630:34:0;;-1:-1:-1;;;;;1019:32:1;;10630:34:0;;;1001:51:1;974:18;;10630:34:0;;;;;;;;10578:98;10686:26;10705:6;10686:18;:26::i;:::-;10527:193;10485:235::o;15948:20::-;;;;;;;:::i;19208:207::-;19311:10;19294:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;19294:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;19294:49:0;;;;;;;;;;19361:46;;1640:41:1;;;19294:38:0;;19311:10;19361:46;;1613:18:1;19361:46:0;;;;;;;19208:207;;:::o;21337:160::-;21432:4;21456:33;21466:10;21478:2;21482:6;21456:9;:33::i;:::-;21449:40;21337:160;-1:-1:-1;;;21337:160:0:o;22074:437::-;22228:26;22241:4;22247:2;22251;22228:12;:26::i;:::-;-1:-1:-1;;;;;22285:14:0;;;:19;;;;:156;;-1:-1:-1;22321:63:0;;-1:-1:-1;;;22321:63:0;;;22401:40;-1:-1:-1;;;;;22321:35:0;;;22401:40;;22321:63;;22357:10;;22369:4;;22375:2;;22379:4;;;;22321:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;22321:120:0;;;22285:156;22267:237;;;22475:17;;-1:-1:-1;;;22475:17:0;;;;;;;;;;;44614:86;7060:13;:11;:13::i;:::-;44673:12:::1;:19:::0;;-1:-1:-1;;44673:19:0::1;44688:4;44673:19;::::0;;44614:86::o;43873:181::-;43933:13;43995:1;43972:12;43966:26;;;;;:::i;:::-;;;:30;:80;;;;;;;;;;;;;;;;;44013:12;44027:13;:2;:11;:13::i;:::-;43999:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43959:87;43873:181;-1:-1:-1;;43873:181:0:o;42901:26::-;;;;;;;:::i;43759:106::-;7060:13;:11;:13::i;:::-;43833:12:::1;:24;43848:9:::0;43833:12;:24:::1;:::i;:::-;;43759:106:::0;:::o;44708:86::-;7060:13;:11;:13::i;:::-;44766:12:::1;:20:::0;;-1:-1:-1;;44766:20:0::1;::::0;;44708:86::o;9873:181::-;7060:13;:11;:13::i;:::-;9963::::1;:24:::0;;-1:-1:-1;;;;;9963:24:0;::::1;-1:-1:-1::0;;;;;;9963:24:0;;::::1;::::0;::::1;::::0;;;10028:7:::1;7220::::0;7247:6;-1:-1:-1;;;;;7247:6:0;;7174:87;10028:7:::1;-1:-1:-1::0;;;;;10003:43:0::1;;;;;;;;;;;9873:181:::0;:::o;24199:92::-;24242:7;24269:14;24275:8;24269:2;:14;:::i;:::-;24262:21;;24199:92;:::o;44062:544::-;44206:4;12231:19;:17;:19::i;:::-;-1:-1:-1;;;;;44226:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;::::1;;44222:163;;-1:-1:-1::0;;;;;44257:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;:29;;44280:6;;44257:19;:29:::1;::::0;44280:6;;44257:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;44332:9:0::1;::::0;-1:-1:-1;;;;;44309:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;:32:::1;;44301:72;;;::::0;-1:-1:-1;;;44301:72:0;;12629:2:1;44301:72:0::1;::::0;::::1;12611:21:1::0;12668:2;12648:18;;;12641:30;12707:29;12687:18;;;12680:57;12754:18;;44301:72:0::1;12427:351:1::0;44301:72:0::1;-1:-1:-1::0;;;;;44399:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;::::1;;44395:153;;-1:-1:-1::0;;;;;44428:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;:26;;44448:6;;44428:16;:26:::1;::::0;44448:6;;44428:26:::1;:::i;:::-;::::0;;;-1:-1:-1;;44497:8:0::1;::::0;-1:-1:-1;;;;;44477:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;:28:::1;;44469:67;;;::::0;-1:-1:-1;;;44469:67:0;;12985:2:1;44469:67:0::1;::::0;::::1;12967:21:1::0;13024:2;13004:18;;;12997:30;13063:28;13043:18;;;13036:56;13109:18;;44469:67:0::1;12783:350:1::0;44469:67:0::1;44565:33;44581:4;44587:2;44591:6;44565:15;:33::i;:::-;44558:40:::0;44062:544;-1:-1:-1;;;;44062:544:0:o;7339:166::-;7220:7;7247:6;-1:-1:-1;;;;;7247:6:0;5264:10;7399:23;7395:103;;7446:40;;-1:-1:-1;;;7446:40:0;;5264:10;7446:40;;;1001:51:1;974:18;;7446:40:0;855:203:1;10244:156:0;10334:13;10327:20;;-1:-1:-1;;;;;;10327:20:0;;;10358:34;10383:8;10358:24;:34::i;40116:722::-;40172:13;40223:14;40240:21;40255:5;40240:14;:21::i;:::-;40264:1;40240:25;40223:42;;40280:20;40314:6;40303:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40303:18:0;-1:-1:-1;40280:41:0;-1:-1:-1;40445:28:0;;;40461:2;40445:28;40502:290;-1:-1:-1;;40534:5:0;-1:-1:-1;;;40671:2:0;40660:14;;40655:32;40534:5;40642:46;40734:2;40725:11;;;-1:-1:-1;40755:21:0;40502:290;40755:21;-1:-1:-1;40813:6:0;40116:722;-1:-1:-1;;;40116:722:0:o;12785:132::-;12697:7;;;;12847:63;;;12883:15;;-1:-1:-1;;;12883:15:0;;;;;;;;;;;22963:1197;23084:4;23101:12;23116:10;:8;:10::i;:::-;-1:-1:-1;;;;;23167:15:0;;;23137:27;23167:15;;;:9;:15;;;;;;;23225:13;;;;;;;;23101:25;;-1:-1:-1;23167:15:0;23254:33;23177:4;23235:2;23280:6;23254:15;:33::i;:::-;23251:76;;;23311:4;23304:11;;;;;;;23251:76;-1:-1:-1;;;;;23347:15:0;;;;;;:9;:15;;;;;:25;;23366:6;;23347:15;:25;;23366:6;;23347:25;:::i;:::-;;;;-1:-1:-1;;;;;;;23410:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;23518:15;;;;;:9;:15;;;;;;23513:251;;-1:-1:-1;;;;;23624:15:0;;23550:22;23624:15;;;:9;:15;;;;;;:22;;23642:4;;23624:22;:::i;:::-;23576:26;23598:4;23576:19;:26;:::i;:::-;23575:72;;;;:::i;:::-;23550:97;;23667:9;23662:91;23686:14;23682:1;:18;23662:91;;;23726:11;23732:4;23726:5;:11::i;:::-;23702:3;;;;:::i;:::-;;;;23662:91;;;;23535:229;23513:251;-1:-1:-1;;;;;23840:13:0;;;;;;:9;:13;;;;;;;;23835:247;;23870:22;23938:28;23962:4;23938:21;:28;:::i;:::-;-1:-1:-1;;;;;23896:13:0;;;;;;:9;:13;;;;;;:20;;23912:4;;23896:20;:::i;:::-;23895:72;;;;:::i;:::-;23870:97;;23987:9;23982:89;24006:14;24002:1;:18;23982:89;;;24046:9;24052:2;24046:5;:9::i;:::-;24022:3;;;;:::i;:::-;;;;23982:89;;;;23855:227;23835:247;24119:2;-1:-1:-1;;;;;24099:31:0;24113:4;-1:-1:-1;;;;;24099:31:0;;24123:6;24099:31;;;;1838:25:1;;1826:2;1811:18;;1692:177;24099:31:0;;;;;;;;-1:-1:-1;24148:4:0;;22963:1197;-1:-1:-1;;;;;;22963:1197:0:o;8487:191::-;8561:16;8580:6;;-1:-1:-1;;;;;8597:17:0;;;-1:-1:-1;;;;;;8597:17:0;;;;;;8630:40;;8580:6;;;;;;;8630:40;;8561:16;8630:40;8550:128;8487:191;:::o;33335:948::-;33388:7;;-1:-1:-1;;;33466:17:0;;33462:106;;-1:-1:-1;;;33504:17:0;;;-1:-1:-1;33550:2:0;33540:12;33462:106;33595:8;33586:5;:17;33582:106;;33633:8;33624:17;;;-1:-1:-1;33670:2:0;33660:12;33582:106;33715:8;33706:5;:17;33702:106;;33753:8;33744:17;;;-1:-1:-1;33790:2:0;33780:12;33702:106;33835:7;33826:5;:16;33822:103;;33872:7;33863:16;;;-1:-1:-1;33908:1:0;33898:11;33822:103;33952:7;33943:5;:16;33939:103;;33989:7;33980:16;;;-1:-1:-1;34025:1:0;34015:11;33939:103;34069:7;34060:5;:16;34056:103;;34106:7;34097:16;;;-1:-1:-1;34142:1:0;34132:11;34056:103;34186:7;34177:5;:16;34173:68;;34224:1;34214:11;34269:6;33335:948;-1:-1:-1;;33335:948:0:o;22519:376::-;22630:5;;22604:4;;-1:-1:-1;;;;;22630:5:0;;;22624:11;;;;22621:244;;22664:9;;-1:-1:-1;;;;;22664:9:0;;;22656:17;;;;22652:202;;-1:-1:-1;;;;;22694:13:0;;;;;;:9;:13;;;;;:23;;22711:6;;22694:13;:23;;22711:6;;22694:23;:::i;:::-;;;;-1:-1:-1;22743:4:0;;-1:-1:-1;22736:11:0;;-1:-1:-1;22736:11:0;22652:202;22796:9;;22788:50;;-1:-1:-1;;;;;22796:9:0;;;;22816:21;22788:50;;;;;22796:9;22788:50;22796:9;22788:50;22816:21;22796:9;22788:50;;;;;;;;;;;;;;;;;;;;;22652:202;-1:-1:-1;22882:5:0;22519:376;;;;;:::o;24781:373::-;-1:-1:-1;;;;;24842:18:0;;24838:73;;24884:15;;-1:-1:-1;;;24884:15:0;;;;;;;;;;;24838:73;-1:-1:-1;;;;;24936:12:0;;24923:10;24936:12;;;:6;:12;;;;;24949:19;;:23;;24971:1;;24949:23;:::i;:::-;24936:37;;;;;;;;:::i;:::-;;;;;;;;;24923:50;;24984:6;:12;24991:4;-1:-1:-1;;;;;24984:12:0;-1:-1:-1;;;;;24984:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;24984:18:0;;;;;;;;;;;;25020:15;;;:11;:15;;;;;;25013:22;;;25053:8;:12;;;;;25046:19;;-1:-1:-1;;;;;;25046:19:0;;;;;;25083:11;:15;;;;;;25076:22;;;;;;;;25116:30;25032:2;;24984:18;-1:-1:-1;;;;;25116:30:0;;;;;24984:18;;25116:30;24827:327;24781:373;:::o;44940:115::-;12231:19;:17;:19::i;:::-;45032:15:::1;45044:2;-1:-1:-1::0;;;;;24358:16:0;;24354:74;;24398:18;;-1:-1:-1;;;24398:18:0;;;;;;;;;;;24354:74;24465:6;:8;;;;;;;;:6;24533:12;;;:8;:12;;;;;;-1:-1:-1;;;;;24533:12:0;:26;24529:81;;24583:15;;-1:-1:-1;;;24583:15:0;;;;;;;;;;;24529:81;24622:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;24622:17:0;-1:-1:-1;;;;;24622:17:0;;;;;;;;24650:10;;;:6;:10;;;;;:19;;-1:-1:-1;24650:19:0;;;;;;;;;;;;;;;24698:10;;:17;;:21;;-1:-1:-1;24698:21:0;:::i;:::-;24680:15;;;;:11;:15;;;;;;:39;;;;24737:28;;24692:2;;-1:-1:-1;;;;;24737:28:0;;;;;24680:15;;24737:28;24343:430;24299:474;:::o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:180::-;729:6;782:2;770:9;761:7;757:23;753:32;750:52;;;798:1;795;788:12;750:52;-1:-1:-1;821:23:1;;670:180;-1:-1:-1;670:180:1:o;1063:173::-;1131:20;;-1:-1:-1;;;;;1180:31:1;;1170:42;;1160:70;;1226:1;1223;1216:12;1241:254;1309:6;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;1485:2;1470:18;;;;1457:32;;-1:-1:-1;;;1241:254:1:o;1874:328::-;1951:6;1959;1967;2020:2;2008:9;1999:7;1995:23;1991:32;1988:52;;;2036:1;2033;2026:12;1988:52;2059:29;2078:9;2059:29;:::i;:::-;2049:39;;2107:38;2141:2;2130:9;2126:18;2107:38;:::i;:::-;2097:48;;2192:2;2181:9;2177:18;2164:32;2154:42;;1874:328;;;;;:::o;2396:347::-;2461:6;2469;2522:2;2510:9;2501:7;2497:23;2493:32;2490:52;;;2538:1;2535;2528:12;2490:52;2561:29;2580:9;2561:29;:::i;:::-;2551:39;;2640:2;2629:9;2625:18;2612:32;2687:5;2680:13;2673:21;2666:5;2663:32;2653:60;;2709:1;2706;2699:12;2653:60;2732:5;2722:15;;;2396:347;;;;;:::o;2748:186::-;2807:6;2860:2;2848:9;2839:7;2835:23;2831:32;2828:52;;;2876:1;2873;2866:12;2828:52;2899:29;2918:9;2899:29;:::i;2939:808::-;3036:6;3044;3052;3060;3068;3121:3;3109:9;3100:7;3096:23;3092:33;3089:53;;;3138:1;3135;3128:12;3089:53;3161:29;3180:9;3161:29;:::i;:::-;3151:39;;3209:38;3243:2;3232:9;3228:18;3209:38;:::i;:::-;3199:48;;3294:2;3283:9;3279:18;3266:32;3256:42;;3349:2;3338:9;3334:18;3321:32;3372:18;3413:2;3405:6;3402:14;3399:34;;;3429:1;3426;3419:12;3399:34;3467:6;3456:9;3452:22;3442:32;;3512:7;3505:4;3501:2;3497:13;3493:27;3483:55;;3534:1;3531;3524:12;3483:55;3574:2;3561:16;3600:2;3592:6;3589:14;3586:34;;;3616:1;3613;3606:12;3586:34;3661:7;3656:2;3647:6;3643:2;3639:15;3635:24;3632:37;3629:57;;;3682:1;3679;3672:12;3629:57;2939:808;;;;-1:-1:-1;2939:808:1;;-1:-1:-1;3713:2:1;3705:11;;3735:6;2939:808;-1:-1:-1;;;2939:808:1:o;3752:260::-;3820:6;3828;3881:2;3869:9;3860:7;3856:23;3852:32;3849:52;;;3897:1;3894;3887:12;3849:52;3920:29;3939:9;3920:29;:::i;:::-;3910:39;;3968:38;4002:2;3991:9;3987:18;3968:38;:::i;:::-;3958:48;;3752:260;;;;;:::o;4017:127::-;4078:10;4073:3;4069:20;4066:1;4059:31;4109:4;4106:1;4099:15;4133:4;4130:1;4123:15;4149:922;4218:6;4271:2;4259:9;4250:7;4246:23;4242:32;4239:52;;;4287:1;4284;4277:12;4239:52;4327:9;4314:23;4356:18;4397:2;4389:6;4386:14;4383:34;;;4413:1;4410;4403:12;4383:34;4451:6;4440:9;4436:22;4426:32;;4496:7;4489:4;4485:2;4481:13;4477:27;4467:55;;4518:1;4515;4508:12;4467:55;4554:2;4541:16;4576:2;4572;4569:10;4566:36;;;4582:18;;:::i;:::-;4657:2;4651:9;4625:2;4711:13;;-1:-1:-1;;4707:22:1;;;4731:2;4703:31;4699:40;4687:53;;;4755:18;;;4775:22;;;4752:46;4749:72;;;4801:18;;:::i;:::-;4841:10;4837:2;4830:22;4876:2;4868:6;4861:18;4916:7;4911:2;4906;4902;4898:11;4894:20;4891:33;4888:53;;;4937:1;4934;4927:12;4888:53;4993:2;4988;4984;4980:11;4975:2;4967:6;4963:15;4950:46;5038:1;5016:15;;;5033:2;5012:24;5005:35;;;;-1:-1:-1;5020:6:1;4149:922;-1:-1:-1;;;;;4149:922:1:o;5076:380::-;5155:1;5151:12;;;;5198;;;5219:61;;5273:4;5265:6;5261:17;5251:27;;5219:61;5326:2;5318:6;5315:14;5295:18;5292:38;5289:161;;5372:10;5367:3;5363:20;5360:1;5353:31;5407:4;5404:1;5397:15;5435:4;5432:1;5425:15;5289:161;;5076:380;;;:::o;5461:127::-;5522:10;5517:3;5513:20;5510:1;5503:31;5553:4;5550:1;5543:15;5577:4;5574:1;5567:15;5593:128;5660:9;;;5681:11;;;5678:37;;;5695:18;;:::i;5726:127::-;5787:10;5782:3;5778:20;5775:1;5768:31;5818:4;5815:1;5808:15;5842:4;5839:1;5832:15;5858:127;5919:10;5914:3;5910:20;5907:1;5900:31;5950:4;5947:1;5940:15;5974:4;5971:1;5964:15;6550:290;6619:6;6672:2;6660:9;6651:7;6647:23;6643:32;6640:52;;;6688:1;6685;6678:12;6640:52;6714:16;;-1:-1:-1;;;;;;6759:32:1;;6749:43;;6739:71;;6806:1;6803;6796:12;6845:168;6918:9;;;6949;;6966:15;;;6960:22;;6946:37;6936:71;;6987:18;;:::i;7018:662::-;-1:-1:-1;;;;;7297:15:1;;;7279:34;;7349:15;;7344:2;7329:18;;7322:43;7396:2;7381:18;;7374:34;;;7444:3;7439:2;7424:18;;7417:31;;;7464:19;;7457:35;;;7222:4;7485:6;7535;7259:3;7514:19;;7501:49;7600:1;7594:3;7585:6;7574:9;7570:22;7566:32;7559:43;7670:3;7663:2;7659:7;7654:2;7646:6;7642:15;7638:29;7627:9;7623:45;7619:55;7611:63;;7018:662;;;;;;;;:::o;7811:1020::-;7987:3;8016:1;8049:6;8043:13;8079:36;8105:9;8079:36;:::i;:::-;8134:1;8151:18;;;8178:133;;;;8325:1;8320:356;;;;8144:532;;8178:133;-1:-1:-1;;8211:24:1;;8199:37;;8284:14;;8277:22;8265:35;;8256:45;;;-1:-1:-1;8178:133:1;;8320:356;8351:6;8348:1;8341:17;8381:4;8426:2;8423:1;8413:16;8451:1;8465:165;8479:6;8476:1;8473:13;8465:165;;;8557:14;;8544:11;;;8537:35;8600:16;;;;8494:10;;8465:165;;;8469:3;;;8659:6;8654:3;8650:16;8643:23;;8144:532;;;;;8707:6;8701:13;8723:68;8782:8;8777:3;8770:4;8762:6;8758:17;8723:68;:::i;:::-;8807:18;;7811:1020;-1:-1:-1;;;;7811:1020:1:o;8836:545::-;8938:2;8933:3;8930:11;8927:448;;;8974:1;8999:5;8995:2;8988:17;9044:4;9040:2;9030:19;9114:2;9102:10;9098:19;9095:1;9091:27;9085:4;9081:38;9150:4;9138:10;9135:20;9132:47;;;-1:-1:-1;9173:4:1;9132:47;9228:2;9223:3;9219:12;9216:1;9212:20;9206:4;9202:31;9192:41;;9283:82;9301:2;9294:5;9291:13;9283:82;;;9346:17;;;9327:1;9316:13;9283:82;;;9287:3;;;8836:545;;;:::o;9557:1352::-;9683:3;9677:10;9710:18;9702:6;9699:30;9696:56;;;9732:18;;:::i;:::-;9761:97;9851:6;9811:38;9843:4;9837:11;9811:38;:::i;:::-;9805:4;9761:97;:::i;:::-;9913:4;;9977:2;9966:14;;9994:1;9989:663;;;;10696:1;10713:6;10710:89;;;-1:-1:-1;10765:19:1;;;10759:26;10710:89;-1:-1:-1;;9514:1:1;9510:11;;;9506:24;9502:29;9492:40;9538:1;9534:11;;;9489:57;10812:81;;9959:944;;9989:663;7758:1;7751:14;;;7795:4;7782:18;;-1:-1:-1;;10025:20:1;;;10143:236;10157:7;10154:1;10151:14;10143:236;;;10246:19;;;10240:26;10225:42;;10338:27;;;;10306:1;10294:14;;;;10173:19;;10143:236;;;10147:3;10407:6;10398:7;10395:19;10392:201;;;10468:19;;;10462:26;-1:-1:-1;;10551:1:1;10547:14;;;10563:3;10543:24;10539:37;10535:42;10520:58;10505:74;;10392:201;-1:-1:-1;;;;;10639:1:1;10623:14;;;10619:22;10606:36;;-1:-1:-1;9557:1352:1:o;10914:422::-;11003:1;11046:5;11003:1;11060:270;11081:7;11071:8;11068:21;11060:270;;;11140:4;11136:1;11132:6;11128:17;11122:4;11119:27;11116:53;;;11149:18;;:::i;:::-;11199:7;11189:8;11185:22;11182:55;;;11219:16;;;;11182:55;11298:22;;;;11258:15;;;;11060:270;;;11064:3;10914:422;;;;;:::o;11341:806::-;11390:5;11420:8;11410:80;;-1:-1:-1;11461:1:1;11475:5;;11410:80;11509:4;11499:76;;-1:-1:-1;11546:1:1;11560:5;;11499:76;11591:4;11609:1;11604:59;;;;11677:1;11672:130;;;;11584:218;;11604:59;11634:1;11625:10;;11648:5;;;11672:130;11709:3;11699:8;11696:17;11693:43;;;11716:18;;:::i;:::-;-1:-1:-1;;11772:1:1;11758:16;;11787:5;;11584:218;;11886:2;11876:8;11873:16;11867:3;11861:4;11858:13;11854:36;11848:2;11838:8;11835:16;11830:2;11824:4;11821:12;11817:35;11814:77;11811:159;;;-1:-1:-1;11923:19:1;;;11955:5;;11811:159;12002:34;12027:8;12021:4;12002:34;:::i;:::-;12072:6;12068:1;12064:6;12060:19;12051:7;12048:32;12045:58;;;12083:18;;:::i;:::-;12121:20;;11341:806;-1:-1:-1;;;11341:806:1:o;12152:140::-;12210:5;12239:47;12280:4;12270:8;12266:19;12260:4;12239:47;:::i;12297:125::-;12362:9;;;12383:10;;;12380:36;;;12396:18;;:::i;13270:217::-;13310:1;13336;13326:132;;13380:10;13375:3;13371:20;13368:1;13361:31;13415:4;13412:1;13405:15;13443:4;13440:1;13433:15;13326:132;-1:-1:-1;13472:9:1;;13270:217::o;13492:135::-;13531:3;13552:17;;;13549:43;;13572:18;;:::i;:::-;-1:-1:-1;13619:1:1;13608:13;;13492:135::o
Swarm Source
ipfs://cce80241bc24de973a74f8755541a266e251e698278697805859cd38186f9273
Loading...
Loading
Loading...
Loading
[ 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.