ETH Price: $2,372.08 (-0.72%)

Token

TRIBOT (TRIBOT)
 

Overview

Max Total Supply

100,000,000 TRIBOT

Holders

152

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
54,587.245 TRIBOT

Value
$0.00
0x966723584f882b92348227aa3d75510b08a82311
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:
Tribot

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
__/\\\\\\\\\\\\\\\____/\\\\\\\\\______/\\\\\\\\\\\__/\\\\\\\\\\\\\_________/\\\\\_______/\\\\\\\\\\\\\\\_        
 _\///////\\\/////___/\\\///////\\\___\/////\\\///__\/\\\/////////\\\_____/\\\///\\\____\///////\\\/////__       
  _______\/\\\_______\/\\\_____\/\\\_______\/\\\_____\/\\\_______\/\\\___/\\\/__\///\\\________\/\\\_______      
   _______\/\\\_______\/\\\\\\\\\\\/________\/\\\_____\/\\\\\\\\\\\\\\___/\\\______\//\\\_______\/\\\_______     
    _______\/\\\_______\/\\\//////\\\________\/\\\_____\/\\\/////////\\\_\/\\\_______\/\\\_______\/\\\_______    
     _______\/\\\_______\/\\\____\//\\\_______\/\\\_____\/\\\_______\/\\\_\//\\\______/\\\________\/\\\_______   
      _______\/\\\_______\/\\\_____\//\\\______\/\\\_____\/\\\_______\/\\\__\///\\\__/\\\__________\/\\\_______  
       _______\/\\\_______\/\\\______\//\\\__/\\\\\\\\\\\_\/\\\\\\\\\\\\\/_____\///\\\\\/___________\/\\\_______ 
        _______\///________\///________\///__\///////////__\/////////////_________\/////_____________\///________
*/// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. 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;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @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 {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: conrcat.sol


pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;


interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

