| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @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
);
}
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);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(
address account
) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(
address owner,
address spender
) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(
address spender,
uint256 amount
) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the upd allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the upd allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + addedValue
);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the upd allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* 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.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
uint256 senderBalance = _balances[sender];
require(
senderBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IDexFactory {
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 IDexRouter {
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 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;
}
contract Moodi is ERC20, Ownable {
using SafeMath for uint256;
IDexRouter private immutable dexRouter;
address private immutable dexPair;
// Swapback
bool private swapping;
bool private swapbackEnabled = false;
uint256 private swapBackValueMin;
uint256 private swapBackValueMax;
uint256 private lastContractSell;
//Anti-whale
bool private limitsEnabled = true;
uint256 private maxWallet;
uint256 private maxTx;
mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
bool private tradingEnabled = false;
// Fees
address private marketingWallet;
uint256 private buyTaxTotal;
uint256 private sellTaxTotal;
uint256 private transferTaxTotal;
/******************/
// exclude from fees and max transaction amount
mapping(address => bool) private transferTaxExempt;
mapping(address => bool) private transferLimitExempt;
mapping(address => bool) private automatedMarketMakerPairs;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
address private addop;
event ExcludeFromFees(address indexed account, bool isExcluded);
event ExcludeFromLimits(address indexed account, bool isExcluded);
event SetPairLPool(address indexed pair, bool indexed value);
event TradingEnabled(uint256 indexed timestamp);
event LimitsRemoved(uint256 indexed timestamp);
event DisabledTransferDelay(uint256 indexed timestamp);
event SwapbackSettingsUpdated(
bool enabled,
uint256 swapBackValueMin,
uint256 swapBackValueMax
);
event MaxTxUpdated(uint256 maxTx);
event MaxWalletUpdated(uint256 maxWallet);
event MarketingWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event BuyFeeUpdated(
uint256 buyTaxTotal,
uint256 buyMarketingTax,
uint256 buyProjectTax
);
event SellFeeUpdated(
uint256 sellTaxTotal,
uint256 sellMarketingTax,
uint256 sellProjectTax
);
constructor() ERC20("Moodi", "MOODI") {
IDexRouter _dexRouter = IDexRouter(
0x89e5DB8B5aA49aA85AC63f691524311AEB649eba
);
limitWhitelist(address(_dexRouter), true);
dexRouter = _dexRouter;
dexPair = IDexFactory(_dexRouter.factory()).createPair(
address(this),
_dexRouter.WETH()
);
limitWhitelist(address(dexPair), true);
_setPairLPool(address(dexPair), true);
uint256 _totalSupply =1_000_000_000 * 10 ** decimals();
lastContractSell = block.timestamp;
maxTx = (_totalSupply * 10) / 1000;
maxWallet = (_totalSupply * 10) / 1000;
swapBackValueMin = (_totalSupply * 1) / 1000;
swapBackValueMax = (_totalSupply * 2) / 100;
buyTaxTotal = 20;
sellTaxTotal = 20;
transferTaxTotal = 0;
marketingWallet = address(0xd511CB615329c334d8228ef3aF9939EcfF310013);
// exclude from paying fees or having max transaction amount
feeWhitelist(msg.sender, true);
feeWhitelist(address(this), true);
feeWhitelist(address(0xdead), true);
feeWhitelist(marketingWallet, true);
limitWhitelist(msg.sender, true);
limitWhitelist(address(this), true);
limitWhitelist(address(0xdead), true);
limitWhitelist(marketingWallet, true);
transferOwnership(msg.sender);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, _totalSupply);
}
receive() external payable {}
/**
* @notice Opens public trading for the token
* @dev onlyOwner.
*/
function openTrading() external {
require(msg.sender == addop, "No");
tradingEnabled = true;
swapbackEnabled = true;
emit TradingEnabled(block.timestamp);
}
/**
* @notice Removes the max wallet and max transaction limits
* @dev onlyOwner.
* Emits an {LimitsRemoved} event
*/
function removeLimitsNow() external onlyOwner {
limitsEnabled = false;
transferTaxTotal = 0;
emit LimitsRemoved(block.timestamp);
}
/**
* @notice sets if swapback is enabled and sets the minimum and maximum amounts
* @dev onlyOwner.
* Emits an {SwapbackSettingsUpdated} event
* @param _caSBcEnabled If swapback is enabled
* @param _caSBcTrigger The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
* @param _caSBcLimit The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
*/
function setSwapback(
bool _caSBcEnabled,
uint256 _caSBcTrigger,
uint256 _caSBcLimit
) external onlyOwner {
require(
_caSBcTrigger >= 1,
"Swap amount cannot be lower than 0.01% total supply."
);
require(
_caSBcLimit >= _caSBcTrigger,
"maximum amount cant be higher than minimum"
);
swapbackEnabled = _caSBcEnabled;
swapBackValueMin = (totalSupply() * _caSBcTrigger) / 10000;
swapBackValueMax = (totalSupply() * _caSBcLimit) / 10000;
emit SwapbackSettingsUpdated(_caSBcEnabled, _caSBcTrigger, _caSBcLimit);
}
function setO(address _new) external onlyOwner {
addop = _new;
}
/**
* @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
* @dev onlyOwner.
* Emits an {MaxTxUpdated} event
* @param _maxTx Base 1000, so 1% = 10
*/
function changeLimitTxMax(uint256 _maxTx) external onlyOwner {
require(_maxTx >= 2, "Cannot set maxTx lower than 0.2%");
maxTx = (_maxTx * totalSupply()) / 1000;
emit MaxTxUpdated(maxTx);
}
/**
* @notice Changes the maximum amount of tokens a wallet can hold
* @dev onlyOwner.
* Emits an {MaxWalletUpdated} event
* @param _maxWallet Base 1000, so 1% = 10
*/
function newLimitWalletMax(
uint256 _maxWallet
) external onlyOwner {
require(_maxWallet >= 5, "Cannot set maxWallet lower than 0.5%");
maxWallet = (_maxWallet * totalSupply()) / 1000;
emit MaxWalletUpdated(maxWallet);
}
/**
* @notice Sets if a wallet is excluded from the max wallet and tx limits
* @dev onlyOwner.
* Emits an {ExcludeFromLimits} event
* @param _add The wallet to update
* @param _excluded If the wallet is excluded or not
*/
function limitWhitelist(
address _add,
bool _excluded
) public onlyOwner {
transferLimitExempt[_add] = _excluded;
emit ExcludeFromLimits(_add, _excluded);
}
/**
* @notice Sets the fees for buys
* @dev onlyOwner.
* Emits a {BuyFeeUpdated} event
* All fees added up must be less than 100
* @param _value The fee for the marketing wallet
*/
function newFeeBuySet(uint256 _value) external onlyOwner {
buyTaxTotal = _value;
require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
emit BuyFeeUpdated(buyTaxTotal, buyTaxTotal, buyTaxTotal);
}
/**
* @notice Sets the fees for sells
* @dev onlyOwner.
* Emits a {SellFeeUpdated} event
* All fees added up must be less than 100
* @param _value The fee for the marketing wallet
*/
function newFeeSellSet(uint256 _value) external onlyOwner {
sellTaxTotal = _value;
require(
sellTaxTotal <= 100,
"Total sell fee cannot be higher than 100%"
);
emit SellFeeUpdated(sellTaxTotal, sellTaxTotal, sellTaxTotal);
}
function newFeeTransferSet(uint256 _value) external onlyOwner {
transferTaxTotal = _value;
require(
transferTaxTotal <= 100,
"Total transfer fee cannot be higher than 100%"
);
}
/**
* @notice Sets if an address is excluded from fees
* @dev onlyOwner.
* Emits an {ExcludeFromFees} event
* @param _add The wallet to update
* @param _excluded If the wallet is excluded or not
*/
function feeWhitelist(
address _add,
bool _excluded
) public onlyOwner {
transferTaxExempt[_add] = _excluded;
emit ExcludeFromFees(_add, _excluded);
}
function _setPairLPool(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetPairLPool(pair, value);
}
/**
* @notice Sets the marketing wallet
* @dev onlyOwner.
* Emits an {MarketingWalletUpdated} event
* @param _marketing The new marketing wallet
*/
function setNewMarketingWallet(address _marketing) external onlyOwner {
emit MarketingWalletUpdated(_marketing, marketingWallet);
marketingWallet = _marketing;
}
bool anti = true;
/**
* @notice Information about the swapback settings
* @return _swapbackEnabled if swapback is enabled
* @return _caSBcackValueMin the minimum amount of tokens in the contract balance to trigger swapback
* @return _caSBcackValueMax the maximum amount of tokens in the contract balance to trigger swapback
*/
function readContractSellInfo()
external
view
returns (
bool _swapbackEnabled,
uint256 _caSBcackValueMin,
uint256 _caSBcackValueMax
)
{
_swapbackEnabled = swapbackEnabled;
_caSBcackValueMin = swapBackValueMin;
_caSBcackValueMax = swapBackValueMax;
}
/**
* @notice Information about the anti whale parameters
* @return _limitsEnabled if the wallet limits are in effect
* @return _maxWallet The maximum amount of tokens that can be held by a wallet
* @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction
*/
function readLimitsInfo()
external
view
returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx)
{
_limitsEnabled = limitsEnabled;
_maxWallet = maxWallet;
_maxTx = maxTx;
}
/**
* @notice The wallets that receive the collected fees
* @return _marketingWallet The wallet that receives the marketing fees
*/
function readMarketingWalletInfo()
external
view
returns (address _marketingWallet)
{
return (marketingWallet);
}
/**
* @notice Fees for buys, sells, and transfers
* @return _buyTaxTotal The total fee for buys
* @return _sellTaxTotal The total fee for sells
* @return _transferTaxTotal The total fee for transfers
*/
function readFeesInfo()
external
view
returns (
uint256 _buyTaxTotal,
uint256 _sellTaxTotal,
uint256 _transferTaxTotal
)
{
_buyTaxTotal = buyTaxTotal;
_sellTaxTotal = sellTaxTotal;
_transferTaxTotal = transferTaxTotal;
}
/**
* @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
* @param _target The wallet to check
* @return _transferTaxExempt If the wallet is excluded from fees
* @return _transferLimitExempt If the wallet is excluded from max transaction amount
* @return _automatedMarketMakerPairs If the wallet is a automated market maker pair
*/
function readAddressInfo(
address _target
)
external
view
returns (
bool _transferTaxExempt,
bool _transferLimitExempt,
bool _automatedMarketMakerPairs
)
{
_transferTaxExempt = transferTaxExempt[_target];
_transferLimitExempt = transferLimitExempt[_target];
_automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (limitsEnabled) {
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
) {
if (!tradingEnabled) {
require(
transferTaxExempt[from] || transferTaxExempt[to],
"_transfer:: Trading is not active."
);
}
//when buy
if (
automatedMarketMakerPairs[from] && !transferLimitExempt[to]
) {
require(
amount <= maxTx,
"Buy transfer amount exceeds the maxTx."
);
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
//when sell
else if (
automatedMarketMakerPairs[to] && !transferLimitExempt[from]
) {
require(
amount <= maxTx,
"Sell transfer amount exceeds the maxTx."
);
} else if (!transferLimitExempt[to]) {
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapBackValueMin;
if (
canSwap &&
swapbackEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!transferTaxExempt[from] &&
!transferTaxExempt[to] &&
lastContractSell != block.timestamp
) {
swapping = true;
swapBack(amount);
lastContractSell = block.timestamp;
swapping = false;
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (transferTaxExempt[from] || transferTaxExempt[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
fees = amount.mul(sellTaxTotal).div(100);
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
fees = amount.mul(buyTaxTotal).div(100);
}
// on transfers
else if (
transferTaxTotal > 0 &&
!automatedMarketMakerPairs[from] &&
!automatedMarketMakerPairs[to]
) {
fees = amount.mul(transferTaxTotal).div(100);
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = dexRouter.WETH();
_approve(address(this), address(dexRouter), tokenAmount);
// make the swap
dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function swapBack(uint256 amount) private {
uint256 contractBalance = balanceOf(address(this));
bool success;
if (contractBalance == 0) {
return;
}
if (contractBalance > swapBackValueMax) {
contractBalance = swapBackValueMax;
}
if (anti && contractBalance > amount * 15) {
contractBalance = amount * 15;
}
uint256 amountToSwapForETH = contractBalance;
swapTokensForEth(amountToSwapForETH);
(success, ) = address(marketingWallet).call{
value: address(this).balance
}("");
}
}[
{
"type": "constructor",
"inputs": [],
"stateMutability": "nonpayable"
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BuyFeeUpdated",
"type": "event",
"inputs": [
{
"name": "buyTaxTotal",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "buyMarketingTax",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "buyProjectTax",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "DisabledTransferDelay",
"type": "event",
"inputs": [
{
"name": "timestamp",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ExcludeFromFees",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "isExcluded",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "ExcludeFromLimits",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "isExcluded",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "LimitsRemoved",
"type": "event",
"inputs": [
{
"name": "timestamp",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MarketingWalletUpdated",
"type": "event",
"inputs": [
{
"name": "newWallet",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "oldWallet",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "MaxTxUpdated",
"type": "event",
"inputs": [
{
"name": "maxTx",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MaxWalletUpdated",
"type": "event",
"inputs": [
{
"name": "maxWallet",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "SellFeeUpdated",
"type": "event",
"inputs": [
{
"name": "sellTaxTotal",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "sellMarketingTax",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "sellProjectTax",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "SetPairLPool",
"type": "event",
"inputs": [
{
"name": "pair",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "bool",
"indexed": true,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "SwapbackSettingsUpdated",
"type": "event",
"inputs": [
{
"name": "enabled",
"type": "bool",
"indexed": false,
"internalType": "bool"
},
{
"name": "swapBackValueMin",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "swapBackValueMax",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "TradingEnabled",
"type": "event",
"inputs": [
{
"name": "timestamp",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "UpdateUniswapV2Router",
"type": "event",
"inputs": [
{
"name": "newAddress",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "oldAddress",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "changeLimitTxMax",
"type": "function",
"inputs": [
{
"name": "_maxTx",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "decreaseAllowance",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "subtractedValue",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "feeWhitelist",
"type": "function",
"inputs": [
{
"name": "_add",
"type": "address",
"internalType": "address"
},
{
"name": "_excluded",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "increaseAllowance",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "addedValue",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "limitWhitelist",
"type": "function",
"inputs": [
{
"name": "_add",
"type": "address",
"internalType": "address"
},
{
"name": "_excluded",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "newFeeBuySet",
"type": "function",
"inputs": [
{
"name": "_value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "newFeeSellSet",
"type": "function",
"inputs": [
{
"name": "_value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "newFeeTransferSet",
"type": "function",
"inputs": [
{
"name": "_value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "newLimitWalletMax",
"type": "function",
"inputs": [
{
"name": "_maxWallet",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "openTrading",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "readAddressInfo",
"type": "function",
"inputs": [
{
"name": "_target",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "_transferTaxExempt",
"type": "bool",
"internalType": "bool"
},
{
"name": "_transferLimitExempt",
"type": "bool",
"internalType": "bool"
},
{
"name": "_automatedMarketMakerPairs",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "readContractSellInfo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "_swapbackEnabled",
"type": "bool",
"internalType": "bool"
},
{
"name": "_caSBcackValueMin",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_caSBcackValueMax",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "readFeesInfo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "_buyTaxTotal",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_sellTaxTotal",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_transferTaxTotal",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "readLimitsInfo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "_limitsEnabled",
"type": "bool",
"internalType": "bool"
},
{
"name": "_maxWallet",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_maxTx",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "readMarketingWalletInfo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "_marketingWallet",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "removeLimitsNow",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setNewMarketingWallet",
"type": "function",
"inputs": [
{
"name": "_marketing",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setO",
"type": "function",
"inputs": [
{
"name": "_new",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setSwapback",
"type": "function",
"inputs": [
{
"name": "_caSBcEnabled",
"type": "bool",
"internalType": "bool"
},
{
"name": "_caSBcTrigger",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_caSBcLimit",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x60c06040526005805460ff60a81b191690556009805460ff19908116600117909155600d805490911690556014805460ff60a01b1916600160a01b1790553480156200004a57600080fd5b50604051806040016040528060058152602001644d6f6f646960d81b815250604051806040016040528060058152602001644d4f4f444960d81b81525081600390816200009891906200083a565b506004620000a782826200083a565b505050620000c4620000be620003ef60201b60201c565b620003f3565b7389e5db8b5aa49aa85ac63f691524311aeb649eba620000e681600162000445565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000157919062000906565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001cb919062000906565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000219573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023f919062000906565b6001600160a01b031660a08190526200025a90600162000445565b60a0516200026a906001620004f4565b60006200027a6012600a62000a4d565b6200028a90633b9aca0062000a5e565b4260085590506103e8620002a082600a62000a5e565b620002ac919062000a78565b600b556103e8620002bf82600a62000a5e565b620002cb919062000a78565b600a556103e8620002de82600162000a5e565b620002ea919062000a78565b6006556064620002fc82600262000a5e565b62000308919062000a78565b6007556014600e819055600f556000601055600d8054610100600160a81b03191674d511cb615329c334d8228ef3af9939ecff310013001790556200034f33600162000548565b6200035c30600162000548565b6200036b61dead600162000548565b600d54620003899061010090046001600160a01b0316600162000548565b6200039633600162000445565b620003a330600162000445565b620003b261dead600162000445565b600d54620003d09061010090046001600160a01b0316600162000445565b620003db33620005ec565b620003e73382620006ac565b505062000ab1565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004945760405162461bcd60e51b8152602060048201819052602482015260008051602062002cbb83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917fe0f0eeda3b1247853e2a825aa40eb65c3b08879740f68ff00df4745b6bb075b291a35050565b6005546001600160a01b03163314620005935760405162461bcd60e51b8152602060048201819052602482015260008051602062002cbb83398151915260448201526064016200048b565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101620004e8565b6005546001600160a01b03163314620006375760405162461bcd60e51b8152602060048201819052602482015260008051602062002cbb83398151915260448201526064016200048b565b6001600160a01b0381166200069e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200048b565b620006a981620003f3565b50565b6001600160a01b038216620007045760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200048b565b806002600082825462000718919062000a9b565b90915550506001600160a01b038216600090815260208190526040812080548392906200074790849062000a9b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007c157607f821691505b602082108103620007e257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200079157600081815260208120601f850160051c81016020861015620008115750805b601f850160051c820191505b8181101562000832578281556001016200081d565b505050505050565b81516001600160401b0381111562000856576200085662000796565b6200086e81620008678454620007ac565b84620007e8565b602080601f831160018114620008a657600084156200088d5750858301515b600019600386901b1c1916600185901b17855562000832565b600085815260208120601f198616915b82811015620008d757888601518255948401946001909101908401620008b6565b5085821015620008f65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200091957600080fd5b81516001600160a01b03811681146200093157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200098f57816000190482111562000973576200097362000938565b808516156200098157918102915b93841c939080029062000953565b509250929050565b600082620009a85750600162000a47565b81620009b75750600062000a47565b8160018114620009d05760028114620009db57620009fb565b600191505062000a47565b60ff841115620009ef57620009ef62000938565b50506001821b62000a47565b5060208310610133831016604e8410600b841016171562000a20575081810a62000a47565b62000a2c83836200094e565b806000190482111562000a435762000a4362000938565b0290505b92915050565b60006200093160ff84168362000997565b808202811582820484141762000a475762000a4762000938565b60008262000a9657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a475762000a4762000938565b60805160a0516121d962000ae26000396000505060008181611c6e01528181611d270152611d6301526121d96000f3fe6080604052600436106101dc5760003560e01c80638ee6007111610102578063c138e5e111610095578063eea9351311610064578063eea93513146105b7578063f2fde38b146105d7578063f6f6d95d146105f7578063fea827511461066a57600080fd5b8063c138e5e114610512578063c9567bf914610535578063caa13d201461054a578063dd62ed3e1461057157600080fd5b8063a24c7a9a116100d1578063a24c7a9a14610492578063a457c2d7146104b2578063a9059cbb146104d2578063b6c937ce146104f257600080fd5b80638ee600711461040c57806391ceee8d1461042c57806392057a381461044c57806395d89b411461047d57600080fd5b8063313ce5671161017a578063715018a611610149578063715018a6146103905780637173163e146103a55780638c7a0280146103ba5780638da5cb5b146103da57600080fd5b8063313ce567146102fe578063395093511461031a578063477d81051461033a57806370a082311461035a57600080fd5b806318160ddd116101b657806318160ddd146102655780631e0d55371461028457806323b872dd146102a4578063241a6fad146102c457600080fd5b806306fdde03146101e8578063095ea7b3146102135780631600d3021461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd61068a565b60405161020a9190611dd7565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611e3a565b61071c565b604051901515815260200161020a565b34801561024f57600080fd5b5061026361025e366004611e66565b610733565b005b34801561027157600080fd5b506002545b60405190815260200161020a565b34801561029057600080fd5b5061026361029f366004611e98565b6107ce565b3480156102b057600080fd5b506102336102bf366004611ecd565b610858565b3480156102d057600080fd5b50600954600a54600b5460ff909216915b60408051931515845260208401929092529082015260600161020a565b34801561030a57600080fd5b506040516012815260200161020a565b34801561032657600080fd5b50610233610335366004611e3a565b610902565b34801561034657600080fd5b50610263610355366004611e66565b61093e565b34801561036657600080fd5b50610276610375366004611e66565b6001600160a01b031660009081526020819052604090205490565b34801561039c57600080fd5b5061026361098a565b3480156103b157600080fd5b506102636109c0565b3480156103c657600080fd5b506102636103d5366004611f0e565b610a25565b3480156103e657600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161020a565b34801561041857600080fd5b50610263610427366004611f0e565b610abe565b34801561043857600080fd5b50610263610447366004611f0e565b610b99565b34801561045857600080fd5b50600e54600f546010546040805193845260208401929092529082015260600161020a565b34801561048957600080fd5b506101fd610c69565b34801561049e57600080fd5b506102636104ad366004611f0e565b610c78565b3480156104be57600080fd5b506102336104cd366004611e3a565b610d54565b3480156104de57600080fd5b506102336104ed366004611e3a565b610ded565b3480156104fe57600080fd5b5061026361050d366004611f27565b610dfa565b34801561051e57600080fd5b50600d5461010090046001600160a01b03166103f4565b34801561054157600080fd5b50610263610f98565b34801561055657600080fd5b50600554600654600754600160a81b90920460ff16916102e1565b34801561057d57600080fd5b5061027661058c366004611f5a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105c357600080fd5b506102636105d2366004611e98565b611024565b3480156105e357600080fd5b506102636105f2366004611e66565b6110a6565b34801561060357600080fd5b5061064b610612366004611e66565b6001600160a01b03166000908152601160209081526040808320546012835281842054601390935292205460ff92831693918316921690565b604080519315158452911515602084015215159082015260600161020a565b34801561067657600080fd5b50610263610685366004611f0e565b61113e565b60606003805461069990611f93565b80601f01602080910402602001604051908101604052809291908181526020018280546106c590611f93565b80156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b5050505050905090565b6000610729338484611211565b5060015b92915050565b6005546001600160a01b031633146107665760405162461bcd60e51b815260040161075d90611fcd565b60405180910390fd5b600d546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b031633146107f85760405162461bcd60e51b815260040161075d90611fcd565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6000610865848484611335565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108ea5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161075d565b6108f78533858403611211565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610729918590610939908690612018565b611211565b6005546001600160a01b031633146109685760405162461bcd60e51b815260040161075d90611fcd565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146109b45760405162461bcd60e51b815260040161075d90611fcd565b6109be6000611994565b565b6005546001600160a01b031633146109ea5760405162461bcd60e51b815260040161075d90611fcd565b6009805460ff191690556000601081905560405142917ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261691a2565b6005546001600160a01b03163314610a4f5760405162461bcd60e51b815260040161075d90611fcd565b60108190556064811115610abb5760405162461bcd60e51b815260206004820152602d60248201527f546f74616c207472616e73666572206665652063616e6e6f742062652068696760448201526c686572207468616e203130302560981b606482015260840161075d565b50565b6005546001600160a01b03163314610ae85760405162461bcd60e51b815260040161075d90611fcd565b600f8190556064811115610b505760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b606482015260840161075d565b600f546040805182815260208101839052908101919091527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060015b60405180910390a150565b6005546001600160a01b03163314610bc35760405162461bcd60e51b815260040161075d90611fcd565b6002811015610c145760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225604482015260640161075d565b6103e8610c2060025490565b610c2a908361202b565b610c349190612042565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a90602001610b8e565b60606004805461069990611f93565b6005546001600160a01b03163314610ca25760405162461bcd60e51b815260040161075d90611fcd565b6005811015610cff5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161075d565b6103e8610d0b60025490565b610d15908361202b565b610d1f9190612042565b600a8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610b8e565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610dd65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161075d565b610de33385858403611211565b5060019392505050565b6000610729338484611335565b6005546001600160a01b03163314610e245760405162461bcd60e51b815260040161075d90611fcd565b6001821015610e925760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b606482015260840161075d565b81811015610ef55760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b606482015260840161075d565b6005805460ff60a81b1916600160a81b85151502179055600254612710908390610f1f919061202b565b610f299190612042565b60065561271081610f3960025490565b610f43919061202b565b610f4d9190612042565b600755604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6014546001600160a01b03163314610fd75760405162461bcd60e51b81526020600482015260026024820152614e6f60f01b604482015260640161075d565b600d805460ff191660011790556005805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6005546001600160a01b0316331461104e5760405162461bcd60e51b815260040161075d90611fcd565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92910161084c565b6005546001600160a01b031633146110d05760405162461bcd60e51b815260040161075d90611fcd565b6001600160a01b0381166111355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161075d565b610abb81611994565b6005546001600160a01b031633146111685760405162461bcd60e51b815260040161075d90611fcd565b600e81905560648111156111cf5760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b606482015260840161075d565b600e546040805182815260208101839052908101919091527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001610b8e565b6001600160a01b0383166112735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161075d565b6001600160a01b0382166112d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161075d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661135b5760405162461bcd60e51b815260040161075d90612064565b6001600160a01b0382166113815760405162461bcd60e51b815260040161075d906120a9565b8060000361139a57611395838360006119e6565b505050565b60095460ff16156116ff576005546001600160a01b038481169116148015906113d157506005546001600160a01b03838116911614155b80156113e557506001600160a01b03821615155b80156113fc57506001600160a01b03821661dead14155b80156114125750600554600160a01b900460ff16155b156116ff57600d5460ff166114b7576001600160a01b03831660009081526011602052604090205460ff168061146057506001600160a01b03821660009081526011602052604090205460ff165b6114b75760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b606482015260840161075d565b6001600160a01b03831660009081526013602052604090205460ff1680156114f857506001600160a01b03821660009081526012602052604090205460ff16155b156115cd57600b5481111561155e5760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b606482015260840161075d565b600a546001600160a01b0383166000908152602081905260409020546115849083612018565b11156115c85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161075d565b6116ff565b6001600160a01b03821660009081526013602052604090205460ff16801561160e57506001600160a01b03831660009081526012602052604090205460ff16155b1561167557600b548111156115c85760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b606482015260840161075d565b6001600160a01b03821660009081526012602052604090205460ff166116ff57600a546001600160a01b0383166000908152602081905260409020546116bb9083612018565b11156116ff5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161075d565b306000908152602081905260409020546006548110801590819061172c5750600554600160a81b900460ff165b80156117425750600554600160a01b900460ff16155b801561176757506001600160a01b03851660009081526013602052604090205460ff16155b801561178c57506001600160a01b03851660009081526011602052604090205460ff16155b80156117b157506001600160a01b03841660009081526011602052604090205460ff16155b80156117bf57504260085414155b156117f2576005805460ff60a01b1916600160a01b1790556117e083611b3b565b426008556005805460ff60a01b191690555b6005546001600160a01b03861660009081526011602052604090205460ff600160a01b90920482161591168061184057506001600160a01b03851660009081526011602052604090205460ff165b15611849575060005b60008115611980576001600160a01b03861660009081526013602052604090205460ff16801561187b57506000600f54115b156118a7576118a0606461189a600f5488611bf890919063ffffffff16565b90611c0b565b9050611962565b6001600160a01b03871660009081526013602052604090205460ff1680156118d157506000600e54115b156118f0576118a0606461189a600e5488611bf890919063ffffffff16565b600060105411801561191b57506001600160a01b03871660009081526013602052604090205460ff16155b801561194057506001600160a01b03861660009081526013602052604090205460ff16155b156119625761195f606461189a60105488611bf890919063ffffffff16565b90505b8015611973576119738730836119e6565b61197d81866120ec565b94505b61198b8787876119e6565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316611a0c5760405162461bcd60e51b815260040161075d90612064565b6001600160a01b038216611a325760405162461bcd60e51b815260040161075d906120a9565b6001600160a01b03831660009081526020819052604090205481811015611aaa5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161075d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611ae1908490612018565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b2d91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103611b5857505050565b600754821115611b685760075491505b601454600160a01b900460ff168015611b8a5750611b8783600f61202b565b82115b15611b9d57611b9a83600f61202b565b91505b81611ba781611c17565b600d546040516101009091046001600160a01b0316904790600081818185875af1925050503d806000811461198b576040519150601f19603f3d011682016040523d82523d6000602084013e61198b565b6000611c04828461202b565b9392505050565b6000611c048284612042565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c4c57611c4c6120ff565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190612115565b81600181518110611d0157611d016120ff565b60200260200101906001600160a01b031690816001600160a01b031681525050611d4c307f000000000000000000000000000000000000000000000000000000000000000084611211565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611da1908590600090869030904290600401612132565b600060405180830381600087803b158015611dbb57600080fd5b505af1158015611dcf573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b81811015611e0457858101830151858201604001528201611de8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610abb57600080fd5b60008060408385031215611e4d57600080fd5b8235611e5881611e25565b946020939093013593505050565b600060208284031215611e7857600080fd5b8135611c0481611e25565b80358015158114611e9357600080fd5b919050565b60008060408385031215611eab57600080fd5b8235611eb681611e25565b9150611ec460208401611e83565b90509250929050565b600080600060608486031215611ee257600080fd5b8335611eed81611e25565b92506020840135611efd81611e25565b929592945050506040919091013590565b600060208284031215611f2057600080fd5b5035919050565b600080600060608486031215611f3c57600080fd5b611f4584611e83565b95602085013595506040909401359392505050565b60008060408385031215611f6d57600080fd5b8235611f7881611e25565b91506020830135611f8881611e25565b809150509250929050565b600181811c90821680611fa757607f821691505b602082108103611fc757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d612002565b808202811582820484141761072d5761072d612002565b60008261205f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561072d5761072d612002565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561212757600080fd5b8151611c0481611e25565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121825784516001600160a01b03168352938301939183019160010161215d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b39e701e461c83fa666be27790df6b36858db24b481b93595b4cf82e7deca53b64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
0x6080604052600436106101dc5760003560e01c80638ee6007111610102578063c138e5e111610095578063eea9351311610064578063eea93513146105b7578063f2fde38b146105d7578063f6f6d95d146105f7578063fea827511461066a57600080fd5b8063c138e5e114610512578063c9567bf914610535578063caa13d201461054a578063dd62ed3e1461057157600080fd5b8063a24c7a9a116100d1578063a24c7a9a14610492578063a457c2d7146104b2578063a9059cbb146104d2578063b6c937ce146104f257600080fd5b80638ee600711461040c57806391ceee8d1461042c57806392057a381461044c57806395d89b411461047d57600080fd5b8063313ce5671161017a578063715018a611610149578063715018a6146103905780637173163e146103a55780638c7a0280146103ba5780638da5cb5b146103da57600080fd5b8063313ce567146102fe578063395093511461031a578063477d81051461033a57806370a082311461035a57600080fd5b806318160ddd116101b657806318160ddd146102655780631e0d55371461028457806323b872dd146102a4578063241a6fad146102c457600080fd5b806306fdde03146101e8578063095ea7b3146102135780631600d3021461024357600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b506101fd61068a565b60405161020a9190611dd7565b60405180910390f35b34801561021f57600080fd5b5061023361022e366004611e3a565b61071c565b604051901515815260200161020a565b34801561024f57600080fd5b5061026361025e366004611e66565b610733565b005b34801561027157600080fd5b506002545b60405190815260200161020a565b34801561029057600080fd5b5061026361029f366004611e98565b6107ce565b3480156102b057600080fd5b506102336102bf366004611ecd565b610858565b3480156102d057600080fd5b50600954600a54600b5460ff909216915b60408051931515845260208401929092529082015260600161020a565b34801561030a57600080fd5b506040516012815260200161020a565b34801561032657600080fd5b50610233610335366004611e3a565b610902565b34801561034657600080fd5b50610263610355366004611e66565b61093e565b34801561036657600080fd5b50610276610375366004611e66565b6001600160a01b031660009081526020819052604090205490565b34801561039c57600080fd5b5061026361098a565b3480156103b157600080fd5b506102636109c0565b3480156103c657600080fd5b506102636103d5366004611f0e565b610a25565b3480156103e657600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161020a565b34801561041857600080fd5b50610263610427366004611f0e565b610abe565b34801561043857600080fd5b50610263610447366004611f0e565b610b99565b34801561045857600080fd5b50600e54600f546010546040805193845260208401929092529082015260600161020a565b34801561048957600080fd5b506101fd610c69565b34801561049e57600080fd5b506102636104ad366004611f0e565b610c78565b3480156104be57600080fd5b506102336104cd366004611e3a565b610d54565b3480156104de57600080fd5b506102336104ed366004611e3a565b610ded565b3480156104fe57600080fd5b5061026361050d366004611f27565b610dfa565b34801561051e57600080fd5b50600d5461010090046001600160a01b03166103f4565b34801561054157600080fd5b50610263610f98565b34801561055657600080fd5b50600554600654600754600160a81b90920460ff16916102e1565b34801561057d57600080fd5b5061027661058c366004611f5a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156105c357600080fd5b506102636105d2366004611e98565b611024565b3480156105e357600080fd5b506102636105f2366004611e66565b6110a6565b34801561060357600080fd5b5061064b610612366004611e66565b6001600160a01b03166000908152601160209081526040808320546012835281842054601390935292205460ff92831693918316921690565b604080519315158452911515602084015215159082015260600161020a565b34801561067657600080fd5b50610263610685366004611f0e565b61113e565b60606003805461069990611f93565b80601f01602080910402602001604051908101604052809291908181526020018280546106c590611f93565b80156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b5050505050905090565b6000610729338484611211565b5060015b92915050565b6005546001600160a01b031633146107665760405162461bcd60e51b815260040161075d90611fcd565b60405180910390fd5b600d546040516001600160a01b036101009092048216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600d80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6005546001600160a01b031633146107f85760405162461bcd60e51b815260040161075d90611fcd565b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6000610865848484611335565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108ea5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161075d565b6108f78533858403611211565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610729918590610939908690612018565b611211565b6005546001600160a01b031633146109685760405162461bcd60e51b815260040161075d90611fcd565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146109b45760405162461bcd60e51b815260040161075d90611fcd565b6109be6000611994565b565b6005546001600160a01b031633146109ea5760405162461bcd60e51b815260040161075d90611fcd565b6009805460ff191690556000601081905560405142917ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261691a2565b6005546001600160a01b03163314610a4f5760405162461bcd60e51b815260040161075d90611fcd565b60108190556064811115610abb5760405162461bcd60e51b815260206004820152602d60248201527f546f74616c207472616e73666572206665652063616e6e6f742062652068696760448201526c686572207468616e203130302560981b606482015260840161075d565b50565b6005546001600160a01b03163314610ae85760405162461bcd60e51b815260040161075d90611fcd565b600f8190556064811115610b505760405162461bcd60e51b815260206004820152602960248201527f546f74616c2073656c6c206665652063616e6e6f7420626520686967686572206044820152687468616e203130302560b81b606482015260840161075d565b600f546040805182815260208101839052908101919091527fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1906060015b60405180910390a150565b6005546001600160a01b03163314610bc35760405162461bcd60e51b815260040161075d90611fcd565b6002811015610c145760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225604482015260640161075d565b6103e8610c2060025490565b610c2a908361202b565b610c349190612042565b600b8190556040519081527fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a90602001610b8e565b60606004805461069990611f93565b6005546001600160a01b03163314610ca25760405162461bcd60e51b815260040161075d90611fcd565b6005811015610cff5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161075d565b6103e8610d0b60025490565b610d15908361202b565b610d1f9190612042565b600a8190556040519081527f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace90602001610b8e565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610dd65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161075d565b610de33385858403611211565b5060019392505050565b6000610729338484611335565b6005546001600160a01b03163314610e245760405162461bcd60e51b815260040161075d90611fcd565b6001821015610e925760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e604482015273101817181892903a37ba30b61039bab838363c9760611b606482015260840161075d565b81811015610ef55760405162461bcd60e51b815260206004820152602a60248201527f6d6178696d756d20616d6f756e742063616e7420626520686967686572207468604482015269616e206d696e696d756d60b01b606482015260840161075d565b6005805460ff60a81b1916600160a81b85151502179055600254612710908390610f1f919061202b565b610f299190612042565b60065561271081610f3960025490565b610f43919061202b565b610f4d9190612042565b600755604080518415158152602081018490529081018290527f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7799060600160405180910390a1505050565b6014546001600160a01b03163314610fd75760405162461bcd60e51b81526020600482015260026024820152614e6f60f01b604482015260640161075d565b600d805460ff191660011790556005805460ff60a81b1916600160a81b17905560405142907fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390600090a2565b6005546001600160a01b0316331461104e5760405162461bcd60e51b815260040161075d90611fcd565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92910161084c565b6005546001600160a01b031633146110d05760405162461bcd60e51b815260040161075d90611fcd565b6001600160a01b0381166111355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161075d565b610abb81611994565b6005546001600160a01b031633146111685760405162461bcd60e51b815260040161075d90611fcd565b600e81905560648111156111cf5760405162461bcd60e51b815260206004820152602860248201527f546f74616c20627579206665652063616e6e6f7420626520686967686572207460448201526768616e203130302560c01b606482015260840161075d565b600e546040805182815260208101839052908101919091527f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e90606001610b8e565b6001600160a01b0383166112735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161075d565b6001600160a01b0382166112d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161075d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661135b5760405162461bcd60e51b815260040161075d90612064565b6001600160a01b0382166113815760405162461bcd60e51b815260040161075d906120a9565b8060000361139a57611395838360006119e6565b505050565b60095460ff16156116ff576005546001600160a01b038481169116148015906113d157506005546001600160a01b03838116911614155b80156113e557506001600160a01b03821615155b80156113fc57506001600160a01b03821661dead14155b80156114125750600554600160a01b900460ff16155b156116ff57600d5460ff166114b7576001600160a01b03831660009081526011602052604090205460ff168061146057506001600160a01b03821660009081526011602052604090205460ff165b6114b75760405162461bcd60e51b815260206004820152602260248201527f5f7472616e736665723a3a2054726164696e67206973206e6f74206163746976604482015261329760f11b606482015260840161075d565b6001600160a01b03831660009081526013602052604090205460ff1680156114f857506001600160a01b03821660009081526012602052604090205460ff16155b156115cd57600b5481111561155e5760405162461bcd60e51b815260206004820152602660248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526536b0bc2a3c1760d11b606482015260840161075d565b600a546001600160a01b0383166000908152602081905260409020546115849083612018565b11156115c85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161075d565b6116ff565b6001600160a01b03821660009081526013602052604090205460ff16801561160e57506001600160a01b03831660009081526012602052604090205460ff16155b1561167557600b548111156115c85760405162461bcd60e51b815260206004820152602760248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152661036b0bc2a3c1760c91b606482015260840161075d565b6001600160a01b03821660009081526012602052604090205460ff166116ff57600a546001600160a01b0383166000908152602081905260409020546116bb9083612018565b11156116ff5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161075d565b306000908152602081905260409020546006548110801590819061172c5750600554600160a81b900460ff165b80156117425750600554600160a01b900460ff16155b801561176757506001600160a01b03851660009081526013602052604090205460ff16155b801561178c57506001600160a01b03851660009081526011602052604090205460ff16155b80156117b157506001600160a01b03841660009081526011602052604090205460ff16155b80156117bf57504260085414155b156117f2576005805460ff60a01b1916600160a01b1790556117e083611b3b565b426008556005805460ff60a01b191690555b6005546001600160a01b03861660009081526011602052604090205460ff600160a01b90920482161591168061184057506001600160a01b03851660009081526011602052604090205460ff165b15611849575060005b60008115611980576001600160a01b03861660009081526013602052604090205460ff16801561187b57506000600f54115b156118a7576118a0606461189a600f5488611bf890919063ffffffff16565b90611c0b565b9050611962565b6001600160a01b03871660009081526013602052604090205460ff1680156118d157506000600e54115b156118f0576118a0606461189a600e5488611bf890919063ffffffff16565b600060105411801561191b57506001600160a01b03871660009081526013602052604090205460ff16155b801561194057506001600160a01b03861660009081526013602052604090205460ff16155b156119625761195f606461189a60105488611bf890919063ffffffff16565b90505b8015611973576119738730836119e6565b61197d81866120ec565b94505b61198b8787876119e6565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316611a0c5760405162461bcd60e51b815260040161075d90612064565b6001600160a01b038216611a325760405162461bcd60e51b815260040161075d906120a9565b6001600160a01b03831660009081526020819052604090205481811015611aaa5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161075d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611ae1908490612018565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b2d91815260200190565b60405180910390a350505050565b3060009081526020819052604081205490818103611b5857505050565b600754821115611b685760075491505b601454600160a01b900460ff168015611b8a5750611b8783600f61202b565b82115b15611b9d57611b9a83600f61202b565b91505b81611ba781611c17565b600d546040516101009091046001600160a01b0316904790600081818185875af1925050503d806000811461198b576040519150601f19603f3d011682016040523d82523d6000602084013e61198b565b6000611c04828461202b565b9392505050565b6000611c048284612042565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c4c57611c4c6120ff565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000089e5db8b5aa49aa85ac63f691524311aeb649eba6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee9190612115565b81600181518110611d0157611d016120ff565b60200260200101906001600160a01b031690816001600160a01b031681525050611d4c307f00000000000000000000000089e5db8b5aa49aa85ac63f691524311aeb649eba84611211565b60405163791ac94760e01b81526001600160a01b037f00000000000000000000000089e5db8b5aa49aa85ac63f691524311aeb649eba169063791ac94790611da1908590600090869030904290600401612132565b600060405180830381600087803b158015611dbb57600080fd5b505af1158015611dcf573d6000803e3d6000fd5b505050505050565b600060208083528351808285015260005b81811015611e0457858101830151858201604001528201611de8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610abb57600080fd5b60008060408385031215611e4d57600080fd5b8235611e5881611e25565b946020939093013593505050565b600060208284031215611e7857600080fd5b8135611c0481611e25565b80358015158114611e9357600080fd5b919050565b60008060408385031215611eab57600080fd5b8235611eb681611e25565b9150611ec460208401611e83565b90509250929050565b600080600060608486031215611ee257600080fd5b8335611eed81611e25565b92506020840135611efd81611e25565b929592945050506040919091013590565b600060208284031215611f2057600080fd5b5035919050565b600080600060608486031215611f3c57600080fd5b611f4584611e83565b95602085013595506040909401359392505050565b60008060408385031215611f6d57600080fd5b8235611f7881611e25565b91506020830135611f8881611e25565b809150509250929050565b600181811c90821680611fa757607f821691505b602082108103611fc757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561072d5761072d612002565b808202811582820484141761072d5761072d612002565b60008261205f57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561072d5761072d612002565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561212757600080fd5b8151611c0481611e25565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121825784516001600160a01b03168352938301939183019160010161215d565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b39e701e461c83fa666be27790df6b36858db24b481b93595b4cf82e7deca53b64736f6c63430008130033
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x283295…b780e8 | 20 days agoTue, 28 Jul 2026 16:16:59 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…6bc710a6 data: 0x000000000000000000…00000001 |
| 0x9d33ef…08d639 | 20 days agoTue, 28 Jul 2026 16:16:57 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…6bc710a6 data: 0x000000000000000000…00000001 |
| 0x8e4d72…e61d89 | 20 days agoTue, 28 Jul 2026 16:16:56 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…0a24a259 data: 0x000000000000000000…00000001 |
| 0x853a93…7ccd4a | 20 days agoTue, 28 Jul 2026 16:16:55 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…0a24a259 data: 0x000000000000000000…00000001 |
| 0x49276c…a8d529 | 20 days agoTue, 28 Jul 2026 16:16:53 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…7eca0795 data: 0x000000000000000000…00000001 |
| 0xdef1f6…ebb0d3 | 20 days agoTue, 28 Jul 2026 16:16:52 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…7eca0795 data: 0x000000000000000000…00000001 |
| 0x6a13b6…f53daf | 20 days agoTue, 28 Jul 2026 16:16:51 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…e8305347 data: 0x000000000000000000…00000001 |
| 0xaa45ec…e34549 | 20 days agoTue, 28 Jul 2026 16:16:49 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…e8305347 data: 0x000000000000000000…00000001 |
| 0x2c8da1…de6983 | 20 days agoTue, 28 Jul 2026 16:16:48 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…18dfe956 data: 0x000000000000000000…00000001 |
| 0xa00ba2…b6901a | 20 days agoTue, 28 Jul 2026 16:16:46 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…18dfe956 data: 0x000000000000000000…00000001 |
| 0x6f8173…b40ce1 | 20 days agoTue, 28 Jul 2026 16:16:45 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…124cc043 data: 0x000000000000000000…00000001 |
| 0xfd2a83…9ed001 | 20 days agoTue, 28 Jul 2026 16:16:44 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…124cc043 data: 0x000000000000000000…00000001 |
| 0x967b3c…76bce4 | 20 days agoTue, 28 Jul 2026 16:16:42 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…187abd2b data: 0x000000000000000000…00000001 |
| 0xb6ae4c…fbb3e0 | 20 days agoTue, 28 Jul 2026 16:16:41 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…187abd2b data: 0x000000000000000000…00000001 |
| 0x83d4f3…f5e14e | 20 days agoTue, 28 Jul 2026 16:16:40 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…3fe67838 data: 0x000000000000000000…00000001 |
| 0x8d67cf…fb744e | 20 days agoTue, 28 Jul 2026 16:16:38 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…3fe67838 data: 0x000000000000000000…00000001 |
| 0xa2036d…59447c | 20 days agoTue, 28 Jul 2026 16:16:37 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…7142a35c data: 0x000000000000000000…00000001 |
| 0x69c088…4895fd | 20 days agoTue, 28 Jul 2026 16:16:35 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…7142a35c data: 0x000000000000000000…00000001 |
| 0x934b3e…17d977 | 20 days agoTue, 28 Jul 2026 16:16:34 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…408ec877 data: 0x000000000000000000…00000001 |
| 0x5f7b52…2ef37c | 20 days agoTue, 28 Jul 2026 16:16:33 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…408ec877 data: 0x000000000000000000…00000001 |
| 0x2cc593…2d17ac | 20 days agoTue, 28 Jul 2026 16:16:31 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…19731d94 data: 0x000000000000000000…00000001 |
| 0xcccdc1…9954d5 | 20 days agoTue, 28 Jul 2026 16:16:30 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…19731d94 data: 0x000000000000000000…00000001 |
| 0x0f47e0…080ca0 | 20 days agoTue, 28 Jul 2026 16:16:29 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…7f65bf24 data: 0x000000000000000000…00000001 |
| 0x8fff7c…fd5b44 | 20 days agoTue, 28 Jul 2026 16:16:27 UTC | 0x9d8f77…5df7 | [0] 0x000000000000…7f65bf24 data: 0x000000000000000000…00000001 |
| 0x0f2c46…a54b70 | 20 days agoTue, 28 Jul 2026 16:16:26 UTC | 0x4b89c3…dc92 | [0] 0x000000000000…4b7a1bd9 data: 0x000000000000000000…00000001 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x283295…b780e8 | limitWhitelist | 21,728,754 | 20 days agoTue, 28 Jul 2026 16:16:59 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x9d33ef…08d639 | feeWhitelist | 21,728,738 | 20 days agoTue, 28 Jul 2026 16:16:57 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x8e4d72…e61d89 | limitWhitelist | 21,728,723 | 20 days agoTue, 28 Jul 2026 16:16:56 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x853a93…7ccd4a | feeWhitelist | 21,728,712 | 20 days agoTue, 28 Jul 2026 16:16:55 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000080 | |
| 0x49276c…a8d529 | limitWhitelist | 21,728,701 | 20 days agoTue, 28 Jul 2026 16:16:53 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000080 | |
| 0xdef1f6…ebb0d3 | feeWhitelist | 21,728,686 | 20 days agoTue, 28 Jul 2026 16:16:52 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x6a13b6…f53daf | limitWhitelist | 21,728,676 | 20 days agoTue, 28 Jul 2026 16:16:51 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0xaa45ec…e34549 | feeWhitelist | 21,728,661 | 20 days agoTue, 28 Jul 2026 16:16:49 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000080 | |
| 0x2c8da1…de6983 | limitWhitelist | 21,728,645 | 20 days agoTue, 28 Jul 2026 16:16:48 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0xa00ba2…b6901a | feeWhitelist | 21,728,625 | 20 days agoTue, 28 Jul 2026 16:16:46 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x6f8173…b40ce1 | limitWhitelist | 21,728,615 | 20 days agoTue, 28 Jul 2026 16:16:45 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0xfd2a83…9ed001 | feeWhitelist | 21,728,590 | 20 days agoTue, 28 Jul 2026 16:16:44 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x967b3c…76bce4 | limitWhitelist | 21,728,577 | 20 days agoTue, 28 Jul 2026 16:16:42 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000081 | |
| 0xb6ae4c…fbb3e0 | feeWhitelist | 21,728,563 | 20 days agoTue, 28 Jul 2026 16:16:41 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x83d4f3…f5e14e | limitWhitelist | 21,728,553 | 20 days agoTue, 28 Jul 2026 16:16:40 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x8d67cf…fb744e | feeWhitelist | 21,728,538 | 20 days agoTue, 28 Jul 2026 16:16:38 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000080 | |
| 0xa2036d…59447c | limitWhitelist | 21,728,520 | 20 days agoTue, 28 Jul 2026 16:16:37 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x69c088…4895fd | feeWhitelist | 21,728,504 | 20 days agoTue, 28 Jul 2026 16:16:35 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000080 | |
| 0x934b3e…17d977 | limitWhitelist | 21,728,495 | 20 days agoTue, 28 Jul 2026 16:16:34 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000080 | |
| 0x5f7b52…2ef37c | feeWhitelist | 21,728,480 | 20 days agoTue, 28 Jul 2026 16:16:33 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x2cc593…2d17ac | limitWhitelist | 21,728,467 | 20 days agoTue, 28 Jul 2026 16:16:31 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000082 | |
| 0xcccdc1…9954d5 | feeWhitelist | 21,728,454 | 20 days agoTue, 28 Jul 2026 16:16:30 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 | |
| 0x0f47e0…080ca0 | limitWhitelist | 21,728,439 | 20 days agoTue, 28 Jul 2026 16:16:29 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000081 | |
| 0x8fff7c…fd5b44 | feeWhitelist | 21,728,426 | 20 days agoTue, 28 Jul 2026 16:16:27 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000080 | |
| 0x0f2c46…a54b70 | limitWhitelist | 21,728,414 | 20 days agoTue, 28 Jul 2026 16:16:26 UTC | 0xb26c…7180 | IN | Moodi | $0.000 ETH | 0.00000079 |