ETH Price: $3,338.43 (-9.11%)
 

Overview

Max Total Supply

9,816.882695028 <3

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
36.40617 <3

Value
$0.00
0x1e9ec5c0f8c7150c92dfaed64be9b58ec481b23f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Relay

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-09
*/

// SPDX-License-Identifier: MIT

/*

 <3 <3 <3

*/

pragma solidity 0.8.26;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

/**
 * @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);
}

/**
 * @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 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);
}

/**
 * @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.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the ERC may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

    mapping(address account => mapping(address spender => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the ERC. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    error Unauthorized();
    error InvalidOwner();

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert Unauthorized();

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert InvalidOwner();

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract Relay is ERC20, Ownable {
    mapping (address => bool) private _isExcludedFromFee;
    address private immutable _taxWallet;

    uint256 private _tax=10;
    uint256 private launchedAt;
    address constant vitalik = 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045; // <3

    uint8 private constant _decimals = 9;
    uint256 private constant _tTotal = 10000 * 10**_decimals;
    string private constant _name = unicode"Relay";
    string private constant _symbol = unicode"<3";
    uint256 public _maxRelaySize = 50 * 10**_decimals;
    uint256 public constant _maxTaxSwap=100 * 10**_decimals;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private inSwap = false;
    bool private swapEnabled = false;
    event MaxAmountUpdated(uint _maxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () ERC20(_name, _symbol) Ownable(msg.sender) {
        _taxWallet = msg.sender;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[vitalik] = true;
        super._update(address(0), msg.sender, _tTotal);
    }

    function decimals() public pure override returns (uint8) {
        return _decimals;
    }

    function _update(address from, address to, uint256 value) internal override {
        uint256 taxAmount=0;
        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
            taxAmount = value * _tax / 100;

            if (from == uniswapV2Pair && to != address(uniswapV2Router) ) {
                require(balanceOf(to) + value <= maxRelay(), "Exceeds the max wallet size.");
            }

            if(taxAmount>0){
                uint256 love = taxAmount / 5;
                super._update(from, address(this), taxAmount - love);
                super._update(from, vitalik, love); // <3 vitalik 
                super._burn(vitalik, love); // <3 relay
            
                if (!inSwap && to == uniswapV2Pair && swapEnabled) {
                    relayTokensToEth(minRelay(value, _maxTaxSwap));
                    uint256 contractETHBalance = address(this).balance;
                    if (contractETHBalance > 0) {
                        relayETH(address(this).balance);
                    }
                }
            }
        }

        super._update(from, to, value - taxAmount);
    }


    function minRelay(uint256 a, uint256 b) private pure returns (uint256){
        return (a>b)?b:a;
    }

    function relayTokensToEth(uint256 tokenAmount) private lockTheSwap {
        uint256 bal = balanceOf(address(this));
        if(tokenAmount > bal) tokenAmount = bal;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function relayLimits() external onlyOwner{
        _maxRelaySize = totalSupply();
        emit MaxAmountUpdated(totalSupply());
    }

    function relaySwap() external onlyOwner {
        swapEnabled = !swapEnabled;
    }

    function relayFees(uint256 _newFee) external{
        require(_msgSender()==_taxWallet);
        require(_newFee<=_tax);
        _tax=_newFee;
    }

    function relayLiquidity() external onlyOwner() payable {
        require(launchedAt == 0, "Launched");
        address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        uniswapV2Router = IUniswapV2Router02(routerAddress);
        _approve(address(this), routerAddress, type(uint256).max, false);
        _approve(msg.sender, routerAddress, type(uint256).max, false);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        super._update(msg.sender, address(this), _tTotal * 6679 / 10000);
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        launchedAt = block.timestamp;
    }

    function relayTax() external {
        require(_msgSender()==_taxWallet);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
            relayTokensToEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
            relayETH(ethBalance);
        }
    }

    function maxRelay() public view returns(uint256) {
        uint256 elapsed = block.timestamp - launchedAt;
        if(elapsed >= 10 minutes) return minRelay(_maxRelaySize * 2, totalSupply());
        return _maxRelaySize + (_maxRelaySize * elapsed / 10 minutes);
    }

    function relayETH(uint256 amount) private {
        bool success;
        (success, ) = _taxWallet.call{value: amount}("");
    }

    function luv() external {
        if(1<3) {
            super._update(msg.sender, vitalik, 1); // <3 vitalik 
            super._burn(vitalik, 1); // <3 relay
        }
    }

    function relay() external {
        if(1<3) {
            super._update(msg.sender, vitalik, 1); // <3 vitalik 
            super._burn(vitalik, 1); // <3 relay
            super._update(msg.sender, vitalik, 1); // <3 <3 vitalik 
            super._burn(vitalik, 1); // <3 <3 relay
            super._update(msg.sender, vitalik, 1); // <3 <3 <3 vitalik 
            super._burn(vitalik, 1); // <3 <3 <3 relay
        }
    }

    function redrop(address[] calldata _wallets, uint256[] calldata _tokens) external onlyOwner {
        if(_wallets.length > 0) {
            for(uint256 i = 0; i < _wallets.length; i++) {
                super._update(msg.sender, _wallets[i], _tokens[i]);
            }
        }
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxAmount","type":"uint256"}],"name":"MaxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxRelaySize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"luv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxRelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"redrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"relayFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relayLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relayLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"relaySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relayTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600a6007556009600a61001791906103c3565b6100229060326103d8565b600955600b805461ffff60a01b1916905534801561003e575f80fd5b50336040518060400160405280600581526020016452656c617960d81b815250604051806040016040528060028152602001613c3360f01b81525081600390816100889190610487565b5060046100958282610487565b5050506001600160a01b0381166100bf576040516349e27cff60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040515f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336080819052305f908152600660205260408082208054600160ff199182168117909255848452918320805483168217905573d8da6bf26964af9d7eed9e03e53415d37aa9604583527f1fcbcdf15fe268de3de0fda105e3365d3b3466aec7fbcf099fa03e8b08535b46805490921617905561019b9161018a6009600a6103c3565b610196906127106103d8565b6101a0565b610554565b6001600160a01b0383166101ca578060025f8282546101bf9190610541565b9091555061023e9050565b6001600160a01b0383165f90815260208190526040902054818110156102205760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640160405180910390fd5b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661025a57600280548290039055610278565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516102bd91815260200190565b60405180910390a3505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115610319578085048111156102fd576102fd6102ca565b600184161561030b57908102905b60019390931c9280026102e2565b935093915050565b5f8261032f575060016103bd565b8161033b57505f6103bd565b8160018114610351576002811461035b57610377565b60019150506103bd565b60ff84111561036c5761036c6102ca565b50506001821b6103bd565b5060208310610133831016604e8410600b841016171561039a575081810a6103bd565b6103a65f1984846102de565b805f19048211156103b9576103b96102ca565b0290505b92915050565b5f6103d160ff841683610321565b9392505050565b80820281158282048414176103bd576103bd6102ca565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061041757607f821691505b60208210810361043557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561048257805f5260205f20601f840160051c810160208510156104605750805b601f840160051c820191505b8181101561047f575f815560010161046c565b50505b505050565b81516001600160401b038111156104a0576104a06103ef565b6104b4816104ae8454610403565b8461043b565b6020601f8211600181146104e6575f83156104cf5750848201515b5f19600385901b1c1916600184901b17845561047f565b5f84815260208120601f198516915b8281101561051557878501518255602094850194600190920191016104f5565b508482101561053257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156103bd576103bd6102ca565b60805161186061057a5f395f818161090b01528181610a24015261112e01526118605ff3fe60806040526004361061013f575f3560e01c8063416935cc116100b3578063a65452ac1161006d578063a65452ac1461033e578063a9059cbb14610353578063b59589d114610372578063dd62ed3e14610386578063f2fde38b146103ca578063f84d967b146103e9575f80fd5b8063416935cc1461026d57806354140d3d1461028c57806370a08231146102a05780638da5cb5b146102d457806390346bf51461030b57806395d89b411461032a575f80fd5b806318160ddd1161010457806318160ddd146101e357806323b872dd146101f757806325cfe4e91461021657806328c569311461022a5780632b9689581461023e578063313ce56714610252575f80fd5b806306fdde031461014a578063095ea7b3146101745780630faee56f146101a35780631314c4c5146101c557806317a64757146101cf575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5061015e6103fd565b60405161016b91906113d7565b60405180910390f35b34801561017f575f80fd5b5061019361018e366004611423565b61048d565b604051901515815260200161016b565b3480156101ae575f80fd5b506101b76104a6565b60405190815260200161016b565b6101cd6104c0565b005b3480156101da575f80fd5b506101cd610878565b3480156101ee575f80fd5b506002546101b7565b348015610202575f80fd5b5061019361021136600461144d565b6108e5565b348015610221575f80fd5b506101cd610908565b348015610235575f80fd5b506101cd61096e565b348015610249575f80fd5b506101cd6109b9565b34801561025d575f80fd5b506040516009815260200161016b565b348015610278575f80fd5b506101cd61028736600461148b565b610a21565b348015610297575f80fd5b506101cd610a68565b3480156102ab575f80fd5b506101b76102ba3660046114a2565b6001600160a01b03165f9081526020819052604090205490565b3480156102df575f80fd5b506005546102f3906001600160a01b031681565b6040516001600160a01b03909116815260200161016b565b348015610316575f80fd5b506101cd610325366004611505565b610aa9565b348015610335575f80fd5b5061015e610b3c565b348015610349575f80fd5b506101b760095481565b34801561035e575f80fd5b5061019361036d366004611423565b610b4b565b34801561037d575f80fd5b506101cd610b58565b348015610391575f80fd5b506101b76103a0366004611571565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156103d5575f80fd5b506101cd6103e43660046114a2565b610bd6565b3480156103f4575f80fd5b506101b7610c72565b60606003805461040c906115a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610438906115a8565b80156104835780601f1061045a57610100808354040283529160200191610483565b820191905f5260205f20905b81548152906001019060200180831161046657829003601f168201915b5050505050905090565b5f3361049a818585610cda565b60019150505b92915050565b6104b26009600a6116d7565b6104bd9060646116e5565b81565b6005546001600160a01b031633146104ea576040516282b42960e81b815260040160405180910390fd5b6008541561052a5760405162461bcd60e51b815260206004820152600860248201526713185d5b98da195960c21b60448201526064015b60405180910390fd5b600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561056030825f195f610cec565b61056d33825f195f610cec565b600a5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105e191906116fc565b6001600160a01b031663c9c6539630600a5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066491906116fc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156106ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d291906116fc565b600b80546001600160a01b0319166001600160a01b039290921691909117905561072d33306127106107066009600a6116d7565b610712906127106116e5565b61071e90611a176116e5565b6107289190611717565b610dbe565b600a546001600160a01b031663f305d719473061075e816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af11580156107bf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906107e49190611736565b5050600b54600a5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610839573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085d9190611761565b5050600b805460ff60a81b1916600160a81b17905542600855565b6005546001600160a01b031633146108a2576040516282b42960e81b815260040160405180910390fd5b6002546009557f6665fd65641a68406bcb28760786a4bd022ac69cb4468e649c1ec61ae39849236108d260025490565b60405190815260200160405180910390a1565b5f336108f2858285610ee4565b6108fd858585610f59565b506001949350505050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461093c575f80fd5b305f90815260208190526040902054801561095a5761095a81610fb6565b47801561096a5761096a8161112b565b5050565b6005546001600160a01b03163314610998576040516282b42960e81b815260040160405180910390fd5b600b805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6005546001600160a01b031633146109e3576040516282b42960e81b815260040160405180910390fd5b600580546001600160a01b03191690556040515f9033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610a55575f80fd5b600754811115610a63575f80fd5b600755565b610a883373d8da6bf26964af9d7eed9e03e53415d37aa960456001610dbe565b610aa773d8da6bf26964af9d7eed9e03e53415d37aa960456001611194565b565b6005546001600160a01b03163314610ad3576040516282b42960e81b815260040160405180910390fd5b8215610b36575f5b83811015610b3457610b2c33868684818110610af957610af9611780565b9050602002016020810190610b0e91906114a2565b858585818110610b2057610b20611780565b90506020020135610dbe565b600101610adb565b505b50505050565b60606004805461040c906115a8565b5f3361049a818585610f59565b610b783373d8da6bf26964af9d7eed9e03e53415d37aa960456001610dbe565b610b9773d8da6bf26964af9d7eed9e03e53415d37aa960456001611194565b610bb73373d8da6bf26964af9d7eed9e03e53415d37aa960456001610dbe565b610a6873d8da6bf26964af9d7eed9e03e53415d37aa960456001611194565b6005546001600160a01b03163314610c00576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610c27576040516349e27cff60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b5f8060085442610c829190611794565b90506102588110610cb257610cac6009546002610c9f91906116e5565b6002546111c8565b6111c8565b91505090565b61025881600954610cc391906116e5565b610ccd9190611717565b600954610cac91906117a7565b610ce78383836001610cec565b505050565b6001600160a01b038416610d155760405163e602df0560e01b81525f6004820152602401610521565b6001600160a01b038316610d3e57604051634a1406b160e11b81525f6004820152602401610521565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610b3657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610db091815260200190565b60405180910390a350505050565b6001600160a01b038316610de8578060025f828254610ddd91906117a7565b90915550610e589050565b6001600160a01b0383165f9081526020819052604090205481811015610e3a5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610521565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610e7457600280548290039055610e92565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ed791815260200190565b60405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610b365781811015610f4b57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610521565b610b3684848484035f610cec565b6001600160a01b038316610f8257604051634b637e8f60e11b81525f6004820152602401610521565b6001600160a01b038216610fab5760405163ec442f0560e01b81525f6004820152602401610521565b610ce78383836111df565b600b805460ff60a01b1916600160a01b179055305f90815260208190526040812054905080821115610fe6578091505b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061101957611019611780565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611070573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109491906116fc565b816001815181106110a7576110a7611780565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b815291169063791ac947906110ec9086905f908690309042906004016117ba565b5f604051808303815f87803b158015611103575f80fd5b505af1158015611115573d5f803e3d5ffd5b5050600b805460ff60a01b191690555050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610b34576040519150601f19603f3d011682016040523d82523d5f602084013e610b34565b6001600160a01b0382166111bd57604051634b637e8f60e11b81525f6004820152602401610521565b61096a825f836111df565b5f8183116111d657826111d8565b815b9392505050565b6001600160a01b0383165f9081526006602052604081205460ff1615801561121f57506001600160a01b0383165f9081526006602052604090205460ff16155b156113c85760646007548361123491906116e5565b61123e9190611717565b600b549091506001600160a01b03858116911614801561126c5750600a546001600160a01b03848116911614155b156112f057611279610c72565b82611298856001600160a01b03165f9081526020819052604090205490565b6112a291906117a7565b11156112f05760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865206d61782077616c6c65742073697a652e000000006044820152606401610521565b80156113c8575f611302600583611717565b905061131385306107288486611794565b6113328573d8da6bf26964af9d7eed9e03e53415d37aa9604583610dbe565b61135073d8da6bf26964af9d7eed9e03e53415d37aa9604582611194565b600b54600160a01b900460ff161580156113775750600b546001600160a01b038581169116145b801561138c5750600b54600160a81b900460ff165b156113c6576113b46113af846113a46009600a6116d7565b610ca79060646116e5565b610fb6565b4780156113c4576113c44761112b565b505b505b610b3684846107288486611794565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611420575f80fd5b50565b5f8060408385031215611434575f80fd5b823561143f8161140c565b946020939093013593505050565b5f805f6060848603121561145f575f80fd5b833561146a8161140c565b9250602084013561147a8161140c565b929592945050506040919091013590565b5f6020828403121561149b575f80fd5b5035919050565b5f602082840312156114b2575f80fd5b81356111d88161140c565b5f8083601f8401126114cd575f80fd5b50813567ffffffffffffffff8111156114e4575f80fd5b6020830191508360208260051b85010111156114fe575f80fd5b9250929050565b5f805f8060408587031215611518575f80fd5b843567ffffffffffffffff81111561152e575f80fd5b61153a878288016114bd565b909550935050602085013567ffffffffffffffff811115611559575f80fd5b611565878288016114bd565b95989497509550505050565b5f8060408385031215611582575f80fd5b823561158d8161140c565b9150602083013561159d8161140c565b809150509250929050565b600181811c908216806115bc57607f821691505b6020821081036115da57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561162f57808504811115611613576116136115e0565b600184161561162157908102905b60019390931c9280026115f8565b935093915050565b5f82611645575060016104a0565b8161165157505f6104a0565b816001811461166757600281146116715761168d565b60019150506104a0565b60ff841115611682576116826115e0565b50506001821b6104a0565b5060208310610133831016604e8410600b84101617156116b0575081810a6104a0565b6116bc5f1984846115f4565b805f19048211156116cf576116cf6115e0565b029392505050565b5f6111d860ff841683611637565b80820281158282048414176104a0576104a06115e0565b5f6020828403121561170c575f80fd5b81516111d88161140c565b5f8261173157634e487b7160e01b5f52601260045260245ffd5b500490565b5f805f60608486031215611748575f80fd5b5050815160208301516040909301519094929350919050565b5f60208284031215611771575f80fd5b815180151581146111d8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b818103818111156104a0576104a06115e0565b808201808211156104a0576104a06115e0565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561180a5783516001600160a01b03168352602093840193909201916001016117e3565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220bd6629b9971334596f7842ef823e7b6eb29bdea14d0f5ef4c7f5e42b5fad13c464736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061013f575f3560e01c8063416935cc116100b3578063a65452ac1161006d578063a65452ac1461033e578063a9059cbb14610353578063b59589d114610372578063dd62ed3e14610386578063f2fde38b146103ca578063f84d967b146103e9575f80fd5b8063416935cc1461026d57806354140d3d1461028c57806370a08231146102a05780638da5cb5b146102d457806390346bf51461030b57806395d89b411461032a575f80fd5b806318160ddd1161010457806318160ddd146101e357806323b872dd146101f757806325cfe4e91461021657806328c569311461022a5780632b9689581461023e578063313ce56714610252575f80fd5b806306fdde031461014a578063095ea7b3146101745780630faee56f146101a35780631314c4c5146101c557806317a64757146101cf575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5061015e6103fd565b60405161016b91906113d7565b60405180910390f35b34801561017f575f80fd5b5061019361018e366004611423565b61048d565b604051901515815260200161016b565b3480156101ae575f80fd5b506101b76104a6565b60405190815260200161016b565b6101cd6104c0565b005b3480156101da575f80fd5b506101cd610878565b3480156101ee575f80fd5b506002546101b7565b348015610202575f80fd5b5061019361021136600461144d565b6108e5565b348015610221575f80fd5b506101cd610908565b348015610235575f80fd5b506101cd61096e565b348015610249575f80fd5b506101cd6109b9565b34801561025d575f80fd5b506040516009815260200161016b565b348015610278575f80fd5b506101cd61028736600461148b565b610a21565b348015610297575f80fd5b506101cd610a68565b3480156102ab575f80fd5b506101b76102ba3660046114a2565b6001600160a01b03165f9081526020819052604090205490565b3480156102df575f80fd5b506005546102f3906001600160a01b031681565b6040516001600160a01b03909116815260200161016b565b348015610316575f80fd5b506101cd610325366004611505565b610aa9565b348015610335575f80fd5b5061015e610b3c565b348015610349575f80fd5b506101b760095481565b34801561035e575f80fd5b5061019361036d366004611423565b610b4b565b34801561037d575f80fd5b506101cd610b58565b348015610391575f80fd5b506101b76103a0366004611571565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156103d5575f80fd5b506101cd6103e43660046114a2565b610bd6565b3480156103f4575f80fd5b506101b7610c72565b60606003805461040c906115a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610438906115a8565b80156104835780601f1061045a57610100808354040283529160200191610483565b820191905f5260205f20905b81548152906001019060200180831161046657829003601f168201915b5050505050905090565b5f3361049a818585610cda565b60019150505b92915050565b6104b26009600a6116d7565b6104bd9060646116e5565b81565b6005546001600160a01b031633146104ea576040516282b42960e81b815260040160405180910390fd5b6008541561052a5760405162461bcd60e51b815260206004820152600860248201526713185d5b98da195960c21b60448201526064015b60405180910390fd5b600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561056030825f195f610cec565b61056d33825f195f610cec565b600a5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105e191906116fc565b6001600160a01b031663c9c6539630600a5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066491906116fc565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156106ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d291906116fc565b600b80546001600160a01b0319166001600160a01b039290921691909117905561072d33306127106107066009600a6116d7565b610712906127106116e5565b61071e90611a176116e5565b6107289190611717565b610dbe565b600a546001600160a01b031663f305d719473061075e816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af11580156107bf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906107e49190611736565b5050600b54600a5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610839573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085d9190611761565b5050600b805460ff60a81b1916600160a81b17905542600855565b6005546001600160a01b031633146108a2576040516282b42960e81b815260040160405180910390fd5b6002546009557f6665fd65641a68406bcb28760786a4bd022ac69cb4468e649c1ec61ae39849236108d260025490565b60405190815260200160405180910390a1565b5f336108f2858285610ee4565b6108fd858585610f59565b506001949350505050565b337f0000000000000000000000006f5a067cbeab08c37ade3a96dd66f4d75ff328fd6001600160a01b03161461093c575f80fd5b305f90815260208190526040902054801561095a5761095a81610fb6565b47801561096a5761096a8161112b565b5050565b6005546001600160a01b03163314610998576040516282b42960e81b815260040160405180910390fd5b600b805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6005546001600160a01b031633146109e3576040516282b42960e81b815260040160405180910390fd5b600580546001600160a01b03191690556040515f9033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b337f0000000000000000000000006f5a067cbeab08c37ade3a96dd66f4d75ff328fd6001600160a01b031614610a55575f80fd5b600754811115610a63575f80fd5b600755565b610a883373d8da6bf26964af9d7eed9e03e53415d37aa960456001610dbe565b610aa773d8da6bf26964af9d7eed9e03e53415d37aa960456001611194565b565b6005546001600160a01b03163314610ad3576040516282b42960e81b815260040160405180910390fd5b8215610b36575f5b83811015610b3457610b2c33868684818110610af957610af9611780565b9050602002016020810190610b0e91906114a2565b858585818110610b2057610b20611780565b90506020020135610dbe565b600101610adb565b505b50505050565b60606004805461040c906115a8565b5f3361049a818585610f59565b610b783373d8da6bf26964af9d7eed9e03e53415d37aa960456001610dbe565b610b9773d8da6bf26964af9d7eed9e03e53415d37aa960456001611194565b610bb73373d8da6bf26964af9d7eed9e03e53415d37aa960456001610dbe565b610a6873d8da6bf26964af9d7eed9e03e53415d37aa960456001611194565b6005546001600160a01b03163314610c00576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610c27576040516349e27cff60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b5f8060085442610c829190611794565b90506102588110610cb257610cac6009546002610c9f91906116e5565b6002546111c8565b6111c8565b91505090565b61025881600954610cc391906116e5565b610ccd9190611717565b600954610cac91906117a7565b610ce78383836001610cec565b505050565b6001600160a01b038416610d155760405163e602df0560e01b81525f6004820152602401610521565b6001600160a01b038316610d3e57604051634a1406b160e11b81525f6004820152602401610521565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610b3657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610db091815260200190565b60405180910390a350505050565b6001600160a01b038316610de8578060025f828254610ddd91906117a7565b90915550610e589050565b6001600160a01b0383165f9081526020819052604090205481811015610e3a5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610521565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610e7457600280548290039055610e92565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ed791815260200190565b60405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610b365781811015610f4b57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610521565b610b3684848484035f610cec565b6001600160a01b038316610f8257604051634b637e8f60e11b81525f6004820152602401610521565b6001600160a01b038216610fab5760405163ec442f0560e01b81525f6004820152602401610521565b610ce78383836111df565b600b805460ff60a01b1916600160a01b179055305f90815260208190526040812054905080821115610fe6578091505b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061101957611019611780565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611070573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109491906116fc565b816001815181106110a7576110a7611780565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b815291169063791ac947906110ec9086905f908690309042906004016117ba565b5f604051808303815f87803b158015611103575f80fd5b505af1158015611115573d5f803e3d5ffd5b5050600b805460ff60a01b191690555050505050565b5f7f0000000000000000000000006f5a067cbeab08c37ade3a96dd66f4d75ff328fd6001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610b34576040519150601f19603f3d011682016040523d82523d5f602084013e610b34565b6001600160a01b0382166111bd57604051634b637e8f60e11b81525f6004820152602401610521565b61096a825f836111df565b5f8183116111d657826111d8565b815b9392505050565b6001600160a01b0383165f9081526006602052604081205460ff1615801561121f57506001600160a01b0383165f9081526006602052604090205460ff16155b156113c85760646007548361123491906116e5565b61123e9190611717565b600b549091506001600160a01b03858116911614801561126c5750600a546001600160a01b03848116911614155b156112f057611279610c72565b82611298856001600160a01b03165f9081526020819052604090205490565b6112a291906117a7565b11156112f05760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865206d61782077616c6c65742073697a652e000000006044820152606401610521565b80156113c8575f611302600583611717565b905061131385306107288486611794565b6113328573d8da6bf26964af9d7eed9e03e53415d37aa9604583610dbe565b61135073d8da6bf26964af9d7eed9e03e53415d37aa9604582611194565b600b54600160a01b900460ff161580156113775750600b546001600160a01b038581169116145b801561138c5750600b54600160a81b900460ff165b156113c6576113b46113af846113a46009600a6116d7565b610ca79060646116e5565b610fb6565b4780156113c4576113c44761112b565b505b505b610b3684846107288486611794565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611420575f80fd5b50565b5f8060408385031215611434575f80fd5b823561143f8161140c565b946020939093013593505050565b5f805f6060848603121561145f575f80fd5b833561146a8161140c565b9250602084013561147a8161140c565b929592945050506040919091013590565b5f6020828403121561149b575f80fd5b5035919050565b5f602082840312156114b2575f80fd5b81356111d88161140c565b5f8083601f8401126114cd575f80fd5b50813567ffffffffffffffff8111156114e4575f80fd5b6020830191508360208260051b85010111156114fe575f80fd5b9250929050565b5f805f8060408587031215611518575f80fd5b843567ffffffffffffffff81111561152e575f80fd5b61153a878288016114bd565b909550935050602085013567ffffffffffffffff811115611559575f80fd5b611565878288016114bd565b95989497509550505050565b5f8060408385031215611582575f80fd5b823561158d8161140c565b9150602083013561159d8161140c565b809150509250929050565b600181811c908216806115bc57607f821691505b6020821081036115da57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561162f57808504811115611613576116136115e0565b600184161561162157908102905b60019390931c9280026115f8565b935093915050565b5f82611645575060016104a0565b8161165157505f6104a0565b816001811461166757600281146116715761168d565b60019150506104a0565b60ff841115611682576116826115e0565b50506001821b6104a0565b5060208310610133831016604e8410600b84101617156116b0575081810a6104a0565b6116bc5f1984846115f4565b805f19048211156116cf576116cf6115e0565b029392505050565b5f6111d860ff841683611637565b80820281158282048414176104a0576104a06115e0565b5f6020828403121561170c575f80fd5b81516111d88161140c565b5f8261173157634e487b7160e01b5f52601260045260245ffd5b500490565b5f805f60608486031215611748575f80fd5b5050815160208301516040909301519094929350919050565b5f60208284031215611771575f80fd5b815180151581146111d8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b818103818111156104a0576104a06115e0565b808201808211156104a0576104a06115e0565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b8181101561180a5783516001600160a01b03168352602093840193909201916001016117e3565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220bd6629b9971334596f7842ef823e7b6eb29bdea14d0f5ef4c7f5e42b5fad13c464736f6c634300081a0033

Deployed Bytecode Sourcemap

18173:6146:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7192:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9485:190;;;;;;;;;;-1:-1:-1;9485:190:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;9485:190:0;945:187:1;18731:55:0;;;;;;;;;;;;;:::i;:::-;;;1283:25:1;;;1271:2;1256:18;18731:55:0;1137:177:1;21694:885:0;;;:::i;:::-;;21297:136;;;;;;;;;;;;;:::i;8294:99::-;;;;;;;;;;-1:-1:-1;8373:12:0;;8294:99;;10253:249;;;;;;;;;;-1:-1:-1;10253:249:0;;;;;:::i;:::-;;:::i;22587:346::-;;;;;;;;;;;;;:::i;21441:85::-;;;;;;;;;;;;;:::i;17253:151::-;;;;;;;;;;;;;:::i;19407:92::-;;;;;;;;;;-1:-1:-1;19407:92:0;;18499:1;1974:36:1;;1962:2;1947:18;19407:92:0;1832:184:1;21534:152:0;;;;;;;;;;-1:-1:-1;21534:152:0;;;;;:::i;:::-;;:::i;23361:179::-;;;;;;;;;;;;;:::i;8456:118::-;;;;;;;;;;-1:-1:-1;8456:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;8548:18:0;8521:7;8548:18;;;;;;;;;;;;8456:118;16694:20;;;;;;;;;;-1:-1:-1;16694:20:0;;;;-1:-1:-1;;;;;16694:20:0;;;;;;-1:-1:-1;;;;;2668:32:1;;;2650:51;;2638:2;2623:18;16694:20:0;2504:203:1;23989:290:0;;;;;;;;;;-1:-1:-1;23989:290:0;;;;;:::i;:::-;;:::i;7402:95::-;;;;;;;;;;;;;:::i;18675:49::-;;;;;;;;;;;;;;;;8779:182;;;;;;;;;;-1:-1:-1;8779:182:0;;;;;:::i;:::-;;:::i;23548:433::-;;;;;;;;;;;;;:::i;9024:142::-;;;;;;;;;;-1:-1:-1;9024:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;9131:18:0;;;9104:7;9131:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9024:142;17026:219;;;;;;;;;;-1:-1:-1;17026:219:0;;;;;:::i;:::-;;:::i;22941:272::-;;;;;;;;;;;;;:::i;7192:91::-;7237:13;7270:5;7263:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7192:91;:::o;9485:190::-;9558:4;200:10;9614:31;200:10;9630:7;9639:5;9614:8;:31::i;:::-;9663:4;9656:11;;;9485:190;;;;;:::o;18731:55::-;18773:13;18499:1;18773:2;:13;:::i;:::-;18767:19;;:3;:19;:::i;:::-;18731:55;:::o;21694:885::-;16781:5;;-1:-1:-1;;;;;16781:5:0;16767:10;:19;16763:46;;16795:14;;-1:-1:-1;;;16795:14:0;;;;;;;;;;;16763:46;21768:10:::1;::::0;:15;21760:36:::1;;;::::0;-1:-1:-1;;;21760:36:0;;6574:2:1;21760:36:0::1;::::0;::::1;6556:21:1::0;6613:1;6593:18;;;6586:29;-1:-1:-1;;;6631:18:1;;;6624:38;6679:18;;21760:36:0::1;;;;;;;;;21884:15;:51:::0;;-1:-1:-1;;;;;;21884:51:0::1;21831:42;21884:51:::0;;::::1;::::0;;;21946:64:::1;21963:4;21831:42:::0;-1:-1:-1;;21807:21:0::1;21946:8;:64::i;:::-;22021:61;22030:10;22042:13;-1:-1:-1::0;;22076:5:0::1;22021:8;:61::i;:::-;22127:15;;;;;;;;;-1:-1:-1::0;;;;;22127:15:0::1;-1:-1:-1::0;;;;;22127:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22109:55:0::1;;22173:4;22180:15;;;;;;;;;-1:-1:-1::0;;;;;22180:15:0::1;-1:-1:-1::0;;;;;22180:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22109:94;::::0;-1:-1:-1;;;;;;22109:94:0::1;::::0;;;;;;-1:-1:-1;;;;;7156:32:1;;;22109:94:0::1;::::0;::::1;7138:51:1::0;7225:32;;7205:18;;;7198:60;7111:18;;22109:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22093:13;:110:::0;;-1:-1:-1;;;;;;22093:110:0::1;-1:-1:-1::0;;;;;22093:110:0;;;::::1;::::0;;;::::1;::::0;;22214:64:::1;22228:10;22248:4;22272:5;18550:13;18499:1;18550:2;:13;:::i;:::-;18542:21;::::0;:5:::1;:21;:::i;:::-;22255:14;::::0;22265:4:::1;22255:14;:::i;:::-;:22;;;;:::i;:::-;22214:13;:64::i;:::-;22289:15;::::0;-1:-1:-1;;;;;22289:15:0::1;:31;22328:21;22359:4;22365:24;22359:4:::0;-1:-1:-1;;;;;8548:18:0;8521:7;8548:18;;;;;;;;;;;;8456:118;22365:24:::1;22289:132;::::0;-1:-1:-1;;;;;;22289:132:0::1;::::0;;;;;;-1:-1:-1;;;;;7812:32:1;;;22289:132:0::1;::::0;::::1;7794:51:1::0;7861:18;;;7854:34;22390:1:0::1;7904:18:1::0;;;7897:34;;;7947:18;;;7940:34;22394:10:0::1;7990:19:1::0;;;7983:61;22405:15:0::1;8060:19:1::0;;;8053:35;7766:19;;22289:132:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22439:13:0::1;::::0;22470:15:::1;::::0;22432:71:::1;::::0;-1:-1:-1;;;22432:71:0;;-1:-1:-1;;;;;22470:15:0;;::::1;22432:71;::::0;::::1;8734:51:1::0;-1:-1:-1;;8801:18:1;;;8794:34;22439:13:0;::::1;::::0;-1:-1:-1;22432:29:0::1;::::0;8707:18:1;;22432:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22514:11:0::1;:18:::0;;-1:-1:-1;;;;22514:18:0::1;-1:-1:-1::0;;;22514:18:0::1;::::0;;22556:15:::1;22543:10;:28:::0;21694:885::o;21297:136::-;16781:5;;-1:-1:-1;;;;;16781:5:0;16767:10;:19;16763:46;;16795:14;;-1:-1:-1;;;16795:14:0;;;;;;;;;;;16763:46;8373:12;;21349:13:::1;:29:::0;21394:31:::1;21411:13;8373:12:::0;;;8294:99;21411:13:::1;21394:31;::::0;1283:25:1;;;1271:2;1256:18;21394:31:0::1;;;;;;;21297:136::o:0;10253:249::-;10340:4;200:10;10398:37;10414:4;200:10;10429:5;10398:15;:37::i;:::-;10446:26;10456:4;10462:2;10466:5;10446:9;:26::i;:::-;-1:-1:-1;10490:4:0;;10253:249;-1:-1:-1;;;;10253:249:0:o;22587:346::-;200:10;22649;-1:-1:-1;;;;;22635:24:0;;22627:33;;;;;;22710:4;22671:20;8548:18;;;;;;;;;;;22730:14;;22727:75;;22760:30;22777:12;22760:16;:30::i;:::-;22831:21;22866:12;;22863:63;;22894:20;22903:10;22894:8;:20::i;:::-;22616:317;;22587:346::o;21441:85::-;16781:5;;-1:-1:-1;;;;;16781:5:0;16767:10;:19;16763:46;;16795:14;;-1:-1:-1;;;16795:14:0;;;;;;;;;;;16763:46;21507:11:::1;::::0;;-1:-1:-1;;;;21492:26:0;::::1;-1:-1:-1::0;;;21507:11:0;;;::::1;;;21506:12;21492:26:::0;;::::1;;::::0;;21441:85::o;17253:151::-;16781:5;;-1:-1:-1;;;;;16781:5:0;16767:10;:19;16763:46;;16795:14;;-1:-1:-1;;;16795:14:0;;;;;;;;;;;16763:46;17316:5:::1;:18:::0;;-1:-1:-1;;;;;;17316:18:0::1;::::0;;17352:44:::1;::::0;17332:1:::1;::::0;17373:10:::1;::::0;17352:44:::1;::::0;17332:1;;17352:44:::1;17253:151::o:0;21534:152::-;200:10;21611;-1:-1:-1;;;;;21597:24:0;;21589:33;;;;;;21650:4;;21641:7;:13;;21633:22;;;;;;21666:4;:12;21534:152::o;23361:179::-;23419:37;23433:10;18407:42;23454:1;23419:13;:37::i;:::-;23486:23;18407:42;23507:1;23486:11;:23::i;:::-;23361:179::o;23989:290::-;16781:5;;-1:-1:-1;;;;;16781:5:0;16767:10;:19;16763:46;;16795:14;;-1:-1:-1;;;16795:14:0;;;;;;;;;;;16763:46;24095:19;;24092:180:::1;;24135:9;24131:130;24150:19:::0;;::::1;24131:130;;;24195:50;24209:10;24221:8;;24230:1;24221:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;24234:7;;24242:1;24234:10;;;;;;;:::i;:::-;;;;;;;24195:13;:50::i;:::-;24171:3;;24131:130;;;;24092:180;23989:290:::0;;;;:::o;7402:95::-;7449:13;7482:7;7475:14;;;;;:::i;8779:182::-;8848:4;200:10;8904:27;200:10;8921:2;8925:5;8904:9;:27::i;23548:433::-;23608:37;23622:10;18407:42;23643:1;23608:13;:37::i;:::-;23675:23;18407:42;23696:1;23675:11;:23::i;:::-;23725:37;23739:10;18407:42;23760:1;23725:13;:37::i;:::-;23795:23;18407:42;23816:1;23795:11;:23::i;17026:219::-;16781:5;;-1:-1:-1;;;;;16781:5:0;16767:10;:19;16763:46;;16795:14;;-1:-1:-1;;;16795:14:0;;;;;;;;;;;16763:46;-1:-1:-1;;;;;17109:20:0;::::1;17105:47;;17138:14;;-1:-1:-1::0;;;17138:14:0::1;;;;;;;;;;;17105:47;17165:5;:14:::0;;-1:-1:-1;;;;;;17165:14:0::1;-1:-1:-1::0;;;;;17165:14:0;::::1;::::0;;::::1;::::0;;;17197:40:::1;::::0;17218:10:::1;::::0;17197:40:::1;::::0;-1:-1:-1;;17197:40:0::1;17026:219:::0;:::o;22941:272::-;22981:7;23001:15;23037:10;;23019:15;:28;;;;:::i;:::-;23001:46;;23072:10;23061:7;:21;23058:75;;23091:42;23100:13;;23116:1;23100:17;;;;:::i;:::-;8373:12;;23091:8;:42::i;23119:13::-;23091:8;:42::i;:::-;23084:49;;;22941:272;:::o;23058:75::-;23194:10;23184:7;23168:13;;:23;;;;:::i;:::-;:36;;;;:::i;:::-;23151:13;;:54;;;;:::i;14312:130::-;14397:37;14406:5;14413:7;14422:5;14429:4;14397:8;:37::i;:::-;14312:130;;;:::o;15293:443::-;-1:-1:-1;;;;;15406:19:0;;15402:91;;15449:32;;-1:-1:-1;;;15449:32:0;;15478:1;15449:32;;;2650:51:1;2623:18;;15449:32:0;2504:203:1;15402:91:0;-1:-1:-1;;;;;15507:21:0;;15503:92;;15552:31;;-1:-1:-1;;;15552:31:0;;15580:1;15552:31;;;2650:51:1;2623:18;;15552:31:0;2504:203:1;15503:92:0;-1:-1:-1;;;;;15605:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;15651:78;;;;15702:7;-1:-1:-1;;;;;15686:31:0;15695:5;-1:-1:-1;;;;;15686:31:0;;15711:5;15686:31;;;;1283:25:1;;1271:2;1256:18;;1137:177;15686:31:0;;;;;;;;15293:443;;;;:::o;11519:1135::-;-1:-1:-1;;;;;11609:18:0;;11605:552;;11763:5;11747:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;11605:552:0;;-1:-1:-1;11605:552:0;;-1:-1:-1;;;;;11823:15:0;;11801:19;11823:15;;;;;;;;;;;11857:19;;;11853:117;;;11904:50;;-1:-1:-1;;;11904:50:0;;-1:-1:-1;;;;;9736:32:1;;11904:50:0;;;9718:51:1;9785:18;;;9778:34;;;9828:18;;;9821:34;;;9691:18;;11904:50:0;9516:345:1;11853:117:0;-1:-1:-1;;;;;12093:15:0;;:9;:15;;;;;;;;;;12111:19;;;;12093:37;;11605:552;-1:-1:-1;;;;;12173:16:0;;12169:435;;12339:12;:21;;;;;;;12169:435;;;-1:-1:-1;;;;;12555:13:0;;:9;:13;;;;;;;;;;:22;;;;;;12169:435;12636:2;-1:-1:-1;;;;;12621:25:0;12630:4;-1:-1:-1;;;;;12621:25:0;;12640:5;12621:25;;;;1283::1;;1271:2;1256:18;;1137:177;12621:25:0;;;;;;;;11519:1135;;;:::o;16028:487::-;-1:-1:-1;;;;;9131:18:0;;;16128:24;9131:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;16195:37:0;;16191:317;;16272:5;16253:16;:24;16249:132;;;16305:60;;-1:-1:-1;;;16305:60:0;;-1:-1:-1;;;;;9736:32:1;;16305:60:0;;;9718:51:1;9785:18;;;9778:34;;;9828:18;;;9821:34;;;9691:18;;16305:60:0;9516:345:1;16249:132:0;16424:57;16433:5;16440:7;16468:5;16449:16;:24;16475:5;16424:8;:57::i;10887:308::-;-1:-1:-1;;;;;10971:18:0;;10967:88;;11013:30;;-1:-1:-1;;;11013:30:0;;11040:1;11013:30;;;2650:51:1;2623:18;;11013:30:0;2504:203:1;10967:88:0;-1:-1:-1;;;;;11069:16:0;;11065:88;;11109:32;;-1:-1:-1;;;11109:32:0;;11138:1;11109:32;;;2650:51:1;2623:18;;11109:32:0;2504:203:1;11065:88:0;11163:24;11171:4;11177:2;11181:5;11163:7;:24::i;20780:509::-;19031:6;:13;;-1:-1:-1;;;;19031:13:0;-1:-1:-1;;;19031:13:0;;;20890:4:::1;-1:-1:-1::0;8548:18:0;;;;;;;;;;;20858:38:::1;;20924:3;20910:11;:17;20907:39;;;20943:3;20929:17;;20907:39;20981:16;::::0;;20995:1:::1;20981:16:::0;;;;;::::1;::::0;;20957:21:::1;::::0;20981:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20981:16:0::1;20957:40;;21026:4;21008;21013:1;21008:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21008:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;21052:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;21052:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;21008:7;;21052:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21042:4;21047:1;21042:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21042:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;21085:15:::1;::::0;:196:::1;::::0;-1:-1:-1;;;21085:196:0;;:15;::::1;::::0;:66:::1;::::0;:196:::1;::::0;21166:11;;21085:15:::1;::::0;21208:4;;21235::::1;::::0;21255:15:::1;::::0;21085:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19067:6:0;:14;;-1:-1:-1;;;;19067:14:0;;;-1:-1:-1;;;;;20780:509:0:o;23221:132::-;23274:12;23311:10;-1:-1:-1;;;;;23311:15:0;23334:6;23311:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13548:211;-1:-1:-1;;;;;13619:21:0;;13615:91;;13664:30;;-1:-1:-1;;;13664:30:0;;13691:1;13664:30;;;2650:51:1;2623:18;;13664:30:0;2504:203:1;13615:91:0;13716:35;13724:7;13741:1;13745:5;13716:7;:35::i;20667:105::-;20729:7;20758:1;20756;:3;20755:9;;20763:1;20755:9;;;20761:1;20755:9;20748:16;20667:105;-1:-1:-1;;;20667:105:0:o;19507:1150::-;-1:-1:-1;;;;;19629:24:0;;19594:17;19629:24;;;:18;:24;;;;;;;;19628:25;:52;;;;-1:-1:-1;;;;;;19658:22:0;;;;;;:18;:22;;;;;;;;19657:23;19628:52;19624:971;;;19724:3;19717:4;;19709:5;:12;;;;:::i;:::-;:18;;;;:::i;:::-;19756:13;;19697:30;;-1:-1:-1;;;;;;19748:21:0;;;19756:13;;19748:21;:55;;;;-1:-1:-1;19787:15:0;;-1:-1:-1;;;;;19773:30:0;;;19787:15;;19773:30;;19748:55;19744:173;;;19858:10;:8;:10::i;:::-;19849:5;19833:13;19843:2;-1:-1:-1;;;;;8548:18:0;8521:7;8548:18;;;;;;;;;;;;8456:118;19833:13;:21;;;;:::i;:::-;:35;;19825:76;;;;-1:-1:-1;;;19825:76:0;;11374:2:1;19825:76:0;;;11356:21:1;11413:2;11393:18;;;11386:30;11452;11432:18;;;11425:58;11500:18;;19825:76:0;11172:352:1;19825:76:0;19936:11;;19933:651;;19967:12;19982:13;19994:1;19982:9;:13;:::i;:::-;19967:28;-1:-1:-1;20014:52:0;20028:4;20042;20049:16;19967:28;20049:9;:16;:::i;20014:52::-;20085:34;20099:4;18407:42;20114:4;20085:13;:34::i;:::-;20153:26;18407:42;20174:4;20153:11;:26::i;:::-;20229:6;;-1:-1:-1;;;20229:6:0;;;;20228:7;:30;;;;-1:-1:-1;20245:13:0;;-1:-1:-1;;;;;20239:19:0;;;20245:13;;20239:19;20228:30;:45;;;;-1:-1:-1;20262:11:0;;-1:-1:-1;;;20262:11:0;;;;20228:45;20224:345;;;20298:46;20315:28;20324:5;18773:13;18499:1;18773:2;:13;:::i;:::-;18767:19;;:3;:19;:::i;20315:28::-;20298:16;:46::i;:::-;20396:21;20444:22;;20440:110;;20495:31;20504:21;20495:8;:31::i;:::-;20275:294;20224:345;19948:636;19933:651;20607:42;20621:4;20627:2;20631:17;20639:9;20631:5;:17;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;492:70;437:131;:::o;573:367::-;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1319:508::-;1396:6;1404;1412;1465:2;1453:9;1444:7;1440:23;1436:32;1433:52;;;1481:1;1478;1471:12;1433:52;1520:9;1507:23;1539:31;1564:5;1539:31;:::i;:::-;1589:5;-1:-1:-1;1646:2:1;1631:18;;1618:32;1659:33;1618:32;1659:33;:::i;:::-;1319:508;;1711:7;;-1:-1:-1;;;1791:2:1;1776:18;;;;1763:32;;1319:508::o;2021:226::-;2080:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:52;;;2149:1;2146;2139:12;2101:52;-1:-1:-1;2194:23:1;;2021:226;-1:-1:-1;2021:226:1:o;2252:247::-;2311:6;2364:2;2352:9;2343:7;2339:23;2335:32;2332:52;;;2380:1;2377;2370:12;2332:52;2419:9;2406:23;2438:31;2463:5;2438:31;:::i;2712:367::-;2775:8;2785:6;2839:3;2832:4;2824:6;2820:17;2816:27;2806:55;;2857:1;2854;2847:12;2806:55;-1:-1:-1;2880:20:1;;2923:18;2912:30;;2909:50;;;2955:1;2952;2945:12;2909:50;2992:4;2984:6;2980:17;2968:29;;3052:3;3045:4;3035:6;3032:1;3028:14;3020:6;3016:27;3012:38;3009:47;3006:67;;;3069:1;3066;3059:12;3006:67;2712:367;;;;;:::o;3084:768::-;3206:6;3214;3222;3230;3283:2;3271:9;3262:7;3258:23;3254:32;3251:52;;;3299:1;3296;3289:12;3251:52;3339:9;3326:23;3372:18;3364:6;3361:30;3358:50;;;3404:1;3401;3394:12;3358:50;3443:70;3505:7;3496:6;3485:9;3481:22;3443:70;:::i;:::-;3532:8;;-1:-1:-1;3417:96:1;-1:-1:-1;;3620:2:1;3605:18;;3592:32;3649:18;3636:32;;3633:52;;;3681:1;3678;3671:12;3633:52;3720:72;3784:7;3773:8;3762:9;3758:24;3720:72;:::i;:::-;3084:768;;;;-1:-1:-1;3811:8:1;-1:-1:-1;;;;3084:768:1:o;3857:388::-;3925:6;3933;3986:2;3974:9;3965:7;3961:23;3957:32;3954:52;;;4002:1;3999;3992:12;3954:52;4041:9;4028:23;4060:31;4085:5;4060:31;:::i;:::-;4110:5;-1:-1:-1;4167:2:1;4152:18;;4139:32;4180:33;4139:32;4180:33;:::i;:::-;4232:7;4222:17;;;3857:388;;;;;:::o;4250:380::-;4329:1;4325:12;;;;4372;;;4393:61;;4447:4;4439:6;4435:17;4425:27;;4393:61;4500:2;4492:6;4489:14;4469:18;4466:38;4463:161;;4546:10;4541:3;4537:20;4534:1;4527:31;4581:4;4578:1;4571:15;4609:4;4606:1;4599:15;4463:161;;4250:380;;;:::o;4635:127::-;4696:10;4691:3;4687:20;4684:1;4677:31;4727:4;4724:1;4717:15;4751:4;4748:1;4741:15;4767:375;4855:1;4873:5;4887:249;4908:1;4898:8;4895:15;4887:249;;;4958:4;4953:3;4949:14;4943:4;4940:24;4937:50;;;4967:18;;:::i;:::-;5017:1;5007:8;5003:16;5000:49;;;5031:16;;;;5000:49;5114:1;5110:16;;;;;5070:15;;4887:249;;;4767:375;;;;;;:::o;5147:902::-;5196:5;5226:8;5216:80;;-1:-1:-1;5267:1:1;5281:5;;5216:80;5315:4;5305:76;;-1:-1:-1;5352:1:1;5366:5;;5305:76;5397:4;5415:1;5410:59;;;;5483:1;5478:174;;;;5390:262;;5410:59;5440:1;5431:10;;5454:5;;;5478:174;5515:3;5505:8;5502:17;5499:43;;;5522:18;;:::i;:::-;-1:-1:-1;;5578:1:1;5564:16;;5637:5;;5390:262;;5736:2;5726:8;5723:16;5717:3;5711:4;5708:13;5704:36;5698:2;5688:8;5685:16;5680:2;5674:4;5671:12;5667:35;5664:77;5661:203;;;-1:-1:-1;5773:19:1;;;5849:5;;5661:203;5896:42;-1:-1:-1;;5921:8:1;5915:4;5896:42;:::i;:::-;5974:6;5970:1;5966:6;5962:19;5953:7;5950:32;5947:58;;;5985:18;;:::i;:::-;6023:20;;5147:902;-1:-1:-1;;;5147:902:1:o;6054:140::-;6112:5;6141:47;6182:4;6172:8;6168:19;6162:4;6141:47;:::i;6199:168::-;6272:9;;;6303;;6320:15;;;6314:22;;6300:37;6290:71;;6341:18;;:::i;6708:251::-;6778:6;6831:2;6819:9;6810:7;6806:23;6802:32;6799:52;;;6847:1;6844;6837:12;6799:52;6879:9;6873:16;6898:31;6923:5;6898:31;:::i;7269:217::-;7309:1;7335;7325:132;;7379:10;7374:3;7370:20;7367:1;7360:31;7414:4;7411:1;7404:15;7442:4;7439:1;7432:15;7325:132;-1:-1:-1;7471:9:1;;7269:217::o;8099:456::-;8187:6;8195;8203;8256:2;8244:9;8235:7;8231:23;8227:32;8224:52;;;8272:1;8269;8262:12;8224:52;-1:-1:-1;;8317:16:1;;8423:2;8408:18;;8402:25;8519:2;8504:18;;;8498:25;8317:16;;8402:25;;-1:-1:-1;8498:25:1;8099:456;-1:-1:-1;8099:456:1:o;8839:277::-;8906:6;8959:2;8947:9;8938:7;8934:23;8930:32;8927:52;;;8975:1;8972;8965:12;8927:52;9007:9;9001:16;9060:5;9053:13;9046:21;9039:5;9036:32;9026:60;;9082:1;9079;9072:12;9121:127;9182:10;9177:3;9173:20;9170:1;9163:31;9213:4;9210:1;9203:15;9237:4;9234:1;9227:15;9253:128;9320:9;;;9341:11;;;9338:37;;;9355:18;;:::i;9386:125::-;9451:9;;;9472:10;;;9469:36;;;9485:18;;:::i;9998:959::-;10260:4;10308:3;10297:9;10293:19;10339:6;10328:9;10321:25;10382:6;10377:2;10366:9;10362:18;10355:34;10425:3;10420:2;10409:9;10405:18;10398:31;10449:6;10484;10478:13;10515:6;10507;10500:22;10553:3;10542:9;10538:19;10531:26;;10592:2;10584:6;10580:15;10566:29;;10613:1;10623:195;10637:6;10634:1;10631:13;10623:195;;;10702:13;;-1:-1:-1;;;;;10698:39:1;10686:52;;10767:2;10793:15;;;;10758:12;;;;10734:1;10652:9;10623:195;;;-1:-1:-1;;;;;;;10874:32:1;;;;10869:2;10854:18;;10847:60;-1:-1:-1;;10938:3:1;10923:19;10916:35;10835:3;9998:959;-1:-1:-1;;;9998:959:1:o

Swarm Source

ipfs://bd6629b9971334596f7842ef823e7b6eb29bdea14d0f5ef4c7f5e42b5fad13c4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.