//Tribot:  Main Token Contract
contract Tribot is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public deadAddress = address(0xdead);

    address public botWallet;
    address public rewardWallet;
    address public liquidityWallet;

    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;
    uint256 public burnt;
    uint256 public buyTotalFees = 5;
    uint256 public buyBotFee = 1;
    uint256 public buyBurnFee = 1;
    uint256 public buyLiquidityFee = 1;
    uint256 public buyRewardFee = 2;

    uint256 public sellTotalFees = 5;
    uint256 public sellBotFee = 1;
    uint256 public sellBurnFee = 1;
    uint256 public sellLiquidityFee = 1;
    uint256 public sellRewardFee = 2;

    uint256 botPercent = 20;
    uint256 burnPercent= 20;
    uint256 liquidityPercent = 20;
    uint256 rewardPercent=40;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedFromMaxWallet;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event botWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event RewardWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event BurnWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event LiquidityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("TRIBOT", "TRIBOT") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludedFromMaxWallet(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludedFromMaxWallet(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 100_000_000 * 1e18; // 100 Million

        maxWallet = (totalSupply * (2)) / 100; // 2% from total supply maxWallet

        botWallet = address(0x2b077E82508915F46b0Bc33E3EbaB02DeF1B4798);
        rewardWallet = address(0x956a7eFD059e3CeD14117E53802d96Bb919a0563);
        liquidityWallet = address(0xc14D74Bd8Cf130AF332870cDDc936609d938fcf0);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);

        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludedFromMaxWallet(owner(), true);
        excludedFromMaxWallet(address(this), true);
        excludedFromMaxWallet(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(address(0xF78B1f0Fd13d723897cb5732E1797Ed0B48aF152), totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10 ** 18);
    }

    function excludedFromMaxWallet(address updAds, bool isEx) public onlyOwner {
        _isExcludedFromMaxWallet[updAds] = isEx;
    }

    function updateBuyFees(
        uint256 _BotFee,
        uint256 _rewardFee,
        uint256 _burnFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyBotFee = _BotFee;
        buyRewardFee = _rewardFee;
        buyBurnFee = _burnFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyBotFee + buyRewardFee + buyBurnFee + buyLiquidityFee;
    }

    function updateSellFees(
        uint256 _BotFee,
        uint256 _rewardFee,
        uint256 _burnFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellBotFee = _BotFee;
        sellRewardFee = _rewardFee;
        sellBurnFee = _burnFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees =
            sellBotFee +
            sellRewardFee +
            sellBurnFee +
            sellLiquidityFee;
    }

    function UpdatePercentages(
        uint256 _Bot,
        uint256 _reward,
        uint256 _burn,
        uint256 _liquidity
    ) external onlyOwner {
        botPercent = _Bot;
        rewardPercent = _reward;
        burnPercent = _burn;
        liquidityPercent = _liquidity;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateLiquidityWallet(address newWallet) external onlyOwner {
        emit LiquidityWalletUpdated(newWallet, liquidityWallet);
        liquidityWallet = newWallet;
    }

    function UpdateBurnWallet(address newWallet) external onlyOwner {
        emit BurnWalletUpdated(newWallet, deadAddress);
        deadAddress = newWallet;
    }

    function updatebotWallet(address newbotWallet) external onlyOwner {
        emit botWalletUpdated(newbotWallet, botWallet);
        botWallet = newbotWallet;
    }

    function UpdateRewardWallet(address newWallet) external onlyOwner {
        emit RewardWalletUpdated(newWallet, rewardWallet);
        rewardWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead)
            ) {
                if (!tradingActive) {
                    require(
                        !automatedMarketMakerPairs[from] &&
                            !automatedMarketMakerPairs[to],
                        "Trading is not active."
                    );
                }
                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedFromMaxWallet[to]
                ) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        bool takeFee = true;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
            }

            if (fees > 0) {
                super._transfer(from, botWallet, (fees * botPercent) / 100);
                super._transfer(
                    from,
                    rewardWallet,
                    (fees * rewardPercent) / 100
                );
                super._transfer(
                    from,
                    liquidityWallet,
                    (fees * liquidityPercent) / 100
                );
                _burn(from, (fees * burnPercent) / 100);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"BurnWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"RewardWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"botWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateBurnWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Bot","type":"uint256"},{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"UpdatePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdateRewardWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_BotFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_BotFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newbotWallet","type":"address"}],"name":"updatebotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600680546001600160a01b03191661dead179055600b805461ffff191660019081179091556005600f819055601082905560118290556012829055600260138190556014918255601583905560168390556017929092556018919091556019819055601a819055601b556028601c553480156200008057600080fd5b506040805180820182526006808252651514925093d560d21b6020808401829052845180860190955291845290830152906003620000bf8382620006f7565b506004620000ce8282620006f7565b505050620000eb620000e5620003bf60201b60201c565b620003c3565b737a250d5630b4cf539739df2c5dacb4c659f2488d6200010d81600162000415565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620007c3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f29190620007c3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000240573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002669190620007c3565b6001600160a01b031660a08190526200028190600162000415565b60a051620002919060016200044a565b6a52b7d2dcc80cd2e40000006064620002ac8260026200080b565b620002b891906200082b565b600a55600780546001600160a01b0319908116732b077e82508915f46b0bc33e3ebab02def1b47981790915560088054821673956a7efd059e3ced14117e53802d96bb919a05631790556009805490911673c14d74bd8cf130af332870cddc936609d938fcf017905562000340620003386005546001600160a01b031690565b60016200049e565b6200034d3060016200049e565b6200035c61dead60016200049e565b6200037b620003736005546001600160a01b031690565b600162000415565b6200038830600162000415565b6200039761dead600162000415565b620003b773f78b1f0fd13d723897cb5732e1797ed0b48af1528262000507565b505062000864565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200041f620005f0565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b620004a8620005f0565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005635760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600260008282546200057791906200084e565b90915550506001600160a01b03821660009081526020819052604081208054839290620005a69084906200084e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200064c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200055a565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200067e57607f821691505b6020821081036200069f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200064e57600081815260208120601f850160051c81016020861015620006ce5750805b601f850160051c820191505b81811015620006ef57828155600101620006da565b505050505050565b81516001600160401b0381111562000713576200071362000653565b6200072b8162000724845462000669565b84620006a5565b602080601f8311600181146200076357600084156200074a5750858301515b600019600386901b1c1916600185901b178555620006ef565b600085815260208120601f198616915b82811015620007945788860151825594840194600190910190840162000773565b5085821015620007b35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620007d657600080fd5b81516001600160a01b0381168114620007ee57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008255762000825620007f5565b92915050565b6000826200084957634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008255762000825620007f5565b60805160a051611e9b620008916000396000818161050a0152610de8015260006103ed0152611e9b6000f3fe6080604052600436106103395760003560e01c8063a457c2d7116101ab578063dd62ed3e116100f7578063f0a4ad1611610095578063f2fde38b1161006f578063f2fde38b146109a9578063f6374342146109c9578063f8b45b05146109df578063fb75b2c7146109f557600080fd5b8063f0a4ad161461095d578063f11a24d314610973578063f14210a61461098957600080fd5b8063e10dffc0116100d1578063e10dffc0146108e7578063e37ba8f914610907578063e71dc3f514610927578063e7ad9fcd1461093d57600080fd5b8063dd62ed3e14610875578063de0aad53146108bb578063e06b17a2146108d157600080fd5b8063bf56b37111610164578063c6d2577d1161013e578063c6d2577d146107f9578063d1d7d7ef1461080f578063d46980161461083f578063d85ba0631461085f57600080fd5b8063bf56b371146107a3578063c0246668146107b9578063c18bc195146107d957600080fd5b8063a457c2d7146106e8578063a9059cbb14610708578063adb873bd14610728578063b192da2d1461073e578063b62496f514610754578063bbc0c7421461078457600080fd5b80634a62bb65116102855780637a4b006a11610223578063910d0a6d116101fd578063910d0a6d1461067357806395d89b41146106935780639a7a23d6146106a85780639e281a98146106c857600080fd5b80637a4b006a146106155780637c493696146106355780638da5cb5b1461065557600080fd5b80636a486a8e1161025f5780636a486a8e1461059f57806370a08231146105b5578063715018a6146105eb578063751039fc1461060057600080fd5b80634a62bb651461052c5780634fbee193146105465780636958bf241461057f57600080fd5b806323b872dd116102f25780632e6ed7ef116102cc5780632e6ed7ef1461049c578063313ce567146104bc57806339509351146104d857806349bd5a5e146104f857600080fd5b806323b872dd1461043c57806327c8f8351461045c5780632d03f9001461047c57600080fd5b806301339c211461034557806306fdde031461035c578063095ea7b3146103875780630cfe2f3f146103b75780631694505e146103db57806318160ddd1461042757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a15565b005b34801561036857600080fd5b50610371610a82565b60405161037e9190611b44565b60405180910390f35b34801561039357600080fd5b506103a76103a2366004611ba7565b610b14565b604051901515815260200161037e565b3480156103c357600080fd5b506103cd60135481565b60405190815260200161037e565b3480156103e757600080fd5b5061040f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161037e565b34801561043357600080fd5b506002546103cd565b34801561044857600080fd5b506103a7610457366004611bd3565b610b2b565b34801561046857600080fd5b5060065461040f906001600160a01b031681565b34801561048857600080fd5b5060075461040f906001600160a01b031681565b3480156104a857600080fd5b5061035a6104b7366004611c14565b610bd5565b3480156104c857600080fd5b506040516012815260200161037e565b3480156104e457600080fd5b506103a76104f3366004611ba7565b610c1a565b34801561050457600080fd5b5061040f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053857600080fd5b50600b546103a79060ff1681565b34801561055257600080fd5b506103a7610561366004611c46565b6001600160a01b03166000908152601d602052604090205460ff1690565b34801561058b57600080fd5b5061035a61059a366004611c46565b610c56565b3480156105ab57600080fd5b506103cd60145481565b3480156105c157600080fd5b506103cd6105d0366004611c46565b6001600160a01b031660009081526020819052604090205490565b3480156105f757600080fd5b5061035a610cbb565b34801561060c57600080fd5b506103a7610ccf565b34801561062157600080fd5b5061035a610630366004611c46565b610ce9565b34801561064157600080fd5b5061035a610650366004611c46565b610d4e565b34801561066157600080fd5b506005546001600160a01b031661040f565b34801561067f57600080fd5b5061035a61068e366004611c14565b610db3565b34801561069f57600080fd5b50610371610dcf565b3480156106b457600080fd5b5061035a6106c3366004611c78565b610dde565b3480156106d457600080fd5b5061035a6106e3366004611ba7565b610e9b565b3480156106f457600080fd5b506103a7610703366004611ba7565b610fc2565b34801561071457600080fd5b506103a7610723366004611ba7565b61105b565b34801561073457600080fd5b506103cd60165481565b34801561074a57600080fd5b506103cd600e5481565b34801561076057600080fd5b506103a761076f366004611c46565b601f6020526000908152604090205460ff1681565b34801561079057600080fd5b50600b546103a790610100900460ff1681565b3480156107af57600080fd5b506103cd600c5481565b3480156107c557600080fd5b5061035a6107d4366004611c78565b611068565b3480156107e557600080fd5b5061035a6107f4366004611cb1565b6110cf565b34801561080557600080fd5b506103cd600d5481565b34801561081b57600080fd5b506103a761082a366004611c46565b601e6020526000908152604090205460ff1681565b34801561084b57600080fd5b5060095461040f906001600160a01b031681565b34801561086b57600080fd5b506103cd600f5481565b34801561088157600080fd5b506103cd610890366004611cca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108c757600080fd5b506103cd60185481565b3480156108dd57600080fd5b506103cd60155481565b3480156108f357600080fd5b5061035a610902366004611c78565b6110ef565b34801561091357600080fd5b5061035a610922366004611c46565b611122565b34801561093357600080fd5b506103cd60115481565b34801561094957600080fd5b5061035a610958366004611c14565b611187565b34801561096957600080fd5b506103cd60105481565b34801561097f57600080fd5b506103cd60125481565b34801561099557600080fd5b5061035a6109a4366004611cb1565b6111cc565b3480156109b557600080fd5b5061035a6109c4366004611c46565b611242565b3480156109d557600080fd5b506103cd60175481565b3480156109eb57600080fd5b506103cd600a5481565b348015610a0157600080fd5b5060085461040f906001600160a01b031681565b610a1d6112bb565b600c5415610a695760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b60448201526064015b60405180910390fd5b43600c5542600d55600b805461ff001916610100179055565b606060038054610a9190611cf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610abd90611cf8565b8015610b0a5780601f10610adf57610100808354040283529160200191610b0a565b820191906000526020600020905b815481529060010190602001808311610aed57829003601f168201915b5050505050905090565b6000610b21338484611315565b5060015b92915050565b6000610b38848484611439565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610bbd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a60565b610bca8533858403611315565b506001949350505050565b610bdd6112bb565b60108490556013839055601182905560128190558082610bfd8587611d48565b610c079190611d48565b610c119190611d48565b600f5550505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b21918590610c51908690611d48565b611315565b610c5e6112bb565b6006546040516001600160a01b03918216918316907fe678f864bcd4f50e0554d3b42d5a0007424f154c8b29d4845c7c727f319cfd9290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b610cc36112bb565b610ccd60006117fb565b565b6000610cd96112bb565b50600b805460ff19169055600190565b610cf16112bb565b6008546040516001600160a01b03918216918316907f53a789b033e632f89772129774e70aa81a1a130a54c0297cdbb4585dfcfd9a7f90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b610d566112bb565b6007546040516001600160a01b03918216918316907fe79ff165e4a66a54cd373907e5f9578f5ca5f0e65b5aa6660a5edd8296f4cc2290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b610dbb6112bb565b601993909355601c91909155601a55601b55565b606060048054610a9190611cf8565b610de66112bb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610e8d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a60565b610e97828261184d565b5050565b610ea36112bb565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa158015610ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0d9190611d5b565b1015610f4c5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a60565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610f99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbd9190611d74565b505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a60565b6110513385858403611315565b5060019392505050565b6000610b21338484611439565b6110706112bb565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6110d76112bb565b6110e981670de0b6b3a7640000611d91565b600a5550565b6110f76112bb565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b61112a6112bb565b6009546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b61118f6112bb565b601584905560188390556016829055601781905580826111af8587611d48565b6111b99190611d48565b6111c39190611d48565b60145550505050565b6111d46112bb565b804710156112155760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a60565b604051339082156108fc029083906000818181858888f19350505050158015610e97573d6000803e3d6000fd5b61124a6112bb565b6001600160a01b0381166112af5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a60565b6112b8816117fb565b50565b6005546001600160a01b03163314610ccd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a60565b6001600160a01b0383166113775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a60565b6001600160a01b0382166113d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a60565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661145f5760405162461bcd60e51b8152600401610a6090611da8565b6001600160a01b0382166114855760405162461bcd60e51b8152600401610a6090611ded565b8060000361149957610fbd838360006118a1565b600b5460ff1615611646576005546001600160a01b038481169116148015906114d057506005546001600160a01b03838116911614155b80156114e457506001600160a01b03821615155b80156114fb57506001600160a01b03821661dead14155b1561164657600b54610100900460ff16611596576001600160a01b0383166000908152601f602052604090205460ff1615801561155157506001600160a01b0382166000908152601f602052604090205460ff16155b6115965760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a60565b6001600160a01b0383166000908152601f602052604090205460ff1680156115d757506001600160a01b0382166000908152601e602052604090205460ff16155b1561164657600a546001600160a01b0383166000908152602081905260409020546116029083611d48565b11156116465760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a60565b6001600160a01b0383166000908152601d602052604090205460019060ff168061168857506001600160a01b0383166000908152601d602052604090205460ff165b15611691575060005b600081156117e9576001600160a01b0384166000908152601f602052604090205460ff1680156116c357506000601454115b156116e9576064601454846116d89190611d91565b6116e29190611e30565b9050611735565b6001600160a01b0385166000908152601f602052604090205460ff16801561171357506000600f54115b15611735576064600f54846117289190611d91565b6117329190611e30565b90505b80156117dc5760075460195461176f9187916001600160a01b03909116906064906117609086611d91565b61176a9190611e30565b6118a1565b600854601c546117949187916001600160a01b03909116906064906117609086611d91565b600954601b546117b99187916001600160a01b03909116906064906117609086611d91565b6117dc856064601a54846117cd9190611d91565b6117d79190611e30565b6119f6565b6117e68184611e52565b92505b6117f48585856118a1565b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166118c75760405162461bcd60e51b8152600401610a6090611da8565b6001600160a01b0382166118ed5760405162461bcd60e51b8152600401610a6090611ded565b6001600160a01b038316600090815260208190526040902054818110156119655760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a60565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061199c908490611d48565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119e891815260200190565b60405180910390a350505050565b6001600160a01b038216611a565760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a60565b6001600160a01b03821660009081526020819052604090205481811015611aca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a60565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611af9908490611e52565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b81811015611b7157858101830151858201604001528201611b55565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112b857600080fd5b60008060408385031215611bba57600080fd5b8235611bc581611b92565b946020939093013593505050565b600080600060608486031215611be857600080fd5b8335611bf381611b92565b92506020840135611c0381611b92565b929592945050506040919091013590565b60008060008060808587031215611c2a57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611c5857600080fd5b8135611c6381611b92565b9392505050565b80151581146112b857600080fd5b60008060408385031215611c8b57600080fd5b8235611c9681611b92565b91506020830135611ca681611c6a565b809150509250929050565b600060208284031215611cc357600080fd5b5035919050565b60008060408385031215611cdd57600080fd5b8235611ce881611b92565b91506020830135611ca681611b92565b600181811c90821680611d0c57607f821691505b602082108103611d2c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b2557610b25611d32565b600060208284031215611d6d57600080fd5b5051919050565b600060208284031215611d8657600080fd5b8151611c6381611c6a565b8082028115828204841417610b2557610b25611d32565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082611e4d57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b2557610b25611d3256fea264697066735822122010c1789d80aabe24089db0755318dd072a605c062bf5641c5c7e0a52eef8458164736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103395760003560e01c8063a457c2d7116101ab578063dd62ed3e116100f7578063f0a4ad1611610095578063f2fde38b1161006f578063f2fde38b146109a9578063f6374342146109c9578063f8b45b05146109df578063fb75b2c7146109f557600080fd5b8063f0a4ad161461095d578063f11a24d314610973578063f14210a61461098957600080fd5b8063e10dffc0116100d1578063e10dffc0146108e7578063e37ba8f914610907578063e71dc3f514610927578063e7ad9fcd1461093d57600080fd5b8063dd62ed3e14610875578063de0aad53146108bb578063e06b17a2146108d157600080fd5b8063bf56b37111610164578063c6d2577d1161013e578063c6d2577d146107f9578063d1d7d7ef1461080f578063d46980161461083f578063d85ba0631461085f57600080fd5b8063bf56b371146107a3578063c0246668146107b9578063c18bc195146107d957600080fd5b8063a457c2d7146106e8578063a9059cbb14610708578063adb873bd14610728578063b192da2d1461073e578063b62496f514610754578063bbc0c7421461078457600080fd5b80634a62bb65116102855780637a4b006a11610223578063910d0a6d116101fd578063910d0a6d1461067357806395d89b41146106935780639a7a23d6146106a85780639e281a98146106c857600080fd5b80637a4b006a146106155780637c493696146106355780638da5cb5b1461065557600080fd5b80636a486a8e1161025f5780636a486a8e1461059f57806370a08231146105b5578063715018a6146105eb578063751039fc1461060057600080fd5b80634a62bb651461052c5780634fbee193146105465780636958bf241461057f57600080fd5b806323b872dd116102f25780632e6ed7ef116102cc5780632e6ed7ef1461049c578063313ce567146104bc57806339509351146104d857806349bd5a5e146104f857600080fd5b806323b872dd1461043c57806327c8f8351461045c5780632d03f9001461047c57600080fd5b806301339c211461034557806306fdde031461035c578063095ea7b3146103875780630cfe2f3f146103b75780631694505e146103db57806318160ddd1461042757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a15565b005b34801561036857600080fd5b50610371610a82565b60405161037e9190611b44565b60405180910390f35b34801561039357600080fd5b506103a76103a2366004611ba7565b610b14565b604051901515815260200161037e565b3480156103c357600080fd5b506103cd60135481565b60405190815260200161037e565b3480156103e757600080fd5b5061040f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161037e565b34801561043357600080fd5b506002546103cd565b34801561044857600080fd5b506103a7610457366004611bd3565b610b2b565b34801561046857600080fd5b5060065461040f906001600160a01b031681565b34801561048857600080fd5b5060075461040f906001600160a01b031681565b3480156104a857600080fd5b5061035a6104b7366004611c14565b610bd5565b3480156104c857600080fd5b506040516012815260200161037e565b3480156104e457600080fd5b506103a76104f3366004611ba7565b610c1a565b34801561050457600080fd5b5061040f7f0000000000000000000000009b9b28b3c7402a120e2941064350b0214a6c939281565b34801561053857600080fd5b50600b546103a79060ff1681565b34801561055257600080fd5b506103a7610561366004611c46565b6001600160a01b03166000908152601d602052604090205460ff1690565b34801561058b57600080fd5b5061035a61059a366004611c46565b610c56565b3480156105ab57600080fd5b506103cd60145481565b3480156105c157600080fd5b506103cd6105d0366004611c46565b6001600160a01b031660009081526020819052604090205490565b3480156105f757600080fd5b5061035a610cbb565b34801561060c57600080fd5b506103a7610ccf565b34801561062157600080fd5b5061035a610630366004611c46565b610ce9565b34801561064157600080fd5b5061035a610650366004611c46565b610d4e565b34801561066157600080fd5b506005546001600160a01b031661040f565b34801561067f57600080fd5b5061035a61068e366004611c14565b610db3565b34801561069f57600080fd5b50610371610dcf565b3480156106b457600080fd5b5061035a6106c3366004611c78565b610dde565b3480156106d457600080fd5b5061035a6106e3366004611ba7565b610e9b565b3480156106f457600080fd5b506103a7610703366004611ba7565b610fc2565b34801561071457600080fd5b506103a7610723366004611ba7565b61105b565b34801561073457600080fd5b506103cd60165481565b34801561074a57600080fd5b506103cd600e5481565b34801561076057600080fd5b506103a761076f366004611c46565b601f6020526000908152604090205460ff1681565b34801561079057600080fd5b50600b546103a790610100900460ff1681565b3480156107af57600080fd5b506103cd600c5481565b3480156107c557600080fd5b5061035a6107d4366004611c78565b611068565b3480156107e557600080fd5b5061035a6107f4366004611cb1565b6110cf565b34801561080557600080fd5b506103cd600d5481565b34801561081b57600080fd5b506103a761082a366004611c46565b601e6020526000908152604090205460ff1681565b34801561084b57600080fd5b5060095461040f906001600160a01b031681565b34801561086b57600080fd5b506103cd600f5481565b34801561088157600080fd5b506103cd610890366004611cca565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108c757600080fd5b506103cd60185481565b3480156108dd57600080fd5b506103cd60155481565b3480156108f357600080fd5b5061035a610902366004611c78565b6110ef565b34801561091357600080fd5b5061035a610922366004611c46565b611122565b34801561093357600080fd5b506103cd60115481565b34801561094957600080fd5b5061035a610958366004611c14565b611187565b34801561096957600080fd5b506103cd60105481565b34801561097f57600080fd5b506103cd60125481565b34801561099557600080fd5b5061035a6109a4366004611cb1565b6111cc565b3480156109b557600080fd5b5061035a6109c4366004611c46565b611242565b3480156109d557600080fd5b506103cd60175481565b3480156109eb57600080fd5b506103cd600a5481565b348015610a0157600080fd5b5060085461040f906001600160a01b031681565b610a1d6112bb565b600c5415610a695760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b60448201526064015b60405180910390fd5b43600c5542600d55600b805461ff001916610100179055565b606060038054610a9190611cf8565b80601f0160208091040260200160405190810160405280929190818152602001828054610abd90611cf8565b8015610b0a5780601f10610adf57610100808354040283529160200191610b0a565b820191906000526020600020905b815481529060010190602001808311610aed57829003601f168201915b5050505050905090565b6000610b21338484611315565b5060015b92915050565b6000610b38848484611439565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610bbd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a60565b610bca8533858403611315565b506001949350505050565b610bdd6112bb565b60108490556013839055601182905560128190558082610bfd8587611d48565b610c079190611d48565b610c119190611d48565b600f5550505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b21918590610c51908690611d48565b611315565b610c5e6112bb565b6006546040516001600160a01b03918216918316907fe678f864bcd4f50e0554d3b42d5a0007424f154c8b29d4845c7c727f319cfd9290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b610cc36112bb565b610ccd60006117fb565b565b6000610cd96112bb565b50600b805460ff19169055600190565b610cf16112bb565b6008546040516001600160a01b03918216918316907f53a789b033e632f89772129774e70aa81a1a130a54c0297cdbb4585dfcfd9a7f90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b610d566112bb565b6007546040516001600160a01b03918216918316907fe79ff165e4a66a54cd373907e5f9578f5ca5f0e65b5aa6660a5edd8296f4cc2290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b610dbb6112bb565b601993909355601c91909155601a55601b55565b606060048054610a9190611cf8565b610de66112bb565b7f0000000000000000000000009b9b28b3c7402a120e2941064350b0214a6c93926001600160a01b0316826001600160a01b031603610e8d5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a60565b610e97828261184d565b5050565b610ea36112bb565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa158015610ee9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0d9190611d5b565b1015610f4c5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a60565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610f99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbd9190611d74565b505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110445760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a60565b6110513385858403611315565b5060019392505050565b6000610b21338484611439565b6110706112bb565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6110d76112bb565b6110e981670de0b6b3a7640000611d91565b600a5550565b6110f76112bb565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b61112a6112bb565b6009546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b61118f6112bb565b601584905560188390556016829055601781905580826111af8587611d48565b6111b99190611d48565b6111c39190611d48565b60145550505050565b6111d46112bb565b804710156112155760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a60565b604051339082156108fc029083906000818181858888f19350505050158015610e97573d6000803e3d6000fd5b61124a6112bb565b6001600160a01b0381166112af5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a60565b6112b8816117fb565b50565b6005546001600160a01b03163314610ccd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a60565b6001600160a01b0383166113775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a60565b6001600160a01b0382166113d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a60565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661145f5760405162461bcd60e51b8152600401610a6090611da8565b6001600160a01b0382166114855760405162461bcd60e51b8152600401610a6090611ded565b8060000361149957610fbd838360006118a1565b600b5460ff1615611646576005546001600160a01b038481169116148015906114d057506005546001600160a01b03838116911614155b80156114e457506001600160a01b03821615155b80156114fb57506001600160a01b03821661dead14155b1561164657600b54610100900460ff16611596576001600160a01b0383166000908152601f602052604090205460ff1615801561155157506001600160a01b0382166000908152601f602052604090205460ff16155b6115965760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a60565b6001600160a01b0383166000908152601f602052604090205460ff1680156115d757506001600160a01b0382166000908152601e602052604090205460ff16155b1561164657600a546001600160a01b0383166000908152602081905260409020546116029083611d48565b11156116465760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a60565b6001600160a01b0383166000908152601d602052604090205460019060ff168061168857506001600160a01b0383166000908152601d602052604090205460ff165b15611691575060005b600081156117e9576001600160a01b0384166000908152601f602052604090205460ff1680156116c357506000601454115b156116e9576064601454846116d89190611d91565b6116e29190611e30565b9050611735565b6001600160a01b0385166000908152601f602052604090205460ff16801561171357506000600f54115b15611735576064600f54846117289190611d91565b6117329190611e30565b90505b80156117dc5760075460195461176f9187916001600160a01b03909116906064906117609086611d91565b61176a9190611e30565b6118a1565b600854601c546117949187916001600160a01b03909116906064906117609086611d91565b600954601b546117b99187916001600160a01b03909116906064906117609086611d91565b6117dc856064601a54846117cd9190611d91565b6117d79190611e30565b6119f6565b6117e68184611e52565b92505b6117f48585856118a1565b5050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166118c75760405162461bcd60e51b8152600401610a6090611da8565b6001600160a01b0382166118ed5760405162461bcd60e51b8152600401610a6090611ded565b6001600160a01b038316600090815260208190526040902054818110156119655760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a60565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061199c908490611d48565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119e891815260200190565b60405180910390a350505050565b6001600160a01b038216611a565760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a60565b6001600160a01b03821660009081526020819052604090205481811015611aca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a60565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611af9908490611e52565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b81811015611b7157858101830151858201604001528201611b55565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112b857600080fd5b60008060408385031215611bba57600080fd5b8235611bc581611b92565b946020939093013593505050565b600080600060608486031215611be857600080fd5b8335611bf381611b92565b92506020840135611c0381611b92565b929592945050506040919091013590565b60008060008060808587031215611c2a57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611c5857600080fd5b8135611c6381611b92565b9392505050565b80151581146112b857600080fd5b60008060408385031215611c8b57600080fd5b8235611c9681611b92565b91506020830135611ca681611c6a565b809150509250929050565b600060208284031215611cc357600080fd5b5035919050565b60008060408385031215611cdd57600080fd5b8235611ce881611b92565b91506020830135611ca681611b92565b600181811c90821680611d0c57607f821691505b602082108103611d2c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b2557610b25611d32565b600060208284031215611d6d57600080fd5b5051919050565b600060208284031215611d8657600080fd5b8151611c6381611c6a565b8082028115828204841417610b2557610b25611d32565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082611e4d57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610b2557610b25611d3256fea264697066735822122010c1789d80aabe24089db0755318dd072a605c062bf5641c5c7e0a52eef8458164736f6c63430008120033

