ETH Price: $2,386.21 (+1.67%)

Token

APES (APES)
 

Overview

Max Total Supply

100,000,000 APES

Holders

37

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.945126237137979578 APES

Value
$0.00
0xe57ea950510098304613a8618dbc7a7a658b1188
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:
APES

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-30
*/

/**
Twitter:  https://twitter.com/apesapes_erc
Telegram: https://t.me/APESAPES
**/

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

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 _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 APES is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public apesWallet;
    address public devWallet;
    address public liquidityWallet;
    address public operationsWallet;

    uint256 public maxTxn;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

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

    uint256 public buyTotalFees;
    uint256 public buyApesFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellApesFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForApes;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForOperations;

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

    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 apesWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

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

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

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

    constructor() ERC20("APES", "APES") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(v2Router); 

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

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

        // launch buy fees
        uint256 _buyApesFee = 1;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 5;
        uint256 _buyOperationsFee = 4;
        
        // launch sell fees
        uint256 _sellApesFee = 2;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 20;
        uint256 _sellOperationsFee = 18;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTxn = 2_000_000 * 1e18; // 2% max transaction at launch
        maxWallet = 2_000_000 * 1e18; // 2% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyApesFee = _buyApesFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyApesFee + buyLiquidityFee + buyDevFee + buyOperationsFee;

        sellApesFee = _sellApesFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellApesFee + sellLiquidityFee + sellDevFee + sellOperationsFee;

        apesWallet = address(0x3FBfedADc0F36102e520042083e7C2C4B71031EB); 
        devWallet = address(0xe7d921CaF90030681304a6c3947131F4c3603e87); 
        liquidityWallet = address(0x3FBfedADc0F36102e520042083e7C2C4B71031EB); 
        operationsWallet = address(0x1a85a8B6152578671D8cEdc86543C30bB59ffBEf);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

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

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

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

    function updatemaxTxn(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTxn lower than 0.1%"
        );
        maxTxn = 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 excludeFrommaxTxn(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTxn[updAds] = isEx;
    }

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

    function updateBuyFees(
        uint256 _treasuryFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyApesFee = _treasuryFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyApesFee + buyLiquidityFee + buyDevFee + buyOperationsFee;
        require(buyTotalFees <= 99);
    }

    function updateSellFees(
        uint256 _treasuryFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellApesFee = _treasuryFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellApesFee + sellLiquidityFee + sellDevFee + sellOperationsFee;
        require(sellTotalFees <= 99); 
    }

    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 updateapesWallet(address newapesWallet) external onlyOwner {
        emit apesWalletUpdated(newapesWallet, apesWallet);
        apesWallet = newapesWallet;
    }

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

    function updateoperationsWallet(address newWallet) external onlyOwner{
        emit operationsWalletUpdated(newWallet, operationsWallet);
        operationsWallet = newWallet;
    }

    function updateliquidityWallet(address newliquidityWallet) external onlyOwner {
        emit liquidityWalletUpdated(newliquidityWallet, liquidityWallet);
        liquidityWallet = newliquidityWallet;
    }

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForApes = ethBalance.mul(tokensForApes).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForApes - ethForDev - ethForOperations;

        tokensForLiquidity = 0;
        tokensForApes = 0;
        tokensForDev = 0;
        tokensForOperations = 0;

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsWallet).call{value: ethForOperations}("");
        (success, ) = address(apesWallet).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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"apesWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTxn","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":[],"name":"apesWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyApesFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFrommaxTxn","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":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxn","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":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellApesFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","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":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"toggleBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForApes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","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":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","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"},{"inputs":[{"internalType":"address","name":"newapesWallet","type":"address"}],"name":"updateapesWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newliquidityWallet","type":"address"}],"name":"updateliquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateoperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"v2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600e805462ffffff191660019081179091556010805460ff191690911790553480156200005657600080fd5b506040805180820182526004808252634150455360e01b6020808401828152855180870190965292855284015281519192916200009691600391620006e6565b508051620000ac906004906020840190620006e6565b505050620000c9620000c36200043360201b60201c565b62000437565b6006546001600160a01b0316620000e281600162000489565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015391906200078c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c791906200078c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023b91906200078c565b6001600160a01b031660a08190526200025690600162000489565b60a0516200026690600162000503565b6a01a784379d99db42000000600b819055600d556001600060056004600283601460126a52b7d2dcc80cd2e4000000612710620002a48289620007d4565b620002b09190620007f6565b600c5560148990556015889055601687905560178690558587620002d58a8c62000819565b620002e1919062000819565b620002ed919062000819565b6013556019859055601a849055601b839055601c829055818362000312868862000819565b6200031e919062000819565b6200032a919062000819565b601855600780546001600160a01b0319908116733fbfedadc0f36102e520042083e7c2c4b71031eb90811790925560088054821673e7d921caf90030681304a6c3947131f4c3603e87179055600980548216909217909155600a8054909116731a85a8b6152578671d8cedc86543c30bb59ffbef179055620003c0620003b86005546001600160a01b031690565b600162000557565b620003cd30600162000557565b620003dc61dead600162000557565b620003fb620003f36005546001600160a01b031690565b600162000489565b6200040830600162000489565b6200041761dead600162000489565b62000423338262000601565b5050505050505050505062000871565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620004d85760405162461bcd60e51b815260206004820181905260248201526000805160206200385883398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005a25760405162461bcd60e51b81526020600482018190526024820152600080516020620038588339815191526044820152606401620004cf565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006595760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004cf565b80600260008282546200066d919062000819565b90915550506001600160a01b038216600090815260208190526040812080548392906200069c90849062000819565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620006f49062000834565b90600052602060002090601f01602090048101928262000718576000855562000763565b82601f106200073357805160ff191683800117855562000763565b8280016001018555821562000763579182015b828111156200076357825182559160200191906001019062000746565b506200077192915062000775565b5090565b5b8082111562000771576000815560010162000776565b6000602082840312156200079f57600080fd5b81516001600160a01b0381168114620007b757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620007f157620007f1620007be565b500290565b6000826200081457634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200082f576200082f620007be565b500190565b600181811c908216806200084957607f821691505b602082108114156200086b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612f82620008d6600039600081816105ef015281816112cf015281816114130152611c2e0152600081816104a601528181611bf001528181612836015281816128ef0152818161292b015281816129a50152612a0d0152612f826000f3fe6080604052600436106103c75760003560e01c806395d89b41116101f2578063d46980161161010d578063e884f260116100a0578063f8b45b051161006f578063f8b45b0514610b4e578063fb002c9714610b64578063fc17044114610b7a578063fd72e22a14610b9a57600080fd5b8063e884f26014610aed578063f11a24d314610b02578063f2fde38b14610b18578063f637434214610b3857600080fd5b8063e2f45605116100dc578063e2f4560514610a71578063e596219514610a87578063e7ad9fcd14610ab7578063e8792c1a14610ad757600080fd5b8063d4698016146109d5578063d85ba063146109f5578063dd62ed3e14610a0b578063deadbc1414610a5157600080fd5b8063a9059cbb11610185578063c024666811610154578063c024666814610965578063c876d0b914610985578063cb86407e1461099f578063d257b34f146109b557600080fd5b8063a9059cbb146108d6578063b62496f5146108f6578063b9ceedb914610926578063bbc0c7421461094657600080fd5b80639e122e84116101c15780639e122e841461086a5780639fccce321461088a578063a0d82dc5146108a0578063a457c2d7146108b657600080fd5b806395d89b41146108095780639a7a23d61461081e5780639c3b4fdc1461083e5780639c7bd38b1461085457600080fd5b80634a62bb65116102e2578063715018a6116102755780638da5cb5b116102445780638da5cb5b1461078b5780638ea5220f146107a9578063924de9b7146107c957806392aa3773146107e957600080fd5b8063715018a61461071c578063751039fc1461073157806378588476146107465780638a8c523c1461077657600080fd5b80636a486a8e116102b15780636a486a8e146106905780636aebf627146106a65780636ddd1713146106c657806370a08231146106e657600080fd5b80634a62bb65146106115780634f77f6c01461062b5780634fbee193146106415780635a139dd41461067a57600080fd5b80631c499ab01161035a5780632e6ed7ef116103295780632e6ed7ef14610581578063313ce567146105a157806339509351146105bd57806349bd5a5e146105dd57600080fd5b80631c499ab01461050b57806323b872dd1461052b57806327c8f8351461054b5780632ac0a9431461056157600080fd5b80630e3a71b3116103965780630e3a71b3146104705780631694505e1461049457806318160ddd146104e05780631a8145bb146104f557600080fd5b8063012591f4146103d3578063061ab597146103f557806306fdde0314610415578063095ea7b31461044057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee366004612a9a565b610bba565b005b34801561040157600080fd5b506103f3610410366004612ac7565b610c4a565b34801561042157600080fd5b5061042a610c9f565b6040516104379190612afc565b60405180910390f35b34801561044c57600080fd5b5061046061045b366004612b51565b610d31565b6040519015158152602001610437565b34801561047c57600080fd5b5061048660195481565b604051908152602001610437565b3480156104a057600080fd5b506104c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610437565b3480156104ec57600080fd5b50600254610486565b34801561050157600080fd5b50610486601e5481565b34801561051757600080fd5b506103f3610526366004612b7d565b610d47565b34801561053757600080fd5b50610460610546366004612b96565b610e18565b34801561055757600080fd5b506104c861dead81565b34801561056d57600080fd5b506103f361057c366004612b7d565b610ec2565b34801561058d57600080fd5b506103f361059c366004612bd7565b610f91565b3480156105ad57600080fd5b5060405160128152602001610437565b3480156105c957600080fd5b506104606105d8366004612b51565b611007565b3480156105e957600080fd5b506104c87f000000000000000000000000000000000000000000000000000000000000000081565b34801561061d57600080fd5b50600e546104609060ff1681565b34801561063757600080fd5b50610486601c5481565b34801561064d57600080fd5b5061046061065c366004612a9a565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561068657600080fd5b5061048660175481565b34801561069c57600080fd5b5061048660185481565b3480156106b257600080fd5b506103f36106c1366004612a9a565b611043565b3480156106d257600080fd5b50600e546104609062010000900460ff1681565b3480156106f257600080fd5b50610486610701366004612a9a565b6001600160a01b031660009081526020819052604090205490565b34801561072857600080fd5b506103f36110ca565b34801561073d57600080fd5b50610460611100565b34801561075257600080fd5b50610460610761366004612a9a565b60226020526000908152604090205460ff1681565b34801561078257600080fd5b506103f361113d565b34801561079757600080fd5b506005546001600160a01b03166104c8565b3480156107b557600080fd5b506008546104c8906001600160a01b031681565b3480156107d557600080fd5b506103f36107e4366004612c09565b6111c7565b3480156107f557600080fd5b506103f3610804366004612a9a565b61120d565b34801561081557600080fd5b5061042a611294565b34801561082a57600080fd5b506103f3610839366004612ac7565b6112a3565b34801561084a57600080fd5b5061048660165481565b34801561086057600080fd5b50610486601d5481565b34801561087657600080fd5b506103f3610885366004612c24565b611383565b34801561089657600080fd5b50610486601f5481565b3480156108ac57600080fd5b50610486601b5481565b3480156108c257600080fd5b506104606108d1366004612b51565b611485565b3480156108e257600080fd5b506104606108f1366004612b51565b61151e565b34801561090257600080fd5b50610460610911366004612a9a565b60236020526000908152604090205460ff1681565b34801561093257600080fd5b506007546104c8906001600160a01b031681565b34801561095257600080fd5b50600e5461046090610100900460ff1681565b34801561097157600080fd5b506103f3610980366004612ac7565b61152b565b34801561099157600080fd5b506010546104609060ff1681565b3480156109ab57600080fd5b5061048660145481565b3480156109c157600080fd5b506104606109d0366004612b7d565b6115b4565b3480156109e157600080fd5b506009546104c8906001600160a01b031681565b348015610a0157600080fd5b5061048660135481565b348015610a1757600080fd5b50610486610a26366004612ca8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a5d57600080fd5b506006546104c8906001600160a01b031681565b348015610a7d57600080fd5b50610486600c5481565b348015610a9357600080fd5b50610460610aa2366004612a9a565b60126020526000908152604090205460ff1681565b348015610ac357600080fd5b506103f3610ad2366004612bd7565b61170b565b348015610ae357600080fd5b50610486600b5481565b348015610af957600080fd5b5061046061177b565b348015610b0e57600080fd5b5061048660155481565b348015610b2457600080fd5b506103f3610b33366004612a9a565b6117b8565b348015610b4457600080fd5b50610486601a5481565b348015610b5a57600080fd5b50610486600d5481565b348015610b7057600080fd5b5061048660205481565b348015610b8657600080fd5b506103f3610b95366004612a9a565b611853565b348015610ba657600080fd5b50600a546104c8906001600160a01b031681565b6005546001600160a01b03163314610bed5760405162461bcd60e51b8152600401610be490612ce1565b60405180910390fd5b6007546040516001600160a01b03918216918316907fc5cba32bd83c71f64075524fe5e60174b7cf02ca31b249529e06e6efafb26c9090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c745760405162461bcd60e51b8152600401610be490612ce1565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b606060038054610cae90612d16565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda90612d16565b8015610d275780601f10610cfc57610100808354040283529160200191610d27565b820191906000526020600020905b815481529060010190602001808311610d0a57829003601f168201915b5050505050905090565b6000610d3e3384846118da565b50600192915050565b6005546001600160a01b03163314610d715760405162461bcd60e51b8152600401610be490612ce1565b670de0b6b3a76400006103e8610d8660025490565b610d91906005612d67565b610d9b9190612d86565b610da59190612d86565b811015610e005760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610be4565b610e1281670de0b6b3a7640000612d67565b600d5550565b6000610e258484846119fe565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610eaa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610be4565b610eb785338584036118da565b506001949350505050565b6005546001600160a01b03163314610eec5760405162461bcd60e51b8152600401610be490612ce1565b670de0b6b3a76400006103e8610f0160025490565b610f0c906001612d67565b610f169190612d86565b610f209190612d86565b811015610f795760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e316044820152602560f81b6064820152608401610be4565b610f8b81670de0b6b3a7640000612d67565b600b5550565b6005546001600160a01b03163314610fbb5760405162461bcd60e51b8152600401610be490612ce1565b60148490556015839055601682905560178190558082610fdb8587612da8565b610fe59190612da8565b610fef9190612da8565b60138190556063101561100157600080fd5b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d3e91859061103e908690612da8565b6118da565b6005546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610be490612ce1565b600a546040516001600160a01b03918216918316907fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610be490612ce1565b6110fe60006122f0565b565b6005546000906001600160a01b0316331461112d5760405162461bcd60e51b8152600401610be490612ce1565b50600e805460ff19169055600190565b6005546001600160a01b031633146111675760405162461bcd60e51b8152600401610be490612ce1565b600e54610100900460ff16156111b05760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610be4565b600e80544360115562ffff00191662010100179055565b6005546001600160a01b031633146111f15760405162461bcd60e51b8152600401610be490612ce1565b600e8054911515620100000262ff000019909216919091179055565b6005546001600160a01b031633146112375760405162461bcd60e51b8152600401610be490612ce1565b6009546040516001600160a01b03918216918316907f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610cae90612d16565b6005546001600160a01b031633146112cd5760405162461bcd60e51b8152600401610be490612ce1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156113755760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610be4565b61137f8282612342565b5050565b6005546001600160a01b031633146113ad5760405162461bcd60e51b8152600401610be490612ce1565b60005b828110156110015760008484838181106113cc576113cc612dc0565b90506020020160208101906113e19190612a9a565b90506001600160a01b038116301480159061140a57506006546001600160a01b03828116911614155b801561144857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15611472576001600160a01b0381166000908152601260205260409020805460ff19168415151790555b508061147d81612dd6565b9150506113b0565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115075760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610be4565b61151433858584036118da565b5060019392505050565b6000610d3e3384846119fe565b6005546001600160a01b031633146115555760405162461bcd60e51b8152600401610be490612ce1565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146115e15760405162461bcd60e51b8152600401610be490612ce1565b620186a06115ee60025490565b6115f9906001612d67565b6116039190612d86565b8210156116705760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610be4565b6103e861167c60025490565b611687906005612d67565b6116919190612d86565b8211156116fd5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610be4565b50600c81905560015b919050565b6005546001600160a01b031633146117355760405162461bcd60e51b8152600401610be490612ce1565b6019849055601a839055601b829055601c81905580826117558587612da8565b61175f9190612da8565b6117699190612da8565b60188190556063101561100157600080fd5b6005546000906001600160a01b031633146117a85760405162461bcd60e51b8152600401610be490612ce1565b506010805460ff19169055600190565b6005546001600160a01b031633146117e25760405162461bcd60e51b8152600401610be490612ce1565b6001600160a01b0381166118475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be4565b611850816122f0565b50565b6005546001600160a01b0316331461187d5760405162461bcd60e51b8152600401610be490612ce1565b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661193c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be4565b6001600160a01b03821661199d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a245760405162461bcd60e51b8152600401610be490612df1565b6001600160a01b038216611a4a5760405162461bcd60e51b8152600401610be490612e36565b6001600160a01b03831660009081526012602052604090205460ff1615611aa45760405162461bcd60e51b815260206004820152600e60248201526d14db9a5c195c88189b1bd8dad95960921b6044820152606401610be4565b80611aba57611ab583836000612396565b505050565b600e5460ff1615611f5b576005546001600160a01b03848116911614801590611af157506005546001600160a01b03838116911614155b8015611b0557506001600160a01b03821615155b8015611b1c57506001600160a01b03821661dead14155b8015611b325750600654600160a01b900460ff16155b15611f5b57600e54610100900460ff16611bca576001600160a01b03831660009081526021602052604090205460ff1680611b8557506001600160a01b03821660009081526021602052604090205460ff165b611bca5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610be4565b60105460ff1615611d11576005546001600160a01b03838116911614801590611c2557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611c6357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611d1157326000908152600f60205260409020544311611cfe5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610be4565b326000908152600f602052604090204390555b6001600160a01b03831660009081526023602052604090205460ff168015611d5257506001600160a01b03821660009081526022602052604090205460ff16155b15611e2857600b54811115611db95760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526636b0bc2a3c371760c91b6064820152608401610be4565b600d546001600160a01b038316600090815260208190526040902054611ddf9083612da8565b1115611e235760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610be4565b611f5b565b6001600160a01b03821660009081526023602052604090205460ff168015611e6957506001600160a01b03831660009081526022602052604090205460ff16155b15611ed157600b54811115611e235760405162461bcd60e51b815260206004820152602860248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152671036b0bc2a3c371760c11b6064820152608401610be4565b6001600160a01b03821660009081526022602052604090205460ff16611f5b57600d546001600160a01b038316600090815260208190526040902054611f179083612da8565b1115611f5b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610be4565b30600090815260208190526040902054600c5481108015908190611f875750600e5462010000900460ff165b8015611f9d5750600654600160a01b900460ff16155b8015611fc257506001600160a01b03851660009081526023602052604090205460ff16155b8015611fe757506001600160a01b03851660009081526021602052604090205460ff16155b801561200c57506001600160a01b03841660009081526021602052604090205460ff16155b1561203a576006805460ff60a01b1916600160a01b17905561202c6124ea565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526021602052604090205460ff600160a01b90920482161591168061208857506001600160a01b03851660009081526021602052604090205460ff165b15612091575060005b600081156122dc576001600160a01b03861660009081526023602052604090205460ff1680156120c357506000601854115b156121b1576120e860646120e2601854886127b490919063ffffffff16565b906127c7565b9050601854601a54826120fb9190612d67565b6121059190612d86565b601e60008282546121169190612da8565b9091555050601854601b5461212b9083612d67565b6121359190612d86565b601f60008282546121469190612da8565b909155505060185460195461215b9083612d67565b6121659190612d86565b601d60008282546121769190612da8565b9091555050601854601c5461218b9083612d67565b6121959190612d86565b602060008282546121a69190612da8565b909155506122be9050565b6001600160a01b03871660009081526023602052604090205460ff1680156121db57506000601354115b156122be576121fa60646120e2601354886127b490919063ffffffff16565b90506013546015548261220d9190612d67565b6122179190612d86565b601e60008282546122289190612da8565b909155505060135460165461223d9083612d67565b6122479190612d86565b601f60008282546122589190612da8565b909155505060135460145461226d9083612d67565b6122779190612d86565b601d60008282546122889190612da8565b909155505060135460175461229d9083612d67565b6122a79190612d86565b602060008282546122b89190612da8565b90915550505b80156122cf576122cf873083612396565b6122d98186612e79565b94505b6122e7878787612396565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166123bc5760405162461bcd60e51b8152600401610be490612df1565b6001600160a01b0382166123e25760405162461bcd60e51b8152600401610be490612e36565b6001600160a01b0383166000908152602081905260409020548181101561245a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610be4565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612491908490612da8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124dd91815260200190565b60405180910390a3611001565b3060009081526020819052604081205490506000602054601f54601d54601e546125149190612da8565b61251e9190612da8565b6125289190612da8565b90506000821580612537575081155b1561254157505050565b600c5461254f906014612d67565b83111561256757600c54612564906014612d67565b92505b6000600283601e548661257a9190612d67565b6125849190612d86565b61258e9190612d86565b9050600061259c85836127d3565b9050476125a8826127df565b60006125b447836127d3565b905060006125d1876120e2601d54856127b490919063ffffffff16565b905060006125ee886120e2601f54866127b490919063ffffffff16565b9050600061260b896120e2602054876127b490919063ffffffff16565b90506000818361261b8688612e79565b6126259190612e79565b61262f9190612e79565b6000601e819055601d819055601f81905560208190556008546040519293506001600160a01b031691859181818185875af1925050503d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b509099505087158015906126aa5750600081115b156126fd576126b9888261299f565b601e54604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600a546040516001600160a01b03909116908390600081818185875af1925050503d806000811461274a576040519150601f19603f3d011682016040523d82523d6000602084013e61274f565b606091505b5050600754604051919a506001600160a01b0316904790600081818185875af1925050503d806000811461279f576040519150601f19603f3d011682016040523d82523d6000602084013e6127a4565b606091505b5050505050505050505050505050565b60006127c08284612d67565b9392505050565b60006127c08284612d86565b60006127c08284612e79565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061281457612814612dc0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b69190612e90565b816001815181106128c9576128c9612dc0565b60200260200101906001600160a01b031690816001600160a01b031681525050612914307f0000000000000000000000000000000000000000000000000000000000000000846118da565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612969908590600090869030904290600401612ead565b600060405180830381600087803b15801561298357600080fd5b505af1158015612997573d6000803e3d6000fd5b505050505050565b6129ca307f0000000000000000000000000000000000000000000000000000000000000000846118da565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612a59573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a7e9190612f1e565b5050505050565b6001600160a01b038116811461185057600080fd5b600060208284031215612aac57600080fd5b81356127c081612a85565b8035801515811461170657600080fd5b60008060408385031215612ada57600080fd5b8235612ae581612a85565b9150612af360208401612ab7565b90509250929050565b600060208083528351808285015260005b81811015612b2957858101830151858201604001528201612b0d565b81811115612b3b576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612b6457600080fd5b8235612b6f81612a85565b946020939093013593505050565b600060208284031215612b8f57600080fd5b5035919050565b600080600060608486031215612bab57600080fd5b8335612bb681612a85565b92506020840135612bc681612a85565b929592945050506040919091013590565b60008060008060808587031215612bed57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612c1b57600080fd5b6127c082612ab7565b600080600060408486031215612c3957600080fd5b833567ffffffffffffffff80821115612c5157600080fd5b818601915086601f830112612c6557600080fd5b813581811115612c7457600080fd5b8760208260051b8501011115612c8957600080fd5b602092830195509350612c9f9186019050612ab7565b90509250925092565b60008060408385031215612cbb57600080fd5b8235612cc681612a85565b91506020830135612cd681612a85565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612d2a57607f821691505b60208210811415612d4b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612d8157612d81612d51565b500290565b600082612da357634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612dbb57612dbb612d51565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612dea57612dea612d51565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612e8b57612e8b612d51565b500390565b600060208284031215612ea257600080fd5b81516127c081612a85565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612efd5784516001600160a01b031683529383019391830191600101612ed8565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f3357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f74d45bb738a33f8981b2f57a166677985eaa005c3a781c36bfe554fcb22f5b264736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806395d89b41116101f2578063d46980161161010d578063e884f260116100a0578063f8b45b051161006f578063f8b45b0514610b4e578063fb002c9714610b64578063fc17044114610b7a578063fd72e22a14610b9a57600080fd5b8063e884f26014610aed578063f11a24d314610b02578063f2fde38b14610b18578063f637434214610b3857600080fd5b8063e2f45605116100dc578063e2f4560514610a71578063e596219514610a87578063e7ad9fcd14610ab7578063e8792c1a14610ad757600080fd5b8063d4698016146109d5578063d85ba063146109f5578063dd62ed3e14610a0b578063deadbc1414610a5157600080fd5b8063a9059cbb11610185578063c024666811610154578063c024666814610965578063c876d0b914610985578063cb86407e1461099f578063d257b34f146109b557600080fd5b8063a9059cbb146108d6578063b62496f5146108f6578063b9ceedb914610926578063bbc0c7421461094657600080fd5b80639e122e84116101c15780639e122e841461086a5780639fccce321461088a578063a0d82dc5146108a0578063a457c2d7146108b657600080fd5b806395d89b41146108095780639a7a23d61461081e5780639c3b4fdc1461083e5780639c7bd38b1461085457600080fd5b80634a62bb65116102e2578063715018a6116102755780638da5cb5b116102445780638da5cb5b1461078b5780638ea5220f146107a9578063924de9b7146107c957806392aa3773146107e957600080fd5b8063715018a61461071c578063751039fc1461073157806378588476146107465780638a8c523c1461077657600080fd5b80636a486a8e116102b15780636a486a8e146106905780636aebf627146106a65780636ddd1713146106c657806370a08231146106e657600080fd5b80634a62bb65146106115780634f77f6c01461062b5780634fbee193146106415780635a139dd41461067a57600080fd5b80631c499ab01161035a5780632e6ed7ef116103295780632e6ed7ef14610581578063313ce567146105a157806339509351146105bd57806349bd5a5e146105dd57600080fd5b80631c499ab01461050b57806323b872dd1461052b57806327c8f8351461054b5780632ac0a9431461056157600080fd5b80630e3a71b3116103965780630e3a71b3146104705780631694505e1461049457806318160ddd146104e05780631a8145bb146104f557600080fd5b8063012591f4146103d3578063061ab597146103f557806306fdde0314610415578063095ea7b31461044057600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee366004612a9a565b610bba565b005b34801561040157600080fd5b506103f3610410366004612ac7565b610c4a565b34801561042157600080fd5b5061042a610c9f565b6040516104379190612afc565b60405180910390f35b34801561044c57600080fd5b5061046061045b366004612b51565b610d31565b6040519015158152602001610437565b34801561047c57600080fd5b5061048660195481565b604051908152602001610437565b3480156104a057600080fd5b506104c87f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610437565b3480156104ec57600080fd5b50600254610486565b34801561050157600080fd5b50610486601e5481565b34801561051757600080fd5b506103f3610526366004612b7d565b610d47565b34801561053757600080fd5b50610460610546366004612b96565b610e18565b34801561055757600080fd5b506104c861dead81565b34801561056d57600080fd5b506103f361057c366004612b7d565b610ec2565b34801561058d57600080fd5b506103f361059c366004612bd7565b610f91565b3480156105ad57600080fd5b5060405160128152602001610437565b3480156105c957600080fd5b506104606105d8366004612b51565b611007565b3480156105e957600080fd5b506104c87f0000000000000000000000009f3c2efaca2a252d0653c5c3fe731bb24966efc281565b34801561061d57600080fd5b50600e546104609060ff1681565b34801561063757600080fd5b50610486601c5481565b34801561064d57600080fd5b5061046061065c366004612a9a565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561068657600080fd5b5061048660175481565b34801561069c57600080fd5b5061048660185481565b3480156106b257600080fd5b506103f36106c1366004612a9a565b611043565b3480156106d257600080fd5b50600e546104609062010000900460ff1681565b3480156106f257600080fd5b50610486610701366004612a9a565b6001600160a01b031660009081526020819052604090205490565b34801561072857600080fd5b506103f36110ca565b34801561073d57600080fd5b50610460611100565b34801561075257600080fd5b50610460610761366004612a9a565b60226020526000908152604090205460ff1681565b34801561078257600080fd5b506103f361113d565b34801561079757600080fd5b506005546001600160a01b03166104c8565b3480156107b557600080fd5b506008546104c8906001600160a01b031681565b3480156107d557600080fd5b506103f36107e4366004612c09565b6111c7565b3480156107f557600080fd5b506103f3610804366004612a9a565b61120d565b34801561081557600080fd5b5061042a611294565b34801561082a57600080fd5b506103f3610839366004612ac7565b6112a3565b34801561084a57600080fd5b5061048660165481565b34801561086057600080fd5b50610486601d5481565b34801561087657600080fd5b506103f3610885366004612c24565b611383565b34801561089657600080fd5b50610486601f5481565b3480156108ac57600080fd5b50610486601b5481565b3480156108c257600080fd5b506104606108d1366004612b51565b611485565b3480156108e257600080fd5b506104606108f1366004612b51565b61151e565b34801561090257600080fd5b50610460610911366004612a9a565b60236020526000908152604090205460ff1681565b34801561093257600080fd5b506007546104c8906001600160a01b031681565b34801561095257600080fd5b50600e5461046090610100900460ff1681565b34801561097157600080fd5b506103f3610980366004612ac7565b61152b565b34801561099157600080fd5b506010546104609060ff1681565b3480156109ab57600080fd5b5061048660145481565b3480156109c157600080fd5b506104606109d0366004612b7d565b6115b4565b3480156109e157600080fd5b506009546104c8906001600160a01b031681565b348015610a0157600080fd5b5061048660135481565b348015610a1757600080fd5b50610486610a26366004612ca8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a5d57600080fd5b506006546104c8906001600160a01b031681565b348015610a7d57600080fd5b50610486600c5481565b348015610a9357600080fd5b50610460610aa2366004612a9a565b60126020526000908152604090205460ff1681565b348015610ac357600080fd5b506103f3610ad2366004612bd7565b61170b565b348015610ae357600080fd5b50610486600b5481565b348015610af957600080fd5b5061046061177b565b348015610b0e57600080fd5b5061048660155481565b348015610b2457600080fd5b506103f3610b33366004612a9a565b6117b8565b348015610b4457600080fd5b50610486601a5481565b348015610b5a57600080fd5b50610486600d5481565b348015610b7057600080fd5b5061048660205481565b348015610b8657600080fd5b506103f3610b95366004612a9a565b611853565b348015610ba657600080fd5b50600a546104c8906001600160a01b031681565b6005546001600160a01b03163314610bed5760405162461bcd60e51b8152600401610be490612ce1565b60405180910390fd5b6007546040516001600160a01b03918216918316907fc5cba32bd83c71f64075524fe5e60174b7cf02ca31b249529e06e6efafb26c9090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c745760405162461bcd60e51b8152600401610be490612ce1565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b606060038054610cae90612d16565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda90612d16565b8015610d275780601f10610cfc57610100808354040283529160200191610d27565b820191906000526020600020905b815481529060010190602001808311610d0a57829003601f168201915b5050505050905090565b6000610d3e3384846118da565b50600192915050565b6005546001600160a01b03163314610d715760405162461bcd60e51b8152600401610be490612ce1565b670de0b6b3a76400006103e8610d8660025490565b610d91906005612d67565b610d9b9190612d86565b610da59190612d86565b811015610e005760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610be4565b610e1281670de0b6b3a7640000612d67565b600d5550565b6000610e258484846119fe565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610eaa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610be4565b610eb785338584036118da565b506001949350505050565b6005546001600160a01b03163314610eec5760405162461bcd60e51b8152600401610be490612ce1565b670de0b6b3a76400006103e8610f0160025490565b610f0c906001612d67565b610f169190612d86565b610f209190612d86565b811015610f795760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e316044820152602560f81b6064820152608401610be4565b610f8b81670de0b6b3a7640000612d67565b600b5550565b6005546001600160a01b03163314610fbb5760405162461bcd60e51b8152600401610be490612ce1565b60148490556015839055601682905560178190558082610fdb8587612da8565b610fe59190612da8565b610fef9190612da8565b60138190556063101561100157600080fd5b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d3e91859061103e908690612da8565b6118da565b6005546001600160a01b0316331461106d5760405162461bcd60e51b8152600401610be490612ce1565b600a546040516001600160a01b03918216918316907fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110f45760405162461bcd60e51b8152600401610be490612ce1565b6110fe60006122f0565b565b6005546000906001600160a01b0316331461112d5760405162461bcd60e51b8152600401610be490612ce1565b50600e805460ff19169055600190565b6005546001600160a01b031633146111675760405162461bcd60e51b8152600401610be490612ce1565b600e54610100900460ff16156111b05760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b6044820152606401610be4565b600e80544360115562ffff00191662010100179055565b6005546001600160a01b031633146111f15760405162461bcd60e51b8152600401610be490612ce1565b600e8054911515620100000262ff000019909216919091179055565b6005546001600160a01b031633146112375760405162461bcd60e51b8152600401610be490612ce1565b6009546040516001600160a01b03918216918316907f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610cae90612d16565b6005546001600160a01b031633146112cd5760405162461bcd60e51b8152600401610be490612ce1565b7f0000000000000000000000009f3c2efaca2a252d0653c5c3fe731bb24966efc26001600160a01b0316826001600160a01b031614156113755760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610be4565b61137f8282612342565b5050565b6005546001600160a01b031633146113ad5760405162461bcd60e51b8152600401610be490612ce1565b60005b828110156110015760008484838181106113cc576113cc612dc0565b90506020020160208101906113e19190612a9a565b90506001600160a01b038116301480159061140a57506006546001600160a01b03828116911614155b801561144857507f0000000000000000000000009f3c2efaca2a252d0653c5c3fe731bb24966efc26001600160a01b0316816001600160a01b031614155b15611472576001600160a01b0381166000908152601260205260409020805460ff19168415151790555b508061147d81612dd6565b9150506113b0565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115075760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610be4565b61151433858584036118da565b5060019392505050565b6000610d3e3384846119fe565b6005546001600160a01b031633146115555760405162461bcd60e51b8152600401610be490612ce1565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146115e15760405162461bcd60e51b8152600401610be490612ce1565b620186a06115ee60025490565b6115f9906001612d67565b6116039190612d86565b8210156116705760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610be4565b6103e861167c60025490565b611687906005612d67565b6116919190612d86565b8211156116fd5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610be4565b50600c81905560015b919050565b6005546001600160a01b031633146117355760405162461bcd60e51b8152600401610be490612ce1565b6019849055601a839055601b829055601c81905580826117558587612da8565b61175f9190612da8565b6117699190612da8565b60188190556063101561100157600080fd5b6005546000906001600160a01b031633146117a85760405162461bcd60e51b8152600401610be490612ce1565b506010805460ff19169055600190565b6005546001600160a01b031633146117e25760405162461bcd60e51b8152600401610be490612ce1565b6001600160a01b0381166118475760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be4565b611850816122f0565b50565b6005546001600160a01b0316331461187d5760405162461bcd60e51b8152600401610be490612ce1565b6008546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661193c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be4565b6001600160a01b03821661199d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be4565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611a245760405162461bcd60e51b8152600401610be490612df1565b6001600160a01b038216611a4a5760405162461bcd60e51b8152600401610be490612e36565b6001600160a01b03831660009081526012602052604090205460ff1615611aa45760405162461bcd60e51b815260206004820152600e60248201526d14db9a5c195c88189b1bd8dad95960921b6044820152606401610be4565b80611aba57611ab583836000612396565b505050565b600e5460ff1615611f5b576005546001600160a01b03848116911614801590611af157506005546001600160a01b03838116911614155b8015611b0557506001600160a01b03821615155b8015611b1c57506001600160a01b03821661dead14155b8015611b325750600654600160a01b900460ff16155b15611f5b57600e54610100900460ff16611bca576001600160a01b03831660009081526021602052604090205460ff1680611b8557506001600160a01b03821660009081526021602052604090205460ff165b611bca5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610be4565b60105460ff1615611d11576005546001600160a01b03838116911614801590611c2557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611c6357507f0000000000000000000000009f3c2efaca2a252d0653c5c3fe731bb24966efc26001600160a01b0316826001600160a01b031614155b15611d1157326000908152600f60205260409020544311611cfe5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610be4565b326000908152600f602052604090204390555b6001600160a01b03831660009081526023602052604090205460ff168015611d5257506001600160a01b03821660009081526022602052604090205460ff16155b15611e2857600b54811115611db95760405162461bcd60e51b815260206004820152602760248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526636b0bc2a3c371760c91b6064820152608401610be4565b600d546001600160a01b038316600090815260208190526040902054611ddf9083612da8565b1115611e235760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610be4565b611f5b565b6001600160a01b03821660009081526023602052604090205460ff168015611e6957506001600160a01b03831660009081526022602052604090205460ff16155b15611ed157600b54811115611e235760405162461bcd60e51b815260206004820152602860248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152671036b0bc2a3c371760c11b6064820152608401610be4565b6001600160a01b03821660009081526022602052604090205460ff16611f5b57600d546001600160a01b038316600090815260208190526040902054611f179083612da8565b1115611f5b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610be4565b30600090815260208190526040902054600c5481108015908190611f875750600e5462010000900460ff165b8015611f9d5750600654600160a01b900460ff16155b8015611fc257506001600160a01b03851660009081526023602052604090205460ff16155b8015611fe757506001600160a01b03851660009081526021602052604090205460ff16155b801561200c57506001600160a01b03841660009081526021602052604090205460ff16155b1561203a576006805460ff60a01b1916600160a01b17905561202c6124ea565b6006805460ff60a01b191690555b6006546001600160a01b03861660009081526021602052604090205460ff600160a01b90920482161591168061208857506001600160a01b03851660009081526021602052604090205460ff165b15612091575060005b600081156122dc576001600160a01b03861660009081526023602052604090205460ff1680156120c357506000601854115b156121b1576120e860646120e2601854886127b490919063ffffffff16565b906127c7565b9050601854601a54826120fb9190612d67565b6121059190612d86565b601e60008282546121169190612da8565b9091555050601854601b5461212b9083612d67565b6121359190612d86565b601f60008282546121469190612da8565b909155505060185460195461215b9083612d67565b6121659190612d86565b601d60008282546121769190612da8565b9091555050601854601c5461218b9083612d67565b6121959190612d86565b602060008282546121a69190612da8565b909155506122be9050565b6001600160a01b03871660009081526023602052604090205460ff1680156121db57506000601354115b156122be576121fa60646120e2601354886127b490919063ffffffff16565b90506013546015548261220d9190612d67565b6122179190612d86565b601e60008282546122289190612da8565b909155505060135460165461223d9083612d67565b6122479190612d86565b601f60008282546122589190612da8565b909155505060135460145461226d9083612d67565b6122779190612d86565b601d60008282546122889190612da8565b909155505060135460175461229d9083612d67565b6122a79190612d86565b602060008282546122b89190612da8565b90915550505b80156122cf576122cf873083612396565b6122d98186612e79565b94505b6122e7878787612396565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166123bc5760405162461bcd60e51b8152600401610be490612df1565b6001600160a01b0382166123e25760405162461bcd60e51b8152600401610be490612e36565b6001600160a01b0383166000908152602081905260409020548181101561245a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610be4565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612491908490612da8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124dd91815260200190565b60405180910390a3611001565b3060009081526020819052604081205490506000602054601f54601d54601e546125149190612da8565b61251e9190612da8565b6125289190612da8565b90506000821580612537575081155b1561254157505050565b600c5461254f906014612d67565b83111561256757600c54612564906014612d67565b92505b6000600283601e548661257a9190612d67565b6125849190612d86565b61258e9190612d86565b9050600061259c85836127d3565b9050476125a8826127df565b60006125b447836127d3565b905060006125d1876120e2601d54856127b490919063ffffffff16565b905060006125ee886120e2601f54866127b490919063ffffffff16565b9050600061260b896120e2602054876127b490919063ffffffff16565b90506000818361261b8688612e79565b6126259190612e79565b61262f9190612e79565b6000601e819055601d819055601f81905560208190556008546040519293506001600160a01b031691859181818185875af1925050503d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b509099505087158015906126aa5750600081115b156126fd576126b9888261299f565b601e54604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b600a546040516001600160a01b03909116908390600081818185875af1925050503d806000811461274a576040519150601f19603f3d011682016040523d82523d6000602084013e61274f565b606091505b5050600754604051919a506001600160a01b0316904790600081818185875af1925050503d806000811461279f576040519150601f19603f3d011682016040523d82523d6000602084013e6127a4565b606091505b5050505050505050505050505050565b60006127c08284612d67565b9392505050565b60006127c08284612d86565b60006127c08284612e79565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061281457612814612dc0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b69190612e90565b816001815181106128c9576128c9612dc0565b60200260200101906001600160a01b031690816001600160a01b031681525050612914307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118da565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612969908590600090869030904290600401612ead565b600060405180830381600087803b15801561298357600080fd5b505af1158015612997573d6000803e3d6000fd5b505050505050565b6129ca307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118da565b60095460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612a59573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a7e9190612f1e565b5050505050565b6001600160a01b038116811461185057600080fd5b600060208284031215612aac57600080fd5b81356127c081612a85565b8035801515811461170657600080fd5b60008060408385031215612ada57600080fd5b8235612ae581612a85565b9150612af360208401612ab7565b90509250929050565b600060208083528351808285015260005b81811015612b2957858101830151858201604001528201612b0d565b81811115612b3b576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612b6457600080fd5b8235612b6f81612a85565b946020939093013593505050565b600060208284031215612b8f57600080fd5b5035919050565b600080600060608486031215612bab57600080fd5b8335612bb681612a85565b92506020840135612bc681612a85565b929592945050506040919091013590565b60008060008060808587031215612bed57600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612c1b57600080fd5b6127c082612ab7565b600080600060408486031215612c3957600080fd5b833567ffffffffffffffff80821115612c5157600080fd5b818601915086601f830112612c6557600080fd5b813581811115612c7457600080fd5b8760208260051b8501011115612c8957600080fd5b602092830195509350612c9f9186019050612ab7565b90509250925092565b60008060408385031215612cbb57600080fd5b8235612cc681612a85565b91506020830135612cd681612a85565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612d2a57607f821691505b60208210811415612d4b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612d8157612d81612d51565b500290565b600082612da357634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612dbb57612dbb612d51565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612dea57612dea612d51565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612e8b57612e8b612d51565b500390565b600060208284031215612ea257600080fd5b81516127c081612a85565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612efd5784516001600160a01b031683529383019391830191600101612ed8565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612f3357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f74d45bb738a33f8981b2f57a166677985eaa005c3a781c36bfe554fcb22f5b264736f6c634300080a0033

