ETH Price: $3,121.43 (+1.83%)

Token

Love Of Pepe (LVPEPE)
 

Overview

Max Total Supply

1,000,000,000 LVPEPE

Holders

78

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,939,052.855464565475437848 LVPEPE

Value
$0.00
0x8bd3b6a4b6d103d0e6003098c4e0255191ba6b60
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:
LoveOfPepe

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-20
*/

// www.loveofpepe.com
// https://t.me/LoveOfPepe


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    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 transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            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;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address payable public marketingWallet;
    address payable public developmentWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    // Anti-bot
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Love Of Pepe", "LVPEPE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

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

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

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransaction = (totalSupply * 2) / 100; //
        maxWallet = (totalSupply * 2) / 100; // 2%
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05%

        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 10;

        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 20;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;

        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevelopmentFee;

        marketingWallet = payable(0xcd261c50058B1548a44d133591b7Cf46dE50964D);
        developmentWallet = payable(0x336b645D4eb02836472d40Fb2be94de139eE2213);

        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(developmentWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(developmentWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "trading live!");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function updateLimits() external onlyOwner returns (bool) {
        maxTransaction = (totalSupply() * 8) / 100;
        maxWallet = (totalSupply() * 8) / 100;
        return true;
    }

    // disable Transfer delay 
    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;
    }

    function updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10 ** 18);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10 ** 18);
    }

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

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee;
        require(buyTotalFees <= 1);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellDevelopmentFee;
        require(sellTotalFees <= 2);
    }

    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 isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

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

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

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

                // buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                // sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                } else if (_isExcludedmaxTransaction[from]) {
                    super.transfer(from, to, amount);
                    return;
                }
            }
        }

        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 (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment +=
                    (fees * sellDevelopmentFee) /
                    sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

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

    function blacklistSnipers(
        address[] calldata blockees,
        bool shouldBlock
    ) external onlyOwner {
        for (uint256 i = 0; i < blockees.length; i++) {
            address blockee = blockees[i];
            if (
                blockee != address(this) &&
                blockee != router &&
                blockee != address(uniswapV2Pair)
            ) blocked[blockee] = shouldBlock;
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        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(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment;
        bool success;
        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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

        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 ethForMark = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;

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

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");
        (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":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"blacklistSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","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":"developmentWallet","outputs":[{"internalType":"address payable","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":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","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":"tokensForDevelopment","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":"_developmentFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","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"}]

60c0604052600b805462ffffff19166001908117909155600d805460ff191690911790553480156200003057600080fd5b506040518060400160405280600c81526020016b4c6f7665204f66205065706560a01b815250604051806040016040528060068152602001654c565045504560d01b8152508160039081620000869190620007b9565b506004620000958282620007b9565b505050620000b2620000ac6200045d60201b60201c565b62000461565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000d4816001620004b3565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200011f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000145919062000885565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000885565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d919062000885565b6001600160a01b031660a081905262000248906001620004b3565b60a051620002589060016200052d565b6b033b2e3c9fd0803ce8000000606462000274826002620008cd565b620002809190620008ed565b600855606462000292826002620008cd565b6200029e9190620008ed565b600a55612710620002b1826005620008cd565b620002bd9190620008ed565b600955600060118190556012819055600a60138190558190600282601483620002e7838062000910565b620002f3919062000910565b6010556015839055601682905560178190558062000312838562000910565b6200031e919062000910565b601455600680546001600160a01b031990811673cd261c50058b1548a44d133591b7cf46de50964d179091556007805490911673336b645d4eb02836472d40fb2be94de139ee221317905562000388620003806005546001600160a01b031690565b600162000581565b600654620003a1906001600160a01b0316600162000581565b600754620003ba906001600160a01b0316600162000581565b620003c730600162000581565b620003d661dead600162000581565b620003f5620003ed6005546001600160a01b031690565b6001620004b3565b6006546200040e906001600160a01b03166001620004b3565b60075462000427906001600160a01b03166001620004b3565b62000434306001620004b3565b6200044361dead6001620004b3565b6200044f33886200062b565b505050505050505062000926565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005025760405162461bcd60e51b815260206004820181905260248201526000805160206200346183398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005cc5760405162461bcd60e51b81526020600482018190526024820152600080516020620034618339815191526044820152606401620004f9565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006835760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004f9565b806002600082825462000697919062000910565b90915550506001600160a01b03821660009081526020819052604081208054839290620006c690849062000910565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200074057607f821691505b6020821081036200076157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071057600081815260208120601f850160051c81016020861015620007905750805b601f850160051c820191505b81811015620007b1578281556001016200079c565b505050505050565b81516001600160401b03811115620007d557620007d562000715565b620007ed81620007e684546200072b565b8462000767565b602080601f8311600181146200082557600084156200080c5750858301515b600019600386901b1c1916600185901b178555620007b1565b600085815260208120601f198616915b82811015620008565788860151825594840194600190910190840162000835565b5085821015620008755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200089857600080fd5b81516001600160a01b0381168114620008b057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008e757620008e7620008b7565b92915050565b6000826200090b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008e757620008e7620008b7565b60805160a051612ad66200098b6000396000818161054301528181610ea101528181611113015261186d0152600081816104040152818161182f015281816123b10152818161246a015281816124a601528181612520015261257c0152612ad66000f3fe6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c876d0b9116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b146109d5578063f6374342146109f5578063f887ea4014610a0b578063f8b45b0514610a3357600080fd5b8063e884f26014610994578063ef8700e5146109a9578063f11a24d3146109bf57600080fd5b8063dd62ed3e116100d1578063dd62ed3e146108d8578063e1bc33941461091e578063e2f456051461094e578063e59621951461096457600080fd5b8063c876d0b914610888578063d257b34f146108a2578063d85ba063146108c257600080fd5b8063b204141111610164578063c02466681161013e578063c024666814610812578063c04a541414610832578063c17b5b8c14610852578063c3f70b521461087257600080fd5b8063b2041411146107ad578063b62496f5146107c3578063bbc0c742146107f357600080fd5b806395d89b41116101a057806395d89b41146107385780639a7a23d61461074d578063a457c2d71461076d578063a9059cbb1461078d57600080fd5b80638da5cb5b146106e45780639213691314610702578063924de9b71461071857600080fd5b806339509351116102a057806370a082311161023e57806375f0a8741161021857806375f0a874146106795780637bce5a04146106995780638095d564146106af5780638a8c523c146106cf57600080fd5b806370a082311461060e578063715018a6146106445780637571336a1461065957600080fd5b80634fbee1931161027a5780634fbee1931461057f5780636a486a8e146105b85780636af1972d146105ce5780636ddd1713146105ee57600080fd5b8063395093511461051157806349bd5a5e146105315780634a62bb651461056557600080fd5b806318a94cf11161030d5780631f3fed8f116102e75780631f3fed8f146104a957806323b872dd146104bf57806327c8f835146104df578063313ce567146104f557600080fd5b806318a94cf11461045d5780631a8145bb146104735780631c499ab01461048957600080fd5b80630517d13d1461036057806306fdde0314610382578063095ea7b3146103ad5780630c08e255146103dd5780631694505e146103f257806318160ddd1461043e57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b3660046125fa565b610a49565b005b34801561038e57600080fd5b50610397610b29565b6040516103a49190612613565b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004612676565b610bbb565b60405190151581526020016103a4565b3480156103e957600080fd5b506103cd610bd2565b3480156103fe57600080fd5b506104267f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103a4565b34801561044a57600080fd5b506002545b6040519081526020016103a4565b34801561046957600080fd5b5061044f60175481565b34801561047f57600080fd5b5061044f60195481565b34801561049557600080fd5b506103806104a43660046125fa565b610c4b565b3480156104b557600080fd5b5061044f60185481565b3480156104cb57600080fd5b506103cd6104da3660046126a2565b610d1c565b3480156104eb57600080fd5b5061042661dead81565b34801561050157600080fd5b50604051601281526020016103a4565b34801561051d57600080fd5b506103cd61052c366004612676565b610dc6565b34801561053d57600080fd5b506104267f000000000000000000000000000000000000000000000000000000000000000081565b34801561057157600080fd5b50600b546103cd9060ff1681565b34801561058b57600080fd5b506103cd61059a3660046126e3565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156105c457600080fd5b5061044f60145481565b3480156105da57600080fd5b506103806105e9366004612710565b610e02565b3480156105fa57600080fd5b50600b546103cd9062010000900460ff1681565b34801561061a57600080fd5b5061044f6106293660046126e3565b6001600160a01b031660009081526020819052604090205490565b34801561065057600080fd5b50610380610f19565b34801561066557600080fd5b50610380610674366004612794565b610f4f565b34801561068557600080fd5b50600654610426906001600160a01b031681565b3480156106a557600080fd5b5061044f60115481565b3480156106bb57600080fd5b506103806106ca3660046127c9565b610fa4565b3480156106db57600080fd5b50610380611009565b3480156106f057600080fd5b506005546001600160a01b0316610426565b34801561070e57600080fd5b5061044f60155481565b34801561072457600080fd5b506103806107333660046127f5565b611092565b34801561074457600080fd5b506103976110d8565b34801561075957600080fd5b50610380610768366004612794565b6110e7565b34801561077957600080fd5b506103cd610788366004612676565b6111c6565b34801561079957600080fd5b506103cd6107a8366004612676565b61125f565b3480156107b957600080fd5b5061044f60135481565b3480156107cf57600080fd5b506103cd6107de3660046126e3565b601d6020526000908152604090205460ff1681565b3480156107ff57600080fd5b50600b546103cd90610100900460ff1681565b34801561081e57600080fd5b5061038061082d366004612794565b61126c565b34801561083e57600080fd5b50600754610426906001600160a01b031681565b34801561085e57600080fd5b5061038061086d3660046127c9565b6112f5565b34801561087e57600080fd5b5061044f60085481565b34801561089457600080fd5b50600d546103cd9060ff1681565b3480156108ae57600080fd5b506103cd6108bd3660046125fa565b611355565b3480156108ce57600080fd5b5061044f60105481565b3480156108e457600080fd5b5061044f6108f3366004612810565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092a57600080fd5b506103cd6109393660046126e3565b601c6020526000908152604090205460ff1681565b34801561095a57600080fd5b5061044f60095481565b34801561097057600080fd5b506103cd61097f3660046126e3565b600f6020526000908152604090205460ff1681565b3480156109a057600080fd5b506103cd6114ac565b3480156109b557600080fd5b5061044f601a5481565b3480156109cb57600080fd5b5061044f60125481565b3480156109e157600080fd5b506103806109f03660046126e3565b6114e9565b348015610a0157600080fd5b5061044f60165481565b348015610a1757600080fd5b50610426737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a3f57600080fd5b5061044f600a5481565b6005546001600160a01b03163314610a7c5760405162461bcd60e51b8152600401610a7390612849565b60405180910390fd5b670de0b6b3a76400006103e8610a9160025490565b610a9c906001612894565b610aa691906128ab565b610ab091906128ab565b811015610b115760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610a73565b610b2381670de0b6b3a7640000612894565b60085550565b606060038054610b38906128cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b64906128cd565b8015610bb15780601f10610b8657610100808354040283529160200191610bb1565b820191906000526020600020905b815481529060010190602001808311610b9457829003601f168201915b5050505050905090565b6000610bc8338484611584565b5060015b92915050565b6005546000906001600160a01b03163314610bff5760405162461bcd60e51b8152600401610a7390612849565b6064610c0a60025490565b610c15906008612894565b610c1f91906128ab565b6008556064610c2d60025490565b610c38906008612894565b610c4291906128ab565b600a5550600190565b6005546001600160a01b03163314610c755760405162461bcd60e51b8152600401610a7390612849565b670de0b6b3a76400006103e8610c8a60025490565b610c95906005612894565b610c9f91906128ab565b610ca991906128ab565b811015610d045760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a73565b610d1681670de0b6b3a7640000612894565b600a5550565b6000610d298484846116a8565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610dae5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a73565b610dbb8533858403611584565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bc8918590610dfd908690612907565b611584565b6005546001600160a01b03163314610e2c5760405162461bcd60e51b8152600401610a7390612849565b60005b82811015610f13576000848483818110610e4b57610e4b61291a565b9050602002016020810190610e6091906126e3565b90506001600160a01b0381163014801590610e9857506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b8015610ed657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15610f00576001600160a01b0381166000908152600f60205260409020805460ff19168415151790555b5080610f0b81612930565b915050610e2f565b50505050565b6005546001600160a01b03163314610f435760405162461bcd60e51b8152600401610a7390612849565b610f4d6000611ec3565b565b6005546001600160a01b03163314610f795760405162461bcd60e51b8152600401610a7390612849565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fce5760405162461bcd60e51b8152600401610a7390612849565b60118390556012829055601381905580610fe88385612907565b610ff29190612907565b60108190556001101561100457600080fd5b505050565b6005546001600160a01b031633146110335760405162461bcd60e51b8152600401610a7390612849565b600b54610100900460ff161561107b5760405162461bcd60e51b815260206004820152600d60248201526c74726164696e67206c6976652160981b6044820152606401610a73565b600b805443600e5562ffff00191662010100179055565b6005546001600160a01b031633146110bc5760405162461bcd60e51b8152600401610a7390612849565b600b8054911515620100000262ff000019909216919091179055565b606060048054610b38906128cd565b6005546001600160a01b031633146111115760405162461bcd60e51b8152600401610a7390612849565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111b85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a73565b6111c28282611f15565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112485760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a73565b6112553385858403611584565b5060019392505050565b6000610bc83384846116a8565b6005546001600160a01b031633146112965760405162461bcd60e51b8152600401610a7390612849565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461131f5760405162461bcd60e51b8152600401610a7390612849565b601583905560168290556017819055806113398385612907565b6113439190612907565b60148190556002101561100457600080fd5b6005546000906001600160a01b031633146113825760405162461bcd60e51b8152600401610a7390612849565b620186a061138f60025490565b61139a906001612894565b6113a491906128ab565b8210156114115760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a73565b6103e861141d60025490565b611428906005612894565b61143291906128ab565b82111561149e5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a73565b50600981905560015b919050565b6005546000906001600160a01b031633146114d95760405162461bcd60e51b8152600401610a7390612849565b50600d805460ff19169055600190565b6005546001600160a01b031633146115135760405162461bcd60e51b8152600401610a7390612849565b6001600160a01b0381166115785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a73565b61158181611ec3565b50565b6001600160a01b0383166115e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a73565b6001600160a01b0382166116475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a73565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116ce5760405162461bcd60e51b8152600401610a7390612949565b6001600160a01b0382166116f45760405162461bcd60e51b8152600401610a739061298e565b6001600160a01b0383166000908152600f602052604090205460ff16156117465760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610a73565b8060000361175a5761100483836000611f69565b600b5460ff1615611b8e57600554600160a01b900460ff16611b8e57600b54610100900460ff16611809576001600160a01b0383166000908152601b602052604090205460ff16806117c457506001600160a01b0382166000908152601b602052604090205460ff165b6118095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a73565b600d5460ff1615611950576005546001600160a01b0383811691161480159061186457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156118a257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561195057326000908152600c6020526040902054431161193d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a73565b326000908152600c602052604090204390555b6001600160a01b0383166000908152601d602052604090205460ff16801561199157506001600160a01b0382166000908152601c602052604090205460ff16155b15611a7057600854811115611a005760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610a73565b600a546001600160a01b0383166000908152602081905260409020545b611a279083612907565b1115611a6b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a73565b611b8e565b6001600160a01b0382166000908152601d602052604090205460ff168015611ab157506001600160a01b0383166000908152601c602052604090205460ff16155b15611b2157600854811115611a6b5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610a73565b6001600160a01b0382166000908152601c602052604090205460ff16611b6257600a546001600160a01b038316600090815260208190526040902054611a1d565b6001600160a01b0383166000908152601c602052604090205460ff1615611b8e576110048383836120bd565b3060009081526020819052604090205460095481108015908190611bba5750600b5462010000900460ff165b8015611bd05750600554600160a01b900460ff16155b8015611bf557506001600160a01b0385166000908152601d602052604090205460ff16155b8015611c1a57506001600160a01b0385166000908152601b602052604090205460ff16155b8015611c3f57506001600160a01b0384166000908152601b602052604090205460ff16155b15611c6d576005805460ff60a01b1916600160a01b179055611c5f6120f6565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601b602052604090205460ff600160a01b909204821615911680611cbb57506001600160a01b0385166000908152601b602052604090205460ff165b15611cc4575060005b60008115611eaf576001600160a01b0386166000908152601d602052604090205460ff168015611cf657506000601454115b15611db457611d1b6064611d156014548861232f90919063ffffffff16565b90612342565b905060145460165482611d2e9190612894565b611d3891906128ab565b60196000828254611d499190612907565b9091555050601454601754611d5e9083612894565b611d6891906128ab565b601a6000828254611d799190612907565b9091555050601454601554611d8e9083612894565b611d9891906128ab565b60186000828254611da99190612907565b90915550611e919050565b6001600160a01b0387166000908152601d602052604090205460ff168015611dde57506000601054115b15611e9157611dfd6064611d156010548861232f90919063ffffffff16565b905060105460125482611e109190612894565b611e1a91906128ab565b60196000828254611e2b9190612907565b9091555050601054601354611e409083612894565b611e4a91906128ab565b601a6000828254611e5b9190612907565b9091555050601054601154611e709083612894565b611e7a91906128ab565b60186000828254611e8b9190612907565b90915550505b8015611ea257611ea2873083611f69565b611eac81866129d1565b94505b611eba878787611f69565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611f8f5760405162461bcd60e51b8152600401610a7390612949565b6001600160a01b038216611fb55760405162461bcd60e51b8152600401610a739061298e565b6001600160a01b0383166000908152602081905260409020548181101561202d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a73565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612064908490612907565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120b091815260200190565b60405180910390a3610f13565b6001600160a01b038084166000908152602081905260408082208054858103909155928516825281208054849290612064908490612907565b3060009081526020819052604081205490506000601a5460185460195461211d9190612907565b6121279190612907565b90506000821580612136575081155b1561214057505050565b60095461214e906010612894565b83111561216657600954612163906010612894565b92505b6000600283601954866121799190612894565b61218391906128ab565b61218d91906128ab565b9050600061219b858361234e565b9050476121a78261235a565b60006121b3478361234e565b905060006121d087611d156018548561232f90919063ffffffff16565b905060006121ed88611d15601a548661232f90919063ffffffff16565b90506000816121fc84866129d1565b61220691906129d1565b600060198190556018819055601a55905086158015906122265750600081115b1561227957612235878261251a565b601954604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116908390600081818185875af1925050503d80600081146122c6576040519150601f19603f3d011682016040523d82523d6000602084013e6122cb565b606091505b50506006546040519199506001600160a01b0316904790600081818185875af1925050503d806000811461231b576040519150601f19603f3d011682016040523d82523d6000602084013e612320565b606091505b50505050505050505050505050565b600061233b8284612894565b9392505050565b600061233b82846128ab565b600061233b82846129d1565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061238f5761238f61291a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561240d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243191906129e4565b816001815181106124445761244461291a565b60200260200101906001600160a01b031690816001600160a01b03168152505061248f307f000000000000000000000000000000000000000000000000000000000000000084611584565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906124e4908590600090869030904290600401612a01565b600060405180830381600087803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b505050505050565b612545307f000000000000000000000000000000000000000000000000000000000000000084611584565b60405163f305d71960e01b8152306004820152602481018390526000604482018190526064820181905260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156125ce573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125f39190612a72565b5050505050565b60006020828403121561260c57600080fd5b5035919050565b600060208083528351808285015260005b8181101561264057858101830151858201604001528201612624565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461158157600080fd5b6000806040838503121561268957600080fd5b823561269481612661565b946020939093013593505050565b6000806000606084860312156126b757600080fd5b83356126c281612661565b925060208401356126d281612661565b929592945050506040919091013590565b6000602082840312156126f557600080fd5b813561233b81612661565b803580151581146114a757600080fd5b60008060006040848603121561272557600080fd5b833567ffffffffffffffff8082111561273d57600080fd5b818601915086601f83011261275157600080fd5b81358181111561276057600080fd5b8760208260051b850101111561277557600080fd5b60209283019550935061278b9186019050612700565b90509250925092565b600080604083850312156127a757600080fd5b82356127b281612661565b91506127c060208401612700565b90509250929050565b6000806000606084860312156127de57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561280757600080fd5b61233b82612700565b6000806040838503121561282357600080fd5b823561282e81612661565b9150602083013561283e81612661565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bcc57610bcc61287e565b6000826128c857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806128e157607f821691505b60208210810361290157634e487b7160e01b600052602260045260246000fd5b50919050565b80820180821115610bcc57610bcc61287e565b634e487b7160e01b600052603260045260246000fd5b6000600182016129425761294261287e565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bcc57610bcc61287e565b6000602082840312156129f657600080fd5b815161233b81612661565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a515784516001600160a01b031683529383019391830191600101612a2c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a8757600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122021ad5e3c8cbc41241c08f97376769bcfa24538194c7e4021775cb92cfd809e6964736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c876d0b9116100f7578063e884f26011610095578063f2fde38b1161006f578063f2fde38b146109d5578063f6374342146109f5578063f887ea4014610a0b578063f8b45b0514610a3357600080fd5b8063e884f26014610994578063ef8700e5146109a9578063f11a24d3146109bf57600080fd5b8063dd62ed3e116100d1578063dd62ed3e146108d8578063e1bc33941461091e578063e2f456051461094e578063e59621951461096457600080fd5b8063c876d0b914610888578063d257b34f146108a2578063d85ba063146108c257600080fd5b8063b204141111610164578063c02466681161013e578063c024666814610812578063c04a541414610832578063c17b5b8c14610852578063c3f70b521461087257600080fd5b8063b2041411146107ad578063b62496f5146107c3578063bbc0c742146107f357600080fd5b806395d89b41116101a057806395d89b41146107385780639a7a23d61461074d578063a457c2d71461076d578063a9059cbb1461078d57600080fd5b80638da5cb5b146106e45780639213691314610702578063924de9b71461071857600080fd5b806339509351116102a057806370a082311161023e57806375f0a8741161021857806375f0a874146106795780637bce5a04146106995780638095d564146106af5780638a8c523c146106cf57600080fd5b806370a082311461060e578063715018a6146106445780637571336a1461065957600080fd5b80634fbee1931161027a5780634fbee1931461057f5780636a486a8e146105b85780636af1972d146105ce5780636ddd1713146105ee57600080fd5b8063395093511461051157806349bd5a5e146105315780634a62bb651461056557600080fd5b806318a94cf11161030d5780631f3fed8f116102e75780631f3fed8f146104a957806323b872dd146104bf57806327c8f835146104df578063313ce567146104f557600080fd5b806318a94cf11461045d5780631a8145bb146104735780631c499ab01461048957600080fd5b80630517d13d1461036057806306fdde0314610382578063095ea7b3146103ad5780630c08e255146103dd5780631694505e146103f257806318160ddd1461043e57600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b5061038061037b3660046125fa565b610a49565b005b34801561038e57600080fd5b50610397610b29565b6040516103a49190612613565b60405180910390f35b3480156103b957600080fd5b506103cd6103c8366004612676565b610bbb565b60405190151581526020016103a4565b3480156103e957600080fd5b506103cd610bd2565b3480156103fe57600080fd5b506104267f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103a4565b34801561044a57600080fd5b506002545b6040519081526020016103a4565b34801561046957600080fd5b5061044f60175481565b34801561047f57600080fd5b5061044f60195481565b34801561049557600080fd5b506103806104a43660046125fa565b610c4b565b3480156104b557600080fd5b5061044f60185481565b3480156104cb57600080fd5b506103cd6104da3660046126a2565b610d1c565b3480156104eb57600080fd5b5061042661dead81565b34801561050157600080fd5b50604051601281526020016103a4565b34801561051d57600080fd5b506103cd61052c366004612676565b610dc6565b34801561053d57600080fd5b506104267f00000000000000000000000024ce9e7848bdd7b2e89876c5bb9aa1cbdd8537cb81565b34801561057157600080fd5b50600b546103cd9060ff1681565b34801561058b57600080fd5b506103cd61059a3660046126e3565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156105c457600080fd5b5061044f60145481565b3480156105da57600080fd5b506103806105e9366004612710565b610e02565b3480156105fa57600080fd5b50600b546103cd9062010000900460ff1681565b34801561061a57600080fd5b5061044f6106293660046126e3565b6001600160a01b031660009081526020819052604090205490565b34801561065057600080fd5b50610380610f19565b34801561066557600080fd5b50610380610674366004612794565b610f4f565b34801561068557600080fd5b50600654610426906001600160a01b031681565b3480156106a557600080fd5b5061044f60115481565b3480156106bb57600080fd5b506103806106ca3660046127c9565b610fa4565b3480156106db57600080fd5b50610380611009565b3480156106f057600080fd5b506005546001600160a01b0316610426565b34801561070e57600080fd5b5061044f60155481565b34801561072457600080fd5b506103806107333660046127f5565b611092565b34801561074457600080fd5b506103976110d8565b34801561075957600080fd5b50610380610768366004612794565b6110e7565b34801561077957600080fd5b506103cd610788366004612676565b6111c6565b34801561079957600080fd5b506103cd6107a8366004612676565b61125f565b3480156107b957600080fd5b5061044f60135481565b3480156107cf57600080fd5b506103cd6107de3660046126e3565b601d6020526000908152604090205460ff1681565b3480156107ff57600080fd5b50600b546103cd90610100900460ff1681565b34801561081e57600080fd5b5061038061082d366004612794565b61126c565b34801561083e57600080fd5b50600754610426906001600160a01b031681565b34801561085e57600080fd5b5061038061086d3660046127c9565b6112f5565b34801561087e57600080fd5b5061044f60085481565b34801561089457600080fd5b50600d546103cd9060ff1681565b3480156108ae57600080fd5b506103cd6108bd3660046125fa565b611355565b3480156108ce57600080fd5b5061044f60105481565b3480156108e457600080fd5b5061044f6108f3366004612810565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561092a57600080fd5b506103cd6109393660046126e3565b601c6020526000908152604090205460ff1681565b34801561095a57600080fd5b5061044f60095481565b34801561097057600080fd5b506103cd61097f3660046126e3565b600f6020526000908152604090205460ff1681565b3480156109a057600080fd5b506103cd6114ac565b3480156109b557600080fd5b5061044f601a5481565b3480156109cb57600080fd5b5061044f60125481565b3480156109e157600080fd5b506103806109f03660046126e3565b6114e9565b348015610a0157600080fd5b5061044f60165481565b348015610a1757600080fd5b50610426737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a3f57600080fd5b5061044f600a5481565b6005546001600160a01b03163314610a7c5760405162461bcd60e51b8152600401610a7390612849565b60405180910390fd5b670de0b6b3a76400006103e8610a9160025490565b610a9c906001612894565b610aa691906128ab565b610ab091906128ab565b811015610b115760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610a73565b610b2381670de0b6b3a7640000612894565b60085550565b606060038054610b38906128cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b64906128cd565b8015610bb15780601f10610b8657610100808354040283529160200191610bb1565b820191906000526020600020905b815481529060010190602001808311610b9457829003601f168201915b5050505050905090565b6000610bc8338484611584565b5060015b92915050565b6005546000906001600160a01b03163314610bff5760405162461bcd60e51b8152600401610a7390612849565b6064610c0a60025490565b610c15906008612894565b610c1f91906128ab565b6008556064610c2d60025490565b610c38906008612894565b610c4291906128ab565b600a5550600190565b6005546001600160a01b03163314610c755760405162461bcd60e51b8152600401610a7390612849565b670de0b6b3a76400006103e8610c8a60025490565b610c95906005612894565b610c9f91906128ab565b610ca991906128ab565b811015610d045760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a73565b610d1681670de0b6b3a7640000612894565b600a5550565b6000610d298484846116a8565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610dae5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a73565b610dbb8533858403611584565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bc8918590610dfd908690612907565b611584565b6005546001600160a01b03163314610e2c5760405162461bcd60e51b8152600401610a7390612849565b60005b82811015610f13576000848483818110610e4b57610e4b61291a565b9050602002016020810190610e6091906126e3565b90506001600160a01b0381163014801590610e9857506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b8015610ed657507f00000000000000000000000024ce9e7848bdd7b2e89876c5bb9aa1cbdd8537cb6001600160a01b0316816001600160a01b031614155b15610f00576001600160a01b0381166000908152600f60205260409020805460ff19168415151790555b5080610f0b81612930565b915050610e2f565b50505050565b6005546001600160a01b03163314610f435760405162461bcd60e51b8152600401610a7390612849565b610f4d6000611ec3565b565b6005546001600160a01b03163314610f795760405162461bcd60e51b8152600401610a7390612849565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610fce5760405162461bcd60e51b8152600401610a7390612849565b60118390556012829055601381905580610fe88385612907565b610ff29190612907565b60108190556001101561100457600080fd5b505050565b6005546001600160a01b031633146110335760405162461bcd60e51b8152600401610a7390612849565b600b54610100900460ff161561107b5760405162461bcd60e51b815260206004820152600d60248201526c74726164696e67206c6976652160981b6044820152606401610a73565b600b805443600e5562ffff00191662010100179055565b6005546001600160a01b031633146110bc5760405162461bcd60e51b8152600401610a7390612849565b600b8054911515620100000262ff000019909216919091179055565b606060048054610b38906128cd565b6005546001600160a01b031633146111115760405162461bcd60e51b8152600401610a7390612849565b7f00000000000000000000000024ce9e7848bdd7b2e89876c5bb9aa1cbdd8537cb6001600160a01b0316826001600160a01b0316036111b85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a73565b6111c28282611f15565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112485760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a73565b6112553385858403611584565b5060019392505050565b6000610bc83384846116a8565b6005546001600160a01b031633146112965760405162461bcd60e51b8152600401610a7390612849565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461131f5760405162461bcd60e51b8152600401610a7390612849565b601583905560168290556017819055806113398385612907565b6113439190612907565b60148190556002101561100457600080fd5b6005546000906001600160a01b031633146113825760405162461bcd60e51b8152600401610a7390612849565b620186a061138f60025490565b61139a906001612894565b6113a491906128ab565b8210156114115760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a73565b6103e861141d60025490565b611428906005612894565b61143291906128ab565b82111561149e5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a73565b50600981905560015b919050565b6005546000906001600160a01b031633146114d95760405162461bcd60e51b8152600401610a7390612849565b50600d805460ff19169055600190565b6005546001600160a01b031633146115135760405162461bcd60e51b8152600401610a7390612849565b6001600160a01b0381166115785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a73565b61158181611ec3565b50565b6001600160a01b0383166115e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a73565b6001600160a01b0382166116475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a73565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116ce5760405162461bcd60e51b8152600401610a7390612949565b6001600160a01b0382166116f45760405162461bcd60e51b8152600401610a739061298e565b6001600160a01b0383166000908152600f602052604090205460ff16156117465760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610a73565b8060000361175a5761100483836000611f69565b600b5460ff1615611b8e57600554600160a01b900460ff16611b8e57600b54610100900460ff16611809576001600160a01b0383166000908152601b602052604090205460ff16806117c457506001600160a01b0382166000908152601b602052604090205460ff165b6118095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a73565b600d5460ff1615611950576005546001600160a01b0383811691161480159061186457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156118a257507f00000000000000000000000024ce9e7848bdd7b2e89876c5bb9aa1cbdd8537cb6001600160a01b0316826001600160a01b031614155b1561195057326000908152600c6020526040902054431161193d5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a73565b326000908152600c602052604090204390555b6001600160a01b0383166000908152601d602052604090205460ff16801561199157506001600160a01b0382166000908152601c602052604090205460ff16155b15611a7057600854811115611a005760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610a73565b600a546001600160a01b0383166000908152602081905260409020545b611a279083612907565b1115611a6b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a73565b611b8e565b6001600160a01b0382166000908152601d602052604090205460ff168015611ab157506001600160a01b0383166000908152601c602052604090205460ff16155b15611b2157600854811115611a6b5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610a73565b6001600160a01b0382166000908152601c602052604090205460ff16611b6257600a546001600160a01b038316600090815260208190526040902054611a1d565b6001600160a01b0383166000908152601c602052604090205460ff1615611b8e576110048383836120bd565b3060009081526020819052604090205460095481108015908190611bba5750600b5462010000900460ff165b8015611bd05750600554600160a01b900460ff16155b8015611bf557506001600160a01b0385166000908152601d602052604090205460ff16155b8015611c1a57506001600160a01b0385166000908152601b602052604090205460ff16155b8015611c3f57506001600160a01b0384166000908152601b602052604090205460ff16155b15611c6d576005805460ff60a01b1916600160a01b179055611c5f6120f6565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601b602052604090205460ff600160a01b909204821615911680611cbb57506001600160a01b0385166000908152601b602052604090205460ff165b15611cc4575060005b60008115611eaf576001600160a01b0386166000908152601d602052604090205460ff168015611cf657506000601454115b15611db457611d1b6064611d156014548861232f90919063ffffffff16565b90612342565b905060145460165482611d2e9190612894565b611d3891906128ab565b60196000828254611d499190612907565b9091555050601454601754611d5e9083612894565b611d6891906128ab565b601a6000828254611d799190612907565b9091555050601454601554611d8e9083612894565b611d9891906128ab565b60186000828254611da99190612907565b90915550611e919050565b6001600160a01b0387166000908152601d602052604090205460ff168015611dde57506000601054115b15611e9157611dfd6064611d156010548861232f90919063ffffffff16565b905060105460125482611e109190612894565b611e1a91906128ab565b60196000828254611e2b9190612907565b9091555050601054601354611e409083612894565b611e4a91906128ab565b601a6000828254611e5b9190612907565b9091555050601054601154611e709083612894565b611e7a91906128ab565b60186000828254611e8b9190612907565b90915550505b8015611ea257611ea2873083611f69565b611eac81866129d1565b94505b611eba878787611f69565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611f8f5760405162461bcd60e51b8152600401610a7390612949565b6001600160a01b038216611fb55760405162461bcd60e51b8152600401610a739061298e565b6001600160a01b0383166000908152602081905260409020548181101561202d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a73565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612064908490612907565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120b091815260200190565b60405180910390a3610f13565b6001600160a01b038084166000908152602081905260408082208054858103909155928516825281208054849290612064908490612907565b3060009081526020819052604081205490506000601a5460185460195461211d9190612907565b6121279190612907565b90506000821580612136575081155b1561214057505050565b60095461214e906010612894565b83111561216657600954612163906010612894565b92505b6000600283601954866121799190612894565b61218391906128ab565b61218d91906128ab565b9050600061219b858361234e565b9050476121a78261235a565b60006121b3478361234e565b905060006121d087611d156018548561232f90919063ffffffff16565b905060006121ed88611d15601a548661232f90919063ffffffff16565b90506000816121fc84866129d1565b61220691906129d1565b600060198190556018819055601a55905086158015906122265750600081115b1561227957612235878261251a565b601954604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6007546040516001600160a01b03909116908390600081818185875af1925050503d80600081146122c6576040519150601f19603f3d011682016040523d82523d6000602084013e6122cb565b606091505b50506006546040519199506001600160a01b0316904790600081818185875af1925050503d806000811461231b576040519150601f19603f3d011682016040523d82523d6000602084013e612320565b606091505b50505050505050505050505050565b600061233b8284612894565b9392505050565b600061233b82846128ab565b600061233b82846129d1565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061238f5761238f61291a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561240d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243191906129e4565b816001815181106124445761244461291a565b60200260200101906001600160a01b031690816001600160a01b03168152505061248f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611584565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906124e4908590600090869030904290600401612a01565b600060405180830381600087803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b505050505050565b612545307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611584565b60405163f305d71960e01b8152306004820152602481018390526000604482018190526064820181905260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156125ce573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125f39190612a72565b5050505050565b60006020828403121561260c57600080fd5b5035919050565b600060208083528351808285015260005b8181101561264057858101830151858201604001528201612624565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461158157600080fd5b6000806040838503121561268957600080fd5b823561269481612661565b946020939093013593505050565b6000806000606084860312156126b757600080fd5b83356126c281612661565b925060208401356126d281612661565b929592945050506040919091013590565b6000602082840312156126f557600080fd5b813561233b81612661565b803580151581146114a757600080fd5b60008060006040848603121561272557600080fd5b833567ffffffffffffffff8082111561273d57600080fd5b818601915086601f83011261275157600080fd5b81358181111561276057600080fd5b8760208260051b850101111561277557600080fd5b60209283019550935061278b9186019050612700565b90509250925092565b600080604083850312156127a757600080fd5b82356127b281612661565b91506127c060208401612700565b90509250929050565b6000806000606084860312156127de57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561280757600080fd5b61233b82612700565b6000806040838503121561282357600080fd5b823561282e81612661565b9150602083013561283e81612661565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bcc57610bcc61287e565b6000826128c857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806128e157607f821691505b60208210810361290157634e487b7160e01b600052602260045260246000fd5b50919050565b80820180821115610bcc57610bcc61287e565b634e487b7160e01b600052603260045260246000fd5b6000600182016129425761294261287e565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bcc57610bcc61287e565b6000602082840312156129f657600080fd5b815161233b81612661565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a515784516001600160a01b031683529383019391830191600101612a2c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a8757600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122021ad5e3c8cbc41241c08f97376769bcfa24538194c7e4021775cb92cfd809e6964736f6c63430008120033

Deployed Bytecode Sourcemap

15896:15665:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21259:267;;;;;;;;;;-1:-1:-1;21259:267:0;;;;;:::i;:::-;;:::i;:::-;;2845:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3825:194;;;;;;;;;;-1:-1:-1;3825:194:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;3825:194:0;1208:187:1;20336:189:0;;;;;;;;;;;;;:::i;15976:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1591:32:1;;;1573:51;;1561:2;1546:18;15976:51:0;1400:230:1;3166:108:0;;;;;;;;;;-1:-1:-1;3254:12:0;;3166:108;;;1781:25:1;;;1769:2;1754:18;3166:108:0;1635:177:1;17052:33:0;;;;;;;;;;;;;;;;17134;;;;;;;;;;;;;;;;21534:252;;;;;;;;;;-1:-1:-1;21534:252:0;;;;;:::i;:::-;;:::i;17094:33::-;;;;;;;;;;;;;;;;4027:529;;;;;;;;;;-1:-1:-1;4027:529:0;;;;;:::i;:::-;;:::i;16079:53::-;;;;;;;;;;;;16125:6;16079:53;;3065:93;;;;;;;;;;-1:-1:-1;3065:93:0;;3148:2;2628:36:1;;2616:2;2601:18;3065:93:0;2486:184:1;4564:290:0;;;;;;;;;;-1:-1:-1;4564:290:0;;;;;:::i;:::-;;:::i;16034:38::-;;;;;;;;;;;;;;;16456:33;;;;;;;;;;-1:-1:-1;16456:33:0;;;;;;;;23639:126;;;;;;;;;;-1:-1:-1;23639:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23729:28:0;23705:4;23729:28;;;:19;:28;;;;;;;;;23639:126;16941:28;;;;;;;;;;;;;;;;28371:436;;;;;;;;;;-1:-1:-1;28371:436:0;;;;;:::i;:::-;;:::i;16536:31::-;;;;;;;;;;-1:-1:-1;16536:31:0;;;;;;;;;;;3282:143;;;;;;;;;;-1:-1:-1;3282:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;3399:18:0;3372:7;3399:18;;;;;;;;;;;;3282:143;850:103;;;;;;;;;;;;;:::i;21794:163::-;;;;;;;;;;-1:-1:-1;21794:163:0;;;;;:::i;:::-;;:::i;16253:38::-;;;;;;;;;;-1:-1:-1;16253:38:0;;;;-1:-1:-1;;;;;16253:38:0;;;16826:30;;;;;;;;;;;;;;;;22073:401;;;;;;;;;;-1:-1:-1;22073:401:0;;;;;:::i;:::-;;:::i;20084:200::-;;;;;;;;;;;;;:::i;627:87::-;;;;;;;;;;-1:-1:-1;700:6:0;;-1:-1:-1;;;;;700:6:0;627:87;;16976:31;;;;;;;;;;;;;;;;21965:100;;;;;;;;;;-1:-1:-1;21965:100:0;;;;;:::i;:::-;;:::i;2953:104::-;;;;;;;;;;;;;:::i;23129:306::-;;;;;;;;;;-1:-1:-1;23129:306:0;;;;;:::i;:::-;;:::i;4862:475::-;;;;;;;;;;-1:-1:-1;4862:475:0;;;;;:::i;:::-;;:::i;3433:200::-;;;;;;;;;;-1:-1:-1;3433:200:0;;;;;:::i;:::-;;:::i;16900:32::-;;;;;;;;;;;;;;;;17343:57;;;;;;;;;;-1:-1:-1;17343:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16496:33;;;;;;;;;;-1:-1:-1;16496:33:0;;;;;;;;;;;22939:182;;;;;;;;;;-1:-1:-1;22939:182:0;;;;;:::i;:::-;;:::i;16298:40::-;;;;;;;;;;-1:-1:-1;16298:40:0;;;;-1:-1:-1;;;;;16298:40:0;;;22482:449;;;;;;;;;;-1:-1:-1;22482:449:0;;;;;:::i;:::-;;:::i;16347:29::-;;;;;;;;;;;;;;;;16664:39;;;;;;;;;;-1:-1:-1;16664:39:0;;;;;;;;20770:481;;;;;;;;;;-1:-1:-1;20770:481:0;;;;;:::i;:::-;;:::i;16792:27::-;;;;;;;;;;;;;;;;3641:176;;;;;;;;;;-1:-1:-1;3641:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3782:18:0;;;3755:7;3782:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3641:176;17277:57;;;;;;;;;;-1:-1:-1;17277:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16383:33;;;;;;;;;;;;;;;;16744:39;;;;;;;;;;-1:-1:-1;16744:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20565:135;;;;;;;;;;;;;:::i;17174:35::-;;;;;;;;;;;;;;;;16863:30;;;;;;;;;;;;;;;;961:238;;;;;;;;;;-1:-1:-1;961:238:0;;;;;:::i;:::-;;:::i;17014:31::-;;;;;;;;;;;;;;;;16139:75;;;;;;;;;;;;16172:42;16139:75;;16423:24;;;;;;;;;;;;;;;;21259:267;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;;;;;;;;;21398:4:::1;21390;21369:13;3254:12:::0;;;3166:108;21369:13:::1;:17;::::0;21385:1:::1;21369:17;:::i;:::-;21368:26;;;;:::i;:::-;21367:35;;;;:::i;:::-;21357:6;:45;;21335:136;;;::::0;-1:-1:-1;;;21335:136:0;;6319:2:1;21335:136:0::1;::::0;::::1;6301:21:1::0;6358:2;6338:18;;;6331:30;6397:34;6377:18;;;6370:62;-1:-1:-1;;;6448:18:1;;;6441:39;6497:19;;21335:136:0::1;6117:405:1::0;21335:136:0::1;21499:19;:6:::0;21509:8:::1;21499:19;:::i;:::-;21482:14;:36:::0;-1:-1:-1;21259:267:0:o;2845:100::-;2899:13;2932:5;2925:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2845:100;:::o;3825:194::-;3933:4;3950:39;228:10;3973:7;3982:6;3950:8;:39::i;:::-;-1:-1:-1;4007:4:0;3825:194;;;;;:::o;20336:189::-;700:6;;20388:4;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;20444:3:::1;20423:13;3254:12:::0;;;3166:108;20423:13:::1;:17;::::0;20439:1:::1;20423:17;:::i;:::-;20422:25;;;;:::i;:::-;20405:14;:42:::0;20492:3:::1;20471:13;3254:12:::0;;;3166:108;20471:13:::1;:17;::::0;20487:1:::1;20471:17;:::i;:::-;20470:25;;;;:::i;:::-;20458:9;:37:::0;-1:-1:-1;20513:4:0::1;20336:189:::0;:::o;21534:252::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;21668:4:::1;21660;21639:13;3254:12:::0;;;3166:108;21639:13:::1;:17;::::0;21655:1:::1;21639:17;:::i;:::-;21638:26;;;;:::i;:::-;21637:35;;;;:::i;:::-;21627:6;:45;;21605:131;;;::::0;-1:-1:-1;;;21605:131:0;;7114:2:1;21605:131:0::1;::::0;::::1;7096:21:1::0;7153:2;7133:18;;;7126:30;7192:34;7172:18;;;7165:62;-1:-1:-1;;;7243:18:1;;;7236:34;7287:19;;21605:131:0::1;6912:400:1::0;21605:131:0::1;21759:19;:6:::0;21769:8:::1;21759:19;:::i;:::-;21747:9;:31:::0;-1:-1:-1;21534:252:0:o;4027:529::-;4167:4;4184:36;4194:6;4202:9;4213:6;4184:9;:36::i;:::-;-1:-1:-1;;;;;4260:19:0;;4233:24;4260:19;;;:11;:19;;;;;;;;228:10;4260:33;;;;;;;;4326:26;;;;4304:116;;;;-1:-1:-1;;;4304:116:0;;7519:2:1;4304:116:0;;;7501:21:1;7558:2;7538:18;;;7531:30;7597:34;7577:18;;;7570:62;-1:-1:-1;;;7648:18:1;;;7641:38;7696:19;;4304:116:0;7317:404:1;4304:116:0;4456:57;4465:6;228:10;4506:6;4487:16;:25;4456:8;:57::i;:::-;-1:-1:-1;4544:4:0;;4027:529;-1:-1:-1;;;;4027:529:0:o;4564:290::-;228:10;4677:4;4766:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4766:34:0;;;;;;;;;;4677:4;;4694:130;;4744:7;;4766:47;;4803:10;;4766:47;:::i;:::-;4694:8;:130::i;28371:436::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;28504:9:::1;28499:301;28519:19:::0;;::::1;28499:301;;;28560:15;28578:8;;28587:1;28578:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28560:29:::0;-1:-1:-1;;;;;;28626:24:0;::::1;28645:4;28626:24;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;28671:17:0;::::1;16172:42;28671:17;;28626:62;:116;;;;;28728:13;-1:-1:-1::0;;;;;28709:33:0::1;:7;-1:-1:-1::0;;;;;28709:33:0::1;;;28626:116;28604:184;;;-1:-1:-1::0;;;;;28758:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:30;;-1:-1:-1;;28758:30:0::1;::::0;::::1;;;::::0;;28604:184:::1;-1:-1:-1::0;28540:3:0;::::1;::::0;::::1;:::i;:::-;;;;28499:301;;;;28371:436:::0;;;:::o;850:103::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;915:30:::1;942:1;915:18;:30::i;:::-;850:103::o:0;21794:163::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21909:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;21909:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21794:163::o;22073:401::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;22231:15:::1;:31:::0;;;22273:15:::1;:31:::0;;;22315:17:::1;:35:::0;;;22335:15;22376:33:::1;22291:13:::0;22249;22376:33:::1;:::i;:::-;:53;;;;:::i;:::-;22361:12;:68:::0;;;22464:1:::1;-1:-1:-1::0;22448:17:0::1;22440:26;;;::::0;::::1;;22073:401:::0;;;:::o;20084:200::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;20148:13:::1;::::0;::::1;::::0;::::1;;;20147:14;20139:40;;;::::0;-1:-1:-1;;;20139:40:0;;8330:2:1;20139:40:0::1;::::0;::::1;8312:21:1::0;8369:2;8349:18;;;8342:30;-1:-1:-1;;;8388:18:1;;;8381:43;8441:18;;20139:40:0::1;8128:337:1::0;20139:40:0::1;20190:13;:20:::0;;20235:12:::1;20221:11;:26:::0;-1:-1:-1;;20258:18:0;;;;;20084:200::o;21965:100::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;22036:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22036:21:0;;::::1;::::0;;;::::1;::::0;;21965:100::o;2953:104::-;3009:13;3042:7;3035:14;;;;;:::i;23129:306::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;23275:13:::1;-1:-1:-1::0;;;;;23267:21:0::1;:4;-1:-1:-1::0;;;;;23267:21:0::1;::::0;23245:128:::1;;;::::0;-1:-1:-1;;;23245:128:0;;8672:2:1;23245:128:0::1;::::0;::::1;8654:21:1::0;8711:2;8691:18;;;8684:30;8750:34;8730:18;;;8723:62;8821:27;8801:18;;;8794:55;8866:19;;23245:128:0::1;8470:421:1::0;23245:128:0::1;23386:41;23415:4;23421:5;23386:28;:41::i;:::-;23129:306:::0;;:::o;4862:475::-;228:10;4980:4;5024:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5024:34:0;;;;;;;;;;5091:35;;;;5069:122;;;;-1:-1:-1;;;5069:122:0;;9098:2:1;5069:122:0;;;9080:21:1;9137:2;9117:18;;;9110:30;9176:34;9156:18;;;9149:62;-1:-1:-1;;;9227:18:1;;;9220:35;9272:19;;5069:122:0;8896:401:1;5069:122:0;5227:67;228:10;5250:7;5278:15;5259:16;:34;5227:8;:67::i;:::-;-1:-1:-1;5325:4:0;;4862:475;-1:-1:-1;;;4862:475:0:o;3433:200::-;3544:4;3561:42;228:10;3585:9;3596:6;3561:9;:42::i;22939:182::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23024:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23024:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23079:34;;1348:41:1;;;23079:34:0::1;::::0;1321:18:1;23079:34:0::1;;;;;;;22939:182:::0;;:::o;22482:449::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;22641:16:::1;:32:::0;;;22684:16:::1;:32:::0;;;22727:18:::1;:36:::0;;;22748:15;22803:48:::1;22703:13:::0;22660;22803:48:::1;:::i;:::-;:82;;;;:::i;:::-;22774:13;:111:::0;;;22921:1:::1;-1:-1:-1::0;22904:18:0::1;22896:27;;;::::0;::::1;20770:481:::0;700:6;;20867:4;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;20941:6:::1;20920:13;3254:12:::0;;;3166:108;20920:13:::1;:17;::::0;20936:1:::1;20920:17;:::i;:::-;20919:28;;;;:::i;:::-;20906:9;:41;;20884:144;;;::::0;-1:-1:-1;;;20884:144:0;;9504:2:1;20884:144:0::1;::::0;::::1;9486:21:1::0;9543:2;9523:18;;;9516:30;9582:34;9562:18;;;9555:62;-1:-1:-1;;;9633:18:1;;;9626:51;9694:19;;20884:144:0::1;9302:417:1::0;20884:144:0::1;21096:4;21075:13;3254:12:::0;;;3166:108;21075:13:::1;:17;::::0;21091:1:::1;21075:17;:::i;:::-;21074:26;;;;:::i;:::-;21061:9;:39;;21039:141;;;::::0;-1:-1:-1;;;21039:141:0;;9926:2:1;21039:141:0::1;::::0;::::1;9908:21:1::0;9965:2;9945:18;;;9938:30;10004:34;9984:18;;;9977:62;-1:-1:-1;;;10055:18:1;;;10048:50;10115:19;;21039:141:0::1;9724:416:1::0;21039:141:0::1;-1:-1:-1::0;21191:18:0::1;:30:::0;;;21239:4:::1;833:1;20770:481:::0;;;:::o;20565:135::-;700:6;;20625:4;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;-1:-1:-1;20642:20:0::1;:28:::0;;-1:-1:-1;;20642:28:0::1;::::0;;;20565:135;:::o;961:238::-;700:6;;-1:-1:-1;;;;;700:6:0;228:10;762:23;754:68;;;;-1:-1:-1;;;754:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1064:22:0;::::1;1042:110;;;::::0;-1:-1:-1;;;1042:110:0;;10347:2:1;1042:110:0::1;::::0;::::1;10329:21:1::0;10386:2;10366:18;;;10359:30;10425:34;10405:18;;;10398:62;-1:-1:-1;;;10476:18:1;;;10469:36;10522:19;;1042:110:0::1;10145:402:1::0;1042:110:0::1;1163:28;1182:8;1163:18;:28::i;:::-;961:238:::0;:::o;7619:380::-;-1:-1:-1;;;;;7755:19:0;;7747:68;;;;-1:-1:-1;;;7747:68:0;;10754:2:1;7747:68:0;;;10736:21:1;10793:2;10773:18;;;10766:30;10832:34;10812:18;;;10805:62;-1:-1:-1;;;10883:18:1;;;10876:34;10927:19;;7747:68:0;10552:400:1;7747:68:0;-1:-1:-1;;;;;7834:21:0;;7826:68;;;;-1:-1:-1;;;7826:68:0;;11159:2:1;7826:68:0;;;11141:21:1;11198:2;11178:18;;;11171:30;11237:34;11217:18;;;11210:62;-1:-1:-1;;;11288:18:1;;;11281:32;11330:19;;7826:68:0;10957:398:1;7826:68:0;-1:-1:-1;;;;;7907:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7959:32;;1781:25:1;;;7959:32:0;;1754:18:1;7959:32:0;;;;;;;7619:380;;;:::o;23773:4590::-;-1:-1:-1;;;;;23905:18:0;;23897:68;;;;-1:-1:-1;;;23897:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23984:16:0;;23976:64;;;;-1:-1:-1;;;23976:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24060:13:0;;;;;;:7;:13;;;;;;;;24059:14;24051:33;;;;-1:-1:-1;;;24051:33:0;;12372:2:1;24051:33:0;;;12354:21:1;12411:1;12391:18;;;12384:29;-1:-1:-1;;;12429:18:1;;;12422:36;12475:18;;24051:33:0;12170:329:1;24051:33:0;24101:6;24111:1;24101:11;24097:93;;24129:28;24145:4;24151:2;24155:1;24129:15;:28::i;24097:93::-;24206:14;;;;24202:2403;;;24242:8;;-1:-1:-1;;;24242:8:0;;;;24237:2357;;24276:13;;;;;;;24271:223;;-1:-1:-1;;;;;24348:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24377:23:0;;;;;;:19;:23;;;;;;;;24348:52;24314:160;;;;-1:-1:-1;;;24314:160:0;;12706:2:1;24314:160:0;;;12688:21:1;12745:2;12725:18;;;12718:30;-1:-1:-1;;;12764:18:1;;;12757:52;12826:18;;24314:160:0;12504:346:1;24314:160:0;24650:20;;;;24646:641;;;700:6;;-1:-1:-1;;;;;24725:13:0;;;700:6;;24725:13;;;;:72;;;24781:15;-1:-1:-1;;;;;24767:30:0;:2;-1:-1:-1;;;;;24767:30:0;;;24725:72;:129;;;;;24840:13;-1:-1:-1;;;;;24826:28:0;:2;-1:-1:-1;;;;;24826:28:0;;;24725:129;24695:573;;;24972:9;24943:39;;;;:28;:39;;;;;;25018:12;-1:-1:-1;24905:258:0;;;;-1:-1:-1;;;24905:258:0;;13057:2:1;24905:258:0;;;13039:21:1;13096:2;13076:18;;;13069:30;13135:34;13115:18;;;13108:62;13206:34;13186:18;;;13179:62;-1:-1:-1;;;13257:19:1;;;13250:40;13307:19;;24905:258:0;12855:477:1;24905:258:0;25219:9;25190:39;;;;:28;:39;;;;;25232:12;25190:54;;24695:573;-1:-1:-1;;;;;25357:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;25414:29:0;;;;;;:25;:29;;;;;;;;25413:30;25357:86;25331:1248;;;25530:14;;25520:6;:24;;25486:157;;;;-1:-1:-1;;;25486:157:0;;13539:2:1;25486:157:0;;;13521:21:1;13578:2;13558:18;;;13551:30;13617:34;13597:18;;;13590:62;-1:-1:-1;;;13668:18:1;;;13661:45;13723:19;;25486:157:0;13337:411:1;25486:157:0;25726:9;;-1:-1:-1;;;;;3399:18:0;;3372:7;3399:18;;;;;;;;;;;25709:13;25700:22;;:6;:22;:::i;:::-;:35;;25666:140;;;;-1:-1:-1;;;25666:140:0;;13955:2:1;25666:140:0;;;13937:21:1;13994:2;13974:18;;;13967:30;-1:-1:-1;;;14013:18:1;;;14006:49;14072:18;;25666:140:0;13753:343:1;25666:140:0;25331:1248;;;-1:-1:-1;;;;;25900:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;25955:31:0;;;;;;:25;:31;;;;;;;;25954:32;25900:86;25874:705;;;26073:14;;26063:6;:24;;26029:158;;;;-1:-1:-1;;;26029:158:0;;14303:2:1;26029:158:0;;;14285:21:1;14342:2;14322:18;;;14315:30;14381:34;14361:18;;;14354:62;-1:-1:-1;;;14432:18:1;;;14425:46;14488:19;;26029:158:0;14101:412:1;25874:705:0;-1:-1:-1;;;;;26218:29:0;;;;;;:25;:29;;;;;;;;26213:366;;26332:9;;-1:-1:-1;;;;;3399:18:0;;3372:7;3399:18;;;;;;;;;;;26315:13;3282:143;26213:366;-1:-1:-1;;;;;26442:31:0;;;;;;:25;:31;;;;;;;;26438:141;;;26498:32;26513:4;26519:2;26523:6;26498:14;:32::i;26438:141::-;26666:4;26617:28;3399:18;;;;;;;;;;;26724;;26700:42;;;;;;;26773:35;;-1:-1:-1;26797:11:0;;;;;;;26773:35;:61;;;;-1:-1:-1;26826:8:0;;-1:-1:-1;;;26826:8:0;;;;26825:9;26773:61;:110;;;;-1:-1:-1;;;;;;26852:31:0;;;;;;:25;:31;;;;;;;;26851:32;26773:110;:153;;;;-1:-1:-1;;;;;;26901:25:0;;;;;;:19;:25;;;;;;;;26900:26;26773:153;:194;;;;-1:-1:-1;;;;;;26944:23:0;;;;;;:19;:23;;;;;;;;26943:24;26773:194;26755:326;;;26994:8;:15;;-1:-1:-1;;;;26994:15:0;-1:-1:-1;;;26994:15:0;;;27026:10;:8;:10::i;:::-;27053:8;:16;;-1:-1:-1;;;;27053:16:0;;;26755:326;27109:8;;-1:-1:-1;;;;;27134:25:0;;27093:12;27134:25;;;:19;:25;;;;;;27109:8;-1:-1:-1;;;27109:8:0;;;;;27108:9;;27134:25;;:52;;-1:-1:-1;;;;;;27163:23:0;;;;;;:19;:23;;;;;;;;27134:52;27130:100;;;-1:-1:-1;27213:5:0;27130:100;27242:12;27273:7;27269:1041;;;-1:-1:-1;;;;;27325:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;27374:1;27358:13;;:17;27325:50;27321:842;;;27403:34;27433:3;27403:25;27414:13;;27403:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;27396:41;;27506:13;;27486:16;;27479:4;:23;;;;:::i;:::-;27478:41;;;;:::i;:::-;27456:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;27634:13:0;;27591:18;;27584:25;;:4;:25;:::i;:::-;27583:64;;;;:::i;:::-;27538:20;;:109;;;;;;;:::i;:::-;;;;-1:-1:-1;;27716:13:0;;27696:16;;27689:23;;:4;:23;:::i;:::-;27688:41;;;;:::i;:::-;27666:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;27321:842:0;;-1:-1:-1;27321:842:0;;-1:-1:-1;;;;;27791:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27841:1;27826:12;;:16;27791:51;27787:376;;;27870:33;27899:3;27870:24;27881:12;;27870:6;:10;;:24;;;;:::i;:33::-;27863:40;;27971:12;;27952:15;;27945:4;:22;;;;:::i;:::-;27944:39;;;;:::i;:::-;27922:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28055:12:0;;28034:17;;28027:24;;:4;:24;:::i;:::-;28026:41;;;;:::i;:::-;28002:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;28135:12:0;;28116:15;;28109:22;;:4;:22;:::i;:::-;28108:39;;;;:::i;:::-;28086:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27787:376:0;28183:8;;28179:91;;28212:42;28228:4;28242;28249;28212:15;:42::i;:::-;28284:14;28294:4;28284:14;;:::i;:::-;;;27269:1041;28322:33;28338:4;28344:2;28348:6;28322:15;:33::i;:::-;23886:4477;;;;23773:4590;;;:::o;1207:191::-;1300:6;;;-1:-1:-1;;;;;1317:17:0;;;-1:-1:-1;;;;;;1317:17:0;;;;;;;1350:40;;1300:6;;;1317:17;1300:6;;1350:40;;1281:16;;1350:40;1270:128;1207:191;:::o;23443:188::-;-1:-1:-1;;;;;23526:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23526:39:0;;;;;;;;;;23583:40;;23526:39;;:31;23583:40;;;23443:188;;:::o;5345:770::-;-1:-1:-1;;;;;5485:20:0;;5477:70;;;;-1:-1:-1;;;5477:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5566:23:0;;5558:71;;;;-1:-1:-1;;;5558:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5726:17:0;;5702:21;5726:17;;;;;;;;;;;5776:23;;;;5754:111;;;;-1:-1:-1;;;5754:111:0;;14853:2:1;5754:111:0;;;14835:21:1;14892:2;14872:18;;;14865:30;14931:34;14911:18;;;14904:62;-1:-1:-1;;;14982:18:1;;;14975:36;15028:19;;5754:111:0;14651:402:1;5754:111:0;-1:-1:-1;;;;;5901:17:0;;;:9;:17;;;;;;;;;;;5921:22;;;5901:42;;5965:20;;;;;;;;:30;;5937:6;;5901:9;5965:30;;5937:6;;5965:30;:::i;:::-;;;;;;;;6030:9;-1:-1:-1;;;;;6013:35:0;6022:6;-1:-1:-1;;;;;6013:35:0;;6041:6;6013:35;;;;1781:25:1;;1769:2;1754:18;;1635:177;6013:35:0;;;;;;;;6061:46;22073:401;6123:482;-1:-1:-1;;;;;6338:17:0;;;6314:21;6338:17;;;;;;;;;;;;;6411:22;;;6391:42;;;6455:20;;;;;;;:30;;6427:6;;6314:21;6455:30;;6427:6;;6455:30;:::i;29809:1749::-;29892:4;29848:23;3399:18;;;;;;;;;;;29848:50;;29909:25;30005:20;;29971:18;;29937;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;29909:116;-1:-1:-1;30036:12:0;30063:20;;;:46;;-1:-1:-1;30087:22:0;;30063:46;30059:85;;;30126:7;;;29809:1749::o;30059:85::-;30178:18;;:23;;30199:2;30178:23;:::i;:::-;30160:15;:41;30156:115;;;30236:18;;:23;;30257:2;30236:23;:::i;:::-;30218:41;;30156:115;30283:23;30396:1;30363:17;30328:18;;30310:15;:36;;;;:::i;:::-;30309:71;;;;:::i;:::-;:88;;;;:::i;:::-;30283:114;-1:-1:-1;30408:26:0;30437:36;:15;30283:114;30437:19;:36::i;:::-;30408:65;-1:-1:-1;30514:21:0;30548:36;30408:65;30548:16;:36::i;:::-;30597:18;30618:44;:21;30644:17;30618:25;:44::i;:::-;30597:65;;30675:18;30696:81;30749:17;30696:34;30711:18;;30696:10;:14;;:34;;;;:::i;:81::-;30675:102;;30788:25;30816:83;30871:17;30816:36;30831:20;;30816:10;:14;;:36;;;;:::i;:83::-;30788:111;-1:-1:-1;30912:23:0;30788:111;30938:23;30951:10;30938;:23;:::i;:::-;:43;;;;:::i;:::-;31015:1;30994:18;:22;;;31027:18;:22;;;31060:20;:24;30912:69;-1:-1:-1;31101:19:0;;;;;:42;;;31142:1;31124:15;:19;31101:42;31097:278;;;31160:46;31173:15;31190;31160:12;:46::i;:::-;31330:18;;31226:137;;;15260:25:1;;;15316:2;15301:18;;15294:34;;;15344:18;;;15337:34;;;;31226:137:0;;;;;;15248:2:1;31226:137:0;;;31097:278;31409:17;;31401:61;;-1:-1:-1;;;;;31409:17:0;;;;31440;;31401:61;;;;31440:17;31409;31401:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31495:15:0;;31487:63;;31387:75;;-1:-1:-1;;;;;;31495:15:0;;31524:21;;31487:63;;;;31524:21;31495:15;31487:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;29809:1749:0:o;9748:98::-;9806:7;9833:5;9837:1;9833;:5;:::i;:::-;9826:12;9748:98;-1:-1:-1;;;9748:98:0:o;9854:::-;9912:7;9939:5;9943:1;9939;:5;:::i;9642:98::-;9700:7;9727:5;9731:1;9727;:5;:::i;28815:529::-;28905:16;;;28919:1;28905:16;;;;;;;;28881:21;;28905:16;;;;;;;;;;-1:-1:-1;28905:16:0;28881:40;;28950:4;28932;28937:1;28932:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28932:23:0;;;-1:-1:-1;;;;;28932:23:0;;;;;28976:15;-1:-1:-1;;;;;28976:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28966:4;28971:1;28966:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;28966:32:0;;;-1:-1:-1;;;;;28966:32:0;;;;;29011:62;29028:4;29043:15;29061:11;29011:8;:62::i;:::-;29112:224;;-1:-1:-1;;;29112:224:0;;-1:-1:-1;;;;;29112:15:0;:66;;;;:224;;29193:11;;29219:1;;29263:4;;29290;;29310:15;;29112:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28870:474;28815:529;:::o;29352:449::-;29433:62;29450:4;29465:15;29483:11;29433:8;:62::i;:::-;29538:255;;-1:-1:-1;;;29538:255:0;;29610:4;29538:255;;;17306:34:1;17356:18;;;17349:34;;;29656:1:0;17399:18:1;;;17392:34;;;17442:18;;;17435:34;;;17485:19;;;17478:44;29767:15:0;17538:19:1;;;17531:35;29538:15:0;-1:-1:-1;;;;;29538:31:0;;;;29577:9;;17240:19:1;;29538:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29352:449;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2675:247::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3092:689;3184:6;3192;3200;3253:2;3241:9;3232:7;3228:23;3224:32;3221:52;;;3269:1;3266;3259:12;3221:52;3309:9;3296:23;3338:18;3379:2;3371:6;3368:14;3365:34;;;3395:1;3392;3385:12;3365:34;3433:6;3422:9;3418:22;3408:32;;3478:7;3471:4;3467:2;3463:13;3459:27;3449:55;;3500:1;3497;3490:12;3449:55;3540:2;3527:16;3566:2;3558:6;3555:14;3552:34;;;3582:1;3579;3572:12;3552:34;3637:7;3630:4;3620:6;3617:1;3613:14;3609:2;3605:23;3601:34;3598:47;3595:67;;;3658:1;3655;3648:12;3595:67;3689:4;3681:13;;;;-1:-1:-1;3713:6:1;-1:-1:-1;3738:37:1;;3754:20;;;-1:-1:-1;3738:37:1;:::i;:::-;3728:47;;3092:689;;;;;:::o;3786:315::-;3851:6;3859;3912:2;3900:9;3891:7;3887:23;3883:32;3880:52;;;3928:1;3925;3918:12;3880:52;3967:9;3954:23;3986:31;4011:5;3986:31;:::i;:::-;4036:5;-1:-1:-1;4060:35:1;4091:2;4076:18;;4060:35;:::i;:::-;4050:45;;3786:315;;;;;:::o;4330:316::-;4407:6;4415;4423;4476:2;4464:9;4455:7;4451:23;4447:32;4444:52;;;4492:1;4489;4482:12;4444:52;-1:-1:-1;;4515:23:1;;;4585:2;4570:18;;4557:32;;-1:-1:-1;4636:2:1;4621:18;;;4608:32;;4330:316;-1:-1:-1;4330:316:1:o;4651:180::-;4707:6;4760:2;4748:9;4739:7;4735:23;4731:32;4728:52;;;4776:1;4773;4766:12;4728:52;4799:26;4815:9;4799:26;:::i;4836:388::-;4904:6;4912;4965:2;4953:9;4944:7;4940:23;4936:32;4933:52;;;4981:1;4978;4971:12;4933:52;5020:9;5007:23;5039:31;5064:5;5039:31;:::i;:::-;5089:5;-1:-1:-1;5146:2:1;5131:18;;5118:32;5159:33;5118:32;5159:33;:::i;:::-;5211:7;5201:17;;;4836:388;;;;;:::o;5229:356::-;5431:2;5413:21;;;5450:18;;;5443:30;5509:34;5504:2;5489:18;;5482:62;5576:2;5561:18;;5229:356::o;5590:127::-;5651:10;5646:3;5642:20;5639:1;5632:31;5682:4;5679:1;5672:15;5706:4;5703:1;5696:15;5722:168;5795:9;;;5826;;5843:15;;;5837:22;;5823:37;5813:71;;5864:18;;:::i;5895:217::-;5935:1;5961;5951:132;;6005:10;6000:3;5996:20;5993:1;5986:31;6040:4;6037:1;6030:15;6068:4;6065:1;6058:15;5951:132;-1:-1:-1;6097:9:1;;5895:217::o;6527:380::-;6606:1;6602:12;;;;6649;;;6670:61;;6724:4;6716:6;6712:17;6702:27;;6670:61;6777:2;6769:6;6766:14;6746:18;6743:38;6740:161;;6823:10;6818:3;6814:20;6811:1;6804:31;6858:4;6855:1;6848:15;6886:4;6883:1;6876:15;6740:161;;6527:380;;;:::o;7726:125::-;7791:9;;;7812:10;;;7809:36;;;7825:18;;:::i;7856:127::-;7917:10;7912:3;7908:20;7905:1;7898:31;7948:4;7945:1;7938:15;7972:4;7969:1;7962:15;7988:135;8027:3;8048:17;;;8045:43;;8068:18;;:::i;:::-;-1:-1:-1;8115:1:1;8104:13;;7988:135::o;11360:401::-;11562:2;11544:21;;;11601:2;11581:18;;;11574:30;11640:34;11635:2;11620:18;;11613:62;-1:-1:-1;;;11706:2:1;11691:18;;11684:35;11751:3;11736:19;;11360:401::o;11766:399::-;11968:2;11950:21;;;12007:2;11987:18;;;11980:30;12046:34;12041:2;12026:18;;12019:62;-1:-1:-1;;;12112:2:1;12097:18;;12090:33;12155:3;12140:19;;11766:399::o;14518:128::-;14585:9;;;14606:11;;;14603:37;;;14620:18;;:::i;15724:251::-;15794:6;15847:2;15835:9;15826:7;15822:23;15818:32;15815:52;;;15863:1;15860;15853:12;15815:52;15895:9;15889:16;15914:31;15939:5;15914:31;:::i;15980:980::-;16242:4;16290:3;16279:9;16275:19;16321:6;16310:9;16303:25;16347:2;16385:6;16380:2;16369:9;16365:18;16358:34;16428:3;16423:2;16412:9;16408:18;16401:31;16452:6;16487;16481:13;16518:6;16510;16503:22;16556:3;16545:9;16541:19;16534:26;;16595:2;16587:6;16583:15;16569:29;;16616:1;16626:195;16640:6;16637:1;16634:13;16626:195;;;16705:13;;-1:-1:-1;;;;;16701:39:1;16689:52;;16796:15;;;;16761:12;;;;16737:1;16655:9;16626:195;;;-1:-1:-1;;;;;;;16877:32:1;;;;16872:2;16857:18;;16850:60;-1:-1:-1;;;16941:3:1;16926:19;16919:35;16838:3;15980:980;-1:-1:-1;;;15980:980:1:o;17577:306::-;17665:6;17673;17681;17734:2;17722:9;17713:7;17709:23;17705:32;17702:52;;;17750:1;17747;17740:12;17702:52;17779:9;17773:16;17763:26;;17829:2;17818:9;17814:18;17808:25;17798:35;;17873:2;17862:9;17858:18;17852:25;17842:35;;17577:306;;;;;:::o

Swarm Source

ipfs://21ad5e3c8cbc41241c08f97376769bcfa24538194c7e4021775cb92cfd809e69
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.