ETH Price: $3,096.25 (+3.71%)
Gas: 37 Gwei

Token

Felix (FLX)
 

Overview

Max Total Supply

100,000,000 FLX

Holders

119

Total Transfers

-

Market

Chart

Fully Diluted Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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:
FELIX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-02
*/

/**

Website:  https://felixlend.com
DApp:     https://app.felixlend.com
Docs:     https://docs.felixlend.com

Medium:   https://medium.com/@felix_lend
Twitter:  https://twitter.com/felix_lend
Telegram: https://t.me/felix_lend

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;
    address private creator;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

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

interface 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;

    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 9;
    }

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

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

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

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

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

    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 {
    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);
        }
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    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);
        }
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    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;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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;
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

contract FELIX is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address payable;

    string private constant _name = "Felix";
    string private constant _symbol = "FLX";

    uint8 private constant _decimals = 9;

    uint256 private _totalSupply = 100_000_000 * 10 ** _decimals;
    uint256 private _maxWallet = _totalSupply * 2 / 100;
    uint256 private _maxBuyAmount = _totalSupply * 2 / 100;
    uint256 private _maxSellAmount = _totalSupply * 2 / 100;
    uint256 private _autoSwap = _totalSupply / 100000;
    uint256 private _maxSwap = _totalSupply * 2 / 1000;

    address private marketingFee = 0x812F7Db132B22bdF300DF5981A3f39bc8ca552c6;
    uint256 private _totalBurned;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isBurn;
    mapping(address => bool) private automatedMarketMakerPairs;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address private _owner;

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

    bool private _enableSwap = false;
    bool private _launched = false;
    bool private _swapping = false;

    uint256 private amountBuyRate = 15;
    uint256 private amountSellRate = 15;

    constructor() {
        _owner = msg.sender;

        uint256 tsupply = _totalSupply;

        _mint(msg.sender, tsupply);

        setExcludedFromFee(_owner, true);
        setExcludedFromFee(address(this), true);
        setExcludedFromFee(marketingFee, true);
    }

    function initPair() external onlyOwner {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), ~uint256(0));

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function getOwner() public view returns (address) {
        return owner();
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

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

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function totalBurned() public view returns (uint256) {
        return _totalBurned;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function isBurnAcess(address account) public view returns (bool) {
        return _isBurn[account];
    }

    function _mint(address account, uint256 amount) private {
        _balances[account] = amount;
        emit Transfer(address(0), account, amount);
    }

    function getBuyAndSellRates()
        public
        view
        returns (
            uint256 totalBuyRate,
            uint256 maxWallet,
            uint256 maxBuyAmount,
            uint256 totalSellRate,
            uint256 maxSellAmount
        )
    {
        totalBuyRate = amountBuyRate;
        maxWallet = _maxWallet;
        maxBuyAmount = _maxBuyAmount;

        totalSellRate = amountSellRate;
        maxSellAmount = _maxSellAmount;
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        if (
            recipient != uniswapV2Pair &&
            recipient != owner() &&
            !_isExcludedFromFee[recipient]
        ) {
            require(
                _balances[recipient] + amount <= _maxWallet,
                "recipient wallet balance exceeds the maximum limit"
            );
        }

        _transfer(msg.sender, recipient, amount);

        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        _transfer(sender, recipient, amount);
        return true;
    }

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "transfer from the zero address");
        require(recipient != address(0), "transfer to the zero address");
        require(amount > 0, "transfer amount must be greater than zero");

        if (
            !automatedMarketMakerPairs[recipient] &&
            recipient != owner() &&
            !_isExcludedFromFee[recipient]
        ) {
            require(
                _balances[recipient] + amount <= _maxWallet,
                "recipient wallet balance exceeds the maximum limit"
            );
        }
        if (!_launched) {
            require(
                _isExcludedFromFee[sender] || _isExcludedFromFee[recipient],
                "we not launch yet"
            );
        }

        if (_swapping || !_launched) {
            _balances[sender] = _balances[sender].sub(amount);
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        } else {
            bool _autoTaxes = true;
            uint256 totalTaxAmount = 0;
            uint256 transAmount = amount;

            //sell
            if (
                automatedMarketMakerPairs[recipient] &&
                !_isExcludedFromFee[sender] &&
                sender != owner()
            ) {
                require(
                    amount <= _maxSellAmount,
                    "Sell amount exceeds max limit"
                );

                if (_enableSwap && balanceOf(address(this)) >= _autoSwap && amount >= _autoSwap) {
                    AutoSwap(amount);
                }
            }

            //buy
            if (
                automatedMarketMakerPairs[sender] &&
                !_isExcludedFromFee[recipient] &&
                recipient != owner()
            ) {
                require(
                    amount <= _maxBuyAmount,
                    "Buy amount exceeds max limit"
                );
            }

            if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
                _autoTaxes = false;
                if (
                    _isExcludedFromFee[sender] &&
                    !automatedMarketMakerPairs[recipient]
                ) {
                    transAmount = amount - transAmount;
                }
            }

            if (_autoTaxes) {
                if (automatedMarketMakerPairs[sender]) {
                    totalTaxAmount = (amount * amountBuyRate) / 100;
                    transAmount = amount - totalTaxAmount;
                } else if (automatedMarketMakerPairs[recipient]) {
                    totalTaxAmount = (amount * amountSellRate) / 100;
                    transAmount = amount - totalTaxAmount;
                }

                if (totalTaxAmount > 0) {
                    _balances[address(this)] = _balances[address(this)].add(
                        totalTaxAmount
                    );
                }
                _balances[sender] = _balances[sender].sub(amount);
                _balances[recipient] = _balances[recipient].add(transAmount);

                emit Transfer(sender, recipient, transAmount);
                emit Transfer(sender, address(this), totalTaxAmount);
            } else {
                _balances[sender] = _balances[sender].sub(transAmount);
                _balances[recipient] = _balances[recipient].add(amount);

                emit Transfer(sender, recipient, amount);
            }
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // Set up the contract address and the token to be swapped
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        // Approve the transfer of tokens to the contract address
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // Make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

    function AutoSwap(uint256 amount) private {
        _swapping = true;

        uint256 caBalance = balanceOf(address(this));

        uint256 toSwap = min(amount, min(caBalance, _maxSwap));

        swapTokensForEth(toSwap);

        uint256 receivedBalance = address(this).balance;

        if (receivedBalance > 0) {
            payable(marketingFee).transfer(receivedBalance);
        }

        _swapping = false;
    }

    function setProjectAddress(address newAddress) public onlyOwner {
        require(newAddress != address(0), "Invalid address");
        marketingFee = newAddress;
        _isExcludedFromFee[newAddress] = true;
    }

    function openTrading() external onlyOwner {
        _launched = true;
        _enableSwap = true;
    }

    function setExcludedFromFee(address account, bool status) public onlyOwner {
        _isExcludedFromFee[account] = status;
    }

    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;
    }

    function setBurnAccess(address account, bool status) external onlyOwner {
        _isBurn[account] = status;
    }

    function setAutoSwap(uint256 newAutoSwap) external onlyOwner {
        require(
            newAutoSwap <= (totalSupply() * 1) / 100,
            "Invalid value: exceeds 1% of total supply"
        );
        _autoSwap = newAutoSwap * 10 ** _decimals;
    }

    function updateLimits() external onlyOwner {
        amountBuyRate = 2;
        amountSellRate = 2;

        _maxWallet = type(uint).max;
        _maxBuyAmount = type(uint).max;
        _maxSellAmount = type(uint).max;
    }

    function setTaxRates(uint256 buyRate, uint256 sellRate) external onlyOwner {
        amountBuyRate = buyRate;
        amountSellRate = sellRate;
    }

    function setBuyTaxRates(uint256 buyRate) external onlyOwner {
        amountBuyRate = buyRate;
    }

    function setSellTaxRates(uint256 sellRate) external onlyOwner {
        amountSellRate = sellRate;
    }

    function getStuckBalance() external onlyOwner {
        require(address(this).balance > 0, "ERC20: no ETH on contract.");
        payable(msg.sender).transfer(address(this).balance);
    }

    receive() external payable {}
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getBuyAndSellRates","outputs":[{"internalType":"uint256","name":"totalBuyRate","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"totalSellRate","type":"uint256"},{"internalType":"uint256","name":"maxSellAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBurnAcess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAutoSwap","type":"uint256"}],"name":"setAutoSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setBurnAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyRate","type":"uint256"}],"name":"setBuyTaxRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setProjectAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellRate","type":"uint256"}],"name":"setSellTaxRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyRate","type":"uint256"},{"internalType":"uint256","name":"sellRate","type":"uint256"}],"name":"setTaxRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a620003c1565b62000022906305f5e100620003d9565b60028181556064916200003591620003d9565b620000419190620003f3565b60035560646002546002620000579190620003d9565b620000639190620003f3565b60045560646002546002620000799190620003d9565b620000859190620003f3565b600555620186a06002546200009b9190620003f3565b6006556103e86002546002620000b29190620003d9565b620000be9190620003f3565b600755600880546001600160a01b03191673812f7db132b22bdf300df5981a3f39bc8ca552c61790556012805462ffffff19169055600f60138190556014553480156200010a57600080fd5b50620001163362000181565b600f80546001600160a01b03191633908117909155600254906200013b9082620001d1565b600f5462000154906001600160a01b0316600162000222565b6200016130600162000222565b6008546200017a906001600160a01b0316600162000222565b5062000416565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000818152601060209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000546001600160a01b03163314620002815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000303578160001904821115620002e757620002e7620002ac565b80851615620002f557918102915b93841c9390800290620002c7565b509250929050565b6000826200031c57506001620003bb565b816200032b57506000620003bb565b81600181146200034457600281146200034f576200036f565b6001915050620003bb565b60ff841115620003635762000363620002ac565b50506001821b620003bb565b5060208310610133831016604e8410600b841016171562000394575081810a620003bb565b620003a08383620002c2565b8060001904821115620003b757620003b7620002ac565b0290505b92915050565b6000620003d260ff8416836200030b565b9392505050565b8082028115828204841417620003bb57620003bb620002ac565b6000826200041157634e487b7160e01b600052601260045260246000fd5b500490565b611f6680620004266000396000f3fe6080604052600436106101dc5760003560e01c80637a336e6611610102578063c9567bf911610095578063f2fde38b11610064578063f2fde38b146105d2578063fcd2e049146105f2578063fce0f92814610612578063feb1dfcc1461063257600080fd5b8063c9567bf914610542578063d89135cd14610557578063d8a0663c1461056c578063dd62ed3e1461058c57600080fd5b80639a7a23d6116100d15780639a7a23d6146104855780639f338c11146104a5578063a9059cbb146104de578063b0b92d77146104fe57600080fd5b80637a336e6614610426578063893d20e81461043b5780638da5cb5b1461043b57806395d89b411461045957600080fd5b806323b872dd1161017a5780635cb23e12116101495780635cb23e121461039b5780636612e66f146103bb57806370a08231146103db578063715018a61461041157600080fd5b806323b872dd14610306578063313ce5671461032657806349bd5a5e146103425780635342acb41461036257600080fd5b80630a80c0cc116101b65780630a80c0cc1461027a5780630c08e2551461029a5780631694505e146102af57806318160ddd146102e757600080fd5b8063027c1d48146101e857806306fdde031461020a578063095ea7b31461024a57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611ad0565b610647565b005b34801561021657600080fd5b5060408051808201909152600581526408ccad8d2f60db1b60208201525b6040516102419190611b0e565b60405180910390f35b34801561025657600080fd5b5061026a610265366004611b5c565b6106a5565b6040519015158152602001610241565b34801561028657600080fd5b50610208610295366004611b88565b6106bc565b3480156102a657600080fd5b506102086106eb565b3480156102bb57600080fd5b50600d546102cf906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b3480156102f357600080fd5b506002545b604051908152602001610241565b34801561031257600080fd5b5061026a610321366004611ba1565b610731565b34801561033257600080fd5b5060405160098152602001610241565b34801561034e57600080fd5b50600e546102cf906001600160a01b031681565b34801561036e57600080fd5b5061026a61037d366004611be2565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156103a757600080fd5b506102086103b6366004611bff565b610780565b3480156103c757600080fd5b506102086103d6366004611ad0565b6107b5565b3480156103e757600080fd5b506102f86103f6366004611be2565b6001600160a01b031660009081526010602052604090205490565b34801561041d57600080fd5b5061020861080a565b34801561043257600080fd5b50610208610840565b34801561044757600080fd5b506000546001600160a01b03166102cf565b34801561046557600080fd5b5060408051808201909152600381526208c98b60eb1b6020820152610234565b34801561049157600080fd5b506102086104a0366004611ad0565b6108e9565b3480156104b157600080fd5b5061026a6104c0366004611be2565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156104ea57600080fd5b5061026a6104f9366004611b5c565b6109a5565b34801561050a57600080fd5b50601354600354600454601454600554604080519586526020860194909452928401919091526060830152608082015260a001610241565b34801561054e57600080fd5b50610208610a4e565b34801561056357600080fd5b506009546102f8565b34801561057857600080fd5b50610208610587366004611b88565b610a89565b34801561059857600080fd5b506102f86105a7366004611c21565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b3480156105de57600080fd5b506102086105ed366004611be2565b610b50565b3480156105fe57600080fd5b5061020861060d366004611b88565b610be8565b34801561061e57600080fd5b5061020861062d366004611be2565b610c17565b34801561063e57600080fd5b50610208610cc3565b6000546001600160a01b0316331461067a5760405162461bcd60e51b815260040161067190611c4f565b60405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60006106b2338484610f77565b5060015b92915050565b6000546001600160a01b031633146106e65760405162461bcd60e51b815260040161067190611c4f565b601455565b6000546001600160a01b031633146107155760405162461bcd60e51b815260040161067190611c4f565b6002601381905560145560001960038190556004819055600555565b6001600160a01b038316600090815260116020908152604080832033808552925282205461076b918691610766908690611c9a565b610f77565b6107768484846110a0565b5060019392505050565b6000546001600160a01b031633146107aa5760405162461bcd60e51b815260040161067190611c4f565b601391909155601455565b6000546001600160a01b031633146107df5760405162461bcd60e51b815260040161067190611c4f565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146108345760405162461bcd60e51b815260040161067190611c4f565b61083e6000611820565b565b6000546001600160a01b0316331461086a5760405162461bcd60e51b815260040161067190611c4f565b600047116108ba5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a206e6f20455448206f6e20636f6e74726163742e0000000000006044820152606401610671565b60405133904780156108fc02916000818181858888f193505050501580156108e6573d6000803e3d6000fd5b50565b6000546001600160a01b031633146109135760405162461bcd60e51b815260040161067190611c4f565b600e546001600160a01b03908116908316036109975760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610671565b6109a18282611870565b5050565b600e546000906001600160a01b038481169116148015906109d457506000546001600160a01b03848116911614155b80156109f957506001600160a01b0383166000908152600a602052604090205460ff16155b15610a43576003546001600160a01b038416600090815260106020526040902054610a25908490611cad565b1115610a435760405162461bcd60e51b815260040161067190611cc0565b6106b23384846110a0565b6000546001600160a01b03163314610a785760405162461bcd60e51b815260040161067190611c4f565b6012805461ffff1916610101179055565b6000546001600160a01b03163314610ab35760405162461bcd60e51b815260040161067190611c4f565b6064610abe60025490565b610ac9906001611d12565b610ad39190611d29565b811115610b345760405162461bcd60e51b815260206004820152602960248201527f496e76616c69642076616c75653a2065786365656473203125206f6620746f74604482015268616c20737570706c7960b81b6064820152608401610671565b610b406009600a611e2f565b610b4a9082611d12565b60065550565b6000546001600160a01b03163314610b7a5760405162461bcd60e51b815260040161067190611c4f565b6001600160a01b038116610bdf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610671565b6108e681611820565b6000546001600160a01b03163314610c125760405162461bcd60e51b815260040161067190611c4f565b601355565b6000546001600160a01b03163314610c415760405162461bcd60e51b815260040161067190611c4f565b6001600160a01b038116610c895760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610671565b600880546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b03163314610ced5760405162461bcd60e51b815260040161067190611c4f565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d689190611e3e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd99190611e3e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4a9190611e3e565b600e80546001600160a01b039283166001600160a01b031991821617909155600d80549284169290911682179055610e86903090600019610f77565b600e54610e9d906001600160a01b03166001611870565b600d546001600160a01b031663f305d7194730610ecf816001600160a01b031660009081526010602052604090205490565b600080610ee46000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610f4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f719190611e5b565b50505050565b6001600160a01b038316610fdc5760405162461bcd60e51b815260206004820152602660248201527f4d79546f6b656e3a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610671565b6001600160a01b03821661103e5760405162461bcd60e51b8152602060048201526024808201527f4d79546f6b656e3a20617070726f766520746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610671565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166110f65760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610671565b6001600160a01b03821661114c5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610671565b600081116111ae5760405162461bcd60e51b815260206004820152602960248201527f7472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610671565b6001600160a01b0382166000908152600c602052604090205460ff161580156111e557506000546001600160a01b03838116911614155b801561120a57506001600160a01b0382166000908152600a602052604090205460ff16155b15611254576003546001600160a01b038316600090815260106020526040902054611236908390611cad565b11156112545760405162461bcd60e51b815260040161067190611cc0565b601254610100900460ff166112e2576001600160a01b0383166000908152600a602052604090205460ff16806112a257506001600160a01b0382166000908152600a602052604090205460ff165b6112e25760405162461bcd60e51b81526020600482015260116024820152701dd9481b9bdd081b185d5b98da081e595d607a1b6044820152606401610671565b60125462010000900460ff16806113015750601254610100900460ff16155b1561139a576001600160a01b038316600090815260106020526040902054611329908261189b565b6001600160a01b03808516600090815260106020526040808220939093559084168152205461135890826118ae565b6001600160a01b038084166000818152601060205260409081902093909355915190851690600080516020611f11833981519152906110939085815260200190565b6001600160a01b0382166000908152600c602052604081205460019190839060ff1680156113e157506001600160a01b0386166000908152600a602052604090205460ff16155b80156113fb57506000546001600160a01b03878116911614155b15611491576005548411156114525760405162461bcd60e51b815260206004820152601d60248201527f53656c6c20616d6f756e742065786365656473206d6178206c696d69740000006044820152606401610671565b60125460ff16801561147557506006543060009081526010602052604090205410155b801561148357506006548410155b1561149157611491846118ba565b6001600160a01b0386166000908152600c602052604090205460ff1680156114d257506001600160a01b0385166000908152600a602052604090205460ff16155b80156114ec57506000546001600160a01b03868116911614155b15611543576004548411156115435760405162461bcd60e51b815260206004820152601c60248201527f42757920616d6f756e742065786365656473206d6178206c696d6974000000006044820152606401610671565b6001600160a01b0386166000908152600a602052604090205460ff168061158257506001600160a01b0385166000908152600a602052604090205460ff165b156115dd576001600160a01b0386166000908152600a602052604081205490935060ff1680156115cb57506001600160a01b0385166000908152600c602052604090205460ff16155b156115dd576115da8185611c9a565b90505b821561177b576001600160a01b0386166000908152600c602052604090205460ff1615611631576064601354856116149190611d12565b61161e9190611d29565b915061162a8285611c9a565b905061167b565b6001600160a01b0385166000908152600c602052604090205460ff161561167b576064601454856116629190611d12565b61166c9190611d29565b91506116788285611c9a565b90505b81156116ac573060009081526010602052604090205461169b90836118ae565b306000908152601060205260409020555b6001600160a01b0386166000908152601060205260409020546116cf908561189b565b6001600160a01b0380881660009081526010602052604080822093909355908716815220546116fe90826118ae565b6001600160a01b038087166000818152601060205260409081902093909355915190881690600080516020611f11833981519152906117409085815260200190565b60405180910390a360405182815230906001600160a01b03881690600080516020611f118339815191529060200160405180910390a3611818565b6001600160a01b03861660009081526010602052604090205461179e908261189b565b6001600160a01b0380881660009081526010602052604080822093909355908716815220546117cd90856118ae565b6001600160a01b038087166000818152601060205260409081902093909355915190881690600080516020611f118339815191529061180f9088815260200190565b60405180910390a35b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60006118a78284611c9a565b9392505050565b60006118a78284611cad565b6012805462ff000019166201000017905530600090815260106020526040812054905060006118f4836118ef84600754611954565b611954565b90506118ff81611969565b478015611942576008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611940573d6000803e3d6000fd5b505b50506012805462ff0000191690555050565b600081831161196357826118a7565b50919050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061199e5761199e611e89565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190611e3e565b81600181518110611a2e57611a2e611e89565b6001600160a01b039283166020918202929092010152600d54611a549130911684610f77565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611a8d908590600090869030904290600401611e9f565b600060405180830381600087803b158015611aa757600080fd5b505af1158015611818573d6000803e3d6000fd5b6001600160a01b03811681146108e657600080fd5b60008060408385031215611ae357600080fd5b8235611aee81611abb565b915060208301358015158114611b0357600080fd5b809150509250929050565b600060208083528351808285015260005b81811015611b3b57858101830151858201604001528201611b1f565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611b6f57600080fd5b8235611b7a81611abb565b946020939093013593505050565b600060208284031215611b9a57600080fd5b5035919050565b600080600060608486031215611bb657600080fd5b8335611bc181611abb565b92506020840135611bd181611abb565b929592945050506040919091013590565b600060208284031215611bf457600080fd5b81356118a781611abb565b60008060408385031215611c1257600080fd5b50508035926020909101359150565b60008060408385031215611c3457600080fd5b8235611c3f81611abb565b91506020830135611b0381611abb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156106b6576106b6611c84565b808201808211156106b6576106b6611c84565b60208082526032908201527f726563697069656e742077616c6c65742062616c616e63652065786365656473604082015271081d1a19481b585e1a5b5d5b481b1a5b5a5d60721b606082015260800190565b80820281158282048414176106b6576106b6611c84565b600082611d4657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611d86578160001904821115611d6c57611d6c611c84565b80851615611d7957918102915b93841c9390800290611d50565b509250929050565b600082611d9d575060016106b6565b81611daa575060006106b6565b8160018114611dc05760028114611dca57611de6565b60019150506106b6565b60ff841115611ddb57611ddb611c84565b50506001821b6106b6565b5060208310610133831016604e8410600b8410161715611e09575081810a6106b6565b611e138383611d4b565b8060001904821115611e2757611e27611c84565b029392505050565b60006118a760ff841683611d8e565b600060208284031215611e5057600080fd5b81516118a781611abb565b600080600060608486031215611e7057600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611eef5784516001600160a01b031683529383019391830191600101611eca565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122039793d4bb9c2c1c519c4c9150004c863a93656e1a9a2e8a37f604f28fd3e0a9364736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c80637a336e6611610102578063c9567bf911610095578063f2fde38b11610064578063f2fde38b146105d2578063fcd2e049146105f2578063fce0f92814610612578063feb1dfcc1461063257600080fd5b8063c9567bf914610542578063d89135cd14610557578063d8a0663c1461056c578063dd62ed3e1461058c57600080fd5b80639a7a23d6116100d15780639a7a23d6146104855780639f338c11146104a5578063a9059cbb146104de578063b0b92d77146104fe57600080fd5b80637a336e6614610426578063893d20e81461043b5780638da5cb5b1461043b57806395d89b411461045957600080fd5b806323b872dd1161017a5780635cb23e12116101495780635cb23e121461039b5780636612e66f146103bb57806370a08231146103db578063715018a61461041157600080fd5b806323b872dd14610306578063313ce5671461032657806349bd5a5e146103425780635342acb41461036257600080fd5b80630a80c0cc116101b65780630a80c0cc1461027a5780630c08e2551461029a5780631694505e146102af57806318160ddd146102e757600080fd5b8063027c1d48146101e857806306fdde031461020a578063095ea7b31461024a57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611ad0565b610647565b005b34801561021657600080fd5b5060408051808201909152600581526408ccad8d2f60db1b60208201525b6040516102419190611b0e565b60405180910390f35b34801561025657600080fd5b5061026a610265366004611b5c565b6106a5565b6040519015158152602001610241565b34801561028657600080fd5b50610208610295366004611b88565b6106bc565b3480156102a657600080fd5b506102086106eb565b3480156102bb57600080fd5b50600d546102cf906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b3480156102f357600080fd5b506002545b604051908152602001610241565b34801561031257600080fd5b5061026a610321366004611ba1565b610731565b34801561033257600080fd5b5060405160098152602001610241565b34801561034e57600080fd5b50600e546102cf906001600160a01b031681565b34801561036e57600080fd5b5061026a61037d366004611be2565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156103a757600080fd5b506102086103b6366004611bff565b610780565b3480156103c757600080fd5b506102086103d6366004611ad0565b6107b5565b3480156103e757600080fd5b506102f86103f6366004611be2565b6001600160a01b031660009081526010602052604090205490565b34801561041d57600080fd5b5061020861080a565b34801561043257600080fd5b50610208610840565b34801561044757600080fd5b506000546001600160a01b03166102cf565b34801561046557600080fd5b5060408051808201909152600381526208c98b60eb1b6020820152610234565b34801561049157600080fd5b506102086104a0366004611ad0565b6108e9565b3480156104b157600080fd5b5061026a6104c0366004611be2565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156104ea57600080fd5b5061026a6104f9366004611b5c565b6109a5565b34801561050a57600080fd5b50601354600354600454601454600554604080519586526020860194909452928401919091526060830152608082015260a001610241565b34801561054e57600080fd5b50610208610a4e565b34801561056357600080fd5b506009546102f8565b34801561057857600080fd5b50610208610587366004611b88565b610a89565b34801561059857600080fd5b506102f86105a7366004611c21565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b3480156105de57600080fd5b506102086105ed366004611be2565b610b50565b3480156105fe57600080fd5b5061020861060d366004611b88565b610be8565b34801561061e57600080fd5b5061020861062d366004611be2565b610c17565b34801561063e57600080fd5b50610208610cc3565b6000546001600160a01b0316331461067a5760405162461bcd60e51b815260040161067190611c4f565b60405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b60006106b2338484610f77565b5060015b92915050565b6000546001600160a01b031633146106e65760405162461bcd60e51b815260040161067190611c4f565b601455565b6000546001600160a01b031633146107155760405162461bcd60e51b815260040161067190611c4f565b6002601381905560145560001960038190556004819055600555565b6001600160a01b038316600090815260116020908152604080832033808552925282205461076b918691610766908690611c9a565b610f77565b6107768484846110a0565b5060019392505050565b6000546001600160a01b031633146107aa5760405162461bcd60e51b815260040161067190611c4f565b601391909155601455565b6000546001600160a01b031633146107df5760405162461bcd60e51b815260040161067190611c4f565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146108345760405162461bcd60e51b815260040161067190611c4f565b61083e6000611820565b565b6000546001600160a01b0316331461086a5760405162461bcd60e51b815260040161067190611c4f565b600047116108ba5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a206e6f20455448206f6e20636f6e74726163742e0000000000006044820152606401610671565b60405133904780156108fc02916000818181858888f193505050501580156108e6573d6000803e3d6000fd5b50565b6000546001600160a01b031633146109135760405162461bcd60e51b815260040161067190611c4f565b600e546001600160a01b03908116908316036109975760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610671565b6109a18282611870565b5050565b600e546000906001600160a01b038481169116148015906109d457506000546001600160a01b03848116911614155b80156109f957506001600160a01b0383166000908152600a602052604090205460ff16155b15610a43576003546001600160a01b038416600090815260106020526040902054610a25908490611cad565b1115610a435760405162461bcd60e51b815260040161067190611cc0565b6106b23384846110a0565b6000546001600160a01b03163314610a785760405162461bcd60e51b815260040161067190611c4f565b6012805461ffff1916610101179055565b6000546001600160a01b03163314610ab35760405162461bcd60e51b815260040161067190611c4f565b6064610abe60025490565b610ac9906001611d12565b610ad39190611d29565b811115610b345760405162461bcd60e51b815260206004820152602960248201527f496e76616c69642076616c75653a2065786365656473203125206f6620746f74604482015268616c20737570706c7960b81b6064820152608401610671565b610b406009600a611e2f565b610b4a9082611d12565b60065550565b6000546001600160a01b03163314610b7a5760405162461bcd60e51b815260040161067190611c4f565b6001600160a01b038116610bdf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610671565b6108e681611820565b6000546001600160a01b03163314610c125760405162461bcd60e51b815260040161067190611c4f565b601355565b6000546001600160a01b03163314610c415760405162461bcd60e51b815260040161067190611c4f565b6001600160a01b038116610c895760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610671565b600880546001600160a01b039092166001600160a01b0319909216821790556000908152600a60205260409020805460ff19166001179055565b6000546001600160a01b03163314610ced5760405162461bcd60e51b815260040161067190611c4f565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d689190611e3e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd99190611e3e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4a9190611e3e565b600e80546001600160a01b039283166001600160a01b031991821617909155600d80549284169290911682179055610e86903090600019610f77565b600e54610e9d906001600160a01b03166001611870565b600d546001600160a01b031663f305d7194730610ecf816001600160a01b031660009081526010602052604090205490565b600080610ee46000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610f4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f719190611e5b565b50505050565b6001600160a01b038316610fdc5760405162461bcd60e51b815260206004820152602660248201527f4d79546f6b656e3a20617070726f76652066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610671565b6001600160a01b03821661103e5760405162461bcd60e51b8152602060048201526024808201527f4d79546f6b656e3a20617070726f766520746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610671565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166110f65760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610671565b6001600160a01b03821661114c5760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610671565b600081116111ae5760405162461bcd60e51b815260206004820152602960248201527f7472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610671565b6001600160a01b0382166000908152600c602052604090205460ff161580156111e557506000546001600160a01b03838116911614155b801561120a57506001600160a01b0382166000908152600a602052604090205460ff16155b15611254576003546001600160a01b038316600090815260106020526040902054611236908390611cad565b11156112545760405162461bcd60e51b815260040161067190611cc0565b601254610100900460ff166112e2576001600160a01b0383166000908152600a602052604090205460ff16806112a257506001600160a01b0382166000908152600a602052604090205460ff165b6112e25760405162461bcd60e51b81526020600482015260116024820152701dd9481b9bdd081b185d5b98da081e595d607a1b6044820152606401610671565b60125462010000900460ff16806113015750601254610100900460ff16155b1561139a576001600160a01b038316600090815260106020526040902054611329908261189b565b6001600160a01b03808516600090815260106020526040808220939093559084168152205461135890826118ae565b6001600160a01b038084166000818152601060205260409081902093909355915190851690600080516020611f11833981519152906110939085815260200190565b6001600160a01b0382166000908152600c602052604081205460019190839060ff1680156113e157506001600160a01b0386166000908152600a602052604090205460ff16155b80156113fb57506000546001600160a01b03878116911614155b15611491576005548411156114525760405162461bcd60e51b815260206004820152601d60248201527f53656c6c20616d6f756e742065786365656473206d6178206c696d69740000006044820152606401610671565b60125460ff16801561147557506006543060009081526010602052604090205410155b801561148357506006548410155b1561149157611491846118ba565b6001600160a01b0386166000908152600c602052604090205460ff1680156114d257506001600160a01b0385166000908152600a602052604090205460ff16155b80156114ec57506000546001600160a01b03868116911614155b15611543576004548411156115435760405162461bcd60e51b815260206004820152601c60248201527f42757920616d6f756e742065786365656473206d6178206c696d6974000000006044820152606401610671565b6001600160a01b0386166000908152600a602052604090205460ff168061158257506001600160a01b0385166000908152600a602052604090205460ff165b156115dd576001600160a01b0386166000908152600a602052604081205490935060ff1680156115cb57506001600160a01b0385166000908152600c602052604090205460ff16155b156115dd576115da8185611c9a565b90505b821561177b576001600160a01b0386166000908152600c602052604090205460ff1615611631576064601354856116149190611d12565b61161e9190611d29565b915061162a8285611c9a565b905061167b565b6001600160a01b0385166000908152600c602052604090205460ff161561167b576064601454856116629190611d12565b61166c9190611d29565b91506116788285611c9a565b90505b81156116ac573060009081526010602052604090205461169b90836118ae565b306000908152601060205260409020555b6001600160a01b0386166000908152601060205260409020546116cf908561189b565b6001600160a01b0380881660009081526010602052604080822093909355908716815220546116fe90826118ae565b6001600160a01b038087166000818152601060205260409081902093909355915190881690600080516020611f11833981519152906117409085815260200190565b60405180910390a360405182815230906001600160a01b03881690600080516020611f118339815191529060200160405180910390a3611818565b6001600160a01b03861660009081526010602052604090205461179e908261189b565b6001600160a01b0380881660009081526010602052604080822093909355908716815220546117cd90856118ae565b6001600160a01b038087166000818152601060205260409081902093909355915190881690600080516020611f118339815191529061180f9088815260200190565b60405180910390a35b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60006118a78284611c9a565b9392505050565b60006118a78284611cad565b6012805462ff000019166201000017905530600090815260106020526040812054905060006118f4836118ef84600754611954565b611954565b90506118ff81611969565b478015611942576008546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611940573d6000803e3d6000fd5b505b50506012805462ff0000191690555050565b600081831161196357826118a7565b50919050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061199e5761199e611e89565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156119f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1b9190611e3e565b81600181518110611a2e57611a2e611e89565b6001600160a01b039283166020918202929092010152600d54611a549130911684610f77565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611a8d908590600090869030904290600401611e9f565b600060405180830381600087803b158015611aa757600080fd5b505af1158015611818573d6000803e3d6000fd5b6001600160a01b03811681146108e657600080fd5b60008060408385031215611ae357600080fd5b8235611aee81611abb565b915060208301358015158114611b0357600080fd5b809150509250929050565b600060208083528351808285015260005b81811015611b3b57858101830151858201604001528201611b1f565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611b6f57600080fd5b8235611b7a81611abb565b946020939093013593505050565b600060208284031215611b9a57600080fd5b5035919050565b600080600060608486031215611bb657600080fd5b8335611bc181611abb565b92506020840135611bd181611abb565b929592945050506040919091013590565b600060208284031215611bf457600080fd5b81356118a781611abb565b60008060408385031215611c1257600080fd5b50508035926020909101359150565b60008060408385031215611c3457600080fd5b8235611c3f81611abb565b91506020830135611b0381611abb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156106b6576106b6611c84565b808201808211156106b6576106b6611c84565b60208082526032908201527f726563697069656e742077616c6c65742062616c616e63652065786365656473604082015271081d1a19481b585e1a5b5d5b481b1a5b5a5d60721b606082015260800190565b80820281158282048414176106b6576106b6611c84565b600082611d4657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611d86578160001904821115611d6c57611d6c611c84565b80851615611d7957918102915b93841c9390800290611d50565b509250929050565b600082611d9d575060016106b6565b81611daa575060006106b6565b8160018114611dc05760028114611dca57611de6565b60019150506106b6565b60ff841115611ddb57611ddb611c84565b50506001821b6106b6565b5060208310610133831016604e8410600b8410161715611e09575081810a6106b6565b611e138383611d4b565b8060001904821115611e2757611e27611c84565b029392505050565b60006118a760ff841683611d8e565b600060208284031215611e5057600080fd5b81516118a781611abb565b600080600060608486031215611e7057600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611eef5784516001600160a01b031683529383019391830191600101611eca565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122039793d4bb9c2c1c519c4c9150004c863a93656e1a9a2e8a37f604f28fd3e0a9364736f6c63430008130033

Deployed Bytecode Sourcemap

18970:12625:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30345:116;;;;;;;;;;-1:-1:-1;30345:116:0;;;;;:::i;:::-;;:::i;:::-;;21445:83;;;;;;;;;;-1:-1:-1;21515:5:0;;;;;;;;;;;;-1:-1:-1;;;21515:5:0;;;;21445:83;;;;;;;:::i;:::-;;;;;;;;23655:184;;;;;;;;;;-1:-1:-1;23655:184:0;;;;;:::i;:::-;;:::i;:::-;;;1609:14:1;;1602:22;1584:41;;1572:2;1557:18;23655:184:0;1444:187:1;31250:106:0;;;;;;;;;;-1:-1:-1;31250:106:0;;;;;:::i;:::-;;:::i;30740:231::-;;;;;;;;;;;;;:::i;19877:41::-;;;;;;;;;;-1:-1:-1;19877:41:0;;;;-1:-1:-1;;;;;19877:41:0;;;;;;-1:-1:-1;;;;;2012:32:1;;;1994:51;;1982:2;1967:18;19877:41:0;1821:230:1;21722:100:0;;;;;;;;;;-1:-1:-1;21802:12:0;;21722:100;;;2202:25:1;;;2190:2;2175:18;21722:100:0;2056:177:1;23847:296:0;;;;;;;;;;-1:-1:-1;23847:296:0;;;;;:::i;:::-;;:::i;21631:83::-;;;;;;;;;;-1:-1:-1;21631:83:0;;19215:1;2841:36:1;;2829:2;2814:18;21631:83:0;2699:184:1;19927:28:0;;;;;;;;;;-1:-1:-1;19927:28:0;;;;-1:-1:-1;;;;;19927:28:0;;;22056:124;;;;;;;;;;-1:-1:-1;22056:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;22145:27:0;22121:4;22145:27;;;:18;:27;;;;;;;;;22056:124;30979:153;;;;;;;;;;-1:-1:-1;30979:153:0;;;;;:::i;:::-;;:::i;29757:130::-;;;;;;;;;;-1:-1:-1;29757:130:0;;;;;:::i;:::-;;:::i;21830:119::-;;;;;;;;;;-1:-1:-1;21830:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;21923:18:0;21896:7;21923:18;;;:9;:18;;;;;;;21830:119;1669:103;;;;;;;;;;;;;:::i;31364:191::-;;;;;;;;;;;;;:::i;21354:83::-;;;;;;;;;;-1:-1:-1;21395:7:0;1091:6;-1:-1:-1;;;;;1091:6:0;21354:83;;21536:87;;;;;;;;;;-1:-1:-1;21608:7:0;;;;;;;;;;;;-1:-1:-1;;;21608:7:0;;;;21536:87;;29895:304;;;;;;;;;;-1:-1:-1;29895:304:0;;;;;:::i;:::-;;:::i;22188:107::-;;;;;;;;;;-1:-1:-1;22188:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;22271:16:0;22247:4;22271:16;;;:7;:16;;;;;;;;;22188:107;22945:526;;;;;;;;;;-1:-1:-1;22945:526:0;;;;;:::i;:::-;;:::i;22466:471::-;;;;;;;;;;-1:-1:-1;22760:13:0;;22796:10;;22832:13;;22874:14;;22915;;22466:471;;;3860:25:1;;;3916:2;3901:18;;3894:34;;;;3944:18;;;3937:34;;;;4002:2;3987:18;;3980:34;4045:3;4030:19;;4023:35;3847:3;3832:19;22466:471:0;3601:463:1;29643:106:0;;;;;;;;;;;;;:::i;21957:91::-;;;;;;;;;;-1:-1:-1;22028:12:0;;21957:91;;30469:263;;;;;;;;;;-1:-1:-1;30469:263:0;;;;;:::i;:::-;;:::i;23479:168::-;;;;;;;;;;-1:-1:-1;23479:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;23612:18:0;;;23585:7;23612:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23479:168;1927:238;;;;;;;;;;-1:-1:-1;1927:238:0;;;;;:::i;:::-;;:::i;31140:102::-;;;;;;;;;;-1:-1:-1;31140:102:0;;;;;:::i;:::-;;:::i;29416:219::-;;;;;;;;;;-1:-1:-1;29416:219:0;;;;;:::i;:::-;;:::i;20607:739::-;;;;;;;;;;;;;:::i;30345:116::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;30428:16:0;;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:25;;-1:-1:-1;;30428:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30345:116::o;23655:184::-;23755:4;23772:37;23781:10;23793:7;23802:6;23772:8;:37::i;:::-;-1:-1:-1;23827:4:0;23655:184;;;;;:::o;31250:106::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;31323:14:::1;:25:::0;31250:106::o;30740:231::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;30810:1:::1;30794:13;:17:::0;;;30822:14:::1;:18:::0;-1:-1:-1;;30853:10:0::1;:27:::0;;;30891:13:::1;:30:::0;;;30932:14:::1;:31:::0;30740:231::o;23847:296::-;-1:-1:-1;;;;;24025:19:0;;23979:4;24025:19;;;:11;:19;;;;;;;;24013:10;24025:31;;;;;;;;23996:70;;24005:6;;24025:40;;24059:6;;24025:40;:::i;:::-;23996:8;:70::i;:::-;24077:36;24087:6;24095:9;24106:6;24077:9;:36::i;:::-;-1:-1:-1;24131:4:0;23847:296;;;;;:::o;30979:153::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;31065:13:::1;:23:::0;;;;31099:14:::1;:25:::0;30979:153::o;29757:130::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29843:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;29843:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29757:130::o;1669:103::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;1734:30:::1;1761:1;1734:18;:30::i;:::-;1669:103::o:0;31364:191::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;31453:1:::1;31429:21;:25;31421:64;;;::::0;-1:-1:-1;;;31421:64:0;;5290:2:1;31421:64:0::1;::::0;::::1;5272:21:1::0;5329:2;5309:18;;;5302:30;5368:28;5348:18;;;5341:56;5414:18;;31421:64:0::1;5088:350:1::0;31421:64:0::1;31496:51;::::0;31504:10:::1;::::0;31525:21:::1;31496:51:::0;::::1;;;::::0;::::1;::::0;;;31525:21;31504:10;31496:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;31364:191::o:0;29895:304::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;30041:13:::1;::::0;-1:-1:-1;;;;;30041:13:0;;::::1;30033:21:::0;;::::1;::::0;30011:128:::1;;;::::0;-1:-1:-1;;;30011:128:0;;5645:2:1;30011:128:0::1;::::0;::::1;5627:21:1::0;5684:2;5664:18;;;5657:30;5723:34;5703:18;;;5696:62;5794:27;5774:18;;;5767:55;5839:19;;30011:128:0::1;5443:421:1::0;30011:128:0::1;30150:41;30179:4;30185:5;30150:28;:41::i;:::-;29895:304:::0;;:::o;22945:526::-;23096:13;;23048:4;;-1:-1:-1;;;;;23083:26:0;;;23096:13;;23083:26;;;;:63;;-1:-1:-1;1064:7:0;1091:6;-1:-1:-1;;;;;23126:20:0;;;1091:6;;23126:20;;23083:63;:110;;;;-1:-1:-1;;;;;;23164:29:0;;;;;;:18;:29;;;;;;;;23163:30;23083:110;23065:322;;;23279:10;;-1:-1:-1;;;;;23246:20:0;;;;;;:9;:20;;;;;;:29;;23269:6;;23246:29;:::i;:::-;:43;;23220:155;;;;-1:-1:-1;;;23220:155:0;;;;;;;:::i;:::-;23399:40;23409:10;23421:9;23432:6;23399:9;:40::i;29643:106::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;29696:9:::1;:16:::0;;-1:-1:-1;;29723:18:0;;;;;29643:106::o;30469:263::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;30600:3:::1;30579:13;21802:12:::0;;;21722:100;30579:13:::1;:17;::::0;30595:1:::1;30579:17;:::i;:::-;30578:25;;;;:::i;:::-;30563:11;:40;;30541:131;;;::::0;-1:-1:-1;;;30541:131:0;;7015:2:1;30541:131:0::1;::::0;::::1;6997:21:1::0;7054:2;7034:18;;;7027:30;7093:34;7073:18;;;7066:62;-1:-1:-1;;;7144:18:1;;;7137:39;7193:19;;30541:131:0::1;6813:405:1::0;30541:131:0::1;30709:15;19215:1;30709:2;:15;:::i;:::-;30695:29;::::0;:11;:29:::1;:::i;:::-;30683:9;:41:::0;-1:-1:-1;30469:263:0:o;1927:238::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2030:22:0;::::1;2008:110;;;::::0;-1:-1:-1;;;2008:110:0;;8808:2:1;2008:110:0::1;::::0;::::1;8790:21:1::0;8847:2;8827:18;;;8820:30;8886:34;8866:18;;;8859:62;-1:-1:-1;;;8937:18:1;;;8930:36;8983:19;;2008:110:0::1;8606:402:1::0;2008:110:0::1;2129:28;2148:8;2129:18;:28::i;31140:102::-:0;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;31211:13:::1;:23:::0;31140:102::o;29416:219::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29499:24:0;::::1;29491:52;;;::::0;-1:-1:-1;;;29491:52:0;;9215:2:1;29491:52:0::1;::::0;::::1;9197:21:1::0;9254:2;9234:18;;;9227:30;-1:-1:-1;;;9273:18:1;;;9266:45;9328:18;;29491:52:0::1;9013:339:1::0;29491:52:0::1;29554:12;:25:::0;;-1:-1:-1;;;;;29554:25:0;;::::1;-1:-1:-1::0;;;;;;29554:25:0;;::::1;::::0;::::1;::::0;;:12:::1;29590:30:::0;;;:18:::1;:30;::::0;;;;:37;;-1:-1:-1;;29590:37:0::1;29554:25:::0;29590:37:::1;::::0;;29416:219::o;20607:739::-;1064:7;1091:6;-1:-1:-1;;;;;1091:6:0;419:10;1238:23;1230:68;;;;-1:-1:-1;;;1230:68:0;;;;;;;:::i;:::-;20657:35:::1;20728:42;20657:124;;20828:16;-1:-1:-1::0;;;;;20828:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20810:70:0::1;;20889:4;20896:16;-1:-1:-1::0;;;;;20896:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20810:110;::::0;-1:-1:-1;;;;;;20810:110:0::1;::::0;;;;;;-1:-1:-1;;;;;9843:15:1;;;20810:110:0::1;::::0;::::1;9825:34:1::0;9895:15;;9875:18;;;9868:43;9760:18;;20810:110:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20794:13;:126:::0;;-1:-1:-1;;;;;20794:126:0;;::::1;-1:-1:-1::0;;;;;;20794:126:0;;::::1;;::::0;;;20933:15:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;20978:62:::1;::::0;20995:4:::1;::::0;-1:-1:-1;;20978:8:0::1;:62::i;:::-;21082:13;::::0;21053:49:::1;::::0;-1:-1:-1;;;;;21082:13:0::1;::::0;21053:28:::1;:49::i;:::-;21115:15;::::0;-1:-1:-1;;;;;21115:15:0::1;:31;21154:21;21199:4;21219:24;21199:4:::0;-1:-1:-1;;;;;21923:18:0;21896:7;21923:18;;;:9;:18;;;;;;;21830:119;21219:24:::1;21258:1;21274::::0;21290:7:::1;1064::::0;1091:6;-1:-1:-1;;;;;1091:6:0;;1018:87;21290:7:::1;21115:223;::::0;::::1;::::0;;;-1:-1:-1;;;;;;21115:223:0;;;-1:-1:-1;;;;;10281:15:1;;;21115:223:0::1;::::0;::::1;10263:34:1::0;10313:18;;;10306:34;;;;10356:18;;;10349:34;;;;10399:18;;;10392:34;10463:15;;;10442:19;;;10435:44;21312:15:0::1;10495:19:1::0;;;10488:35;10197:19;;21115:223:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20646:700;20607:739::o:0;24151:341::-;-1:-1:-1;;;;;24244:19:0;;24236:70;;;;-1:-1:-1;;;24236:70:0;;11047:2:1;24236:70:0;;;11029:21:1;11086:2;11066:18;;;11059:30;11125:34;11105:18;;;11098:62;-1:-1:-1;;;11176:18:1;;;11169:36;11222:19;;24236:70:0;10845:402:1;24236:70:0;-1:-1:-1;;;;;24325:21:0;;24317:70;;;;-1:-1:-1;;;24317:70:0;;11454:2:1;24317:70:0;;;11436:21:1;11493:2;11473:18;;;11466:30;11532:34;11512:18;;;11505:62;-1:-1:-1;;;11583:18:1;;;11576:34;11627:19;;24317:70:0;11252:400:1;24317:70:0;-1:-1:-1;;;;;24400:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24452:32;;2202:25:1;;;24452:32:0;;2175:18:1;24452:32:0;;;;;;;;24151:341;;;:::o;24500:3674::-;-1:-1:-1;;;;;24631:20:0;;24623:63;;;;-1:-1:-1;;;24623:63:0;;11859:2:1;24623:63:0;;;11841:21:1;11898:2;11878:18;;;11871:30;11937:32;11917:18;;;11910:60;11987:18;;24623:63:0;11657:354:1;24623:63:0;-1:-1:-1;;;;;24705:23:0;;24697:64;;;;-1:-1:-1;;;24697:64:0;;12218:2:1;24697:64:0;;;12200:21:1;12257:2;12237:18;;;12230:30;12296;12276:18;;;12269:58;12344:18;;24697:64:0;12016:352:1;24697:64:0;24789:1;24780:6;:10;24772:64;;;;-1:-1:-1;;;24772:64:0;;12575:2:1;24772:64:0;;;12557:21:1;12614:2;12594:18;;;12587:30;12653:34;12633:18;;;12626:62;-1:-1:-1;;;12704:18:1;;;12697:39;12753:19;;24772:64:0;12373:405:1;24772:64:0;-1:-1:-1;;;;;24868:36:0;;;;;;:25;:36;;;;;;;;24867:37;:74;;;;-1:-1:-1;1064:7:0;1091:6;-1:-1:-1;;;;;24921:20:0;;;1091:6;;24921:20;;24867:74;:121;;;;-1:-1:-1;;;;;;24959:29:0;;;;;;:18;:29;;;;;;;;24958:30;24867:121;24849:333;;;25074:10;;-1:-1:-1;;;;;25041:20:0;;;;;;:9;:20;;;;;;:29;;25064:6;;25041:29;:::i;:::-;:43;;25015:155;;;;-1:-1:-1;;;25015:155:0;;;;;;;:::i;:::-;25197:9;;;;;;;25192:181;;-1:-1:-1;;;;;25249:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;25279:29:0;;;;;;:18;:29;;;;;;;;25249:59;25223:138;;;;-1:-1:-1;;;25223:138:0;;12985:2:1;25223:138:0;;;12967:21:1;13024:2;13004:18;;;12997:30;-1:-1:-1;;;13043:18:1;;;13036:47;13100:18;;25223:138:0;12783:341:1;25223:138:0;25389:9;;;;;;;;:23;;-1:-1:-1;25403:9:0;;;;;;;25402:10;25389:23;25385:2782;;;-1:-1:-1;;;;;25449:17:0;;;;;;:9;:17;;;;;;:29;;25471:6;25449:21;:29::i;:::-;-1:-1:-1;;;;;25429:17:0;;;;;;;:9;:17;;;;;;:49;;;;25516:20;;;;;;;:32;;25541:6;25516:24;:32::i;:::-;-1:-1:-1;;;;;25493:20:0;;;;;;;:9;:20;;;;;;;:55;;;;25568:35;;;;;;-1:-1:-1;;;;;;;;;;;25568:35:0;;;25596:6;2202:25:1;;2190:2;2175:18;;2056:177;25385:2782:0;-1:-1:-1;;;;;25801:36:0;;25636:15;25801:36;;;:25;:36;;;;;;25654:4;;25636:15;25736:6;;25801:36;;:84;;;;-1:-1:-1;;;;;;25859:26:0;;;;;;:18;:26;;;;;;;;25858:27;25801:84;:122;;;;-1:-1:-1;1064:7:0;1091:6;-1:-1:-1;;;;;25906:17:0;;;1091:6;;25906:17;;25801:122;25779:482;;;25998:14;;25988:6;:24;;25958:127;;;;-1:-1:-1;;;25958:127:0;;13331:2:1;25958:127:0;;;13313:21:1;13370:2;13350:18;;;13343:30;13409:31;13389:18;;;13382:59;13458:18;;25958:127:0;13129:353:1;25958:127:0;26110:11;;;;:52;;;;-1:-1:-1;26153:9:0;;26143:4;21896:7;21923:18;;;:9;:18;;;;;;26125:37;;26110:52;:75;;;;;26176:9;;26166:6;:19;;26110:75;26106:140;;;26210:16;26219:6;26210:8;:16::i;:::-;-1:-1:-1;;;;;26318:33:0;;;;;;:25;:33;;;;;;;;:84;;;;-1:-1:-1;;;;;;26373:29:0;;;;;;:18;:29;;;;;;;;26372:30;26318:84;:125;;;;-1:-1:-1;1064:7:0;1091:6;-1:-1:-1;;;;;26423:20:0;;;1091:6;;26423:20;;26318:125;26296:323;;;26518:13;;26508:6;:23;;26478:125;;;;-1:-1:-1;;;26478:125:0;;13689:2:1;26478:125:0;;;13671:21:1;13728:2;13708:18;;;13701:30;13767;13747:18;;;13740:58;13815:18;;26478:125:0;13487:352:1;26478:125:0;-1:-1:-1;;;;;26639:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;26669:29:0;;;;;;:18;:29;;;;;;;;26639:59;26635:347;;;-1:-1:-1;;;;;26782:26:0;;26732:5;26782:26;;;:18;:26;;;;;;26732:5;;-1:-1:-1;26782:26:0;;:88;;;;-1:-1:-1;;;;;;26834:36:0;;;;;;:25;:36;;;;;;;;26833:37;26782:88;26756:211;;;26927:20;26936:11;26927:6;:20;:::i;:::-;26913:34;;26756:211;27002:10;26998:1158;;;-1:-1:-1;;;;;27037:33:0;;;;;;:25;:33;;;;;;;;27033:388;;;27139:3;27122:13;;27113:6;:22;;;;:::i;:::-;27112:30;;;;:::i;:::-;27095:47;-1:-1:-1;27179:23:0;27095:47;27179:6;:23;:::i;:::-;27165:37;;27033:388;;;-1:-1:-1;;;;;27232:36:0;;;;;;:25;:36;;;;;;;;27228:193;;;27338:3;27320:14;;27311:6;:23;;;;:::i;:::-;27310:31;;;;:::i;:::-;27293:48;-1:-1:-1;27378:23:0;27293:48;27378:6;:23;:::i;:::-;27364:37;;27228:193;27445:18;;27441:186;;27533:4;27515:24;;;;:9;:24;;;;;;:92;;27570:14;27515:28;:92::i;:::-;27506:4;27488:24;;;;:9;:24;;;;;:119;27441:186;-1:-1:-1;;;;;27665:17:0;;;;;;:9;:17;;;;;;:29;;27687:6;27665:21;:29::i;:::-;-1:-1:-1;;;;;27645:17:0;;;;;;;:9;:17;;;;;;:49;;;;27736:20;;;;;;;:37;;27761:11;27736:24;:37::i;:::-;-1:-1:-1;;;;;27713:20:0;;;;;;;:9;:20;;;;;;;:60;;;;27799:40;;;;;;-1:-1:-1;;;;;;;;;;;27799:40:0;;;27827:11;2202:25:1;;2190:2;2175:18;;2056:177;27799:40:0;;;;;;;;27863:47;;2202:25:1;;;27888:4:0;;-1:-1:-1;;;;;27863:47:0;;;-1:-1:-1;;;;;;;;;;;27863:47:0;2190:2:1;2175:18;27863:47:0;;;;;;;26998:1158;;;-1:-1:-1;;;;;27971:17:0;;;;;;:9;:17;;;;;;:34;;27993:11;27971:21;:34::i;:::-;-1:-1:-1;;;;;27951:17:0;;;;;;;:9;:17;;;;;;:54;;;;28047:20;;;;;;;:32;;28072:6;28047:24;:32::i;:::-;-1:-1:-1;;;;;28024:20:0;;;;;;;:9;:20;;;;;;;:55;;;;28105:35;;;;;;-1:-1:-1;;;;;;;;;;;28105:35:0;;;28133:6;2202:25:1;;2190:2;2175:18;;2056:177;28105:35:0;;;;;;;;26998:1158;25621:2546;;;24500:3674;;;:::o;2325:191::-;2399:16;2418:6;;-1:-1:-1;;;;;2435:17:0;;;-1:-1:-1;;;;;;2435:17:0;;;;;;2468:40;;2418:6;;;;;;;2468:40;;2399:16;2468:40;2388:128;2325:191;:::o;30207:130::-;-1:-1:-1;;;;;30290:31:0;;;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;30290:39:0;;;;;;;;;;30207:130::o;12082:98::-;12140:7;12167:5;12171:1;12167;:5;:::i;:::-;12160:12;12082:98;-1:-1:-1;;;12082:98:0:o;11976:::-;12034:7;12061:5;12065:1;12061;:5;:::i;28969:439::-;29022:9;:16;;-1:-1:-1;;29022:16:0;;;;;29089:4;-1:-1:-1;21923:18:0;;;:9;:18;;;;;;29051:44;;29108:14;29125:37;29129:6;29137:24;29141:9;29152:8;;29137:3;:24::i;:::-;29125:3;:37::i;:::-;29108:54;;29175:24;29192:6;29175:16;:24::i;:::-;29238:21;29276:19;;29272:99;;29320:12;;29312:47;;-1:-1:-1;;;;;29320:12:0;;;;29312:47;;;;;29343:15;;29320:12;29312:47;29320:12;29312:47;29343:15;29320:12;29312:47;;;;;;;;;;;;;;;;;;;;;29272:99;-1:-1:-1;;29383:9:0;:17;;-1:-1:-1;;29383:17:0;;;-1:-1:-1;;28969:439:0:o;28854:107::-;28911:7;28943:1;28939;:5;28938:15;;28952:1;28938:15;;;-1:-1:-1;28948:1:0;28854:107;-1:-1:-1;28854:107:0:o;28182:664::-;28340:16;;;28354:1;28340:16;;;;;;;;28316:21;;28340:16;;;;;;;;;;-1:-1:-1;28340:16:0;28316:40;;28385:4;28367;28372:1;28367:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28367:23:0;;;:7;;;;;;;;;;:23;;;;28411:15;;:22;;;-1:-1:-1;;;28411:22:0;;;;:15;;;;;:20;;:22;;;;;28367:7;;28411:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28401:4;28406:1;28401:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28401:32:0;;;:7;;;;;;;;;:32;28545:15;;28513:62;;28530:4;;28545:15;28563:11;28513:8;:62::i;:::-;28614:15;;:224;;-1:-1:-1;;;28614:224:0;;-1:-1:-1;;;;;28614:15:0;;;;:66;;:224;;28695:11;;28614:15;;28765:4;;28792;;28812:15;;28614:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:416;215:6;223;276:2;264:9;255:7;251:23;247:32;244:52;;;292:1;289;282:12;244:52;331:9;318:23;350:31;375:5;350:31;:::i;:::-;400:5;-1:-1:-1;457:2:1;442:18;;429:32;499:15;;492:23;480:36;;470:64;;530:1;527;520:12;470:64;553:7;543:17;;;150:416;;;;;:::o;571:548::-;683:4;712:2;741;730:9;723:21;773:6;767:13;816:6;811:2;800:9;796:18;789:34;841:1;851:140;865:6;862:1;859:13;851:140;;;960:14;;;956:23;;950:30;926:17;;;945:2;922:26;915:66;880:10;;851:140;;;855:3;1040:1;1035:2;1026:6;1015:9;1011:22;1007:31;1000:42;1110:2;1103;1099:7;1094:2;1086:6;1082:15;1078:29;1067:9;1063:45;1059:54;1051:62;;;;571:548;;;;:::o;1124:315::-;1192:6;1200;1253:2;1241:9;1232:7;1228:23;1224:32;1221:52;;;1269:1;1266;1259:12;1221:52;1308:9;1295:23;1327:31;1352:5;1327:31;:::i;:::-;1377:5;1429:2;1414:18;;;;1401:32;;-1:-1:-1;;;1124:315:1:o;1636:180::-;1695:6;1748:2;1736:9;1727:7;1723:23;1719:32;1716:52;;;1764:1;1761;1754:12;1716:52;-1:-1:-1;1787:23:1;;1636:180;-1:-1:-1;1636:180:1:o;2238:456::-;2315:6;2323;2331;2384:2;2372:9;2363:7;2359:23;2355:32;2352:52;;;2400:1;2397;2390:12;2352:52;2439:9;2426:23;2458:31;2483:5;2458:31;:::i;:::-;2508:5;-1:-1:-1;2565:2:1;2550:18;;2537:32;2578:33;2537:32;2578:33;:::i;:::-;2238:456;;2630:7;;-1:-1:-1;;;2684:2:1;2669:18;;;;2656:32;;2238:456::o;3096:247::-;3155:6;3208:2;3196:9;3187:7;3183:23;3179:32;3176:52;;;3224:1;3221;3214:12;3176:52;3263:9;3250:23;3282:31;3307:5;3282:31;:::i;3348:248::-;3416:6;3424;3477:2;3465:9;3456:7;3452:23;3448:32;3445:52;;;3493:1;3490;3483:12;3445:52;-1:-1:-1;;3516:23:1;;;3586:2;3571:18;;;3558:32;;-1:-1:-1;3348:248:1:o;4069:388::-;4137:6;4145;4198:2;4186:9;4177:7;4173:23;4169:32;4166:52;;;4214:1;4211;4204:12;4166:52;4253:9;4240:23;4272:31;4297:5;4272:31;:::i;:::-;4322:5;-1:-1:-1;4379:2:1;4364:18;;4351:32;4392:33;4351:32;4392:33;:::i;4462:356::-;4664:2;4646:21;;;4683:18;;;4676:30;4742:34;4737:2;4722:18;;4715:62;4809:2;4794:18;;4462:356::o;4823:127::-;4884:10;4879:3;4875:20;4872:1;4865:31;4915:4;4912:1;4905:15;4939:4;4936:1;4929:15;4955:128;5022:9;;;5043:11;;;5040:37;;;5057:18;;:::i;5869:125::-;5934:9;;;5955:10;;;5952:36;;;5968:18;;:::i;5999:414::-;6201:2;6183:21;;;6240:2;6220:18;;;6213:30;6279:34;6274:2;6259:18;;6252:62;-1:-1:-1;;;6345:2:1;6330:18;;6323:48;6403:3;6388:19;;5999:414::o;6418:168::-;6491:9;;;6522;;6539:15;;;6533:22;;6519:37;6509:71;;6560:18;;:::i;6591:217::-;6631:1;6657;6647:132;;6701:10;6696:3;6692:20;6689:1;6682:31;6736:4;6733:1;6726:15;6764:4;6761:1;6754:15;6647:132;-1:-1:-1;6793:9:1;;6591:217::o;7223:422::-;7312:1;7355:5;7312:1;7369:270;7390:7;7380:8;7377:21;7369:270;;;7449:4;7445:1;7441:6;7437:17;7431:4;7428:27;7425:53;;;7458:18;;:::i;:::-;7508:7;7498:8;7494:22;7491:55;;;7528:16;;;;7491:55;7607:22;;;;7567:15;;;;7369:270;;;7373:3;7223:422;;;;;:::o;7650:806::-;7699:5;7729:8;7719:80;;-1:-1:-1;7770:1:1;7784:5;;7719:80;7818:4;7808:76;;-1:-1:-1;7855:1:1;7869:5;;7808:76;7900:4;7918:1;7913:59;;;;7986:1;7981:130;;;;7893:218;;7913:59;7943:1;7934:10;;7957:5;;;7981:130;8018:3;8008:8;8005:17;8002:43;;;8025:18;;:::i;:::-;-1:-1:-1;;8081:1:1;8067:16;;8096:5;;7893:218;;8195:2;8185:8;8182:16;8176:3;8170:4;8167:13;8163:36;8157:2;8147:8;8144:16;8139:2;8133:4;8130:12;8126:35;8123:77;8120:159;;;-1:-1:-1;8232:19:1;;;8264:5;;8120:159;8311:34;8336:8;8330:4;8311:34;:::i;:::-;8381:6;8377:1;8373:6;8369:19;8360:7;8357:32;8354:58;;;8392:18;;:::i;:::-;8430:20;;7650:806;-1:-1:-1;;;7650:806:1:o;8461:140::-;8519:5;8548:47;8589:4;8579:8;8575:19;8569:4;8548:47;:::i;9357:251::-;9427:6;9480:2;9468:9;9459:7;9455:23;9451:32;9448:52;;;9496:1;9493;9486:12;9448:52;9528:9;9522:16;9547:31;9572:5;9547:31;:::i;10534:306::-;10622:6;10630;10638;10691:2;10679:9;10670:7;10666:23;10662:32;10659:52;;;10707:1;10704;10697:12;10659:52;10736:9;10730:16;10720:26;;10786:2;10775:9;10771:18;10765:25;10755:35;;10830:2;10819:9;10815:18;10809:25;10799:35;;10534:306;;;;;:::o;13976:127::-;14037:10;14032:3;14028:20;14025:1;14018:31;14068:4;14065:1;14058:15;14092:4;14089:1;14082:15;14108:980;14370:4;14418:3;14407:9;14403:19;14449:6;14438:9;14431:25;14475:2;14513:6;14508:2;14497:9;14493:18;14486:34;14556:3;14551:2;14540:9;14536:18;14529:31;14580:6;14615;14609:13;14646:6;14638;14631:22;14684:3;14673:9;14669:19;14662:26;;14723:2;14715:6;14711:15;14697:29;;14744:1;14754:195;14768:6;14765:1;14762:13;14754:195;;;14833:13;;-1:-1:-1;;;;;14829:39:1;14817:52;;14924:15;;;;14889:12;;;;14865:1;14783:9;14754:195;;;-1:-1:-1;;;;;;;15005:32:1;;;;15000:2;14985:18;;14978:60;-1:-1:-1;;;15069:3:1;15054:19;15047:35;14966:3;14108:980;-1:-1:-1;;;14108:980:1:o

Swarm Source

ipfs://39793d4bb9c2c1c519c4c9150004c863a93656e1a9a2e8a37f604f28fd3e0a93
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.