ETH Price: $3,411.65 (-7.21%)
Gas: 5.87 Gwei
 

Overview

Max Total Supply

100,000,000 DOGEGG

Holders

34

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,349,999.1 DOGEGG

Value
$0.00
0xd98926bcc783efe431b3235b8188dcc36e6f729f
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:
Dogegg

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-31
*/

/*

DOGEGG

WEBSITE - https://dogegg.dog

TELEGRAM - https://t.me/dogeggeth
TWITTER- https://twitter.com/DogeggErc20

*/


// SPDX-License-Identifier: MIT
pragma solidity =0.8.17 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

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

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

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

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

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

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

contract Dogegg is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    mapping (address => bool) private _blacklist;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public swapTokensAtAmount;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public feeLimit;
    uint256 public maxTxAmount;
    uint256 public maxWalletSize;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoNukeLP();

    event ManualNukeLP();

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

        uniswapV2Router = _uniswapV2Router;

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

        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 25;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        uint256 _feeLimit = 15;
        uint256 totalSupply = 100_000_000 * 1e9;

        uint256 _maxTxAmount = 1_500_000 * 1e9;
        uint256 _maxWalletSize = 1_500_000 * 1e9;

        maxTxAmount = _maxTxAmount;
        maxWalletSize = _maxWalletSize;

        swapTokensAtAmount = 1_000_000 * 1e9; // 1% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;


        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        feeLimit = _feeLimit;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x87c6460046598582e7Dc87247D24908B26DF0aB1); // set as marketing wallet
        devWallet = address(0xE96124428E04afE55E8C5499718168427A98C51b); // set as dev wallet

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

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

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= feeLimit, "Fees can't be higher than the limit");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= feeLimit, "Fees can't be higher than the limit");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }
/*
    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }*/

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[from] && !_blacklist[to], "You are a bot");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                require(amount <= maxTxAmount, "Max Transaction Limit");

                if(to != uniswapV2Pair) {
                    require(balanceOf(to) + amount < maxWalletSize, "Balance exceeds wallet size!");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    /*function addBL(address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function multiBL(address[] memory multiblacklist_) public onlyOwner {
        for (uint256 i = 0; i < multiblacklist_.length; i++) {
            _blacklist[multiblacklist_[i]] = true;
        }
    }*/

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805462ffffff19166001908117909155600c805460ff191690911790553480156200003057600080fd5b5060405180604001604052806006815260200165446f6765676760d01b81525060405180604001604052806006815260200165444f4745474760d01b815250816003908162000080919062000660565b5060046200008f828262000660565b505050620000ac620000a66200036960201b60201c565b6200036d565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801562000103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012991906200072c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000177573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019d91906200072c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021191906200072c565b6001600160a01b031660a08190526200022c906001620003bf565b6605543df729c0006016819055601781905566038d7ea4c68000600955600a600e8190556000600f8181556010829055919290918291601991839182919067016345785d8a000090808462000282818c6200075e565b6200028e91906200075e565b600d55601287905560138690556014859055601584905584620002b287896200075e565b620002be91906200075e565b601155600780547487c6460046598582e7dc87247d24908b26df0ab100610100600160a81b0319909116179055600880546001600160a01b03191673e96124428e04afe55e8c5499718168427a98c51b17905562000330620003286005546001600160a01b031690565b600162000413565b6200033d30600162000413565b6200034c61dead600162000413565b620003583384620004d2565b505050505050505050505062000786565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620004735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200052a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200046a565b80600260008282546200053e91906200075e565b90915550506001600160a01b038216600090815260208190526040812080548392906200056d9084906200075e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e757607f821691505b6020821081036200060857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005b757600081815260208120601f850160051c81016020861015620006375750805b601f850160051c820191505b81811015620006585782815560010162000643565b505050505050565b81516001600160401b038111156200067c576200067c620005bc565b62000694816200068d8454620005d2565b846200060e565b602080601f831160018114620006cc5760008415620006b35750858301515b600019600386901b1c1916600185901b17855562000658565b600085815260208120601f198616915b82811015620006fd57888601518255948401946001909101908401620006dc565b50858210156200071c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200073f57600080fd5b81516001600160a01b03811681146200075757600080fd5b9392505050565b808201808211156200078057634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05161253c620007eb6000396000818161047101528181610cc30152818161149f01526115b40152600081816103460152818161157601528181611e7001528181611f2901528181611f6501528181611fdf015261203c015261253c6000f3fe6080604052600436106102cd5760003560e01c80638da5cb5b11610175578063b62496f5116100dc578063d85ba06311610095578063e884f2601161006f578063e884f26014610894578063f11a24d3146108a9578063f2fde38b146108bf578063f6374342146108df57600080fd5b8063d85ba06314610822578063dd62ed3e14610838578063e2f456051461087e57600080fd5b8063b62496f514610759578063bbc0c74214610789578063c0246668146107a8578063c17b5b8c146107c8578063c876d0b9146107e8578063d257b34f1461080257600080fd5b80639a7a23d61161012e5780639a7a23d6146106b75780639c3b4fdc146106d75780639fccce32146106ed578063a0d82dc514610703578063a457c2d714610719578063a9059cbb1461073957600080fd5b80638da5cb5b146106185780638ea5220f146106365780638f3fa86014610656578063921369131461066c578063924de9b71461068257806395d89b41146106a257600080fd5b80634a62bb6511610234578063715018a6116101ed5780637bce5a04116101c75780637bce5a04146105b75780638095d564146105cd5780638a8c523c146105ed5780638c0b5e221461060257600080fd5b8063715018a614610568578063751039fc1461057d57806375f0a8741461059257600080fd5b80634a62bb65146104935780634fbee193146104ad5780635b193332146104e65780636a486a8e146104fc5780636ddd17131461051257806370a082311461053257600080fd5b80631f3fed8f116102865780631f3fed8f146103d757806323b872dd146103ed57806327c8f8351461040d578063313ce56714610423578063395093511461043f57806349bd5a5e1461045f57600080fd5b806306fdde03146102d9578063095ea7b3146103045780631694505e1461033457806318160ddd146103805780631816467f1461039f5780631a8145bb146103c157600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee6108f5565b6040516102fb91906120ba565b60405180910390f35b34801561031057600080fd5b5061032461031f36600461211d565b610987565b60405190151581526020016102fb565b34801561034057600080fd5b506103687f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102fb565b34801561038c57600080fd5b506002545b6040519081526020016102fb565b3480156103ab57600080fd5b506103bf6103ba366004612149565b61099e565b005b3480156103cd57600080fd5b5061039160195481565b3480156103e357600080fd5b5061039160185481565b3480156103f957600080fd5b50610324610408366004612166565b610a2e565b34801561041957600080fd5b5061036861dead81565b34801561042f57600080fd5b50604051600981526020016102fb565b34801561044b57600080fd5b5061032461045a36600461211d565b610ad8565b34801561046b57600080fd5b506103687f000000000000000000000000000000000000000000000000000000000000000081565b34801561049f57600080fd5b50600a546103249060ff1681565b3480156104b957600080fd5b506103246104c8366004612149565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156104f257600080fd5b5061039160155481565b34801561050857600080fd5b5061039160115481565b34801561051e57600080fd5b50600a546103249062010000900460ff1681565b34801561053e57600080fd5b5061039161054d366004612149565b6001600160a01b031660009081526020819052604090205490565b34801561057457600080fd5b506103bf610b14565b34801561058957600080fd5b50610324610b4a565b34801561059e57600080fd5b506007546103689061010090046001600160a01b031681565b3480156105c357600080fd5b50610391600e5481565b3480156105d957600080fd5b506103bf6105e83660046121a7565b610b8c565b3480156105f957600080fd5b506103bf610c05565b34801561060e57600080fd5b5061039160165481565b34801561062457600080fd5b506005546001600160a01b0316610368565b34801561064257600080fd5b50600854610368906001600160a01b031681565b34801561066257600080fd5b5061039160175481565b34801561067857600080fd5b5061039160125481565b34801561068e57600080fd5b506103bf61069d3660046121e3565b610c42565b3480156106ae57600080fd5b506102ee610c88565b3480156106c357600080fd5b506103bf6106d23660046121fe565b610c97565b3480156106e357600080fd5b5061039160105481565b3480156106f957600080fd5b50610391601a5481565b34801561070f57600080fd5b5061039160145481565b34801561072557600080fd5b5061032461073436600461211d565b610d76565b34801561074557600080fd5b5061032461075436600461211d565b610e0f565b34801561076557600080fd5b50610324610774366004612149565b601c6020526000908152604090205460ff1681565b34801561079557600080fd5b50600a5461032490610100900460ff1681565b3480156107b457600080fd5b506103bf6107c33660046121fe565b610e1c565b3480156107d457600080fd5b506103bf6107e33660046121a7565b610ea5565b3480156107f457600080fd5b50600c546103249060ff1681565b34801561080e57600080fd5b5061032461081d366004612233565b610f19565b34801561082e57600080fd5b50610391600d5481565b34801561084457600080fd5b5061039161085336600461224c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561088a57600080fd5b5061039160095481565b3480156108a057600080fd5b50610324611070565b3480156108b557600080fd5b50610391600f5481565b3480156108cb57600080fd5b506103bf6108da366004612149565b6110ad565b3480156108eb57600080fd5b5061039160135481565b60606003805461090490612285565b80601f016020809104026020016040519081016040528092919081815260200182805461093090612285565b801561097d5780601f106109525761010080835404028352916020019161097d565b820191906000526020600020905b81548152906001019060200180831161096057829003601f168201915b5050505050905090565b6000610994338484611148565b5060015b92915050565b6005546001600160a01b031633146109d15760405162461bcd60e51b81526004016109c8906122bf565b60405180910390fd5b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a3b84848461126c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ac05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109c8565b610acd8533858403611148565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610994918590610b0f90869061230a565b611148565b6005546001600160a01b03163314610b3e5760405162461bcd60e51b81526004016109c8906122bf565b610b4860006119b5565b565b6005546000906001600160a01b03163314610b775760405162461bcd60e51b81526004016109c8906122bf565b50600a805460ff191690556063601555600190565b6005546001600160a01b03163314610bb65760405162461bcd60e51b81526004016109c8906122bf565b600e839055600f829055601081905580610bd0838561230a565b610bda919061230a565b600d8190556015541015610c005760405162461bcd60e51b81526004016109c89061231d565b505050565b6005546001600160a01b03163314610c2f5760405162461bcd60e51b81526004016109c8906122bf565b600a805462ffff00191662010100179055565b6005546001600160a01b03163314610c6c5760405162461bcd60e51b81526004016109c8906122bf565b600a8054911515620100000262ff000019909216919091179055565b60606004805461090490612285565b6005546001600160a01b03163314610cc15760405162461bcd60e51b81526004016109c8906122bf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610d685760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109c8565b610d728282611a07565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610df85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109c8565b610e053385858403611148565b5060019392505050565b600061099433848461126c565b6005546001600160a01b03163314610e465760405162461bcd60e51b81526004016109c8906122bf565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ecf5760405162461bcd60e51b81526004016109c8906122bf565b60128390556013829055601481905580610ee9838561230a565b610ef3919061230a565b60118190556015541015610c005760405162461bcd60e51b81526004016109c89061231d565b6005546000906001600160a01b03163314610f465760405162461bcd60e51b81526004016109c8906122bf565b620186a0610f5360025490565b610f5e906001612360565b610f689190612377565b821015610fd55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109c8565b6103e8610fe160025490565b610fec906005612360565b610ff69190612377565b8211156110625760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109c8565b50600981905560015b919050565b6005546000906001600160a01b0316331461109d5760405162461bcd60e51b81526004016109c8906122bf565b50600c805460ff19169055600190565b6005546001600160a01b031633146110d75760405162461bcd60e51b81526004016109c8906122bf565b6001600160a01b03811661113c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109c8565b611145816119b5565b50565b6001600160a01b0383166111aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109c8565b6001600160a01b03821661120b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109c8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112925760405162461bcd60e51b81526004016109c890612399565b6001600160a01b0382166112b85760405162461bcd60e51b81526004016109c8906123de565b6001600160a01b03831660009081526006602052604090205460ff161580156112fa57506001600160a01b03821660009081526006602052604090205460ff16155b6113365760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b60448201526064016109c8565b8060000361134a57610c0083836000611a5b565b600a5460ff1615611697576005546001600160a01b0384811691161480159061138157506005546001600160a01b03838116911614155b801561139557506001600160a01b03821615155b80156113ac57506001600160a01b03821661dead14155b80156113bb575060075460ff16155b1561169757600a54610100900460ff16611453576001600160a01b0383166000908152601b602052604090205460ff168061140e57506001600160a01b0382166000908152601b602052604090205460ff165b6114535760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109c8565b60165481111561149d5760405162461bcd60e51b815260206004820152601560248201527413585e08151c985b9cd858dd1a5bdb88131a5b5a5d605a1b60448201526064016109c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461155057601754816114f9846001600160a01b031660009081526020819052604090205490565b611503919061230a565b106115505760405162461bcd60e51b815260206004820152601c60248201527f42616c616e636520657863656564732077616c6c65742073697a65210000000060448201526064016109c8565b600c5460ff1615611697576005546001600160a01b038381169116148015906115ab57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156115e957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561169757326000908152600b602052604090205443116116845760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109c8565b326000908152600b602052604090204390555b30600090815260208190526040902054600954811080159081906116c35750600a5462010000900460ff165b80156116d2575060075460ff16155b80156116f757506001600160a01b0385166000908152601c602052604090205460ff16155b801561171c57506001600160a01b0385166000908152601b602052604090205460ff16155b801561174157506001600160a01b0384166000908152601b602052604090205460ff16155b15611766576007805460ff1916600117905561175b611bb0565b6007805460ff191690555b6007546001600160a01b0386166000908152601b602052604090205460ff918216159116806117ad57506001600160a01b0385166000908152601b602052604090205460ff165b156117b6575060005b600081156119a1576001600160a01b0386166000908152601c602052604090205460ff1680156117e857506000601154115b156118a65761180d606461180760115488611dee90919063ffffffff16565b90611e01565b9050601154601354826118209190612360565b61182a9190612377565b6019600082825461183b919061230a565b90915550506011546014546118509083612360565b61185a9190612377565b601a600082825461186b919061230a565b90915550506011546012546118809083612360565b61188a9190612377565b6018600082825461189b919061230a565b909155506119839050565b6001600160a01b0387166000908152601c602052604090205460ff1680156118d057506000600d54115b15611983576118ef6064611807600d5488611dee90919063ffffffff16565b9050600d54600f54826119029190612360565b61190c9190612377565b6019600082825461191d919061230a565b9091555050600d546010546119329083612360565b61193c9190612377565b601a600082825461194d919061230a565b9091555050600d54600e546119629083612360565b61196c9190612377565b6018600082825461197d919061230a565b90915550505b801561199457611994873083611a5b565b61199e8186612421565b94505b6119ac878787611a5b565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611a815760405162461bcd60e51b81526004016109c890612399565b6001600160a01b038216611aa75760405162461bcd60e51b81526004016109c8906123de565b6001600160a01b03831660009081526020819052604090205481811015611b1f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109c8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b5690849061230a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ba291815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601a54601854601954611bd7919061230a565b611be1919061230a565b90506000821580611bf0575081155b15611bfa57505050565b600954611c08906014612360565b831115611c2057600954611c1d906014612360565b92505b600060028360195486611c339190612360565b611c3d9190612377565b611c479190612377565b90506000611c558583611e0d565b905047611c6182611e19565b6000611c6d4783611e0d565b90506000611c8a8761180760185485611dee90919063ffffffff16565b90506000611ca788611807601a5486611dee90919063ffffffff16565b9050600081611cb68486612421565b611cc09190612421565b600060198190556018819055601a8190556008546040519293506001600160a01b031691849181818185875af1925050503d8060008114611d1d576040519150601f19603f3d011682016040523d82523d6000602084013e611d22565b606091505b50909850508615801590611d365750600081115b15611d8957611d458782611fd9565b601954604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114611dda576040519150601f19603f3d011682016040523d82523d6000602084013e611ddf565b606091505b50505050505050505050505050565b6000611dfa8284612360565b9392505050565b6000611dfa8284612377565b6000611dfa8284612421565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e4e57611e4e612434565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef0919061244a565b81600181518110611f0357611f03612434565b60200260200101906001600160a01b031690816001600160a01b031681525050611f4e307f000000000000000000000000000000000000000000000000000000000000000084611148565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611fa3908590600090869030904290600401612467565b600060405180830381600087803b158015611fbd57600080fd5b505af1158015611fd1573d6000803e3d6000fd5b505050505050565b612004307f000000000000000000000000000000000000000000000000000000000000000084611148565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561208e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120b391906124d8565b5050505050565b600060208083528351808285015260005b818110156120e7578581018301518582016040015282016120cb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461114557600080fd5b6000806040838503121561213057600080fd5b823561213b81612108565b946020939093013593505050565b60006020828403121561215b57600080fd5b8135611dfa81612108565b60008060006060848603121561217b57600080fd5b833561218681612108565b9250602084013561219681612108565b929592945050506040919091013590565b6000806000606084860312156121bc57600080fd5b505081359360208301359350604090920135919050565b8035801515811461106b57600080fd5b6000602082840312156121f557600080fd5b611dfa826121d3565b6000806040838503121561221157600080fd5b823561221c81612108565b915061222a602084016121d3565b90509250929050565b60006020828403121561224557600080fd5b5035919050565b6000806040838503121561225f57600080fd5b823561226a81612108565b9150602083013561227a81612108565b809150509250929050565b600181811c9082168061229957607f821691505b6020821081036122b957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610998576109986122f4565b60208082526023908201527f466565732063616e277420626520686967686572207468616e20746865206c696040820152621b5a5d60ea1b606082015260800190565b8082028115828204841417610998576109986122f4565b60008261239457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610998576109986122f4565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561245c57600080fd5b8151611dfa81612108565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124b75784516001600160a01b031683529383019391830191600101612492565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124ed57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220aa1476d2064ca1c9ebc8213e1c0612edbc7606b312f9fbd4ce9f71e912c6b3fc64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80638da5cb5b11610175578063b62496f5116100dc578063d85ba06311610095578063e884f2601161006f578063e884f26014610894578063f11a24d3146108a9578063f2fde38b146108bf578063f6374342146108df57600080fd5b8063d85ba06314610822578063dd62ed3e14610838578063e2f456051461087e57600080fd5b8063b62496f514610759578063bbc0c74214610789578063c0246668146107a8578063c17b5b8c146107c8578063c876d0b9146107e8578063d257b34f1461080257600080fd5b80639a7a23d61161012e5780639a7a23d6146106b75780639c3b4fdc146106d75780639fccce32146106ed578063a0d82dc514610703578063a457c2d714610719578063a9059cbb1461073957600080fd5b80638da5cb5b146106185780638ea5220f146106365780638f3fa86014610656578063921369131461066c578063924de9b71461068257806395d89b41146106a257600080fd5b80634a62bb6511610234578063715018a6116101ed5780637bce5a04116101c75780637bce5a04146105b75780638095d564146105cd5780638a8c523c146105ed5780638c0b5e221461060257600080fd5b8063715018a614610568578063751039fc1461057d57806375f0a8741461059257600080fd5b80634a62bb65146104935780634fbee193146104ad5780635b193332146104e65780636a486a8e146104fc5780636ddd17131461051257806370a082311461053257600080fd5b80631f3fed8f116102865780631f3fed8f146103d757806323b872dd146103ed57806327c8f8351461040d578063313ce56714610423578063395093511461043f57806349bd5a5e1461045f57600080fd5b806306fdde03146102d9578063095ea7b3146103045780631694505e1461033457806318160ddd146103805780631816467f1461039f5780631a8145bb146103c157600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee6108f5565b6040516102fb91906120ba565b60405180910390f35b34801561031057600080fd5b5061032461031f36600461211d565b610987565b60405190151581526020016102fb565b34801561034057600080fd5b506103687f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102fb565b34801561038c57600080fd5b506002545b6040519081526020016102fb565b3480156103ab57600080fd5b506103bf6103ba366004612149565b61099e565b005b3480156103cd57600080fd5b5061039160195481565b3480156103e357600080fd5b5061039160185481565b3480156103f957600080fd5b50610324610408366004612166565b610a2e565b34801561041957600080fd5b5061036861dead81565b34801561042f57600080fd5b50604051600981526020016102fb565b34801561044b57600080fd5b5061032461045a36600461211d565b610ad8565b34801561046b57600080fd5b506103687f0000000000000000000000004cb694e77197af4ec2bc0cc5d707e8baab799bd581565b34801561049f57600080fd5b50600a546103249060ff1681565b3480156104b957600080fd5b506103246104c8366004612149565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156104f257600080fd5b5061039160155481565b34801561050857600080fd5b5061039160115481565b34801561051e57600080fd5b50600a546103249062010000900460ff1681565b34801561053e57600080fd5b5061039161054d366004612149565b6001600160a01b031660009081526020819052604090205490565b34801561057457600080fd5b506103bf610b14565b34801561058957600080fd5b50610324610b4a565b34801561059e57600080fd5b506007546103689061010090046001600160a01b031681565b3480156105c357600080fd5b50610391600e5481565b3480156105d957600080fd5b506103bf6105e83660046121a7565b610b8c565b3480156105f957600080fd5b506103bf610c05565b34801561060e57600080fd5b5061039160165481565b34801561062457600080fd5b506005546001600160a01b0316610368565b34801561064257600080fd5b50600854610368906001600160a01b031681565b34801561066257600080fd5b5061039160175481565b34801561067857600080fd5b5061039160125481565b34801561068e57600080fd5b506103bf61069d3660046121e3565b610c42565b3480156106ae57600080fd5b506102ee610c88565b3480156106c357600080fd5b506103bf6106d23660046121fe565b610c97565b3480156106e357600080fd5b5061039160105481565b3480156106f957600080fd5b50610391601a5481565b34801561070f57600080fd5b5061039160145481565b34801561072557600080fd5b5061032461073436600461211d565b610d76565b34801561074557600080fd5b5061032461075436600461211d565b610e0f565b34801561076557600080fd5b50610324610774366004612149565b601c6020526000908152604090205460ff1681565b34801561079557600080fd5b50600a5461032490610100900460ff1681565b3480156107b457600080fd5b506103bf6107c33660046121fe565b610e1c565b3480156107d457600080fd5b506103bf6107e33660046121a7565b610ea5565b3480156107f457600080fd5b50600c546103249060ff1681565b34801561080e57600080fd5b5061032461081d366004612233565b610f19565b34801561082e57600080fd5b50610391600d5481565b34801561084457600080fd5b5061039161085336600461224c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561088a57600080fd5b5061039160095481565b3480156108a057600080fd5b50610324611070565b3480156108b557600080fd5b50610391600f5481565b3480156108cb57600080fd5b506103bf6108da366004612149565b6110ad565b3480156108eb57600080fd5b5061039160135481565b60606003805461090490612285565b80601f016020809104026020016040519081016040528092919081815260200182805461093090612285565b801561097d5780601f106109525761010080835404028352916020019161097d565b820191906000526020600020905b81548152906001019060200180831161096057829003601f168201915b5050505050905090565b6000610994338484611148565b5060015b92915050565b6005546001600160a01b031633146109d15760405162461bcd60e51b81526004016109c8906122bf565b60405180910390fd5b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000610a3b84848461126c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610ac05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016109c8565b610acd8533858403611148565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610994918590610b0f90869061230a565b611148565b6005546001600160a01b03163314610b3e5760405162461bcd60e51b81526004016109c8906122bf565b610b4860006119b5565b565b6005546000906001600160a01b03163314610b775760405162461bcd60e51b81526004016109c8906122bf565b50600a805460ff191690556063601555600190565b6005546001600160a01b03163314610bb65760405162461bcd60e51b81526004016109c8906122bf565b600e839055600f829055601081905580610bd0838561230a565b610bda919061230a565b600d8190556015541015610c005760405162461bcd60e51b81526004016109c89061231d565b505050565b6005546001600160a01b03163314610c2f5760405162461bcd60e51b81526004016109c8906122bf565b600a805462ffff00191662010100179055565b6005546001600160a01b03163314610c6c5760405162461bcd60e51b81526004016109c8906122bf565b600a8054911515620100000262ff000019909216919091179055565b60606004805461090490612285565b6005546001600160a01b03163314610cc15760405162461bcd60e51b81526004016109c8906122bf565b7f0000000000000000000000004cb694e77197af4ec2bc0cc5d707e8baab799bd56001600160a01b0316826001600160a01b031603610d685760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016109c8565b610d728282611a07565b5050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610df85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109c8565b610e053385858403611148565b5060019392505050565b600061099433848461126c565b6005546001600160a01b03163314610e465760405162461bcd60e51b81526004016109c8906122bf565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ecf5760405162461bcd60e51b81526004016109c8906122bf565b60128390556013829055601481905580610ee9838561230a565b610ef3919061230a565b60118190556015541015610c005760405162461bcd60e51b81526004016109c89061231d565b6005546000906001600160a01b03163314610f465760405162461bcd60e51b81526004016109c8906122bf565b620186a0610f5360025490565b610f5e906001612360565b610f689190612377565b821015610fd55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016109c8565b6103e8610fe160025490565b610fec906005612360565b610ff69190612377565b8211156110625760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016109c8565b50600981905560015b919050565b6005546000906001600160a01b0316331461109d5760405162461bcd60e51b81526004016109c8906122bf565b50600c805460ff19169055600190565b6005546001600160a01b031633146110d75760405162461bcd60e51b81526004016109c8906122bf565b6001600160a01b03811661113c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109c8565b611145816119b5565b50565b6001600160a01b0383166111aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109c8565b6001600160a01b03821661120b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109c8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166112925760405162461bcd60e51b81526004016109c890612399565b6001600160a01b0382166112b85760405162461bcd60e51b81526004016109c8906123de565b6001600160a01b03831660009081526006602052604090205460ff161580156112fa57506001600160a01b03821660009081526006602052604090205460ff16155b6113365760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b60448201526064016109c8565b8060000361134a57610c0083836000611a5b565b600a5460ff1615611697576005546001600160a01b0384811691161480159061138157506005546001600160a01b03838116911614155b801561139557506001600160a01b03821615155b80156113ac57506001600160a01b03821661dead14155b80156113bb575060075460ff16155b1561169757600a54610100900460ff16611453576001600160a01b0383166000908152601b602052604090205460ff168061140e57506001600160a01b0382166000908152601b602052604090205460ff165b6114535760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016109c8565b60165481111561149d5760405162461bcd60e51b815260206004820152601560248201527413585e08151c985b9cd858dd1a5bdb88131a5b5a5d605a1b60448201526064016109c8565b7f0000000000000000000000004cb694e77197af4ec2bc0cc5d707e8baab799bd56001600160a01b0316826001600160a01b03161461155057601754816114f9846001600160a01b031660009081526020819052604090205490565b611503919061230a565b106115505760405162461bcd60e51b815260206004820152601c60248201527f42616c616e636520657863656564732077616c6c65742073697a65210000000060448201526064016109c8565b600c5460ff1615611697576005546001600160a01b038381169116148015906115ab57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156115e957507f0000000000000000000000004cb694e77197af4ec2bc0cc5d707e8baab799bd56001600160a01b0316826001600160a01b031614155b1561169757326000908152600b602052604090205443116116845760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016109c8565b326000908152600b602052604090204390555b30600090815260208190526040902054600954811080159081906116c35750600a5462010000900460ff165b80156116d2575060075460ff16155b80156116f757506001600160a01b0385166000908152601c602052604090205460ff16155b801561171c57506001600160a01b0385166000908152601b602052604090205460ff16155b801561174157506001600160a01b0384166000908152601b602052604090205460ff16155b15611766576007805460ff1916600117905561175b611bb0565b6007805460ff191690555b6007546001600160a01b0386166000908152601b602052604090205460ff918216159116806117ad57506001600160a01b0385166000908152601b602052604090205460ff165b156117b6575060005b600081156119a1576001600160a01b0386166000908152601c602052604090205460ff1680156117e857506000601154115b156118a65761180d606461180760115488611dee90919063ffffffff16565b90611e01565b9050601154601354826118209190612360565b61182a9190612377565b6019600082825461183b919061230a565b90915550506011546014546118509083612360565b61185a9190612377565b601a600082825461186b919061230a565b90915550506011546012546118809083612360565b61188a9190612377565b6018600082825461189b919061230a565b909155506119839050565b6001600160a01b0387166000908152601c602052604090205460ff1680156118d057506000600d54115b15611983576118ef6064611807600d5488611dee90919063ffffffff16565b9050600d54600f54826119029190612360565b61190c9190612377565b6019600082825461191d919061230a565b9091555050600d546010546119329083612360565b61193c9190612377565b601a600082825461194d919061230a565b9091555050600d54600e546119629083612360565b61196c9190612377565b6018600082825461197d919061230a565b90915550505b801561199457611994873083611a5b565b61199e8186612421565b94505b6119ac878787611a5b565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601c6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611a815760405162461bcd60e51b81526004016109c890612399565b6001600160a01b038216611aa75760405162461bcd60e51b81526004016109c8906123de565b6001600160a01b03831660009081526020819052604090205481811015611b1f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109c8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b5690849061230a565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ba291815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601a54601854601954611bd7919061230a565b611be1919061230a565b90506000821580611bf0575081155b15611bfa57505050565b600954611c08906014612360565b831115611c2057600954611c1d906014612360565b92505b600060028360195486611c339190612360565b611c3d9190612377565b611c479190612377565b90506000611c558583611e0d565b905047611c6182611e19565b6000611c6d4783611e0d565b90506000611c8a8761180760185485611dee90919063ffffffff16565b90506000611ca788611807601a5486611dee90919063ffffffff16565b9050600081611cb68486612421565b611cc09190612421565b600060198190556018819055601a8190556008546040519293506001600160a01b031691849181818185875af1925050503d8060008114611d1d576040519150601f19603f3d011682016040523d82523d6000602084013e611d22565b606091505b50909850508615801590611d365750600081115b15611d8957611d458782611fd9565b601954604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516101009091046001600160a01b0316904790600081818185875af1925050503d8060008114611dda576040519150601f19603f3d011682016040523d82523d6000602084013e611ddf565b606091505b50505050505050505050505050565b6000611dfa8284612360565b9392505050565b6000611dfa8284612377565b6000611dfa8284612421565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e4e57611e4e612434565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef0919061244a565b81600181518110611f0357611f03612434565b60200260200101906001600160a01b031690816001600160a01b031681525050611f4e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611148565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611fa3908590600090869030904290600401612467565b600060405180830381600087803b158015611fbd57600080fd5b505af1158015611fd1573d6000803e3d6000fd5b505050505050565b612004307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611148565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561208e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120b391906124d8565b5050505050565b600060208083528351808285015260005b818110156120e7578581018301518582016040015282016120cb565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461114557600080fd5b6000806040838503121561213057600080fd5b823561213b81612108565b946020939093013593505050565b60006020828403121561215b57600080fd5b8135611dfa81612108565b60008060006060848603121561217b57600080fd5b833561218681612108565b9250602084013561219681612108565b929592945050506040919091013590565b6000806000606084860312156121bc57600080fd5b505081359360208301359350604090920135919050565b8035801515811461106b57600080fd5b6000602082840312156121f557600080fd5b611dfa826121d3565b6000806040838503121561221157600080fd5b823561221c81612108565b915061222a602084016121d3565b90509250929050565b60006020828403121561224557600080fd5b5035919050565b6000806040838503121561225f57600080fd5b823561226a81612108565b9150602083013561227a81612108565b809150509250929050565b600181811c9082168061229957607f821691505b6020821081036122b957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610998576109986122f4565b60208082526023908201527f466565732063616e277420626520686967686572207468616e20746865206c696040820152621b5a5d60ea1b606082015260800190565b8082028115828204841417610998576109986122f4565b60008261239457634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610998576109986122f4565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561245c57600080fd5b8151611dfa81612108565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124b75784516001600160a01b031683529383019391830191600101612492565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156124ed57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220aa1476d2064ca1c9ebc8213e1c0612edbc7606b312f9fbd4ce9f71e912c6b3fc64736f6c63430008110033

Deployed Bytecode Sourcemap

17131:14954:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4084:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4997:169;;;;;;;;;;-1:-1:-1;4997:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4997:169:0;1023:187:1;17207:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1406:32:1;;;1388:51;;1376:2;1361:18;17207:51:0;1215:230:1;4404:108:0;;;;;;;;;;-1:-1:-1;4492:12:0;;4404:108;;;1596:25:1;;;1584:2;1569:18;4404:108:0;1450:177:1;24663:157:0;;;;;;;;;;-1:-1:-1;24663:157:0;;;;;:::i;:::-;;:::i;:::-;;18335:33;;;;;;;;;;;;;;;;18295;;;;;;;;;;;;;;;;5174:492;;;;;;;;;;-1:-1:-1;5174:492:0;;;;;:::i;:::-;;:::i;17310:53::-;;;;;;;;;;;;17356:6;17310:53;;4304:92;;;;;;;;;;-1:-1:-1;4304:92:0;;4387:1;2695:36:1;;2683:2;2668:18;4304:92:0;2553:184:1;5674:215:0;;;;;;;;;;-1:-1:-1;5674:215:0;;;;;:::i;:::-;;:::i;17265:38::-;;;;;;;;;;;;;;;17565:33;;;;;;;;;;-1:-1:-1;17565:33:0;;;;;;;;24828:126;;;;;;;;;;-1:-1:-1;24828:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24918:28:0;24894:4;24918:28;;;:19;:28;;;;;;;;;24828:126;18195:23;;;;;;;;;;;;;;;;18052:28;;;;;;;;;;;;;;;;17645:31;;;;;;;;;;-1:-1:-1;17645:31:0;;;;;;;;;;;4520:127;;;;;;;;;;-1:-1:-1;4520:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4621:18:0;4594:7;4621:18;;;;;;;;;;;;4520:127;1783:103;;;;;;;;;;;;;:::i;21755:145::-;;;;;;;;;;;;;:::i;17453:30::-;;;;;;;;;;-1:-1:-1;17453:30:0;;;;;;;-1:-1:-1;;;;;17453:30:0;;;17945;;;;;;;;;;;;;;;;22867:415;;;;;;;;;;-1:-1:-1;22867:415:0;;;;;:::i;:::-;;:::i;21591:112::-;;;;;;;;;;;;;:::i;18225:26::-;;;;;;;;;;;;;;;;1560:87;;;;;;;;;;-1:-1:-1;1633:6:0;;-1:-1:-1;;;;;1633:6:0;1560:87;;17490:24;;;;;;;;;;-1:-1:-1;17490:24:0;;;;-1:-1:-1;;;;;17490:24:0;;;18258:28;;;;;;;;;;;;;;;;18087:31;;;;;;;;;;;;;;;;22759:100;;;;;;;;;;-1:-1:-1;22759:100:0;;;;;:::i;:::-;;:::i;4192:104::-;;;;;;;;;;;;;:::i;23912:304::-;;;;;;;;;;-1:-1:-1;23912:304:0;;;;;:::i;:::-;;:::i;18019:24::-;;;;;;;;;;;;;;;;18375:27;;;;;;;;;;;;;;;;18163:25;;;;;;;;;;;;;;;;5897:413;;;;;;;;;;-1:-1:-1;5897:413:0;;;;;:::i;:::-;;:::i;4655:175::-;;;;;;;;;;-1:-1:-1;4655:175:0;;;;;:::i;:::-;;:::i;18700:57::-;;;;;;;;;;-1:-1:-1;18700:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17605:33;;;;;;;;;;-1:-1:-1;17605:33:0;;;;;;;;;;;23722:182;;;;;;;;;;-1:-1:-1;23722:182:0;;;;;:::i;:::-;;:::i;23290:424::-;;;;;;;;;;-1:-1:-1;23290:424:0;;;;;:::i;:::-;;:::i;17863:39::-;;;;;;;;;;-1:-1:-1;17863:39:0;;;;;;;;22166:497;;;;;;;;;;-1:-1:-1;22166:497:0;;;;;:::i;:::-;;:::i;17911:27::-;;;;;;;;;;;;;;;;4838:151;;;;;;;;;;-1:-1:-1;4838:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4954:18:0;;;4927:7;4954:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4838:151;17523:33;;;;;;;;;;;;;;;;21961:135;;;;;;;;;;;;;:::i;17982:30::-;;;;;;;;;;;;;;;;1894:201;;;;;;;;;;-1:-1:-1;1894:201:0;;;;;:::i;:::-;;:::i;18125:31::-;;;;;;;;;;;;;;;;4084:100;4138:13;4171:5;4164:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4084:100;:::o;4997:169::-;5080:4;5097:39;485:10;5120:7;5129:6;5097:8;:39::i;:::-;-1:-1:-1;5154:4:0;4997:169;;;;;:::o;24663:157::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;;;;;;;;;24770:9:::1;::::0;24742:38:::1;::::0;-1:-1:-1;;;;;24770:9:0;;::::1;::::0;24742:38;::::1;::::0;::::1;::::0;24770:9:::1;::::0;24742:38:::1;24791:9;:21:::0;;-1:-1:-1;;;;;;24791:21:0::1;-1:-1:-1::0;;;;;24791:21:0;;;::::1;::::0;;;::::1;::::0;;24663:157::o;5174:492::-;5314:4;5331:36;5341:6;5349:9;5360:6;5331:9;:36::i;:::-;-1:-1:-1;;;;;5407:19:0;;5380:24;5407:19;;;:11;:19;;;;;;;;485:10;5407:33;;;;;;;;5459:26;;;;5451:79;;;;-1:-1:-1;;;5451:79:0;;5259:2:1;5451:79:0;;;5241:21:1;5298:2;5278:18;;;5271:30;5337:34;5317:18;;;5310:62;-1:-1:-1;;;5388:18:1;;;5381:38;5436:19;;5451:79:0;5057:404:1;5451:79:0;5566:57;5575:6;485:10;5616:6;5597:16;:25;5566:8;:57::i;:::-;-1:-1:-1;5654:4:0;;5174:492;-1:-1:-1;;;;5174:492:0:o;5674:215::-;485:10;5762:4;5811:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5811:34:0;;;;;;;;;;5762:4;;5779:80;;5802:7;;5811:47;;5848:10;;5811:47;:::i;:::-;5779:8;:80::i;1783:103::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;1848:30:::1;1875:1;1848:18;:30::i;:::-;1783:103::o:0;21755:145::-;1633:6;;21807:4;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;-1:-1:-1;21824:14:0::1;:22:::0;;-1:-1:-1;;21824:22:0::1;::::0;;21868:2:::1;21857:8;:13:::0;21824:22;21755:145;:::o;22867:415::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;23017:15:::1;:31:::0;;;23059:15:::1;:31:::0;;;23101:9:::1;:19:::0;;;23113:7;23146:33:::1;23077:13:::0;23035;23146:33:::1;:::i;:::-;:45;;;;:::i;:::-;23131:12;:60:::0;;;23226:8:::1;::::0;-1:-1:-1;23210:24:0::1;23202:72;;;;-1:-1:-1::0;;;23202:72:0::1;;;;;;;:::i;:::-;22867:415:::0;;;:::o;21591:112::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;21646:13:::1;:20:::0;;-1:-1:-1;;21677:18:0;;;;;21591:112::o;22759:100::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;22830:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22830:21:0;;::::1;::::0;;;::::1;::::0;;22759:100::o;4192:104::-;4248:13;4281:7;4274:14;;;;;:::i;23912:304::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;24056:13:::1;-1:-1:-1::0;;;;;24048:21:0::1;:4;-1:-1:-1::0;;;;;24048:21:0::1;::::0;24026:128:::1;;;::::0;-1:-1:-1;;;24026:128:0;;6334:2:1;24026:128:0::1;::::0;::::1;6316:21:1::0;6373:2;6353:18;;;6346:30;6412:34;6392:18;;;6385:62;6483:27;6463:18;;;6456:55;6528:19;;24026:128:0::1;6132:421:1::0;24026:128:0::1;24167:41;24196:4;24202:5;24167:28;:41::i;:::-;23912:304:::0;;:::o;5897:413::-;485:10;5990:4;6034:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6034:34:0;;;;;;;;;;6087:35;;;;6079:85;;;;-1:-1:-1;;;6079:85:0;;6760:2:1;6079:85:0;;;6742:21:1;6799:2;6779:18;;;6772:30;6838:34;6818:18;;;6811:62;-1:-1:-1;;;6889:18:1;;;6882:35;6934:19;;6079:85:0;6558:401:1;6079:85:0;6200:67;485:10;6223:7;6251:15;6232:16;:34;6200:8;:67::i;:::-;-1:-1:-1;6298:4:0;;5897:413;-1:-1:-1;;;5897:413:0:o;4655:175::-;4741:4;4758:42;485:10;4782:9;4793:6;4758:9;:42::i;23722:182::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23807:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23807:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23862:34;;1163:41:1;;;23862:34:0::1;::::0;1136:18:1;23862:34:0::1;;;;;;;23722:182:::0;;:::o;23290:424::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;23441:16:::1;:32:::0;;;23484:16:::1;:32:::0;;;23527:10:::1;:20:::0;;;23540:7;23574:35:::1;23503:13:::0;23460;23574:35:::1;:::i;:::-;:48;;;;:::i;:::-;23558:13;:64:::0;;;23658:8:::1;::::0;-1:-1:-1;23641:25:0::1;23633:73;;;;-1:-1:-1::0;;;23633:73:0::1;;;;;;;:::i;22166:497::-:0;1633:6;;22274:4;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;22353:6:::1;22332:13;4492:12:::0;;;4404:108;22332:13:::1;:17;::::0;22348:1:::1;22332:17;:::i;:::-;22331:28;;;;:::i;:::-;22318:9;:41;;22296:144;;;::::0;-1:-1:-1;;;22296:144:0;;7561:2:1;22296:144:0::1;::::0;::::1;7543:21:1::0;7600:2;7580:18;;;7573:30;7639:34;7619:18;;;7612:62;-1:-1:-1;;;7690:18:1;;;7683:51;7751:19;;22296:144:0::1;7359:417:1::0;22296:144:0::1;22508:4;22487:13;4492:12:::0;;;4404:108;22487:13:::1;:17;::::0;22503:1:::1;22487:17;:::i;:::-;22486:26;;;;:::i;:::-;22473:9;:39;;22451:141;;;::::0;-1:-1:-1;;;22451:141:0;;7983:2:1;22451:141:0::1;::::0;::::1;7965:21:1::0;8022:2;8002:18;;;7995:30;8061:34;8041:18;;;8034:62;-1:-1:-1;;;8112:18:1;;;8105:50;8172:19;;22451:141:0::1;7781:416:1::0;22451:141:0::1;-1:-1:-1::0;22603:18:0::1;:30:::0;;;22651:4:::1;1766:1;22166:497:::0;;;:::o;21961:135::-;1633:6;;22021:4;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;-1:-1:-1;22038:20:0::1;:28:::0;;-1:-1:-1;;22038:28:0::1;::::0;;;21961:135;:::o;1894:201::-;1633:6;;-1:-1:-1;;;;;1633:6:0;485:10;1695:23;1687:68;;;;-1:-1:-1;;;1687:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1983:22:0;::::1;1975:73;;;::::0;-1:-1:-1;;;1975:73:0;;8404:2:1;1975:73:0::1;::::0;::::1;8386:21:1::0;8443:2;8423:18;;;8416:30;8482:34;8462:18;;;8455:62;-1:-1:-1;;;8533:18:1;;;8526:36;8579:19;;1975:73:0::1;8202:402:1::0;1975:73:0::1;2059:28;2078:8;2059:18;:28::i;:::-;1894:201:::0;:::o;8075:380::-;-1:-1:-1;;;;;8211:19:0;;8203:68;;;;-1:-1:-1;;;8203:68:0;;8811:2:1;8203:68:0;;;8793:21:1;8850:2;8830:18;;;8823:30;8889:34;8869:18;;;8862:62;-1:-1:-1;;;8940:18:1;;;8933:34;8984:19;;8203:68:0;8609:400:1;8203:68:0;-1:-1:-1;;;;;8290:21:0;;8282:68;;;;-1:-1:-1;;;8282:68:0;;9216:2:1;8282:68:0;;;9198:21:1;9255:2;9235:18;;;9228:30;9294:34;9274:18;;;9267:62;-1:-1:-1;;;9345:18:1;;;9338:32;9387:19;;8282:68:0;9014:398:1;8282:68:0;-1:-1:-1;;;;;8363:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8415:32;;1596:25:1;;;8415:32:0;;1569:18:1;8415:32:0;;;;;;;8075:380;;;:::o;25012:3837::-;-1:-1:-1;;;;;25144:18:0;;25136:68;;;;-1:-1:-1;;;25136:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25223:16:0;;25215:64;;;;-1:-1:-1;;;25215:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25299:16:0;;;;;;:10;:16;;;;;;;;25298:17;:36;;;;-1:-1:-1;;;;;;25320:14:0;;;;;;:10;:14;;;;;;;;25319:15;25298:36;25290:62;;;;-1:-1:-1;;;25290:62:0;;10429:2:1;25290:62:0;;;10411:21:1;10468:2;10448:18;;;10441:30;-1:-1:-1;;;10487:18:1;;;10480:43;10540:18;;25290:62:0;10227:337:1;25290:62:0;25369:6;25379:1;25369:11;25365:93;;25397:28;25413:4;25419:2;25423:1;25397:15;:28::i;25365:93::-;25474:14;;;;25470:1534;;;1633:6;;-1:-1:-1;;;;;25527:15:0;;;1633:6;;25527:15;;;;:49;;-1:-1:-1;1633:6:0;;-1:-1:-1;;;;;25563:13:0;;;1633:6;;25563:13;;25527:49;:86;;;;-1:-1:-1;;;;;;25597:16:0;;;;25527:86;:128;;;;-1:-1:-1;;;;;;25634:21:0;;25648:6;25634:21;;25527:128;:158;;;;-1:-1:-1;25677:8:0;;;;25676:9;25527:158;25505:1488;;;25725:13;;;;;;;25720:223;;-1:-1:-1;;;;;25797:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25826:23:0;;;;;;:19;:23;;;;;;;;25797:52;25763:160;;;;-1:-1:-1;;;25763:160:0;;10771:2:1;25763:160:0;;;10753:21:1;10810:2;10790:18;;;10783:30;-1:-1:-1;;;10829:18:1;;;10822:52;10891:18;;25763:160:0;10569:346:1;25763:160:0;25981:11;;25971:6;:21;;25963:55;;;;-1:-1:-1;;;25963:55:0;;11122:2:1;25963:55:0;;;11104:21:1;11161:2;11141:18;;;11134:30;-1:-1:-1;;;11180:18:1;;;11173:51;11241:18;;25963:55:0;10920:345:1;25963:55:0;26048:13;-1:-1:-1;;;;;26042:19:0;:2;-1:-1:-1;;;;;26042:19:0;;26039:146;;26119:13;;26110:6;26094:13;26104:2;-1:-1:-1;;;;;4621:18:0;4594:7;4621:18;;;;;;;;;;;;4520:127;26094:13;:22;;;;:::i;:::-;:38;26086:79;;;;-1:-1:-1;;;26086:79:0;;11472:2:1;26086:79:0;;;11454:21:1;11511:2;11491:18;;;11484:30;11550;11530:18;;;11523:58;11598:18;;26086:79:0;11270:352:1;26086:79:0;26341:20;;;;26337:641;;;1633:6;;-1:-1:-1;;;;;26416:13:0;;;1633:6;;26416:13;;;;:72;;;26472:15;-1:-1:-1;;;;;26458:30:0;:2;-1:-1:-1;;;;;26458:30:0;;;26416:72;:129;;;;;26531:13;-1:-1:-1;;;;;26517:28:0;:2;-1:-1:-1;;;;;26517:28:0;;;26416:129;26386:573;;;26663:9;26634:39;;;;:28;:39;;;;;;26709:12;-1:-1:-1;26596:258:0;;;;-1:-1:-1;;;26596:258:0;;11829:2:1;26596:258:0;;;11811:21:1;11868:2;11848:18;;;11841:30;11907:34;11887:18;;;11880:62;11978:34;11958:18;;;11951:62;-1:-1:-1;;;12029:19:1;;;12022:40;12079:19;;26596:258:0;11627:477:1;26596:258:0;26910:9;26881:39;;;;:28;:39;;;;;26923:12;26881:54;;26386:573;27065:4;27016:28;4621:18;;;;;;;;;;;27123;;27099:42;;;;;;;27172:35;;-1:-1:-1;27196:11:0;;;;;;;27172:35;:61;;;;-1:-1:-1;27225:8:0;;;;27224:9;27172:61;:110;;;;-1:-1:-1;;;;;;27251:31:0;;;;;;:25;:31;;;;;;;;27250:32;27172:110;:153;;;;-1:-1:-1;;;;;;27300:25:0;;;;;;:19;:25;;;;;;;;27299:26;27172:153;:194;;;;-1:-1:-1;;;;;;27343:23:0;;;;;;:19;:23;;;;;;;;27342:24;27172:194;27154:326;;;27393:8;:15;;-1:-1:-1;;27393:15:0;27404:4;27393:15;;;27425:10;:8;:10::i;:::-;27452:8;:16;;-1:-1:-1;;27452:16:0;;;27154:326;27508:8;;-1:-1:-1;;;;;27618:25:0;;27492:12;27618:25;;;:19;:25;;;;;;27508:8;;;;27507:9;;27618:25;;:52;;-1:-1:-1;;;;;;27647:23:0;;;;;;:19;:23;;;;;;;;27618:52;27614:100;;;-1:-1:-1;27697:5:0;27614:100;27726:12;27831:7;27827:969;;;-1:-1:-1;;;;;27883:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27932:1;27916:13;;:17;27883:50;27879:768;;;27961:34;27991:3;27961:25;27972:13;;27961:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;27954:41;;28064:13;;28044:16;;28037:4;:23;;;;:::i;:::-;28036:41;;;;:::i;:::-;28014:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28134:13:0;;28120:10;;28113:17;;:4;:17;:::i;:::-;28112:35;;;;:::i;:::-;28096:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;28216:13:0;;28196:16;;28189:23;;:4;:23;:::i;:::-;28188:41;;;;:::i;:::-;28166:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;27879:768:0;;-1:-1:-1;27879:768:0;;-1:-1:-1;;;;;28291:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28341:1;28326:12;;:16;28291:51;28287:360;;;28370:33;28399:3;28370:24;28381:12;;28370:6;:10;;:24;;;;:::i;:33::-;28363:40;;28471:12;;28452:15;;28445:4;:22;;;;:::i;:::-;28444:39;;;;:::i;:::-;28422:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28539:12:0;;28526:9;;28519:16;;:4;:16;:::i;:::-;28518:33;;;;:::i;:::-;28502:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;28619:12:0;;28600:15;;28593:22;;:4;:22;:::i;:::-;28592:39;;;;:::i;:::-;28570:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28287:360:0;28667:8;;28663:91;;28696:42;28712:4;28726;28733;28696:15;:42::i;:::-;28770:14;28780:4;28770:14;;:::i;:::-;;;27827:969;28808:33;28824:4;28830:2;28834:6;28808:15;:33::i;:::-;25125:3724;;;;25012:3837;;;:::o;2103:191::-;2196:6;;;-1:-1:-1;;;;;2213:17:0;;;-1:-1:-1;;;;;;2213:17:0;;;;;;;2246:40;;2196:6;;;2213:17;2196:6;;2246:40;;2177:16;;2246:40;2166:128;2103:191;:::o;24224:188::-;-1:-1:-1;;;;;24307:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;24307:39:0;;;;;;;;;;24364:40;;24307:39;;:31;24364:40;;;24224:188;;:::o;6318:743::-;-1:-1:-1;;;;;6458:20:0;;6450:70;;;;-1:-1:-1;;;6450:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6539:23:0;;6531:71;;;;-1:-1:-1;;;6531:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6709:17:0;;6685:21;6709:17;;;;;;;;;;;6745:23;;;;6737:74;;;;-1:-1:-1;;;6737:74:0;;12444:2:1;6737:74:0;;;12426:21:1;12483:2;12463:18;;;12456:30;12522:34;12502:18;;;12495:62;-1:-1:-1;;;12573:18:1;;;12566:36;12619:19;;6737:74:0;12242:402:1;6737:74:0;-1:-1:-1;;;;;6847:17:0;;;:9;:17;;;;;;;;;;;6867:22;;;6847:42;;6911:20;;;;;;;;:30;;6883:6;;6847:9;6911:30;;6883:6;;6911:30;:::i;:::-;;;;;;;;6976:9;-1:-1:-1;;;;;6959:35:0;6968:6;-1:-1:-1;;;;;6959:35:0;;6987:6;6959:35;;;;1596:25:1;;1584:2;1569:18;;1450:177;6959:35:0;;;;;;;;6439:622;6318:743;;;:::o;30326:1756::-;30409:4;30365:23;4621:18;;;;;;;;;;;30365:50;;30426:25;30522:12;;30488:18;;30454;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;30426:108;-1:-1:-1;30545:12:0;30574:20;;;:46;;-1:-1:-1;30598:22:0;;30574:46;30570:85;;;30637:7;;;30326:1756::o;30570:85::-;30689:18;;:23;;30710:2;30689:23;:::i;:::-;30671:15;:41;30667:115;;;30747:18;;:23;;30768:2;30747:23;:::i;:::-;30729:41;;30667:115;30843:23;30956:1;30923:17;30888:18;;30870:15;:36;;;;:::i;:::-;30869:71;;;;:::i;:::-;:88;;;;:::i;:::-;30843:114;-1:-1:-1;30968:26:0;30997:36;:15;30843:114;30997:19;:36::i;:::-;30968:65;-1:-1:-1;31074:21:0;31108:36;30968:65;31108:16;:36::i;:::-;31157:18;31178:44;:21;31204:17;31178:25;:44::i;:::-;31157:65;;31235:23;31261:81;31314:17;31261:34;31276:18;;31261:10;:14;;:34;;;;:::i;:81::-;31235:107;;31353:17;31373:51;31406:17;31373:28;31388:12;;31373:10;:14;;:28;;;;:::i;:51::-;31353:71;-1:-1:-1;31437:23:0;31353:71;31463:28;31476:15;31463:10;:28;:::i;:::-;:40;;;;:::i;:::-;31537:1;31516:18;:22;;;31549:18;:22;;;31582:12;:16;;;31633:9;;31625:45;;31437:66;;-1:-1:-1;;;;;;31633:9:0;;31656;;31625:45;31537:1;31625:45;31656:9;31633;31625:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31611:59:0;;-1:-1:-1;;31687:19:0;;;;;:42;;;31728:1;31710:15;:19;31687:42;31683:278;;;31746:46;31759:15;31776;31746:12;:46::i;:::-;31916:18;;31812:137;;;13061:25:1;;;13117:2;13102:18;;13095:34;;;13145:18;;;13138:34;;;;31812:137:0;;;;;;13049:2:1;31812:137:0;;;31683:278;31995:15;;31987:87;;31995:15;;;;-1:-1:-1;;;;;31995:15:0;;32038:21;;31987:87;;;;32038:21;31995:15;31987:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;30326:1756:0:o;10602:98::-;10660:7;10687:5;10691:1;10687;:5;:::i;:::-;10680:12;10602:98;-1:-1:-1;;;10602:98:0:o;10708:::-;10766:7;10793:5;10797:1;10793;:5;:::i;10496:98::-;10554:7;10581:5;10585:1;10581;:5;:::i;29204:589::-;29354:16;;;29368:1;29354:16;;;;;;;;29330:21;;29354:16;;;;;;;;;;-1:-1:-1;29354:16:0;29330:40;;29399:4;29381;29386:1;29381:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29381:23:0;;;-1:-1:-1;;;;;29381:23:0;;;;;29425:15;-1:-1:-1;;;;;29425:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29415:4;29420:1;29415:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29415:32:0;;;-1:-1:-1;;;;;29415:32:0;;;;;29460:62;29477:4;29492:15;29510:11;29460:8;:62::i;:::-;29561:224;;-1:-1:-1;;;29561:224:0;;-1:-1:-1;;;;;29561:15:0;:66;;;;:224;;29642:11;;29668:1;;29712:4;;29739;;29759:15;;29561:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29259:534;29204:589;:::o;29801:517::-;29949:62;29966:4;29981:15;29999:11;29949:8;:62::i;:::-;30054:256;;-1:-1:-1;;;30054:256:0;;30126:4;30054:256;;;15029:34:1;15079:18;;;15072:34;;;30172:1:0;15122:18:1;;;15115:34;;;15165:18;;;15158:34;17356:6:0;15208:19:1;;;15201:44;30284:15:0;15261:19:1;;;15254:35;30054:15:0;-1:-1:-1;;;;;30054:31:0;;;;30093:9;;14963:19:1;;30054:256:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29801:517;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:247::-;1691:6;1744:2;1732:9;1723:7;1719:23;1715:32;1712:52;;;1760:1;1757;1750:12;1712:52;1799:9;1786:23;1818:31;1843:5;1818:31;:::i;1884:456::-;1961:6;1969;1977;2030:2;2018:9;2009:7;2005:23;2001:32;1998:52;;;2046:1;2043;2036:12;1998:52;2085:9;2072:23;2104:31;2129:5;2104:31;:::i;:::-;2154:5;-1:-1:-1;2211:2:1;2196:18;;2183:32;2224:33;2183:32;2224:33;:::i;:::-;1884:456;;2276:7;;-1:-1:-1;;;2330:2:1;2315:18;;;;2302:32;;1884:456::o;2742:316::-;2819:6;2827;2835;2888:2;2876:9;2867:7;2863:23;2859:32;2856:52;;;2904:1;2901;2894:12;2856:52;-1:-1:-1;;2927:23:1;;;2997:2;2982:18;;2969:32;;-1:-1:-1;3048:2:1;3033:18;;;3020:32;;2742:316;-1:-1:-1;2742:316:1:o;3063:160::-;3128:20;;3184:13;;3177:21;3167:32;;3157:60;;3213:1;3210;3203:12;3228:180;3284:6;3337:2;3325:9;3316:7;3312:23;3308:32;3305:52;;;3353:1;3350;3343:12;3305:52;3376:26;3392:9;3376:26;:::i;3413:315::-;3478:6;3486;3539:2;3527:9;3518:7;3514:23;3510:32;3507:52;;;3555:1;3552;3545:12;3507:52;3594:9;3581:23;3613:31;3638:5;3613:31;:::i;:::-;3663:5;-1:-1:-1;3687:35:1;3718:2;3703:18;;3687:35;:::i;:::-;3677:45;;3413:315;;;;;:::o;3733:180::-;3792:6;3845:2;3833:9;3824:7;3820:23;3816:32;3813:52;;;3861:1;3858;3851:12;3813:52;-1:-1:-1;3884:23:1;;3733:180;-1:-1:-1;3733:180:1:o;3918:388::-;3986:6;3994;4047:2;4035:9;4026:7;4022:23;4018:32;4015:52;;;4063:1;4060;4053:12;4015:52;4102:9;4089:23;4121:31;4146:5;4121:31;:::i;:::-;4171:5;-1:-1:-1;4228:2:1;4213:18;;4200:32;4241:33;4200:32;4241:33;:::i;:::-;4293:7;4283:17;;;3918:388;;;;;:::o;4311:380::-;4390:1;4386:12;;;;4433;;;4454:61;;4508:4;4500:6;4496:17;4486:27;;4454:61;4561:2;4553:6;4550:14;4530:18;4527:38;4524:161;;4607:10;4602:3;4598:20;4595:1;4588:31;4642:4;4639:1;4632:15;4670:4;4667:1;4660:15;4524:161;;4311:380;;;:::o;4696:356::-;4898:2;4880:21;;;4917:18;;;4910:30;4976:34;4971:2;4956:18;;4949:62;5043:2;5028:18;;4696:356::o;5466:127::-;5527:10;5522:3;5518:20;5515:1;5508:31;5558:4;5555:1;5548:15;5582:4;5579:1;5572:15;5598:125;5663:9;;;5684:10;;;5681:36;;;5697:18;;:::i;5728:399::-;5930:2;5912:21;;;5969:2;5949:18;;;5942:30;6008:34;6003:2;5988:18;;5981:62;-1:-1:-1;;;6074:2:1;6059:18;;6052:33;6117:3;6102:19;;5728:399::o;6964:168::-;7037:9;;;7068;;7085:15;;;7079:22;;7065:37;7055:71;;7106:18;;:::i;7137:217::-;7177:1;7203;7193:132;;7247:10;7242:3;7238:20;7235:1;7228:31;7282:4;7279:1;7272:15;7310:4;7307:1;7300:15;7193:132;-1:-1:-1;7339:9:1;;7137:217::o;9417:401::-;9619:2;9601:21;;;9658:2;9638:18;;;9631:30;9697:34;9692:2;9677:18;;9670:62;-1:-1:-1;;;9763:2:1;9748:18;;9741:35;9808:3;9793:19;;9417:401::o;9823:399::-;10025:2;10007:21;;;10064:2;10044:18;;;10037:30;10103:34;10098:2;10083:18;;10076:62;-1:-1:-1;;;10169:2:1;10154:18;;10147:33;10212:3;10197:19;;9823:399::o;12109:128::-;12176:9;;;12197:11;;;12194:37;;;12211:18;;:::i;13315:127::-;13376:10;13371:3;13367:20;13364:1;13357:31;13407:4;13404:1;13397:15;13431:4;13428:1;13421:15;13447:251;13517:6;13570:2;13558:9;13549:7;13545:23;13541:32;13538:52;;;13586:1;13583;13576:12;13538:52;13618:9;13612:16;13637:31;13662:5;13637:31;:::i;13703:980::-;13965:4;14013:3;14002:9;13998:19;14044:6;14033:9;14026:25;14070:2;14108:6;14103:2;14092:9;14088:18;14081:34;14151:3;14146:2;14135:9;14131:18;14124:31;14175:6;14210;14204:13;14241:6;14233;14226:22;14279:3;14268:9;14264:19;14257:26;;14318:2;14310:6;14306:15;14292:29;;14339:1;14349:195;14363:6;14360:1;14357:13;14349:195;;;14428:13;;-1:-1:-1;;;;;14424:39:1;14412:52;;14519:15;;;;14484:12;;;;14460:1;14378:9;14349:195;;;-1:-1:-1;;;;;;;14600:32:1;;;;14595:2;14580:18;;14573:60;-1:-1:-1;;;14664:3:1;14649:19;14642:35;14561:3;13703:980;-1:-1:-1;;;13703:980:1:o;15300:306::-;15388:6;15396;15404;15457:2;15445:9;15436:7;15432:23;15428:32;15425:52;;;15473:1;15470;15463:12;15425:52;15502:9;15496:16;15486:26;;15552:2;15541:9;15537:18;15531:25;15521:35;;15596:2;15585:9;15581:18;15575:25;15565:35;;15300:306;;;;;:::o

Swarm Source

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

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