Deployed Bytecode Sourcemap

21447:10213:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25312:217;;;;;;;;;;;;;:::i;:::-;;7465:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8862:194;;;;;;;;;;-1:-1:-1;8862:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;8862:194:0;1023:187:1;22113:31:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;22113:31:0;1215:177:1;21488:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;21488:51:0;1397:230:1;7954:108:0;;;;;;;;;;-1:-1:-1;8042:12:0;;7954:108;;9064:529;;;;;;;;;;-1:-1:-1;9064:529:0;;;;;:::i;:::-;;:::i;21591:44::-;;;;;;;;;;-1:-1:-1;21591:44:0;;;;-1:-1:-1;;;;;21591:44:0;;;21644:24;;;;;;;;;;-1:-1:-1;21644:24:0;;;;-1:-1:-1;;;;;21644:24:0;;;25975:392;;;;;;;;;;-1:-1:-1;25975:392:0;;;;;:::i;:::-;;:::i;7796:93::-;;;;;;;;;;-1:-1:-1;7796:93:0;;7879:2;2833:36:1;;2821:2;2806:18;7796:93:0;2691:184:1;9601:290:0;;;;;;;;;;-1:-1:-1;9601:290:0;;;;;:::i;:::-;;:::i;21546:38::-;;;;;;;;;;;;;;;21781:33;;;;;;;;;;-1:-1:-1;21781:33:0;;;;;;;;28551:126;;;;;;;;;;-1:-1:-1;28551:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;28641:28:0;28617:4;28641:28;;;:19;:28;;;;;;;;;28551:126;28029:163;;;;;;;;;;-1:-1:-1;28029:163:0;;;;;:::i;:::-;;:::i;22153:32::-;;;;;;;;;;;;;;;;8125:143;;;;;;;;;;-1:-1:-1;8125:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;8242:18:0;8215:7;8242:18;;;;;;;;;;;;8125:143;3843:103;;;;;;;;;;;;;:::i;25581:121::-;;;;;;;;;;;;;:::i;28374:169::-;;;;;;;;;;-1:-1:-1;28374:169:0;;;;;:::i;:::-;;:::i;28200:166::-;;;;;;;;;;-1:-1:-1;28200:166:0;;;;;:::i;:::-;;:::i;3202:87::-;;;;;;;;;;-1:-1:-1;3275:6:0;;-1:-1:-1;;;;;3275:6:0;3202:87;;26837:295;;;;;;;;;;-1:-1:-1;26837:295:0;;;;;:::i;:::-;;:::i;7684:104::-;;;;;;;;;;;;;:::i;27330:306::-;;;;;;;;;;-1:-1:-1;27330:306:0;;;;;:::i;:::-;;:::i;31448:209::-;;;;;;;;;;-1:-1:-1;31448:209:0;;;;;:::i;:::-;;:::i;9899:475::-;;;;;;;;;;-1:-1:-1;9899:475:0;;;;;:::i;:::-;;:::i;8276:200::-;;;;;;;;;;-1:-1:-1;8276:200:0;;;;;:::i;:::-;;:::i;22228:30::-;;;;;;;;;;;;;;;;21936:20;;;;;;;;;;;;;;;;22831:57;;;;;;;;;;-1:-1:-1;22831:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21821:33;;;;;;;;;;-1:-1:-1;21821:33:0;;;;;;;;;;;21863:25;;;;;;;;;;;;;;;;27140:182;;;;;;;;;;-1:-1:-1;27140:182:0;;;;;:::i;:::-;;:::i;25710:116::-;;;;;;;;;;-1:-1:-1;25710:116:0;;;;;:::i;:::-;;:::i;21895:34::-;;;;;;;;;;;;;;;;22617:56;;;;;;;;;;-1:-1:-1;22617:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21709:30;;;;;;;;;;-1:-1:-1;21709:30:0;;;;-1:-1:-1;;;;;21709:30:0;;;21963:31;;;;;;;;;;;;;;;;8539:176;;;;;;;;;;-1:-1:-1;8539:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;8680:18:0;;;8653:7;8680:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8539:176;22307:32;;;;;;;;;;;;;;;;22192:29;;;;;;;;;;;;;;;;25834:133;;;;;;;;;;-1:-1:-1;25834:133:0;;;;;:::i;:::-;;:::i;27840:181::-;;;;;;;;;;-1:-1:-1;27840:181:0;;;;;:::i;:::-;;:::i;22036:29::-;;;;;;;;;;;;;;;;26375:454;;;;;;;;;;-1:-1:-1;26375:454:0;;;;;:::i;:::-;;:::i;22001:28::-;;;;;;;;;;;;;;;;22072:34;;;;;;;;;;;;;;;;31257:183;;;;;;;;;;-1:-1:-1;31257:183:0;;;;;:::i;:::-;;:::i;4101:201::-;;;;;;;;;;-1:-1:-1;4101:201:0;;;;;:::i;:::-;;:::i;22265:35::-;;;;;;;;;;;;;;;;21748:24;;;;;;;;;;;;;;;;21675:27;;;;;;;;;;-1:-1:-1;21675:27:0;;;;-1:-1:-1;;;;;21675:27:0;;;25312:217;3088:13;:11;:13::i;:::-;25366:10:::1;::::0;:15;25358:48:::1;;;::::0;-1:-1:-1;;;25358:48:0;;4756:2:1;25358:48:0::1;::::0;::::1;4738:21:1::0;4795:2;4775:18;;;4768:30;-1:-1:-1;;;4814:18:1;;;4807:50;4874:18;;25358:48:0::1;;;;;;;;;25430:12;25417:10;:25:::0;25475:15:::1;25453:19;:37:::0;25501:13:::1;:20:::0;;-1:-1:-1;;25501:20:0::1;;;::::0;;25312:217::o;7465:100::-;7519:13;7552:5;7545:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7465:100;:::o;8862:194::-;8970:4;8987:39;1833:10;9010:7;9019:6;8987:8;:39::i;:::-;-1:-1:-1;9044:4:0;8862:194;;;;;:::o;9064:529::-;9204:4;9221:36;9231:6;9239:9;9250:6;9221:9;:36::i;:::-;-1:-1:-1;;;;;9297:19:0;;9270:24;9297:19;;;:11;:19;;;;;;;;1833:10;9297:33;;;;;;;;9363:26;;;;9341:116;;;;-1:-1:-1;;;9341:116:0;;5490:2:1;9341:116:0;;;5472:21:1;5529:2;5509:18;;;5502:30;5568:34;5548:18;;;5541:62;-1:-1:-1;;;5619:18:1;;;5612:38;5667:19;;9341:116:0;5288:404:1;9341:116:0;9493:57;9502:6;1833:10;9543:6;9524:16;:25;9493:8;:57::i;:::-;-1:-1:-1;9581:4:0;;9064:529;-1:-1:-1;;;;9064:529:0:o;25975:392::-;3088:13;:11;:13::i;:::-;26149:9:::1;:19:::0;;;26179:12:::1;:25:::0;;;26215:10:::1;:21:::0;;;26247:15:::1;:31:::0;;;26265:13;26228:8;26304:24:::1;26194:10:::0;26161:7;26304:24:::1;:::i;:::-;:37;;;;:::i;:::-;:55;;;;:::i;:::-;26289:12;:70:::0;-1:-1:-1;;;;25975:392:0:o;9601:290::-;1833:10;9714:4;9803:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;9803:34:0;;;;;;;;;;9714:4;;9731:130;;9781:7;;9803:47;;9840:10;;9803:47;:::i;:::-;9731:8;:130::i;28029:163::-;3088:13;:11;:13::i;:::-;28138:11:::1;::::0;28109:41:::1;::::0;-1:-1:-1;;;;;28138:11:0;;::::1;::::0;28109:41;::::1;::::0;::::1;::::0;28138:11:::1;::::0;28109:41:::1;28161:11;:23:::0;;-1:-1:-1;;;;;;28161:23:0::1;-1:-1:-1::0;;;;;28161:23:0;;;::::1;::::0;;;::::1;::::0;;28029:163::o;3843:103::-;3088:13;:11;:13::i;:::-;3908:30:::1;3935:1;3908:18;:30::i;:::-;3843:103::o:0;25581:121::-;25633:4;3088:13;:11;:13::i;:::-;-1:-1:-1;25650:14:0::1;:22:::0;;-1:-1:-1;;25650:22:0::1;::::0;;;25581:121;:::o;28374:169::-;3088:13;:11;:13::i;:::-;28487:12:::1;::::0;28456:44:::1;::::0;-1:-1:-1;;;;;28487:12:0;;::::1;::::0;28456:44;::::1;::::0;::::1;::::0;28487:12:::1;::::0;28456:44:::1;28511:12;:24:::0;;-1:-1:-1;;;;;;28511:24:0::1;-1:-1:-1::0;;;;;28511:24:0;;;::::1;::::0;;;::::1;::::0;;28374:169::o;28200:166::-;3088:13;:11;:13::i;:::-;28313:9:::1;::::0;28282:41:::1;::::0;-1:-1:-1;;;;;28313:9:0;;::::1;::::0;28282:41;::::1;::::0;::::1;::::0;28313:9:::1;::::0;28282:41:::1;28334:9;:24:::0;;-1:-1:-1;;;;;;28334:24:0::1;-1:-1:-1::0;;;;;28334:24:0;;;::::1;::::0;;;::::1;::::0;;28200:166::o;26837:295::-;3088:13;:11;:13::i;:::-;27003:10:::1;:17:::0;;;;27031:13:::1;:23:::0;;;;27065:11:::1;:19:::0;27095:16:::1;:29:::0;26837:295::o;7684:104::-;7740:13;7773:7;7766:14;;;;;:::i;27330:306::-;3088:13;:11;:13::i;:::-;27476::::1;-1:-1:-1::0;;;;;27468:21:0::1;:4;-1:-1:-1::0;;;;;27468:21:0::1;::::0;27446:128:::1;;;::::0;-1:-1:-1;;;27446:128:0;;6161:2:1;27446:128:0::1;::::0;::::1;6143:21:1::0;6200:2;6180:18;;;6173:30;6239:34;6219:18;;;6212:62;6310:27;6290:18;;;6283:55;6355:19;;27446:128:0::1;5959:421:1::0;27446:128:0::1;27587:41;27616:4;27622:5;27587:28;:41::i;:::-;27330:306:::0;;:::o;31448:209::-;3088:13;:11;:13::i;:::-;31541:31:::1;::::0;-1:-1:-1;;;31541:31:0;;31566:4:::1;31541:31;::::0;::::1;1570:51:1::0;31576:7:0;;-1:-1:-1;;;;;31541:16:0;::::1;::::0;::::1;::::0;1543:18:1;;31541:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;31533:69;;;::::0;-1:-1:-1;;;31533:69:0;;6776:2:1;31533:69:0::1;::::0;::::1;6758:21:1::0;6815:2;6795:18;;;6788:30;-1:-1:-1;;;6834:18:1;;;6827:44;6888:18;;31533:69:0::1;6574:338:1::0;31533:69:0::1;31613:36;::::0;-1:-1:-1;;;31613:36:0;;31629:10:::1;31613:36;::::0;::::1;7091:51:1::0;7158:18;;;7151:34;;;-1:-1:-1;;;;;31613:15:0;::::1;::::0;::::1;::::0;7064:18:1;;31613:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31448:209:::0;;:::o;9899:475::-;1833:10;10017:4;10061:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10061:34:0;;;;;;;;;;10128:35;;;;10106:122;;;;-1:-1:-1;;;10106:122:0;;7648:2:1;10106:122:0;;;7630:21:1;7687:2;7667:18;;;7660:30;7726:34;7706:18;;;7699:62;-1:-1:-1;;;7777:18:1;;;7770:35;7822:19;;10106:122:0;7446:401:1;10106:122:0;10264:67;1833:10;10287:7;10315:15;10296:16;:34;10264:8;:67::i;:::-;-1:-1:-1;10362:4:0;;9899:475;-1:-1:-1;;;9899:475:0:o;8276:200::-;8387:4;8404:42;1833:10;8428:9;8439:6;8404:9;:42::i;27140:182::-;3088:13;:11;:13::i;:::-;-1:-1:-1;;;;;27225:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;27225:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27280:34;;1163:41:1;;;27280:34:0::1;::::0;1136:18:1;27280:34:0::1;;;;;;;27140:182:::0;;:::o;25710:116::-;3088:13;:11;:13::i;:::-;25799:19:::1;:6:::0;25809:8:::1;25799:19;:::i;:::-;25787:9;:31:::0;-1:-1:-1;25710:116:0:o;25834:133::-;3088:13;:11;:13::i;:::-;-1:-1:-1;;;;;25920:32:0;;;::::1;;::::0;;;:24:::1;:32;::::0;;;;:39;;-1:-1:-1;;25920:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25834:133::o;27840:181::-;3088:13;:11;:13::i;:::-;27959:15:::1;::::0;27925:50:::1;::::0;-1:-1:-1;;;;;27959:15:0;;::::1;::::0;27925:50;::::1;::::0;::::1;::::0;27959:15:::1;::::0;27925:50:::1;27986:15;:27:::0;;-1:-1:-1;;;;;;27986:27:0::1;-1:-1:-1::0;;;;;27986:27:0;;;::::1;::::0;;;::::1;::::0;;27840:181::o;26375:454::-;3088:13;:11;:13::i;:::-;26550:10:::1;:20:::0;;;26581:13:::1;:26:::0;;;26618:11:::1;:22:::0;;;26651:16:::1;:32:::0;;;26670:13;26632:8;26723:39:::1;26597:10:::0;26563:7;26723:39:::1;:::i;:::-;:66;;;;:::i;:::-;:98;;;;:::i;:::-;26694:13;:127:::0;-1:-1:-1;;;;26375:454:0:o;31257:183::-;3088:13;:11;:13::i;:::-;31358:7:::1;31333:21;:32;;31325:59;;;::::0;-1:-1:-1;;;31325:59:0;;6776:2:1;31325:59:0::1;::::0;::::1;6758:21:1::0;6815:2;6795:18;;;6788:30;-1:-1:-1;;;6834:18:1;;;6827:44;6888:18;;31325:59:0::1;6574:338:1::0;31325:59:0::1;31395:37;::::0;31403:10:::1;::::0;31395:37;::::1;;;::::0;31424:7;;31395:37:::1;::::0;;;31424:7;31403:10;31395:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;4101:201:::0;3088:13;:11;:13::i;:::-;-1:-1:-1;;;;;4190:22:0;::::1;4182:73;;;::::0;-1:-1:-1;;;4182:73:0;;8227:2:1;4182:73:0::1;::::0;::::1;8209:21:1::0;8266:2;8246:18;;;8239:30;8305:34;8285:18;;;8278:62;-1:-1:-1;;;8356:18:1;;;8349:36;8402:19;;4182:73:0::1;8025:402:1::0;4182:73:0::1;4266:28;4285:8;4266:18;:28::i;:::-;4101:201:::0;:::o;3367:132::-;3275:6;;-1:-1:-1;;;;;3275:6:0;1833:10;3431:23;3423:68;;;;-1:-1:-1;;;3423:68:0;;8634:2:1;3423:68:0;;;8616:21:1;;;8653:18;;;8646:30;8712:34;8692:18;;;8685:62;8764:18;;3423:68:0;8432:356:1;12166:380:0;-1:-1:-1;;;;;12302:19:0;;12294:68;;;;-1:-1:-1;;;12294:68:0;;8995:2:1;12294:68:0;;;8977:21:1;9034:2;9014:18;;;9007:30;9073:34;9053:18;;;9046:62;-1:-1:-1;;;9124:18:1;;;9117:34;9168:19;;12294:68:0;8793:400:1;12294:68:0;-1:-1:-1;;;;;12381:21:0;;12373:68;;;;-1:-1:-1;;;12373:68:0;;9400:2:1;12373:68:0;;;9382:21:1;9439:2;9419:18;;;9412:30;9478:34;9458:18;;;9451:62;-1:-1:-1;;;9529:18:1;;;9522:32;9571:19;;12373:68:0;9198:398:1;12373:68:0;-1:-1:-1;;;;;12454:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12506:32;;1361:25:1;;;12506:32:0;;1334:18:1;12506:32:0;;;;;;;12166:380;;;:::o;28685:2564::-;-1:-1:-1;;;;;28817:18:0;;28809:68;;;;-1:-1:-1;;;28809:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28896:16:0;;28888:64;;;;-1:-1:-1;;;28888:64:0;;;;;;;:::i;:::-;28969:6;28979:1;28969:11;28965:93;;28997:28;29013:4;29019:2;29023:1;28997:15;:28::i;28965:93::-;29074:14;;;;29070:872;;;3275:6;;-1:-1:-1;;;;;29127:15:0;;;3275:6;;29127:15;;;;:49;;-1:-1:-1;3275:6:0;;-1:-1:-1;;;;;29163:13:0;;;3275:6;;29163:13;;29127:49;:86;;;;-1:-1:-1;;;;;;29197:16:0;;;;29127:86;:128;;;;-1:-1:-1;;;;;;29234:21:0;;29248:6;29234:21;;29127:128;29105:826;;;29295:13;;;;;;;29290:266;;-1:-1:-1;;;;;29368:31:0;;;;;;:25;:31;;;;;;;;29367:32;:95;;;;-1:-1:-1;;;;;;29433:29:0;;;;;;:25;:29;;;;;;;;29432:30;29367:95;29333:203;;;;-1:-1:-1;;;29333:203:0;;10613:2:1;29333:203:0;;;10595:21:1;10652:2;10632:18;;;10625:30;-1:-1:-1;;;10671:18:1;;;10664:52;10733:18;;29333:203:0;10411:346:1;29333:203:0;-1:-1:-1;;;;;29628:31:0;;;;;;:25;:31;;;;;;;;:85;;;;-1:-1:-1;;;;;;29685:28:0;;;;;;:24;:28;;;;;;;;29684:29;29628:85;29602:314;;;29816:9;;-1:-1:-1;;;;;8242:18:0;;8215:7;8242:18;;;;;;;;;;;29790:22;;:6;:22;:::i;:::-;:35;;29756:140;;;;-1:-1:-1;;;29756:140:0;;10964:2:1;29756:140:0;;;10946:21:1;11003:2;10983:18;;;10976:30;-1:-1:-1;;;11022:18:1;;;11015:49;11081:18;;29756:140:0;10762:343:1;29756:140:0;-1:-1:-1;;;;;30075:25:0;;29954:12;30075:25;;;:19;:25;;;;;;29969:4;;30075:25;;;:52;;-1:-1:-1;;;;;;30104:23:0;;;;;;:19;:23;;;;;;;;30075:52;30071:100;;;-1:-1:-1;30154:5:0;30071:100;30183:12;30288:7;30284:912;;;-1:-1:-1;;;;;30340:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30389:1;30373:13;;:17;30340:50;30336:298;;;30445:3;30428:13;;30419:6;:22;;;;:::i;:::-;30418:30;;;;:::i;:::-;30411:37;;30336:298;;;-1:-1:-1;;;;;30510:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;30560:1;30545:12;;:16;30510:51;30506:128;;;30615:3;30599:12;;30590:6;:21;;;;:::i;:::-;30589:29;;;;:::i;:::-;30582:36;;30506:128;30654:8;;30650:504;;30705:9;;30724:10;;30683:59;;30699:4;;-1:-1:-1;;;;;30705:9:0;;;;30738:3;;30717:17;;:4;:17;:::i;:::-;30716:25;;;;:::i;:::-;30683:15;:59::i;:::-;30826:12;;30869:13;;30761:147;;30799:4;;-1:-1:-1;;;;;30826:12:0;;;;30886:3;;30862:20;;:4;:20;:::i;30761:147::-;30992:15;;31038:16;;30927:153;;30965:4;;-1:-1:-1;;;;;30992:15:0;;;;31058:3;;31031:23;;:4;:23;:::i;30927:153::-;31099:39;31105:4;31134:3;31119:11;;31112:4;:18;;;;:::i;:::-;31111:26;;;;:::i;:::-;31099:5;:39::i;:::-;31170:14;31180:4;31170:14;;:::i;:::-;;;30284:912;31208:33;31224:4;31230:2;31234:6;31208:15;:33::i;:::-;28798:2451;;28685:2564;;;:::o;4462:191::-;4555:6;;;-1:-1:-1;;;;;4572:17:0;;;-1:-1:-1;;;;;;4572:17:0;;;;;;;4605:40;;4555:6;;;4572:17;4555:6;;4605:40;;4536:16;;4605:40;4525:128;4462:191;:::o;27644:188::-;-1:-1:-1;;;;;27727:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;27727:39:0;;;;;;;;;;27784:40;;27727:39;;:31;27784:40;;;27644:188;;:::o;10382:770::-;-1:-1:-1;;;;;10522:20:0;;10514:70;;;;-1:-1:-1;;;10514:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10603:23:0;;10595:71;;;;-1:-1:-1;;;10595:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10763:17:0;;10739:21;10763:17;;;;;;;;;;;10813:23;;;;10791:111;;;;-1:-1:-1;;;10791:111:0;;11667:2:1;10791:111:0;;;11649:21:1;11706:2;11686:18;;;11679:30;11745:34;11725:18;;;11718:62;-1:-1:-1;;;11796:18:1;;;11789:36;11842:19;;10791:111:0;11465:402:1;10791:111:0;-1:-1:-1;;;;;10938:17:0;;;:9;:17;;;;;;;;;;;10958:22;;;10938:42;;11002:20;;;;;;;;:30;;10974:6;;10938:9;11002:30;;10974:6;;11002:30;:::i;:::-;;;;;;;;11067:9;-1:-1:-1;;;;;11050:35:0;11059:6;-1:-1:-1;;;;;11050:35:0;;11078:6;11050:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;11050:35:0;;;;;;;;10503:649;10382:770;;;:::o;11567:591::-;-1:-1:-1;;;;;11651:21:0;;11643:67;;;;-1:-1:-1;;;11643:67:0;;12074:2:1;11643:67:0;;;12056:21:1;12113:2;12093:18;;;12086:30;12152:34;12132:18;;;12125:62;-1:-1:-1;;;12203:18:1;;;12196:31;12244:19;;11643:67:0;11872:397:1;11643:67:0;-1:-1:-1;;;;;11810:18:0;;11785:22;11810:18;;;;;;;;;;;11847:24;;;;11839:71;;;;-1:-1:-1;;;11839:71:0;;12476:2:1;11839:71:0;;;12458:21:1;12515:2;12495:18;;;12488:30;12554:34;12534:18;;;12527:62;-1:-1:-1;;;12605:18:1;;;12598:32;12647:19;;11839:71:0;12274:398:1;11839:71:0;-1:-1:-1;;;;;11946:18:0;;:9;:18;;;;;;;;;;11967:23;;;11946:44;;12012:12;:22;;11984:6;;11946:9;12012:22;;11984:6;;12012:22;:::i;:::-;;;;-1:-1:-1;;12052:37:0;;1361:25:1;;;12078:1:0;;-1:-1:-1;;;;;12052:37:0;;;;;1349:2:1;1334:18;12052:37:0;;;;;;;31613:36:::1;31448:209:::0;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2301:385::-;2387:6;2395;2403;2411;2464:3;2452:9;2443:7;2439:23;2435:33;2432:53;;;2481:1;2478;2471:12;2432:53;-1:-1:-1;;2504:23:1;;;2574:2;2559:18;;2546:32;;-1:-1:-1;2625:2:1;2610:18;;2597:32;;2676:2;2661:18;2648:32;;-1:-1:-1;2301:385:1;-1:-1:-1;2301:385:1:o;2880:247::-;2939:6;2992:2;2980:9;2971:7;2967:23;2963:32;2960:52;;;3008:1;3005;2998:12;2960:52;3047:9;3034:23;3066:31;3091:5;3066:31;:::i;:::-;3116:5;2880:247;-1:-1:-1;;;2880:247:1:o;3132:118::-;3218:5;3211:13;3204:21;3197:5;3194:32;3184:60;;3240:1;3237;3230:12;3255:382;3320:6;3328;3381:2;3369:9;3360:7;3356:23;3352:32;3349:52;;;3397:1;3394;3387:12;3349:52;3436:9;3423:23;3455:31;3480:5;3455:31;:::i;:::-;3505:5;-1:-1:-1;3562:2:1;3547:18;;3534:32;3575:30;3534:32;3575:30;:::i;:::-;3624:7;3614:17;;;3255:382;;;;;:::o;3976:180::-;4035:6;4088:2;4076:9;4067:7;4063:23;4059:32;4056:52;;;4104:1;4101;4094:12;4056:52;-1:-1:-1;4127:23:1;;3976:180;-1:-1:-1;3976:180:1:o;4161:388::-;4229:6;4237;4290:2;4278:9;4269:7;4265:23;4261:32;4258:52;;;4306:1;4303;4296:12;4258:52;4345:9;4332:23;4364:31;4389:5;4364:31;:::i;:::-;4414:5;-1:-1:-1;4471:2:1;4456:18;;4443:32;4484:33;4443:32;4484:33;:::i;4903:380::-;4982:1;4978:12;;;;5025;;;5046:61;;5100:4;5092:6;5088:17;5078:27;;5046:61;5153:2;5145:6;5142:14;5122:18;5119:38;5116:161;;5199:10;5194:3;5190:20;5187:1;5180:31;5234:4;5231:1;5224:15;5262:4;5259:1;5252:15;5116:161;;4903:380;;;:::o;5697:127::-;5758:10;5753:3;5749:20;5746:1;5739:31;5789:4;5786:1;5779:15;5813:4;5810:1;5803:15;5829:125;5894:9;;;5915:10;;;5912:36;;;5928:18;;:::i;6385:184::-;6455:6;6508:2;6496:9;6487:7;6483:23;6479:32;6476:52;;;6524:1;6521;6514:12;6476:52;-1:-1:-1;6547:16:1;;6385:184;-1:-1:-1;6385:184:1:o;7196:245::-;7263:6;7316:2;7304:9;7295:7;7291:23;7287:32;7284:52;;;7332:1;7329;7322:12;7284:52;7364:9;7358:16;7383:28;7405:5;7383:28;:::i;7852:168::-;7925:9;;;7956;;7973:15;;;7967:22;;7953:37;7943:71;;7994:18;;:::i;9601:401::-;9803:2;9785:21;;;9842:2;9822:18;;;9815:30;9881:34;9876:2;9861:18;;9854:62;-1:-1:-1;;;9947:2:1;9932:18;;9925:35;9992:3;9977:19;;9601:401::o;10007:399::-;10209:2;10191:21;;;10248:2;10228:18;;;10221:30;10287:34;10282:2;10267:18;;10260:62;-1:-1:-1;;;10353:2:1;10338:18;;10331:33;10396:3;10381:19;;10007:399::o;11110:217::-;11150:1;11176;11166:132;;11220:10;11215:3;11211:20;11208:1;11201:31;11255:4;11252:1;11245:15;11283:4;11280:1;11273:15;11166:132;-1:-1:-1;11312:9:1;;11110:217::o;11332:128::-;11399:9;;;11420:11;;;11417:37;;;11434:18;;:::i

Swarm Source

ipfs://10c1789d80aabe24089db0755318dd072a605c062bf5641c5c7e0a52eef84581
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.