ERC-20
Overview
Max Total Supply
1,000,000,000 GUESS
Holders
653
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,152,634.912587072 GUESSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ProofNonReflectionTokenCutter
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: None pragma solidity ^0.8.17; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "../libraries/Ownable.sol"; import "../libraries/Context.sol"; import "../libraries/ProofNonReflectionTokenFees.sol"; import "../interfaces/IFACTORY.sol"; import "../interfaces/IDividendDistributor.sol"; import "../interfaces/IUniswapV2Router02.sol"; import "../interfaces/IUniswapV2Factory.sol"; import "../interfaces/IProofNonReflectionTokenCutter.sol"; contract ProofNonReflectionTokenCutter is Context, IProofNonReflectionTokenCutter { //This token was created with PROOF, and audited by Solidity Finance — https://proofplatform.io/projects mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; address payable public proofBurnerAddress; address public proofAdmin; uint256 public whitelistEndTime; uint256 public whitelistPeriod; bool public restrictWhales = true; mapping(address => bool) public userWhitelist; address[] public nftWhitelist; bool public whitelistMode = true; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isTxLimitExempt; mapping(address => bool) public isDividendExempt; uint256 public launchedAt; uint256 public proofFee = 2; uint256 public mainFee; uint256 public lpFee; uint256 public devFee; uint256 public mainFeeOnSell; uint256 public lpFeeOnSell; uint256 public devFeeOnSell; uint256 public totalFee; uint256 public totalFeeIfSelling; IUniswapV2Router02 public router; address public pair; address public factory; address public tokenOwner; address payable public devWallet; address payable public mainWallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public tradingStatus = true; uint256 public _maxTxAmount; uint256 public _walletMax; uint256 public swapThreshold; constructor() { factory = msg.sender; } modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } modifier onlyProofAdmin() { require( proofAdmin == _msgSender(), "Ownable: caller is not the proofAdmin" ); _; } modifier onlyOwner() { require(tokenOwner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyFactory() { require(factory == _msgSender(), "Ownable: caller is not the factory"); _; } function setBasicData( BaseData memory _baseData, ProofNonReflectionTokenFees.allFees memory fees ) external onlyFactory { _name = _baseData.tokenName; _symbol = _baseData.tokenSymbol; _totalSupply = _baseData.initialSupply; //Tx & Wallet Limits require(_baseData.percentToLP >= 70, "Too low"); _maxTxAmount = (_baseData.initialSupply * 5) / 1000; _walletMax = (_baseData.initialSupply * 1) / 100; swapThreshold = (_baseData.initialSupply * 5) / 4000; router = IUniswapV2Router02(_baseData.routerAddress); pair = IUniswapV2Factory(router.factory()).createPair( router.WETH(), address(this) ); _allowances[address(this)][address(router)] = type(uint256).max; userWhitelist[address(this)] = true; userWhitelist[factory] = true; userWhitelist[pair] = true; userWhitelist[_baseData.owner] = true; userWhitelist[_baseData.initialProofAdmin] = true; userWhitelist[_baseData.routerAddress] = true; _addWhitelist(_baseData.whitelists); nftWhitelist = _baseData.nftWhitelist; isFeeExempt[address(this)] = true; isFeeExempt[factory] = true; isFeeExempt[_baseData.owner] = true; isTxLimitExempt[_baseData.owner] = true; isTxLimitExempt[pair] = true; isTxLimitExempt[factory] = true; isTxLimitExempt[DEAD] = true; isTxLimitExempt[ZERO] = true; whitelistPeriod = _baseData.whitelistPeriod; //Fees lpFee = fees.lpFee; lpFeeOnSell = fees.lpFeeOnSell; devFee = fees.devFee; devFeeOnSell = fees.devFeeOnSell; mainFee = fees.mainFee; mainFeeOnSell = fees.mainFeeOnSell; totalFee = devFee + lpFee + mainFee + proofFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + mainFeeOnSell + proofFee; require(totalFee <= 12, "Too high fee"); require(totalFeeIfSelling <= 17, "Too high sell fee"); tokenOwner = _baseData.owner; devWallet = payable(_baseData.dev); mainWallet = payable(_baseData.main); proofAdmin = _baseData.initialProofAdmin; //Initial supply uint256 forLP = (_baseData.initialSupply * _baseData.percentToLP) / 100; //95% uint256 forOwner = _baseData.initialSupply - forLP; //5% _balances[msg.sender] += forLP; _balances[_baseData.owner] += forOwner; emit Transfer(address(0), msg.sender, forLP); emit Transfer(address(0), _baseData.owner, forOwner); } //proofAdmin functions function updateWhitelistPeriod( uint256 _whitelistPeriod ) external onlyProofAdmin { whitelistPeriod = _whitelistPeriod; whitelistEndTime = launchedAt + (60 * _whitelistPeriod); whitelistMode = true; } function updateProofAdmin( address newAdmin ) external virtual onlyProofAdmin { proofAdmin = newAdmin; userWhitelist[newAdmin] = true; } function updateProofBurnerAddress( address newproofBurnerAddress ) external onlyProofAdmin { proofBurnerAddress = payable(newproofBurnerAddress); } //Factory functions function swapTradingStatus() external onlyFactory { tradingStatus = !tradingStatus; } function setLaunchedAt() external onlyFactory { require(launchedAt == 0, "already launched"); launchedAt = block.timestamp; whitelistEndTime = block.timestamp + (60 * whitelistPeriod); whitelistMode = true; } function cancelToken() external onlyFactory { isFeeExempt[address(router)] = true; isTxLimitExempt[address(router)] = true; isTxLimitExempt[tokenOwner] = true; tradingStatus = true; restrictWhales = false; swapAndLiquifyEnabled = false; } //Owner functions function changeFees( uint256 initialMainFee, uint256 initialMainFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell, uint256 initialDevFee, uint256 initialDevFeeOnSell ) external onlyOwner { mainFee = initialMainFee; lpFee = initialLpFee; devFee = initialDevFee; mainFeeOnSell = initialMainFeeOnSell; lpFeeOnSell = initialLpFeeOnSell; devFeeOnSell = initialDevFeeOnSell; totalFee = devFee + lpFee + proofFee + mainFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell; require(totalFee <= 12, "Too high fee"); require(totalFeeIfSelling <= 17, "Too high fee"); } function changeTxLimit(uint256 newLimit) external onlyOwner { require(launchedAt != 0, "!launched"); require(newLimit >= (_totalSupply * 5) / 1000, "Min 0.5%"); require(newLimit <= (_totalSupply * 3) / 100, "Max 3%"); _maxTxAmount = newLimit; } function changeWalletLimit(uint256 newLimit) external onlyOwner { require(launchedAt != 0, "!launched"); require(newLimit >= (_totalSupply * 5) / 1000, "Min 0.5%"); require(newLimit <= (_totalSupply * 3) / 100, "Max 3%"); _walletMax = newLimit; } function changeRestrictWhales(bool newValue) external onlyOwner { require(launchedAt != 0, "!launched"); restrictWhales = newValue; } function changeIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function changeIsTxLimitExempt( address holder, bool exempt ) external onlyOwner { isTxLimitExempt[holder] = exempt; } function reduceProofFee() external onlyOwner { require(proofFee == 2, "!already reduced"); require(launchedAt != 0, "!launched"); require(block.timestamp >= launchedAt + 72 hours, "too soon"); proofFee = 1; totalFee = devFee + lpFee + proofFee + mainFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell; } function adjustProofFee(uint256 _proofFee) external onlyProofAdmin { require(launchedAt != 0, "!launched"); if (block.timestamp >= launchedAt + 72 hours) { require(_proofFee <= 1); proofFee = _proofFee; totalFee = devFee + lpFee + proofFee + mainFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell; } else { require(_proofFee <= 2); proofFee = _proofFee; totalFee = devFee + lpFee + proofFee + mainFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + proofFee + mainFeeOnSell; } } function setDevWallet(address payable newDevWallet) external onlyOwner { devWallet = payable(newDevWallet); } function setMainWallet(address payable newMainWallet) external onlyOwner { mainWallet = newMainWallet; } function setOwnerWallet(address payable newOwnerWallet) external onlyOwner { tokenOwner = newOwnerWallet; } function changeSwapBackSettings( bool enableSwapBack, uint256 newSwapBackLimit ) external onlyOwner { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; } function isWhitelisted(address user) public view returns (bool) { return userWhitelist[user]; } function holdsSupportedNFT(address user) public view returns (bool) { for (uint256 i = 0; i < nftWhitelist.length; i++) { if (IERC721(nftWhitelist[i]).balanceOf(user) > 0) { return true; } } return false; } function getCirculatingSupply() external view returns (uint256) { return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO); } /** * @dev Returns the name of the token. */ function name() external view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() external view virtual override returns (uint8) { return 9; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() external view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address to, uint256 amount ) external virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) external virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) external virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) external virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) external virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal returns (bool) { require(tradingStatus, "Trading Closed"); if(whitelistMode) { if (block.timestamp >= whitelistEndTime ) { whitelistMode = false; } else { if (sender == pair) { //buy require(isWhitelisted(recipient) || holdsSupportedNFT(recipient), "Not whitelisted"); } else if (recipient == pair) { //sell require(isWhitelisted(sender) || holdsSupportedNFT(sender), "Not whitelisted"); } else { //transfer require((isWhitelisted(sender) || holdsSupportedNFT(sender)) && (isWhitelisted(recipient) || holdsSupportedNFT(recipient)), "Not Whitelisted"); } } } if (inSwapAndLiquify) { return _basicTransfer(sender, recipient, amount); } if (recipient == pair && restrictWhales) { require( amount <= _maxTxAmount || (isTxLimitExempt[sender] && isTxLimitExempt[recipient]), "Max TX" ); } if (!isTxLimitExempt[recipient] && restrictWhales) { require(_balances[recipient] + amount <= _walletMax, "Max Wallet"); } if ( sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold ) { swapBack(); } _balances[sender] = _balances[sender] - amount; uint256 finalAmount = amount; if (sender == pair || recipient == pair) { finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount; } _balances[recipient] = _balances[recipient] + finalAmount; emit Transfer(sender, recipient, finalAmount); return true; } function _basicTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { _balances[sender] = _balances[sender] - amount; _balances[recipient] = _balances[recipient] + amount; emit Transfer(sender, recipient, amount); return true; } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function takeFee( address sender, address recipient, uint256 amount ) internal returns (uint256) { uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee; uint256 feeAmount = (amount * feeApplicable) / 100; _balances[address(this)] = _balances[address(this)] + feeAmount; emit Transfer(sender, address(this), feeAmount); return amount - feeAmount; } function swapBack() internal lockTheSwap { uint256 tokensToLiquify = _balances[address(this)]; uint256 amountToLiquify; uint256 devBalance; uint256 proofBalance; uint256 amountEthLiquidity; // Use sell ratios if buy tax too low if (totalFee <= 2) { amountToLiquify = (tokensToLiquify * lpFeeOnSell) / totalFeeIfSelling / 2; } else { amountToLiquify = (tokensToLiquify * lpFee) / totalFee / 2; } uint256 amountToSwap = tokensToLiquify - amountToLiquify; if (amountToSwap == 0) return; address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; // Use sell ratios if buy tax too low if (totalFee <= 2) { amountEthLiquidity = (amountETH * lpFeeOnSell) / totalFeeIfSelling / 2; } else { amountEthLiquidity = (amountETH * lpFee) / totalFee / 2; } if (amountToLiquify > 0) { router.addLiquidityETH{value: amountEthLiquidity}( address(this), amountToLiquify, 0, 0, 0x000000000000000000000000000000000000dEaD, block.timestamp ); } uint256 amountETHafterLP = address(this).balance; // Use sell ratios if buy tax too low if (totalFee <= 2) { devBalance = (amountETHafterLP * devFeeOnSell) / totalFeeIfSelling; proofBalance = (amountETHafterLP * proofFee) / totalFeeIfSelling; } else { devBalance = (amountETHafterLP * devFee) / totalFee; proofBalance = (amountETHafterLP * proofFee) / totalFee; } uint256 amountEthMain = amountETHafterLP - devBalance - proofBalance; if (amountETH > 0) { if (proofBalance > 0) { uint256 revenueSplit = proofBalance / 2; (bool sent, ) = payable(IFACTORY(factory).proofRevenueAddress()).call{value: revenueSplit}(""); require(sent); (bool sent1, ) = payable(IFACTORY(factory).proofRewardPoolAddress()).call{value: revenueSplit}(""); require(sent1); } if (devBalance > 0) { (bool sent, ) = devWallet.call{value: devBalance}(""); require(sent); } if (amountEthMain > 0) { (bool sent1, ) = mainWallet.call{value: amountEthMain}(""); require(sent1); } } } function _addWhitelist(address[] memory _whitelists) internal { uint256 length = _whitelists.length; for (uint256 i = 0; i < length; i++) { userWhitelist[_whitelists[i]] = true; } } function addMoreToWhitelist(WhitelistAdd_ memory _WhitelistAdd) external onlyFactory { _addWhitelist(_WhitelistAdd.whitelists); } receive() external payable {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IDividendDistributor { function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; function setMinPeriod(uint256 _minPeriod) external; function setMinDistribution(uint256 _minDistribution) external; function rewardTokenAddress() external view returns(address); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IFACTORY { function proofRevenueAddress() external view returns (address); function proofRewardPoolAddress() external view returns (address); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "../libraries/ProofNonReflectionTokenFees.sol"; interface IProofNonReflectionTokenCutter is IERC20, IERC20Metadata { struct BaseData { string tokenName; string tokenSymbol; uint256 initialSupply; uint256 percentToLP; uint256 whitelistPeriod; address owner; address dev; address main; address routerAddress; address initialProofAdmin; address[] whitelists; address[] nftWhitelist; } struct WhitelistAdd_ { address [] whitelists; } function setBasicData( BaseData memory _baseData, ProofNonReflectionTokenFees.allFees memory fees ) external; function addMoreToWhitelist( WhitelistAdd_ memory _WhitelistAdd ) external; function updateWhitelistPeriod( uint256 _whitelistPeriod ) external; }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; import "./Context.sol"; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 { require( newOwner != address(0), "new owner is the zero address" ); _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); } }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; library ProofNonReflectionTokenFees { struct allFees { uint256 mainFee; uint256 mainFeeOnSell; uint256 lpFee; uint256 lpFeeOnSell; uint256 devFee; uint256 devFeeOnSell; } }
{ "optimizer": { "enabled": true, "runs": 200, "details": { "yul": true } }, "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address[]","name":"whitelists","type":"address[]"}],"internalType":"struct IProofNonReflectionTokenCutter.WhitelistAdd_","name":"_WhitelistAdd","type":"tuple"}],"name":"addMoreToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proofFee","type":"uint256"}],"name":"adjustProofFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialMainFee","type":"uint256"},{"internalType":"uint256","name":"initialMainFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"holdsSupportedNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofBurnerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reduceProofFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"uint256","name":"percentToLP","type":"uint256"},{"internalType":"uint256","name":"whitelistPeriod","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"main","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"initialProofAdmin","type":"address"},{"internalType":"address[]","name":"whitelists","type":"address[]"},{"internalType":"address[]","name":"nftWhitelist","type":"address[]"}],"internalType":"struct IProofNonReflectionTokenCutter.BaseData","name":"_baseData","type":"tuple"},{"components":[{"internalType":"uint256","name":"mainFee","type":"uint256"},{"internalType":"uint256","name":"mainFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"lpFee","type":"uint256"},{"internalType":"uint256","name":"lpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"},{"internalType":"uint256","name":"devFeeOnSell","type":"uint256"}],"internalType":"struct ProofNonReflectionTokenFees.allFees","name":"fees","type":"tuple"}],"name":"setBasicData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setLaunchedAt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMainWallet","type":"address"}],"name":"setMainWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"updateProofAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newproofBurnerAddress","type":"address"}],"name":"updateProofBurnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistPeriod","type":"uint256"}],"name":"updateWhitelistPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080806040523461005857600160ff1981816009541617600955600c541617600c55600260115561010160a81b61ffff60a81b19601f541617601f553360018060a01b0319601c541617601c5561305a908161005e8239f35b600080fdfe608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c9081630445b66714611f815750806306fdde0314611edb578063095ea7b314611eb55780630963da6c14611e9757806318160ddd14611e795780631df4ccfc14611e5b5780631f53ac0214611e0d57806323b62b7514611de457806323b872dd14611d2657806327193bc414611ca25780632837442514611c795780632b112e4914611c2b578063313ce56714611c0f5780633950935114611bbe5780633af32abf1461072f5780633c82281214611b105780633dab526914611abd5780633f4218e014611a7e5780634355855a14611a3f57806344de2e4c14611a1c5780634509a988146119d3578063497a000a146119795780634a74bb0214611953578063546a8811146118b757806359a51c341461188e5780636457f6bf14610e6d5780636827e76414610e4f578063704ce43e14610e3157806370a0823114610df757806370c757ec14610dd45780637c0ff20514610db65780637d1db4a514610d995780637db1342c14610d18578063807c2d9c14610cfa5780638b42507f14610cbb5780638ea5220f14610c9257806390fbd17f14610c655780639502c42614610c4757806395d89b4114610b69578063985b9db014610b4b578063a3a2e89e14610aed578063a3e6761014610ac4578063a457c2d714610a12578063a8aa1b31146109e9578063a9059cbb146109b7578063b48e665e14610999578063b72344a21461094d578063bb542ef014610905578063bf56b371146108e7578063c45a0155146108be578063ca987b0e146108a0578063cb29813c14610800578063cd1e330a146107e2578063d0a5eb4e14610794578063d4fb9a011461076e578063d741b9c31461072f578063d920334e146106ae578063dd62ed3e1461065d578063e572967b146105c3578063e66b1d1e14610573578063ebdfd72214610555578063ef92e22214610438578063f16fd78d146103d5578063f887ea40146103ac578063fabe62831461034e5763fbd7575314610300573861000f565b346103495760003660031901126103495761032660018060a01b03601c54163314612134565b601f805460ff60b01b19811660b091821c60ff161590911b60ff60b01b16179055005b600080fd5b346103495760403660031901126103495761001b61036a611fe5565b610372612034565b601d5490916001600160a01b039161038d90831633146122eb565b16600052600e60205260406000209060ff801983541691151516179055565b3461034957600036600319011261034957601a546040516001600160a01b039091168152602090f35b34610349576020366003190112610349576103ee611fe5565b600654906001600160a01b03906104088284163314612291565b1680916001600160601b0360a01b1617600655600052600a6020526040600020600160ff19825416179055600080f35b346103495760003660031901126103495761045e60018060a01b03601d541633146122eb565b60026011540361051d57601054610476811515612336565b6203f48081018091116105075742106104d75760016011556104b16104a86104a36014546013549061223c565b61222e565b6012549061223c565b6018556104d26104c96104a36017546016549061223c565b6015549061223c565b601955005b60405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b6044820152606490fd5b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606490fd5b34610349576000366003190112610349576020600754604051908152f35b346103495760203660031901126103495761058c612025565b6105a160018060a01b03601d541633146122eb565b6105ae6010541515612336565b60ff8019600954169115151617600955600080f35b346103495760031960203682011261034957600435906001600160401b0390818311610349576020908336030112610349576040519060208201828110828211176106475760405282600401359081116103495761001b92600461062a92369201016120c6565b815261064160018060a01b03601c54163314612134565b51612f9d565b634e487b7160e01b600052604160045260246000fd5b3461034957604036600319011261034957610676611fe5565b61067e611ffb565b9060018060a01b038091166000526001602052604060002091166000526020526020604060002054604051908152f35b34610349576020366003190112610349576004356106d760018060a01b03601d541633146122eb565b6106e46010541515612336565b60025460058102811590828104600514821715610507576103e861070b910484101561236e565b60038202918204600314171561050757606461072a91048211156123a5565b602055005b34610349576020366003190112610349576001600160a01b03610750611fe5565b16600052600a602052602060ff604060002054166040519015158152f35b3461034957600036600319011261034957602060ff601f5460b01c166040519015158152f35b34610349576020366003190112610349576004356001600160a01b0381811691829003610349576107ca90601d541633146122eb565b6001600160601b0360a01b601f541617601f55600080f35b34610349576000366003190112610349576020601154604051908152f35b346103495760c03660031901126103495761001b6011600435610899600c61088d60243561087e6044359561087e6064356108836108716084359a60a4359b61085460018060a01b03601d541633146122eb565b86601255816013558060145588601555846016558c60175561223c565b9361087e8c54809661223c565b61223c565b988960185561223c565b92836019551115612249565b1115612249565b34610349576000366003190112610349576020601954604051908152f35b3461034957600036600319011261034957601c546040516001600160a01b039091168152602090f35b34610349576000366003190112610349576020601054604051908152f35b34610349576020366003190112610349576004356001600160a01b03818116918290036103495761093d601d549133908316146122eb565b6001600160a01b03191617601d55005b3461034957602036600319011261034957610966611fe5565b6006546001600160a01b0391906109809083163314612291565b166001600160601b0360a01b6005541617600555600080f35b34610349576000366003190112610349576020600854604051908152f35b34610349576040366003190112610349576109dd6109d3611fe5565b60243590336124ed565b50602060405160018152f35b3461034957600036600319011261034957601b546040516001600160a01b039091168152602090f35b3461034957604036600319011261034957610a2b611fe5565b60243590336000526001602052604060002060018060a01b03821660005260205260406000205491808310610a7157610a66920390336129b3565b602060405160018152f35b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b3461034957600036600319011261034957601d546040516001600160a01b039091168152602090f35b346103495760403660031901126103495761001b610b09611fe5565b610b11612034565b601d5490916001600160a01b0391610b2c90831633146122eb565b16600052600d60205260406000209060ff801983541691151516179055565b34610349576000366003190112610349576020601554604051908152f35b34610349576000366003190112610349576040516000600454610b8b8161218b565b80845290600190818116908115610c205750600114610bc5575b610bc184610bb581860382612043565b60405191829182611f9c565b0390f35b6004600090815292507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610c08575050508101602001610bb582610ba5565b80546020858701810191909152909301928101610bf0565b60ff191660208087019190915292151560051b85019092019250610bb59150839050610ba5565b34610349576000366003190112610349576020601754604051908152f35b34610349576020366003190112610349576020610c88610c83611fe5565b6123e9565b6040519015158152f35b3461034957600036600319011261034957601e546040516001600160a01b039091168152602090f35b34610349576020366003190112610349576001600160a01b03610cdc611fe5565b16600052600e602052602060ff604060002054166040519015158152f35b34610349576000366003190112610349576020602154604051908152f35b3461034957602036600319011261034957600435610d4160018060a01b03601d541633146122eb565b610d4e6010541515612336565b60025460058102811590828104600514821715610507576103e8610d75910484101561236e565b600382029182046003141715610507576064610d9491048211156123a5565b602155005b346103495760003660031901126103495760208054604051908152f35b34610349576000366003190112610349576020601654604051908152f35b3461034957600036600319011261034957602060ff600c54166040519015158152f35b34610349576020366003190112610349576001600160a01b03610e18611fe5565b1660005260006020526020604060002054604051908152f35b34610349576000366003190112610349576020601354604051908152f35b34610349576000366003190112610349576020601454604051908152f35b346103495760031960e036820112610349576004356001600160401b0381116103495761018080928236030112610349576040519182018281106001600160401b038211176106475760405280600401356001600160401b03811161034957610edc906004369184010161207f565b825260248101356001600160401b03811161034957610f01906004369184010161207f565b6020830152604481013560408301526064810135606083015260848101356080830152610f3060a48201612011565b60a0830152610f4160c48201612011565b60c0830152610f5260e48201612011565b60e0830152610f646101048201612011565b610100830152610f776101248201612011565b6101208301526101448101356001600160401b03811161034957610fa190600436918401016120c6565b610140830152610164810135906001600160401b038211610349576004610fcb92369201016120c6565b61016082015260c0366023190112610349576040518060c08101106001600160401b0360c0830111176106475760c08101604052602435815260443560208201526064356040820152608435606082015260a435608082015260c43560a082015261104160018060a01b03601c54163314612134565b81519182516001600160401b0381116106475761105f60035461218b565b601f811161183f575b506020601f82116001146117b957819293946000926117ae575b50508160011b916000199060031b1c1916176003555b60208101519182516001600160401b038111610647576110b960045461218b565b601f8111611754575b506020601f82116001146116ce57819293946000926116c3575b50508160011b916000199060031b1c1916176004555b60408201516002556046606083015110611694576040820151806005810204600514811517156105075760056103e8910204602055604082015180800460011481151715610507576064900460215560408201518060058102046005148115171561050757610fa060059190910204602255610100820151601a80546001600160a01b0319166001600160a01b0392909216918217905560405163c45a015560e01b815290602082600481845afa90811561164957600492600092611672575b50602090604051938480926315ab88c960e31b82525afa9081156116495760446020926000948591611655575b506040516364e329cb60e11b81526001600160a01b0391821660048201523060248201529485938492165af19081156116495760009161161a575b50601b80546001600160a01b0319166001600160a01b03928316178155306000818152600160208181526040808420601a548816855282528084206000199055938352600a9052828220805460ff199081168317909155601c54861683528383208054821683179055935485168252828220805485168217905560a0870151851682528282208054851682179055610120870151851682528282208054851682179055610100870151909416815220805490911690911790556101408201516112e290612f9d565b6101608201518051906001600160401b0382116106475768010000000000000000821161064757602090600b5483600b558084106115f6575b5001600b60005260005b8281106115cb57306000908152600d602090815260408083208054600160ff199182168117909255601c80546001600160a01b039081168752848720805484168517905560a08c810180518316895286892080548616871790555182168852600e87528588208054851686179055601b54821688528588208054851686179055915416865283862080548316841790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548316841790559480527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c8054909116909117905560808089015160085590870151601381905560608801516016819055918801516014819055938801516017819055885160128190559389015160158190558a95601195929461147f94600c9461088d94929361087e93928492611472929091849161223c565b936108838a54809661223c565b116115925760a0810151601d80546001600160a01b03199081166001600160a01b039384161790915560c0830151601e8054831691841691909117905560e0830151601f80548316918416919091179055610120830151600680549092169216919091179055604081015160608201516000916064916114fe916121dc565b04602061150f826040860151612284565b933384528382526040842061152584825461223c565b905560a08101516001600160a01b0316845283825260408420805461154b90879061223c565b90556040519283527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928484843393a360a001516040519485526001600160a01b031693a3005b60405162461bcd60e51b8152602060048201526011602482015270546f6f20686967682073656c6c2066656560781b6044820152606490fd5b81516001600160a01b0316600080516020613005833981519152820155602090910190600101611325565b611614908460008051602061300583398151915291820191016121c5565b8561131b565b61163c915060203d602011611642575b6116348183612043565b81019061220f565b8361121a565b503d61162a565b6040513d6000823e3d90fd5b61166c9150843d8611611642576116348183612043565b876111df565b602091925061168d90823d8411611642576116348183612043565b91906111b2565b60405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606490fd5b0151905084806110dc565b60046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9060005b601f198416811061173c5750600193949583601f19811610611723575b505050811b016004556110f2565b015160001960f88460031b161c19169055848080611715565b9091602060018192858a0151815501930191016116f8565b61179e9060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c810191602085106117a4575b601f0160051c01906121c5565b846110c2565b9091508190611791565b015190508480611082565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9060005b601f19841681106118275750600193949583601f1981161061180e575b505050811b01600355611098565b015160001960f88460031b161c19169055848080611800565b9091602060018192858a0151815501930191016117e3565b6118889060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106117a457601f0160051c01906121c5565b84611068565b34610349576000366003190112610349576006546040516001600160a01b039091168152602090f35b3461034957600036600319011261034957601c546001600160a01b03906118e19082163314612134565b80601a5416600052600d60205260406000209060ff199160018382541617905580601a5416600052600e6020526040600020600183825416179055601d54166000526040600020600182825416179055601f549060095416600955600160b01b9061ffff60a81b191617601f55600080f35b3461034957600036600319011261034957602060ff601f5460a81c166040519015158152f35b34610349576020366003190112610349576004356119a260018060a01b03600654163314612291565b806008556010549080603c0290603c820403610507576119c19161223c565b600755600c805460ff19166001179055005b3461034957602036600319011261034957600435600b5481101561034957600b60005260008051602061300583398151915201546040516001600160a01b039091168152602090f35b3461034957600036600319011261034957602060ff600954166040519015158152f35b34610349576020366003190112610349576001600160a01b03611a60611fe5565b16600052600f602052602060ff604060002054166040519015158152f35b34610349576020366003190112610349576001600160a01b03611a9f611fe5565b16600052600d602052602060ff604060002054166040519015158152f35b3461034957604036600319011261034957611ad6612025565b611aeb60018060a01b03601d541633146122eb565b601f805460ff60a81b191691151560a81b60ff60a81b16919091179055602435602255005b3461034957602036600319011261034957600435611b3960018060a01b03600654163314612291565b601054611b47811515612336565b6203f4808101809111610507574210611b955760018111610349576104c9816104d292601155611b836104a88261087e6014546013549061223c565b60185561087e6017546016549061223c565b60028111610349576104c9816104d292601155611b836104a88261087e6014546013549061223c565b3461034957604036600319011261034957610a66611bda611fe5565b336000526001602052604060002060018060a01b038216600052602052611c0860243560406000205461223c565b90336129b3565b3461034957600036600319011261034957602060405160098152f35b34610349576000366003190112610349576020611c71611c5d60025461dead6000526000845260406000205490612284565b600080526000835260406000205490612284565b604051908152f35b34610349576000366003190112610349576005546040516001600160a01b039091168152602090f35b3461034957600036600319011261034957611cc860018060a01b03601c54163314612134565b601054611cee574260105560085480603c0290603c820403610507576119c1904261223c565b60405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606490fd5b3461034957606036600319011261034957611d3f611fe5565b611d47611ffb565b6044359060018060a01b0383166000526001602052604060002033600052602052604060002054926000198403611d83575b6109dd93506124ed565b828410611d9f57611d9a836109dd950333836129b3565b611d79565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b3461034957600036600319011261034957601f546040516001600160a01b039091168152602090f35b34610349576020366003190112610349576004356001600160a01b038181169182900361034957611e4390601d541633146122eb565b6001600160601b0360a01b601e541617601e55600080f35b34610349576000366003190112610349576020601854604051908152f35b34610349576000366003190112610349576020600254604051908152f35b34610349576000366003190112610349576020601254604051908152f35b3461034957604036600319011261034957610a66611ed1611fe5565b60243590336129b3565b34610349576000366003190112610349576040516000600354611efd8161218b565b80845290600190818116908115610c205750600114611f2657610bc184610bb581860382612043565b6003600090815292507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410611f69575050508101602001610bb582610ba5565b80546020858701810191909152909301928101611f51565b34610349576000366003190112610349576020906022548152f35b6020808252825181830181905290939260005b828110611fd157505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611faf565b600435906001600160a01b038216820361034957565b602435906001600160a01b038216820361034957565b35906001600160a01b038216820361034957565b60043590811515820361034957565b60243590811515820361034957565b90601f801991011681019081106001600160401b0382111761064757604052565b6001600160401b03811161064757601f01601f191660200190565b81601f820112156103495780359061209682612064565b926120a46040519485612043565b8284526020838301011161034957816000926020809301838601378301015290565b9080601f83011215610349578135906001600160401b038211610647578160051b604051936020936120fa85840187612043565b85528380860192820101928311610349578301905b82821061211d575050505090565b83809161212984612011565b81520191019061210f565b1561213b57565b60405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604482015261727960f01b6064820152608490fd5b90600182811c921680156121bb575b60208310146121a557565b634e487b7160e01b600052602260045260246000fd5b91607f169161219a565b8181106121d0575050565b600081556001016121c5565b8181029291811591840414171561050757565b81156121f9570490565b634e487b7160e01b600052601260045260246000fd5b9081602091031261034957516001600160a01b03811681036103495790565b906001820180921161050757565b9190820180921161050757565b1561225057565b60405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606490fd5b9190820391821161050757565b1561229857565b60405162461bcd60e51b815260206004820152602560248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660448201526420b236b4b760d91b6064820152608490fd5b156122f257565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561233d57565b60405162461bcd60e51b8152602060048201526009602482015268085b185d5b98da195960ba1b6044820152606490fd5b1561237557565b60405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606490fd5b156123ac57565b60405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606490fd5b60001981146105075760010190565b600090600b8054925b8381106124025750505050600090565b6000829052600080516020613005833981519152810154604080516370a0823160e01b81526001600160a01b0386811660048301529092602091829185916024918391165afa9182156124a55750600091612476575b50905061246d57612468906123da565b6123f2565b50505050600190565b82813d831161249e575b61248a8183612043565b8101031261249b5750518038612458565b80fd5b503d612480565b513d6000823e3d90fd5b156124b657565b60405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606490fd5b92919060ff91601f83815460b01c161561297d57600c5484811661283d575b5083815460a01c166127bd57601b546001600160a01b0393841694908416939190858514806127b2575b612747575b600090868252602094600e8652604093828585205416158061273c575b6126f2575b857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef98999a9b1698891415806126e4575b806126d7575b806126c2575b61269c575b508783528286526125b38185852054612284565b88845283875284842055888195601b541692838a148015612693575b6125fe575b509150508152808452816125eb848284205461223c565b91888152808652205551908152a3600190565b909192939550600d8752808587205416159081612682575b501561267a57612663920361266d5760646126346019545b836121dc565b0490308552848652612649828587205461223c565b3086528587528486205583518281528888883093a3612284565b91388088816125d4565b606461263460185461262e565b509050612663565b905081865284862054161538612616565b508382146125cf565b805460ff60a01b19908116600160a01b1782556126b7612ae5565b81541690553861259f565b5030845283875284842054602254111561259a565b5082815460a81c16612594565b5082815460a01c161561258e565b838752612702828686205461223c565b602154101561255d57845162461bcd60e51b815260048101889052600a60248201526913585e0815d85b1b195d60b21b6044820152606490fd5b508260095416612558565b6020548411801590612786575b61253b5760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606490fd5b50828816600052600e602052806040600020541680156127545750856000528060406000205416612754565b508060095416612536565b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919394925060209060018060a01b0380941693600095858752868452612809836040892054612284565b868852878552604088205516948581526040612828838284205461223c565b918781528085522055604051908152a3600190565b60075442106128545760ff1916600c555b3861250c565b50601b546001600160a01b03908782169082168181036128ab5750508316600052600a60205283604060002054168015612897575b612892906124af565b61284e565b506128926128a4846123e9565b9050612889565b909185169081036128e35750600052600a602052836040600020541680156128d657612892906124af565b506128926128a4876123e9565b90600052600a602052846040600020541690811561296c575b8161293e575b506128925760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606490fd5b9050600052600a6020528360406000205416801561295d575b38612902565b50612967836123e9565b612957565b9050612977876123e9565b906128fc565b60405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606490fd5b6001600160a01b03908116918215612a645716918215612a145760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b3d15612ae0573d90612ac682612064565b91612ad46040519384612043565b82523d6000602084013e565b606090565b60003081526020818152604080832054916018546002811115600014612f8a5750612b2b612b21612b18601654866121dc565b601954906121ef565b60011c8094612284565b8015612f835782519160608301936001600160401b039484811086821117612f6f578152600284528184019381368637805115612f5b57308552601a5482516315ab88c960e31b81526001600160a01b03979096600496919289169186898981865afa988915612f51578c99612f32575b508451986001998a1015612f1f578a1686860152823b15612f1b57855163791ac94760e01b815288810191909152602481018c905260a06044820152935160a485018190528b928592909160c484019190858c8b8f5b848410612ef6575050505050508383809230606483015242608483015203925af18015612eec57612ec6575b505060185447969060028111612eae5750612c3e612b18601654896121dc565b851c905b80612e22575b505060185447939060028111612e085750612c9193612c9e612c6c601754836121dc565b91612c99612c7d60195480956121ef565b978894612c8c601154856121dc565b6121ef565b938492612284565b612284565b97612caf575b505050505050505050565b889581612d1a575b505050505080612cf6575b505081612cd5575b808080808080612ca4565b828080938193601f54165af1612ce9612ab5565b501561249b578080612cca565b8180809285601e54165af1612d09612ab5565b5015612d16578238612cc2565b8280fd5b909192939495501c92818187601c5416855192838092633690e28760e01b82525afa908115612dfe578980878a829583958491612de1575b50165af1612d5e612ab5565b5015612ddd578086601c541684519384809263d7e7a9e760e01b82525afa928315612dd457508793868594859485948592612db7575b5050165af1612da1612ab5565b5015612db35783903880808080612cb7565b8380fd5b612dcd9250803d10611642576116348183612043565b3880612d94565b513d89823e3d90fd5b8780fd5b612df89150883d8a11611642576116348183612043565b38612d52565b84513d8b823e3d90fd5b612c9e612c9195612c99612c7d84612c8c601454856121dc565b60609060c488601a5416918551948593849263f305d71960e01b8452308b85015260248401528d60448401528d606484015261dead60848401524260a48401525af18015612ea457612e75575b80612c48565b606090813d8111612e9d575b612e8b8183612043565b81010312612e995738612e6f565b8680fd5b503d612e81565b82513d8a823e3d90fd5b612ebe90612c8c6013548a6121dc565b851c90612c42565b8198929811612ed9578752953880612c1e565b634e487b7160e01b825260418452602482fd5b83513d8b823e3d90fd5b90939698508484939692959850511681520194019101908d94928794928c8b8f612bf2565b8b80fd5b634e487b7160e01b8d526032895260248dfd5b612f4a919950873d8911611642576116348183612043565b9738612b9c565b86513d8e823e3d90fd5b634e487b7160e01b88526032600452602488fd5b634e487b7160e01b88526041600452602488fd5b5050505050565b612b21612b2b91612c8c601354876121dc565b805160005b818110612fae57505050565b8251811015612fee57612fe990600a602060018060a01b03818460051b8801015116600052526040600020600160ff198254161790556123da565b612fa2565b634e487b7160e01b600052603260045260246000fdfe0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9a26469706673582212203e5d351bb2e99e3736c6b110a6b598bb7c960fa560426f4d4360c81a87ecb11864736f6c63430008110033
Deployed Bytecode
0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c9081630445b66714611f815750806306fdde0314611edb578063095ea7b314611eb55780630963da6c14611e9757806318160ddd14611e795780631df4ccfc14611e5b5780631f53ac0214611e0d57806323b62b7514611de457806323b872dd14611d2657806327193bc414611ca25780632837442514611c795780632b112e4914611c2b578063313ce56714611c0f5780633950935114611bbe5780633af32abf1461072f5780633c82281214611b105780633dab526914611abd5780633f4218e014611a7e5780634355855a14611a3f57806344de2e4c14611a1c5780634509a988146119d3578063497a000a146119795780634a74bb0214611953578063546a8811146118b757806359a51c341461188e5780636457f6bf14610e6d5780636827e76414610e4f578063704ce43e14610e3157806370a0823114610df757806370c757ec14610dd45780637c0ff20514610db65780637d1db4a514610d995780637db1342c14610d18578063807c2d9c14610cfa5780638b42507f14610cbb5780638ea5220f14610c9257806390fbd17f14610c655780639502c42614610c4757806395d89b4114610b69578063985b9db014610b4b578063a3a2e89e14610aed578063a3e6761014610ac4578063a457c2d714610a12578063a8aa1b31146109e9578063a9059cbb146109b7578063b48e665e14610999578063b72344a21461094d578063bb542ef014610905578063bf56b371146108e7578063c45a0155146108be578063ca987b0e146108a0578063cb29813c14610800578063cd1e330a146107e2578063d0a5eb4e14610794578063d4fb9a011461076e578063d741b9c31461072f578063d920334e146106ae578063dd62ed3e1461065d578063e572967b146105c3578063e66b1d1e14610573578063ebdfd72214610555578063ef92e22214610438578063f16fd78d146103d5578063f887ea40146103ac578063fabe62831461034e5763fbd7575314610300573861000f565b346103495760003660031901126103495761032660018060a01b03601c54163314612134565b601f805460ff60b01b19811660b091821c60ff161590911b60ff60b01b16179055005b600080fd5b346103495760403660031901126103495761001b61036a611fe5565b610372612034565b601d5490916001600160a01b039161038d90831633146122eb565b16600052600e60205260406000209060ff801983541691151516179055565b3461034957600036600319011261034957601a546040516001600160a01b039091168152602090f35b34610349576020366003190112610349576103ee611fe5565b600654906001600160a01b03906104088284163314612291565b1680916001600160601b0360a01b1617600655600052600a6020526040600020600160ff19825416179055600080f35b346103495760003660031901126103495761045e60018060a01b03601d541633146122eb565b60026011540361051d57601054610476811515612336565b6203f48081018091116105075742106104d75760016011556104b16104a86104a36014546013549061223c565b61222e565b6012549061223c565b6018556104d26104c96104a36017546016549061223c565b6015549061223c565b601955005b60405162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b6044820152606490fd5b634e487b7160e01b600052601160045260246000fd5b60405162461bcd60e51b815260206004820152601060248201526f08585b1c9958591e481c99591d58d95960821b6044820152606490fd5b34610349576000366003190112610349576020600754604051908152f35b346103495760203660031901126103495761058c612025565b6105a160018060a01b03601d541633146122eb565b6105ae6010541515612336565b60ff8019600954169115151617600955600080f35b346103495760031960203682011261034957600435906001600160401b0390818311610349576020908336030112610349576040519060208201828110828211176106475760405282600401359081116103495761001b92600461062a92369201016120c6565b815261064160018060a01b03601c54163314612134565b51612f9d565b634e487b7160e01b600052604160045260246000fd5b3461034957604036600319011261034957610676611fe5565b61067e611ffb565b9060018060a01b038091166000526001602052604060002091166000526020526020604060002054604051908152f35b34610349576020366003190112610349576004356106d760018060a01b03601d541633146122eb565b6106e46010541515612336565b60025460058102811590828104600514821715610507576103e861070b910484101561236e565b60038202918204600314171561050757606461072a91048211156123a5565b602055005b34610349576020366003190112610349576001600160a01b03610750611fe5565b16600052600a602052602060ff604060002054166040519015158152f35b3461034957600036600319011261034957602060ff601f5460b01c166040519015158152f35b34610349576020366003190112610349576004356001600160a01b0381811691829003610349576107ca90601d541633146122eb565b6001600160601b0360a01b601f541617601f55600080f35b34610349576000366003190112610349576020601154604051908152f35b346103495760c03660031901126103495761001b6011600435610899600c61088d60243561087e6044359561087e6064356108836108716084359a60a4359b61085460018060a01b03601d541633146122eb565b86601255816013558060145588601555846016558c60175561223c565b9361087e8c54809661223c565b61223c565b988960185561223c565b92836019551115612249565b1115612249565b34610349576000366003190112610349576020601954604051908152f35b3461034957600036600319011261034957601c546040516001600160a01b039091168152602090f35b34610349576000366003190112610349576020601054604051908152f35b34610349576020366003190112610349576004356001600160a01b03818116918290036103495761093d601d549133908316146122eb565b6001600160a01b03191617601d55005b3461034957602036600319011261034957610966611fe5565b6006546001600160a01b0391906109809083163314612291565b166001600160601b0360a01b6005541617600555600080f35b34610349576000366003190112610349576020600854604051908152f35b34610349576040366003190112610349576109dd6109d3611fe5565b60243590336124ed565b50602060405160018152f35b3461034957600036600319011261034957601b546040516001600160a01b039091168152602090f35b3461034957604036600319011261034957610a2b611fe5565b60243590336000526001602052604060002060018060a01b03821660005260205260406000205491808310610a7157610a66920390336129b3565b602060405160018152f35b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b3461034957600036600319011261034957601d546040516001600160a01b039091168152602090f35b346103495760403660031901126103495761001b610b09611fe5565b610b11612034565b601d5490916001600160a01b0391610b2c90831633146122eb565b16600052600d60205260406000209060ff801983541691151516179055565b34610349576000366003190112610349576020601554604051908152f35b34610349576000366003190112610349576040516000600454610b8b8161218b565b80845290600190818116908115610c205750600114610bc5575b610bc184610bb581860382612043565b60405191829182611f9c565b0390f35b6004600090815292507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610c08575050508101602001610bb582610ba5565b80546020858701810191909152909301928101610bf0565b60ff191660208087019190915292151560051b85019092019250610bb59150839050610ba5565b34610349576000366003190112610349576020601754604051908152f35b34610349576020366003190112610349576020610c88610c83611fe5565b6123e9565b6040519015158152f35b3461034957600036600319011261034957601e546040516001600160a01b039091168152602090f35b34610349576020366003190112610349576001600160a01b03610cdc611fe5565b16600052600e602052602060ff604060002054166040519015158152f35b34610349576000366003190112610349576020602154604051908152f35b3461034957602036600319011261034957600435610d4160018060a01b03601d541633146122eb565b610d4e6010541515612336565b60025460058102811590828104600514821715610507576103e8610d75910484101561236e565b600382029182046003141715610507576064610d9491048211156123a5565b602155005b346103495760003660031901126103495760208054604051908152f35b34610349576000366003190112610349576020601654604051908152f35b3461034957600036600319011261034957602060ff600c54166040519015158152f35b34610349576020366003190112610349576001600160a01b03610e18611fe5565b1660005260006020526020604060002054604051908152f35b34610349576000366003190112610349576020601354604051908152f35b34610349576000366003190112610349576020601454604051908152f35b346103495760031960e036820112610349576004356001600160401b0381116103495761018080928236030112610349576040519182018281106001600160401b038211176106475760405280600401356001600160401b03811161034957610edc906004369184010161207f565b825260248101356001600160401b03811161034957610f01906004369184010161207f565b6020830152604481013560408301526064810135606083015260848101356080830152610f3060a48201612011565b60a0830152610f4160c48201612011565b60c0830152610f5260e48201612011565b60e0830152610f646101048201612011565b610100830152610f776101248201612011565b6101208301526101448101356001600160401b03811161034957610fa190600436918401016120c6565b610140830152610164810135906001600160401b038211610349576004610fcb92369201016120c6565b61016082015260c0366023190112610349576040518060c08101106001600160401b0360c0830111176106475760c08101604052602435815260443560208201526064356040820152608435606082015260a435608082015260c43560a082015261104160018060a01b03601c54163314612134565b81519182516001600160401b0381116106475761105f60035461218b565b601f811161183f575b506020601f82116001146117b957819293946000926117ae575b50508160011b916000199060031b1c1916176003555b60208101519182516001600160401b038111610647576110b960045461218b565b601f8111611754575b506020601f82116001146116ce57819293946000926116c3575b50508160011b916000199060031b1c1916176004555b60408201516002556046606083015110611694576040820151806005810204600514811517156105075760056103e8910204602055604082015180800460011481151715610507576064900460215560408201518060058102046005148115171561050757610fa060059190910204602255610100820151601a80546001600160a01b0319166001600160a01b0392909216918217905560405163c45a015560e01b815290602082600481845afa90811561164957600492600092611672575b50602090604051938480926315ab88c960e31b82525afa9081156116495760446020926000948591611655575b506040516364e329cb60e11b81526001600160a01b0391821660048201523060248201529485938492165af19081156116495760009161161a575b50601b80546001600160a01b0319166001600160a01b03928316178155306000818152600160208181526040808420601a548816855282528084206000199055938352600a9052828220805460ff199081168317909155601c54861683528383208054821683179055935485168252828220805485168217905560a0870151851682528282208054851682179055610120870151851682528282208054851682179055610100870151909416815220805490911690911790556101408201516112e290612f9d565b6101608201518051906001600160401b0382116106475768010000000000000000821161064757602090600b5483600b558084106115f6575b5001600b60005260005b8281106115cb57306000908152600d602090815260408083208054600160ff199182168117909255601c80546001600160a01b039081168752848720805484168517905560a08c810180518316895286892080548616871790555182168852600e87528588208054851686179055601b54821688528588208054851686179055915416865283862080548316841790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548316841790559480527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c8054909116909117905560808089015160085590870151601381905560608801516016819055918801516014819055938801516017819055885160128190559389015160158190558a95601195929461147f94600c9461088d94929361087e93928492611472929091849161223c565b936108838a54809661223c565b116115925760a0810151601d80546001600160a01b03199081166001600160a01b039384161790915560c0830151601e8054831691841691909117905560e0830151601f80548316918416919091179055610120830151600680549092169216919091179055604081015160608201516000916064916114fe916121dc565b04602061150f826040860151612284565b933384528382526040842061152584825461223c565b905560a08101516001600160a01b0316845283825260408420805461154b90879061223c565b90556040519283527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928484843393a360a001516040519485526001600160a01b031693a3005b60405162461bcd60e51b8152602060048201526011602482015270546f6f20686967682073656c6c2066656560781b6044820152606490fd5b81516001600160a01b0316600080516020613005833981519152820155602090910190600101611325565b611614908460008051602061300583398151915291820191016121c5565b8561131b565b61163c915060203d602011611642575b6116348183612043565b81019061220f565b8361121a565b503d61162a565b6040513d6000823e3d90fd5b61166c9150843d8611611642576116348183612043565b876111df565b602091925061168d90823d8411611642576116348183612043565b91906111b2565b60405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606490fd5b0151905084806110dc565b60046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9060005b601f198416811061173c5750600193949583601f19811610611723575b505050811b016004556110f2565b015160001960f88460031b161c19169055848080611715565b9091602060018192858a0151815501930191016116f8565b61179e9060046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c810191602085106117a4575b601f0160051c01906121c5565b846110c2565b9091508190611791565b015190508480611082565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9060005b601f19841681106118275750600193949583601f1981161061180e575b505050811b01600355611098565b015160001960f88460031b161c19169055848080611800565b9091602060018192858a0151815501930191016117e3565b6118889060036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c810191602085106117a457601f0160051c01906121c5565b84611068565b34610349576000366003190112610349576006546040516001600160a01b039091168152602090f35b3461034957600036600319011261034957601c546001600160a01b03906118e19082163314612134565b80601a5416600052600d60205260406000209060ff199160018382541617905580601a5416600052600e6020526040600020600183825416179055601d54166000526040600020600182825416179055601f549060095416600955600160b01b9061ffff60a81b191617601f55600080f35b3461034957600036600319011261034957602060ff601f5460a81c166040519015158152f35b34610349576020366003190112610349576004356119a260018060a01b03600654163314612291565b806008556010549080603c0290603c820403610507576119c19161223c565b600755600c805460ff19166001179055005b3461034957602036600319011261034957600435600b5481101561034957600b60005260008051602061300583398151915201546040516001600160a01b039091168152602090f35b3461034957600036600319011261034957602060ff600954166040519015158152f35b34610349576020366003190112610349576001600160a01b03611a60611fe5565b16600052600f602052602060ff604060002054166040519015158152f35b34610349576020366003190112610349576001600160a01b03611a9f611fe5565b16600052600d602052602060ff604060002054166040519015158152f35b3461034957604036600319011261034957611ad6612025565b611aeb60018060a01b03601d541633146122eb565b601f805460ff60a81b191691151560a81b60ff60a81b16919091179055602435602255005b3461034957602036600319011261034957600435611b3960018060a01b03600654163314612291565b601054611b47811515612336565b6203f4808101809111610507574210611b955760018111610349576104c9816104d292601155611b836104a88261087e6014546013549061223c565b60185561087e6017546016549061223c565b60028111610349576104c9816104d292601155611b836104a88261087e6014546013549061223c565b3461034957604036600319011261034957610a66611bda611fe5565b336000526001602052604060002060018060a01b038216600052602052611c0860243560406000205461223c565b90336129b3565b3461034957600036600319011261034957602060405160098152f35b34610349576000366003190112610349576020611c71611c5d60025461dead6000526000845260406000205490612284565b600080526000835260406000205490612284565b604051908152f35b34610349576000366003190112610349576005546040516001600160a01b039091168152602090f35b3461034957600036600319011261034957611cc860018060a01b03601c54163314612134565b601054611cee574260105560085480603c0290603c820403610507576119c1904261223c565b60405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606490fd5b3461034957606036600319011261034957611d3f611fe5565b611d47611ffb565b6044359060018060a01b0383166000526001602052604060002033600052602052604060002054926000198403611d83575b6109dd93506124ed565b828410611d9f57611d9a836109dd950333836129b3565b611d79565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b3461034957600036600319011261034957601f546040516001600160a01b039091168152602090f35b34610349576020366003190112610349576004356001600160a01b038181169182900361034957611e4390601d541633146122eb565b6001600160601b0360a01b601e541617601e55600080f35b34610349576000366003190112610349576020601854604051908152f35b34610349576000366003190112610349576020600254604051908152f35b34610349576000366003190112610349576020601254604051908152f35b3461034957604036600319011261034957610a66611ed1611fe5565b60243590336129b3565b34610349576000366003190112610349576040516000600354611efd8161218b565b80845290600190818116908115610c205750600114611f2657610bc184610bb581860382612043565b6003600090815292507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410611f69575050508101602001610bb582610ba5565b80546020858701810191909152909301928101611f51565b34610349576000366003190112610349576020906022548152f35b6020808252825181830181905290939260005b828110611fd157505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611faf565b600435906001600160a01b038216820361034957565b602435906001600160a01b038216820361034957565b35906001600160a01b038216820361034957565b60043590811515820361034957565b60243590811515820361034957565b90601f801991011681019081106001600160401b0382111761064757604052565b6001600160401b03811161064757601f01601f191660200190565b81601f820112156103495780359061209682612064565b926120a46040519485612043565b8284526020838301011161034957816000926020809301838601378301015290565b9080601f83011215610349578135906001600160401b038211610647578160051b604051936020936120fa85840187612043565b85528380860192820101928311610349578301905b82821061211d575050505090565b83809161212984612011565b81520191019061210f565b1561213b57565b60405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604482015261727960f01b6064820152608490fd5b90600182811c921680156121bb575b60208310146121a557565b634e487b7160e01b600052602260045260246000fd5b91607f169161219a565b8181106121d0575050565b600081556001016121c5565b8181029291811591840414171561050757565b81156121f9570490565b634e487b7160e01b600052601260045260246000fd5b9081602091031261034957516001600160a01b03811681036103495790565b906001820180921161050757565b9190820180921161050757565b1561225057565b60405162461bcd60e51b815260206004820152600c60248201526b546f6f20686967682066656560a01b6044820152606490fd5b9190820391821161050757565b1561229857565b60405162461bcd60e51b815260206004820152602560248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660448201526420b236b4b760d91b6064820152608490fd5b156122f257565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561233d57565b60405162461bcd60e51b8152602060048201526009602482015268085b185d5b98da195960ba1b6044820152606490fd5b1561237557565b60405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606490fd5b156123ac57565b60405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606490fd5b60001981146105075760010190565b600090600b8054925b8381106124025750505050600090565b6000829052600080516020613005833981519152810154604080516370a0823160e01b81526001600160a01b0386811660048301529092602091829185916024918391165afa9182156124a55750600091612476575b50905061246d57612468906123da565b6123f2565b50505050600190565b82813d831161249e575b61248a8183612043565b8101031261249b5750518038612458565b80fd5b503d612480565b513d6000823e3d90fd5b156124b657565b60405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606490fd5b92919060ff91601f83815460b01c161561297d57600c5484811661283d575b5083815460a01c166127bd57601b546001600160a01b0393841694908416939190858514806127b2575b612747575b600090868252602094600e8652604093828585205416158061273c575b6126f2575b857fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef98999a9b1698891415806126e4575b806126d7575b806126c2575b61269c575b508783528286526125b38185852054612284565b88845283875284842055888195601b541692838a148015612693575b6125fe575b509150508152808452816125eb848284205461223c565b91888152808652205551908152a3600190565b909192939550600d8752808587205416159081612682575b501561267a57612663920361266d5760646126346019545b836121dc565b0490308552848652612649828587205461223c565b3086528587528486205583518281528888883093a3612284565b91388088816125d4565b606461263460185461262e565b509050612663565b905081865284862054161538612616565b508382146125cf565b805460ff60a01b19908116600160a01b1782556126b7612ae5565b81541690553861259f565b5030845283875284842054602254111561259a565b5082815460a81c16612594565b5082815460a01c161561258e565b838752612702828686205461223c565b602154101561255d57845162461bcd60e51b815260048101889052600a60248201526913585e0815d85b1b195d60b21b6044820152606490fd5b508260095416612558565b6020548411801590612786575b61253b5760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606490fd5b50828816600052600e602052806040600020541680156127545750856000528060406000205416612754565b508060095416612536565b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919394925060209060018060a01b0380941693600095858752868452612809836040892054612284565b868852878552604088205516948581526040612828838284205461223c565b918781528085522055604051908152a3600190565b60075442106128545760ff1916600c555b3861250c565b50601b546001600160a01b03908782169082168181036128ab5750508316600052600a60205283604060002054168015612897575b612892906124af565b61284e565b506128926128a4846123e9565b9050612889565b909185169081036128e35750600052600a602052836040600020541680156128d657612892906124af565b506128926128a4876123e9565b90600052600a602052846040600020541690811561296c575b8161293e575b506128925760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606490fd5b9050600052600a6020528360406000205416801561295d575b38612902565b50612967836123e9565b612957565b9050612977876123e9565b906128fc565b60405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606490fd5b6001600160a01b03908116918215612a645716918215612a145760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b3d15612ae0573d90612ac682612064565b91612ad46040519384612043565b82523d6000602084013e565b606090565b60003081526020818152604080832054916018546002811115600014612f8a5750612b2b612b21612b18601654866121dc565b601954906121ef565b60011c8094612284565b8015612f835782519160608301936001600160401b039484811086821117612f6f578152600284528184019381368637805115612f5b57308552601a5482516315ab88c960e31b81526001600160a01b03979096600496919289169186898981865afa988915612f51578c99612f32575b508451986001998a1015612f1f578a1686860152823b15612f1b57855163791ac94760e01b815288810191909152602481018c905260a06044820152935160a485018190528b928592909160c484019190858c8b8f5b848410612ef6575050505050508383809230606483015242608483015203925af18015612eec57612ec6575b505060185447969060028111612eae5750612c3e612b18601654896121dc565b851c905b80612e22575b505060185447939060028111612e085750612c9193612c9e612c6c601754836121dc565b91612c99612c7d60195480956121ef565b978894612c8c601154856121dc565b6121ef565b938492612284565b612284565b97612caf575b505050505050505050565b889581612d1a575b505050505080612cf6575b505081612cd5575b808080808080612ca4565b828080938193601f54165af1612ce9612ab5565b501561249b578080612cca565b8180809285601e54165af1612d09612ab5565b5015612d16578238612cc2565b8280fd5b909192939495501c92818187601c5416855192838092633690e28760e01b82525afa908115612dfe578980878a829583958491612de1575b50165af1612d5e612ab5565b5015612ddd578086601c541684519384809263d7e7a9e760e01b82525afa928315612dd457508793868594859485948592612db7575b5050165af1612da1612ab5565b5015612db35783903880808080612cb7565b8380fd5b612dcd9250803d10611642576116348183612043565b3880612d94565b513d89823e3d90fd5b8780fd5b612df89150883d8a11611642576116348183612043565b38612d52565b84513d8b823e3d90fd5b612c9e612c9195612c99612c7d84612c8c601454856121dc565b60609060c488601a5416918551948593849263f305d71960e01b8452308b85015260248401528d60448401528d606484015261dead60848401524260a48401525af18015612ea457612e75575b80612c48565b606090813d8111612e9d575b612e8b8183612043565b81010312612e995738612e6f565b8680fd5b503d612e81565b82513d8a823e3d90fd5b612ebe90612c8c6013548a6121dc565b851c90612c42565b8198929811612ed9578752953880612c1e565b634e487b7160e01b825260418452602482fd5b83513d8b823e3d90fd5b90939698508484939692959850511681520194019101908d94928794928c8b8f612bf2565b8b80fd5b634e487b7160e01b8d526032895260248dfd5b612f4a919950873d8911611642576116348183612043565b9738612b9c565b86513d8e823e3d90fd5b634e487b7160e01b88526032600452602488fd5b634e487b7160e01b88526041600452602488fd5b5050505050565b612b21612b2b91612c8c601354876121dc565b805160005b818110612fae57505050565b8251811015612fee57612fe990600a602060018060a01b03818460051b8801015116600052526040600020600160ff198254161790556123da565b612fa2565b634e487b7160e01b600052603260045260246000fdfe0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9a26469706673582212203e5d351bb2e99e3736c6b110a6b598bb7c960fa560426f4d4360c81a87ecb11864736f6c63430008110033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.