ERC-20
Trading
Overview
Max Total Supply
8,000,000,000 AG
Holders
851 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH (-1.18%)
Onchain Market Cap
$211,120.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
5,000,000 AGValue
$131.95 ( ~0.0380158773433432 Eth) [0.0625%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AG
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/** * @title Alpha Gardeners - The Ultimate Degen Trading Toolkit * * Join us on Telegram: https://t.me/alphagardeners_lounge * Follow us on Twitter: https://twitter.com/alpha_gardeners * */ // SPDX-License-Identifier: AGPL-3.0-only pragma solidity ^0.8.19; import "./Ownable.sol"; import "./Pausable.sol"; import "./IUniswap.sol"; contract AG is Ownable, Pausable { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ // ERC20 events. event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); // This token specific events. event BlacklistStatusUpdated(address wallet, bool isBlacklisted); event MarketPairUpdated(address pair, bool isMarketPair); event ExcludedFromFeesUpdated(address wallet, bool isExcluded); event TaxRecipientUpdated(address recipient); event TaxesUpdated(uint256 buyTax, uint256 sellTax, uint256 transferTax); event LimitsUpdated(uint256 maxBuy, uint256 maxSell, uint256 maxWallet); event NumTokensToSwapUpdated(uint256 amount); event ContractSwapEnabledUpdated(bool autoEnabled, bool manualEnabled); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public constant decimals = 18; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ // No mint or burn means we can just use a constant. // Total supply must fit in uint128. uint256 public constant totalSupply = 8_000_000_000 * 10**decimals; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// TOKEN-SPECIFIC //////////////////////////////////////////////////////////////*/ address public taxRecipient; uint256 public numTokensToSwap = 2_500_000 * 10**decimals; bool public contractSwapEnabled = false; bool public manualSwapEnabled = false; bool private inSwap; IUniswapV2Router02 public uniswapV2Router; // IUniswapV2Pair public uniswapV2Pair; address private WETH; event UniswapRouterUpdated(address newRouter); // When accessing the buy tax, we also access buy limit, and the same applies for // sell tax and limit. We pack them into a struct to save on gas. struct taxAndLimit { uint128 tax; uint128 limit; } taxAndLimit public buyTaxAndLimit = taxAndLimit({ tax: 0, limit: uint128(totalSupply) }); taxAndLimit public sellTaxAndLimit = taxAndLimit({ tax: 0, limit: uint128(totalSupply) }); uint256 public transferTax = 0; uint256 public maxWallet = totalSupply; /// @dev totalSupply * maxTax cannot exceed uint256. /// @dev maxTax cannot exceed taxDenominator. uint256 private constant maxTax = 1_000; // 10%, same limit applies to all taxes. uint256 private constant taxDenominator = 10_000; // 500/10000 = 5% // Pack it into a struct instead of individual mappings to save on gas. struct walletState { bool isBlacklisted; bool isMarketPair; bool isExcludedFromFees; } mapping (address => walletState) public _walletState; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ // Start paused. constructor( string memory _name, string memory _symbol, address _taxRecipient, address routerAddress ) Ownable(msg.sender) Pausable(true) { // Require supply to be less than the max uint128 value. require(totalSupply < type(uint128).max, "TOTAL_SUPPLY_EXCEEDS_MAX"); name = _name; symbol = _symbol; taxRecipient = _taxRecipient; // Setup the Uniswap router used for swapping fees. uniswapV2Router = IUniswapV2Router02(routerAddress); _approve(address(this), routerAddress, type(uint256).max); WETH = uniswapV2Router.WETH(); // Setup for EIP-2612. INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); // Exclude owner and the contract from fees. _walletState[msg.sender] = walletState({ isBlacklisted: false, isMarketPair: false, isExcludedFromFees: true }); emit ExcludedFromFeesUpdated(msg.sender, true); _walletState[address(this)] = walletState({ isBlacklisted: false, isMarketPair: false, isExcludedFromFees: true }); emit ExcludedFromFeesUpdated(address(this), true); // Mint the initial supply. unchecked { balanceOf[msg.sender] += totalSupply; } emit Transfer(address(0), msg.sender, totalSupply); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public returns (bool) { _approve(msg.sender, spender, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = msg.sender; _approve(owner, spender, allowance[owner][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = msg.sender; uint256 currentAllowance = allowance[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _approve( address owner, address spender, uint256 amount ) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); allowance[owner][spender] = amount; emit Approval(owner, spender, amount); } function transfer(address to, uint256 amount) public whenNotPaused returns (bool) { _transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public whenNotPaused returns (bool) { uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) { require(allowed >= amount, "ERC20: insufficient allowance"); // Won't overflow since allowed >= amount. unchecked { allowance[from][msg.sender] = allowed - amount; } } _transfer(from, to, amount); return true; } function _buyTransfer(address to, uint256 amount) internal view returns (uint256) { // balanceOf[to]+amount can't exceed uint256 as it can't exceed totalSupply. // Taxes are capped at 10k and totalSupply is <= uint(128).max, overflow is impossible. unchecked { taxAndLimit memory buyConfig = buyTaxAndLimit; uint256 fees = (amount * buyConfig.tax) / taxDenominator; require(amount <= buyConfig.limit, "transfer exceeds max buy"); require(balanceOf[to] + amount <= maxWallet, "balance exceeds max wallet"); return fees; } } function _sellTransfer(uint256 amount) internal view returns (uint256) { unchecked { taxAndLimit memory sellConfig = sellTaxAndLimit; uint256 fees = (amount * sellConfig.tax) / taxDenominator; require(amount <= sellConfig.limit, "transfer exceeds max sell"); // Do not check max wallet as market pairs are allowed to exceed it. return fees; } } function _baseTransfer(address to, uint256 amount) internal view returns (uint256) { unchecked { require(balanceOf[to] + amount <= maxWallet, "balance exceeds max wallet"); return (amount * transferTax) / taxDenominator; } } function _swapTokens() internal { // Only try to swap fees during a sell transaction. uint256 numTokens = numTokensToSwap; bool overMinTokenBalance = balanceOf[address(this)] >= numTokens; if ( overMinTokenBalance && !inSwap && contractSwapEnabled ) { // Try to swap the fees and send them to the tax recipient. // If this fails, still allow the transfer to go through. try this.swapFeesAndSend(numTokens, 0) {} catch {} } } function _calcFees(address to, uint256 amount, bool isBuy, bool isSell) internal view returns (uint256) { if(isBuy) { return _buyTransfer(to, amount); } if(isSell) { return _sellTransfer(amount); } return _baseTransfer(to, amount); } function _transfer(address from, address to, uint256 amount) internal { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); uint256 balance = balanceOf[from]; require(balance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { balanceOf[from] = balance - amount; } walletState memory fromWalletState = _walletState[from]; walletState memory toWalletState = _walletState[to]; // Don't allow blacklisted wallets to receive or send tokens. require(!fromWalletState.isBlacklisted && !toWalletState.isBlacklisted, "blacklisted"); uint256 fees = 0; bool takeFee = !fromWalletState.isExcludedFromFees && !toWalletState.isExcludedFromFees; // Tax and enforce limits appriopriately. if(takeFee) { bool isBuy = fromWalletState.isMarketPair; bool isSell = toWalletState.isMarketPair; fees = _calcFees(to, amount, isBuy, isSell); if(isSell && !isBuy) { _swapTokens(); } } // Add the amount minus fees to the receiver. uint256 amountMinusFees; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. // fees is less than amount, so it can't overflow. unchecked { amountMinusFees = amount - fees; balanceOf[to] += amountMinusFees; } emit Transfer(from, to, amountMinusFees); // Add any fees collected to the contract. if(fees > 0) { emit Transfer(from, address(this), fees); unchecked { balanceOf[address(this)] += fees; } } } /*////////////////////////////////////////////////////////////// SWAP LOGIC //////////////////////////////////////////////////////////////*/ modifier lockTheSwap { inSwap = true; _; inSwap = false; } function swapFeesAndSend(uint256 tokenAmount, uint256 minOut) external lockTheSwap { if(msg.sender != address(this)) { require(manualSwapEnabled || msg.sender == owner(), "manual swap disabled"); } // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, minOut, path, taxRecipient, // Send ETH directly to the tax recipient. block.timestamp ); } /*////////////////////////////////////////////////////////////// OWNER-ONLY //////////////////////////////////////////////////////////////*/ function setBlacklisted(address account, bool value) external onlyOwner { require(account != address(this), "cant change contract"); _walletState[account].isBlacklisted = value; emit BlacklistStatusUpdated(account, value); } function setMarketPair(address account, bool value) external onlyOwner { require(account != address(this), "cant change contract"); _walletState[account].isMarketPair = value; emit MarketPairUpdated(account, value); } function setExcludedFromFees(address account, bool value) external onlyOwner { require(account != address(this), "cant change contract"); _walletState[account].isExcludedFromFees = value; emit ExcludedFromFeesUpdated(account, value); } function setTaxRecipient(address account) external onlyOwner { taxRecipient = account; emit TaxRecipientUpdated(account); } function setTaxes(uint256 _buyTax, uint256 _sellTax, uint256 _transferTax) public onlyOwner { // Cap any of the taxes to 10% max. require(_buyTax <= maxTax, "buy is too high"); require(_sellTax <= maxTax, "sell is too high"); require(_transferTax <= maxTax, "transfer is too high"); buyTaxAndLimit.tax = uint128(_buyTax); sellTaxAndLimit.tax = uint128(_sellTax); transferTax = _transferTax; emit TaxesUpdated(_buyTax, _sellTax, _transferTax); } // setLimits are in wad of tokens. 1e18 = 1 token. function setLimits(uint256 _maxBuyWad, uint256 _maxSellWad, uint256 _maxWalletWad) public onlyOwner { require(_maxBuyWad >= 20_000_000, "buy is too low"); require(_maxSellWad >= 20_000_000, "sell is too low"); require(_maxWalletWad >= 20_000_000, "wallet is too low"); buyTaxAndLimit.limit = uint128(_maxBuyWad * 10**decimals); sellTaxAndLimit.limit = uint128(_maxSellWad * 10**decimals); maxWallet = _maxWalletWad * 10**decimals; emit LimitsUpdated(_maxBuyWad * 10**decimals, _maxSellWad * 10**decimals, _maxWalletWad * 10**decimals); } // setNumTokensToSwap is in wad of tokens. 1e18 = 1 token. function setNumTokensToSwap(uint256 amountWad) external onlyOwner { require(amountWad > 0, "amount cant be zero"); numTokensToSwap = amountWad * 10**decimals; emit NumTokensToSwapUpdated(amountWad * 10**decimals); } function setContractSwapEnabled(bool _contractSwapEnabled, bool _manualSwapEnabled) public onlyOwner { contractSwapEnabled = _contractSwapEnabled; manualSwapEnabled = _manualSwapEnabled; emit ContractSwapEnabledUpdated(_contractSwapEnabled, _manualSwapEnabled); } function Unpause() external onlyOwner { _unpause(); } function Pause() external onlyOwner { _pause(); } function updateUniswapRouter(address newRouter) external onlyOwner { address oldRouterAddress = address(uniswapV2Router); require(oldRouterAddress != newRouter, "can't set the same router address"); uniswapV2Router = IUniswapV2Router02(newRouter); WETH = uniswapV2Router.WETH(); // Approve the new router to spend contract's tokens. _approve(address(this), newRouter, type(uint256).max); // Reset approval on old router. _approve(address(this), oldRouterAddress, 0); emit UniswapRouterUpdated(newRouter); } function openTrading() external onlyOwner { // Start with manual swap disabled. setContractSwapEnabled(true, false); setLimits( 20_000_000, 20_000_000, 60_000_000 ); setTaxes(1000, 1000, 0); _unpause(); } function skimETH(address to, uint256 amount) external onlyOwner { (bool success,) = to.call{value: amount}(""); require(success, "ETH transfer failed"); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FAILED'); } function skimTokens(address tokenAddress, address to, uint256 amount) external onlyOwner { safeTransfer(tokenAddress, to, amount); } /*////////////////////////////////////////////////////////////// PAUSABLE OVERRIDES //////////////////////////////////////////////////////////////*/ // Override the requireNotPaused implementation to allow the owner // to interact with the contract while it is paused. This allows the // owner to airdrop tokens or add liquidity while in a paused state. function _requireNotPaused() internal view override{ if(paused()) { if(tx.origin != owner() && msg.sender != owner()) { revert EnforcedPause(); } } } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; interface IUniswapV2Router01 { 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 IUniswapV2Router02 is IUniswapV2Router01 { 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 IUniswapV2Factory { 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; } interface IUniswapV2Pair { 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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.19; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ /// @dev edits: pass initial pause state in constructor and removed context dependency. /// @author OpenZeppelin https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/Pausable.sol abstract contract Pausable { bool private _paused; /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ constructor(bool initialPaused) { _paused = initialPaused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(msg.sender); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(msg.sender); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.19; /// @dev removed context dependency. /// @author OpenZeppelin https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol abstract contract Ownable { 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) { _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() != msg.sender) { revert OwnableUnauthorizedAccount(msg.sender); } } /** * @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); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_taxRecipient","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","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":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BlacklistStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"autoEnabled","type":"bool"},{"indexed":false,"internalType":"bool","name":"manualEnabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"isMarketPair","type":"bool"}],"name":"MarketPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NumTokensToSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"TaxRecipientUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferTax","type":"uint256"}],"name":"TaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UniswapRouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_walletState","outputs":[{"internalType":"bool","name":"isBlacklisted","type":"bool"},{"internalType":"bool","name":"isMarketPair","type":"bool"},{"internalType":"bool","name":"isExcludedFromFees","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxAndLimit","outputs":[{"internalType":"uint128","name":"tax","type":"uint128"},{"internalType":"uint128","name":"limit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxAndLimit","outputs":[{"internalType":"uint128","name":"tax","type":"uint128"},{"internalType":"uint128","name":"limit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_contractSwapEnabled","type":"bool"},{"internalType":"bool","name":"_manualSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyWad","type":"uint256"},{"internalType":"uint256","name":"_maxSellWad","type":"uint256"},{"internalType":"uint256","name":"_maxWalletWad","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountWad","type":"uint256"}],"name":"setNumTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"},{"internalType":"uint256","name":"_transferTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"skimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"skimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"minOut","type":"uint256"}],"name":"swapFeesAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052620000126012600a620007aa565b6200002190622625a0620007c2565b6006556007805461ffff191690556040805180820190915260008152602081016200004f6012600a620007aa565b62000060906401dcd65000620007c2565b6001600160801b0390811690915281516020928301518216600160801b029116176009556040805180820190915260008152908101620000a36012600a620007aa565b620000b4906401dcd65000620007c2565b6001600160801b0390811690915281516020909201518116600160801b02911617600a9081556000600b55620000ed90601290620007aa565b620000fe906401dcd65000620007c2565b600c553480156200010e57600080fd5b50604051620031d7380380620031d78339810160408190526200013191620008be565b6001336200013f8162000481565b5060008054911515600160a01b0260ff60a01b199092169190911790556001600160801b03620001726012600a620007aa565b62000183906401dcd65000620007c2565b10620001d65760405162461bcd60e51b815260206004820152601860248201527f544f54414c5f535550504c595f455843454544535f4d4158000000000000000060448201526064015b60405180910390fd5b6001620001e48582620009dc565b506002620001f38482620009dc565b50600580546001600160a01b0319166001600160a01b0384811691909117909155600780546301000000600160b81b031916630100000092841692909202919091179055620002463082600019620004d1565b600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c0919062000aa8565b600880546001600160a01b0319166001600160a01b039290921691909117905546608052620002ee620005f9565b60a0526040805160608101825260008082526020808301828152600184860181815233808652600d85529487902095518654935191511515620100000262ff0000199215156101000261ff00199215159290921661ffff19909516949094171716919091179093558351918252810191909152600080516020620031b7833981519152910160405180910390a16040805160608101825260008082526020808301828152600184860181815230808652600d85529487902095518654935191511515620100000262ff0000199215156101000261ff00199215159290921661ffff19909516949094171716919091179093558351918252810191909152600080516020620031b7833981519152910160405180910390a133600081815260036020526040812080546b19d971e4fe8401e7400000000190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620004556012600a620007aa565b62000466906401dcd65000620007c2565b60405190815260200160405180910390a35050505062000b44565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316620005355760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620001cd565b6001600160a01b038216620005985760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620001cd565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60016040516200062d919062000ac6565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006ec578160001904821115620006d057620006d062000695565b80851615620006de57918102915b93841c9390800290620006b0565b509250929050565b6000826200070557506001620007a4565b816200071457506000620007a4565b81600181146200072d5760028114620007385762000758565b6001915050620007a4565b60ff8411156200074c576200074c62000695565b50506001821b620007a4565b5060208310610133831016604e8410600b84101617156200077d575081810a620007a4565b620007898383620006ab565b8060001904821115620007a057620007a062000695565b0290505b92915050565b6000620007bb60ff841683620006f4565b9392505050565b8082028115828204841417620007a457620007a462000695565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200080457600080fd5b81516001600160401b0380821115620008215762000821620007dc565b604051601f8301601f19908116603f011681019082821181831017156200084c576200084c620007dc565b816040528381526020925086838588010111156200086957600080fd5b600091505b838210156200088d57858201830151818301840152908201906200086e565b600093810190920192909252949350505050565b80516001600160a01b0381168114620008b957600080fd5b919050565b60008060008060808587031215620008d557600080fd5b84516001600160401b0380821115620008ed57600080fd5b620008fb88838901620007f2565b955060208701519150808211156200091257600080fd5b506200092187828801620007f2565b9350506200093260408601620008a1565b91506200094260608601620008a1565b905092959194509250565b600181811c908216806200096257607f821691505b6020821081036200098357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620009d757600081815260208120601f850160051c81016020861015620009b25750805b601f850160051c820191505b81811015620009d357828155600101620009be565b5050505b505050565b81516001600160401b03811115620009f857620009f8620007dc565b62000a108162000a0984546200094d565b8462000989565b602080601f83116001811462000a48576000841562000a2f5750858301515b600019600386901b1c1916600185901b178555620009d3565b600085815260208120601f198616915b8281101562000a795788860151825594840194600190910190840162000a58565b508582101562000a985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000abb57600080fd5b620007bb82620008a1565b600080835462000ad6816200094d565b6001828116801562000af1576001811462000b075762000b38565b60ff198416875282151583028701945062000b38565b8760005260208060002060005b8581101562000b2f5781548a82015290840190820162000b14565b50505082870194505b50929695505050505050565b60805160a05161264d62000b6a6000396000610a7c01526000610a47015261264d6000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c80638124f7ac11610151578063c9567bf9116100c3578063dd62ed3e11610087578063dd62ed3e146105a7578063e13e5c2d146105d2578063e9dae5ed146105e5578063f2fde38b146105f8578063f8b45b051461060b578063fdb78c0e1461061457600080fd5b8063c9567bf91461051d578063d01dd6d214610525578063d505accf14610538578063d53cd5661461054b578063d683804e1461058957600080fd5b8063a457c2d711610115578063a457c2d7146104ab578063a9059cbb146104be578063ae0295e2146104d1578063b359303a146104e4578063bfc2fc35146104f7578063c16dd4a41461050a57600080fd5b80638124f7ac146104645780638da5cb5b1461046d578063908bb2ae1461047e57806395d89b411461049157806398fbb9061461049957600080fd5b80633644e515116101ea57806370a08231116101ae57806370a08231146103ee578063715018a61461040e578063737ea06e146104165780637805862f1461042957806378e3079e146104315780637ecebe001461044457600080fd5b80633644e515146103a657806339509351146103ae578063590ffdce146103c15780635c975abb146103d45780636985a022146103e657600080fd5b80631694505e116102315780631694505e1461032c57806318160ddd1461035e578063189ae5f21461036657806323b872dd14610379578063313ce5671461038c57600080fd5b806301a6c43b1461026e57806306fdde031461028a578063095ea7b31461029f5780630f569dad146102c2578063143373a0146102d7575b600080fd5b61027760065481565b6040519081526020015b60405180910390f35b610292610621565b60405161028191906120a7565b6102b26102ad3660046120ef565b6106af565b6040519015158152602001610281565b6102d56102d036600461211b565b6106c6565b005b61030d6102e5366004612134565b600d6020526000908152604090205460ff808216916101008104821691620100009091041683565b6040805193151584529115156020840152151590820152606001610281565b60075461034690630100000090046001600160a01b031681565b6040516001600160a01b039091168152602001610281565b61027761077e565b6102d5610374366004612151565b61079c565b6102b261038736600461217d565b61097d565b610394601281565b60405160ff9091168152602001610281565b610277610a43565b6102b26103bc3660046120ef565b610a9e565b6102d56103cf3660046121cc565b610ae7565b600054600160a01b900460ff166102b2565b6102d5610b85565b6102776103fc366004612134565b60036020526000908152604090205481565b6102d5610b97565b600554610346906001600160a01b031681565b6102d5610ba9565b6102d561043f366004612134565b610bb9565b610277610452366004612134565b600e6020526000908152604090205481565b610277600b5481565b6000546001600160a01b0316610346565b6102d561048c366004612134565b610c0f565b610292610d97565b6007546102b290610100900460ff1681565b6102b26104b93660046120ef565b610da4565b6102b26104cc3660046120ef565b610e36565b6102d56104df3660046120ef565b610e4b565b6102d56104f2366004612205565b610ef1565b6102d5610505366004612227565b611067565b6102d56105183660046121cc565b6110cb565b6102d561115f565b6102d56105333660046121cc565b611194565b6102d5610546366004612245565b611220565b600954610569906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610281565b600a54610569906001600160801b0380821691600160801b90041682565b6102776105b53660046122bc565b600460209081526000928352604080842090915290825290205481565b6102d56105e036600461217d565b611464565b6102d56105f3366004612151565b611477565b6102d5610606366004612134565b6115cd565b610277600c5481565b6007546102b29060ff1681565b6001805461062e906122ea565b80601f016020809104026020016040519081016040528092919081815260200182805461065a906122ea565b80156106a75780601f1061067c576101008083540402835291602001916106a7565b820191906000526020600020905b81548152906001019060200180831161068a57829003601f168201915b505050505081565b60006106bc33848461160b565b5060015b92915050565b6106ce61172f565b600081116107195760405162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b60448201526064015b60405180910390fd5b6107256012600a61241e565b61072f908261242d565b6006557f4e3e41dc675aea3fcba9c02c7825641a2888e42a4b888399511f5276ca84b81861075f6012600a61241e565b610769908361242d565b6040519081526020015b60405180910390a150565b61078a6012600a61241e565b610799906401dcd6500061242d565b81565b6107a461172f565b6301312d008310156107e95760405162461bcd60e51b815260206004820152600e60248201526d62757920697320746f6f206c6f7760901b6044820152606401610710565b6301312d0082101561082f5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20697320746f6f206c6f7760881b6044820152606401610710565b6301312d008110156108775760405162461bcd60e51b815260206004820152601160248201527077616c6c657420697320746f6f206c6f7760781b6044820152606401610710565b6108836012600a61241e565b61088d908461242d565b600980546001600160801b03928316600160801b0292169190911790556108b66012600a61241e565b6108c0908361242d565b600a80546001600160801b03928316600160801b0292169190911781556108e99060129061241e565b6108f3908261242d565b600c557faa2ef8ba434f2f6bdaad3fcc2d5c35f02b08a47173c94877259407614bc46b556109236012600a61241e565b61092d908561242d565b6109396012600a61241e565b610943908561242d565b61094f6012600a61241e565b610959908561242d565b604080519384526020840192909252908201526060015b60405180910390a1505050565b600061098761176b565b6001600160a01b03841660009081526004602090815260408083203384529091529020546000198114610a2d5782811015610a045760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610710565b6001600160a01b0385166000908152600460209081526040808320338452909152902083820390555b610a388585856117c1565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610a7957610a74611af1565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909190610add9082908690610ad8908790612444565b61160b565b5060019392505050565b610aef61172f565b306001600160a01b03831603610b175760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805462ff0000191662010000861515908102919091179091558251938452908301527fe4cbcfb1a60e2c589f335f74c6c57b0be57eb6c50eb56442d8a67735dba70cad91015b60405180910390a15050565b610b8d61172f565b610b95611b8b565b565b610b9f61172f565b610b956000611bdc565b610bb161172f565b610b95611c2c565b610bc161172f565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fcb5639215577b3eba6150c2a74d8de8ea5885c176e29e2e66a7551cc15b7a7cf90602001610773565b610c1761172f565b6007546001600160a01b03630100000090910481169082168103610c875760405162461bcd60e51b815260206004820152602160248201527f63616e277420736574207468652073616d6520726f75746572206164647265736044820152607360f81b6064820152608401610710565b81600760036101000a8154816001600160a01b0302191690836001600160a01b03160217905550600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d259190612485565b600880546001600160a01b0319166001600160a01b0392909216919091179055610d52308360001961160b565b610d5e3082600061160b565b6040516001600160a01b03831681527f455a5e52b7c01aa52d717db42e17b6610b0c2c96560c85b7e5adcdd254bfc17c90602001610b79565b6002805461062e906122ea565b3360008181526004602090815260408083206001600160a01b038716845290915281205490919083811015610e295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610710565b610a38828686840361160b565b6000610e4061176b565b6106bc3384846117c1565b610e5361172f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eec5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610710565b505050565b6007805462ff0000191662010000179055333014610f6c57600754610100900460ff1680610f2957506000546001600160a01b031633145b610f6c5760405162461bcd60e51b81526020600482015260146024820152731b585b9d585b081cddd85c08191a5cd8589b195960621b6044820152606401610710565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610fa157610fa16124a2565b6001600160a01b039283166020918202929092010152600854825191169082906001908110610fd257610fd26124a2565b6001600160a01b03928316602091820292909201015260075460055460405163791ac94760e01b8152630100000090920483169263791ac94792611024928892889288929091169042906004016124b8565b600060405180830381600087803b15801561103e57600080fd5b505af1158015611052573d6000803e3d6000fd5b50506007805462ff0000191690555050505050565b61106f61172f565b60078054821515610100810261ff001986151590811661ffff1990941693909317179092556040805191825260208201929092527fe170718435bb78d34d60ff2ad1c1fb4275ec0f1914bbcba82e7d67847b3279229101610b79565b6110d361172f565b306001600160a01b038316036110fb5760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805461ff001916610100861515908102919091179091558251938452908301527f160ff69a72bc70f3e792a86c87d27070e421562197f032d96bcab11c5010222e9101610b79565b61116761172f565b61117360016000611067565b6111866301312d0080630393870061079c565b610bb16103e8806000611477565b61119c61172f565b306001600160a01b038316036111c45760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb69101610b79565b428410156112705760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610710565b6000600161127c610a43565b6001600160a01b038a81166000818152600e602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611388573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906113be5750876001600160a01b0316816001600160a01b0316145b6113fb5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610710565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b61146c61172f565b610eec838383611c71565b61147f61172f565b6103e88311156114c35760405162461bcd60e51b815260206004820152600f60248201526e0c4eaf240d2e640e8dede40d0d2ced608b1b6044820152606401610710565b6103e88211156115085760405162461bcd60e51b815260206004820152601060248201526f0e6cad8d840d2e640e8dede40d0d2ced60831b6044820152606401610710565b6103e88111156115515760405162461bcd60e51b81526020600482015260146024820152730e8e4c2dce6cccae440d2e640e8dede40d0d2ced60631b6044820152606401610710565b600980546001600160801b038581166fffffffffffffffffffffffffffffffff1992831617909255600a805492851692909116919091179055600b81905560408051848152602081018490529081018290527fbf599f0b0b785a611d748a0dfabee402e180323c72c9ed973e5cc29d23c992d890606001610970565b6115d561172f565b6001600160a01b0381166115ff57604051631e4fbdf760e01b815260006004820152602401610710565b61160881611bdc565b50565b6001600160a01b03831661166d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610710565b6001600160a01b0382166116ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610710565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b336117426000546001600160a01b031690565b6001600160a01b031614610b955760405163118cdaa760e01b8152336004820152602401610710565b600054600160a01b900460ff1615610b95576000546001600160a01b031632148015906117a357506000546001600160a01b03163314155b15610b955760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b0383166118255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610710565b6001600160a01b0382166118875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610710565b6001600160a01b038316600090815260036020526040902054818110156118ff5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610710565b6001600160a01b0380851660009081526003602090815260408083208686039055600d808352818420825160608082018552915460ff80821615158352610100808304821615158489015262010000928390048216151584880152988c1688529386529584902084519283018552548084161515835296870483161515948201949094529390940490931615159282019290925281511580156119a157508051155b6119db5760405162461bcd60e51b815260206004820152600b60248201526a189b1858dadb1a5cdd195960aa1b6044820152606401610710565b60008083604001511580156119f257508260400151155b90508015611a2d5760208085015190840151611a1089898484611d7e565b9350808015611a1d575081155b15611a2a57611a2a611dbb565b50505b6001600160a01b038781166000818152600360209081526040918290208054878c03908101909155915182815291938c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a38215611ae65760405183815230906001600160a01b038b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a33060009081526003602052604090208054840190555b505050505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051611b239190612529565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611b9361176b565b6000805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c34611e4e565b6000805460ff60a01b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001611bd2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611ccd91906125c8565b6000604051808303816000865af19150503d8060008114611d0a576040519150601f19603f3d011682016040523d82523d6000602084013e611d0f565b606091505b5091509150818015611d39575080511580611d39575080806020019051810190611d3991906125e4565b611d775760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610710565b5050505050565b60008215611d9757611d908585611e78565b9050611db3565b8115611da657611d9084611f6a565b611db08585611ff7565b90505b949350505050565b6006543060009081526003602052604090205481118015908190611de8575060075462010000900460ff16155b8015611df6575060075460ff165b15611e4a576040516359ac981d60e11b81526004810183905260006024820152309063b359303a90604401600060405180830381600087803b158015611e3b57600080fd5b505af1925050508015610eec57505b5050565b600054600160a01b900460ff16610b9557604051638dfc202b60e01b815260040160405180910390fd5b604080518082019091526009546001600160801b03808216808452600160801b9092041660208301819052600092916127109085020490841115611efe5760405162461bcd60e51b815260206004820152601860248201527f7472616e736665722065786365656473206d61782062757900000000000000006044820152606401610710565b600c546001600160a01b03861660009081526003602052604090205485011115611db35760405162461bcd60e51b815260206004820152601a60248201527f62616c616e63652065786365656473206d61782077616c6c65740000000000006044820152606401610710565b60408051808201909152600a546001600160801b03808216808452600160801b9092041660208301819052600092916127109085020490841115611ff05760405162461bcd60e51b815260206004820152601960248201527f7472616e736665722065786365656473206d61782073656c6c000000000000006044820152606401610710565b9392505050565b600c546001600160a01b038316600090815260036020526040812054909190830111156120665760405162461bcd60e51b815260206004820152601a60248201527f62616c616e63652065786365656473206d61782077616c6c65740000000000006044820152606401610710565b612710600b5483028161207b5761207b612601565b049392505050565b60005b8381101561209e578181015183820152602001612086565b50506000910152565b60208152600082518060208401526120c6816040850160208701612083565b601f01601f19169190910160400192915050565b6001600160a01b038116811461160857600080fd5b6000806040838503121561210257600080fd5b823561210d816120da565b946020939093013593505050565b60006020828403121561212d57600080fd5b5035919050565b60006020828403121561214657600080fd5b8135611ff0816120da565b60008060006060848603121561216657600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561219257600080fd5b833561219d816120da565b925060208401356121ad816120da565b929592945050506040919091013590565b801515811461160857600080fd5b600080604083850312156121df57600080fd5b82356121ea816120da565b915060208301356121fa816121be565b809150509250929050565b6000806040838503121561221857600080fd5b50508035926020909101359150565b6000806040838503121561223a57600080fd5b82356121ea816121be565b600080600080600080600060e0888a03121561226057600080fd5b873561226b816120da565b9650602088013561227b816120da565b95506040880135945060608801359350608088013560ff8116811461229f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156122cf57600080fd5b82356122da816120da565b915060208301356121fa816120da565b600181811c908216806122fe57607f821691505b60208210810361231e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561237557816000190482111561235b5761235b612324565b8085161561236857918102915b93841c939080029061233f565b509250929050565b60008261238c575060016106c0565b81612399575060006106c0565b81600181146123af57600281146123b9576123d5565b60019150506106c0565b60ff8411156123ca576123ca612324565b50506001821b6106c0565b5060208310610133831016604e8410600b84101617156123f8575081810a6106c0565b612402838361233a565b806000190482111561241657612416612324565b029392505050565b6000611ff060ff84168361237d565b80820281158282048414176106c0576106c0612324565b808201808211156106c0576106c0612324565b60208082526014908201527318d85b9d0818da185b99d94818dbdb9d1c9858dd60621b604082015260600190565b60006020828403121561249757600080fd5b8151611ff0816120da565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125085784516001600160a01b0316835293830193918301916001016124e3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080835481600182811c91508083168061254557607f831692505b6020808410820361256457634e487b7160e01b86526022600452602486fd5b818015612578576001811461258d576125ba565b60ff19861689528415158502890196506125ba565b60008a81526020902060005b868110156125b25781548b820152908501908301612599565b505084890196505b509498975050505050505050565b600082516125da818460208701612083565b9190910192915050565b6000602082840312156125f657600080fd5b8151611ff0816121be565b634e487b7160e01b600052601260045260246000fdfea26469706673582212202039dc0aa00140d747566f0c55dee0454c86fd9d2e68382f0621e6e281a613bc64736f6c63430008130033e4cbcfb1a60e2c589f335f74c6c57b0be57eb6c50eb56442d8a67735dba70cad000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000fe73dba49b8531c639dcddee764dcaf49d91066b0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000000f416c7068612047617264656e657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024147000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c80638124f7ac11610151578063c9567bf9116100c3578063dd62ed3e11610087578063dd62ed3e146105a7578063e13e5c2d146105d2578063e9dae5ed146105e5578063f2fde38b146105f8578063f8b45b051461060b578063fdb78c0e1461061457600080fd5b8063c9567bf91461051d578063d01dd6d214610525578063d505accf14610538578063d53cd5661461054b578063d683804e1461058957600080fd5b8063a457c2d711610115578063a457c2d7146104ab578063a9059cbb146104be578063ae0295e2146104d1578063b359303a146104e4578063bfc2fc35146104f7578063c16dd4a41461050a57600080fd5b80638124f7ac146104645780638da5cb5b1461046d578063908bb2ae1461047e57806395d89b411461049157806398fbb9061461049957600080fd5b80633644e515116101ea57806370a08231116101ae57806370a08231146103ee578063715018a61461040e578063737ea06e146104165780637805862f1461042957806378e3079e146104315780637ecebe001461044457600080fd5b80633644e515146103a657806339509351146103ae578063590ffdce146103c15780635c975abb146103d45780636985a022146103e657600080fd5b80631694505e116102315780631694505e1461032c57806318160ddd1461035e578063189ae5f21461036657806323b872dd14610379578063313ce5671461038c57600080fd5b806301a6c43b1461026e57806306fdde031461028a578063095ea7b31461029f5780630f569dad146102c2578063143373a0146102d7575b600080fd5b61027760065481565b6040519081526020015b60405180910390f35b610292610621565b60405161028191906120a7565b6102b26102ad3660046120ef565b6106af565b6040519015158152602001610281565b6102d56102d036600461211b565b6106c6565b005b61030d6102e5366004612134565b600d6020526000908152604090205460ff808216916101008104821691620100009091041683565b6040805193151584529115156020840152151590820152606001610281565b60075461034690630100000090046001600160a01b031681565b6040516001600160a01b039091168152602001610281565b61027761077e565b6102d5610374366004612151565b61079c565b6102b261038736600461217d565b61097d565b610394601281565b60405160ff9091168152602001610281565b610277610a43565b6102b26103bc3660046120ef565b610a9e565b6102d56103cf3660046121cc565b610ae7565b600054600160a01b900460ff166102b2565b6102d5610b85565b6102776103fc366004612134565b60036020526000908152604090205481565b6102d5610b97565b600554610346906001600160a01b031681565b6102d5610ba9565b6102d561043f366004612134565b610bb9565b610277610452366004612134565b600e6020526000908152604090205481565b610277600b5481565b6000546001600160a01b0316610346565b6102d561048c366004612134565b610c0f565b610292610d97565b6007546102b290610100900460ff1681565b6102b26104b93660046120ef565b610da4565b6102b26104cc3660046120ef565b610e36565b6102d56104df3660046120ef565b610e4b565b6102d56104f2366004612205565b610ef1565b6102d5610505366004612227565b611067565b6102d56105183660046121cc565b6110cb565b6102d561115f565b6102d56105333660046121cc565b611194565b6102d5610546366004612245565b611220565b600954610569906001600160801b0380821691600160801b90041682565b604080516001600160801b03938416815292909116602083015201610281565b600a54610569906001600160801b0380821691600160801b90041682565b6102776105b53660046122bc565b600460209081526000928352604080842090915290825290205481565b6102d56105e036600461217d565b611464565b6102d56105f3366004612151565b611477565b6102d5610606366004612134565b6115cd565b610277600c5481565b6007546102b29060ff1681565b6001805461062e906122ea565b80601f016020809104026020016040519081016040528092919081815260200182805461065a906122ea565b80156106a75780601f1061067c576101008083540402835291602001916106a7565b820191906000526020600020905b81548152906001019060200180831161068a57829003601f168201915b505050505081565b60006106bc33848461160b565b5060015b92915050565b6106ce61172f565b600081116107195760405162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b60448201526064015b60405180910390fd5b6107256012600a61241e565b61072f908261242d565b6006557f4e3e41dc675aea3fcba9c02c7825641a2888e42a4b888399511f5276ca84b81861075f6012600a61241e565b610769908361242d565b6040519081526020015b60405180910390a150565b61078a6012600a61241e565b610799906401dcd6500061242d565b81565b6107a461172f565b6301312d008310156107e95760405162461bcd60e51b815260206004820152600e60248201526d62757920697320746f6f206c6f7760901b6044820152606401610710565b6301312d0082101561082f5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20697320746f6f206c6f7760881b6044820152606401610710565b6301312d008110156108775760405162461bcd60e51b815260206004820152601160248201527077616c6c657420697320746f6f206c6f7760781b6044820152606401610710565b6108836012600a61241e565b61088d908461242d565b600980546001600160801b03928316600160801b0292169190911790556108b66012600a61241e565b6108c0908361242d565b600a80546001600160801b03928316600160801b0292169190911781556108e99060129061241e565b6108f3908261242d565b600c557faa2ef8ba434f2f6bdaad3fcc2d5c35f02b08a47173c94877259407614bc46b556109236012600a61241e565b61092d908561242d565b6109396012600a61241e565b610943908561242d565b61094f6012600a61241e565b610959908561242d565b604080519384526020840192909252908201526060015b60405180910390a1505050565b600061098761176b565b6001600160a01b03841660009081526004602090815260408083203384529091529020546000198114610a2d5782811015610a045760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610710565b6001600160a01b0385166000908152600460209081526040808320338452909152902083820390555b610a388585856117c1565b506001949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610a7957610a74611af1565b905090565b507f6d15047ff1fd1818681becc886f55fb2a9e2f6691f605534eddd8cf7d3741b5c90565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909190610add9082908690610ad8908790612444565b61160b565b5060019392505050565b610aef61172f565b306001600160a01b03831603610b175760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805462ff0000191662010000861515908102919091179091558251938452908301527fe4cbcfb1a60e2c589f335f74c6c57b0be57eb6c50eb56442d8a67735dba70cad91015b60405180910390a15050565b610b8d61172f565b610b95611b8b565b565b610b9f61172f565b610b956000611bdc565b610bb161172f565b610b95611c2c565b610bc161172f565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527fcb5639215577b3eba6150c2a74d8de8ea5885c176e29e2e66a7551cc15b7a7cf90602001610773565b610c1761172f565b6007546001600160a01b03630100000090910481169082168103610c875760405162461bcd60e51b815260206004820152602160248201527f63616e277420736574207468652073616d6520726f75746572206164647265736044820152607360f81b6064820152608401610710565b81600760036101000a8154816001600160a01b0302191690836001600160a01b03160217905550600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d259190612485565b600880546001600160a01b0319166001600160a01b0392909216919091179055610d52308360001961160b565b610d5e3082600061160b565b6040516001600160a01b03831681527f455a5e52b7c01aa52d717db42e17b6610b0c2c96560c85b7e5adcdd254bfc17c90602001610b79565b6002805461062e906122ea565b3360008181526004602090815260408083206001600160a01b038716845290915281205490919083811015610e295760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610710565b610a38828686840361160b565b6000610e4061176b565b6106bc3384846117c1565b610e5361172f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eec5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610710565b505050565b6007805462ff0000191662010000179055333014610f6c57600754610100900460ff1680610f2957506000546001600160a01b031633145b610f6c5760405162461bcd60e51b81526020600482015260146024820152731b585b9d585b081cddd85c08191a5cd8589b195960621b6044820152606401610710565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610fa157610fa16124a2565b6001600160a01b039283166020918202929092010152600854825191169082906001908110610fd257610fd26124a2565b6001600160a01b03928316602091820292909201015260075460055460405163791ac94760e01b8152630100000090920483169263791ac94792611024928892889288929091169042906004016124b8565b600060405180830381600087803b15801561103e57600080fd5b505af1158015611052573d6000803e3d6000fd5b50506007805462ff0000191690555050505050565b61106f61172f565b60078054821515610100810261ff001986151590811661ffff1990941693909317179092556040805191825260208201929092527fe170718435bb78d34d60ff2ad1c1fb4275ec0f1914bbcba82e7d67847b3279229101610b79565b6110d361172f565b306001600160a01b038316036110fb5760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805461ff001916610100861515908102919091179091558251938452908301527f160ff69a72bc70f3e792a86c87d27070e421562197f032d96bcab11c5010222e9101610b79565b61116761172f565b61117360016000611067565b6111866301312d0080630393870061079c565b610bb16103e8806000611477565b61119c61172f565b306001600160a01b038316036111c45760405162461bcd60e51b815260040161071090612457565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb69101610b79565b428410156112705760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610710565b6000600161127c610a43565b6001600160a01b038a81166000818152600e602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611388573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906113be5750876001600160a01b0316816001600160a01b0316145b6113fb5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610710565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b61146c61172f565b610eec838383611c71565b61147f61172f565b6103e88311156114c35760405162461bcd60e51b815260206004820152600f60248201526e0c4eaf240d2e640e8dede40d0d2ced608b1b6044820152606401610710565b6103e88211156115085760405162461bcd60e51b815260206004820152601060248201526f0e6cad8d840d2e640e8dede40d0d2ced60831b6044820152606401610710565b6103e88111156115515760405162461bcd60e51b81526020600482015260146024820152730e8e4c2dce6cccae440d2e640e8dede40d0d2ced60631b6044820152606401610710565b600980546001600160801b038581166fffffffffffffffffffffffffffffffff1992831617909255600a805492851692909116919091179055600b81905560408051848152602081018490529081018290527fbf599f0b0b785a611d748a0dfabee402e180323c72c9ed973e5cc29d23c992d890606001610970565b6115d561172f565b6001600160a01b0381166115ff57604051631e4fbdf760e01b815260006004820152602401610710565b61160881611bdc565b50565b6001600160a01b03831661166d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610710565b6001600160a01b0382166116ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610710565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b336117426000546001600160a01b031690565b6001600160a01b031614610b955760405163118cdaa760e01b8152336004820152602401610710565b600054600160a01b900460ff1615610b95576000546001600160a01b031632148015906117a357506000546001600160a01b03163314155b15610b955760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b0383166118255760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610710565b6001600160a01b0382166118875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610710565b6001600160a01b038316600090815260036020526040902054818110156118ff5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610710565b6001600160a01b0380851660009081526003602090815260408083208686039055600d808352818420825160608082018552915460ff80821615158352610100808304821615158489015262010000928390048216151584880152988c1688529386529584902084519283018552548084161515835296870483161515948201949094529390940490931615159282019290925281511580156119a157508051155b6119db5760405162461bcd60e51b815260206004820152600b60248201526a189b1858dadb1a5cdd195960aa1b6044820152606401610710565b60008083604001511580156119f257508260400151155b90508015611a2d5760208085015190840151611a1089898484611d7e565b9350808015611a1d575081155b15611a2a57611a2a611dbb565b50505b6001600160a01b038781166000818152600360209081526040918290208054878c03908101909155915182815291938c16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a38215611ae65760405183815230906001600160a01b038b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a33060009081526003602052604090208054840190555b505050505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6001604051611b239190612529565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611b9361176b565b6000805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c34611e4e565b6000805460ff60a01b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602001611bd2565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611ccd91906125c8565b6000604051808303816000865af19150503d8060008114611d0a576040519150601f19603f3d011682016040523d82523d6000602084013e611d0f565b606091505b5091509150818015611d39575080511580611d39575080806020019051810190611d3991906125e4565b611d775760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610710565b5050505050565b60008215611d9757611d908585611e78565b9050611db3565b8115611da657611d9084611f6a565b611db08585611ff7565b90505b949350505050565b6006543060009081526003602052604090205481118015908190611de8575060075462010000900460ff16155b8015611df6575060075460ff165b15611e4a576040516359ac981d60e11b81526004810183905260006024820152309063b359303a90604401600060405180830381600087803b158015611e3b57600080fd5b505af1925050508015610eec57505b5050565b600054600160a01b900460ff16610b9557604051638dfc202b60e01b815260040160405180910390fd5b604080518082019091526009546001600160801b03808216808452600160801b9092041660208301819052600092916127109085020490841115611efe5760405162461bcd60e51b815260206004820152601860248201527f7472616e736665722065786365656473206d61782062757900000000000000006044820152606401610710565b600c546001600160a01b03861660009081526003602052604090205485011115611db35760405162461bcd60e51b815260206004820152601a60248201527f62616c616e63652065786365656473206d61782077616c6c65740000000000006044820152606401610710565b60408051808201909152600a546001600160801b03808216808452600160801b9092041660208301819052600092916127109085020490841115611ff05760405162461bcd60e51b815260206004820152601960248201527f7472616e736665722065786365656473206d61782073656c6c000000000000006044820152606401610710565b9392505050565b600c546001600160a01b038316600090815260036020526040812054909190830111156120665760405162461bcd60e51b815260206004820152601a60248201527f62616c616e63652065786365656473206d61782077616c6c65740000000000006044820152606401610710565b612710600b5483028161207b5761207b612601565b049392505050565b60005b8381101561209e578181015183820152602001612086565b50506000910152565b60208152600082518060208401526120c6816040850160208701612083565b601f01601f19169190910160400192915050565b6001600160a01b038116811461160857600080fd5b6000806040838503121561210257600080fd5b823561210d816120da565b946020939093013593505050565b60006020828403121561212d57600080fd5b5035919050565b60006020828403121561214657600080fd5b8135611ff0816120da565b60008060006060848603121561216657600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561219257600080fd5b833561219d816120da565b925060208401356121ad816120da565b929592945050506040919091013590565b801515811461160857600080fd5b600080604083850312156121df57600080fd5b82356121ea816120da565b915060208301356121fa816121be565b809150509250929050565b6000806040838503121561221857600080fd5b50508035926020909101359150565b6000806040838503121561223a57600080fd5b82356121ea816121be565b600080600080600080600060e0888a03121561226057600080fd5b873561226b816120da565b9650602088013561227b816120da565b95506040880135945060608801359350608088013560ff8116811461229f57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156122cf57600080fd5b82356122da816120da565b915060208301356121fa816120da565b600181811c908216806122fe57607f821691505b60208210810361231e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561237557816000190482111561235b5761235b612324565b8085161561236857918102915b93841c939080029061233f565b509250929050565b60008261238c575060016106c0565b81612399575060006106c0565b81600181146123af57600281146123b9576123d5565b60019150506106c0565b60ff8411156123ca576123ca612324565b50506001821b6106c0565b5060208310610133831016604e8410600b84101617156123f8575081810a6106c0565b612402838361233a565b806000190482111561241657612416612324565b029392505050565b6000611ff060ff84168361237d565b80820281158282048414176106c0576106c0612324565b808201808211156106c0576106c0612324565b60208082526014908201527318d85b9d0818da185b99d94818dbdb9d1c9858dd60621b604082015260600190565b60006020828403121561249757600080fd5b8151611ff0816120da565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125085784516001600160a01b0316835293830193918301916001016124e3565b50506001600160a01b03969096166060850152505050608001529392505050565b600080835481600182811c91508083168061254557607f831692505b6020808410820361256457634e487b7160e01b86526022600452602486fd5b818015612578576001811461258d576125ba565b60ff19861689528415158502890196506125ba565b60008a81526020902060005b868110156125b25781548b820152908501908301612599565b505084890196505b509498975050505050505050565b600082516125da818460208701612083565b9190910192915050565b6000602082840312156125f657600080fd5b8151611ff0816121be565b634e487b7160e01b600052601260045260246000fdfea26469706673582212202039dc0aa00140d747566f0c55dee0454c86fd9d2e68382f0621e6e281a613bc64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000fe73dba49b8531c639dcddee764dcaf49d91066b0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000000f416c7068612047617264656e657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024147000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Alpha Gardeners
Arg [1] : _symbol (string): AG
Arg [2] : _taxRecipient (address): 0xFE73DBa49b8531C639DCDdeE764dcaf49D91066B
Arg [3] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000fe73dba49b8531c639dcddee764dcaf49d91066b
Arg [3] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 416c7068612047617264656e6572730000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4147000000000000000000000000000000000000000000000000000000000000
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.