ERC-20
Platform
Overview
Max Total Supply
100,000,000 INVA
Holders
331 ( 0.604%)
Total Transfers
-
Market
Price
$0.01 @ 0.000002 ETH (-6.43%)
Onchain Market Cap
$822,295.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
InnoviaToken
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.24; // OPENZEPPELIN IMPORTS import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; // UNISWAP INTERFACES import {IUniswapRouter02, IUniswapFactory, IUniswapPair} from "./interface/IUniswapV2.sol"; /** * @title Innovia Token * @author Bladepool * @notice This is the token for Innovia on the ETH chain. It is an ERC20 token with a fixed supply. * Total Init Supply: 100,000,000 INVA * Decimals: 18 * Symbol: INVA * Name: Innovia Token * This contract contains editable taxes for INVA * Buy and Sell taxes will start at 35% and decrease by 5% every 5 minutes until it reaches 5% * Majority of taxes is converted to ETH, a small portion is kept to create liquidity, others are split between * marketing, dev, and buyback wallets. */ contract InnoviaToken is ERC20, Ownable { //------------------------------------------------------------------------- // Errors //------------------------------------------------------------------------- error INVA__InvalidNewTax(); error INVA__InvalidValue(); error INVA__MaxTxExceeded(); error INVA__MaxWalletExceeded(); error INVA__InvalidListLength(); error INVA__OnlyDevWallet(); error INVA__OnlyMktWallet(); error INVA__OnlyBBWallet(); error INVA_NativeTransferFailed(); error INVA__NoBalance(); error INVA__AlreadySwapping(); //------------------------------------------------------------------------- // STATE VARIABLES //------------------------------------------------------------------------- mapping(address => bool) public isExcludedFromTax; mapping(address => bool) public isMaxWalletExcluded; mapping(address => bool) public isMaxTxExcluded; // We can add more pairs to tax them when necessary mapping(address => bool) public isPair; address public devWallet; address public marketingWallet; address public buybackWallet; address public deadWallet = 0x000000000000000000000000000000000000dEaD; IUniswapRouter02 public router; IUniswapPair public pair; uint public sellThreshold; uint public startTaxTime; uint public maxTx; uint public maxWallet; uint8 public mktShare = 15; uint8 public devShare = 10; uint8 public bbShare = 15; uint8 public liqShare = 10; uint8 private totalShares = 80; uint8 public buyTax = 5; uint8 public sellTax = 5; uint8 private swapping = 1; uint private constant _TAX_INTERVAL = 5 minutes; uint private constant MAX_TAX_TIME = 35 minutes; uint256 private constant _INIT_SUPPLY = 100_000_000 ether; uint256 private constant PERCENTILE = 100; //------------------------------------------------------------------------- // EVENTS //------------------------------------------------------------------------- event UpdateSellTax(uint tax); event UpdateBuyTax(uint tax); event UpdateDevWallet( address indexed prevWallet, address indexed newWallet ); event UpdateMarketingWallet( address indexed prevWallet, address indexed newWallet ); event UpdateBuybackWallet( address indexed prevWallet, address indexed newWallet ); event UpdateTaxExclusionStatus(address indexed account, bool status); event UpdateMaxTxExclusionStatus(address indexed account, bool status); event UpdateMaxWalletExclusionStatus(address indexed account, bool status); event UpdateMaxTx(uint maxTx); event UpdateMaxWallet(uint maxWallet); event UpdateThreshold(uint threshold); event SetNewPair(address indexed pair); event UpdateShares( uint8 mktShare, uint8 devShare, uint8 bbShare, uint8 liqShare ); event UpdateUniswapRouter(address indexed router); //------------------------------------------------------------------------- // CONSTRUCTOR //------------------------------------------------------------------------- constructor( address _devWallet, address _marketingWallet, address _buybackWallet ) ERC20("Innovia Token", "INVA") Ownable(_devWallet) { // Sell Threshold is 0.2% of the total supply sellThreshold = _INIT_SUPPLY / (5 * PERCENTILE); // Setup PancakeSwap Contracts router = IUniswapRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); IUniswapFactory factory = IUniswapFactory(router.factory()); pair = IUniswapPair(factory.createPair(address(this), router.WETH())); isPair[address(pair)] = true; _approve(address(this), address(router), type(uint256).max); isExcludedFromTax[address(this)] = true; isExcludedFromTax[owner()] = true; isMaxWalletExcluded[owner()] = true; isMaxWalletExcluded[address(this)] = true; isMaxWalletExcluded[address(router)] = true; isMaxWalletExcluded[deadWallet] = true; isMaxWalletExcluded[address(pair)] = true; isMaxTxExcluded[owner()] = true; isMaxTxExcluded[address(this)] = true; isMaxTxExcluded[address(router)] = true; isMaxTxExcluded[address(0)] = true; devWallet = _devWallet; marketingWallet = _marketingWallet; buybackWallet = _buybackWallet; maxTx = _INIT_SUPPLY / 500; // 0.2% of total supply maxWallet = _INIT_SUPPLY / 100; // 1% of total supply uint availBalanceToSend = _INIT_SUPPLY; address CEX = 0x7BE9f4ee036828D1e9f13B86E53DC47d329f43a4; isMaxTxExcluded[CEX] = true; isMaxWalletExcluded[CEX] = true; uint toSend = _INIT_SUPPLY / 20; // 5% of total supply _mint(CEX, toSend); availBalanceToSend -= toSend; address team = 0x56D8D700c7204ec2D13b3E3D2d58186Ed9C724c5; isMaxTxExcluded[team] = true; toSend = _INIT_SUPPLY / 100; // 1% of total supply _mint(team, toSend); availBalanceToSend -= toSend; team = 0x3A20B506aEF06fF6b90d868C3F3918CF931A90cD; isMaxTxExcluded[team] = true; _mint(team, toSend); availBalanceToSend -= toSend; team = 0x3e81A2F0Bda2AF90162807242514ad89f0D7610d; isMaxTxExcluded[team] = true; _mint(team, toSend); availBalanceToSend -= toSend; team = 0xf73F994346761D11693DF6aF71fb607C05F7d2a6; isMaxTxExcluded[team] = true; _mint(team, toSend); availBalanceToSend -= toSend; team = 0x6E509f9e44FA5f0cF3122C57BcF60C565482BF4E; isMaxTxExcluded[team] = true; _mint(team, toSend); availBalanceToSend -= toSend; _mint(owner(), availBalanceToSend); } //------------------------------------------------------------------------- // EXTERNAL / PUBLIC FUNCTIONS //------------------------------------------------------------------------- // Allow contract to receive Native tokens receive() external payable {} fallback() external payable {} //------------------------------------------------------------------------- // Owner Functions //------------------------------------------------------------------------- /** * @notice This function is called to edit the buy tax for INVA * @param _buyTax The new buy tax to set * @dev the tax can only be a max of 10% */ function setBuyTax(uint8 _buyTax) external onlyOwner { if (_buyTax > 10) { revert INVA__InvalidNewTax(); } buyTax = _buyTax; emit UpdateBuyTax(_buyTax); } /** * @notice This function is called to edit the buy tax for INVA * @param _sellTax The new buy tax to set * @dev the tax can only be a max of 10% */ function setSellTax(uint8 _sellTax) external onlyOwner { if (_sellTax > 10) { revert INVA__InvalidNewTax(); } sellTax = _sellTax; emit UpdateBuyTax(_sellTax); } /** * @notice Changes the tax exclusion status for an address * @param _address The address to set the tax exclusion status for * @param _status The exclusion status, TRUE for excluded, FALSE for not excluded */ function setTaxExclusionStatus( address _address, bool _status ) external onlyOwner { isExcludedFromTax[_address] = _status; emit UpdateTaxExclusionStatus(_address, _status); } /** * @notice Changes the tax exclusion status for multiple addresses * @param addresses The list of addresses to set the tax exclusion status for * @param _status The exclusion status, TRUE for excluded, FALSE for not excluded for all addresses */ function setMultipleTaxExclusionStatus( address[] calldata addresses, bool _status ) external onlyOwner { if (addresses.length == 0) { revert INVA__InvalidListLength(); } for (uint256 i = 0; i < addresses.length; i++) { isExcludedFromTax[addresses[i]] = _status; emit UpdateTaxExclusionStatus(addresses[i], _status); } } /** * @notice changes the max tx exclusion status for an address * @param _address The address to change the exclusion of max tx status of * @param _status The new exclusion status for the address || TRUE for excluded, FALSE for not excluded */ function setMaxTxExclusionStatus( address _address, bool _status ) external onlyOwner { isMaxTxExcluded[_address] = _status; emit UpdateMaxTxExclusionStatus(_address, _status); } /** * @notice changes the max wallet exclusion status for an address * @param _address The address to change the exclusion of max wallet status of * @param _status The new exclusion status for the address || TRUE for excluded, FALSE for not excluded */ function setMaxWalletExclusionStatus( address _address, bool _status ) external onlyOwner { // Can't change the status of a pair since it'll always be excluded from max wallet if (isPair[_address]) revert INVA__InvalidValue(); isMaxWalletExcluded[_address] = _status; emit UpdateMaxWalletExclusionStatus(_address, _status); } /** * @notice sets the max transaction amount for INVA * @param _maxTx The new max transaction amount to set * @dev the max transaction amount cannot be less than 0.2% of the total supply */ function setMaxTx(uint _maxTx) external onlyOwner { if (_maxTx < _INIT_SUPPLY / 500) revert INVA__InvalidValue(); maxTx = _maxTx; emit UpdateMaxTx(_maxTx); } /** * @notice sets the max wallet amount for INVA * @param _maxWallet The new max wallet amount to set * @dev the max wallet amount cannot be less than 1% of the total supply */ function setMaxWallet(uint _maxWallet) external onlyOwner { if (_maxWallet < _INIT_SUPPLY / 100) revert INVA__InvalidValue(); maxWallet = _maxWallet; emit UpdateMaxWallet(_maxWallet); } /** * @notice Set a different wallet to receive the swapped out funds * @param _devWallet The new wallet to receive buy funds * @dev ONLY CURRENT BUY TAX WALLET AND OWNER CAN CHANGE THIS */ function updateDevWallet(address _devWallet) external { if (msg.sender != devWallet && msg.sender != owner()) revert INVA__OnlyDevWallet(); emit UpdateDevWallet(devWallet, _devWallet); devWallet = _devWallet; } /** * @notice Set a different wallet to receive the swapped out funds for marketing * @param _marketingwallet The new sell wallet to receive sell funds * @dev ONLY CURRENT MARKETING WALLET AND OWNER CAN CHANGE THIS */ function updateMarketingWallet(address _marketingwallet) external { if (msg.sender != marketingWallet && msg.sender != owner()) revert INVA__OnlyMktWallet(); emit UpdateMarketingWallet(marketingWallet, _marketingwallet); marketingWallet = _marketingwallet; } /** * @notice Set a different wallet to receive the swapped out funds for buyback * @param _buybackWallet The new sell wallet to receive sell funds * @dev ONLY CURRENT MARKETING WALLET AND OWNER CAN CHANGE THIS */ function updateBuybackWallet(address _buybackWallet) external { if (msg.sender != buybackWallet && msg.sender != owner()) revert INVA__OnlyBBWallet(); emit UpdateBuybackWallet(buybackWallet, _buybackWallet); buybackWallet = _buybackWallet; } /** * @notice The sell threshold is the amount of INVA that needs to be collected before a sell for Native happens * @param _sellThreshold The new sell threshold to set */ function updateSellThreshold(uint _sellThreshold) external onlyOwner { sellThreshold = _sellThreshold; emit UpdateThreshold(_sellThreshold); } /** * @notice regardless of the collected amount, the contract will swap, liquidate and transfer the funds to the respective wallets */ function manualSwap() external onlyOwner { if (swapping != 1) revert INVA__AlreadySwapping(); uint balance = balanceOf(address(this)); _swapAndTransfer(balance); } /** * @notice sets an address as a new pair to charge taxes on it * @param _pair The pair to add to the list of pairs to tax */ function addPair(address _pair) external onlyOwner { isPair[_pair] = true; isMaxWalletExcluded[_pair] = true; emit SetNewPair(_pair); } /** * @notice updates the shares for tax spread * @param _mktShare Amount to be shared to the marketing wallet * @param _devShare Amount to be shared to the dev wallet * @param _bbShare Amount to be shared to the buyback wallet * @param _liqShare Amount to be created as liquidity and sent to deadWallet */ function updateShares( uint8 _mktShare, uint8 _devShare, uint8 _bbShare, uint8 _liqShare ) external onlyOwner { totalShares = _mktShare + _devShare + _bbShare + _liqShare; // Total Shares cannot be zero if (totalShares == 0) revert INVA__InvalidValue(); mktShare = _mktShare; devShare = _devShare; bbShare = _bbShare; liqShare = _liqShare; emit UpdateShares(_mktShare, _devShare, _bbShare, _liqShare); } function updateUniswapRouter(address _router) external onlyOwner { if (router.WETH() != IUniswapRouter02(_router).WETH()) revert INVA__InvalidValue(); router = IUniswapRouter02(_router); emit UpdateUniswapRouter(_router); } function recoverNative(address _to, uint _amount) external onlyOwner { (bool success, ) = payable(_to).call{value: _amount}(""); if (!success) revert INVA_NativeTransferFailed(); } function recoverERC20(address _token, address _to) external onlyOwner { uint amount = ERC20(_token).balanceOf(address(this)); ERC20(_token).transfer(_to, amount); } //------------------------------------------------------------------------- // INTERNAL/PRIVATE FUNCTIONS //------------------------------------------------------------------------- /** * @notice This function overrides the ERC20 `_transfer` function to apply taxes and swap and transfer. * @param from Address that is sending tokens * @param to Address that is receiving tokens * @param amount Amount of tokens being transfered * @dev Although this is an override, it still uses the original `_transfer` function from the ERC20 contract to finalize the updatess * @dev On first adding liquidity, the contract will enable the high tax timer */ function _update(address from, address to, uint amount) internal override { bool isBuy = isPair[from]; bool isSell = isPair[to]; bool anyExcluded = isExcludedFromTax[from] || isExcludedFromTax[to]; // check max tx if sender or receiver are excluded or amount surpasses max tx revert if (!isMaxTxExcluded[from] && !isMaxTxExcluded[to] && amount > maxTx) revert INVA__MaxTxExceeded(); uint currentINVABalance = balanceOf(address(this)); if ( !isBuy && currentINVABalance > sellThreshold && !anyExcluded && swapping == 1 ) { _swapAndTransfer(currentINVABalance); } uint fee = 0; if (!anyExcluded) { uint8 tax = _getTimedTax(isBuy, isSell); fee = (amount * tax) / PERCENTILE; if (fee > 0) { amount -= fee; super._update(from, address(this), fee); } } if (isSell && startTaxTime == 0) { startTaxTime = block.timestamp; } // check max wallet if (!isMaxWalletExcluded[to] && balanceOf(to) + amount > maxWallet) revert INVA__MaxWalletExceeded(); // Transfer rest super._update(from, to, amount); } function _swapAndTransfer(uint balance) private { swapping <<= 1; if (balance == 0) revert INVA__NoBalance(); uint liqAmount = (balance * liqShare) / totalShares; balance = balance - liqAmount; // Sell half of liqAmount to ETH address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _swapAndAddLiquidity(liqAmount); // Sell rest router.swapExactTokensForETHSupportingFeeOnTransferTokens( balance, 0, path, address(this), block.timestamp ); // Distribute to rest uint nativeBalance = address(this).balance; uint baseAmount = totalShares - liqShare; if (baseAmount == 0) return; uint mktAmount = (nativeBalance * mktShare) / baseAmount; uint devAmount = (nativeBalance * devShare) / baseAmount; uint bbAmount = nativeBalance - mktAmount - devAmount; // Transfer to wallets if (mktAmount > 0) { (bool success, ) = payable(marketingWallet).call{value: mktAmount}( "" ); if (!success) revert INVA_NativeTransferFailed(); } if (devAmount > 0) { (bool success, ) = payable(devWallet).call{value: devAmount}(""); if (!success) revert INVA_NativeTransferFailed(); } if (bbAmount > 0) { (bool success, ) = payable(buybackWallet).call{value: bbAmount}(""); if (!success) revert INVA_NativeTransferFailed(); } swapping >>= 1; } function _swapAndAddLiquidity(uint liqAmount) private { if (liqAmount == 0) return; address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); uint half = liqAmount / 2; router.swapExactTokensForETHSupportingFeeOnTransferTokens( half, 0, path, address(this), block.timestamp ); uint nativeBalance = address(this).balance; // Add liquidity router.addLiquidityETH{value: nativeBalance}( address(this), liqAmount - half, 0, 0, deadWallet, block.timestamp ); } /** * * @param isBuy dictates if the tax is for a buy * @param isSell dictates if the tax is for a sell * @return the tax to be applied % */ function _getTimedTax( bool isBuy, bool isSell ) private view returns (uint8) { // if startTaxTime is not set or both isBuy and isSell are false, return 0 if ((!isBuy && !isSell) || startTaxTime == 0) return 0; uint timePassed = block.timestamp - startTaxTime; // If above max tax time, return the minimum tax if (timePassed >= MAX_TAX_TIME) { if (isBuy) return buyTax; if (isSell) return sellTax; return 0; } // it'll decrease by 5% every 5 minutes return uint8(35 - (5 * (timePassed / _TAX_INTERVAL))); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "./IERC20.sol"; import {IERC20Metadata} from "./extensions/IERC20Metadata.sol"; import {Context} from "../../utils/Context.sol"; import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 default value returned by this function, unless * it's 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() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual 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 `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` 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 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); 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 `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniswapRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) external pure returns (uint amountOut); function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) external pure returns (uint amountIn); function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] calldata path ) external view returns (uint[] memory amounts); } interface IUniswapRouter02 is IUniswapRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit( address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn( address indexed sender, uint amount0, uint amount1, address indexed to ); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ 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 v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) pragma solidity ^0.8.20; /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); }
{ "remappings": [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_buybackWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"INVA_NativeTransferFailed","type":"error"},{"inputs":[],"name":"INVA__AlreadySwapping","type":"error"},{"inputs":[],"name":"INVA__InvalidListLength","type":"error"},{"inputs":[],"name":"INVA__InvalidNewTax","type":"error"},{"inputs":[],"name":"INVA__InvalidValue","type":"error"},{"inputs":[],"name":"INVA__MaxTxExceeded","type":"error"},{"inputs":[],"name":"INVA__MaxWalletExceeded","type":"error"},{"inputs":[],"name":"INVA__NoBalance","type":"error"},{"inputs":[],"name":"INVA__OnlyBBWallet","type":"error"},{"inputs":[],"name":"INVA__OnlyDevWallet","type":"error"},{"inputs":[],"name":"INVA__OnlyMktWallet","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"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":"pair","type":"address"}],"name":"SetNewPair","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"UpdateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateBuybackWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"UpdateMaxTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateMaxTxExclusionStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"UpdateMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateMaxWalletExclusionStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"UpdateSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"mktShare","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"devShare","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"bbShare","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"liqShare","type":"uint8"}],"name":"UpdateShares","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateTaxExclusionStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"UpdateThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"router","type":"address"}],"name":"UpdateUniswapRouter","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","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":"value","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":"bbShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxTxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxWalletExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mktShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IUniswapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_buyTax","type":"uint8"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMaxTxExclusionStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMaxWalletExclusionStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setMultipleTaxExclusionStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_sellTax","type":"uint8"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTaxExclusionStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTaxTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","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":"_buybackWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingwallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellThreshold","type":"uint256"}],"name":"updateSellThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mktShare","type":"uint8"},{"internalType":"uint8","name":"_devShare","type":"uint8"},{"internalType":"uint8","name":"_bbShare","type":"uint8"},{"internalType":"uint8","name":"_liqShare","type":"uint8"}],"name":"updateShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600d80546001600160a01b03191661dead1790556014805467010505500a0f0a0f6001600160401b03199091161790553480156200004157600080fd5b5060405162003e0538038062003e05833981016040819052620000649162001439565b826040518060400160405280600d81526020016c24b73737bb34b0902a37b5b2b760991b81525060405180604001604052806004815260200163494e564160e01b8152508160039081620000b9919062001529565b506004620000c8828262001529565b5050506001600160a01b038116620000fb57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620001068162000801565b5062000115606460056200160b565b6200012c906a52b7d2dcc80cd2e400000062001625565b601055600e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801562000197573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bd919062001648565b9050806001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000223573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000249919062001648565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000297573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bd919062001648565b600f80546001600160a01b0319166001600160a01b039283169081179091556000908152600960205260409020805460ff19166001179055600e54620003099130911660001962000853565b3060009081526006602081905260408220805460ff19166001908117909155916200033c6005546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190600790620003806005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526007909352818320805485166001908117909155600e54821684528284208054861682179055600d54821684528284208054861682179055600f54909116835290822080549093168117909255600890620004146005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526008909352818320805485166001908117909155600e548216845291832080548516831790559180527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c7805490931617909155600a80548683166001600160a01b031991821617909155600b8054868416908316179055600c805492851692909116919091179055620004e66101f46a52b7d2dcc80cd2e400000062001625565b6012556200050160646a52b7d2dcc80cd2e400000062001625565b601355737be9f4ee036828d1e9f13b86e53dc47d329f43a460008181527f0f1f9ec7e9ab22adc4102c4f12cba7f5a04a321de7f40a45b0a7dc85fb105e1c8054600160ff19918216811790925560076020527f8483be19bece8d66fc41af79f3f35b22673e2d2a35e3d499df8e796fbb5f6272805490911690911790556a52b7d2dcc80cd2e400000091906200059960148462001625565b9050620005a7828262000867565b620005b381846200166d565b7356d8d700c7204ec2d13b3e3d2d58186ed9c724c5600081905260086020527fcc9e253b93ac09af07b443156eb9624833cd9474a6cefc112c20b3b860e050c7805460ff191660011790559093506200061960646a52b7d2dcc80cd2e400000062001625565b915062000627818362000867565b6200063382856200166d565b733a20b506aef06ff6b90d868c3f3918cf931a90cd600081905260086020527f43254938981034da90d0d2a0ac364e6a4e9c1cd21408b2e7919e0ba333221023805460ff1916600117905590945090506200068f818362000867565b6200069b82856200166d565b733e81a2f0bda2af90162807242514ad89f0d7610d600081905260086020527f32ab33780fbde362ffbc1116ae1a74165eadaa88b65ebb4031753b6ed9eb1488805460ff191660011790559094509050620006f7818362000867565b6200070382856200166d565b73f73f994346761d11693df6af71fb607c05f7d2a6600081905260086020527f60ba76554cc664c908456fed6390777a22dd1c0aff466a752d9c8cc4558d079b805460ff1916600117905590945090506200075f818362000867565b6200076b82856200166d565b736e509f9e44fa5f0cf3122c57bcf60c565482bf4e600081905260086020527fdef741d75816be5f7769cc396d16300cec6f452755e314a7027ae36577532478805460ff191660011790559094509050620007c7818362000867565b620007d382856200166d565b9350620007f3620007ec6005546001600160a01b031690565b8562000867565b50505050505050506200176f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620008628383836001620008a5565b505050565b6001600160a01b038216620008935760405163ec442f0560e01b815260006004820152602401620000f2565b620008a16000838362000981565b5050565b6001600160a01b038416620008d15760405163e602df0560e01b815260006004820152602401620000f2565b6001600160a01b038316620008fd57604051634a1406b160e11b815260006004820152602401620000f2565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156200097b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516200097291815260200190565b60405180910390a35b50505050565b6001600160a01b03808416600081815260096020908152604080832054948716835280832054938352600690915281205460ff93841693928316921680620009e157506001600160a01b03851660009081526006602052604090205460ff165b6001600160a01b03871660009081526008602052604090205490915060ff1615801562000a2757506001600160a01b03851660009081526008602052604090205460ff16155b801562000a35575060125484115b1562000a54576040516305266df960e51b815260040160405180910390fd5b306000908152602081905260409020548315801562000a74575060105481115b801562000a7f575081155b801562000a9c5750601454670100000000000000900460ff166001145b1562000aad5762000aad8162000bae565b60008262000b0857600062000ac3868662000ff6565b9050606462000ad660ff8316896200160b565b62000ae2919062001625565b9150811562000b065762000af782886200166d565b965062000b06893084620010b8565b505b83801562000b165750601154155b1562000b2157426011555b6001600160a01b03871660009081526007602052604090205460ff1615801562000b7857506013548662000b6a896001600160a01b031660009081526020819052604090205490565b62000b76919062001683565b115b1562000b97576040516322113a3360e01b815260040160405180910390fd5b62000ba4888888620010b8565b5050505050505050565b6014805460ff60381b1981166701000000000000009182900460011b60fe16909102179055600081900362000bf6576040516301188bbf60e71b815260040160405180910390fd5b60145460009060ff640100000000820481169162000c1e91630100000090910416846200160b565b62000c2a919062001625565b905062000c3881836200166d565b6040805160028082526060820183529294506000929091602083019080368337019050509050308160008151811062000c755762000c7562001699565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801562000ccf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cf5919062001648565b8160018151811062000d0b5762000d0b62001699565b6001600160a01b039092166020928302919091019091015262000d2e82620011eb565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac9479062000d69908690600090869030904290600401620016af565b600060405180830381600087803b15801562000d8457600080fd5b505af115801562000d99573d6000803e3d6000fd5b50506014544792506000915062000dc59060ff6301000000820481169164010000000090041662001724565b60ff1690508060000362000dda575050505050565b601454600090829062000df19060ff16856200160b565b62000dfd919062001625565b601454909150600090839062000e1c90610100900460ff16866200160b565b62000e28919062001625565b905060008162000e3984876200166d565b62000e4591906200166d565b9050821562000ec757600b546040516000916001600160a01b03169085908381818185875af1925050503d806000811462000e9d576040519150601f19603f3d011682016040523d82523d6000602084013e62000ea2565b606091505b505090508062000ec55760405163863bf32b60e01b815260040160405180910390fd5b505b811562000f4757600a546040516000916001600160a01b03169084908381818185875af1925050503d806000811462000f1d576040519150601f19603f3d011682016040523d82523d6000602084013e62000f22565b606091505b505090508062000f455760405163863bf32b60e01b815260040160405180910390fd5b505b801562000fc757600c546040516000916001600160a01b03169083908381818185875af1925050503d806000811462000f9d576040519150601f19603f3d011682016040523d82523d6000602084013e62000fa2565b606091505b505090508062000fc55760405163863bf32b60e01b815260040160405180910390fd5b505b50506014805460ff60381b1981166701000000000000009182900460011c607f16909102179055505050505050565b60008215801562001005575081155b80620010115750601154155b156200102057506000620010b2565b6000601154426200103291906200166d565b90506108348110620010865783156200105c57505060145465010000000000900460ff16620010b2565b82156200107b5750506014546601000000000000900460ff16620010b2565b6000915050620010b2565b6200109461012c8262001625565b620010a19060056200160b565b620010ae9060236200166d565b9150505b92915050565b6001600160a01b038316620010e7578060026000828254620010db919062001683565b909155506200115b9050565b6001600160a01b038316600090815260208190526040902054818110156200113c5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000f2565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620011795760028054829003905562001198565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620011de91815260200190565b60405180910390a3505050565b80600003620011f75750565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106200122f576200122f62001699565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801562001289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012af919062001648565b81600181518110620012c557620012c562001699565b6001600160a01b03909216602092830291909101909101526000620012ec60028462001625565b600e5460405163791ac94760e01b81529192506001600160a01b03169063791ac9479062001328908490600090879030904290600401620016af565b600060405180830381600087803b1580156200134357600080fd5b505af115801562001358573d6000803e3d6000fd5b5050600e544792506001600160a01b0316905063f305d71982306200137e86896200166d565b600d5460405160e086901b6001600160e01b03191681526001600160a01b039384166004820152602481019290925260006044830181905260648301529190911660848201524260a482015260c40160606040518083038185885af1158015620013ec573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062001413919062001740565b50505050505050565b80516001600160a01b03811681146200143457600080fd5b919050565b6000806000606084860312156200144f57600080fd5b6200145a846200141c565b92506200146a602085016200141c565b91506200147a604085016200141c565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620014ae57607f821691505b602082108103620014cf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000862576000816000526020600020601f850160051c81016020861015620015005750805b601f850160051c820191505b8181101562001521578281556001016200150c565b505050505050565b81516001600160401b0381111562001545576200154562001483565b6200155d8162001556845462001499565b84620014d5565b602080601f8311600181146200159557600084156200157c5750858301515b600019600386901b1c1916600185901b17855562001521565b600085815260208120601f198616915b82811015620015c657888601518255948401946001909101908401620015a5565b5085821015620015e55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620010b257620010b2620015f5565b6000826200164357634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200165b57600080fd5b62001666826200141c565b9392505050565b81810381811115620010b257620010b2620015f5565b80820180821115620010b257620010b2620015f5565b634e487b7160e01b600052603260045260246000fd5b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015620017035784516001600160a01b031683529383019391830191600101620016dc565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff8281168282160390811115620010b257620010b2620015f5565b6000806000606084860312156200175657600080fd5b8351925060208401519150604084015190509250925092565b612686806200177f6000396000f3fe6080604052600436106102af5760003560e01c8063886f039a11610166578063c2b7bbb6116100d3578063e3c5a2911161008f578063f2fde38b1161006c578063f2fde38b146108e5578063f887ea4014610905578063f8b45b0514610925578063ff796a871461093b57005b8063e3c5a2911461087f578063e5e31b1314610895578063f2cda82e146108c557005b8063c2b7bbb614610788578063c70a1fcb146107a8578063cb4ca631146107c8578063cc1776d3146107f8578063dd62ed3e14610819578063deab8aea1461085f57005b80639869617d116101225780639869617d146106c9578063a8aa1b31146106e9578063a9059cbb14610709578063aacebbe314610729578063aed04fae14610749578063bc3371821461076857005b8063886f039a146106155780638da5cb5b146106355780638ea5220f14610653578063908bb2ae1461067357806391d7411e1461069357806395d89b41146106b457005b80634f7041a51161021c57806370a08231116101d85780637437681e116101b55780637437681e1461058757806375f0a8741461059d5780637f4fd579146105d557806385141a77146105f557005b806370a082311461050c578063715018a61461054257806371dd74971461055757005b80634f7041a51461045a57806351bc3c851461047d5780635bf99a38146104925780635d0044ca146104b25780636081752b146104d25780636efc30a9146104f257005b8063203a421f1161026b578063203a421f1461039257806323b872dd146103c25780632d4310c0146103e25780632daa3871146103f8578063313ce5671461041857806349abdc141461043a57005b806304dacd50146102b857806306fdde03146102d8578063095ea7b31461030357806318160ddd146103335780631816467f146103525780631a1d3a2d1461037257005b366102b657005b005b3480156102c457600080fd5b506102b66102d33660046121ec565b61095b565b3480156102e457600080fd5b506102ed6109fb565b6040516102fa9190612210565b60405180910390f35b34801561030f57600080fd5b5061032361031e36600461225f565b610a8d565b60405190151581526020016102fa565b34801561033f57600080fd5b506002545b6040519081526020016102fa565b34801561035e57600080fd5b506102b661036d3660046121ec565b610aa7565b34801561037e57600080fd5b506102b661038d366004612299565b610b47565b34801561039e57600080fd5b506103236103ad3660046121ec565b60076020526000908152604090205460ff1681565b3480156103ce57600080fd5b506103236103dd3660046122d2565b610be9565b3480156103ee57600080fd5b5061034460105481565b34801561040457600080fd5b506102b6610413366004612313565b610c0d565b34801561042457600080fd5b5060125b60405160ff90911681526020016102fa565b34801561044657600080fd5b506102b66104553660046123af565b610d0f565b34801561046657600080fd5b506014546104289065010000000000900460ff1681565b34801561048957600080fd5b506102b6610d94565b34801561049e57600080fd5b506102b66104ad3660046123ca565b610de5565b3480156104be57600080fd5b506102b66104cd3660046123ca565b610e22565b3480156104de57600080fd5b506102b66104ed3660046123af565b610e95565b3480156104fe57600080fd5b506014546104289060ff1681565b34801561051857600080fd5b506103446105273660046121ec565b6001600160a01b031660009081526020819052604090205490565b34801561054e57600080fd5b506102b6610f14565b34801561056357600080fd5b506103236105723660046121ec565b60086020526000908152604090205460ff1681565b34801561059357600080fd5b5061034460125481565b3480156105a957600080fd5b50600b546105bd906001600160a01b031681565b6040516001600160a01b0390911681526020016102fa565b3480156105e157600080fd5b506102b66105f0366004612299565b610f28565b34801561060157600080fd5b50600d546105bd906001600160a01b031681565b34801561062157600080fd5b506102b66106303660046123e3565b610f88565b34801561064157600080fd5b506005546001600160a01b03166105bd565b34801561065f57600080fd5b50600a546105bd906001600160a01b031681565b34801561067f57600080fd5b506102b661068e3660046121ec565b611072565b34801561069f57600080fd5b50601454610428906301000000900460ff1681565b3480156106c057600080fd5b506102ed6111cd565b3480156106d557600080fd5b506102b66106e4366004612411565b6111dc565b3480156106f557600080fd5b50600f546105bd906001600160a01b031681565b34801561071557600080fd5b5061032361072436600461225f565b6112df565b34801561073557600080fd5b506102b66107443660046121ec565b6112ed565b34801561075557600080fd5b5060145461042890610100900460ff1681565b34801561077457600080fd5b506102b66107833660046123ca565b61138d565b34801561079457600080fd5b506102b66107a33660046121ec565b611401565b3480156107b457600080fd5b506014546104289062010000900460ff1681565b3480156107d457600080fd5b506103236107e33660046121ec565b60066020526000908152604090205460ff1681565b34801561080457600080fd5b5060145461042890600160301b900460ff1681565b34801561082557600080fd5b506103446108343660046123e3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561086b57600080fd5b50600c546105bd906001600160a01b031681565b34801561088b57600080fd5b5061034460115481565b3480156108a157600080fd5b506103236108b03660046121ec565b60096020526000908152604090205460ff1681565b3480156108d157600080fd5b506102b66108e036600461225f565b61146c565b3480156108f157600080fd5b506102b66109003660046121ec565b6114ed565b34801561091157600080fd5b50600e546105bd906001600160a01b031681565b34801561093157600080fd5b5061034460135481565b34801561094757600080fd5b506102b6610956366004612299565b61152d565b600c546001600160a01b0316331480159061098157506005546001600160a01b03163314155b1561099f57604051630abd208360e21b815260040160405180910390fd5b600c546040516001600160a01b038084169216907f11ef31775640906cd48f5ad1c2c79269a9f4f4b49df05c59d175d50b53c2daa590600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610a0a90612465565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3690612465565b8015610a835780601f10610a5857610100808354040283529160200191610a83565b820191906000526020600020905b815481529060010190602001808311610a6657829003601f168201915b5050505050905090565b600033610a9b81858561158d565b60019150505b92915050565b600a546001600160a01b03163314801590610acd57506005546001600160a01b03163314155b15610aeb5760405163a086920760e01b815260040160405180910390fd5b600a546040516001600160a01b038084169216907f923334f00a08147112838c5c41f68a92979493ae7af34177449883db5743427790600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b4f61159a565b6001600160a01b03821660009081526009602052604090205460ff1615610b8957604051630560778360e51b815260040160405180910390fd5b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527f4a187de95f18bd0a9a020730b1d5a6fa3f909ec312c9c5d46f1e6b7db5dd52b891015b60405180910390a25050565b600033610bf78582856115c7565b610c0285858561163f565b506001949350505050565b610c1561159a565b6000829003610c375760405163b03330d960e01b815260040160405180910390fd5b60005b82811015610d09578160066000868685818110610c5957610c5961249f565b9050602002016020810190610c6e91906121ec565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110610ca857610ca861249f565b9050602002016020810190610cbd91906121ec565b6001600160a01b03167fee385e3edbe20b5bd36c0060389cdf1acf975758fa596713d6a4252751ab427583604051610cf9911515815260200190565b60405180910390a2600101610c3a565b50505050565b610d1761159a565b600a8160ff161115610d3c576040516306a8fe3960e01b815260040160405180910390fd5b6014805466ff0000000000001916600160301b60ff8416908102919091179091556040519081527f2d16b529cd6f4d8d1af62fe74e0801442778f50967ec8b5994f628052c59c73a906020015b60405180910390a150565b610d9c61159a565b601454600160381b900460ff16600114610dc957604051631c53d50b60e21b815260040160405180910390fd5b30600090815260208190526040902054610de28161169e565b50565b610ded61159a565b60108190556040518181527fcfbc3e24bcdbf875f7af2b101605919fdbd3cb0b217ae54c372ae49417c58d0190602001610d89565b610e2a61159a565b610e4060646a52b7d2dcc80cd2e40000006124cb565b811015610e6057604051630560778360e51b815260040160405180910390fd5b60138190556040518181527fdd4ef051c4c49233ec73abfc2ee1514725d2a818fbcde46ee5d34a49034922f990602001610d89565b610e9d61159a565b600a8160ff161115610ec2576040516306a8fe3960e01b815260040160405180910390fd5b6014805465ff000000000019166501000000000060ff8416908102919091179091556040519081527f2d16b529cd6f4d8d1af62fe74e0801442778f50967ec8b5994f628052c59c73a90602001610d89565b610f1c61159a565b610f266000611ab5565b565b610f3061159a565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527fee385e3edbe20b5bd36c0060389cdf1acf975758fa596713d6a4252751ab42759101610bdd565b610f9061159a565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb91906124ed565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af115801561104e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d099190612506565b61107a61159a565b806001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc9190612523565b6001600160a01b0316600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612523565b6001600160a01b03161461118357604051630560778360e51b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b0383169081179091556040517fbdfcd0f1d13d7b7322d52a6a9a6a758ba8f47be4985ff2ff6fcf5c217c3e06fb90600090a250565b606060048054610a0a90612465565b6111e461159a565b80826111f08587612540565b6111fa9190612540565b6112049190612540565b6014805464ff00000000191664010000000060ff9384168102919091179182905590041660000361124857604051630560778360e51b815260040160405180910390fd5b6014805460ff86811661ffff1990921682176101008783169081029190911763ffff000019166201000087841690810263ff00000019169190911763010000009387169384021790945560408051938452602084019190915282810193909352606082015290517f69657a49f1fb7e09821eaedf52135ee7f1b53484fc142073272b35c6e69b0b679181900360800190a150505050565b600033610a9b81858561163f565b600b546001600160a01b0316331480159061131357506005546001600160a01b03163314155b156113315760405163581129a760e11b815260040160405180910390fd5b600b546040516001600160a01b038084169216907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae790600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b61139561159a565b6113ac6101f46a52b7d2dcc80cd2e40000006124cb565b8110156113cc57604051630560778360e51b815260040160405180910390fd5b60128190556040518181527fcedd579bb16a110f8fc769828da3ec64f5b19963e8f71d7fb5214d37fdce2c4290602001610d89565b61140961159a565b6001600160a01b03811660008181526009602090815260408083208054600160ff1991821681179092556007909352818420805490931617909155517f43a9fee15527bb6ef23fe553fb1e6c1ea946a49cbeec8f294cb4a40eba739b819190a250565b61147461159a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146114c1576040519150601f19603f3d011682016040523d82523d6000602084013e6114c6565b606091505b50509050806114e85760405163863bf32b60e01b815260040160405180910390fd5b505050565b6114f561159a565b6001600160a01b03811661152457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610de281611ab5565b61153561159a565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527fa42bbec6725edfd96851ed0b8cad40906864445d5b16b570ef3abc6c148b00bb9101610bdd565b6114e88383836001611b07565b6005546001600160a01b03163314610f265760405163118cdaa760e01b815233600482015260240161151b565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610d09578181101561163057604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161151b565b610d0984848484036000611b07565b6001600160a01b03831661166957604051634b637e8f60e11b81526000600482015260240161151b565b6001600160a01b0382166116935760405163ec442f0560e01b81526000600482015260240161151b565b6114e8838383611bdc565b6014805460ff60381b198116600160381b9182900460011b60fe1690910217905560008190036116e1576040516301188bbf60e71b815260040160405180910390fd5b60145460009060ff64010000000082048116916117079163010000009091041684612559565b61171191906124cb565b905061171d8183612570565b604080516002808252606082018352929450600092909160208301908036833701905050905030816000815181106117575761175761249f565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190612523565b816001815181106117e7576117e761249f565b60200260200101906001600160a01b031690816001600160a01b03168152505061181082611de6565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611849908690600090869030904290600401612583565b600060405180830381600087803b15801561186357600080fd5b505af1158015611877573d6000803e3d6000fd5b5050601454479250600091506118a19060ff630100000082048116916401000000009004166125f6565b60ff169050806000036118b5575050505050565b60145460009082906118ca9060ff1685612559565b6118d491906124cb565b60145490915060009083906118f190610100900460ff1686612559565b6118fb91906124cb565b905060008161190a8487612570565b6119149190612570565b9050821561199257600b546040516000916001600160a01b03169085908381818185875af1925050503d8060008114611969576040519150601f19603f3d011682016040523d82523d6000602084013e61196e565b606091505b50509050806119905760405163863bf32b60e01b815260040160405180910390fd5b505b8115611a0e57600a546040516000916001600160a01b03169084908381818185875af1925050503d80600081146119e5576040519150601f19603f3d011682016040523d82523d6000602084013e6119ea565b606091505b5050905080611a0c5760405163863bf32b60e01b815260040160405180910390fd5b505b8015611a8a57600c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611a61576040519150601f19603f3d011682016040523d82523d6000602084013e611a66565b606091505b5050905080611a885760405163863bf32b60e01b815260040160405180910390fd5b505b50506014805460ff60381b198116600160381b9182900460011c607f16909102179055505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416611b315760405163e602df0560e01b81526000600482015260240161151b565b6001600160a01b038316611b5b57604051634a1406b160e11b81526000600482015260240161151b565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610d0957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bce91815260200190565b60405180910390a350505050565b6001600160a01b03808416600081815260096020908152604080832054948716835280832054938352600690915281205460ff93841693928316921680611c3b57506001600160a01b03851660009081526006602052604090205460ff165b6001600160a01b03871660009081526008602052604090205490915060ff16158015611c8057506001600160a01b03851660009081526008602052604090205460ff16155b8015611c8d575060125484115b15611cab576040516305266df960e51b815260040160405180910390fd5b3060009081526020819052604090205483158015611cca575060105481115b8015611cd4575081155b8015611cec5750601454600160381b900460ff166001145b15611cfa57611cfa8161169e565b600082611d49576000611d0d8686612002565b90506064611d1e60ff831689612559565b611d2891906124cb565b91508115611d4757611d3a8288612570565b9650611d478930846120ad565b505b838015611d565750601154155b15611d6057426011555b6001600160a01b03871660009081526007602052604090205460ff16158015611db3575060135486611da7896001600160a01b031660009081526020819052604090205490565b611db1919061260f565b115b15611dd1576040516322113a3360e01b815260040160405180910390fd5b611ddc8888886120ad565b5050505050505050565b80600003611df15750565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e2657611e2661249f565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea39190612523565b81600181518110611eb657611eb661249f565b6001600160a01b03909216602092830291909101909101526000611edb6002846124cb565b600e5460405163791ac94760e01b81529192506001600160a01b03169063791ac94790611f15908490600090879030904290600401612583565b600060405180830381600087803b158015611f2f57600080fd5b505af1158015611f43573d6000803e3d6000fd5b5050600e544792506001600160a01b0316905063f305d7198230611f678689612570565b600d5460405160e086901b6001600160e01b03191681526001600160a01b039384166004820152602481019290925260006044830181905260648301529190911660848201524260a482015260c40160606040518083038185885af1158015611fd4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ff99190612622565b50505050505050565b600082158015612010575081155b8061201b5750601154155b1561202857506000610aa1565b6000601154426120389190612570565b9050610834811061208357831561205f57505060145465010000000000900460ff16610aa1565b8215612079575050601454600160301b900460ff16610aa1565b6000915050610aa1565b61208f61012c826124cb565b61209a906005612559565b6120a5906023612570565b949350505050565b6001600160a01b0383166120d85780600260008282546120cd919061260f565b9091555061214a9050565b6001600160a01b0383166000908152602081905260409020548181101561212b5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161151b565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661216657600280548290039055612185565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ca91815260200190565b60405180910390a3505050565b6001600160a01b0381168114610de257600080fd5b6000602082840312156121fe57600080fd5b8135612209816121d7565b9392505050565b60006020808352835180602085015260005b8181101561223e57858101830151858201604001528201612222565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561227257600080fd5b823561227d816121d7565b946020939093013593505050565b8015158114610de257600080fd5b600080604083850312156122ac57600080fd5b82356122b7816121d7565b915060208301356122c78161228b565b809150509250929050565b6000806000606084860312156122e757600080fd5b83356122f2816121d7565b92506020840135612302816121d7565b929592945050506040919091013590565b60008060006040848603121561232857600080fd5b833567ffffffffffffffff8082111561234057600080fd5b818601915086601f83011261235457600080fd5b81358181111561236357600080fd5b8760208260051b850101111561237857600080fd5b6020928301955093505084013561238e8161228b565b809150509250925092565b803560ff811681146123aa57600080fd5b919050565b6000602082840312156123c157600080fd5b61220982612399565b6000602082840312156123dc57600080fd5b5035919050565b600080604083850312156123f657600080fd5b8235612401816121d7565b915060208301356122c7816121d7565b6000806000806080858703121561242757600080fd5b61243085612399565b935061243e60208601612399565b925061244c60408601612399565b915061245a60608601612399565b905092959194509250565b600181811c9082168061247957607f821691505b60208210810361249957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826124e857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156124ff57600080fd5b5051919050565b60006020828403121561251857600080fd5b81516122098161228b565b60006020828403121561253557600080fd5b8151612209816121d7565b60ff8181168382160190811115610aa157610aa16124b5565b8082028115828204841417610aa157610aa16124b5565b81810381811115610aa157610aa16124b5565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b818110156125d55784516001600160a01b0316835293830193918301916001016125b0565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff8281168282160390811115610aa157610aa16124b5565b80820180821115610aa157610aa16124b5565b60008060006060848603121561263757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204a24c7e86815153f8a8b70810cfef069ce12df1c9c55f385c7b7ba1a83459f8464736f6c6343000818003300000000000000000000000045b77df62f0331bdb7c68b19ff9723b2290c882400000000000000000000000045b77df62f0331bdb7c68b19ff9723b2290c8824000000000000000000000000ec4e4a4346ead8ca6f63ffb2f25ca77aac2af331
Deployed Bytecode
0x6080604052600436106102af5760003560e01c8063886f039a11610166578063c2b7bbb6116100d3578063e3c5a2911161008f578063f2fde38b1161006c578063f2fde38b146108e5578063f887ea4014610905578063f8b45b0514610925578063ff796a871461093b57005b8063e3c5a2911461087f578063e5e31b1314610895578063f2cda82e146108c557005b8063c2b7bbb614610788578063c70a1fcb146107a8578063cb4ca631146107c8578063cc1776d3146107f8578063dd62ed3e14610819578063deab8aea1461085f57005b80639869617d116101225780639869617d146106c9578063a8aa1b31146106e9578063a9059cbb14610709578063aacebbe314610729578063aed04fae14610749578063bc3371821461076857005b8063886f039a146106155780638da5cb5b146106355780638ea5220f14610653578063908bb2ae1461067357806391d7411e1461069357806395d89b41146106b457005b80634f7041a51161021c57806370a08231116101d85780637437681e116101b55780637437681e1461058757806375f0a8741461059d5780637f4fd579146105d557806385141a77146105f557005b806370a082311461050c578063715018a61461054257806371dd74971461055757005b80634f7041a51461045a57806351bc3c851461047d5780635bf99a38146104925780635d0044ca146104b25780636081752b146104d25780636efc30a9146104f257005b8063203a421f1161026b578063203a421f1461039257806323b872dd146103c25780632d4310c0146103e25780632daa3871146103f8578063313ce5671461041857806349abdc141461043a57005b806304dacd50146102b857806306fdde03146102d8578063095ea7b31461030357806318160ddd146103335780631816467f146103525780631a1d3a2d1461037257005b366102b657005b005b3480156102c457600080fd5b506102b66102d33660046121ec565b61095b565b3480156102e457600080fd5b506102ed6109fb565b6040516102fa9190612210565b60405180910390f35b34801561030f57600080fd5b5061032361031e36600461225f565b610a8d565b60405190151581526020016102fa565b34801561033f57600080fd5b506002545b6040519081526020016102fa565b34801561035e57600080fd5b506102b661036d3660046121ec565b610aa7565b34801561037e57600080fd5b506102b661038d366004612299565b610b47565b34801561039e57600080fd5b506103236103ad3660046121ec565b60076020526000908152604090205460ff1681565b3480156103ce57600080fd5b506103236103dd3660046122d2565b610be9565b3480156103ee57600080fd5b5061034460105481565b34801561040457600080fd5b506102b6610413366004612313565b610c0d565b34801561042457600080fd5b5060125b60405160ff90911681526020016102fa565b34801561044657600080fd5b506102b66104553660046123af565b610d0f565b34801561046657600080fd5b506014546104289065010000000000900460ff1681565b34801561048957600080fd5b506102b6610d94565b34801561049e57600080fd5b506102b66104ad3660046123ca565b610de5565b3480156104be57600080fd5b506102b66104cd3660046123ca565b610e22565b3480156104de57600080fd5b506102b66104ed3660046123af565b610e95565b3480156104fe57600080fd5b506014546104289060ff1681565b34801561051857600080fd5b506103446105273660046121ec565b6001600160a01b031660009081526020819052604090205490565b34801561054e57600080fd5b506102b6610f14565b34801561056357600080fd5b506103236105723660046121ec565b60086020526000908152604090205460ff1681565b34801561059357600080fd5b5061034460125481565b3480156105a957600080fd5b50600b546105bd906001600160a01b031681565b6040516001600160a01b0390911681526020016102fa565b3480156105e157600080fd5b506102b66105f0366004612299565b610f28565b34801561060157600080fd5b50600d546105bd906001600160a01b031681565b34801561062157600080fd5b506102b66106303660046123e3565b610f88565b34801561064157600080fd5b506005546001600160a01b03166105bd565b34801561065f57600080fd5b50600a546105bd906001600160a01b031681565b34801561067f57600080fd5b506102b661068e3660046121ec565b611072565b34801561069f57600080fd5b50601454610428906301000000900460ff1681565b3480156106c057600080fd5b506102ed6111cd565b3480156106d557600080fd5b506102b66106e4366004612411565b6111dc565b3480156106f557600080fd5b50600f546105bd906001600160a01b031681565b34801561071557600080fd5b5061032361072436600461225f565b6112df565b34801561073557600080fd5b506102b66107443660046121ec565b6112ed565b34801561075557600080fd5b5060145461042890610100900460ff1681565b34801561077457600080fd5b506102b66107833660046123ca565b61138d565b34801561079457600080fd5b506102b66107a33660046121ec565b611401565b3480156107b457600080fd5b506014546104289062010000900460ff1681565b3480156107d457600080fd5b506103236107e33660046121ec565b60066020526000908152604090205460ff1681565b34801561080457600080fd5b5060145461042890600160301b900460ff1681565b34801561082557600080fd5b506103446108343660046123e3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561086b57600080fd5b50600c546105bd906001600160a01b031681565b34801561088b57600080fd5b5061034460115481565b3480156108a157600080fd5b506103236108b03660046121ec565b60096020526000908152604090205460ff1681565b3480156108d157600080fd5b506102b66108e036600461225f565b61146c565b3480156108f157600080fd5b506102b66109003660046121ec565b6114ed565b34801561091157600080fd5b50600e546105bd906001600160a01b031681565b34801561093157600080fd5b5061034460135481565b34801561094757600080fd5b506102b6610956366004612299565b61152d565b600c546001600160a01b0316331480159061098157506005546001600160a01b03163314155b1561099f57604051630abd208360e21b815260040160405180910390fd5b600c546040516001600160a01b038084169216907f11ef31775640906cd48f5ad1c2c79269a9f4f4b49df05c59d175d50b53c2daa590600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b606060038054610a0a90612465565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3690612465565b8015610a835780601f10610a5857610100808354040283529160200191610a83565b820191906000526020600020905b815481529060010190602001808311610a6657829003601f168201915b5050505050905090565b600033610a9b81858561158d565b60019150505b92915050565b600a546001600160a01b03163314801590610acd57506005546001600160a01b03163314155b15610aeb5760405163a086920760e01b815260040160405180910390fd5b600a546040516001600160a01b038084169216907f923334f00a08147112838c5c41f68a92979493ae7af34177449883db5743427790600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610b4f61159a565b6001600160a01b03821660009081526009602052604090205460ff1615610b8957604051630560778360e51b815260040160405180910390fd5b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527f4a187de95f18bd0a9a020730b1d5a6fa3f909ec312c9c5d46f1e6b7db5dd52b891015b60405180910390a25050565b600033610bf78582856115c7565b610c0285858561163f565b506001949350505050565b610c1561159a565b6000829003610c375760405163b03330d960e01b815260040160405180910390fd5b60005b82811015610d09578160066000868685818110610c5957610c5961249f565b9050602002016020810190610c6e91906121ec565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110610ca857610ca861249f565b9050602002016020810190610cbd91906121ec565b6001600160a01b03167fee385e3edbe20b5bd36c0060389cdf1acf975758fa596713d6a4252751ab427583604051610cf9911515815260200190565b60405180910390a2600101610c3a565b50505050565b610d1761159a565b600a8160ff161115610d3c576040516306a8fe3960e01b815260040160405180910390fd5b6014805466ff0000000000001916600160301b60ff8416908102919091179091556040519081527f2d16b529cd6f4d8d1af62fe74e0801442778f50967ec8b5994f628052c59c73a906020015b60405180910390a150565b610d9c61159a565b601454600160381b900460ff16600114610dc957604051631c53d50b60e21b815260040160405180910390fd5b30600090815260208190526040902054610de28161169e565b50565b610ded61159a565b60108190556040518181527fcfbc3e24bcdbf875f7af2b101605919fdbd3cb0b217ae54c372ae49417c58d0190602001610d89565b610e2a61159a565b610e4060646a52b7d2dcc80cd2e40000006124cb565b811015610e6057604051630560778360e51b815260040160405180910390fd5b60138190556040518181527fdd4ef051c4c49233ec73abfc2ee1514725d2a818fbcde46ee5d34a49034922f990602001610d89565b610e9d61159a565b600a8160ff161115610ec2576040516306a8fe3960e01b815260040160405180910390fd5b6014805465ff000000000019166501000000000060ff8416908102919091179091556040519081527f2d16b529cd6f4d8d1af62fe74e0801442778f50967ec8b5994f628052c59c73a90602001610d89565b610f1c61159a565b610f266000611ab5565b565b610f3061159a565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527fee385e3edbe20b5bd36c0060389cdf1acf975758fa596713d6a4252751ab42759101610bdd565b610f9061159a565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb91906124ed565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af115801561104e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d099190612506565b61107a61159a565b806001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc9190612523565b6001600160a01b0316600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612523565b6001600160a01b03161461118357604051630560778360e51b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b0383169081179091556040517fbdfcd0f1d13d7b7322d52a6a9a6a758ba8f47be4985ff2ff6fcf5c217c3e06fb90600090a250565b606060048054610a0a90612465565b6111e461159a565b80826111f08587612540565b6111fa9190612540565b6112049190612540565b6014805464ff00000000191664010000000060ff9384168102919091179182905590041660000361124857604051630560778360e51b815260040160405180910390fd5b6014805460ff86811661ffff1990921682176101008783169081029190911763ffff000019166201000087841690810263ff00000019169190911763010000009387169384021790945560408051938452602084019190915282810193909352606082015290517f69657a49f1fb7e09821eaedf52135ee7f1b53484fc142073272b35c6e69b0b679181900360800190a150505050565b600033610a9b81858561163f565b600b546001600160a01b0316331480159061131357506005546001600160a01b03163314155b156113315760405163581129a760e11b815260040160405180910390fd5b600b546040516001600160a01b038084169216907facf03c50dcf01e53e2775267d12acd0158d87c2f20fb84226837142693b36ae790600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b61139561159a565b6113ac6101f46a52b7d2dcc80cd2e40000006124cb565b8110156113cc57604051630560778360e51b815260040160405180910390fd5b60128190556040518181527fcedd579bb16a110f8fc769828da3ec64f5b19963e8f71d7fb5214d37fdce2c4290602001610d89565b61140961159a565b6001600160a01b03811660008181526009602090815260408083208054600160ff1991821681179092556007909352818420805490931617909155517f43a9fee15527bb6ef23fe553fb1e6c1ea946a49cbeec8f294cb4a40eba739b819190a250565b61147461159a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146114c1576040519150601f19603f3d011682016040523d82523d6000602084013e6114c6565b606091505b50509050806114e85760405163863bf32b60e01b815260040160405180910390fd5b505050565b6114f561159a565b6001600160a01b03811661152457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610de281611ab5565b61153561159a565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527fa42bbec6725edfd96851ed0b8cad40906864445d5b16b570ef3abc6c148b00bb9101610bdd565b6114e88383836001611b07565b6005546001600160a01b03163314610f265760405163118cdaa760e01b815233600482015260240161151b565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610d09578181101561163057604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161151b565b610d0984848484036000611b07565b6001600160a01b03831661166957604051634b637e8f60e11b81526000600482015260240161151b565b6001600160a01b0382166116935760405163ec442f0560e01b81526000600482015260240161151b565b6114e8838383611bdc565b6014805460ff60381b198116600160381b9182900460011b60fe1690910217905560008190036116e1576040516301188bbf60e71b815260040160405180910390fd5b60145460009060ff64010000000082048116916117079163010000009091041684612559565b61171191906124cb565b905061171d8183612570565b604080516002808252606082018352929450600092909160208301908036833701905050905030816000815181106117575761175761249f565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190612523565b816001815181106117e7576117e761249f565b60200260200101906001600160a01b031690816001600160a01b03168152505061181082611de6565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611849908690600090869030904290600401612583565b600060405180830381600087803b15801561186357600080fd5b505af1158015611877573d6000803e3d6000fd5b5050601454479250600091506118a19060ff630100000082048116916401000000009004166125f6565b60ff169050806000036118b5575050505050565b60145460009082906118ca9060ff1685612559565b6118d491906124cb565b60145490915060009083906118f190610100900460ff1686612559565b6118fb91906124cb565b905060008161190a8487612570565b6119149190612570565b9050821561199257600b546040516000916001600160a01b03169085908381818185875af1925050503d8060008114611969576040519150601f19603f3d011682016040523d82523d6000602084013e61196e565b606091505b50509050806119905760405163863bf32b60e01b815260040160405180910390fd5b505b8115611a0e57600a546040516000916001600160a01b03169084908381818185875af1925050503d80600081146119e5576040519150601f19603f3d011682016040523d82523d6000602084013e6119ea565b606091505b5050905080611a0c5760405163863bf32b60e01b815260040160405180910390fd5b505b8015611a8a57600c546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611a61576040519150601f19603f3d011682016040523d82523d6000602084013e611a66565b606091505b5050905080611a885760405163863bf32b60e01b815260040160405180910390fd5b505b50506014805460ff60381b198116600160381b9182900460011c607f16909102179055505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038416611b315760405163e602df0560e01b81526000600482015260240161151b565b6001600160a01b038316611b5b57604051634a1406b160e11b81526000600482015260240161151b565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610d0957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bce91815260200190565b60405180910390a350505050565b6001600160a01b03808416600081815260096020908152604080832054948716835280832054938352600690915281205460ff93841693928316921680611c3b57506001600160a01b03851660009081526006602052604090205460ff165b6001600160a01b03871660009081526008602052604090205490915060ff16158015611c8057506001600160a01b03851660009081526008602052604090205460ff16155b8015611c8d575060125484115b15611cab576040516305266df960e51b815260040160405180910390fd5b3060009081526020819052604090205483158015611cca575060105481115b8015611cd4575081155b8015611cec5750601454600160381b900460ff166001145b15611cfa57611cfa8161169e565b600082611d49576000611d0d8686612002565b90506064611d1e60ff831689612559565b611d2891906124cb565b91508115611d4757611d3a8288612570565b9650611d478930846120ad565b505b838015611d565750601154155b15611d6057426011555b6001600160a01b03871660009081526007602052604090205460ff16158015611db3575060135486611da7896001600160a01b031660009081526020819052604090205490565b611db1919061260f565b115b15611dd1576040516322113a3360e01b815260040160405180910390fd5b611ddc8888886120ad565b5050505050505050565b80600003611df15750565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e2657611e2661249f565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea39190612523565b81600181518110611eb657611eb661249f565b6001600160a01b03909216602092830291909101909101526000611edb6002846124cb565b600e5460405163791ac94760e01b81529192506001600160a01b03169063791ac94790611f15908490600090879030904290600401612583565b600060405180830381600087803b158015611f2f57600080fd5b505af1158015611f43573d6000803e3d6000fd5b5050600e544792506001600160a01b0316905063f305d7198230611f678689612570565b600d5460405160e086901b6001600160e01b03191681526001600160a01b039384166004820152602481019290925260006044830181905260648301529190911660848201524260a482015260c40160606040518083038185885af1158015611fd4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ff99190612622565b50505050505050565b600082158015612010575081155b8061201b5750601154155b1561202857506000610aa1565b6000601154426120389190612570565b9050610834811061208357831561205f57505060145465010000000000900460ff16610aa1565b8215612079575050601454600160301b900460ff16610aa1565b6000915050610aa1565b61208f61012c826124cb565b61209a906005612559565b6120a5906023612570565b949350505050565b6001600160a01b0383166120d85780600260008282546120cd919061260f565b9091555061214a9050565b6001600160a01b0383166000908152602081905260409020548181101561212b5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161151b565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661216657600280548290039055612185565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121ca91815260200190565b60405180910390a3505050565b6001600160a01b0381168114610de257600080fd5b6000602082840312156121fe57600080fd5b8135612209816121d7565b9392505050565b60006020808352835180602085015260005b8181101561223e57858101830151858201604001528201612222565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561227257600080fd5b823561227d816121d7565b946020939093013593505050565b8015158114610de257600080fd5b600080604083850312156122ac57600080fd5b82356122b7816121d7565b915060208301356122c78161228b565b809150509250929050565b6000806000606084860312156122e757600080fd5b83356122f2816121d7565b92506020840135612302816121d7565b929592945050506040919091013590565b60008060006040848603121561232857600080fd5b833567ffffffffffffffff8082111561234057600080fd5b818601915086601f83011261235457600080fd5b81358181111561236357600080fd5b8760208260051b850101111561237857600080fd5b6020928301955093505084013561238e8161228b565b809150509250925092565b803560ff811681146123aa57600080fd5b919050565b6000602082840312156123c157600080fd5b61220982612399565b6000602082840312156123dc57600080fd5b5035919050565b600080604083850312156123f657600080fd5b8235612401816121d7565b915060208301356122c7816121d7565b6000806000806080858703121561242757600080fd5b61243085612399565b935061243e60208601612399565b925061244c60408601612399565b915061245a60608601612399565b905092959194509250565b600181811c9082168061247957607f821691505b60208210810361249957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826124e857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156124ff57600080fd5b5051919050565b60006020828403121561251857600080fd5b81516122098161228b565b60006020828403121561253557600080fd5b8151612209816121d7565b60ff8181168382160190811115610aa157610aa16124b5565b8082028115828204841417610aa157610aa16124b5565b81810381811115610aa157610aa16124b5565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b818110156125d55784516001600160a01b0316835293830193918301916001016125b0565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff8281168282160390811115610aa157610aa16124b5565b80820180821115610aa157610aa16124b5565b60008060006060848603121561263757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204a24c7e86815153f8a8b70810cfef069ce12df1c9c55f385c7b7ba1a83459f8464736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000045b77df62f0331bdb7c68b19ff9723b2290c882400000000000000000000000045b77df62f0331bdb7c68b19ff9723b2290c8824000000000000000000000000ec4e4a4346ead8ca6f63ffb2f25ca77aac2af331
-----Decoded View---------------
Arg [0] : _devWallet (address): 0x45b77DF62f0331bDb7c68B19ff9723b2290C8824
Arg [1] : _marketingWallet (address): 0x45b77DF62f0331bDb7c68B19ff9723b2290C8824
Arg [2] : _buybackWallet (address): 0xeC4E4A4346eAd8CA6f63FFb2f25Ca77Aac2aF331
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000045b77df62f0331bdb7c68b19ff9723b2290c8824
Arg [1] : 00000000000000000000000045b77df62f0331bdb7c68b19ff9723b2290c8824
Arg [2] : 000000000000000000000000ec4e4a4346ead8ca6f63ffb2f25ca77aac2af331
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.