Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 MOCK
Holders
2
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
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 "../interfaces/IERC721A.sol"; import "../libraries/ProofNonReflectionTokenFees.sol"; import "../interfaces/IFACTORY.sol"; import "../interfaces/IUniswapV2Router02.sol"; import "../interfaces/IUniswapV2Factory.sol"; import "../interfaces/IProofNonReflectionTokenCutter.sol"; import "../libraries/Ownable.sol"; contract ProofNonReflectionTokenCutter is Ownable, 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; IERC721A 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 proofFeeOnSell = 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; bool public proofFeeRemoved = false; bool public proofFeeReduced = false; uint256 accMainFees; uint256 accLpFees; uint256 accDevFees; uint256 accProofFees; IUniswapV2Router02 public router; address public pair; address public factory; 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 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 = IERC721A(_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; if (fees.devFee + fees.lpFee + fees.mainFee == 0) { proofFee = 0; } totalFee = fees.devFee + fees.lpFee + fees.mainFee + proofFee; if (fees.devFeeOnSell + fees.lpFeeOnSell + fees.mainFeeOnSell == 0) { proofFeeOnSell = 0; } totalFeeIfSelling = fees.devFeeOnSell + fees.lpFeeOnSell + fees.mainFeeOnSell + proofFeeOnSell; if (IFACTORY(factory).isWhitelisted(_baseData.owner)) { require(totalFee <= 12, "high KYC fee"); require(totalFeeIfSelling <= 17, "high KYC fee"); } else { require(totalFee <= 7, "high fee"); require(totalFeeIfSelling <= 7, "high fee"); } 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[owner()] = 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 { uint256 _proofFee; uint256 _proofFeeOnSell; if ((block.timestamp > launchedAt + 31 days) && (launchedAt != 0)) { _proofFee = 0; _proofFeeOnSell = 0; } else if ((block.timestamp > launchedAt + 1 days) && (launchedAt != 0)) { _proofFee = 1; _proofFeeOnSell = 1; } else { _proofFee = 2; _proofFeeOnSell = 2; } mainFee = initialMainFee; lpFee = initialLpFee; devFee = initialDevFee; mainFeeOnSell = initialMainFeeOnSell; lpFeeOnSell = initialLpFeeOnSell; devFeeOnSell = initialDevFeeOnSell; if (initialDevFee + initialLpFee + initialMainFee == 0) { _proofFee = 0; } totalFee = initialDevFee + initialLpFee + initialMainFee + _proofFee; if (initialDevFeeOnSell + initialLpFeeOnSell + initialMainFeeOnSell == 0) { _proofFeeOnSell = 0; } totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + initialMainFeeOnSell + _proofFeeOnSell; proofFee = _proofFee; proofFeeOnSell = _proofFeeOnSell; if (IFACTORY(factory).isWhitelisted(owner())) { require(totalFee <= 12, "high fee"); require(totalFeeIfSelling <= 17, "high fee"); } else { require(totalFee <= 7, "high fee"); require(totalFeeIfSelling <= 7, "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 setDevWallet(address payable newDevWallet) external onlyOwner { devWallet = payable(newDevWallet); } function setMainWallet(address payable newMainWallet) external onlyOwner { mainWallet = newMainWallet; } function changeSwapBackSettings( bool enableSwapBack, uint256 newSwapBackLimit ) external onlyOwner { swapAndLiquifyEnabled = enableSwapBack; swapThreshold = newSwapBackLimit; } function isWhitelisted(address user) public view returns (bool) { return userWhitelist[user]; } 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), "Not whitelisted"); } else if (recipient == pair) { //sell require(isWhitelisted(sender), "Not whitelisted"); } else { //transfer require(isWhitelisted(sender) && isWhitelisted(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 (!proofFeeRemoved && launchedAt != 0) { //first 31 days only if (!proofFeeReduced) { //case where proofFee is still 2, check if we can reduce if (block.timestamp > launchedAt + 86400) { proofFee = (devFee + lpFee + mainFee == 0) ? 0 : 1; proofFeeOnSell = (devFeeOnSell + lpFeeOnSell + mainFeeOnSell == 0) ? 0 : 1; totalFee = devFee + lpFee + mainFee + proofFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + mainFeeOnSell + proofFeeOnSell; proofFeeReduced = true; } } else { if (block.timestamp > launchedAt + 31 days) { proofFee = 0; proofFeeOnSell = 0; totalFee = devFee + lpFee + mainFee + proofFee; totalFeeIfSelling = devFeeOnSell + lpFeeOnSell + mainFeeOnSell + proofFeeOnSell; proofFeeRemoved = true; } } } if ( sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && (accMainFees + accLpFees + accDevFees + accProofFees) >= 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; uint256 _mainApplicable; uint256 _lpApplicable; uint256 _devApplicable; uint256 _proofApplicable; if (pair == recipient) { feeApplicable = totalFeeIfSelling; _mainApplicable = mainFeeOnSell; _lpApplicable = lpFeeOnSell; _devApplicable = devFeeOnSell; _proofApplicable = proofFeeOnSell; } else { feeApplicable = totalFee; _mainApplicable = mainFee; _lpApplicable = lpFee; _devApplicable = devFee; _proofApplicable = proofFee; } if (feeApplicable == 0) return(amount); uint256 feeAmount = (amount * feeApplicable) / 100; accMainFees += feeAmount * _mainApplicable / feeApplicable; accLpFees += feeAmount * _lpApplicable / feeApplicable; accDevFees += feeAmount * _devApplicable / feeApplicable; accProofFees += feeAmount * _proofApplicable / feeApplicable; _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 lpProportion = accLpFees; uint256 devProportion = accDevFees; uint256 mainProportion = accMainFees; uint256 proofProportion = accProofFees; uint256 totalProportion = lpProportion + devProportion + mainProportion + proofProportion; uint256 lpAmt = tokensToLiquify * lpProportion / totalProportion; uint256 devBalance; uint256 proofBalance; uint256 amountToLiquify = lpAmt / 2; if (tokensToLiquify - amountToLiquify == 0) return; address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); router.swapExactTokensForETHSupportingFeeOnTransferTokens( (tokensToLiquify - amountToLiquify), 0, path, address(this), block.timestamp ); // Use sell ratios if buy tax too low uint256 amountA; if (amountToLiquify > 0) { (amountA,,) = router.addLiquidityETH{value: ((address(this).balance * amountToLiquify) / (totalProportion - amountToLiquify))}( address(this), amountToLiquify, 0, 0, 0x000000000000000000000000000000000000dEaD, block.timestamp ); } accLpFees = lpProportion < (lpAmt - (amountToLiquify - amountA)) ? 0 : (lpProportion - (lpAmt - (amountToLiquify - amountA))); uint256 amountETHafterLP = address(this).balance; if (totalProportion - lpProportion == 0) return; proofBalance = (amountETHafterLP * proofProportion) / (devProportion + proofProportion + mainProportion); devBalance = amountETHafterLP * devProportion / (devProportion + proofProportion + mainProportion); uint256 amountEthMain = amountETHafterLP - devBalance - proofBalance; accDevFees = devProportion < (tokensToLiquify * devProportion / totalProportion) ? 0 : (devProportion - (tokensToLiquify * devProportion / totalProportion)); accMainFees = mainProportion < (tokensToLiquify * mainProportion / totalProportion) ? 0 : (mainProportion - (tokensToLiquify * mainProportion / totalProportion)); accProofFees = proofProportion < (tokensToLiquify * proofProportion / totalProportion) ? 0 : (proofProportion - (tokensToLiquify * proofProportion / totalProportion)); if (amountETHafterLP > 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); } function addNFTSnapshot() external onlyFactory { uint256 len = nftWhitelist.totalSupply() + 1; for (uint256 i = 1; i < len; ) { userWhitelist[nftWhitelist.ownerOf(i)] = true; unchecked { ++i; } } } function withdrawAndSync() external onlyOwner { _transfer(address(this), msg.sender, balanceOf(address(this)) - (accMainFees + accLpFees + accDevFees + accProofFees)); } 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 // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721A. */ interface IERC721A { function totalSupply() external view returns (uint256); function ownerOf(uint256 tokenId) external view returns (address owner); }
// SPDX-License-Identifier: None pragma solidity ^0.8.17; interface IFACTORY { function proofRevenueAddress() external view returns (address); function proofRewardPoolAddress() external view returns (address); function isWhitelisted(address user) external view returns(bool); }
// 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; function addNFTSnapshot() external; function changeFees( uint256 initialMainFee, uint256 initialMainFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell, uint256 initialDevFee, uint256 initialDevFeeOnSell ) 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 } }, "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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[],"name":"addNFTSnapshot","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":"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":[],"name":"nftWhitelist","outputs":[{"internalType":"contract IERC721A","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","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":"proofFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofFeeReduced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proofFeeRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":[],"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":"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"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"},{"inputs":[],"name":"withdrawAndSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a805460ff19166001179055600c805460ff60a01b1916600160a01b17905560026011819055601255601b805461ffff191690556024805461010160a81b61ffff60a81b199091161790553480156200005d57600080fd5b50620000693362000081565b602280546001600160a01b03191633179055620000d1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613c6d80620000e16000396000f3fe6080604052600436106103fe5760003560e01c8063807c2d9c11610213578063c45a015511610123578063e572967b116100ab578063f2fde38b1161007a578063f2fde38b14610bc8578063f576f53914610be8578063f887ea4014610bfd578063fabe628314610c1d578063fbd7575314610c3d57600080fd5b8063e572967b14610b52578063e66b1d1e14610b72578063ebdfd72214610b92578063f16fd78d14610ba857600080fd5b8063d0a5eb4e116100f2578063d0a5eb4e14610a7b578063d4fb9a0114610a9b578063d741b9c314610abc578063d920334e14610aec578063dd62ed3e14610b0c57600080fd5b8063c45a015514610a0f578063ca987b0e14610a2f578063cb29813c14610a45578063cd1e330a14610a6557600080fd5b806395d89b41116101a6578063a8aa1b3111610175578063a8aa1b3114610983578063a9059cbb146109a3578063b48e665e146109c3578063b72344a2146109d9578063bf56b371146109f957600080fd5b806395d89b4114610918578063985b9db01461092d578063a3a2e89e14610943578063a457c2d71461096357600080fd5b80638b42507f116101e25780638b42507f146108945780638da5cb5b146108c45780638ea5220f146108e25780639502c4261461090257600080fd5b8063807c2d9c1461082f578063838420131461084557806388cda8731461085f5780638a1c7b841461087e57600080fd5b80633f4218e01161030e57806365359892116102a157806370c757ec1161027057806370c757ec146107ad578063715018a6146107ce5780637c0ff205146107e35780637d1db4a5146107f95780637db1342c1461080f57600080fd5b8063653598921461072b5780636827e7641461074b578063704ce43e1461076157806370a082311461077757600080fd5b80634a74bb02116102dd5780634a74bb02146106c0578063546a8811146106e157806359a51c34146106f65780635fef86801461071657600080fd5b80633f4218e0146106265780634355855a1461065657806344de2e4c14610686578063497a000a146106a057600080fd5b806323b62b75116103915780632b112e49116103605780632b112e4914610595578063313ce567146105aa57806339509351146105c65780633af32abf146105e65780633dab52691461060657600080fd5b806323b62b751461052057806323b872dd1461054057806327193bc414610560578063283744251461057557600080fd5b80630ab16c19116103cd5780630ab16c191461049b57806318160ddd146104d35780631df4ccfc146104e85780631f53ac02146104fe57600080fd5b80630445b6671461040a57806306fdde0314610433578063095ea7b3146104555780630963da6c1461048557600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061042060275481565b6040519081526020015b60405180910390f35b34801561043f57600080fd5b50610448610c52565b60405161042a91906132a8565b34801561046157600080fd5b5061047561047036600461331b565b610ce4565b604051901515815260200161042a565b34801561049157600080fd5b5061042060135481565b3480156104a757600080fd5b50600c546104bb906001600160a01b031681565b6040516001600160a01b03909116815260200161042a565b3480156104df57600080fd5b50600354610420565b3480156104f457600080fd5b5061042060195481565b34801561050a57600080fd5b5061051e610519366004613347565b610cfe565b005b34801561052c57600080fd5b506024546104bb906001600160a01b031681565b34801561054c57600080fd5b5061047561055b366004613364565b610d28565b34801561056c57600080fd5b5061051e610d4f565b34801561058157600080fd5b506006546104bb906001600160a01b031681565b3480156105a157600080fd5b50610420610df9565b3480156105b657600080fd5b506040516009815260200161042a565b3480156105d257600080fd5b506104756105e136600461331b565b610e69565b3480156105f257600080fd5b50610475610601366004613347565b610ea8565b34801561061257600080fd5b5061051e6106213660046133b3565b610ec6565b34801561063257600080fd5b50610475610641366004613347565b600d6020526000908152604090205460ff1681565b34801561066257600080fd5b50610475610671366004613347565b600f6020526000908152604090205460ff1681565b34801561069257600080fd5b50600a546104759060ff1681565b3480156106ac57600080fd5b5061051e6106bb3660046133d1565b610ef0565b3480156106cc57600080fd5b5060245461047590600160a81b900460ff1681565b3480156106ed57600080fd5b5061051e610f50565b34801561070257600080fd5b506007546104bb906001600160a01b031681565b34801561072257600080fd5b5061051e610ff0565b34801561073757600080fd5b5061051e6107463660046135ce565b611049565b34801561075757600080fd5b5061042060155481565b34801561076d57600080fd5b5061042060145481565b34801561078357600080fd5b50610420610792366004613347565b6001600160a01b031660009081526001602052604090205490565b3480156107b957600080fd5b50600c5461047590600160a01b900460ff1681565b3480156107da57600080fd5b5061051e6117e3565b3480156107ef57600080fd5b5061042060175481565b34801561080557600080fd5b5061042060255481565b34801561081b57600080fd5b5061051e61082a3660046133d1565b6117f7565b34801561083b57600080fd5b5061042060265481565b34801561085157600080fd5b50601b546104759060ff1681565b34801561086b57600080fd5b50601b5461047590610100900460ff1681565b34801561088a57600080fd5b5061042060125481565b3480156108a057600080fd5b506104756108af366004613347565b600e6020526000908152604090205460ff1681565b3480156108d057600080fd5b506000546001600160a01b03166104bb565b3480156108ee57600080fd5b506023546104bb906001600160a01b031681565b34801561090e57600080fd5b5061042060185481565b34801561092457600080fd5b506104486118cf565b34801561093957600080fd5b5061042060165481565b34801561094f57600080fd5b5061051e61095e366004613723565b6118de565b34801561096f57600080fd5b5061047561097e36600461331b565b611911565b34801561098f57600080fd5b506021546104bb906001600160a01b031681565b3480156109af57600080fd5b506104756109be36600461331b565b6119ae565b3480156109cf57600080fd5b5061042060095481565b3480156109e557600080fd5b5061051e6109f4366004613347565b6119bc565b348015610a0557600080fd5b5061042060105481565b348015610a1b57600080fd5b506022546104bb906001600160a01b031681565b348015610a3b57600080fd5b50610420601a5481565b348015610a5157600080fd5b5061051e610a6036600461375c565b611a08565b348015610a7157600080fd5b5061042060115481565b348015610a8757600080fd5b5061051e610a96366004613347565b611c59565b348015610aa757600080fd5b5060245461047590600160b01b900460ff1681565b348015610ac857600080fd5b50610475610ad7366004613347565b600b6020526000908152604090205460ff1681565b348015610af857600080fd5b5061051e610b073660046133d1565b611c83565b348015610b1857600080fd5b50610420610b2736600461379f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610b5e57600080fd5b5061051e610b6d3660046137cd565b611d5b565b348015610b7e57600080fd5b5061051e610b8d366004613850565b611d90565b348015610b9e57600080fd5b5061042060085481565b348015610bb457600080fd5b5061051e610bc3366004613347565b611dcd565b348015610bd457600080fd5b5061051e610be3366004613347565b611e31565b348015610bf457600080fd5b5061051e611e98565b348015610c0957600080fd5b506020546104bb906001600160a01b031681565b348015610c2957600080fd5b5061051e610c38366004613723565b611ff0565b348015610c4957600080fd5b5061051e612023565b606060048054610c619061386d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d9061386d565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b600033610cf281858561206e565b60019150505b92915050565b610d06612192565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b600033610d368582856121ec565b610d4185858561227e565b5060019150505b9392505050565b6022546001600160a01b03163314610d825760405162461bcd60e51b8152600401610d79906138a7565b60405180910390fd5b60105415610dc55760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610d79565b42601055600954610dd790603c6138ff565b610de19042613916565b600855600c805460ff60a01b1916600160a01b179055565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54600354919291610e5a9190613929565b610e649190613929565b905090565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190610cf29082908690610ea3908790613916565b61206e565b6001600160a01b03166000908152600b602052604090205460ff1690565b610ece612192565b60248054921515600160a81b0260ff60a81b1990931692909217909155602755565b6007546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610d799061393c565b6009819055610f2a81603c6138ff565b601054610f379190613916565b60085550600c805460ff60a01b1916600160a01b179055565b6022546001600160a01b03163314610f7a5760405162461bcd60e51b8152600401610d79906138a7565b602080546001600160a01b039081166000908152600d835260408082208054600160ff199182168117909255855485168452600e909552818320805486168217905582549093168252902080548316909117905560248054600a805490931690925561ffff60a81b19909116600160b01b179055565b610ff8612192565b6110463033601f54601e54601d54601c546110139190613916565b61101d9190613916565b6110279190613916565b306000908152600160205260409020546110419190613929565b61227e565b50565b6022546001600160a01b031633146110735760405162461bcd60e51b8152600401610d79906138a7565b815160049061108290826139cf565b50602082015160059061109590826139cf565b5060408201516003556060820151604611156110dd5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610d79565b6103e8826040015160056110f191906138ff565b6110fb9190613a8f565b60255560408201516064906111119060016138ff565b61111b9190613a8f565b6026556040820151610fa0906111329060056138ff565b61113c9190613a8f565b602755610100820151602080546001600160a01b0319166001600160a01b0390921691821781556040805163c45a015560e01b8152905163c45a0155926004808401939192918290030181865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf9190613ab1565b60208054604080516315ab88c960e31b815290516001600160a01b039485169463c9c653969493169263ad5c464892600480820193918290030181865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190613ab1565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a29190613ab1565b602180546001600160a01b0319166001600160a01b0392831617815530600081815260026020908152604080832082548716845282528083206000199055928252600b9052818120805460ff199081166001908117909255602254861683528383208054821683179055935485168252828220805485168217905560a08701518516825282822080548516821790556101208701518516825282822080548516821790556101008701519094168152208054909116909117905561014082015161136b9061287f565b610160820151600c80546001600160a01b0319166001600160a01b03928316179055306000908152600d60209081526040808320805460ff1990811660019081179092556022805487168652838620805483168417905560a0808a0180518916885285882080548516861790555188168752600e865284872080548416851790556021548816875284872080548416851790559054909616855282852080548216831790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548216831790559380527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c8054909416179092556080808601516009559184015160148190556060850151601755918401516015819055928401516018558351601381905590840151601655916114a99190613916565b6114b39190613916565b6000036114c05760006011555b6011548151604083015160808401516114d99190613916565b6114e39190613916565b6114ed9190613916565b6019556020810151606082015160a08301516115099190613916565b6115139190613916565b6000036115205760006012555b601254816020015182606001518360a0015161153c9190613916565b6115469190613916565b6115509190613916565b601a5560225460a0830151604051633af32abf60e01b81526001600160a01b039182166004820152911690633af32abf90602401602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190613ace565b1561165357600c601954111561160c5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610d79565b6011601a54111561164e5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610d79565b611699565b600760195411156116765760405162461bcd60e51b8152600401610d7990613aeb565b6007601a5411156116995760405162461bcd60e51b8152600401610d7990613aeb565b60c0820151602380546001600160a01b039283166001600160a01b03199182161790915560e08401516024805491841691831691909117905561012084015160078054919093169116179055606082015160408301516000916064916116ff91906138ff565b6117099190613a8f565b9050600081846040015161171d9190613929565b33600090815260016020526040812080549293508492909190611741908490613916565b909155505060a08401516001600160a01b031660009081526001602052604081208054839290611772908490613916565b90915550506040518281523390600090600080516020613c188339815191529060200160405180910390a38360a001516001600160a01b031660006001600160a01b0316600080516020613c18833981519152836040516117d591815260200190565b60405180910390a350505050565b6117eb612192565b6117f560006128ed565b565b6117ff612192565b6010546000036118215760405162461bcd60e51b8152600401610d7990613b0d565b6103e8600354600561183391906138ff565b61183d9190613a8f565b8110156118775760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d79565b6064600354600361188891906138ff565b6118929190613a8f565b8111156118ca5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d79565b602655565b606060058054610c619061386d565b6118e6612192565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190838110156119965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d79565b6119a3828686840361206e565b506001949350505050565b6000336119a381858561227e565b6007546001600160a01b031633146119e65760405162461bcd60e51b8152600401610d799061393c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b611a10612192565b6000806010546228de80611a249190613916565b42118015611a33575060105415155b15611a4357506000905080611a79565b601054611a539062015180613916565b42118015611a62575060105415155b15611a7257506001905080611a79565b5060029050805b60138890556014869055601584905560168790556017859055601883905587611aa28786613916565b611aac9190613916565b600003611ab857600091505b8188611ac48887613916565b611ace9190613916565b611ad89190613916565b60195586611ae68685613916565b611af09190613916565b600003611afb575060005b8087601754601854611b0d9190613916565b611b179190613916565b611b219190613916565b601a55601182905560128190556022546001600160a01b0316633af32abf611b516000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb99190613ace565b15611c0957600c6019541115611be15760405162461bcd60e51b8152600401610d7990613aeb565b6011601a541115611c045760405162461bcd60e51b8152600401610d7990613aeb565b611c4f565b60076019541115611c2c5760405162461bcd60e51b8152600401610d7990613aeb565b6007601a541115611c4f5760405162461bcd60e51b8152600401610d7990613aeb565b5050505050505050565b611c61612192565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b611c8b612192565b601054600003611cad5760405162461bcd60e51b8152600401610d7990613b0d565b6103e86003546005611cbf91906138ff565b611cc99190613a8f565b811015611d035760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d79565b60646003546003611d1491906138ff565b611d1e9190613a8f565b811115611d565760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d79565b602555565b6022546001600160a01b03163314611d855760405162461bcd60e51b8152600401610d79906138a7565b80516110469061287f565b611d98612192565b601054600003611dba5760405162461bcd60e51b8152600401610d7990613b0d565b600a805460ff1916911515919091179055565b6007546001600160a01b03163314611df75760405162461bcd60e51b8152600401610d799061393c565b600780546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b611e39612192565b6001600160a01b038116611e8f5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610d79565b611046816128ed565b6022546001600160a01b03163314611ec25760405162461bcd60e51b8152600401610d79906138a7565b600c54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f309190613b30565b611f3b906001613916565b905060015b81811015611fec57600c546040516331a9108f60e11b815260048101839052600191600b916000916001600160a01b031690636352211e90602401602060405180830381865afa158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613ab1565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611f40565b5050565b611ff8612192565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6022546001600160a01b0316331461204d5760405162461bcd60e51b8152600401610d79906138a7565b6024805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b0383166120d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d79565b6001600160a01b0382166121315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d79565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146117f55760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610d79565b6001600160a01b038381166000908152600260209081526040808320938616835292905220546000198114612278578181101561226b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d79565b612278848484840361206e565b50505050565b602454600090600160b01b900460ff166122cb5760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610d79565b600c54600160a01b900460ff16156123d05760085442106122f857600c805460ff60a01b191690556123d0565b6021546001600160a01b039081169085160361235a5761231783610ea8565b6123555760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610d79565b6123d0565b6021546001600160a01b03908116908416036123795761231784610ea8565b61238284610ea8565b8015612392575061239283610ea8565b6123d05760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610d79565b602454600160a01b900460ff16156123f4576123ed84848461293d565b9050610d48565b6021546001600160a01b0384811691161480156124135750600a5460ff165b15612499576025548211158061246457506001600160a01b0384166000908152600e602052604090205460ff16801561246457506001600160a01b0383166000908152600e602052604090205460ff165b6124995760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606401610d79565b6001600160a01b0383166000908152600e602052604090205460ff161580156124c45750600a5460ff165b1561252b576026546001600160a01b0384166000908152600160205260409020546124f0908490613916565b111561252b5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610d79565b601b5460ff1615801561253f575060105415155b156126c557601b54610100900460ff1661263d576010546125639062015180613916565b4211156126385760135460145460155461257d9190613916565b6125879190613916565b15612593576001612596565b60005b60ff166011556016546017546018546125af9190613916565b6125b99190613916565b156125c55760016125c8565b60005b60ff166012556011546013546014546015546125e49190613916565b6125ee9190613916565b6125f89190613916565b6019556012546016546017546018546126119190613916565b61261b9190613916565b6126259190613916565b601a55601b805461ff0019166101001790555b6126c5565b60105461264d906228de80613916565b4211156126c5576000601181905560128190556013546014546015546126739190613916565b61267d9190613916565b6126879190613916565b6019556012546016546017546018546126a09190613916565b6126aa9190613916565b6126b49190613916565b601a55601b805460ff191660011790555b6021546001600160a01b038581169116148015906126ed5750602454600160a01b900460ff16155b80156127025750602454600160a81b900460ff165b80156127395750602754601f54601e54601d54601c546127229190613916565b61272c9190613916565b6127369190613916565b10155b15612746576127466129e5565b6001600160a01b03841660009081526001602052604090205461276a908390613929565b6001600160a01b038086166000818152600160205260409020929092556021548492911614806127a757506021546001600160a01b038581169116145b15612806576001600160a01b0385166000908152600d602052604090205460ff161580156127ee57506001600160a01b0384166000908152600d602052604090205460ff16155b6127f85782612803565b6128038585856130f6565b90505b6001600160a01b03841660009081526001602052604090205461282a908290613916565b6001600160a01b038086166000818152600160205260409081902093909355915190871690600080516020613c188339815191529061286c9085815260200190565b60405180910390a3506001949350505050565b805160005b818110156128e8576001600b60008584815181106128a4576128a4613b49565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806128e081613b5f565b915050612884565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812054612961908390613929565b6001600160a01b038086166000908152600160205260408082209390935590851681522054612991908390613916565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020613c18833981519152906129d39086815260200190565b60405180910390a35060019392505050565b6024805460ff60a01b1916600160a01b17905530600090815260016020526040812054601d54601e54601c54601f549394929391929091908183612a298688613916565b612a339190613916565b612a3d9190613916565b9050600081612a4c87896138ff565b612a569190613a8f565b905060008080612a67600285613a8f565b9050612a73818b613929565b600003612a8957505050505050505050506130e7565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612abe57612abe613b49565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190613ab1565b81600181518110612b4d57612b4d613b49565b6001600160a01b03928316602091820292909201810191909152541663791ac947612b78848e613929565b60008430426040518663ffffffff1660e01b8152600401612b9d959493929190613b78565b600060405180830381600087803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b50505050600080831115612c91576020546001600160a01b031663f305d719612bf4858a613929565b612bfe86476138ff565b612c089190613a8f565b6040516001600160e01b031960e084901b16815230600482015260248101879052600060448201819052606482015261dead60848201524260a482015260c40160606040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190613be9565b50909150505b612c9b8184613929565b612ca59087613929565b8b10612cce57612cb58184613929565b612cbf9087613929565b612cc9908c613929565b612cd1565b60005b601d5547612cdf8c89613929565b600003612cf857505050505050505050505050506130e7565b89612d038a8d613916565b612d0d9190613916565b612d178a836138ff565b612d219190613a8f565b945089612d2e8a8d613916565b612d389190613916565b612d428c836138ff565b612d4c9190613a8f565b9550600085612d5b8884613929565b612d659190613929565b9050888c8f612d7491906138ff565b612d7e9190613a8f565b8c10612daa57888c8f612d9191906138ff565b612d9b9190613a8f565b612da5908d613929565b612dad565b60005b601e81905550888b8f612dc091906138ff565b612dca9190613a8f565b8b10612df657888b8f612ddd91906138ff565b612de79190613a8f565b612df1908c613929565b612df9565b60005b601c81905550888a8f612e0c91906138ff565b612e169190613a8f565b8a10612e4257888a8f612e2991906138ff565b612e339190613a8f565b612e3d908b613929565b612e45565b60005b601f5581156130d8578515613008576000612e61600288613a8f565b90506000602260009054906101000a90046001600160a01b03166001600160a01b0316633690e2876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edc9190613ab1565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114612f26576040519150601f19603f3d011682016040523d82523d6000602084013e612f2b565b606091505b5050905080612f3957600080fd5b6022546040805163d7e7a9e760e01b815290516000926001600160a01b03169163d7e7a9e79160048083019260209291908290030181865afa158015612f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa79190613ab1565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114612ff1576040519150601f19603f3d011682016040523d82523d6000602084013e612ff6565b606091505b505090508061300457600080fd5b5050505b8615613070576023546040516000916001600160a01b03169089908381818185875af1925050503d806000811461305b576040519150601f19603f3d011682016040523d82523d6000602084013e613060565b606091505b505090508061306e57600080fd5b505b80156130d8576024546040516000916001600160a01b03169083908381818185875af1925050503d80600081146130c3576040519150601f19603f3d011682016040523d82523d6000602084013e6130c8565b606091505b50509050806130d657600080fd5b505b50505050505050505050505050505b6024805460ff60a01b19169055565b602154600090819081908190819081906001600160a01b03808a1691160361313657601a5494506016549350601754925060185491506012549050613150565b601954945060135493506014549250601554915060115490505b84600003613165578695505050505050610d48565b60006064613173878a6138ff565b61317d9190613a8f565b90508561318a86836138ff565b6131949190613a8f565b601c60008282546131a59190613916565b909155508690506131b685836138ff565b6131c09190613a8f565b601d60008282546131d19190613916565b909155508690506131e284836138ff565b6131ec9190613a8f565b601e60008282546131fd9190613916565b9091555086905061320e83836138ff565b6132189190613a8f565b601f60008282546132299190613916565b909155505030600090815260016020526040902054613249908290613916565b30600081815260016020526040908190209290925590516001600160a01b038c1690600080516020613c18833981519152906132889085815260200190565b60405180910390a361329a8189613929565b9a9950505050505050505050565b600060208083528351808285015260005b818110156132d5578581018301518582016040015282016132b9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461104657600080fd5b8035613316816132f6565b919050565b6000806040838503121561332e57600080fd5b8235613339816132f6565b946020939093013593505050565b60006020828403121561335957600080fd5b8135610d48816132f6565b60008060006060848603121561337957600080fd5b8335613384816132f6565b92506020840135613394816132f6565b929592945050506040919091013590565b801515811461104657600080fd5b600080604083850312156133c657600080fd5b8235613339816133a5565b6000602082840312156133e357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715613424576134246133ea565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613453576134536133ea565b604052919050565b600082601f83011261346c57600080fd5b813567ffffffffffffffff811115613486576134866133ea565b613499601f8201601f191660200161342a565b8181528460208386010111156134ae57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126134dc57600080fd5b8135602067ffffffffffffffff8211156134f8576134f86133ea565b8160051b61350782820161342a565b928352848101820192828101908785111561352157600080fd5b83870192505b8483101561354957823561353a816132f6565b82529183019190830190613527565b979650505050505050565b600060c0828403121561356657600080fd5b60405160c0810181811067ffffffffffffffff82111715613589576135896133ea565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e083850312156135e157600080fd5b823567ffffffffffffffff808211156135f957600080fd5b90840190610180828703121561360e57600080fd5b613616613400565b82358281111561362557600080fd5b6136318882860161345b565b82525060208301358281111561364657600080fd5b6136528882860161345b565b60208301525060408301356040820152606083013560608201526080830135608082015261368260a0840161330b565b60a082015261369360c0840161330b565b60c08201526136a460e0840161330b565b60e08201526101006136b781850161330b565b908201526101206136c984820161330b565b9082015261014083810135838111156136e157600080fd5b6136ed898287016134cb565b828401525050610160915061370382840161330b565b8282015280945050505061371a8460208501613554565b90509250929050565b6000806040838503121561373657600080fd5b8235613741816132f6565b91506020830135613751816133a5565b809150509250929050565b60008060008060008060c0878903121561377557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156137b257600080fd5b82356137bd816132f6565b91506020830135613751816132f6565b6000602082840312156137df57600080fd5b813567ffffffffffffffff808211156137f757600080fd5b908301906020828603121561380b57600080fd5b604051602081018181108382111715613826576138266133ea565b60405282358281111561383857600080fd5b613844878286016134cb565b82525095945050505050565b60006020828403121561386257600080fd5b8135610d48816133a5565b600181811c9082168061388157607f821691505b6020821081036138a157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cf857610cf86138e9565b80820180821115610cf857610cf86138e9565b81810381811115610cf857610cf86138e9565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b601f8211156128e857600081815260208120601f850160051c810160208610156139a85750805b601f850160051c820191505b818110156139c7578281556001016139b4565b505050505050565b815167ffffffffffffffff8111156139e9576139e96133ea565b6139fd816139f7845461386d565b84613981565b602080601f831160018114613a325760008415613a1a5750858301515b600019600386901b1c1916600185901b1785556139c7565b600085815260208120601f198616915b82811015613a6157888601518255948401946001909101908401613a42565b5085821015613a7f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082613aac57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ac357600080fd5b8151610d48816132f6565b600060208284031215613ae057600080fd5b8151610d48816133a5565b602080825260089082015267686967682066656560c01b604082015260600190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b600060208284031215613b4257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613b7157613b716138e9565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613bc85784516001600160a01b031683529383019391830191600101613ba3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613bfe57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201a532a83dcac57ae5df052ab3eac0cc0b52b43a0f19d31844a3cc578ff73734364736f6c63430008110033
Deployed Bytecode
0x6080604052600436106103fe5760003560e01c8063807c2d9c11610213578063c45a015511610123578063e572967b116100ab578063f2fde38b1161007a578063f2fde38b14610bc8578063f576f53914610be8578063f887ea4014610bfd578063fabe628314610c1d578063fbd7575314610c3d57600080fd5b8063e572967b14610b52578063e66b1d1e14610b72578063ebdfd72214610b92578063f16fd78d14610ba857600080fd5b8063d0a5eb4e116100f2578063d0a5eb4e14610a7b578063d4fb9a0114610a9b578063d741b9c314610abc578063d920334e14610aec578063dd62ed3e14610b0c57600080fd5b8063c45a015514610a0f578063ca987b0e14610a2f578063cb29813c14610a45578063cd1e330a14610a6557600080fd5b806395d89b41116101a6578063a8aa1b3111610175578063a8aa1b3114610983578063a9059cbb146109a3578063b48e665e146109c3578063b72344a2146109d9578063bf56b371146109f957600080fd5b806395d89b4114610918578063985b9db01461092d578063a3a2e89e14610943578063a457c2d71461096357600080fd5b80638b42507f116101e25780638b42507f146108945780638da5cb5b146108c45780638ea5220f146108e25780639502c4261461090257600080fd5b8063807c2d9c1461082f578063838420131461084557806388cda8731461085f5780638a1c7b841461087e57600080fd5b80633f4218e01161030e57806365359892116102a157806370c757ec1161027057806370c757ec146107ad578063715018a6146107ce5780637c0ff205146107e35780637d1db4a5146107f95780637db1342c1461080f57600080fd5b8063653598921461072b5780636827e7641461074b578063704ce43e1461076157806370a082311461077757600080fd5b80634a74bb02116102dd5780634a74bb02146106c0578063546a8811146106e157806359a51c34146106f65780635fef86801461071657600080fd5b80633f4218e0146106265780634355855a1461065657806344de2e4c14610686578063497a000a146106a057600080fd5b806323b62b75116103915780632b112e49116103605780632b112e4914610595578063313ce567146105aa57806339509351146105c65780633af32abf146105e65780633dab52691461060657600080fd5b806323b62b751461052057806323b872dd1461054057806327193bc414610560578063283744251461057557600080fd5b80630ab16c19116103cd5780630ab16c191461049b57806318160ddd146104d35780631df4ccfc146104e85780631f53ac02146104fe57600080fd5b80630445b6671461040a57806306fdde0314610433578063095ea7b3146104555780630963da6c1461048557600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061042060275481565b6040519081526020015b60405180910390f35b34801561043f57600080fd5b50610448610c52565b60405161042a91906132a8565b34801561046157600080fd5b5061047561047036600461331b565b610ce4565b604051901515815260200161042a565b34801561049157600080fd5b5061042060135481565b3480156104a757600080fd5b50600c546104bb906001600160a01b031681565b6040516001600160a01b03909116815260200161042a565b3480156104df57600080fd5b50600354610420565b3480156104f457600080fd5b5061042060195481565b34801561050a57600080fd5b5061051e610519366004613347565b610cfe565b005b34801561052c57600080fd5b506024546104bb906001600160a01b031681565b34801561054c57600080fd5b5061047561055b366004613364565b610d28565b34801561056c57600080fd5b5061051e610d4f565b34801561058157600080fd5b506006546104bb906001600160a01b031681565b3480156105a157600080fd5b50610420610df9565b3480156105b657600080fd5b506040516009815260200161042a565b3480156105d257600080fd5b506104756105e136600461331b565b610e69565b3480156105f257600080fd5b50610475610601366004613347565b610ea8565b34801561061257600080fd5b5061051e6106213660046133b3565b610ec6565b34801561063257600080fd5b50610475610641366004613347565b600d6020526000908152604090205460ff1681565b34801561066257600080fd5b50610475610671366004613347565b600f6020526000908152604090205460ff1681565b34801561069257600080fd5b50600a546104759060ff1681565b3480156106ac57600080fd5b5061051e6106bb3660046133d1565b610ef0565b3480156106cc57600080fd5b5060245461047590600160a81b900460ff1681565b3480156106ed57600080fd5b5061051e610f50565b34801561070257600080fd5b506007546104bb906001600160a01b031681565b34801561072257600080fd5b5061051e610ff0565b34801561073757600080fd5b5061051e6107463660046135ce565b611049565b34801561075757600080fd5b5061042060155481565b34801561076d57600080fd5b5061042060145481565b34801561078357600080fd5b50610420610792366004613347565b6001600160a01b031660009081526001602052604090205490565b3480156107b957600080fd5b50600c5461047590600160a01b900460ff1681565b3480156107da57600080fd5b5061051e6117e3565b3480156107ef57600080fd5b5061042060175481565b34801561080557600080fd5b5061042060255481565b34801561081b57600080fd5b5061051e61082a3660046133d1565b6117f7565b34801561083b57600080fd5b5061042060265481565b34801561085157600080fd5b50601b546104759060ff1681565b34801561086b57600080fd5b50601b5461047590610100900460ff1681565b34801561088a57600080fd5b5061042060125481565b3480156108a057600080fd5b506104756108af366004613347565b600e6020526000908152604090205460ff1681565b3480156108d057600080fd5b506000546001600160a01b03166104bb565b3480156108ee57600080fd5b506023546104bb906001600160a01b031681565b34801561090e57600080fd5b5061042060185481565b34801561092457600080fd5b506104486118cf565b34801561093957600080fd5b5061042060165481565b34801561094f57600080fd5b5061051e61095e366004613723565b6118de565b34801561096f57600080fd5b5061047561097e36600461331b565b611911565b34801561098f57600080fd5b506021546104bb906001600160a01b031681565b3480156109af57600080fd5b506104756109be36600461331b565b6119ae565b3480156109cf57600080fd5b5061042060095481565b3480156109e557600080fd5b5061051e6109f4366004613347565b6119bc565b348015610a0557600080fd5b5061042060105481565b348015610a1b57600080fd5b506022546104bb906001600160a01b031681565b348015610a3b57600080fd5b50610420601a5481565b348015610a5157600080fd5b5061051e610a6036600461375c565b611a08565b348015610a7157600080fd5b5061042060115481565b348015610a8757600080fd5b5061051e610a96366004613347565b611c59565b348015610aa757600080fd5b5060245461047590600160b01b900460ff1681565b348015610ac857600080fd5b50610475610ad7366004613347565b600b6020526000908152604090205460ff1681565b348015610af857600080fd5b5061051e610b073660046133d1565b611c83565b348015610b1857600080fd5b50610420610b2736600461379f565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610b5e57600080fd5b5061051e610b6d3660046137cd565b611d5b565b348015610b7e57600080fd5b5061051e610b8d366004613850565b611d90565b348015610b9e57600080fd5b5061042060085481565b348015610bb457600080fd5b5061051e610bc3366004613347565b611dcd565b348015610bd457600080fd5b5061051e610be3366004613347565b611e31565b348015610bf457600080fd5b5061051e611e98565b348015610c0957600080fd5b506020546104bb906001600160a01b031681565b348015610c2957600080fd5b5061051e610c38366004613723565b611ff0565b348015610c4957600080fd5b5061051e612023565b606060048054610c619061386d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d9061386d565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b600033610cf281858561206e565b60019150505b92915050565b610d06612192565b602380546001600160a01b0319166001600160a01b0392909216919091179055565b600033610d368582856121ec565b610d4185858561227e565b5060019150505b9392505050565b6022546001600160a01b03163314610d825760405162461bcd60e51b8152600401610d79906138a7565b60405180910390fd5b60105415610dc55760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b185d5b98da195960821b6044820152606401610d79565b42601055600954610dd790603c6138ff565b610de19042613916565b600855600c805460ff60a01b1916600160a01b179055565b60016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495461dead60009081527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d54600354919291610e5a9190613929565b610e649190613929565b905090565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190610cf29082908690610ea3908790613916565b61206e565b6001600160a01b03166000908152600b602052604090205460ff1690565b610ece612192565b60248054921515600160a81b0260ff60a81b1990931692909217909155602755565b6007546001600160a01b03163314610f1a5760405162461bcd60e51b8152600401610d799061393c565b6009819055610f2a81603c6138ff565b601054610f379190613916565b60085550600c805460ff60a01b1916600160a01b179055565b6022546001600160a01b03163314610f7a5760405162461bcd60e51b8152600401610d79906138a7565b602080546001600160a01b039081166000908152600d835260408082208054600160ff199182168117909255855485168452600e909552818320805486168217905582549093168252902080548316909117905560248054600a805490931690925561ffff60a81b19909116600160b01b179055565b610ff8612192565b6110463033601f54601e54601d54601c546110139190613916565b61101d9190613916565b6110279190613916565b306000908152600160205260409020546110419190613929565b61227e565b50565b6022546001600160a01b031633146110735760405162461bcd60e51b8152600401610d79906138a7565b815160049061108290826139cf565b50602082015160059061109590826139cf565b5060408201516003556060820151604611156110dd5760405162461bcd60e51b8152602060048201526007602482015266546f6f206c6f7760c81b6044820152606401610d79565b6103e8826040015160056110f191906138ff565b6110fb9190613a8f565b60255560408201516064906111119060016138ff565b61111b9190613a8f565b6026556040820151610fa0906111329060056138ff565b61113c9190613a8f565b602755610100820151602080546001600160a01b0319166001600160a01b0390921691821781556040805163c45a015560e01b8152905163c45a0155926004808401939192918290030181865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf9190613ab1565b60208054604080516315ab88c960e31b815290516001600160a01b039485169463c9c653969493169263ad5c464892600480820193918290030181865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190613ab1565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801561127e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a29190613ab1565b602180546001600160a01b0319166001600160a01b0392831617815530600081815260026020908152604080832082548716845282528083206000199055928252600b9052818120805460ff199081166001908117909255602254861683528383208054821683179055935485168252828220805485168217905560a08701518516825282822080548516821790556101208701518516825282822080548516821790556101008701519094168152208054909116909117905561014082015161136b9061287f565b610160820151600c80546001600160a01b0319166001600160a01b03928316179055306000908152600d60209081526040808320805460ff1990811660019081179092556022805487168652838620805483168417905560a0808a0180518916885285882080548516861790555188168752600e865284872080548416851790556021548816875284872080548416851790559054909616855282852080548216831790557ff77e91909e61d18f67b875b2bfcae1f683a8d555e55382e3a6b082e2c59ea57a80548216831790559380527fe710864318d4a32f37d6ce54cb3fadbef648dd12d8dbdf53973564d56b7f881c8054909416179092556080808601516009559184015160148190556060850151601755918401516015819055928401516018558351601381905590840151601655916114a99190613916565b6114b39190613916565b6000036114c05760006011555b6011548151604083015160808401516114d99190613916565b6114e39190613916565b6114ed9190613916565b6019556020810151606082015160a08301516115099190613916565b6115139190613916565b6000036115205760006012555b601254816020015182606001518360a0015161153c9190613916565b6115469190613916565b6115509190613916565b601a5560225460a0830151604051633af32abf60e01b81526001600160a01b039182166004820152911690633af32abf90602401602060405180830381865afa1580156115a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c59190613ace565b1561165357600c601954111561160c5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610d79565b6011601a54111561164e5760405162461bcd60e51b815260206004820152600c60248201526b68696768204b59432066656560a01b6044820152606401610d79565b611699565b600760195411156116765760405162461bcd60e51b8152600401610d7990613aeb565b6007601a5411156116995760405162461bcd60e51b8152600401610d7990613aeb565b60c0820151602380546001600160a01b039283166001600160a01b03199182161790915560e08401516024805491841691831691909117905561012084015160078054919093169116179055606082015160408301516000916064916116ff91906138ff565b6117099190613a8f565b9050600081846040015161171d9190613929565b33600090815260016020526040812080549293508492909190611741908490613916565b909155505060a08401516001600160a01b031660009081526001602052604081208054839290611772908490613916565b90915550506040518281523390600090600080516020613c188339815191529060200160405180910390a38360a001516001600160a01b031660006001600160a01b0316600080516020613c18833981519152836040516117d591815260200190565b60405180910390a350505050565b6117eb612192565b6117f560006128ed565b565b6117ff612192565b6010546000036118215760405162461bcd60e51b8152600401610d7990613b0d565b6103e8600354600561183391906138ff565b61183d9190613a8f565b8110156118775760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d79565b6064600354600361188891906138ff565b6118929190613a8f565b8111156118ca5760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d79565b602655565b606060058054610c619061386d565b6118e6612192565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909190838110156119965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d79565b6119a3828686840361206e565b506001949350505050565b6000336119a381858561227e565b6007546001600160a01b031633146119e65760405162461bcd60e51b8152600401610d799061393c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b611a10612192565b6000806010546228de80611a249190613916565b42118015611a33575060105415155b15611a4357506000905080611a79565b601054611a539062015180613916565b42118015611a62575060105415155b15611a7257506001905080611a79565b5060029050805b60138890556014869055601584905560168790556017859055601883905587611aa28786613916565b611aac9190613916565b600003611ab857600091505b8188611ac48887613916565b611ace9190613916565b611ad89190613916565b60195586611ae68685613916565b611af09190613916565b600003611afb575060005b8087601754601854611b0d9190613916565b611b179190613916565b611b219190613916565b601a55601182905560128190556022546001600160a01b0316633af32abf611b516000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb99190613ace565b15611c0957600c6019541115611be15760405162461bcd60e51b8152600401610d7990613aeb565b6011601a541115611c045760405162461bcd60e51b8152600401610d7990613aeb565b611c4f565b60076019541115611c2c5760405162461bcd60e51b8152600401610d7990613aeb565b6007601a541115611c4f5760405162461bcd60e51b8152600401610d7990613aeb565b5050505050505050565b611c61612192565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b611c8b612192565b601054600003611cad5760405162461bcd60e51b8152600401610d7990613b0d565b6103e86003546005611cbf91906138ff565b611cc99190613a8f565b811015611d035760405162461bcd60e51b81526020600482015260086024820152674d696e20302e352560c01b6044820152606401610d79565b60646003546003611d1491906138ff565b611d1e9190613a8f565b811115611d565760405162461bcd60e51b81526020600482015260066024820152654d617820332560d01b6044820152606401610d79565b602555565b6022546001600160a01b03163314611d855760405162461bcd60e51b8152600401610d79906138a7565b80516110469061287f565b611d98612192565b601054600003611dba5760405162461bcd60e51b8152600401610d7990613b0d565b600a805460ff1916911515919091179055565b6007546001600160a01b03163314611df75760405162461bcd60e51b8152600401610d799061393c565b600780546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b611e39612192565b6001600160a01b038116611e8f5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610d79565b611046816128ed565b6022546001600160a01b03163314611ec25760405162461bcd60e51b8152600401610d79906138a7565b600c54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015611f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f309190613b30565b611f3b906001613916565b905060015b81811015611fec57600c546040516331a9108f60e11b815260048101839052600191600b916000916001600160a01b031690636352211e90602401602060405180830381865afa158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613ab1565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611f40565b5050565b611ff8612192565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6022546001600160a01b0316331461204d5760405162461bcd60e51b8152600401610d79906138a7565b6024805460ff60b01b198116600160b01b9182900460ff1615909102179055565b6001600160a01b0383166120d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d79565b6001600160a01b0382166121315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d79565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146117f55760405162461bcd60e51b815260206004820152601760248201527f63616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610d79565b6001600160a01b038381166000908152600260209081526040808320938616835292905220546000198114612278578181101561226b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610d79565b612278848484840361206e565b50505050565b602454600090600160b01b900460ff166122cb5760405162461bcd60e51b815260206004820152600e60248201526d151c98591a5b99c810db1bdcd95960921b6044820152606401610d79565b600c54600160a01b900460ff16156123d05760085442106122f857600c805460ff60a01b191690556123d0565b6021546001600160a01b039081169085160361235a5761231783610ea8565b6123555760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610d79565b6123d0565b6021546001600160a01b03908116908416036123795761231784610ea8565b61238284610ea8565b8015612392575061239283610ea8565b6123d05760405162461bcd60e51b815260206004820152600f60248201526e139bdd0815da1a5d195b1a5cdd1959608a1b6044820152606401610d79565b602454600160a01b900460ff16156123f4576123ed84848461293d565b9050610d48565b6021546001600160a01b0384811691161480156124135750600a5460ff165b15612499576025548211158061246457506001600160a01b0384166000908152600e602052604090205460ff16801561246457506001600160a01b0383166000908152600e602052604090205460ff165b6124995760405162461bcd60e51b815260206004820152600660248201526509ac2f040a8b60d31b6044820152606401610d79565b6001600160a01b0383166000908152600e602052604090205460ff161580156124c45750600a5460ff165b1561252b576026546001600160a01b0384166000908152600160205260409020546124f0908490613916565b111561252b5760405162461bcd60e51b815260206004820152600a60248201526913585e0815d85b1b195d60b21b6044820152606401610d79565b601b5460ff1615801561253f575060105415155b156126c557601b54610100900460ff1661263d576010546125639062015180613916565b4211156126385760135460145460155461257d9190613916565b6125879190613916565b15612593576001612596565b60005b60ff166011556016546017546018546125af9190613916565b6125b99190613916565b156125c55760016125c8565b60005b60ff166012556011546013546014546015546125e49190613916565b6125ee9190613916565b6125f89190613916565b6019556012546016546017546018546126119190613916565b61261b9190613916565b6126259190613916565b601a55601b805461ff0019166101001790555b6126c5565b60105461264d906228de80613916565b4211156126c5576000601181905560128190556013546014546015546126739190613916565b61267d9190613916565b6126879190613916565b6019556012546016546017546018546126a09190613916565b6126aa9190613916565b6126b49190613916565b601a55601b805460ff191660011790555b6021546001600160a01b038581169116148015906126ed5750602454600160a01b900460ff16155b80156127025750602454600160a81b900460ff165b80156127395750602754601f54601e54601d54601c546127229190613916565b61272c9190613916565b6127369190613916565b10155b15612746576127466129e5565b6001600160a01b03841660009081526001602052604090205461276a908390613929565b6001600160a01b038086166000818152600160205260409020929092556021548492911614806127a757506021546001600160a01b038581169116145b15612806576001600160a01b0385166000908152600d602052604090205460ff161580156127ee57506001600160a01b0384166000908152600d602052604090205460ff16155b6127f85782612803565b6128038585856130f6565b90505b6001600160a01b03841660009081526001602052604090205461282a908290613916565b6001600160a01b038086166000818152600160205260409081902093909355915190871690600080516020613c188339815191529061286c9085815260200190565b60405180910390a3506001949350505050565b805160005b818110156128e8576001600b60008584815181106128a4576128a4613b49565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806128e081613b5f565b915050612884565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260016020526040812054612961908390613929565b6001600160a01b038086166000908152600160205260408082209390935590851681522054612991908390613916565b6001600160a01b038085166000818152600160205260409081902093909355915190861690600080516020613c18833981519152906129d39086815260200190565b60405180910390a35060019392505050565b6024805460ff60a01b1916600160a01b17905530600090815260016020526040812054601d54601e54601c54601f549394929391929091908183612a298688613916565b612a339190613916565b612a3d9190613916565b9050600081612a4c87896138ff565b612a569190613a8f565b905060008080612a67600285613a8f565b9050612a73818b613929565b600003612a8957505050505050505050506130e7565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612abe57612abe613b49565b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190613ab1565b81600181518110612b4d57612b4d613b49565b6001600160a01b03928316602091820292909201810191909152541663791ac947612b78848e613929565b60008430426040518663ffffffff1660e01b8152600401612b9d959493929190613b78565b600060405180830381600087803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b50505050600080831115612c91576020546001600160a01b031663f305d719612bf4858a613929565b612bfe86476138ff565b612c089190613a8f565b6040516001600160e01b031960e084901b16815230600482015260248101879052600060448201819052606482015261dead60848201524260a482015260c40160606040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190613be9565b50909150505b612c9b8184613929565b612ca59087613929565b8b10612cce57612cb58184613929565b612cbf9087613929565b612cc9908c613929565b612cd1565b60005b601d5547612cdf8c89613929565b600003612cf857505050505050505050505050506130e7565b89612d038a8d613916565b612d0d9190613916565b612d178a836138ff565b612d219190613a8f565b945089612d2e8a8d613916565b612d389190613916565b612d428c836138ff565b612d4c9190613a8f565b9550600085612d5b8884613929565b612d659190613929565b9050888c8f612d7491906138ff565b612d7e9190613a8f565b8c10612daa57888c8f612d9191906138ff565b612d9b9190613a8f565b612da5908d613929565b612dad565b60005b601e81905550888b8f612dc091906138ff565b612dca9190613a8f565b8b10612df657888b8f612ddd91906138ff565b612de79190613a8f565b612df1908c613929565b612df9565b60005b601c81905550888a8f612e0c91906138ff565b612e169190613a8f565b8a10612e4257888a8f612e2991906138ff565b612e339190613a8f565b612e3d908b613929565b612e45565b60005b601f5581156130d8578515613008576000612e61600288613a8f565b90506000602260009054906101000a90046001600160a01b03166001600160a01b0316633690e2876040518163ffffffff1660e01b8152600401602060405180830381865afa158015612eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edc9190613ab1565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114612f26576040519150601f19603f3d011682016040523d82523d6000602084013e612f2b565b606091505b5050905080612f3957600080fd5b6022546040805163d7e7a9e760e01b815290516000926001600160a01b03169163d7e7a9e79160048083019260209291908290030181865afa158015612f83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa79190613ab1565b6001600160a01b03168360405160006040518083038185875af1925050503d8060008114612ff1576040519150601f19603f3d011682016040523d82523d6000602084013e612ff6565b606091505b505090508061300457600080fd5b5050505b8615613070576023546040516000916001600160a01b03169089908381818185875af1925050503d806000811461305b576040519150601f19603f3d011682016040523d82523d6000602084013e613060565b606091505b505090508061306e57600080fd5b505b80156130d8576024546040516000916001600160a01b03169083908381818185875af1925050503d80600081146130c3576040519150601f19603f3d011682016040523d82523d6000602084013e6130c8565b606091505b50509050806130d657600080fd5b505b50505050505050505050505050505b6024805460ff60a01b19169055565b602154600090819081908190819081906001600160a01b03808a1691160361313657601a5494506016549350601754925060185491506012549050613150565b601954945060135493506014549250601554915060115490505b84600003613165578695505050505050610d48565b60006064613173878a6138ff565b61317d9190613a8f565b90508561318a86836138ff565b6131949190613a8f565b601c60008282546131a59190613916565b909155508690506131b685836138ff565b6131c09190613a8f565b601d60008282546131d19190613916565b909155508690506131e284836138ff565b6131ec9190613a8f565b601e60008282546131fd9190613916565b9091555086905061320e83836138ff565b6132189190613a8f565b601f60008282546132299190613916565b909155505030600090815260016020526040902054613249908290613916565b30600081815260016020526040908190209290925590516001600160a01b038c1690600080516020613c18833981519152906132889085815260200190565b60405180910390a361329a8189613929565b9a9950505050505050505050565b600060208083528351808285015260005b818110156132d5578581018301518582016040015282016132b9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461104657600080fd5b8035613316816132f6565b919050565b6000806040838503121561332e57600080fd5b8235613339816132f6565b946020939093013593505050565b60006020828403121561335957600080fd5b8135610d48816132f6565b60008060006060848603121561337957600080fd5b8335613384816132f6565b92506020840135613394816132f6565b929592945050506040919091013590565b801515811461104657600080fd5b600080604083850312156133c657600080fd5b8235613339816133a5565b6000602082840312156133e357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff81118282101715613424576134246133ea565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613453576134536133ea565b604052919050565b600082601f83011261346c57600080fd5b813567ffffffffffffffff811115613486576134866133ea565b613499601f8201601f191660200161342a565b8181528460208386010111156134ae57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126134dc57600080fd5b8135602067ffffffffffffffff8211156134f8576134f86133ea565b8160051b61350782820161342a565b928352848101820192828101908785111561352157600080fd5b83870192505b8483101561354957823561353a816132f6565b82529183019190830190613527565b979650505050505050565b600060c0828403121561356657600080fd5b60405160c0810181811067ffffffffffffffff82111715613589576135896133ea565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e083850312156135e157600080fd5b823567ffffffffffffffff808211156135f957600080fd5b90840190610180828703121561360e57600080fd5b613616613400565b82358281111561362557600080fd5b6136318882860161345b565b82525060208301358281111561364657600080fd5b6136528882860161345b565b60208301525060408301356040820152606083013560608201526080830135608082015261368260a0840161330b565b60a082015261369360c0840161330b565b60c08201526136a460e0840161330b565b60e08201526101006136b781850161330b565b908201526101206136c984820161330b565b9082015261014083810135838111156136e157600080fd5b6136ed898287016134cb565b828401525050610160915061370382840161330b565b8282015280945050505061371a8460208501613554565b90509250929050565b6000806040838503121561373657600080fd5b8235613741816132f6565b91506020830135613751816133a5565b809150509250929050565b60008060008060008060c0878903121561377557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080604083850312156137b257600080fd5b82356137bd816132f6565b91506020830135613751816132f6565b6000602082840312156137df57600080fd5b813567ffffffffffffffff808211156137f757600080fd5b908301906020828603121561380b57600080fd5b604051602081018181108382111715613826576138266133ea565b60405282358281111561383857600080fd5b613844878286016134cb565b82525095945050505050565b60006020828403121561386257600080fd5b8135610d48816133a5565b600181811c9082168061388157607f821691505b6020821081036138a157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520666163746f604082015261727960f01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cf857610cf86138e9565b80820180821115610cf857610cf86138e9565b81810381811115610cf857610cf86138e9565b60208082526025908201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652070726f6f6660408201526420b236b4b760d91b606082015260800190565b601f8211156128e857600081815260208120601f850160051c810160208610156139a85750805b601f850160051c820191505b818110156139c7578281556001016139b4565b505050505050565b815167ffffffffffffffff8111156139e9576139e96133ea565b6139fd816139f7845461386d565b84613981565b602080601f831160018114613a325760008415613a1a5750858301515b600019600386901b1c1916600185901b1785556139c7565b600085815260208120601f198616915b82811015613a6157888601518255948401946001909101908401613a42565b5085821015613a7f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082613aac57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ac357600080fd5b8151610d48816132f6565b600060208284031215613ae057600080fd5b8151610d48816133a5565b602080825260089082015267686967682066656560c01b604082015260600190565b602080825260099082015268085b185d5b98da195960ba1b604082015260600190565b600060208284031215613b4257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060018201613b7157613b716138e9565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613bc85784516001600160a01b031683529383019391830191600101613ba3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613bfe57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201a532a83dcac57ae5df052ab3eac0cc0b52b43a0f19d31844a3cc578ff73734364736f6c63430008110033
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.