Deployed Bytecode Sourcemap

15100:17708:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23657:173;;;;;;;;;;-1:-1:-1;23657:173:0;;;;;:::i;:::-;;:::i;:::-;;21642:145;;;;;;;;;;-1:-1:-1;21642:145:0;;;;;:::i;:::-;;:::i;2797:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3711:169;;;;;;;;;;-1:-1:-1;3711:169:0;;;;;:::i;:::-;;:::i;:::-;;;1974:14:1;;1967:22;1949:41;;1937:2;1922:18;3711:169:0;1809:187:1;16268:26:0;;;;;;;;;;;;;;;;;;;2147:25:1;;;2135:2;2120:18;16268:26:0;2001:177:1;15174:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2374:32:1;;;2356:51;;2344:2;2329:18;15174:51:0;2183:230:1;3118:108:0;;;;;;;;;;-1:-1:-1;3206:12:0;;3118:108;;16447:33;;;;;;;;;;;;;;;;21384:250;;;;;;;;;;-1:-1:-1;21384:250:0;;;;;:::i;:::-;;:::i;3888:492::-;;;;;;;;;;-1:-1:-1;3888:492:0;;;;;:::i;:::-;;:::i;15277:53::-;;;;;;;;;;;;15323:6;15277:53;;21135:241;;;;;;;;;;-1:-1:-1;21135:241:0;;;;;:::i;:::-;;:::i;21991:470::-;;;;;;;;;;-1:-1:-1;21991:470:0;;;;;:::i;:::-;;:::i;3017:93::-;;;;;;;;;;-1:-1:-1;3017:93:0;;3100:2;3804:36:1;;3792:2;3777:18;3017:93:0;3662:184:1;4388:215:0;;;;;;;;;;-1:-1:-1;4388:215:0;;;;;:::i;:::-;;:::i;15232:38::-;;;;;;;;;;;;;;;15685:33;;;;;;;;;;-1:-1:-1;15685:33:0;;;;;;;;16371:32;;;;;;;;;;;;;;;;24411:126;;;;;;;;;;-1:-1:-1;24411:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24501:28:0;24477:4;24501:28;;;:19;:28;;;;;;;;;24411:126;16193:31;;;;;;;;;;;;;;;;16233:28;;;;;;;;;;;;;;;;24003:184;;;;;;;;;;-1:-1:-1;24003:184:0;;;;;:::i;:::-;;:::i;15765:31::-;;;;;;;;;;-1:-1:-1;15765:31:0;;;;;;;;;;;3234:127;;;;;;;;;;-1:-1:-1;3234:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3335:18:0;3308:7;3335:18;;;;;;;;;;;;3234:127;919:103;;;;;;;;;;;;;:::i;20243:121::-;;;;;;;;;;;;;:::i;16623:49::-;;;;;;;;;;-1:-1:-1;16623:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19990:201;;;;;;;;;;;;;:::i;696:87::-;;;;;;;;;;-1:-1:-1;769:6:0;;-1:-1:-1;;;;;769:6:0;696:87;;15476:24;;;;;;;;;;-1:-1:-1;15476:24:0;;;;-1:-1:-1;;;;;15476:24:0;;;21883:100;;;;;;;;;;-1:-1:-1;21883:100:0;;;;;:::i;:::-;;:::i;24195:208::-;;;;;;;;;;-1:-1:-1;24195:208:0;;;;;:::i;:::-;;:::i;2905:104::-;;;;;;;;;;;;;:::i;23149:304::-;;;;;;;;;;-1:-1:-1;23149:304:0;;;;;:::i;:::-;;:::i;16162:24::-;;;;;;;;;;;;;;;;16412:28;;;;;;;;;;;;;;;;30496:383;;;;;;;;;;-1:-1:-1;30496:383:0;;;;;:::i;:::-;;:::i;16487:27::-;;;;;;;;;;;;;;;;16339:25;;;;;;;;;;;;;;;;4611:413;;;;;;;;;;-1:-1:-1;4611:413:0;;;;;:::i;:::-;;:::i;3369:175::-;;;;;;;;;;-1:-1:-1;3369:175:0;;;;;:::i;:::-;;:::i;16681:57::-;;;;;;;;;;-1:-1:-1;16681:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15444:25;;;;;;;;;;-1:-1:-1;15444:25:0;;;;-1:-1:-1;;;;;15444:25:0;;;15725:33;;;;;;;;;;-1:-1:-1;15725:33:0;;;;;;;;;;;22959:182;;;;;;;;;;-1:-1:-1;22959:182:0;;;;;:::i;:::-;;:::i;15931:39::-;;;;;;;;;;-1:-1:-1;15931:39:0;;;;;;;;16093:25;;;;;;;;;;;;;;;;20630:497;;;;;;;;;;-1:-1:-1;20630:497:0;;;;;:::i;:::-;;:::i;15507:30::-;;;;;;;;;;-1:-1:-1;15507:30:0;;;;-1:-1:-1;;;;;15507:30:0;;;16059:27;;;;;;;;;;;;;;;;3552:151;;;;;;;;;;-1:-1:-1;3552:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3668:18:0;;;3641:7;3668:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3552:151;15337:68;;;;;;;;;;-1:-1:-1;15337:68:0;;;;-1:-1:-1;;;;;15337:68:0;;;15612:33;;;;;;;;;;;;;;;;16011:39;;;;;;;;;;-1:-1:-1;16011:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22469:482;;;;;;;;;;-1:-1:-1;22469:482:0;;;;;:::i;:::-;;:::i;15584:21::-;;;;;;;;;;;;;;;;20425:135;;;;;;;;;;;;;:::i;16125:30::-;;;;;;;;;;;;;;;;1030:201;;;;;;;;;;-1:-1:-1;1030:201:0;;;;;:::i;:::-;;:::i;16301:31::-;;;;;;;;;;;;;;;;15652:24;;;;;;;;;;;;;;;;16521:34;;;;;;;;;;;;;;;;23838:157;;;;;;;;;;-1:-1:-1;23838:157:0;;;;;:::i;:::-;;:::i;15544:31::-;;;;;;;;;;-1:-1:-1;15544:31:0;;;;-1:-1:-1;;;;;15544:31:0;;;23657:173;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;;;;;;;;;23774:10:::1;::::0;23741:44:::1;::::0;-1:-1:-1;;;;;23774:10:0;;::::1;::::0;23741:44;::::1;::::0;::::1;::::0;23774:10:::1;::::0;23741:44:::1;23796:10;:26:::0;;-1:-1:-1;;;;;;23796:26:0::1;-1:-1:-1::0;;;;;23796:26:0;;;::::1;::::0;;;::::1;::::0;;23657:173::o;21642:145::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21747:25:0;;;::::1;;::::0;;;:17:::1;:25;::::0;;;;:32;;-1:-1:-1;;21747:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21642:145::o;2797:100::-;2851:13;2884:5;2877:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2797:100;:::o;3711:169::-;3794:4;3811:39;322:10;3834:7;3843:6;3811:8;:39::i;:::-;-1:-1:-1;3868:4:0;3711:169;;;;:::o;21384:250::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;21518:4:::1;21510;21489:13;3206:12:::0;;;3118:108;21489:13:::1;:17;::::0;21505:1:::1;21489:17;:::i;:::-;21488:26;;;;:::i;:::-;21487:35;;;;:::i;:::-;21477:6;:45;;21455:131;;;::::0;-1:-1:-1;;;21455:131:0;;6598:2:1;21455:131:0::1;::::0;::::1;6580:21:1::0;6637:2;6617:18;;;6610:30;6676:34;6656:18;;;6649:62;-1:-1:-1;;;6727:18:1;;;6720:34;6771:19;;21455:131:0::1;6396:400:1::0;21455:131:0::1;21609:17;:6:::0;21619::::1;21609:17;:::i;:::-;21597:9;:29:::0;-1:-1:-1;21384:250:0:o;3888:492::-;4028:4;4045:36;4055:6;4063:9;4074:6;4045:9;:36::i;:::-;-1:-1:-1;;;;;4121:19:0;;4094:24;4121:19;;;:11;:19;;;;;;;;322:10;4121:33;;;;;;;;4173:26;;;;4165:79;;;;-1:-1:-1;;;4165:79:0;;7003:2:1;4165:79:0;;;6985:21:1;7042:2;7022:18;;;7015:30;7081:34;7061:18;;;7054:62;-1:-1:-1;;;7132:18:1;;;7125:38;7180:19;;4165:79:0;6801:404:1;4165:79:0;4280:57;4289:6;322:10;4330:6;4311:16;:25;4280:8;:57::i;:::-;-1:-1:-1;4368:4:0;;3888:492;-1:-1:-1;;;;3888:492:0:o;21135:241::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;21266:4:::1;21258;21237:13;3206:12:::0;;;3118:108;21237:13:::1;:17;::::0;21253:1:::1;21237:17;:::i;:::-;21236:26;;;;:::i;:::-;21235:35;;;;:::i;:::-;21225:6;:45;;21203:128;;;::::0;-1:-1:-1;;;21203:128:0;;7412:2:1;21203:128:0::1;::::0;::::1;7394:21:1::0;7451:2;7431:18;;;7424:30;7490:34;7470:18;;;7463:62;-1:-1:-1;;;7541:18:1;;;7534:31;7582:19;;21203:128:0::1;7210:397:1::0;21203:128:0::1;21351:17;:6:::0;21361::::1;21351:17;:::i;:::-;21342:6;:26:::0;-1:-1:-1;21135:241:0:o;21991:470::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;22181:10:::1;:25:::0;;;22217:15:::1;:31:::0;;;22259:9:::1;:27:::0;;;22297:16:::1;:33:::0;;;22316:14;22271:15;22356:28:::1;22235:13:::0;22194:12;22356:28:::1;:::i;:::-;:40;;;;:::i;:::-;:59;;;;:::i;:::-;22341:12;:74:::0;;;22450:2:::1;-1:-1:-1::0;22434:18:0::1;22426:27;;;::::0;::::1;;21991:470:::0;;;;:::o;4388:215::-;322:10;4476:4;4525:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4525:34:0;;;;;;;;;;4476:4;;4493:80;;4516:7;;4525:47;;4562:10;;4525:47;:::i;:::-;4493:8;:80::i;24003:184::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;24123:16:::1;::::0;24088:52:::1;::::0;-1:-1:-1;;;;;24123:16:0;;::::1;::::0;24088:52;::::1;::::0;::::1;::::0;24123:16:::1;::::0;24088:52:::1;24151:16;:28:::0;;-1:-1:-1;;;;;;24151:28:0::1;-1:-1:-1::0;;;;;24151:28:0;;;::::1;::::0;;;::::1;::::0;;24003:184::o;919:103::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;984:30:::1;1011:1;984:18;:30::i;:::-;919:103::o:0;20243:121::-;769:6;;20295:4;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;-1:-1:-1;20312:14:0::1;:22:::0;;-1:-1:-1;;20312:22:0::1;::::0;;;20243:121;:::o;19990:201::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;20054:13:::1;::::0;::::1;::::0;::::1;;;20053:14;20045:41;;;::::0;-1:-1:-1;;;20045:41:0;;7947:2:1;20045:41:0::1;::::0;::::1;7929:21:1::0;7986:2;7966:18;;;7959:30;-1:-1:-1;;;8005:18:1;;;7998:44;8059:18;;20045:41:0::1;7745:338:1::0;20045:41:0::1;20097:13;:20:::0;;20142:12:::1;20128:11;:26:::0;-1:-1:-1;;20165:18:0;;;;;19990:201::o;21883:100::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;21954:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;21954:21:0;;::::1;::::0;;;::::1;::::0;;21883:100::o;24195:208::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;24332:15:::1;::::0;24289:59:::1;::::0;-1:-1:-1;;;;;24332:15:0;;::::1;::::0;24289:59;::::1;::::0;::::1;::::0;24332:15:::1;::::0;24289:59:::1;24359:15;:36:::0;;-1:-1:-1;;;;;;24359:36:0::1;-1:-1:-1::0;;;;;24359:36:0;;;::::1;::::0;;;::::1;::::0;;24195:208::o;2905:104::-;2961:13;2994:7;2987:14;;;;;:::i;23149:304::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;23293:13:::1;-1:-1:-1::0;;;;;23285:21:0::1;:4;-1:-1:-1::0;;;;;23285:21:0::1;;;23263:128;;;::::0;-1:-1:-1;;;23263:128:0;;8290:2:1;23263:128:0::1;::::0;::::1;8272:21:1::0;8329:2;8309:18;;;8302:30;8368:34;8348:18;;;8341:62;8439:27;8419:18;;;8412:55;8484:19;;23263:128:0::1;8088:421:1::0;23263:128:0::1;23404:41;23433:4;23439:5;23404:28;:41::i;:::-;23149:304:::0;;:::o;30496:383::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;30595:9:::1;30591:281;30609:17:::0;;::::1;30591:281;;;30646:15;30664:8;;30673:1;30664:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30646:29:::0;-1:-1:-1;;;;;;30693:24:0;::::1;30712:4;30693:24;::::0;::::1;::::0;:64:::1;;-1:-1:-1::0;30749:8:0::1;::::0;-1:-1:-1;;;;;30738:19:0;;::::1;30749:8:::0;::::1;30738:19;;30693:64;:118;;;;;30797:13;-1:-1:-1::0;;;;;30778:33:0::1;:7;-1:-1:-1::0;;;;;30778:33:0::1;;;30693:118;30690:170;;;-1:-1:-1::0;;;;;30830:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:30;;-1:-1:-1;;30830:30:0::1;::::0;::::1;;;::::0;;30690:170:::1;-1:-1:-1::0;30627:3:0;::::1;::::0;::::1;:::i;:::-;;;;30591:281;;4611:413:::0;322:10;4704:4;4748:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4748:34:0;;;;;;;;;;4801:35;;;;4793:85;;;;-1:-1:-1;;;4793:85:0;;8988:2:1;4793:85:0;;;8970:21:1;9027:2;9007:18;;;9000:30;9066:34;9046:18;;;9039:62;-1:-1:-1;;;9117:18:1;;;9110:35;9162:19;;4793:85:0;8786:401:1;4793:85:0;4914:67;322:10;4937:7;4965:15;4946:16;:34;4914:8;:67::i;:::-;-1:-1:-1;5012:4:0;;4611:413;-1:-1:-1;;;4611:413:0:o;3369:175::-;3455:4;3472:42;322:10;3496:9;3507:6;3472:9;:42::i;22959:182::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23044:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23044:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23099:34;;1949:41:1;;;23099:34:0::1;::::0;1922:18:1;23099:34:0::1;;;;;;;22959:182:::0;;:::o;20630:497::-;769:6;;20738:4;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;20817:6:::1;20796:13;3206:12:::0;;;3118:108;20796:13:::1;:17;::::0;20812:1:::1;20796:17;:::i;:::-;20795:28;;;;:::i;:::-;20782:9;:41;;20760:144;;;::::0;-1:-1:-1;;;20760:144:0;;9394:2:1;20760:144:0::1;::::0;::::1;9376:21:1::0;9433:2;9413:18;;;9406:30;9472:34;9452:18;;;9445:62;-1:-1:-1;;;9523:18:1;;;9516:51;9584:19;;20760:144:0::1;9192:417:1::0;20760:144:0::1;20972:4;20951:13;3206:12:::0;;;3118:108;20951:13:::1;:17;::::0;20967:1:::1;20951:17;:::i;:::-;20950:26;;;;:::i;:::-;20937:9;:39;;20915:141;;;::::0;-1:-1:-1;;;20915:141:0;;9816:2:1;20915:141:0::1;::::0;::::1;9798:21:1::0;9855:2;9835:18;;;9828:30;9894:34;9874:18;;;9867:62;-1:-1:-1;;;9945:18:1;;;9938:50;10005:19;;20915:141:0::1;9614:416:1::0;20915:141:0::1;-1:-1:-1::0;21067:18:0::1;:30:::0;;;21115:4:::1;902:1;20630:497:::0;;;:::o;22469:482::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;22660:11:::1;:26:::0;;;22697:16:::1;:32:::0;;;22740:10:::1;:28:::0;;;22779:17:::1;:34:::0;;;22799:14;22753:15;22840:30:::1;22716:13:::0;22674:12;22840:30:::1;:::i;:::-;:43;;;;:::i;:::-;:63;;;;:::i;:::-;22824:13;:79:::0;;;22939:2:::1;-1:-1:-1::0;22922:19:0::1;22914:28;;;::::0;::::1;20425:135:::0;769:6;;20485:4;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;-1:-1:-1;20502:20:0::1;:28:::0;;-1:-1:-1;;20502:28:0::1;::::0;;;20425:135;:::o;1030:201::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1119:22:0;::::1;1111:73;;;::::0;-1:-1:-1;;;1111:73:0;;10237:2:1;1111:73:0::1;::::0;::::1;10219:21:1::0;10276:2;10256:18;;;10249:30;10315:34;10295:18;;;10288:62;-1:-1:-1;;;10366:18:1;;;10359:36;10412:19;;1111:73:0::1;10035:402:1::0;1111:73:0::1;1195:28;1214:8;1195:18;:28::i;:::-;1030:201:::0;:::o;23838:157::-;769:6;;-1:-1:-1;;;;;769:6:0;322:10;831:23;823:68;;;;-1:-1:-1;;;823:68:0;;;;;;;:::i;:::-;23945:9:::1;::::0;23917:38:::1;::::0;-1:-1:-1;;;;;23945:9:0;;::::1;::::0;23917:38;::::1;::::0;::::1;::::0;23945:9:::1;::::0;23917:38:::1;23966:9;:21:::0;;-1:-1:-1;;;;;;23966:21:0::1;-1:-1:-1::0;;;;;23966:21:0;;;::::1;::::0;;;::::1;::::0;;23838:157::o;6779:380::-;-1:-1:-1;;;;;6915:19:0;;6907:68;;;;-1:-1:-1;;;6907:68:0;;10644:2:1;6907:68:0;;;10626:21:1;10683:2;10663:18;;;10656:30;10722:34;10702:18;;;10695:62;-1:-1:-1;;;10773:18:1;;;10766:34;10817:19;;6907:68:0;10442:400:1;6907:68:0;-1:-1:-1;;;;;6994:21:0;;6986:68;;;;-1:-1:-1;;;6986:68:0;;11049:2:1;6986:68:0;;;11031:21:1;11088:2;11068:18;;;11061:30;11127:34;11107:18;;;11100:62;-1:-1:-1;;;11178:18:1;;;11171:32;11220:19;;6986:68:0;10847:398:1;6986:68:0;-1:-1:-1;;;;;7067:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7119:32;;2147:25:1;;;7119:32:0;;2120:18:1;7119:32:0;;;;;;;6779:380;;;:::o;24545:4817::-;-1:-1:-1;;;;;24677:18:0;;24669:68;;;;-1:-1:-1;;;24669:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24756:16:0;;24748:64;;;;-1:-1:-1;;;24748:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24832:13:0;;;;;;:7;:13;;;;;;;;24831:14;24823:41;;;;-1:-1:-1;;;24823:41:0;;12262:2:1;24823:41:0;;;12244:21:1;12301:2;12281:18;;;12274:30;-1:-1:-1;;;12320:18:1;;;12313:44;12374:18;;24823:41:0;12060:338:1;24823:41:0;24881:11;24877:93;;24909:28;24925:4;24931:2;24935:1;24909:15;:28::i;:::-;24545:4817;;;:::o;24877:93::-;24986:14;;;;24982:2389;;;769:6;;-1:-1:-1;;;;;25039:15:0;;;769:6;;25039:15;;;;:49;;-1:-1:-1;769:6:0;;-1:-1:-1;;;;;25075:13:0;;;769:6;;25075:13;;25039:49;:86;;;;-1:-1:-1;;;;;;25109:16:0;;;;25039:86;:128;;;;-1:-1:-1;;;;;;25146:21:0;;25160:6;25146:21;;25039:128;:158;;;;-1:-1:-1;25189:8:0;;-1:-1:-1;;;25189:8:0;;;;25188:9;25039:158;25017:2343;;;25237:13;;;;;;;25232:223;;-1:-1:-1;;;;;25309:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25338:23:0;;;;;;:19;:23;;;;;;;;25309:52;25275:160;;;;-1:-1:-1;;;25275:160:0;;12605:2:1;25275:160:0;;;12587:21:1;12644:2;12624:18;;;12617:30;-1:-1:-1;;;12663:18:1;;;12656:52;12725:18;;25275:160:0;12403:346:1;25275:160:0;25611:20;;;;25607:641;;;769:6;;-1:-1:-1;;;;;25686:13:0;;;769:6;;25686:13;;;;:72;;;25742:15;-1:-1:-1;;;;;25728:30:0;:2;-1:-1:-1;;;;;25728:30:0;;;25686:72;:129;;;;;25801:13;-1:-1:-1;;;;;25787:28:0;:2;-1:-1:-1;;;;;25787:28:0;;;25686:129;25656:573;;;25933:9;25904:39;;;;:28;:39;;;;;;25979:12;-1:-1:-1;25866:258:0;;;;-1:-1:-1;;;25866:258:0;;12956:2:1;25866:258:0;;;12938:21:1;12995:2;12975:18;;;12968:30;13034:34;13014:18;;;13007:62;13105:34;13085:18;;;13078:62;-1:-1:-1;;;13156:19:1;;;13149:40;13206:19;;25866:258:0;12754:477:1;25866:258:0;26180:9;26151:39;;;;:28;:39;;;;;26193:12;26151:54;;25656:573;-1:-1:-1;;;;;26322:31:0;;;;;;:25;:31;;;;;;;;:78;;;;-1:-1:-1;;;;;;26379:21:0;;;;;;:17;:21;;;;;;;;26378:22;26322:78;26296:1049;;;26487:6;;26477;:16;;26443:141;;;;-1:-1:-1;;;26443:141:0;;13438:2:1;26443:141:0;;;13420:21:1;13477:2;13457:18;;;13450:30;13516:34;13496:18;;;13489:62;-1:-1:-1;;;13567:18:1;;;13560:37;13614:19;;26443:141:0;13236:403:1;26443:141:0;26667:9;;-1:-1:-1;;;;;3335:18:0;;3308:7;3335:18;;;;;;;;;;;26641:22;;:6;:22;:::i;:::-;:35;;26607:140;;;;-1:-1:-1;;;26607:140:0;;13846:2:1;26607:140:0;;;13828:21:1;13885:2;13865:18;;;13858:30;-1:-1:-1;;;13904:18:1;;;13897:49;13963:18;;26607:140:0;13644:343:1;26607:140:0;26296:1049;;;-1:-1:-1;;;;;26845:29:0;;;;;;:25;:29;;;;;;;;:78;;;;-1:-1:-1;;;;;;26900:23:0;;;;;;:17;:23;;;;;;;;26899:24;26845:78;26819:526;;;27010:6;;27000;:16;;26966:142;;;;-1:-1:-1;;;26966:142:0;;14194:2:1;26966:142:0;;;14176:21:1;14233:2;14213:18;;;14206:30;14272:34;14252:18;;;14245:62;-1:-1:-1;;;14323:18:1;;;14316:38;14371:19;;26966:142:0;13992:404:1;26819:526:0;-1:-1:-1;;;;;27139:21:0;;;;;;:17;:21;;;;;;;;27134:211;;27245:9;;-1:-1:-1;;;;;3335:18:0;;3308:7;3335:18;;;;;;;;;;;27219:22;;:6;:22;:::i;:::-;:35;;27185:140;;;;-1:-1:-1;;;27185:140:0;;13846:2:1;27185:140:0;;;13828:21:1;13885:2;13865:18;;;13858:30;-1:-1:-1;;;13904:18:1;;;13897:49;13963:18;;27185:140:0;13644:343:1;27185:140:0;27432:4;27383:28;3335:18;;;;;;;;;;;27490;;27466:42;;;;;;;27539:35;;-1:-1:-1;27563:11:0;;;;;;;27539:35;:61;;;;-1:-1:-1;27592:8:0;;-1:-1:-1;;;27592:8:0;;;;27591:9;27539:61;:110;;;;-1:-1:-1;;;;;;27618:31:0;;;;;;:25;:31;;;;;;;;27617:32;27539:110;:153;;;;-1:-1:-1;;;;;;27667:25:0;;;;;;:19;:25;;;;;;;;27666:26;27539:153;:194;;;;-1:-1:-1;;;;;;27710:23:0;;;;;;:19;:23;;;;;;;;27709:24;27539:194;27521:326;;;27760:8;:15;;-1:-1:-1;;;;27760:15:0;-1:-1:-1;;;27760:15:0;;;27792:10;:8;:10::i;:::-;27819:8;:16;;-1:-1:-1;;;;27819:16:0;;;27521:326;27875:8;;-1:-1:-1;;;;;27985:25:0;;27859:12;27985:25;;;:19;:25;;;;;;27875:8;-1:-1:-1;;;27875:8:0;;;;;27874:9;;27985:25;;:52;;-1:-1:-1;;;;;;28014:23:0;;;;;;:19;:23;;;;;;;;27985:52;27981:100;;;-1:-1:-1;28064:5:0;27981:100;28093:12;28198:7;28194:1115;;;-1:-1:-1;;;;;28250:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28299:1;28283:13;;:17;28250:50;28246:914;;;28328:34;28358:3;28328:25;28339:13;;28328:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;28321:41;;28431:13;;28411:16;;28404:4;:23;;;;:::i;:::-;28403:41;;;;:::i;:::-;28381:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28501:13:0;;28487:10;;28480:17;;:4;:17;:::i;:::-;28479:35;;;;:::i;:::-;28463:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;28573:13:0;;28558:11;;28551:18;;:4;:18;:::i;:::-;28550:36;;;;:::i;:::-;28533:13;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;;28657:13:0;;28636:17;;28629:24;;:4;:24;:::i;:::-;28628:42;;;;:::i;:::-;28605:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;28246:914:0;;-1:-1:-1;28246:914:0;;-1:-1:-1;;;;;28732:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28782:1;28767:12;;:16;28732:51;28728:432;;;28811:33;28840:3;28811:24;28822:12;;28811:6;:10;;:24;;;;:::i;:33::-;28804:40;;28912:12;;28893:15;;28886:4;:22;;;;:::i;:::-;28885:39;;;;:::i;:::-;28863:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28980:12:0;;28967:9;;28960:16;;:4;:16;:::i;:::-;28959:33;;;;:::i;:::-;28943:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;29050:12:0;;29036:10;;29029:17;;:4;:17;:::i;:::-;29028:34;;;;:::i;:::-;29011:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;29132:12:0;;29112:16;;29105:23;;:4;:23;:::i;:::-;29104:40;;;;:::i;:::-;29081:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28728:432:0;29180:8;;29176:91;;29209:42;29225:4;29239;29246;29209:15;:42::i;:::-;29283:14;29293:4;29283:14;;:::i;:::-;;;28194:1115;29321:33;29337:4;29343:2;29347:6;29321:15;:33::i;:::-;24658:4704;;;;24545:4817;;;:::o;1239:191::-;1332:6;;;-1:-1:-1;;;;;1349:17:0;;;-1:-1:-1;;;;;;1349:17:0;;;;;;;1382:40;;1332:6;;;1349:17;1332:6;;1382:40;;1313:16;;1382:40;1302:128;1239:191;:::o;23461:188::-;-1:-1:-1;;;;;23544:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23544:39:0;;;;;;;;;;23601:40;;23544:39;;:31;23601:40;;;23461:188;;:::o;5032:733::-;-1:-1:-1;;;;;5172:20:0;;5164:70;;;;-1:-1:-1;;;5164:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5253:23:0;;5245:71;;;;-1:-1:-1;;;5245:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5413:17:0;;5389:21;5413:17;;;;;;;;;;;5449:23;;;;5441:74;;;;-1:-1:-1;;;5441:74:0;;14733:2:1;5441:74:0;;;14715:21:1;14772:2;14752:18;;;14745:30;14811:34;14791:18;;;14784:62;-1:-1:-1;;;14862:18:1;;;14855:36;14908:19;;5441:74:0;14531:402:1;5441:74:0;-1:-1:-1;;;;;5551:17:0;;;:9;:17;;;;;;;;;;;5571:22;;;5551:42;;5615:20;;;;;;;;:30;;5587:6;;5551:9;5615:30;;5587:6;;5615:30;:::i;:::-;;;;;;;;5680:9;-1:-1:-1;;;;;5663:35:0;5672:6;-1:-1:-1;;;;;5663:35:0;;5691:6;5663:35;;;;2147:25:1;;2135:2;2120:18;;2001:177;5663:35:0;;;;;;;;5711:46;24545:4817;30887:1918;30970:4;30926:23;3335:18;;;;;;;;;;;30926:50;;30987:25;31106:19;;31078:12;;31049:13;;31015:18;;:47;;;;:::i;:::-;:75;;;;:::i;:::-;:110;;;;:::i;:::-;30987:138;-1:-1:-1;31136:12:0;31165:20;;;:46;;-1:-1:-1;31189:22:0;;31165:46;31161:85;;;31228:7;;;30887:1918::o;31161:85::-;31280:18;;:23;;31301:2;31280:23;:::i;:::-;31262:15;:41;31258:115;;;31338:18;;:23;;31359:2;31338:23;:::i;:::-;31320:41;;31258:115;31434:23;31521:1;31501:17;31479:18;;31461:15;:36;;;;:::i;:::-;31460:58;;;;:::i;:::-;:62;;;;:::i;:::-;31434:88;-1:-1:-1;31533:26:0;31562:36;:15;31434:88;31562:19;:36::i;:::-;31533:65;-1:-1:-1;31639:21:0;31673:36;31533:65;31673:16;:36::i;:::-;31722:18;31743:44;:21;31769:17;31743:25;:44::i;:::-;31722:65;;31800:18;31821:52;31855:17;31821:29;31836:13;;31821:10;:14;;:29;;;;:::i;:52::-;31800:73;;31884:17;31904:51;31937:17;31904:28;31919:12;;31904:10;:14;;:28;;;;:::i;:51::-;31884:71;;31966:24;31993:58;32033:17;31993:35;32008:19;;31993:10;:14;;:35;;;;:::i;:58::-;31966:85;-1:-1:-1;32064:23:0;31966:85;32116:9;32090:23;32103:10;32090;:23;:::i;:::-;:35;;;;:::i;:::-;:54;;;;:::i;:::-;32178:1;32157:18;:22;;;32190:13;:17;;;32218:12;:16;;;32245:19;:23;;;32303:9;;32295:45;;32064:80;;-1:-1:-1;;;;;;32303:9:0;;32326;;32295:45;32178:1;32295:45;32326:9;32303;32295:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32281:59:0;;-1:-1:-1;;32357:19:0;;;;;:42;;;32398:1;32380:15;:19;32357:42;32353:278;;;32416:46;32429:15;32446;32416:12;:46::i;:::-;32586:18;;32482:137;;;15350:25:1;;;15406:2;15391:18;;15384:34;;;15434:18;;;15427:34;;;;32482:137:0;;;;;;15338:2:1;32482:137:0;;;32353:278;32663:16;;32655:59;;-1:-1:-1;;;;;32663:16:0;;;;32693;;32655:59;;;;32693:16;32663;32655:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32747:10:0;;32739:58;;32641:73;;-1:-1:-1;;;;;;32747:10:0;;32771:21;;32739:58;;;;32771:21;32747:10;32739:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;30887:1918:0:o;8785:98::-;8843:7;8870:5;8874:1;8870;:5;:::i;:::-;8863:12;8785:98;-1:-1:-1;;;8785:98:0:o;8891:::-;8949:7;8976:5;8980:1;8976;:5;:::i;8679:98::-;8737:7;8764:5;8768:1;8764;:5;:::i;29370:589::-;29520:16;;;29534:1;29520:16;;;;;;;;29496:21;;29520:16;;;;;;;;;;-1:-1:-1;29520:16:0;29496:40;;29565:4;29547;29552:1;29547:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29547:23:0;;;-1:-1:-1;;;;;29547:23:0;;;;;29591:15;-1:-1:-1;;;;;29591:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29581:4;29586:1;29581:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29581:32:0;;;-1:-1:-1;;;;;29581:32:0;;;;;29626:62;29643:4;29658:15;29676:11;29626:8;:62::i;:::-;29727:224;;-1:-1:-1;;;29727:224:0;;-1:-1:-1;;;;;29727:15:0;:66;;;;:224;;29808:11;;29834:1;;29878:4;;29905;;29925:15;;29727:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29425:534;29370:589;:::o;29967:521::-;30115:62;30132:4;30147:15;30165:11;30115:8;:62::i;:::-;30424:15;;30220:260;;-1:-1:-1;;;30220:260:0;;30292:4;30220:260;;;17186:34:1;17236:18;;;17229:34;;;30338:1:0;17279:18:1;;;17272:34;;;17322:18;;;17315:34;-1:-1:-1;;;;;30424:15:0;;;17365:19:1;;;17358:44;30454:15:0;17418:19:1;;;17411:35;30220:15:0;:31;;;;;;30259:9;;17120:19:1;;30220:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29967:521;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:160::-;467:20;;523:13;;516:21;506:32;;496:60;;552:1;549;542:12;567:315;632:6;640;693:2;681:9;672:7;668:23;664:32;661:52;;;709:1;706;699:12;661:52;748:9;735:23;767:31;792:5;767:31;:::i;:::-;817:5;-1:-1:-1;841:35:1;872:2;857:18;;841:35;:::i;:::-;831:45;;567:315;;;;;:::o;887:597::-;999:4;1028:2;1057;1046:9;1039:21;1089:6;1083:13;1132:6;1127:2;1116:9;1112:18;1105:34;1157:1;1167:140;1181:6;1178:1;1175:13;1167:140;;;1276:14;;;1272:23;;1266:30;1242:17;;;1261:2;1238:26;1231:66;1196:10;;1167:140;;;1325:6;1322:1;1319:13;1316:91;;;1395:1;1390:2;1381:6;1370:9;1366:22;1362:31;1355:42;1316:91;-1:-1:-1;1468:2:1;1447:15;-1:-1:-1;;1443:29:1;1428:45;;;;1475:2;1424:54;;887:597;-1:-1:-1;;;887:597:1:o;1489:315::-;1557:6;1565;1618:2;1606:9;1597:7;1593:23;1589:32;1586:52;;;1634:1;1631;1624:12;1586:52;1673:9;1660:23;1692:31;1717:5;1692:31;:::i;:::-;1742:5;1794:2;1779:18;;;;1766:32;;-1:-1:-1;;;1489:315:1:o;2418:180::-;2477:6;2530:2;2518:9;2509:7;2505:23;2501:32;2498:52;;;2546:1;2543;2536:12;2498:52;-1:-1:-1;2569:23:1;;2418:180;-1:-1:-1;2418:180:1:o;2603:456::-;2680:6;2688;2696;2749:2;2737:9;2728:7;2724:23;2720:32;2717:52;;;2765:1;2762;2755:12;2717:52;2804:9;2791:23;2823:31;2848:5;2823:31;:::i;:::-;2873:5;-1:-1:-1;2930:2:1;2915:18;;2902:32;2943:33;2902:32;2943:33;:::i;:::-;2603:456;;2995:7;;-1:-1:-1;;;3049:2:1;3034:18;;;;3021:32;;2603:456::o;3272:385::-;3358:6;3366;3374;3382;3435:3;3423:9;3414:7;3410:23;3406:33;3403:53;;;3452:1;3449;3442:12;3403:53;-1:-1:-1;;3475:23:1;;;3545:2;3530:18;;3517:32;;-1:-1:-1;3596:2:1;3581:18;;3568:32;;3647:2;3632:18;3619:32;;-1:-1:-1;3272:385:1;-1:-1:-1;3272:385:1:o;3851:180::-;3907:6;3960:2;3948:9;3939:7;3935:23;3931:32;3928:52;;;3976:1;3973;3966:12;3928:52;3999:26;4015:9;3999:26;:::i;4036:689::-;4128:6;4136;4144;4197:2;4185:9;4176:7;4172:23;4168:32;4165:52;;;4213:1;4210;4203:12;4165:52;4253:9;4240:23;4282:18;4323:2;4315:6;4312:14;4309:34;;;4339:1;4336;4329:12;4309:34;4377:6;4366:9;4362:22;4352:32;;4422:7;4415:4;4411:2;4407:13;4403:27;4393:55;;4444:1;4441;4434:12;4393:55;4484:2;4471:16;4510:2;4502:6;4499:14;4496:34;;;4526:1;4523;4516:12;4496:34;4581:7;4574:4;4564:6;4561:1;4557:14;4553:2;4549:23;4545:34;4542:47;4539:67;;;4602:1;4599;4592:12;4539:67;4633:4;4625:13;;;;-1:-1:-1;4657:6:1;-1:-1:-1;4682:37:1;;4698:20;;;-1:-1:-1;4682:37:1;:::i;:::-;4672:47;;4036:689;;;;;:::o;4730:388::-;4798:6;4806;4859:2;4847:9;4838:7;4834:23;4830:32;4827:52;;;4875:1;4872;4865:12;4827:52;4914:9;4901:23;4933:31;4958:5;4933:31;:::i;:::-;4983:5;-1:-1:-1;5040:2:1;5025:18;;5012:32;5053:33;5012:32;5053:33;:::i;:::-;5105:7;5095:17;;;4730:388;;;;;:::o;5123:356::-;5325:2;5307:21;;;5344:18;;;5337:30;5403:34;5398:2;5383:18;;5376:62;5470:2;5455:18;;5123:356::o;5484:380::-;5563:1;5559:12;;;;5606;;;5627:61;;5681:4;5673:6;5669:17;5659:27;;5627:61;5734:2;5726:6;5723:14;5703:18;5700:38;5697:161;;;5780:10;5775:3;5771:20;5768:1;5761:31;5815:4;5812:1;5805:15;5843:4;5840:1;5833:15;5697:161;;5484:380;;;:::o;5869:127::-;5930:10;5925:3;5921:20;5918:1;5911:31;5961:4;5958:1;5951:15;5985:4;5982:1;5975:15;6001:168;6041:7;6107:1;6103;6099:6;6095:14;6092:1;6089:21;6084:1;6077:9;6070:17;6066:45;6063:71;;;6114:18;;:::i;:::-;-1:-1:-1;6154:9:1;;6001:168::o;6174:217::-;6214:1;6240;6230:132;;6284:10;6279:3;6275:20;6272:1;6265:31;6319:4;6316:1;6309:15;6347:4;6344:1;6337:15;6230:132;-1:-1:-1;6376:9:1;;6174:217::o;7612:128::-;7652:3;7683:1;7679:6;7676:1;7673:13;7670:39;;;7689:18;;:::i;:::-;-1:-1:-1;7725:9:1;;7612:128::o;8514:127::-;8575:10;8570:3;8566:20;8563:1;8556:31;8606:4;8603:1;8596:15;8630:4;8627:1;8620:15;8646:135;8685:3;-1:-1:-1;;8706:17:1;;8703:43;;;8726:18;;:::i;:::-;-1:-1:-1;8773:1:1;8762:13;;8646:135::o;11250:401::-;11452:2;11434:21;;;11491:2;11471:18;;;11464:30;11530:34;11525:2;11510:18;;11503:62;-1:-1:-1;;;11596:2:1;11581:18;;11574:35;11641:3;11626:19;;11250:401::o;11656:399::-;11858:2;11840:21;;;11897:2;11877:18;;;11870:30;11936:34;11931:2;11916:18;;11909:62;-1:-1:-1;;;12002:2:1;11987:18;;11980:33;12045:3;12030:19;;11656:399::o;14401:125::-;14441:4;14469:1;14466;14463:8;14460:34;;;14474:18;;:::i;:::-;-1:-1:-1;14511:9:1;;14401:125::o;15604:251::-;15674:6;15727:2;15715:9;15706:7;15702:23;15698:32;15695:52;;;15743:1;15740;15733:12;15695:52;15775:9;15769:16;15794:31;15819:5;15794:31;:::i;15860:980::-;16122:4;16170:3;16159:9;16155:19;16201:6;16190:9;16183:25;16227:2;16265:6;16260:2;16249:9;16245:18;16238:34;16308:3;16303:2;16292:9;16288:18;16281:31;16332:6;16367;16361:13;16398:6;16390;16383:22;16436:3;16425:9;16421:19;16414:26;;16475:2;16467:6;16463:15;16449:29;;16496:1;16506:195;16520:6;16517:1;16514:13;16506:195;;;16585:13;;-1:-1:-1;;;;;16581:39:1;16569:52;;16676:15;;;;16641:12;;;;16617:1;16535:9;16506:195;;;-1:-1:-1;;;;;;;16757:32:1;;;;16752:2;16737:18;;16730:60;-1:-1:-1;;;16821:3:1;16806:19;16799:35;16718:3;15860:980;-1:-1:-1;;;15860:980:1:o;17457:306::-;17545:6;17553;17561;17614:2;17602:9;17593:7;17589:23;17585:32;17582:52;;;17630:1;17627;17620:12;17582:52;17659:9;17653:16;17643:26;;17709:2;17698:9;17694:18;17688:25;17678:35;;17753:2;17742:9;17738:18;17732:25;17722:35;;17457:306;;;;;:::o

Swarm Source

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