Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 56 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 22917181 | 253 days ago | IN | 0 ETH | 0.00016547 | ||||
| Approve | 22891426 | 257 days ago | IN | 0 ETH | 0.00016056 | ||||
| Approve | 22891395 | 257 days ago | IN | 0 ETH | 0.00038717 | ||||
| Approve | 22891391 | 257 days ago | IN | 0 ETH | 0.00024751 | ||||
| Approve | 22891390 | 257 days ago | IN | 0 ETH | 0.00020635 | ||||
| Approve | 22891383 | 257 days ago | IN | 0 ETH | 0.000144 | ||||
| Approve | 22891378 | 257 days ago | IN | 0 ETH | 0.00029146 | ||||
| Approve | 22891375 | 257 days ago | IN | 0 ETH | 0.00037826 | ||||
| Approve | 22891374 | 257 days ago | IN | 0 ETH | 0.00153888 | ||||
| Approve | 22891374 | 257 days ago | IN | 0 ETH | 0.00153888 | ||||
| Approve | 22891373 | 257 days ago | IN | 0 ETH | 0.00027528 | ||||
| Approve | 22891373 | 257 days ago | IN | 0 ETH | 0.00032196 | ||||
| Approve | 22891372 | 257 days ago | IN | 0 ETH | 0.00027959 | ||||
| Approve | 22891372 | 257 days ago | IN | 0 ETH | 0.00027995 | ||||
| Approve | 22891372 | 257 days ago | IN | 0 ETH | 0.00027995 | ||||
| Approve | 22891371 | 257 days ago | IN | 0 ETH | 0.00027733 | ||||
| Approve | 22891367 | 257 days ago | IN | 0 ETH | 0.00027803 | ||||
| Approve | 22891366 | 257 days ago | IN | 0 ETH | 0.00037046 | ||||
| Approve | 22891366 | 257 days ago | IN | 0 ETH | 0.00037046 | ||||
| Approve | 22891366 | 257 days ago | IN | 0 ETH | 0.00037046 | ||||
| Approve | 22891365 | 257 days ago | IN | 0 ETH | 0.00027176 | ||||
| Approve | 22891365 | 257 days ago | IN | 0 ETH | 0.00041198 | ||||
| Approve | 22891364 | 257 days ago | IN | 0 ETH | 0.00027269 | ||||
| Approve | 22891364 | 257 days ago | IN | 0 ETH | 0.00036618 | ||||
| Approve | 22891363 | 257 days ago | IN | 0 ETH | 0.00026982 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 22899409 | 256 days ago | 0.00019323 ETH | ||||
| Transfer | 22899409 | 256 days ago | 0.00019323 ETH | ||||
| Transfer | 22899409 | 256 days ago | 0.00038647 ETH | ||||
| Transfer | 22891409 | 257 days ago | 0.0129378 ETH | ||||
| Transfer | 22891409 | 257 days ago | 0.0129378 ETH | ||||
| Transfer | 22891409 | 257 days ago | 0.0258756 ETH | ||||
| Transfer | 22891406 | 257 days ago | 0.01234854 ETH | ||||
| Transfer | 22891406 | 257 days ago | 0.01234854 ETH | ||||
| Transfer | 22891406 | 257 days ago | 0.02469709 ETH | ||||
| Transfer | 22891403 | 257 days ago | 0.01298036 ETH | ||||
| Transfer | 22891403 | 257 days ago | 0.01298036 ETH | ||||
| Transfer | 22891403 | 257 days ago | 0.02596072 ETH | ||||
| Transfer | 22891400 | 257 days ago | 0.01498057 ETH | ||||
| Transfer | 22891400 | 257 days ago | 0.01498057 ETH | ||||
| Transfer | 22891400 | 257 days ago | 0.02996115 ETH | ||||
| Transfer | 22891399 | 257 days ago | 0.01602435 ETH | ||||
| Transfer | 22891399 | 257 days ago | 0.01602435 ETH | ||||
| Transfer | 22891399 | 257 days ago | 0.0320487 ETH | ||||
| Transfer | 22891398 | 257 days ago | 0.01635045 ETH | ||||
| Transfer | 22891398 | 257 days ago | 0.01635045 ETH | ||||
| Transfer | 22891398 | 257 days ago | 0.0327009 ETH | ||||
| Transfer | 22891397 | 257 days ago | 0.01625718 ETH | ||||
| Transfer | 22891397 | 257 days ago | 0.01625718 ETH | ||||
| Transfer | 22891397 | 257 days ago | 0.03251436 ETH | ||||
| Transfer | 22891396 | 257 days ago | 0.01769109 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BROKIE
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract BROKIE is Ownable, ERC20 {
IUniswapV2Router02 public immutable swapRouter;
address public constant ZERO_ADDRESS = address(0);
address public constant BURN_ADDRESS = address(0xdEaD);
address public immutable swapPair;
address public taxWallet;
address public devWallet;
bool public limitsEnabled;
bool public cooldownEnabled;
bool public feesEnabled;
bool private inSwapProcess;
bool public isActivated;
bool public taxesActive = true;
uint256 public activationBlock;
uint256 public activationTime;
uint256 private lastSwapBlock;
uint256 public constant MAX_TOTAL_FEE = 35;
uint256 public maxBuyLimit;
uint256 public maxSellLimit;
uint256 public maxWalletLimit;
uint256 public tokensForSwap;
uint256 public buyTax;
uint256 public sellTax;
uint256 public transferTax;
mapping(address => bool) public blacklistedBots;
mapping(address => bool) public excludedFromFees;
mapping(address => bool) public excludedFromLimits;
mapping(address => bool) public marketPairs;
mapping(address => uint256) private _lastTransferBlock;
event Activation();
event taxWalletUpdated(address newWallet, address oldWallet);
event DevWalletUpdated(address newWallet, address oldWallet);
event LimitsStatusChanged(bool status);
event CooldownStatusChanged(bool status);
event FeesStatusChanged(bool status);
event MaxBuyLimitUpdated(uint256 amount);
event MaxSellLimitUpdated(uint256 amount);
event MaxWalletLimitUpdated(uint256 amount);
event TokensForSwapUpdated(uint256 newValue, uint256 oldValue);
event BuyTaxUpdated(uint256 newValue, uint256 oldValue);
event SellTaxUpdated(uint256 newValue, uint256 oldValue);
event TransferTaxUpdated(uint256 newValue, uint256 oldValue);
event ExcludedFromFees(address account, bool isExcluded);
event ExcludedFromLimits(address account, bool isExcluded);
event BotStatusUpdated(address account, bool isBlacklisted);
event MarketPairStatusUpdated(address pair, bool value);
event StuckTokensWithdrawn(address token, uint256 amount);
error AlreadyActivated();
error InvalidAddress();
error AmountTooSmall();
error AmountTooLarge();
error FeeTooHigh();
error PairAlreadySet();
error NoETHToWithdraw();
error NoTokensToWithdraw();
error ETHWithdrawalFailed();
error BotActivityDetected();
error TransferCooldown();
error ExceedsMaxBuyLimit();
error ExceedsMaxSellLimit();
error ExceedsMaxWalletLimit();
error NotActivated();
modifier lockSwapProcess() {
inSwapProcess = true;
_;
inSwapProcess = false;
}
constructor() Ownable(msg.sender) ERC20("BROKIE", "BROKIE") {
address owner = msg.sender;
_mint(owner, 1_000_000_000 ether);
uint256 totalSupplyTokens = totalSupply();
taxWallet = 0x9B49382DB1251170919ed396159D8bcaE138e6A2;
devWallet = 0x9B49382DB1251170919ed396159D8bcaE138e6A2;
maxBuyLimit = (totalSupplyTokens * 2) / 100;
maxSellLimit = (totalSupplyTokens * 2) / 100;
maxWalletLimit = (totalSupplyTokens * 2) / 100;
tokensForSwap = (totalSupplyTokens * 5) / 10000;
limitsEnabled = true;
cooldownEnabled = false;
feesEnabled = true;
buyTax = 10;
sellTax = 10;
transferTax = 0;
swapRouter = IUniswapV2Router02(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(
address(this),
swapRouter.WETH()
);
_setMarketPair(swapPair, true);
_approve(address(this), address(swapRouter), type(uint256).max);
_excludeFromFees(address(this), true);
_excludeFromFees(BURN_ADDRESS, true);
_excludeFromFees(owner, true);
_excludeFromFees(taxWallet, true);
_excludeFromFees(devWallet, true);
_excludeFromLimits(address(this), true);
_excludeFromLimits(BURN_ADDRESS, true);
_excludeFromLimits(owner, true);
_excludeFromLimits(taxWallet, true);
_excludeFromLimits(devWallet, true);
}
receive() external payable {}
fallback() external payable {}
function _transferOwnership(address newOwner) internal override {
address oldOwner = owner();
if (oldOwner != ZERO_ADDRESS) {
_excludeFromFees(oldOwner, false);
_excludeFromLimits(oldOwner, false);
}
_excludeFromFees(newOwner, true);
_excludeFromLimits(newOwner, true);
super._transferOwnership(newOwner);
}
function activate() external onlyOwner {
require(!isActivated, AlreadyActivated());
isActivated = true;
activationBlock = block.number;
activationTime = block.timestamp;
emit Activation();
}
function updatetaxWallet(address _taxWallet) external onlyOwner {
require(_taxWallet != ZERO_ADDRESS, InvalidAddress());
address oldWallet = taxWallet;
taxWallet = _taxWallet;
emit taxWalletUpdated(taxWallet, oldWallet);
}
function updateDevWallet(address _devWallet) external onlyOwner {
require(_devWallet != ZERO_ADDRESS, InvalidAddress());
address oldWallet = devWallet;
devWallet = _devWallet;
emit DevWalletUpdated(devWallet, oldWallet);
}
function setLimitsEnabled(bool value) external onlyOwner {
limitsEnabled = value;
emit LimitsStatusChanged(value);
}
function setCooldownEnabled(bool value) external onlyOwner {
cooldownEnabled = value;
emit CooldownStatusChanged(value);
}
function setFeesEnabled(bool value) external onlyOwner {
feesEnabled = value;
emit FeesStatusChanged(value);
}
function setMaxBuyLimit(uint256 amount) external onlyOwner {
require(amount >= ((totalSupply() * 2) / 1000), AmountTooSmall());
maxBuyLimit = amount;
emit MaxBuyLimitUpdated(maxBuyLimit);
}
function setMaxSellLimit(uint256 amount) external onlyOwner {
require(amount >= ((totalSupply() * 2) / 1000), AmountTooSmall());
maxSellLimit = amount;
emit MaxSellLimitUpdated(maxSellLimit);
}
function setMaxWalletLimit(uint256 amount) external onlyOwner {
require(amount >= ((totalSupply() * 3) / 1000), AmountTooSmall());
maxWalletLimit = amount;
emit MaxWalletLimitUpdated(maxWalletLimit);
}
function setTokensForSwap(uint256 amount) external onlyOwner {
uint256 totalSupplyTokens = totalSupply();
require(amount >= (totalSupplyTokens * 1) / 1000000, AmountTooSmall());
require(amount <= (totalSupplyTokens * 5) / 1000, AmountTooLarge());
uint256 oldValue = tokensForSwap;
tokensForSwap = amount;
emit TokensForSwapUpdated(amount, oldValue);
}
function setTax(uint256 _buyTax, uint256 _sellTax) external onlyOwner {
require(_buyTax <= MAX_TOTAL_FEE, FeeTooHigh());
require(_sellTax <= MAX_TOTAL_FEE, FeeTooHigh());
buyTax = _buyTax;
sellTax = _sellTax;
}
function setTransferTax(uint256 _transferTax) external onlyOwner {
require(_transferTax <= MAX_TOTAL_FEE, FeeTooHigh());
uint256 oldValue = transferTax;
transferTax = _transferTax;
emit TransferTaxUpdated(_transferTax, oldValue);
}
function excludeFromFees(
address[] calldata accounts,
bool value
) external onlyOwner {
for (uint256 i = 0; i < accounts.length; i++) {
_excludeFromFees(accounts[i], value);
}
}
function excludeFromLimits(
address[] calldata accounts,
bool value
) external onlyOwner {
for (uint256 i = 0; i < accounts.length; i++) {
_excludeFromLimits(accounts[i], value);
}
}
function updateBlacklistedBots(
address[] calldata accounts,
bool value
) external onlyOwner {
for (uint256 i = 0; i < accounts.length; i++) {
if (
(!marketPairs[accounts[i]]) &&
(accounts[i] != address(swapRouter)) &&
(accounts[i] != address(this)) &&
(accounts[i] != ZERO_ADDRESS) &&
(!excludedFromFees[accounts[i]] &&
!excludedFromLimits[accounts[i]])
) _updateBotStatus(accounts[i], value);
}
}
function setMarketPair(address pair, bool value) external onlyOwner {
require(!marketPairs[pair], PairAlreadySet());
_setMarketPair(pair, value);
}
function withdrawStuckTokens(address _token) external onlyOwner {
address owner = msg.sender;
uint256 amount;
if (_token == ZERO_ADDRESS) {
bool success;
amount = address(this).balance;
require(amount > 0, NoETHToWithdraw());
(success, ) = address(owner).call{value: amount}("");
require(success, ETHWithdrawalFailed());
} else {
amount = IERC20(_token).balanceOf(address(this));
require(amount > 0, NoTokensToWithdraw());
IERC20(_token).transfer(msg.sender, amount);
}
emit StuckTokensWithdrawn(_token, amount);
}
function _update(
address from,
address to,
uint256 amount
) internal virtual override {
address sender = msg.sender;
address origin = tx.origin;
require(!blacklistedBots[from], BotActivityDetected());
require(
sender == from || !blacklistedBots[sender],
BotActivityDetected()
);
require(
origin == from || origin == sender || !blacklistedBots[origin],
BotActivityDetected()
);
require(
isActivated || excludedFromLimits[from] || excludedFromLimits[to],
NotActivated()
);
bool applyLimits = limitsEnabled &&
!inSwapProcess &&
!(excludedFromLimits[from] || excludedFromLimits[to]);
if (applyLimits) {
if (
from != owner() &&
to != owner() &&
to != ZERO_ADDRESS &&
to != BURN_ADDRESS
) {
if (cooldownEnabled) {
if (to != address(swapRouter) && to != swapPair) {
require(
_lastTransferBlock[origin] < block.number - 3 &&
_lastTransferBlock[to] < block.number - 3,
TransferCooldown()
);
_lastTransferBlock[origin] = block.number;
_lastTransferBlock[to] = block.number;
}
}
if (marketPairs[from] && !excludedFromLimits[to]) {
require(amount <= maxBuyLimit, ExceedsMaxBuyLimit());
require(
amount + balanceOf(to) <= maxWalletLimit,
ExceedsMaxWalletLimit()
);
} else if (marketPairs[to] && !excludedFromLimits[from]) {
require(amount <= maxSellLimit, ExceedsMaxSellLimit());
} else if (!excludedFromLimits[to]) {
require(
amount + balanceOf(to) <= maxWalletLimit,
ExceedsMaxWalletLimit()
);
}
}
}
bool applyFee = feesEnabled &&
!inSwapProcess &&
!(excludedFromFees[from] || excludedFromFees[to]);
if (applyFee) {
uint256 feeAmount = 0;
uint256 dynamicFee = getDynamicTax();
if ((marketPairs[to] || marketPairs[from]) && dynamicFee > 0) {
feeAmount = (amount * dynamicFee) / 100;
} else if (
!marketPairs[to] && !marketPairs[from] && transferTax > 0
) {
feeAmount = (amount * transferTax) / 100;
}
if (feeAmount > 0) {
amount -= feeAmount;
super._update(from, address(this), feeAmount);
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= tokensForSwap;
if (applyFee && !marketPairs[from] && canSwap) {
if (block.number > lastSwapBlock) {
_swapTokens(contractTokenBalance);
lastSwapBlock = block.number;
}
}
super._update(from, to, amount);
}
function getDynamicTax() public view returns (uint256) {
if (!isActivated || !taxesActive) return 0;
uint256 blocksSinceLaunch = block.number - activationBlock;
if (blocksSinceLaunch < 5) return 70;
if (blocksSinceLaunch < 10) return 50;
if (blocksSinceLaunch < 12) return 30;
if (blocksSinceLaunch < 14) return 10;
return 0;
}
function _swapTokens(uint256 tokenAmount) internal virtual lockSwapProcess {
bool success;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = swapRouter.WETH();
uint256 maxSwapAmount = tokensForSwap * 6;
if (tokenAmount > maxSwapAmount) {
tokenAmount = maxSwapAmount;
}
swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
uint256 ethBalance = address(this).balance;
uint256 ethForRevenue = ethBalance / 2;
uint256 ethForDevelopment = ethBalance - ethForRevenue;
(success, ) = address(taxWallet).call{value: ethForRevenue}("");
(success, ) = address(devWallet).call{value: ethForDevelopment}("");
}
function _excludeFromFees(address account, bool value) internal virtual {
excludedFromFees[account] = value;
emit ExcludedFromFees(account, value);
}
function _excludeFromLimits(address account, bool value) internal virtual {
excludedFromLimits[account] = value;
emit ExcludedFromLimits(account, value);
}
function _updateBotStatus(address account, bool value) internal virtual {
blacklistedBots[account] = value;
emit BotStatusUpdated(account, value);
}
function _setMarketPair(address pair, bool value) internal virtual {
marketPairs[pair] = value;
emit MarketPairStatusUpdated(pair, value);
}
function setTaxesActive(bool value) external onlyOwner {
taxesActive = value;
}
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
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(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
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,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 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 (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
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 (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(
address to
) external returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(
uint256 amountIn,
address[] calldata path
) external view returns (uint256[] memory amounts);
function getAmountsIn(
uint256 amountOut,
address[] calldata path
) external view returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.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 ERC-20
* applications.
*/
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}.
*
* Both 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}.
*
* Skips emitting an {Approval} event indicating an allowance update. This is not
* required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
*
* 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:
*
* ```solidity
* 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
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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.1.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 ERC-20 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.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC-20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 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 ERC-721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-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 ERC-1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 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/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/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": "cancun",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyActivated","type":"error"},{"inputs":[],"name":"AmountTooLarge","type":"error"},{"inputs":[],"name":"AmountTooSmall","type":"error"},{"inputs":[],"name":"BotActivityDetected","type":"error"},{"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":"ETHWithdrawalFailed","type":"error"},{"inputs":[],"name":"ExceedsMaxBuyLimit","type":"error"},{"inputs":[],"name":"ExceedsMaxSellLimit","type":"error"},{"inputs":[],"name":"ExceedsMaxWalletLimit","type":"error"},{"inputs":[],"name":"FeeTooHigh","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"NoETHToWithdraw","type":"error"},{"inputs":[],"name":"NoTokensToWithdraw","type":"error"},{"inputs":[],"name":"NotActivated","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PairAlreadySet","type":"error"},{"inputs":[],"name":"TransferCooldown","type":"error"},{"anonymous":false,"inputs":[],"name":"Activation","type":"event"},{"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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BotStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"BuyTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"CooldownStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"FeesStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LimitsStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"MarketPairStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxBuyLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxSellLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletLimitUpdated","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":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"SellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StuckTokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"TokensForSwapUpdated","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":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"TransferTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldWallet","type":"address"}],"name":"taxWalletUpdated","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"blacklistedBots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","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":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDynamicTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setTaxesActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTokensForSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferTax","type":"uint256"}],"name":"setTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxesActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"updateBlacklistedBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxWallet","type":"address"}],"name":"updatetaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040526007805460ff60c81b1916600160c81b179055348015610022575f5ffd5b5060408051808201825260068082526542524f4b494560d01b602080840182905284518086019095529184529083015290338061007957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610082816103b4565b50600461008f83826111a7565b50600561009c82826111a7565b503391506100b89050816b033b2e3c9fd0803ce80000006103fc565b5f6100c260035490565b60068054739b49382db1251170919ed396159d8bcae138e6a26001600160a01b0319918216811790925560078054909116909117905590506064610107826002611275565b6101119190611292565b600b556064610121826002611275565b61012b9190611292565b600c55606461013b826002611275565b6101459190611292565b600d55612710610156826005611275565b6101609190611292565b600e556007805462ffffff60a01b19166201000160a01b179055600a600f8190556010555f601155737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156101db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ff91906112b1565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027091906112b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156102ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102de91906112b1565b6001600160a01b031660a08190526102f7906001610430565b61030b306080515f1961049360201b60201c565b6103163060016104a5565b61032361dead60016104a5565b61032e8260016104a5565b600654610345906001600160a01b031660016104a5565b60075461035c906001600160a01b031660016104a5565b610367306001610500565b61037461dead6001610500565b61037f826001610500565b600654610396906001600160a01b03166001610500565b6007546103ad906001600160a01b03166001610500565b5050611388565b5f546001600160a01b031680156103d9576103cf815f6104a5565b6103d9815f610500565b6103e48260016104a5565b6103ef826001610500565b6103f88261055b565b5050565b6001600160a01b0382166104255760405163ec442f0560e01b81525f6004820152602401610070565b6103f85f83836105aa565b6001600160a01b0382165f81815260156020908152604091829020805460ff19168515159081179091558251938452908301527f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc4242191015b60405180910390a15050565b6104a08383836001610c34565b505050565b6001600160a01b0382165f81815260136020908152604091829020805460ff19168515159081179091558251938452908301527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb9101610487565b6001600160a01b0382165f81815260146020908152604091829020805460ff19168515159081179091558251938452908301527f74392251b09500cc108c71712e5e7e0392be9075a74a24f1494551cfa8e068709101610487565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383165f908152601260205260409020543390329060ff16156105e757604051631a30f03760e31b815260040160405180910390fd5b846001600160a01b0316826001600160a01b0316148061061f57506001600160a01b0382165f9081526012602052604090205460ff16155b61063c57604051631a30f03760e31b815260040160405180910390fd5b846001600160a01b0316816001600160a01b0316148061066d5750816001600160a01b0316816001600160a01b0316145b8061069057506001600160a01b0381165f9081526012602052604090205460ff16155b6106ad57604051631a30f03760e31b815260040160405180910390fd5b600754600160c01b900460ff16806106dc57506001600160a01b0385165f9081526014602052604090205460ff165b806106fe57506001600160a01b0384165f9081526014602052604090205460ff165b61071b5760405163037c597f60e01b815260040160405180910390fd5b6007545f90600160a01b900460ff1680156107405750600754600160b81b900460ff16155b801561078657506001600160a01b0386165f9081526014602052604090205460ff168061078457506001600160a01b0385165f9081526014602052604090205460ff165b155b90508015610a45575f546001600160a01b038781169116148015906107b857505f546001600160a01b03868116911614155b80156107cc57506001600160a01b03851615155b80156107e357506001600160a01b03851661dead14155b15610a4557600754600160a81b900460ff16156108cb576080516001600160a01b0316856001600160a01b031614158015610832575060a0516001600160a01b0316856001600160a01b031614155b156108cb576108426003436112de565b6001600160a01b0383165f90815260166020526040902054108015610887575061086d6003436112de565b6001600160a01b0386165f90815260166020526040902054105b6108a4576040516329a226cf60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260166020526040808220439081905592881682529020555b6001600160a01b0386165f9081526015602052604090205460ff16801561090a57506001600160a01b0385165f9081526014602052604090205460ff16155b1561097b57600b54841115610932576040516344df090f60e11b815260040160405180910390fd5b600d546001600160a01b0386165f9081526001602052604090205461095790866112f1565b111561097657604051633b63e02960e11b815260040160405180910390fd5b610a45565b6001600160a01b0385165f9081526015602052604090205460ff1680156109ba57506001600160a01b0386165f9081526014602052604090205460ff16155b156109e257600c5484111561097657604051630a8e28e160e41b815260040160405180910390fd5b6001600160a01b0385165f9081526014602052604090205460ff16610a4557600d546001600160a01b0386165f90815260016020526040902054610a2690866112f1565b1115610a4557604051633b63e02960e11b815260040160405180910390fd5b6007545f90600160b01b900460ff168015610a6a5750600754600160b81b900460ff16155b8015610ab057506001600160a01b0387165f9081526013602052604090205460ff1680610aae57506001600160a01b0386165f9081526013602052604090205460ff165b155b90508015610bbe575f80610ac2610d07565b6001600160a01b0389165f9081526015602052604090205490915060ff1680610b0257506001600160a01b0389165f9081526015602052604090205460ff165b8015610b0d57505f81115b15610b2f576064610b1e8289611275565b610b289190611292565b9150610b9e565b6001600160a01b0388165f9081526015602052604090205460ff16158015610b6f57506001600160a01b0389165f9081526015602052604090205460ff16155b8015610b7c57505f601154115b15610b9e57606460115488610b919190611275565b610b9b9190611292565b91505b8115610bbb57610bae82886112de565b9650610bbb893084610d92565b50505b305f90815260016020526040902054600e54811015828015610bf857506001600160a01b0389165f9081526015602052604090205460ff16155b8015610c015750805b15610c1e57600a54431115610c1e57610c1982610eb8565b43600a555b610c29898989610d92565b505050505050505050565b6001600160a01b038416610c5d5760405163e602df0560e01b81525f6004820152602401610070565b6001600160a01b038316610c8657604051634a1406b160e11b81525f6004820152602401610070565b6001600160a01b038085165f9081526002602090815260408083209387168352929052208290558015610d0157826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610cf891815260200190565b60405180910390a35b50505050565b6007545f90600160c01b900460ff161580610d2c5750600754600160c81b900460ff16155b15610d3657505f90565b5f60085443610d4591906112de565b90506005811015610d5857604691505090565b600a811015610d6957603291505090565b600c811015610d7a57601e91505090565b600e811015610d8b57600a91505090565b5f91505090565b6001600160a01b038316610dbc578060035f828254610db191906112f1565b90915550610e2c9050565b6001600160a01b0383165f9081526001602052604090205481811015610e0e5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610070565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b038216610e4857600380548290039055610e66565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610eab91815260200190565b60405180910390a3505050565b6007805460ff60b81b1916600160b81b1790556040805160028082526060820183525f928392919060208301908036833701905050905030815f81518110610f0257610f02611304565b60200260200101906001600160a01b031690816001600160a01b0316815250506080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f60573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8491906112b1565b81600181518110610f9757610f97611304565b60200260200101906001600160a01b031690816001600160a01b0316815250505f600e546006610fc79190611275565b905080841115610fd5578093505b6080516001600160a01b031663791ac947855f8530426040518663ffffffff1660e01b815260040161100b959493929190611318565b5f604051808303815f87803b158015611022575f5ffd5b505af1158015611034573d5f5f3e3d5ffd5b504792505f91506110489050600283611292565b90505f61105582846112de565b6006546040519192506001600160a01b03169083905f81818185875af1925050503d805f81146110a0576040519150601f19603f3d011682016040523d82523d5f602084013e6110a5565b606091505b50506007546040519197506001600160a01b03169082905f81818185875af1925050503d805f81146110f2576040519150601f19603f3d011682016040523d82523d5f602084013e6110f7565b606091505b50506007805460ff60b81b191690555050505050505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061113857607f821691505b60208210810361115657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104a057805f5260205f20601f840160051c810160208510156111815750805b601f840160051c820191505b818110156111a0575f815560010161118d565b5050505050565b81516001600160401b038111156111c0576111c0611110565b6111d4816111ce8454611124565b8461115c565b6020601f821160018114611206575f83156111ef5750848201515b5f19600385901b1c1916600184901b1784556111a0565b5f84815260208120601f198516915b828110156112355787850151825560209485019460019092019101611215565b508482101561125257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761128c5761128c611261565b92915050565b5f826112ac57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156112c1575f5ffd5b81516001600160a01b03811681146112d7575f5ffd5b9392505050565b8181038181111561128c5761128c611261565b8082018082111561128c5761128c611261565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156113685783516001600160a01b0316835260209384019390920191600101611341565b50506001600160a01b039590951660608401525050608001529392505050565b60805160a0516128b86113cc5f395f818161049a0152611cb201525f81816108bf01528181610bb101528181611c75015281816122ca01526123b001526128b85ff3fe60806040526004361061033d575f3560e01c8063757765f8116101ad578063ad29ffde116100ea578063dbe66ca01161008e578063f2fde38b1161006b578063f2fde38b146109bb578063f5fc361c146109da578063fccc2813146109f9578063ff64704314610a0e57005b8063dbe66ca01461092a578063dd62ed3e14610958578063f1bd3b7b1461099c57005b8063c31c9c07116100c7578063c31c9c07146108ae578063cb963728146108e1578063cc1776d314610900578063da4493f61461091557005b8063ad29ffde14610842578063b4b11b9514610861578063c16dd4a41461088f57005b80638ea5220f11610151578063a64e4f8a1161012e578063a64e4f8a146107c4578063a901dd92146107e4578063a9059cbb14610803578063a985ceef1461082257005b80638ea5220f1461077257806395d89b4114610791578063a49a910f146107a557005b806380faa3d21161018a57806380faa3d21461070d5780638124f7ac146107225780638b525903146107375780638da5cb5b1461075657005b8063757765f8146106ac5780637b812b41146106cb5780637f635cc0146106f957005b806336884b6e1161027b578063652e2f041161021f5780636aa5b37f116101fc5780636aa5b37f1461063057806370a0823114610645578063715018a614610679578063728d41c91461068d57005b8063652e2f04146105e7578063667f6526146105fc57806366a88d961461061b57005b80634f7041a5116102585780634f7041a51461058c578063538ba4f9146105a15780635932ead1146105b45780635ec1fc6b146105d357005b806336884b6e1461052e57806341aea9de1461054d5780634a8c1fb41461056c57005b80631ecd7d6e116102e257806326991cc8116102bf57806326991cc8146104895780632dc0562d146104d4578063313ce567146104f35780633582ad231461050e57005b80631ecd7d6e1461042757806323b872dd1461043c578063259827e31461045b57005b80630f495a9c1161031b5780630f495a9c146103ac578063106a5a8f146103cb57806318160ddd146103ea5780631816467f1461040857005b806306fdde031461033f578063095ea7b3146103695780630f15f4c014610398575b005b34801561034a575f5ffd5b50610353610a2e565b60405161036091906124f2565b60405180910390f35b348015610374575f5ffd5b5061038861038336600461253b565b610abe565b6040519015158152602001610360565b3480156103a3575f5ffd5b5061033d610ad7565b3480156103b7575f5ffd5b5061033d6103c6366004612572565b610b4f565b3480156103d6575f5ffd5b5061033d6103e5366004612572565b610d62565b3480156103f5575f5ffd5b506003545b604051908152602001610360565b348015610413575f5ffd5b5061033d6104223660046125f4565b610dac565b348015610432575f5ffd5b506103fa600e5481565b348015610447575f5ffd5b50610388610456366004612616565b610e3b565b348015610466575f5ffd5b506103886104753660046125f4565b60126020525f908152604090205460ff1681565b348015610494575f5ffd5b506104bc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610360565b3480156104df575f5ffd5b506006546104bc906001600160a01b031681565b3480156104fe575f5ffd5b5060405160128152602001610360565b348015610519575f5ffd5b5060075461038890600160a01b900460ff1681565b348015610539575f5ffd5b5061033d610548366004612654565b610e5e565b348015610558575f5ffd5b5061033d61056736600461266b565b610ee3565b348015610577575f5ffd5b5060075461038890600160c01b900460ff1681565b348015610597575f5ffd5b506103fa600f5481565b3480156105ac575f5ffd5b506104bc5f81565b3480156105bf575f5ffd5b5061033d6105ce36600461266b565b610f38565b3480156105de575f5ffd5b506103fa610f8d565b3480156105f2575f5ffd5b506103fa600c5481565b348015610607575f5ffd5b5061033d610616366004612686565b611018565b348015610626575f5ffd5b506103fa600d5481565b34801561063b575f5ffd5b506103fa600b5481565b348015610650575f5ffd5b506103fa61065f3660046125f4565b6001600160a01b03165f9081526001602052604090205490565b348015610684575f5ffd5b5061033d61106f565b348015610698575f5ffd5b5061033d6106a7366004612654565b611082565b3480156106b7575f5ffd5b5061033d6106c6366004612654565b611100565b3480156106d6575f5ffd5b506103886106e53660046125f4565b60146020525f908152604090205460ff1681565b348015610704575f5ffd5b506103fa602381565b348015610718575f5ffd5b506103fa60085481565b34801561072d575f5ffd5b506103fa60115481565b348015610742575f5ffd5b5061033d610751366004612654565b61117e565b348015610761575f5ffd5b505f546001600160a01b03166104bc565b34801561077d575f5ffd5b506007546104bc906001600160a01b031681565b34801561079c575f5ffd5b506103536111e6565b3480156107b0575f5ffd5b5061033d6107bf366004612654565b6111f5565b3480156107cf575f5ffd5b5060075461038890600160b01b900460ff1681565b3480156107ef575f5ffd5b5061033d6107fe36600461266b565b6112c1565b34801561080e575f5ffd5b5061038861081d36600461253b565b611316565b34801561082d575f5ffd5b5060075461038890600160a81b900460ff1681565b34801561084d575f5ffd5b5061033d61085c366004612572565b611323565b34801561086c575f5ffd5b5061038861087b3660046125f4565b60156020525f908152604090205460ff1681565b34801561089a575f5ffd5b5061033d6108a93660046126a6565b61136d565b3480156108b9575f5ffd5b506104bc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156108ec575f5ffd5b5061033d6108fb3660046125f4565b6113bc565b34801561090b575f5ffd5b506103fa60105481565b348015610920575f5ffd5b506103fa60095481565b348015610935575f5ffd5b506103886109443660046125f4565b60136020525f908152604090205460ff1681565b348015610963575f5ffd5b506103fa6109723660046126dd565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156109a7575f5ffd5b5061033d6109b636600461266b565b6115a1565b3480156109c6575f5ffd5b5061033d6109d53660046125f4565b6115c7565b3480156109e5575f5ffd5b5061033d6109f43660046125f4565b611609565b348015610a04575f5ffd5b506104bc61dead81565b348015610a19575f5ffd5b5060075461038890600160c81b900460ff1681565b606060048054610a3d90612709565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6990612709565b8015610ab45780601f10610a8b57610100808354040283529160200191610ab4565b820191905f5260205f20905b815481529060010190602001808311610a9757829003601f168201915b5050505050905090565b5f33610acb818585611690565b60019150505b92915050565b610adf6116a2565b600754600160c01b900460ff1615610b0a5760405163ef65161f60e01b815260040160405180910390fd5b6007805460ff60c01b1916600160c01b17905543600855426009556040517f6603428d483ce13b6662b7a6848d769996e12e801bed4b0f1b9e8d10f64d38ba905f90a1565b610b576116a2565b5f5b82811015610d5c5760155f858584818110610b7657610b76612741565b9050602002016020810190610b8b91906125f4565b6001600160a01b0316815260208101919091526040015f205460ff16158015610c0c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316848483818110610beb57610beb612741565b9050602002016020810190610c0091906125f4565b6001600160a01b031614155b8015610c47575030848483818110610c2657610c26612741565b9050602002016020810190610c3b91906125f4565b6001600160a01b031614155b8015610c8257505f848483818110610c6157610c61612741565b9050602002016020810190610c7691906125f4565b6001600160a01b031614155b8015610d1f575060135f858584818110610c9e57610c9e612741565b9050602002016020810190610cb391906125f4565b6001600160a01b0316815260208101919091526040015f205460ff16158015610d1f575060145f858584818110610cec57610cec612741565b9050602002016020810190610d0191906125f4565b6001600160a01b0316815260208101919091526040015f205460ff16155b15610d5457610d54848483818110610d3957610d39612741565b9050602002016020810190610d4e91906125f4565b836116ce565b600101610b59565b50505050565b610d6a6116a2565b5f5b82811015610d5c57610da4848483818110610d8957610d89612741565b9050602002016020810190610d9e91906125f4565b83611729565b600101610d6c565b610db46116a2565b6001600160a01b038116610ddb5760405163e6c4247b60e01b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87191015b60405180910390a15050565b5f33610e48858285611784565b610e538585856117fa565b506001949350505050565b610e666116a2565b6103e8610e7260035490565b610e7d906002612769565b610e879190612780565b811015610ea75760405163617ab12d60e11b815260040160405180910390fd5b600c8190556040518181527f1f41d239159181ddefb13e99853e0e4998e0556aa1f2281281c783e309281062906020015b60405180910390a150565b610eeb6116a2565b60078054821515600160a01b0260ff60a01b199091161790556040517f1da197dc3cab4eceaefd5d0c34df2ed3a08f20a207fb1910c0eceb361e2c965c90610ed890831515815260200190565b610f406116a2565b60078054821515600160a81b0260ff60a81b199091161790556040517f6a53d6c83a7a55d7a07bd490493fceb559161cce588908714e497e54044777d990610ed890831515815260200190565b6007545f90600160c01b900460ff161580610fb25750600754600160c81b900460ff16155b15610fbc57505f90565b5f60085443610fcb919061279f565b90506005811015610fde57604691505090565b600a811015610fef57603291505090565b600c81101561100057601e91505090565b600e81101561101157600a91505090565b5f91505090565b6110206116a2565b60238211156110425760405163cd4e616760e01b815260040160405180910390fd5b60238111156110645760405163cd4e616760e01b815260040160405180910390fd5b600f91909155601055565b6110776116a2565b6110805f611857565b565b61108a6116a2565b6103e861109660035490565b6110a1906003612769565b6110ab9190612780565b8110156110cb5760405163617ab12d60e11b815260040160405180910390fd5b600d8190556040518181527fe2e6151ed0b472c61401059745339ca42474813911b22d24023385def6377e1c90602001610ed8565b6111086116a2565b6103e861111460035490565b61111f906002612769565b6111299190612780565b8110156111495760405163617ab12d60e11b815260040160405180910390fd5b600b8190556040518181527f85668e92bc538f5c140067d68e3375c65b9e4545d2822ec8d807c6782f747d6290602001610ed8565b6111866116a2565b60238111156111a85760405163cd4e616760e01b815260040160405180910390fd5b601180549082905560408051838152602081018390527f6a7b998a4adc393cb692c67fcd563e7971e2ea6f3fe7c9b8fb6dd53cf5b627d09101610e2f565b606060058054610a3d90612709565b6111fd6116a2565b5f61120760035490565b9050620f4240611218826001612769565b6112229190612780565b8210156112425760405163617ab12d60e11b815260040160405180910390fd5b6103e8611250826005612769565b61125a9190612780565b82111561127a57604051630625040160e01b815260040160405180910390fd5b600e80549083905560408051848152602081018390527f65a8c7442ea496b0a28890f1ef48a9819d1f5d747e9a8df155fe862dfd493c9591015b60405180910390a1505050565b6112c96116a2565b60078054821515600160b01b0260ff60b01b199091161790556040517fa6a3dda702515d3130fef8b72d8e25f9aebd0d02e89d10d63c0c31d80b52f4a090610ed890831515815260200190565b5f33610acb8185856117fa565b61132b6116a2565b5f5b82811015610d5c5761136584848381811061134a5761134a612741565b905060200201602081019061135f91906125f4565b8361189b565b60010161132d565b6113756116a2565b6001600160a01b0382165f9081526015602052604090205460ff16156113ae57604051630138835f60e11b815260040160405180910390fd5b6113b882826118f6565b5050565b6113c46116a2565b335f6001600160a01b03831661146a5750475f816113f55760405163cff858f960e01b815260040160405180910390fd5b6040516001600160a01b0384169083905f81818185875af1925050503d805f811461143b576040519150601f19603f3d011682016040523d82523d5f602084013e611440565b606091505b5050809150508061146457604051634088176760e11b815260040160405180910390fd5b50611562565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156114ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d091906127b2565b90505f81116114f257604051637dd28aa760e11b815260040160405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303815f875af115801561153c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156091906127c9565b505b604080516001600160a01b0385168152602081018390527f7aba7eca7d870d5f2f93298379a43957082ef15cdcf64db1f7c731c6b3a2fa4991016112b4565b6115a96116a2565b60078054911515600160c81b0260ff60c81b19909216919091179055565b6115cf6116a2565b6001600160a01b0381166115fd57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61160681611857565b50565b6116116116a2565b6001600160a01b0381166116385760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917fb3dd4b0ccf73b51db7cb2a59fb88d1082b0fa9389d4ce0e85100fe3b26af78c49101610e2f565b61169d8383836001611951565b505050565b5f546001600160a01b031633146110805760405163118cdaa760e01b81523360048201526024016115f4565b6001600160a01b0382165f81815260126020908152604091829020805460ff19168515159081179091558251938452908301527f066e0c23b9ae0bb92a88e9b0985bb7d85fce062730057312b99a9e243fde5ee19101610e2f565b6001600160a01b0382165f81815260146020908152604091829020805460ff19168515159081179091558251938452908301527f74392251b09500cc108c71712e5e7e0392be9075a74a24f1494551cfa8e068709101610e2f565b6001600160a01b038381165f908152600260209081526040808320938616835292905220545f19811015610d5c57818110156117ec57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016115f4565b610d5c84848484035f611951565b6001600160a01b03831661182357604051634b637e8f60e11b81525f60048201526024016115f4565b6001600160a01b03821661184c5760405163ec442f0560e01b81525f60048201526024016115f4565b61169d838383611a23565b5f546001600160a01b0316801561187c57611872815f61189b565b61187c815f611729565b61188782600161189b565b611892826001611729565b6113b8826120e9565b6001600160a01b0382165f81815260136020908152604091829020805460ff19168515159081179091558251938452908301527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb9101610e2f565b6001600160a01b0382165f81815260156020908152604091829020805460ff19168515159081179091558251938452908301527f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc424219101610e2f565b6001600160a01b03841661197a5760405163e602df0560e01b81525f60048201526024016115f4565b6001600160a01b0383166119a357604051634a1406b160e11b81525f60048201526024016115f4565b6001600160a01b038085165f9081526002602090815260408083209387168352929052208290558015610d5c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a1591815260200190565b60405180910390a350505050565b6001600160a01b0383165f908152601260205260409020543390329060ff1615611a6057604051631a30f03760e31b815260040160405180910390fd5b846001600160a01b0316826001600160a01b03161480611a9857506001600160a01b0382165f9081526012602052604090205460ff16155b611ab557604051631a30f03760e31b815260040160405180910390fd5b846001600160a01b0316816001600160a01b03161480611ae65750816001600160a01b0316816001600160a01b0316145b80611b0957506001600160a01b0381165f9081526012602052604090205460ff16155b611b2657604051631a30f03760e31b815260040160405180910390fd5b600754600160c01b900460ff1680611b5557506001600160a01b0385165f9081526014602052604090205460ff165b80611b7757506001600160a01b0384165f9081526014602052604090205460ff165b611b945760405163037c597f60e01b815260040160405180910390fd5b6007545f90600160a01b900460ff168015611bb95750600754600160b81b900460ff16155b8015611bff57506001600160a01b0386165f9081526014602052604090205460ff1680611bfd57506001600160a01b0385165f9081526014602052604090205460ff165b155b90508015611efa575f546001600160a01b03878116911614801590611c3157505f546001600160a01b03868116911614155b8015611c4557506001600160a01b03851615155b8015611c5c57506001600160a01b03851661dead14155b15611efa57600754600160a81b900460ff1615611d80577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614158015611ce757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b15611d8057611cf760034361279f565b6001600160a01b0383165f90815260166020526040902054108015611d3c5750611d2260034361279f565b6001600160a01b0386165f90815260166020526040902054105b611d59576040516329a226cf60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260166020526040808220439081905592881682529020555b6001600160a01b0386165f9081526015602052604090205460ff168015611dbf57506001600160a01b0385165f9081526014602052604090205460ff16155b15611e3057600b54841115611de7576040516344df090f60e11b815260040160405180910390fd5b600d546001600160a01b0386165f90815260016020526040902054611e0c90866127e4565b1115611e2b57604051633b63e02960e11b815260040160405180910390fd5b611efa565b6001600160a01b0385165f9081526015602052604090205460ff168015611e6f57506001600160a01b0386165f9081526014602052604090205460ff16155b15611e9757600c54841115611e2b57604051630a8e28e160e41b815260040160405180910390fd5b6001600160a01b0385165f9081526014602052604090205460ff16611efa57600d546001600160a01b0386165f90815260016020526040902054611edb90866127e4565b1115611efa57604051633b63e02960e11b815260040160405180910390fd5b6007545f90600160b01b900460ff168015611f1f5750600754600160b81b900460ff16155b8015611f6557506001600160a01b0387165f9081526013602052604090205460ff1680611f6357506001600160a01b0386165f9081526013602052604090205460ff165b155b90508015612073575f80611f77610f8d565b6001600160a01b0389165f9081526015602052604090205490915060ff1680611fb757506001600160a01b0389165f9081526015602052604090205460ff165b8015611fc257505f81115b15611fe4576064611fd38289612769565b611fdd9190612780565b9150612053565b6001600160a01b0388165f9081526015602052604090205460ff1615801561202457506001600160a01b0389165f9081526015602052604090205460ff16155b801561203157505f601154115b15612053576064601154886120469190612769565b6120509190612780565b91505b811561207057612063828861279f565b9650612070893084612138565b50505b305f90815260016020526040902054600e548110158280156120ad57506001600160a01b0389165f9081526015602052604090205460ff16155b80156120b65750805b156120d357600a544311156120d3576120ce8261225e565b43600a555b6120de898989612138565b505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316612162578060035f82825461215791906127e4565b909155506121d29050565b6001600160a01b0383165f90815260016020526040902054818110156121b45760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016115f4565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b0382166121ee5760038054829003905561220c565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161225191815260200190565b60405180910390a3505050565b6007805460ff60b81b1916600160b81b1790556040805160028082526060820183525f928392919060208301908036833701905050905030815f815181106122a8576122a8612741565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612324573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234891906127f7565b8160018151811061235b5761235b612741565b60200260200101906001600160a01b031690816001600160a01b0316815250505f600e54600661238b9190612769565b905080841115612399578093505b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123ed9087905f90879030904290600401612812565b5f604051808303815f87803b158015612404575f5ffd5b505af1158015612416573d5f5f3e3d5ffd5b504792505f915061242a9050600283612780565b90505f612437828461279f565b6006546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114612482576040519150601f19603f3d011682016040523d82523d5f602084013e612487565b606091505b50506007546040519197506001600160a01b03169082905f81818185875af1925050503d805f81146124d4576040519150601f19603f3d011682016040523d82523d5f602084013e6124d9565b606091505b50506007805460ff60b81b191690555050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611606575f5ffd5b5f5f6040838503121561254c575f5ffd5b823561255781612527565b946020939093013593505050565b8015158114611606575f5ffd5b5f5f5f60408486031215612584575f5ffd5b833567ffffffffffffffff81111561259a575f5ffd5b8401601f810186136125aa575f5ffd5b803567ffffffffffffffff8111156125c0575f5ffd5b8660208260051b84010111156125d4575f5ffd5b6020918201945092508401356125e981612565565b809150509250925092565b5f60208284031215612604575f5ffd5b813561260f81612527565b9392505050565b5f5f5f60608486031215612628575f5ffd5b833561263381612527565b9250602084013561264381612527565b929592945050506040919091013590565b5f60208284031215612664575f5ffd5b5035919050565b5f6020828403121561267b575f5ffd5b813561260f81612565565b5f5f60408385031215612697575f5ffd5b50508035926020909101359150565b5f5f604083850312156126b7575f5ffd5b82356126c281612527565b915060208301356126d281612565565b809150509250929050565b5f5f604083850312156126ee575f5ffd5b82356126f981612527565b915060208301356126d281612527565b600181811c9082168061271d57607f821691505b60208210810361273b57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ad157610ad1612755565b5f8261279a57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610ad157610ad1612755565b5f602082840312156127c2575f5ffd5b5051919050565b5f602082840312156127d9575f5ffd5b815161260f81612565565b80820180821115610ad157610ad1612755565b5f60208284031215612807575f5ffd5b815161260f81612527565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156128625783516001600160a01b031683526020938401939092019160010161283b565b50506001600160a01b03959095166060840152505060800152939250505056fea26469706673582212205043d2da311b3dd51be59021325e378730c157eeaf0931c2e279ed88d4d4361d64736f6c634300081c0033
Deployed Bytecode
0x60806040526004361061033d575f3560e01c8063757765f8116101ad578063ad29ffde116100ea578063dbe66ca01161008e578063f2fde38b1161006b578063f2fde38b146109bb578063f5fc361c146109da578063fccc2813146109f9578063ff64704314610a0e57005b8063dbe66ca01461092a578063dd62ed3e14610958578063f1bd3b7b1461099c57005b8063c31c9c07116100c7578063c31c9c07146108ae578063cb963728146108e1578063cc1776d314610900578063da4493f61461091557005b8063ad29ffde14610842578063b4b11b9514610861578063c16dd4a41461088f57005b80638ea5220f11610151578063a64e4f8a1161012e578063a64e4f8a146107c4578063a901dd92146107e4578063a9059cbb14610803578063a985ceef1461082257005b80638ea5220f1461077257806395d89b4114610791578063a49a910f146107a557005b806380faa3d21161018a57806380faa3d21461070d5780638124f7ac146107225780638b525903146107375780638da5cb5b1461075657005b8063757765f8146106ac5780637b812b41146106cb5780637f635cc0146106f957005b806336884b6e1161027b578063652e2f041161021f5780636aa5b37f116101fc5780636aa5b37f1461063057806370a0823114610645578063715018a614610679578063728d41c91461068d57005b8063652e2f04146105e7578063667f6526146105fc57806366a88d961461061b57005b80634f7041a5116102585780634f7041a51461058c578063538ba4f9146105a15780635932ead1146105b45780635ec1fc6b146105d357005b806336884b6e1461052e57806341aea9de1461054d5780634a8c1fb41461056c57005b80631ecd7d6e116102e257806326991cc8116102bf57806326991cc8146104895780632dc0562d146104d4578063313ce567146104f35780633582ad231461050e57005b80631ecd7d6e1461042757806323b872dd1461043c578063259827e31461045b57005b80630f495a9c1161031b5780630f495a9c146103ac578063106a5a8f146103cb57806318160ddd146103ea5780631816467f1461040857005b806306fdde031461033f578063095ea7b3146103695780630f15f4c014610398575b005b34801561034a575f5ffd5b50610353610a2e565b60405161036091906124f2565b60405180910390f35b348015610374575f5ffd5b5061038861038336600461253b565b610abe565b6040519015158152602001610360565b3480156103a3575f5ffd5b5061033d610ad7565b3480156103b7575f5ffd5b5061033d6103c6366004612572565b610b4f565b3480156103d6575f5ffd5b5061033d6103e5366004612572565b610d62565b3480156103f5575f5ffd5b506003545b604051908152602001610360565b348015610413575f5ffd5b5061033d6104223660046125f4565b610dac565b348015610432575f5ffd5b506103fa600e5481565b348015610447575f5ffd5b50610388610456366004612616565b610e3b565b348015610466575f5ffd5b506103886104753660046125f4565b60126020525f908152604090205460ff1681565b348015610494575f5ffd5b506104bc7f00000000000000000000000045e69918d3887ebff10208e4343c07107cedf6fa81565b6040516001600160a01b039091168152602001610360565b3480156104df575f5ffd5b506006546104bc906001600160a01b031681565b3480156104fe575f5ffd5b5060405160128152602001610360565b348015610519575f5ffd5b5060075461038890600160a01b900460ff1681565b348015610539575f5ffd5b5061033d610548366004612654565b610e5e565b348015610558575f5ffd5b5061033d61056736600461266b565b610ee3565b348015610577575f5ffd5b5060075461038890600160c01b900460ff1681565b348015610597575f5ffd5b506103fa600f5481565b3480156105ac575f5ffd5b506104bc5f81565b3480156105bf575f5ffd5b5061033d6105ce36600461266b565b610f38565b3480156105de575f5ffd5b506103fa610f8d565b3480156105f2575f5ffd5b506103fa600c5481565b348015610607575f5ffd5b5061033d610616366004612686565b611018565b348015610626575f5ffd5b506103fa600d5481565b34801561063b575f5ffd5b506103fa600b5481565b348015610650575f5ffd5b506103fa61065f3660046125f4565b6001600160a01b03165f9081526001602052604090205490565b348015610684575f5ffd5b5061033d61106f565b348015610698575f5ffd5b5061033d6106a7366004612654565b611082565b3480156106b7575f5ffd5b5061033d6106c6366004612654565b611100565b3480156106d6575f5ffd5b506103886106e53660046125f4565b60146020525f908152604090205460ff1681565b348015610704575f5ffd5b506103fa602381565b348015610718575f5ffd5b506103fa60085481565b34801561072d575f5ffd5b506103fa60115481565b348015610742575f5ffd5b5061033d610751366004612654565b61117e565b348015610761575f5ffd5b505f546001600160a01b03166104bc565b34801561077d575f5ffd5b506007546104bc906001600160a01b031681565b34801561079c575f5ffd5b506103536111e6565b3480156107b0575f5ffd5b5061033d6107bf366004612654565b6111f5565b3480156107cf575f5ffd5b5060075461038890600160b01b900460ff1681565b3480156107ef575f5ffd5b5061033d6107fe36600461266b565b6112c1565b34801561080e575f5ffd5b5061038861081d36600461253b565b611316565b34801561082d575f5ffd5b5060075461038890600160a81b900460ff1681565b34801561084d575f5ffd5b5061033d61085c366004612572565b611323565b34801561086c575f5ffd5b5061038861087b3660046125f4565b60156020525f908152604090205460ff1681565b34801561089a575f5ffd5b5061033d6108a93660046126a6565b61136d565b3480156108b9575f5ffd5b506104bc7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156108ec575f5ffd5b5061033d6108fb3660046125f4565b6113bc565b34801561090b575f5ffd5b506103fa60105481565b348015610920575f5ffd5b506103fa60095481565b348015610935575f5ffd5b506103886109443660046125f4565b60136020525f908152604090205460ff1681565b348015610963575f5ffd5b506103fa6109723660046126dd565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b3480156109a7575f5ffd5b5061033d6109b636600461266b565b6115a1565b3480156109c6575f5ffd5b5061033d6109d53660046125f4565b6115c7565b3480156109e5575f5ffd5b5061033d6109f43660046125f4565b611609565b348015610a04575f5ffd5b506104bc61dead81565b348015610a19575f5ffd5b5060075461038890600160c81b900460ff1681565b606060048054610a3d90612709565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6990612709565b8015610ab45780601f10610a8b57610100808354040283529160200191610ab4565b820191905f5260205f20905b815481529060010190602001808311610a9757829003601f168201915b5050505050905090565b5f33610acb818585611690565b60019150505b92915050565b610adf6116a2565b600754600160c01b900460ff1615610b0a5760405163ef65161f60e01b815260040160405180910390fd5b6007805460ff60c01b1916600160c01b17905543600855426009556040517f6603428d483ce13b6662b7a6848d769996e12e801bed4b0f1b9e8d10f64d38ba905f90a1565b610b576116a2565b5f5b82811015610d5c5760155f858584818110610b7657610b76612741565b9050602002016020810190610b8b91906125f4565b6001600160a01b0316815260208101919091526040015f205460ff16158015610c0c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316848483818110610beb57610beb612741565b9050602002016020810190610c0091906125f4565b6001600160a01b031614155b8015610c47575030848483818110610c2657610c26612741565b9050602002016020810190610c3b91906125f4565b6001600160a01b031614155b8015610c8257505f848483818110610c6157610c61612741565b9050602002016020810190610c7691906125f4565b6001600160a01b031614155b8015610d1f575060135f858584818110610c9e57610c9e612741565b9050602002016020810190610cb391906125f4565b6001600160a01b0316815260208101919091526040015f205460ff16158015610d1f575060145f858584818110610cec57610cec612741565b9050602002016020810190610d0191906125f4565b6001600160a01b0316815260208101919091526040015f205460ff16155b15610d5457610d54848483818110610d3957610d39612741565b9050602002016020810190610d4e91906125f4565b836116ce565b600101610b59565b50505050565b610d6a6116a2565b5f5b82811015610d5c57610da4848483818110610d8957610d89612741565b9050602002016020810190610d9e91906125f4565b83611729565b600101610d6c565b610db46116a2565b6001600160a01b038116610ddb5760405163e6c4247b60e01b815260040160405180910390fd5b600780546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87191015b60405180910390a15050565b5f33610e48858285611784565b610e538585856117fa565b506001949350505050565b610e666116a2565b6103e8610e7260035490565b610e7d906002612769565b610e879190612780565b811015610ea75760405163617ab12d60e11b815260040160405180910390fd5b600c8190556040518181527f1f41d239159181ddefb13e99853e0e4998e0556aa1f2281281c783e309281062906020015b60405180910390a150565b610eeb6116a2565b60078054821515600160a01b0260ff60a01b199091161790556040517f1da197dc3cab4eceaefd5d0c34df2ed3a08f20a207fb1910c0eceb361e2c965c90610ed890831515815260200190565b610f406116a2565b60078054821515600160a81b0260ff60a81b199091161790556040517f6a53d6c83a7a55d7a07bd490493fceb559161cce588908714e497e54044777d990610ed890831515815260200190565b6007545f90600160c01b900460ff161580610fb25750600754600160c81b900460ff16155b15610fbc57505f90565b5f60085443610fcb919061279f565b90506005811015610fde57604691505090565b600a811015610fef57603291505090565b600c81101561100057601e91505090565b600e81101561101157600a91505090565b5f91505090565b6110206116a2565b60238211156110425760405163cd4e616760e01b815260040160405180910390fd5b60238111156110645760405163cd4e616760e01b815260040160405180910390fd5b600f91909155601055565b6110776116a2565b6110805f611857565b565b61108a6116a2565b6103e861109660035490565b6110a1906003612769565b6110ab9190612780565b8110156110cb5760405163617ab12d60e11b815260040160405180910390fd5b600d8190556040518181527fe2e6151ed0b472c61401059745339ca42474813911b22d24023385def6377e1c90602001610ed8565b6111086116a2565b6103e861111460035490565b61111f906002612769565b6111299190612780565b8110156111495760405163617ab12d60e11b815260040160405180910390fd5b600b8190556040518181527f85668e92bc538f5c140067d68e3375c65b9e4545d2822ec8d807c6782f747d6290602001610ed8565b6111866116a2565b60238111156111a85760405163cd4e616760e01b815260040160405180910390fd5b601180549082905560408051838152602081018390527f6a7b998a4adc393cb692c67fcd563e7971e2ea6f3fe7c9b8fb6dd53cf5b627d09101610e2f565b606060058054610a3d90612709565b6111fd6116a2565b5f61120760035490565b9050620f4240611218826001612769565b6112229190612780565b8210156112425760405163617ab12d60e11b815260040160405180910390fd5b6103e8611250826005612769565b61125a9190612780565b82111561127a57604051630625040160e01b815260040160405180910390fd5b600e80549083905560408051848152602081018390527f65a8c7442ea496b0a28890f1ef48a9819d1f5d747e9a8df155fe862dfd493c9591015b60405180910390a1505050565b6112c96116a2565b60078054821515600160b01b0260ff60b01b199091161790556040517fa6a3dda702515d3130fef8b72d8e25f9aebd0d02e89d10d63c0c31d80b52f4a090610ed890831515815260200190565b5f33610acb8185856117fa565b61132b6116a2565b5f5b82811015610d5c5761136584848381811061134a5761134a612741565b905060200201602081019061135f91906125f4565b8361189b565b60010161132d565b6113756116a2565b6001600160a01b0382165f9081526015602052604090205460ff16156113ae57604051630138835f60e11b815260040160405180910390fd5b6113b882826118f6565b5050565b6113c46116a2565b335f6001600160a01b03831661146a5750475f816113f55760405163cff858f960e01b815260040160405180910390fd5b6040516001600160a01b0384169083905f81818185875af1925050503d805f811461143b576040519150601f19603f3d011682016040523d82523d5f602084013e611440565b606091505b5050809150508061146457604051634088176760e11b815260040160405180910390fd5b50611562565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156114ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d091906127b2565b90505f81116114f257604051637dd28aa760e11b815260040160405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303815f875af115801561153c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156091906127c9565b505b604080516001600160a01b0385168152602081018390527f7aba7eca7d870d5f2f93298379a43957082ef15cdcf64db1f7c731c6b3a2fa4991016112b4565b6115a96116a2565b60078054911515600160c81b0260ff60c81b19909216919091179055565b6115cf6116a2565b6001600160a01b0381166115fd57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61160681611857565b50565b6116116116a2565b6001600160a01b0381166116385760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917fb3dd4b0ccf73b51db7cb2a59fb88d1082b0fa9389d4ce0e85100fe3b26af78c49101610e2f565b61169d8383836001611951565b505050565b5f546001600160a01b031633146110805760405163118cdaa760e01b81523360048201526024016115f4565b6001600160a01b0382165f81815260126020908152604091829020805460ff19168515159081179091558251938452908301527f066e0c23b9ae0bb92a88e9b0985bb7d85fce062730057312b99a9e243fde5ee19101610e2f565b6001600160a01b0382165f81815260146020908152604091829020805460ff19168515159081179091558251938452908301527f74392251b09500cc108c71712e5e7e0392be9075a74a24f1494551cfa8e068709101610e2f565b6001600160a01b038381165f908152600260209081526040808320938616835292905220545f19811015610d5c57818110156117ec57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016115f4565b610d5c84848484035f611951565b6001600160a01b03831661182357604051634b637e8f60e11b81525f60048201526024016115f4565b6001600160a01b03821661184c5760405163ec442f0560e01b81525f60048201526024016115f4565b61169d838383611a23565b5f546001600160a01b0316801561187c57611872815f61189b565b61187c815f611729565b61188782600161189b565b611892826001611729565b6113b8826120e9565b6001600160a01b0382165f81815260136020908152604091829020805460ff19168515159081179091558251938452908301527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb9101610e2f565b6001600160a01b0382165f81815260156020908152604091829020805460ff19168515159081179091558251938452908301527f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc424219101610e2f565b6001600160a01b03841661197a5760405163e602df0560e01b81525f60048201526024016115f4565b6001600160a01b0383166119a357604051634a1406b160e11b81525f60048201526024016115f4565b6001600160a01b038085165f9081526002602090815260408083209387168352929052208290558015610d5c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a1591815260200190565b60405180910390a350505050565b6001600160a01b0383165f908152601260205260409020543390329060ff1615611a6057604051631a30f03760e31b815260040160405180910390fd5b846001600160a01b0316826001600160a01b03161480611a9857506001600160a01b0382165f9081526012602052604090205460ff16155b611ab557604051631a30f03760e31b815260040160405180910390fd5b846001600160a01b0316816001600160a01b03161480611ae65750816001600160a01b0316816001600160a01b0316145b80611b0957506001600160a01b0381165f9081526012602052604090205460ff16155b611b2657604051631a30f03760e31b815260040160405180910390fd5b600754600160c01b900460ff1680611b5557506001600160a01b0385165f9081526014602052604090205460ff165b80611b7757506001600160a01b0384165f9081526014602052604090205460ff165b611b945760405163037c597f60e01b815260040160405180910390fd5b6007545f90600160a01b900460ff168015611bb95750600754600160b81b900460ff16155b8015611bff57506001600160a01b0386165f9081526014602052604090205460ff1680611bfd57506001600160a01b0385165f9081526014602052604090205460ff165b155b90508015611efa575f546001600160a01b03878116911614801590611c3157505f546001600160a01b03868116911614155b8015611c4557506001600160a01b03851615155b8015611c5c57506001600160a01b03851661dead14155b15611efa57600754600160a81b900460ff1615611d80577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b031614158015611ce757507f00000000000000000000000045e69918d3887ebff10208e4343c07107cedf6fa6001600160a01b0316856001600160a01b031614155b15611d8057611cf760034361279f565b6001600160a01b0383165f90815260166020526040902054108015611d3c5750611d2260034361279f565b6001600160a01b0386165f90815260166020526040902054105b611d59576040516329a226cf60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260166020526040808220439081905592881682529020555b6001600160a01b0386165f9081526015602052604090205460ff168015611dbf57506001600160a01b0385165f9081526014602052604090205460ff16155b15611e3057600b54841115611de7576040516344df090f60e11b815260040160405180910390fd5b600d546001600160a01b0386165f90815260016020526040902054611e0c90866127e4565b1115611e2b57604051633b63e02960e11b815260040160405180910390fd5b611efa565b6001600160a01b0385165f9081526015602052604090205460ff168015611e6f57506001600160a01b0386165f9081526014602052604090205460ff16155b15611e9757600c54841115611e2b57604051630a8e28e160e41b815260040160405180910390fd5b6001600160a01b0385165f9081526014602052604090205460ff16611efa57600d546001600160a01b0386165f90815260016020526040902054611edb90866127e4565b1115611efa57604051633b63e02960e11b815260040160405180910390fd5b6007545f90600160b01b900460ff168015611f1f5750600754600160b81b900460ff16155b8015611f6557506001600160a01b0387165f9081526013602052604090205460ff1680611f6357506001600160a01b0386165f9081526013602052604090205460ff165b155b90508015612073575f80611f77610f8d565b6001600160a01b0389165f9081526015602052604090205490915060ff1680611fb757506001600160a01b0389165f9081526015602052604090205460ff165b8015611fc257505f81115b15611fe4576064611fd38289612769565b611fdd9190612780565b9150612053565b6001600160a01b0388165f9081526015602052604090205460ff1615801561202457506001600160a01b0389165f9081526015602052604090205460ff16155b801561203157505f601154115b15612053576064601154886120469190612769565b6120509190612780565b91505b811561207057612063828861279f565b9650612070893084612138565b50505b305f90815260016020526040902054600e548110158280156120ad57506001600160a01b0389165f9081526015602052604090205460ff16155b80156120b65750805b156120d357600a544311156120d3576120ce8261225e565b43600a555b6120de898989612138565b505050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316612162578060035f82825461215791906127e4565b909155506121d29050565b6001600160a01b0383165f90815260016020526040902054818110156121b45760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016115f4565b6001600160a01b0384165f9081526001602052604090209082900390555b6001600160a01b0382166121ee5760038054829003905561220c565b6001600160a01b0382165f9081526001602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161225191815260200190565b60405180910390a3505050565b6007805460ff60b81b1916600160b81b1790556040805160028082526060820183525f928392919060208301908036833701905050905030815f815181106122a8576122a8612741565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612324573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061234891906127f7565b8160018151811061235b5761235b612741565b60200260200101906001600160a01b031690816001600160a01b0316815250505f600e54600661238b9190612769565b905080841115612399578093505b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123ed9087905f90879030904290600401612812565b5f604051808303815f87803b158015612404575f5ffd5b505af1158015612416573d5f5f3e3d5ffd5b504792505f915061242a9050600283612780565b90505f612437828461279f565b6006546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114612482576040519150601f19603f3d011682016040523d82523d5f602084013e612487565b606091505b50506007546040519197506001600160a01b03169082905f81818185875af1925050503d805f81146124d4576040519150601f19603f3d011682016040523d82523d5f602084013e6124d9565b606091505b50506007805460ff60b81b191690555050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611606575f5ffd5b5f5f6040838503121561254c575f5ffd5b823561255781612527565b946020939093013593505050565b8015158114611606575f5ffd5b5f5f5f60408486031215612584575f5ffd5b833567ffffffffffffffff81111561259a575f5ffd5b8401601f810186136125aa575f5ffd5b803567ffffffffffffffff8111156125c0575f5ffd5b8660208260051b84010111156125d4575f5ffd5b6020918201945092508401356125e981612565565b809150509250925092565b5f60208284031215612604575f5ffd5b813561260f81612527565b9392505050565b5f5f5f60608486031215612628575f5ffd5b833561263381612527565b9250602084013561264381612527565b929592945050506040919091013590565b5f60208284031215612664575f5ffd5b5035919050565b5f6020828403121561267b575f5ffd5b813561260f81612565565b5f5f60408385031215612697575f5ffd5b50508035926020909101359150565b5f5f604083850312156126b7575f5ffd5b82356126c281612527565b915060208301356126d281612565565b809150509250929050565b5f5f604083850312156126ee575f5ffd5b82356126f981612527565b915060208301356126d281612527565b600181811c9082168061271d57607f821691505b60208210810361273b57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610ad157610ad1612755565b5f8261279a57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610ad157610ad1612755565b5f602082840312156127c2575f5ffd5b5051919050565b5f602082840312156127d9575f5ffd5b815161260f81612565565b80820180821115610ad157610ad1612755565b5f60208284031215612807575f5ffd5b815161260f81612527565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156128625783516001600160a01b031683526020938401939092019160010161283b565b50506001600160a01b03959095166060840152505060800152939250505056fea26469706673582212205043d2da311b3dd51be59021325e378730c157eeaf0931c2e279ed88d4d4361d64736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.