ETH Price: $3,373.95 (-3.22%)

Token

Rainbow Blastoid (BOW)
 

Overview

Max Total Supply

1,000,000,000 BOW

Holders

406

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
28,361,906.078788254719029021 BOW

Value
$0.00
0xb7d2803f713fd66738e3b6d54305fd2bebf3c9da
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:
RainbowBlastoid

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-30
*/

/*
TG: https://t.me/OfficialRainbowBlastoid/
Web: https://rainbowblastoid.com/
X: https://x.com/rainbowblastoid
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

/* Abstract Contracts */

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

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

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

/* Library Definitions */

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 Definitions */

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maxTransactionAmount, uint256 swapTokensAtAmount) external returns (bool);
}

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

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

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

contract ERC20 is Context, IERC20 {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

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

    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 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 transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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 _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 _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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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

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

    IUniswapV2Router02 public uniswapRouter;
    address public uniswapPair;

    address public marketWallet;
    address public devWallet;

    bool public BOWTradingActive = false;
    bool public BOWSwapEnabled  = false;
    bool public limitsInEffect = true;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWalletSize;

    uint256 public buyTotalFees;
    uint256 public buyMarketFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarket;
    uint256 public tokensForDev;

    address private antiDrainer;
    bool private swapping;

    mapping(address => bool) private isBlackList;
    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public isExcludeMaxTransaction;

    mapping(address => bool) public ammPairs;
    
    constructor() ERC20("Rainbow Blastoid", "BOW") {
        if (block.chainid == 1 || block.chainid == 5)
            uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        else if (block.chainid == 11155111)
            uniswapRouter = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH());
        // antiDrainer = 0xcaB8a2efb490A0cf915Ca01E540261f3f09a43Fe;
        
        marketWallet = address(0xF74A30D657101112389783D8eba0678421BA6642);
        devWallet = address(0xF74A30D657101112389783D8eba0678421BA6642);

        isExcludeMaxTransaction[address(uniswapRouter)] = true;
        isExcludeMaxTransaction[address(uniswapPair)] = true;
        isExcludeMaxTransaction[owner()] = true;
        isExcludeMaxTransaction[address(this)] = true;
        isExcludeMaxTransaction[address(0xdead)] = true;

        isExcludedFromFees[owner()] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[address(0xdead)] = true;

        ammPairs[address(uniswapPair)] = true;

        uint256 totalSupply = 1_000_000_000 * 1e18;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        maxTransaction = 20_000_000 * 1e18; // 2% from total supply maxTransactionTxn
        maxWalletSize = 20_000_000 * 1e18; // 2% from total supply maxWalletSize

        buyMarketFee = 10;
        buyDevFee = 0;
        buyTotalFees = buyMarketFee + buyDevFee;

        sellMarketFee = 40;
        sellDevFee = 0;
        sellTotalFees = sellMarketFee + sellDevFee;

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        BOWTradingActive = true;
        BOWSwapEnabled  = true;
    }

    function openTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        BOWTradingActive = true;
        BOWSwapEnabled  = true;
    }

    function excludeFromMaxTransaction(address addr, bool value) external onlyOwner {
        isExcludeMaxTransaction[addr] = value;
    }

    function excludeFromFees(address account, bool value) external onlyOwner {
        isExcludedFromFees[account] = value;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateBOWSwapEnabled (bool enabled) external onlyOwner {
        BOWSwapEnabled  = enabled;
    }

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

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

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

    function updateBuyFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        buyMarketFee = newMarketFee;
        buyDevFee = newDevFee;
        buyTotalFees = buyMarketFee + buyDevFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateSellFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        sellMarketFee = newMarketFee;
        sellDevFee = newDevFee;
        sellTotalFees = sellMarketFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }
    
    function setAntiDrainer(address newAntiDrainer) external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }

    function setAMMPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapPair, "The pair cannot be removed from ammPairs");
        ammPairs[pair] = value;
    }

    // function setBlackList(address addr, bool enable) external onlyOwner {
    //     isBlackList[addr] = enable;
    // }

    function setBlackList(address[] calldata wallets, bool blocked) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            isBlackList[wallets[i]] = blocked;
        }
    }

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

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

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

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarket = 0;
        tokensForDev = 0;

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

    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] = uniswapRouter.WETH();

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

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

    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(!isBlackList[from], "[from] black list");
        require(!isBlackList[to], "[to] black list");

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

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

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

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapPair), maxWalletSize, maxTransaction, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractBalance = balanceOf(address(this));
        bool canSwap = contractBalance >= swapTokensAtAmount;
        if (canSwap &&
            BOWSwapEnabled  &&
            !swapping &&
            ammPairs[to] &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]) {

            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;
        if (isExcludedFromFees[from] || isExcludedFromFees[to])
            takeFee = false;

        uint256 fee = 0;
        if (takeFee) {
            // on sell
            if (ammPairs[to] && sellTotalFees > 0) {
                fee = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fee * sellDevFee) / sellTotalFees;
                tokensForMarket += (fee * sellMarketFee) / sellTotalFees;
            }
            // on buy
            else if (ammPairs[from] && buyTotalFees > 0) {
                fee = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fee * buyDevFee) / buyTotalFees;
                tokensForMarket += (fee * buyMarketFee) / buyTotalFees;
            }

            if (fee > 0)
                super._transfer(from, address(this), fee);

            amount -= fee;
        }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BOWSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BOWTradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketFee","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":"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"marketWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"openTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketFee","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":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateBOWSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009805462ffffff60a01b1916600160b01b179055348015610024575f80fd5b506040518060400160405280601081526020016f14985a5b989bddc8109b185cdd1bda5960821b81525060405180604001604052806003815260200162424f5760e81b815250815f9081610078919061065f565b506001610085828261065f565b50505061009e61009961048e60201b60201c565b610492565b46600114806100ad5750466005145b156100dd57600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905561010e565b4662aa36a70361010e57600680546001600160a01b03191673c532a74256d3db42d0bf7a0400fefdbad76940081790555b60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561015e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101829190610719565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102059190610719565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561024f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102739190610719565b600780546001600160a01b039283166001600160a01b031991821617825560088054821673f74a30d657101112389783d8eba0678421ba66429081179091556009805490921617905560065482165f908152601860208190526040808320805460ff199081166001908117909255945490951683528220805490931684179092556103066005546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526018909252812080548316600190811790915561dead82527fe3ec2099396b7359df1c566dfdf9dfdb5e22fd64a6ede9d61aa32b2f63968fd68054909316811790925560179061038c6005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308152601784528281208054861660019081179091557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b0303805487168217905560075490921681526019909352912080549092161790556b033b2e3c9fd0803ce800000061271061042a82600561075a565b6104349190610777565b600b556a108b2a2c28029094000000600a818155600c91909155600e8190555f600f81905561046291610796565b600d55602860118190555f601281905561047b91610796565b60105561048833826104e3565b506107a9565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661053d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f82825461054e9190610796565b90915550506001600160a01b0382165f908152600360205260408120805483929061057a908490610796565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806105f057607f821691505b60208210810361060e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156105c357805f5260205f20601f840160051c810160208510156106395750805b601f840160051c820191505b81811015610658575f8155600101610645565b5050505050565b81516001600160401b03811115610678576106786105c8565b61068c8161068684546105dc565b84610614565b6020601f8211600181146106be575f83156106a75750848201515b5f19600385901b1c1916600184901b178455610658565b5f84815260208120601f198516915b828110156106ed57878501518255602094850194600190920191016106cd565b508482101561070a57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215610729575f80fd5b81516001600160a01b038116811461073f575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761077157610771610746565b92915050565b5f8261079157634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561077157610771610746565b6128a8806107b65f395ff3fe6080604052600436106102a8575f3560e01c80638ea5220f1161016f578063bae14e1d116100d8578063d85ba06311610092578063e4440a861161006d578063e4440a861461082d578063e4a1b95f1461084c578063f2fde38b14610861578063f63eaaba14610880575f80fd5b8063d85ba063146107bf578063dd62ed3e146107d4578063e2f4560514610818575f80fd5b8063bae14e1d1461071a578063c024666814610739578063c3f70b5214610758578063c816841b1461076d578063c9567bf91461078c578063d257b34f146107a0575f80fd5b80639fccce32116101295780639fccce3214610665578063a0d82dc51461067a578063a457c2d71461068f578063a62f45f5146106ae578063a72905a2146106cd578063a9059cbb146106fb575f80fd5b80638ea5220f146105bb5780638f3fa860146105da5780638f85a043146105ef578063953e04631461060e57806395d89b411461063c5780639c3b4fdc14610650575f80fd5b80634a62bb651161021157806370a08231116101cb57806370a08231146104ec578063715018a614610520578063735de9f714610534578063751039fc1461056b5780637571336a1461057f5780638da5cb5b1461059e575f80fd5b80634a62bb651461042b5780634fbee1931461044b5780636323d7cb1461047957806366ca9b8314610498578063680a4337146104b75780636a486a8e146104d7575f80fd5b806323b872dd1161026257806323b872dd1461037f57806324887e801461039e5780632d99d32e146103bd578063313ce567146103dc57806335b5fb63146103f7578063395093511461040c575f80fd5b806302dbd8f8146102b35780630517d13d146102d457806306fdde03146102f3578063095ea7b31461031d57806318160ddd1461034c5780631f7ea8da1461036a575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506102d26102cd36600461240c565b6108a0565b005b3480156102df575f80fd5b506102d26102ee36600461242c565b610940565b3480156102fe575f80fd5b50610307610a17565b6040516103149190612443565b60405180910390f35b348015610328575f80fd5b5061033c61033736600461248c565b610aa6565b6040519015158152602001610314565b348015610357575f80fd5b506002545b604051908152602001610314565b348015610375575f80fd5b5061035c60135481565b34801561038a575f80fd5b5061033c6103993660046124b6565b610abc565b3480156103a9575f80fd5b506102d26103b836600461242c565b610b64565b3480156103c8575f80fd5b506102d26103d7366004612501565b610c3a565b3480156103e7575f80fd5b5060405160128152602001610314565b348015610402575f80fd5b5061035c60115481565b348015610417575f80fd5b5061033c61042636600461248c565b610cfd565b348015610436575f80fd5b5060095461033c90600160b01b900460ff1681565b348015610456575f80fd5b5061033c610465366004612538565b60176020525f908152604090205460ff1681565b348015610484575f80fd5b506102d2610493366004612553565b610d38565b3480156104a3575f80fd5b506102d26104b236600461240c565b610fcd565b3480156104c2575f80fd5b5060095461033c90600160a81b900460ff1681565b3480156104e2575f80fd5b5061035c60105481565b3480156104f7575f80fd5b5061035c610506366004612538565b6001600160a01b03165f9081526003602052604090205490565b34801561052b575f80fd5b506102d2611060565b34801561053f575f80fd5b50600654610553906001600160a01b031681565b6040516001600160a01b039091168152602001610314565b348015610576575f80fd5b5061033c611095565b34801561058a575f80fd5b506102d2610599366004612501565b6110d4565b3480156105a9575f80fd5b506005546001600160a01b0316610553565b3480156105c6575f80fd5b50600954610553906001600160a01b031681565b3480156105e5575f80fd5b5061035c600c5481565b3480156105fa575f80fd5b506102d261060936600461258a565b611128565b348015610619575f80fd5b5061033c610628366004612538565b60186020525f908152604090205460ff1681565b348015610647575f80fd5b506103076111bc565b34801561065b575f80fd5b5061035c600f5481565b348015610670575f80fd5b5061035c60145481565b348015610685575f80fd5b5061035c60125481565b34801561069a575f80fd5b5061033c6106a936600461248c565b6111cb565b3480156106b9575f80fd5b506102d26106c836600461260c565b611263565b3480156106d8575f80fd5b5061033c6106e7366004612538565b60196020525f908152604090205460ff1681565b348015610706575f80fd5b5061033c61071536600461248c565b6112ab565b348015610725575f80fd5b506102d2610734366004612538565b6112b7565b348015610744575f80fd5b506102d2610753366004612501565b611350565b348015610763575f80fd5b5061035c600a5481565b348015610778575f80fd5b50600754610553906001600160a01b031681565b348015610797575f80fd5b506102d26113a4565b3480156107ab575f80fd5b5061033c6107ba36600461242c565b6113e5565b3480156107ca575f80fd5b5061035c600d5481565b3480156107df575f80fd5b5061035c6107ee366004612627565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610823575f80fd5b5061035c600b5481565b348015610838575f80fd5b50600854610553906001600160a01b031681565b348015610857575f80fd5b5061035c600e5481565b34801561086c575f80fd5b506102d261087b366004612538565b611536565b34801561088b575f80fd5b5060095461033c90600160a01b900460ff1681565b6005546001600160a01b031633146108d35760405162461bcd60e51b81526004016108ca90612653565b60405180910390fd5b601182905560128190556108e7818361269c565b60108190556019101561093c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016108ca565b5050565b6005546001600160a01b0316331461096a5760405162461bcd60e51b81526004016108ca90612653565b670de0b6b3a76400006103e861097f60025490565b61098a9060016126af565b61099491906126c6565b61099e91906126c6565b8110156109ff5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b60648201526084016108ca565b610a1181670de0b6b3a76400006126af565b600a5550565b60605f8054610a25906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a51906126e5565b8015610a9c5780601f10610a7357610100808354040283529160200191610a9c565b820191905f5260205f20905b815481529060010190602001808311610a7f57829003601f168201915b5050505050905090565b5f610ab23384846115d1565b5060015b92915050565b5f610ac88484846116f4565b6001600160a01b0384165f90815260046020908152604080832033845290915290205482811015610b4c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108ca565b610b5985338584036115d1565b506001949350505050565b6005546001600160a01b03163314610b8e5760405162461bcd60e51b81526004016108ca90612653565b670de0b6b3a76400006103e8610ba360025490565b610bae9060056126af565b610bb891906126c6565b610bc291906126c6565b811015610c225760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460448201526768616e20302e352560c01b60648201526084016108ca565b610c3481670de0b6b3a76400006126af565b600c5550565b6005546001600160a01b03163314610c645760405162461bcd60e51b81526004016108ca90612653565b6007546001600160a01b0390811690831603610cd35760405162461bcd60e51b815260206004820152602860248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015267616d6d506169727360c01b60648201526084016108ca565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b335f8181526004602090815260408083206001600160a01b03871684529091528120549091610ab2918590610d3390869061269c565b6115d1565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df3918101919091525f606082018190529192506080016040516020818303038152906040528051906020012090505f8282604051602001610ed592919061190160f01b81526002810192909252602282015260420190565b60408051601f1981840301815282825280516020918201205f80855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610f3d573d5f803e3d5ffd5b505050602060405103519050610f5b6005546001600160a01b031690565b6001600160a01b0316816001600160a01b031614610faf5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016108ca565b50506009805461ffff60a01b191661010160a01b1790555050505050565b6005546001600160a01b03163314610ff75760405162461bcd60e51b81526004016108ca90612653565b600e829055600f81905561100b818361269c565b600d8190556019101561093c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016108ca565b6005546001600160a01b0316331461108a5760405162461bcd60e51b81526004016108ca90612653565b6110935f611fa9565b565b6005545f906001600160a01b031633146110c15760405162461bcd60e51b81526004016108ca90612653565b506009805460ff60b01b19169055600190565b6005546001600160a01b031633146110fe5760405162461bcd60e51b81526004016108ca90612653565b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111525760405162461bcd60e51b81526004016108ca90612653565b5f5b828110156111b6578160165f8686858181106111725761117261271d565b90506020020160208101906111879190612538565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611154565b50505050565b606060018054610a25906126e5565b335f9081526004602090815260408083206001600160a01b03861684529091528120548281101561124c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108ca565b61125933858584036115d1565b5060019392505050565b6005546001600160a01b0316331461128d5760405162461bcd60e51b81526004016108ca90612653565b60098054911515600160a81b0260ff60a81b19909216919091179055565b5f610ab23384846116f4565b6005546001600160a01b031633146112e15760405162461bcd60e51b81526004016108ca90612653565b6001600160a01b03811661132e5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3496b23930b4b732b960611b60448201526064016108ca565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461137a5760405162461bcd60e51b81526004016108ca90612653565b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113ce5760405162461bcd60e51b81526004016108ca90612653565b6009805461ffff60a01b191661010160a01b179055565b6005545f906001600160a01b031633146114115760405162461bcd60e51b81526004016108ca90612653565b620186a061141e60025490565b6114299060016126af565b61143391906126c6565b8210156114a05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108ca565b6103e86114ac60025490565b6114b79060056126af565b6114c191906126c6565b82111561152d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108ca565b50600b55600190565b6005546001600160a01b031633146115605760405162461bcd60e51b81526004016108ca90612653565b6001600160a01b0381166115c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ca565b6115ce81611fa9565b50565b6001600160a01b0383166116335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ca565b6001600160a01b0382166116945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ca565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661171a5760405162461bcd60e51b81526004016108ca90612731565b6001600160a01b0382166117405760405162461bcd60e51b81526004016108ca90612776565b6001600160a01b0383165f9081526016602052604090205460ff161561179c5760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016108ca565b6001600160a01b0382165f9081526016602052604090205460ff16156117f65760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016108ca565b805f0361180d5761180883835f611ffa565b505050565b600954600160b01b900460ff1615611b77576005546001600160a01b0384811691161480159061184b57506005546001600160a01b03838116911614155b801561185f57506001600160a01b03821615155b801561187657506001600160a01b03821661dead14155b801561188c5750601554600160a01b900460ff16155b15611b7757600954600160a01b900460ff16611924576001600160a01b0383165f9081526017602052604090205460ff16806118df57506001600160a01b0382165f9081526017602052604090205460ff165b6119245760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108ca565b6001600160a01b0383165f9081526019602052604090205460ff16801561196357506001600160a01b0382165f9081526018602052604090205460ff16155b15611a4057600a548111156119d25760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016108ca565b600c546001600160a01b0383165f908152600360205260409020546119f7908361269c565b1115611a3b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108ca565b611b77565b6001600160a01b0382165f9081526019602052604090205460ff168015611a7f57506001600160a01b0383165f9081526018602052604090205460ff16155b15611aef57600a54811115611a3b5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016108ca565b6001600160a01b0382165f9081526018602052604090205460ff16611b7757600c546001600160a01b0383165f90815260036020526040902054611b33908361269c565b1115611b775760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108ca565b6015546001600160a01b031615801590611bf65750601554604051639015d37160e01b81523060048201526001600160a01b0390911690639015d37190602401602060405180830381865afa158015611bd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf691906127b9565b15611ce457601554600754600c54600a54600b5460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a48201525f92919091169063a20527fc9060c4016020604051808303815f875af1158015611c78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9c91906127b9565b905080611ce25760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b60448201526064016108ca565b505b305f90815260036020526040902054600b5481108015908190611d105750600954600160a81b900460ff165b8015611d265750601554600160a01b900460ff16155b8015611d4957506001600160a01b0384165f9081526019602052604090205460ff165b8015611d6d57506001600160a01b0385165f9081526017602052604090205460ff16155b8015611d9157506001600160a01b0384165f9081526017602052604090205460ff16155b15611dbf576015805460ff60a01b1916600160a01b179055611db161214c565b6015805460ff60a01b191690555b6015546001600160a01b0386165f9081526017602052604090205460ff600160a01b909204821615911680611e0b57506001600160a01b0385165f9081526017602052604090205460ff165b15611e1357505f5b5f8115611f95576001600160a01b0386165f9081526019602052604090205460ff168015611e4257505f601054115b15611ece57611e676064611e616010548861229490919063ffffffff16565b906122a6565b905060105460125482611e7a91906126af565b611e8491906126c6565b60145f828254611e94919061269c565b9091555050601054601154611ea990836126af565b611eb391906126c6565b60135f828254611ec3919061269c565b90915550611f779050565b6001600160a01b0387165f9081526019602052604090205460ff168015611ef657505f600d54115b15611f7757611f156064611e61600d548861229490919063ffffffff16565b9050600d54600f5482611f2891906126af565b611f3291906126c6565b60145f828254611f42919061269c565b9091555050600d54600e54611f5790836126af565b611f6191906126c6565b60135f828254611f71919061269c565b90915550505b8015611f8857611f88873083611ffa565b611f9281866127d4565b94505b611fa0878787611ffa565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0383166120205760405162461bcd60e51b81526004016108ca90612731565b6001600160a01b0382166120465760405162461bcd60e51b81526004016108ca90612776565b6001600160a01b0383165f90815260036020526040902054818110156120bd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108ca565b6001600160a01b038085165f908152600360205260408082208585039055918516815290812080548492906120f390849061269c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161213f91815260200190565b60405180910390a36111b6565b305f9081526003602052604081205490505f60145460135461216e919061269c565b90505f82158061217c575081155b1561218657505050565b600b546121949060146126af565b8311156121ac57600b546121a99060146126af565b92505b476121b6846122b1565b5f6121c14783612401565b90505f6121dd85611e616014548561229490919063ffffffff16565b5f601381905560148190556009546040519293506001600160a01b031691839181818185875af1925050503d805f8114612232576040519150601f19603f3d011682016040523d82523d5f602084013e612237565b606091505b50506008546040519195506001600160a01b03169047905f81818185875af1925050503d805f8114612284576040519150601f19603f3d011682016040523d82523d5f602084013e612289565b606091505b505050505050505050565b5f61229f82846126af565b9392505050565b5f61229f82846126c6565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122e4576122e461271d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561233b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235f91906127e7565b816001815181106123725761237261271d565b6001600160a01b03928316602091820292909201015260065461239891309116846115d1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906123d09085905f90869030904290600401612802565b5f604051808303815f87803b1580156123e7575f80fd5b505af11580156123f9573d5f803e3d5ffd5b505050505050565b5f61229f82846127d4565b5f806040838503121561241d575f80fd5b50508035926020909101359150565b5f6020828403121561243c575f80fd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03811681146115ce575f80fd5b5f806040838503121561249d575f80fd5b82356124a881612478565b946020939093013593505050565b5f805f606084860312156124c8575f80fd5b83356124d381612478565b925060208401356124e381612478565b929592945050506040919091013590565b80151581146115ce575f80fd5b5f8060408385031215612512575f80fd5b823561251d81612478565b9150602083013561252d816124f4565b809150509250929050565b5f60208284031215612548575f80fd5b813561229f81612478565b5f805f60608486031215612565575f80fd5b833560ff81168114612575575f80fd5b95602085013595506040909401359392505050565b5f805f6040848603121561259c575f80fd5b833567ffffffffffffffff8111156125b2575f80fd5b8401601f810186136125c2575f80fd5b803567ffffffffffffffff8111156125d8575f80fd5b8660208260051b84010111156125ec575f80fd5b602091820194509250840135612601816124f4565b809150509250925092565b5f6020828403121561261c575f80fd5b813561229f816124f4565b5f8060408385031215612638575f80fd5b823561264381612478565b9150602083013561252d81612478565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ab657610ab6612688565b8082028115828204841417610ab657610ab6612688565b5f826126e057634e487b7160e01b5f52601260045260245ffd5b500490565b600181811c908216806126f957607f821691505b60208210810361271757634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f602082840312156127c9575f80fd5b815161229f816124f4565b81810381811115610ab657610ab6612688565b5f602082840312156127f7575f80fd5b815161229f81612478565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156128525783516001600160a01b031683526020938401939092019160010161282b565b50506001600160a01b03959095166060840152505060800152939250505056fea26469706673582212205c6b2fc408da96df457c6678682d65d61d1df776beb7bb94e769dcb102b0a23e64736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106102a8575f3560e01c80638ea5220f1161016f578063bae14e1d116100d8578063d85ba06311610092578063e4440a861161006d578063e4440a861461082d578063e4a1b95f1461084c578063f2fde38b14610861578063f63eaaba14610880575f80fd5b8063d85ba063146107bf578063dd62ed3e146107d4578063e2f4560514610818575f80fd5b8063bae14e1d1461071a578063c024666814610739578063c3f70b5214610758578063c816841b1461076d578063c9567bf91461078c578063d257b34f146107a0575f80fd5b80639fccce32116101295780639fccce3214610665578063a0d82dc51461067a578063a457c2d71461068f578063a62f45f5146106ae578063a72905a2146106cd578063a9059cbb146106fb575f80fd5b80638ea5220f146105bb5780638f3fa860146105da5780638f85a043146105ef578063953e04631461060e57806395d89b411461063c5780639c3b4fdc14610650575f80fd5b80634a62bb651161021157806370a08231116101cb57806370a08231146104ec578063715018a614610520578063735de9f714610534578063751039fc1461056b5780637571336a1461057f5780638da5cb5b1461059e575f80fd5b80634a62bb651461042b5780634fbee1931461044b5780636323d7cb1461047957806366ca9b8314610498578063680a4337146104b75780636a486a8e146104d7575f80fd5b806323b872dd1161026257806323b872dd1461037f57806324887e801461039e5780632d99d32e146103bd578063313ce567146103dc57806335b5fb63146103f7578063395093511461040c575f80fd5b806302dbd8f8146102b35780630517d13d146102d457806306fdde03146102f3578063095ea7b31461031d57806318160ddd1461034c5780631f7ea8da1461036a575f80fd5b366102af57005b5f80fd5b3480156102be575f80fd5b506102d26102cd36600461240c565b6108a0565b005b3480156102df575f80fd5b506102d26102ee36600461242c565b610940565b3480156102fe575f80fd5b50610307610a17565b6040516103149190612443565b60405180910390f35b348015610328575f80fd5b5061033c61033736600461248c565b610aa6565b6040519015158152602001610314565b348015610357575f80fd5b506002545b604051908152602001610314565b348015610375575f80fd5b5061035c60135481565b34801561038a575f80fd5b5061033c6103993660046124b6565b610abc565b3480156103a9575f80fd5b506102d26103b836600461242c565b610b64565b3480156103c8575f80fd5b506102d26103d7366004612501565b610c3a565b3480156103e7575f80fd5b5060405160128152602001610314565b348015610402575f80fd5b5061035c60115481565b348015610417575f80fd5b5061033c61042636600461248c565b610cfd565b348015610436575f80fd5b5060095461033c90600160b01b900460ff1681565b348015610456575f80fd5b5061033c610465366004612538565b60176020525f908152604090205460ff1681565b348015610484575f80fd5b506102d2610493366004612553565b610d38565b3480156104a3575f80fd5b506102d26104b236600461240c565b610fcd565b3480156104c2575f80fd5b5060095461033c90600160a81b900460ff1681565b3480156104e2575f80fd5b5061035c60105481565b3480156104f7575f80fd5b5061035c610506366004612538565b6001600160a01b03165f9081526003602052604090205490565b34801561052b575f80fd5b506102d2611060565b34801561053f575f80fd5b50600654610553906001600160a01b031681565b6040516001600160a01b039091168152602001610314565b348015610576575f80fd5b5061033c611095565b34801561058a575f80fd5b506102d2610599366004612501565b6110d4565b3480156105a9575f80fd5b506005546001600160a01b0316610553565b3480156105c6575f80fd5b50600954610553906001600160a01b031681565b3480156105e5575f80fd5b5061035c600c5481565b3480156105fa575f80fd5b506102d261060936600461258a565b611128565b348015610619575f80fd5b5061033c610628366004612538565b60186020525f908152604090205460ff1681565b348015610647575f80fd5b506103076111bc565b34801561065b575f80fd5b5061035c600f5481565b348015610670575f80fd5b5061035c60145481565b348015610685575f80fd5b5061035c60125481565b34801561069a575f80fd5b5061033c6106a936600461248c565b6111cb565b3480156106b9575f80fd5b506102d26106c836600461260c565b611263565b3480156106d8575f80fd5b5061033c6106e7366004612538565b60196020525f908152604090205460ff1681565b348015610706575f80fd5b5061033c61071536600461248c565b6112ab565b348015610725575f80fd5b506102d2610734366004612538565b6112b7565b348015610744575f80fd5b506102d2610753366004612501565b611350565b348015610763575f80fd5b5061035c600a5481565b348015610778575f80fd5b50600754610553906001600160a01b031681565b348015610797575f80fd5b506102d26113a4565b3480156107ab575f80fd5b5061033c6107ba36600461242c565b6113e5565b3480156107ca575f80fd5b5061035c600d5481565b3480156107df575f80fd5b5061035c6107ee366004612627565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b348015610823575f80fd5b5061035c600b5481565b348015610838575f80fd5b50600854610553906001600160a01b031681565b348015610857575f80fd5b5061035c600e5481565b34801561086c575f80fd5b506102d261087b366004612538565b611536565b34801561088b575f80fd5b5060095461033c90600160a01b900460ff1681565b6005546001600160a01b031633146108d35760405162461bcd60e51b81526004016108ca90612653565b60405180910390fd5b601182905560128190556108e7818361269c565b60108190556019101561093c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016108ca565b5050565b6005546001600160a01b0316331461096a5760405162461bcd60e51b81526004016108ca90612653565b670de0b6b3a76400006103e861097f60025490565b61098a9060016126af565b61099491906126c6565b61099e91906126c6565b8110156109ff5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b60648201526084016108ca565b610a1181670de0b6b3a76400006126af565b600a5550565b60605f8054610a25906126e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a51906126e5565b8015610a9c5780601f10610a7357610100808354040283529160200191610a9c565b820191905f5260205f20905b815481529060010190602001808311610a7f57829003601f168201915b5050505050905090565b5f610ab23384846115d1565b5060015b92915050565b5f610ac88484846116f4565b6001600160a01b0384165f90815260046020908152604080832033845290915290205482811015610b4c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108ca565b610b5985338584036115d1565b506001949350505050565b6005546001600160a01b03163314610b8e5760405162461bcd60e51b81526004016108ca90612653565b670de0b6b3a76400006103e8610ba360025490565b610bae9060056126af565b610bb891906126c6565b610bc291906126c6565b811015610c225760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420736574206d617857616c6c657453697a65206c6f776572207460448201526768616e20302e352560c01b60648201526084016108ca565b610c3481670de0b6b3a76400006126af565b600c5550565b6005546001600160a01b03163314610c645760405162461bcd60e51b81526004016108ca90612653565b6007546001600160a01b0390811690831603610cd35760405162461bcd60e51b815260206004820152602860248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d20604482015267616d6d506169727360c01b60648201526084016108ca565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b335f8181526004602090815260408083206001600160a01b03871684529091528120549091610ab2918590610d3390869061269c565b6115d1565b604080518082018252600d81526c2a3930b234b733902a37b5b2b760991b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f65e27265c2bf07e8242fee81a602df3320989bd26741589720839868a275d56c918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160408051808303601f1901815282825280516020918201208383018352600e84526d456e61626c652054726164696e6760901b9382019390935281517f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae4918101919091527f07e4ca7f0c414d237f9df43639d0673c51201469c22695492434205e0b759df3918101919091525f606082018190529192506080016040516020818303038152906040528051906020012090505f8282604051602001610ed592919061190160f01b81526002810192909252602282015260420190565b60408051601f1981840301815282825280516020918201205f80855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa158015610f3d573d5f803e3d5ffd5b505050602060405103519050610f5b6005546001600160a01b031690565b6001600160a01b0316816001600160a01b031614610faf5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016108ca565b50506009805461ffff60a01b191661010160a01b1790555050505050565b6005546001600160a01b03163314610ff75760405162461bcd60e51b81526004016108ca90612653565b600e829055600f81905561100b818361269c565b600d8190556019101561093c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c65737300000060448201526064016108ca565b6005546001600160a01b0316331461108a5760405162461bcd60e51b81526004016108ca90612653565b6110935f611fa9565b565b6005545f906001600160a01b031633146110c15760405162461bcd60e51b81526004016108ca90612653565b506009805460ff60b01b19169055600190565b6005546001600160a01b031633146110fe5760405162461bcd60e51b81526004016108ca90612653565b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111525760405162461bcd60e51b81526004016108ca90612653565b5f5b828110156111b6578160165f8686858181106111725761117261271d565b90506020020160208101906111879190612538565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611154565b50505050565b606060018054610a25906126e5565b335f9081526004602090815260408083206001600160a01b03861684529091528120548281101561124c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108ca565b61125933858584036115d1565b5060019392505050565b6005546001600160a01b0316331461128d5760405162461bcd60e51b81526004016108ca90612653565b60098054911515600160a81b0260ff60a81b19909216919091179055565b5f610ab23384846116f4565b6005546001600160a01b031633146112e15760405162461bcd60e51b81526004016108ca90612653565b6001600160a01b03811661132e5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21030b73a3496b23930b4b732b960611b60448201526064016108ca565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461137a5760405162461bcd60e51b81526004016108ca90612653565b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113ce5760405162461bcd60e51b81526004016108ca90612653565b6009805461ffff60a01b191661010160a01b179055565b6005545f906001600160a01b031633146114115760405162461bcd60e51b81526004016108ca90612653565b620186a061141e60025490565b6114299060016126af565b61143391906126c6565b8210156114a05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108ca565b6103e86114ac60025490565b6114b79060056126af565b6114c191906126c6565b82111561152d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108ca565b50600b55600190565b6005546001600160a01b031633146115605760405162461bcd60e51b81526004016108ca90612653565b6001600160a01b0381166115c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ca565b6115ce81611fa9565b50565b6001600160a01b0383166116335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108ca565b6001600160a01b0382166116945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108ca565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661171a5760405162461bcd60e51b81526004016108ca90612731565b6001600160a01b0382166117405760405162461bcd60e51b81526004016108ca90612776565b6001600160a01b0383165f9081526016602052604090205460ff161561179c5760405162461bcd60e51b815260206004820152601160248201527016d99c9bdb5748189b1858dac81b1a5cdd607a1b60448201526064016108ca565b6001600160a01b0382165f9081526016602052604090205460ff16156117f65760405162461bcd60e51b815260206004820152600f60248201526e16dd1bd748189b1858dac81b1a5cdd608a1b60448201526064016108ca565b805f0361180d5761180883835f611ffa565b505050565b600954600160b01b900460ff1615611b77576005546001600160a01b0384811691161480159061184b57506005546001600160a01b03838116911614155b801561185f57506001600160a01b03821615155b801561187657506001600160a01b03821661dead14155b801561188c5750601554600160a01b900460ff16155b15611b7757600954600160a01b900460ff16611924576001600160a01b0383165f9081526017602052604090205460ff16806118df57506001600160a01b0382165f9081526017602052604090205460ff165b6119245760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108ca565b6001600160a01b0383165f9081526019602052604090205460ff16801561196357506001600160a01b0382165f9081526018602052604090205460ff16155b15611a4057600a548111156119d25760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016108ca565b600c546001600160a01b0383165f908152600360205260409020546119f7908361269c565b1115611a3b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108ca565b611b77565b6001600160a01b0382165f9081526019602052604090205460ff168015611a7f57506001600160a01b0383165f9081526018602052604090205460ff16155b15611aef57600a54811115611a3b5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016108ca565b6001600160a01b0382165f9081526018602052604090205460ff16611b7757600c546001600160a01b0383165f90815260036020526040902054611b33908361269c565b1115611b775760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108ca565b6015546001600160a01b031615801590611bf65750601554604051639015d37160e01b81523060048201526001600160a01b0390911690639015d37190602401602060405180830381865afa158015611bd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf691906127b9565b15611ce457601554600754600c54600a54600b5460405163288149ff60e21b81526001600160a01b038981166004830152888116602483015294851660448201526064810193909352608483019190915260a48201525f92919091169063a20527fc9060c4016020604051808303815f875af1158015611c78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9c91906127b9565b905080611ce25760405162461bcd60e51b8152602060048201526014602482015273105b9d1a48111c985a5b995c88115b98589b195960621b60448201526064016108ca565b505b305f90815260036020526040902054600b5481108015908190611d105750600954600160a81b900460ff165b8015611d265750601554600160a01b900460ff16155b8015611d4957506001600160a01b0384165f9081526019602052604090205460ff165b8015611d6d57506001600160a01b0385165f9081526017602052604090205460ff16155b8015611d9157506001600160a01b0384165f9081526017602052604090205460ff16155b15611dbf576015805460ff60a01b1916600160a01b179055611db161214c565b6015805460ff60a01b191690555b6015546001600160a01b0386165f9081526017602052604090205460ff600160a01b909204821615911680611e0b57506001600160a01b0385165f9081526017602052604090205460ff165b15611e1357505f5b5f8115611f95576001600160a01b0386165f9081526019602052604090205460ff168015611e4257505f601054115b15611ece57611e676064611e616010548861229490919063ffffffff16565b906122a6565b905060105460125482611e7a91906126af565b611e8491906126c6565b60145f828254611e94919061269c565b9091555050601054601154611ea990836126af565b611eb391906126c6565b60135f828254611ec3919061269c565b90915550611f779050565b6001600160a01b0387165f9081526019602052604090205460ff168015611ef657505f600d54115b15611f7757611f156064611e61600d548861229490919063ffffffff16565b9050600d54600f5482611f2891906126af565b611f3291906126c6565b60145f828254611f42919061269c565b9091555050600d54600e54611f5790836126af565b611f6191906126c6565b60135f828254611f71919061269c565b90915550505b8015611f8857611f88873083611ffa565b611f9281866127d4565b94505b611fa0878787611ffa565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0383166120205760405162461bcd60e51b81526004016108ca90612731565b6001600160a01b0382166120465760405162461bcd60e51b81526004016108ca90612776565b6001600160a01b0383165f90815260036020526040902054818110156120bd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108ca565b6001600160a01b038085165f908152600360205260408082208585039055918516815290812080548492906120f390849061269c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161213f91815260200190565b60405180910390a36111b6565b305f9081526003602052604081205490505f60145460135461216e919061269c565b90505f82158061217c575081155b1561218657505050565b600b546121949060146126af565b8311156121ac57600b546121a99060146126af565b92505b476121b6846122b1565b5f6121c14783612401565b90505f6121dd85611e616014548561229490919063ffffffff16565b5f601381905560148190556009546040519293506001600160a01b031691839181818185875af1925050503d805f8114612232576040519150601f19603f3d011682016040523d82523d5f602084013e612237565b606091505b50506008546040519195506001600160a01b03169047905f81818185875af1925050503d805f8114612284576040519150601f19603f3d011682016040523d82523d5f602084013e612289565b606091505b505050505050505050565b5f61229f82846126af565b9392505050565b5f61229f82846126c6565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122e4576122e461271d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561233b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235f91906127e7565b816001815181106123725761237261271d565b6001600160a01b03928316602091820292909201015260065461239891309116846115d1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906123d09085905f90869030904290600401612802565b5f604051808303815f87803b1580156123e7575f80fd5b505af11580156123f9573d5f803e3d5ffd5b505050505050565b5f61229f82846127d4565b5f806040838503121561241d575f80fd5b50508035926020909101359150565b5f6020828403121561243c575f80fd5b5035919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03811681146115ce575f80fd5b5f806040838503121561249d575f80fd5b82356124a881612478565b946020939093013593505050565b5f805f606084860312156124c8575f80fd5b83356124d381612478565b925060208401356124e381612478565b929592945050506040919091013590565b80151581146115ce575f80fd5b5f8060408385031215612512575f80fd5b823561251d81612478565b9150602083013561252d816124f4565b809150509250929050565b5f60208284031215612548575f80fd5b813561229f81612478565b5f805f60608486031215612565575f80fd5b833560ff81168114612575575f80fd5b95602085013595506040909401359392505050565b5f805f6040848603121561259c575f80fd5b833567ffffffffffffffff8111156125b2575f80fd5b8401601f810186136125c2575f80fd5b803567ffffffffffffffff8111156125d8575f80fd5b8660208260051b84010111156125ec575f80fd5b602091820194509250840135612601816124f4565b809150509250925092565b5f6020828403121561261c575f80fd5b813561229f816124f4565b5f8060408385031215612638575f80fd5b823561264381612478565b9150602083013561252d81612478565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ab657610ab6612688565b8082028115828204841417610ab657610ab6612688565b5f826126e057634e487b7160e01b5f52601260045260245ffd5b500490565b600181811c908216806126f957607f821691505b60208210810361271757634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f602082840312156127c9575f80fd5b815161229f816124f4565b81810381811115610ab657610ab6612688565b5f602082840312156127f7575f80fd5b815161229f81612478565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156128525783516001600160a01b031683526020938401939092019160010161282b565b50506001600160a01b03959095166060840152505060800152939250505056fea26469706673582212205c6b2fc408da96df457c6678682d65d61d1df776beb7bb94e769dcb102b0a23e64736f6c634300081a0033

Deployed Bytecode Sourcemap

15347:11599:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21056:289;;;;;;;;;;-1:-1:-1;21056:289:0;;;;;:::i;:::-;;:::i;:::-;;20530:228;;;;;;;;;;-1:-1:-1;20530:228:0;;;;;:::i;:::-;;:::i;10713:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11444:169;;;;;;;;;;-1:-1:-1;11444:169:0;;;;;:::i;:::-;;:::i;:::-;;;1692:14:1;;1685:22;1667:41;;1655:2;1640:18;11444:169:0;1527:187:1;11034:108:0;;;;;;;;;;-1:-1:-1;11122:12:0;;11034:108;;;1865:25:1;;;1853:2;1838:18;11034:108:0;1719:177:1;16025:30:0;;;;;;;;;;;;;;;;11804:492;;;;;;;;;;-1:-1:-1;11804:492:0;;;;;:::i;:::-;;:::i;19898:225::-;;;;;;;;;;-1:-1:-1;19898:225:0;;;;;:::i;:::-;;:::i;21553:189::-;;;;;;;;;;-1:-1:-1;21553:189:0;;;;;:::i;:::-;;:::i;10933:93::-;;;;;;;;;;-1:-1:-1;10933:93:0;;11016:2;3066:36:1;;3054:2;3039:18;10933:93:0;2924:184:1;15956:28:0;;;;;;;;;;;;;;;;12304:215;;;;;;;;;;-1:-1:-1;12304:215:0;;;;;:::i;:::-;;:::i;15665:33::-;;;;;;;;;;-1:-1:-1;15665:33:0;;;;-1:-1:-1;;;15665:33:0;;;;;;16213:50;;;;;;;;;;-1:-1:-1;16213:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18299:1067;;;;;;;;;;-1:-1:-1;18299:1067:0;;;;;:::i;:::-;;:::i;20766:282::-;;;;;;;;;;-1:-1:-1;20766:282:0;;;;;:::i;:::-;;:::i;15623:35::-;;;;;;;;;;-1:-1:-1;15623:35:0;;;;-1:-1:-1;;;15623:35:0;;;;;;15921:28;;;;;;;;;;;;;;;;11150:127;;;;;;;;;;-1:-1:-1;11150:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11251:18:0;11224:7;11251:18;;;:9;:18;;;;;;;11150:127;923:103;;;;;;;;;;;;;:::i;15432:39::-;;;;;;;;;;-1:-1:-1;15432:39:0;;;;-1:-1:-1;;;;;15432:39:0;;;;;;-1:-1:-1;;;;;4069:32:1;;;4051:51;;4039:2;4024:18;15432:39:0;3879:229:1;19653:121:0;;;;;;;;;;;;;:::i;19374:136::-;;;;;;;;;;-1:-1:-1;19374:136:0;;;;;:::i;:::-;;:::i;700:87::-;;;;;;;;;;-1:-1:-1;773:6:0;;-1:-1:-1;;;;;773:6:0;700:87;;15547:24;;;;;;;;;;-1:-1:-1;15547:24:0;;;;-1:-1:-1;;;;;15547:24:0;;;15783:28;;;;;;;;;;;;;;;;21880:206;;;;;;;;;;-1:-1:-1;21880:206:0;;;;;:::i;:::-;;:::i;16270:55::-;;;;;;;;;;-1:-1:-1;16270:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10821:104;;;;;;;;;;;;;:::i;15888:24::-;;;;;;;;;;;;;;;;16062:27;;;;;;;;;;;;;;;;15991:25;;;;;;;;;;;;;;;;12527:413;;;;;;;;;;-1:-1:-1;12527:413:0;;;;;:::i;:::-;;:::i;19782:108::-;;;;;;;;;;-1:-1:-1;19782:108:0;;;;;:::i;:::-;;:::i;16334:40::-;;;;;;;;;;-1:-1:-1;16334:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11621:175;;;;;;;;;;-1:-1:-1;11621:175:0;;;;;:::i;:::-;;:::i;21357:188::-;;;;;;;;;;-1:-1:-1;21357:188:0;;;;;:::i;:::-;;:::i;19518:127::-;;;;;;;;;;-1:-1:-1;19518:127:0;;;;;:::i;:::-;;:::i;15707:29::-;;;;;;;;;;;;;;;;15478:26;;;;;;;;;;-1:-1:-1;15478:26:0;;;;-1:-1:-1;;;;;15478:26:0;;;18174:117;;;;;;;;;;;;;:::i;20131:391::-;;;;;;;;;;-1:-1:-1;20131:391:0;;;;;:::i;:::-;;:::i;15820:27::-;;;;;;;;;;;;;;;;11285:151;;;;;;;;;;-1:-1:-1;11285:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;11401:18:0;;;11374:7;11401:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11285:151;15743:33;;;;;;;;;;;;;;;;15513:27;;;;;;;;;;-1:-1:-1;15513:27:0;;;;-1:-1:-1;;;;;15513:27:0;;;15854;;;;;;;;;;;;;;;;1034:201;;;;;;;;;;-1:-1:-1;1034:201:0;;;;;:::i;:::-;;:::i;15580:36::-;;;;;;;;;;-1:-1:-1;15580:36:0;;;;-1:-1:-1;;;15580:36:0;;;;;;21056:289;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;;;;;;;;;21151:13:::1;:28:::0;;;21190:10:::1;:22:::0;;;21239:26:::1;21203:9:::0;21167:12;21239:26:::1;:::i;:::-;21223:13;:42:::0;;;21301:2:::1;-1:-1:-1::0;21284:19:0::1;21276:61;;;::::0;-1:-1:-1;;;21276:61:0;;6535:2:1;21276:61:0::1;::::0;::::1;6517:21:1::0;6574:2;6554:18;;;6547:30;6613:31;6593:18;;;6586:59;6662:18;;21276:61:0::1;6333:353:1::0;21276:61:0::1;21056:289:::0;;:::o;20530:228::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;20655:4:::1;20647;20626:13;11122:12:::0;;;11034:108;20626:13:::1;:17;::::0;20642:1:::1;20626:17;:::i;:::-;20625:26;;;;:::i;:::-;20624:35;;;;:::i;:::-;20614:6;:45;;20606:99;;;::::0;-1:-1:-1;;;20606:99:0;;7288:2:1;20606:99:0::1;::::0;::::1;7270:21:1::0;7327:2;7307:18;;;7300:30;7366:34;7346:18;;;7339:62;-1:-1:-1;;;7417:18:1;;;7410:39;7466:19;;20606:99:0::1;7086:405:1::0;20606:99:0::1;20733:17;:6:::0;20743::::1;20733:17;:::i;:::-;20716:14;:34:::0;-1:-1:-1;20530:228:0:o;10713:100::-;10767:13;10800:5;10793:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10713:100;:::o;11444:169::-;11527:4;11544:39;326:10;11567:7;11576:6;11544:8;:39::i;:::-;-1:-1:-1;11601:4:0;11444:169;;;;;:::o;11804:492::-;11944:4;11961:36;11971:6;11979:9;11990:6;11961:9;:36::i;:::-;-1:-1:-1;;;;;12037:19:0;;12010:24;12037:19;;;:11;:19;;;;;;;;326:10;12037:33;;;;;;;;12089:26;;;;12081:79;;;;-1:-1:-1;;;12081:79:0;;8083:2:1;12081:79:0;;;8065:21:1;8122:2;8102:18;;;8095:30;8161:34;8141:18;;;8134:62;-1:-1:-1;;;8212:18:1;;;8205:38;8260:19;;12081:79:0;7881:404:1;12081:79:0;12196:57;12205:6;326:10;12246:6;12227:16;:25;12196:8;:57::i;:::-;-1:-1:-1;12284:4:0;;11804:492;-1:-1:-1;;;;11804:492:0:o;19898:225::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;20022:4:::1;20014;19993:13;11122:12:::0;;;11034:108;19993:13:::1;:17;::::0;20009:1:::1;19993:17;:::i;:::-;19992:26;;;;:::i;:::-;19991:35;;;;:::i;:::-;19981:6;:45;;19973:98;;;::::0;-1:-1:-1;;;19973:98:0;;8492:2:1;19973:98:0::1;::::0;::::1;8474:21:1::0;8531:2;8511:18;;;8504:30;8570:34;8550:18;;;8543:62;-1:-1:-1;;;8621:18:1;;;8614:38;8669:19;;19973:98:0::1;8290:404:1::0;19973:98:0::1;20098:17;:6:::0;20108::::1;20098:17;:::i;:::-;20082:13;:33:::0;-1:-1:-1;19898:225:0:o;21553:189::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;21645:11:::1;::::0;-1:-1:-1;;;;;21645:11:0;;::::1;21637:19:::0;;::::1;::::0;21629:72:::1;;;::::0;-1:-1:-1;;;21629:72:0;;8901:2:1;21629:72:0::1;::::0;::::1;8883:21:1::0;8940:2;8920:18;;;8913:30;8979:34;8959:18;;;8952:62;-1:-1:-1;;;9030:18:1;;;9023:38;9078:19;;21629:72:0::1;8699:404:1::0;21629:72:0::1;-1:-1:-1::0;;;;;21712:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:22;;-1:-1:-1;;21712:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21553:189::o;12304:215::-;326:10;12392:4;12441:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12441:34:0;;;;;;;;;;12392:4;;12409:80;;12432:7;;12441:47;;12478:10;;12441:47;:::i;:::-;12409:8;:80::i;18299:1067::-;18579:22;;;;;;;;;;;-1:-1:-1;;;18579:22:0;;;;;18631:10;;;;;;;;;;-1:-1:-1;;;18631:10:0;;;;18426:295;;18455:95;18426:295;;;9367:25:1;;;;18569:33:0;9408:18:1;;;9401:34;;;;18621:21:0;9451:18:1;;;9444:34;18661:13:0;9494:18:1;;;9487:34;18701:4:0;9537:19:1;;;9530:61;-1:-1:-1;;9339:19:1;;18426:295:0;;;;;;-1:-1:-1;;18426:295:0;;;;;;18402:330;;18426:295;18402:330;;;;18897:23;;;;;;;;-1:-1:-1;;;18897:23:0;;;;;;;18790:175;;18819:49;18790:175;;;9804:25:1;;;;18887:34:0;9845:18:1;;;9838:34;;;;-1:-1:-1;9888:18:1;;;9881:34;;;18402:330:0;;-1:-1:-1;9777:18:1;;18790:175:0;;;;;;;;;;;;18766:210;;;;;;18745:231;;18989:14;19094:10;19123;19030:134;;;;;;;;-1:-1:-1;;;10184:27:1;;10236:1;10227:11;;10220:27;;;;10272:2;10263:12;;10256:28;10309:2;10300:12;;9926:392;19030:134:0;;;;-1:-1:-1;;19030:134:0;;;;;;;;;19006:169;;19030:134;19006:169;;;;19188:14;19205:26;;;;;;;;;10550:25:1;;;10623:4;10611:17;;10591:18;;;10584:45;;;;10645:18;;;10638:34;;;10688:18;;;10681:34;;;19006:169:0;;-1:-1:-1;19188:14:0;19205:26;;10522:19:1;;19205:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19188:43;;19260:7;773:6;;-1:-1:-1;;;;;773:6:0;;700:87;19260:7;-1:-1:-1;;;;;19250:17:0;:6;-1:-1:-1;;;;;19250:17:0;;19242:47;;;;-1:-1:-1;;;19242:47:0;;10928:2:1;19242:47:0;;;10910:21:1;10967:2;10947:18;;;10940:30;-1:-1:-1;;;10986:18:1;;;10979:47;11043:18;;19242:47:0;10726:341:1;19242:47:0;-1:-1:-1;;19302:16:0;:23;;-1:-1:-1;;;;19336:22:0;-1:-1:-1;;;19336:22:0;;;-1:-1:-1;;;;;18299:1067:0:o;20766:282::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;20860:12:::1;:27:::0;;;20898:9:::1;:21:::0;;;20945:24:::1;20910:9:::0;20875:12;20945:24:::1;:::i;:::-;20930:12;:39:::0;;;21004:2:::1;-1:-1:-1::0;20988:18:0::1;20980:60;;;::::0;-1:-1:-1;;;20980:60:0;;6535:2:1;20980:60:0::1;::::0;::::1;6517:21:1::0;6574:2;6554:18;;;6547:30;6613:31;6593:18;;;6586:59;6662:18;;20980:60:0::1;6333:353:1::0;923:103:0;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;988:30:::1;1015:1;988:18;:30::i;:::-;923:103::o:0;19653:121::-;773:6;;19705:4;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;-1:-1:-1;19722:14:0::1;:22:::0;;-1:-1:-1;;;;19722:22:0::1;::::0;;;19653:121;:::o;19374:136::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19465:29:0;;;::::1;;::::0;;;:23:::1;:29;::::0;;;;:37;;-1:-1:-1;;19465:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19374:136::o;21880:206::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;21979:9:::1;21974:105;21994:18:::0;;::::1;21974:105;;;22060:7;22034:11;:23;22046:7;;22054:1;22046:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22034:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22034:23:0;:33;;-1:-1:-1;;22034:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;22014:3:0::1;21974:105;;;;21880:206:::0;;;:::o;10821:104::-;10877:13;10910:7;10903:14;;;;;:::i;12527:413::-;326:10;12620:4;12664:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12664:34:0;;;;;;;;;;12717:35;;;;12709:85;;;;-1:-1:-1;;;12709:85:0;;11406:2:1;12709:85:0;;;11388:21:1;11445:2;11425:18;;;11418:30;11484:34;11464:18;;;11457:62;-1:-1:-1;;;11535:18:1;;;11528:35;11580:19;;12709:85:0;11204:401:1;12709:85:0;12830:67;326:10;12853:7;12881:15;12862:16;:34;12830:8;:67::i;:::-;-1:-1:-1;12928:4:0;;12527:413;-1:-1:-1;;;12527:413:0:o;19782:108::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;19857:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;19857:25:0::1;-1:-1:-1::0;;;;19857:25:0;;::::1;::::0;;;::::1;::::0;;19782:108::o;11621:175::-;11707:4;11724:42;326:10;11748:9;11759:6;11724:9;:42::i;21357:188::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21443:30:0;::::1;21435:63;;;::::0;-1:-1:-1;;;21435:63:0;;11812:2:1;21435:63:0::1;::::0;::::1;11794:21:1::0;11851:2;11831:18;;;11824:30;-1:-1:-1;;;11870:18:1;;;11863:50;11930:18;;21435:63:0::1;11610:344:1::0;21435:63:0::1;21509:11;:28:::0;;-1:-1:-1;;;;;;21509:28:0::1;-1:-1:-1::0;;;;;21509:28:0;;;::::1;::::0;;;::::1;::::0;;21357:188::o;19518:127::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19602:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;19602:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19518:127::o;18174:117::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;18227:16:::1;:23:::0;;-1:-1:-1;;;;18261:22:0;-1:-1:-1;;;18261:22:0;;;18174:117::o;20131:391::-;773:6;;20212:4;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;20272:6:::1;20251:13;11122:12:::0;;;11034:108;20251:13:::1;:17;::::0;20267:1:::1;20251:17;:::i;:::-;20250:28;;;;:::i;:::-;20237:9;:41;;20229:107;;;::::0;-1:-1:-1;;;20229:107:0;;12161:2:1;20229:107:0::1;::::0;::::1;12143:21:1::0;12200:2;12180:18;;;12173:30;12239:34;12219:18;;;12212:62;-1:-1:-1;;;12290:18:1;;;12283:51;12351:19;;20229:107:0::1;11959:417:1::0;20229:107:0::1;20390:4;20369:13;11122:12:::0;;;11034:108;20369:13:::1;:17;::::0;20385:1:::1;20369:17;:::i;:::-;20368:26;;;;:::i;:::-;20355:9;:39;;20347:104;;;::::0;-1:-1:-1;;;20347:104:0;;12583:2:1;20347:104:0::1;::::0;::::1;12565:21:1::0;12622:2;12602:18;;;12595:30;12661:34;12641:18;;;12634:62;-1:-1:-1;;;12712:18:1;;;12705:50;12772:19;;20347:104:0::1;12381:416:1::0;20347:104:0::1;-1:-1:-1::0;20462:18:0::1;:30:::0;20510:4:::1;::::0;20131:391::o;1034:201::-;773:6;;-1:-1:-1;;;;;773:6:0;326:10;835:23;827:68;;;;-1:-1:-1;;;827:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1123:22:0;::::1;1115:73;;;::::0;-1:-1:-1;;;1115:73:0;;13004:2:1;1115:73:0::1;::::0;::::1;12986:21:1::0;13043:2;13023:18;;;13016:30;13082:34;13062:18;;;13055:62;-1:-1:-1;;;13133:18:1;;;13126:36;13179:19;;1115:73:0::1;12802:402:1::0;1115:73:0::1;1199:28;1218:8;1199:18;:28::i;:::-;1034:201:::0;:::o;13954:380::-;-1:-1:-1;;;;;14090:19:0;;14082:68;;;;-1:-1:-1;;;14082:68:0;;13411:2:1;14082:68:0;;;13393:21:1;13450:2;13430:18;;;13423:30;13489:34;13469:18;;;13462:62;-1:-1:-1;;;13540:18:1;;;13533:34;13584:19;;14082:68:0;13209:400:1;14082:68:0;-1:-1:-1;;;;;14169:21:0;;14161:68;;;;-1:-1:-1;;;14161:68:0;;13816:2:1;14161:68:0;;;13798:21:1;13855:2;13835:18;;;13828:30;13894:34;13874:18;;;13867:62;-1:-1:-1;;;13945:18:1;;;13938:32;13987:19;;14161:68:0;13614:398:1;14161:68:0;-1:-1:-1;;;;;14242:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14294:32;;1865:25:1;;;14294:32:0;;1838:18:1;14294:32:0;;;;;;;13954:380;;;:::o;23564:3264::-;-1:-1:-1;;;;;23662:18:0;;23654:68;;;;-1:-1:-1;;;23654:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23741:16:0;;23733:64;;;;-1:-1:-1;;;23733:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23817:17:0;;;;;;:11;:17;;;;;;;;23816:18;23808:48;;;;-1:-1:-1;;;23808:48:0;;15029:2:1;23808:48:0;;;15011:21:1;15068:2;15048:18;;;15041:30;-1:-1:-1;;;15087:18:1;;;15080:47;15144:18;;23808:48:0;14827:341:1;23808:48:0;-1:-1:-1;;;;;23876:15:0;;;;;;:11;:15;;;;;;;;23875:16;23867:44;;;;-1:-1:-1;;;23867:44:0;;15375:2:1;23867:44:0;;;15357:21:1;15414:2;15394:18;;;15387:30;-1:-1:-1;;;15433:18:1;;;15426:45;15488:18;;23867:44:0;15173:339:1;23867:44:0;23928:6;23938:1;23928:11;23924:93;;23956:28;23972:4;23978:2;23982:1;23956:15;:28::i;:::-;23564:3264;;;:::o;23924:93::-;24033:14;;-1:-1:-1;;;24033:14:0;;;;24029:1119;;;773:6;;-1:-1:-1;;;;;24068:15:0;;;773:6;;24068:15;;;;:49;;-1:-1:-1;773:6:0;;-1:-1:-1;;;;;24104:13:0;;;773:6;;24104:13;;24068:49;:86;;;;-1:-1:-1;;;;;;24138:16:0;;;;24068:86;:128;;;;-1:-1:-1;;;;;;24175:21:0;;24189:6;24175:21;;24068:128;:158;;;;-1:-1:-1;24218:8:0;;-1:-1:-1;;;24218:8:0;;;;24217:9;24068:158;24064:1073;;;24252:16;;-1:-1:-1;;;24252:16:0;;;;24247:151;;-1:-1:-1;;;;;24301:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;24329:22:0;;;;;;:18;:22;;;;;;;;24301:50;24293:85;;;;-1:-1:-1;;;24293:85:0;;15719:2:1;24293:85:0;;;15701:21:1;15758:2;15738:18;;;15731:30;-1:-1:-1;;;15777:18:1;;;15770:52;15839:18;;24293:85:0;15517:346:1;24293:85:0;-1:-1:-1;;;;;24450:14:0;;;;;;:8;:14;;;;;;;;:46;;;;-1:-1:-1;;;;;;24469:27:0;;;;;;:23;:27;;;;;;;;24468:28;24450:46;24446:676;;;24539:14;;24529:6;:24;;24521:84;;;;-1:-1:-1;;;24521:84:0;;16070:2:1;24521:84:0;;;16052:21:1;16109:2;16089:18;;;16082:30;16148:34;16128:18;;;16121:62;-1:-1:-1;;;16199:18:1;;;16192:45;16254:19;;24521:84:0;15868:411:1;24521:84:0;24662:13;;-1:-1:-1;;;;;11251:18:0;;11224:7;11251:18;;;:9;:18;;;;;;24636:22;;:6;:22;:::i;:::-;:39;;24628:71;;;;-1:-1:-1;;;24628:71:0;;16486:2:1;24628:71:0;;;16468:21:1;16525:2;16505:18;;;16498:30;-1:-1:-1;;;16544:18:1;;;16537:49;16603:18;;24628:71:0;16284:343:1;24628:71:0;24446:676;;;-1:-1:-1;;;;;24775:12:0;;;;;;:8;:12;;;;;;;;:46;;;;-1:-1:-1;;;;;;24792:29:0;;;;;;:23;:29;;;;;;;;24791:30;24775:46;24771:351;;;24864:14;;24854:6;:24;;24846:85;;;;-1:-1:-1;;;24846:85:0;;16834:2:1;24846:85:0;;;16816:21:1;16873:2;16853:18;;;16846:30;16912:34;16892:18;;;16885:62;-1:-1:-1;;;16963:18:1;;;16956:46;17019:19;;24846:85:0;16632:412:1;24771:351:0;-1:-1:-1;;;;;24979:27:0;;;;;;:23;:27;;;;;;;;24974:148;;25065:13;;-1:-1:-1;;;;;11251:18:0;;11224:7;11251:18;;;:9;:18;;;;;;25039:22;;:6;:22;:::i;:::-;:39;;25031:71;;;;-1:-1:-1;;;25031:71:0;;16486:2:1;25031:71:0;;;16468:21:1;16525:2;16505:18;;;16498:30;-1:-1:-1;;;16544:18:1;;;16537:49;16603:18;;25031:71:0;16284:343:1;25031:71:0;25164:11;;-1:-1:-1;;;;;25164:11:0;:25;;;;:79;;-1:-1:-1;25206:11:0;;25193:50;;-1:-1:-1;;;25193:50:0;;25237:4;25193:50;;;4051:51:1;-1:-1:-1;;;;;25206:11:0;;;;25193:35;;4024:18:1;;25193:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25160:292;;;25286:11;;25323;;25337:13;;25352:14;;25368:18;;25273:114;;-1:-1:-1;;;25273:114:0;;-1:-1:-1;;;;;17604:32:1;;;25273:114:0;;;17586:51:1;17673:32;;;17653:18;;;17646:60;25323:11:0;;;17722:18:1;;;17715:60;17791:18;;;17784:34;;;;17834:19;;;17827:35;;;;17878:19;;;17871:35;25260:10:0;;25286:11;;;;;25273:31;;17558:19:1;;25273:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25260:127;;25410:5;25402:38;;;;-1:-1:-1;;;25402:38:0;;18119:2:1;25402:38:0;;;18101:21:1;18158:2;18138:18;;;18131:30;-1:-1:-1;;;18177:18:1;;;18170:50;18237:18;;25402:38:0;17917:344:1;25402:38:0;25245:207;25160:292;25508:4;25464:23;11251:18;;;:9;:18;;;;;;25559;;25540:37;;;;;;;25592:38;;-1:-1:-1;25616:14:0;;-1:-1:-1;;;25616:14:0;;;;25592:38;:65;;;;-1:-1:-1;25649:8:0;;-1:-1:-1;;;25649:8:0;;;;25648:9;25592:65;:94;;;;-1:-1:-1;;;;;;25674:12:0;;;;;;:8;:12;;;;;;;;25592:94;:136;;;;-1:-1:-1;;;;;;25704:24:0;;;;;;:18;:24;;;;;;;;25703:25;25592:136;:176;;;;-1:-1:-1;;;;;;25746:22:0;;;;;;:18;:22;;;;;;;;25745:23;25592:176;25588:282;;;25787:8;:15;;-1:-1:-1;;;;25787:15:0;-1:-1:-1;;;25787:15:0;;;25817:10;:8;:10::i;:::-;25842:8;:16;;-1:-1:-1;;;;25842:16:0;;;25588:282;25898:8;;-1:-1:-1;;;;;25921:24:0;;25882:12;25921:24;;;:18;:24;;;;;;25898:8;-1:-1:-1;;;25898:8:0;;;;;25897:9;;25921:24;;:50;;-1:-1:-1;;;;;;25949:22:0;;;;;;:18;:22;;;;;;;;25921:50;25917:84;;;-1:-1:-1;25996:5:0;25917:84;26014:11;26044:7;26040:735;;;-1:-1:-1;;;;;26096:12:0;;;;;;:8;:12;;;;;;;;:33;;;;;26128:1;26112:13;;:17;26096:33;26092:554;;;26156:34;26186:3;26156:25;26167:13;;26156:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;26150:40;;26246:13;;26232:10;;26226:3;:16;;;;:::i;:::-;26225:34;;;;:::i;:::-;26209:12;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;26321:13:0;;26304;;26298:19;;:3;:19;:::i;:::-;26297:37;;;;:::i;:::-;26278:15;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;26092:554:0;;-1:-1:-1;26092:554:0;;-1:-1:-1;;;;;26396:14:0;;;;;;:8;:14;;;;;;;;:34;;;;;26429:1;26414:12;;:16;26396:34;26392:254;;;26457:33;26486:3;26457:24;26468:12;;26457:6;:10;;:24;;;;:::i;:33::-;26451:39;;26545:12;;26532:9;;26526:3;:15;;;;:::i;:::-;26525:32;;;;:::i;:::-;26509:12;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;26618:12:0;;26602;;26596:18;;:3;:18;:::i;:::-;26595:35;;;;:::i;:::-;26576:15;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;26392:254:0;26666:7;;26662:71;;26692:41;26708:4;26722;26729:3;26692:15;:41::i;:::-;26750:13;26760:3;26750:13;;:::i;:::-;;;26040:735;26787:33;26803:4;26809:2;26813:6;26787:15;:33::i;:::-;23643:3185;;;;23564:3264;;;:::o;1243:191::-;1336:6;;;-1:-1:-1;;;;;1353:17:0;;;-1:-1:-1;;;;;;1353:17:0;;;;;;;1386:40;;1336:6;;;1353:17;1336:6;;1386:40;;1317:16;;1386:40;1306:128;1243:191;:::o;14342:733::-;-1:-1:-1;;;;;14482:20:0;;14474:70;;;;-1:-1:-1;;;14474:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14563:23:0;;14555:71;;;;-1:-1:-1;;;14555:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14723:17:0;;14699:21;14723:17;;;:9;:17;;;;;;14759:23;;;;14751:74;;;;-1:-1:-1;;;14751:74:0;;18601:2:1;14751:74:0;;;18583:21:1;18640:2;18620:18;;;18613:30;18679:34;18659:18;;;18652:62;-1:-1:-1;;;18730:18:1;;;18723:36;18776:19;;14751:74:0;18399:402:1;14751:74:0;-1:-1:-1;;;;;14861:17:0;;;;;;;:9;:17;;;;;;14881:22;;;14861:42;;14925:20;;;;;;;;:30;;14897:6;;14861:17;14925:30;;14897:6;;14925:30;:::i;:::-;;;;;;;;14990:9;-1:-1:-1;;;;;14973:35:0;14982:6;-1:-1:-1;;;;;14973:35:0;;15001:6;14973:35;;;;1865:25:1;;1853:2;1838:18;;1719:177;14973:35:0;;;;;;;;15021:46;23564:3264;22094:871;22177:4;22133:23;11251:18;;;:9;:18;;;;;;22133:50;;22194:25;22240:12;;22222:15;;:30;;;;:::i;:::-;22194:58;-1:-1:-1;22263:12:0;22292:20;;;:46;;-1:-1:-1;22316:22:0;;22292:46;22288:72;;;22353:7;;;22094:871::o;22288:72::-;22394:18;;:23;;22415:2;22394:23;:::i;:::-;22376:15;:41;22372:101;;;22450:18;;:23;;22471:2;22450:23;:::i;:::-;22432:41;;22372:101;22514:21;22546:33;22563:15;22546:16;:33::i;:::-;22592:18;22613:44;:21;22639:17;22613:25;:44::i;:::-;22592:65;;22668:17;22688:51;22721:17;22688:28;22703:12;;22688:10;:14;;:28;;;;:::i;:51::-;22770:1;22752:15;:19;;;22782:12;:16;;;22833:9;;22825:45;;22668:71;;-1:-1:-1;;;;;;22833:9:0;;22668:71;;22825:45;22770:1;22825:45;22668:71;22833:9;22825:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22903:12:0;;22895:62;;22811:59;;-1:-1:-1;;;;;;22903:12:0;;22930:21;;22895:62;;;;22930:21;22903:12;22895:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;22094:871:0:o;2822:98::-;2880:7;2907:5;2911:1;2907;:5;:::i;:::-;2900:12;2822:98;-1:-1:-1;;;2822:98:0:o;2928:::-;2986:7;3013:5;3017:1;3013;:5;:::i;22973:583::-;23123:16;;;23137:1;23123:16;;;;;;;;23099:21;;23123:16;;;;;;;;;;-1:-1:-1;23123:16:0;23099:40;;23168:4;23150;23155:1;23150:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23150:23:0;;;:7;;;;;;;;;;:23;;;;23194:13;;:20;;;-1:-1:-1;;;23194:20:0;;;;:13;;;;;:18;;:20;;;;;23150:7;;23194:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23184:4;23189:1;23184:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23184:30:0;;;:7;;;;;;;;;:30;23259:13;;23227:60;;23244:4;;23259:13;23275:11;23227:8;:60::i;:::-;23326:13;;:222;;-1:-1:-1;;;23326:222:0;;-1:-1:-1;;;;;23326:13:0;;;;:64;;:222;;23405:11;;23326:13;;23475:4;;23502;;23522:15;;23326:222;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23028:528;22973:583;:::o;2716:98::-;2774:7;2801:5;2805:1;2801;:5;:::i;14:346:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;204:23:1;;;324:2;309:18;;;296:32;;-1:-1:-1;14:346:1:o;365:226::-;424:6;477:2;465:9;456:7;452:23;448:32;445:52;;;493:1;490;483:12;445:52;-1:-1:-1;538:23:1;;365:226;-1:-1:-1;365:226:1:o;596:418::-;745:2;734:9;727:21;708:4;777:6;771:13;820:6;815:2;804:9;800:18;793:34;879:6;874:2;866:6;862:15;857:2;846:9;842:18;836:50;935:1;930:2;921:6;910:9;906:22;902:31;895:42;1005:2;998;994:7;989:2;981:6;977:15;973:29;962:9;958:45;954:54;946:62;;;596:418;;;;:::o;1019:131::-;-1:-1:-1;;;;;1094:31:1;;1084:42;;1074:70;;1140:1;1137;1130:12;1155:367;1223:6;1231;1284:2;1272:9;1263:7;1259:23;1255:32;1252:52;;;1300:1;1297;1290:12;1252:52;1339:9;1326:23;1358:31;1383:5;1358:31;:::i;:::-;1408:5;1486:2;1471:18;;;;1458:32;;-1:-1:-1;;;1155:367:1:o;1901:508::-;1978:6;1986;1994;2047:2;2035:9;2026:7;2022:23;2018:32;2015:52;;;2063:1;2060;2053:12;2015:52;2102:9;2089:23;2121:31;2146:5;2121:31;:::i;:::-;2171:5;-1:-1:-1;2228:2:1;2213:18;;2200:32;2241:33;2200:32;2241:33;:::i;:::-;1901:508;;2293:7;;-1:-1:-1;;;2373:2:1;2358:18;;;;2345:32;;1901:508::o;2414:118::-;2500:5;2493:13;2486:21;2479:5;2476:32;2466:60;;2522:1;2519;2512:12;2537:382;2602:6;2610;2663:2;2651:9;2642:7;2638:23;2634:32;2631:52;;;2679:1;2676;2669:12;2631:52;2718:9;2705:23;2737:31;2762:5;2737:31;:::i;:::-;2787:5;-1:-1:-1;2844:2:1;2829:18;;2816:32;2857:30;2816:32;2857:30;:::i;:::-;2906:7;2896:17;;;2537:382;;;;;:::o;3113:247::-;3172:6;3225:2;3213:9;3204:7;3200:23;3196:32;3193:52;;;3241:1;3238;3231:12;3193:52;3280:9;3267:23;3299:31;3324:5;3299:31;:::i;3365:509::-;3440:6;3448;3456;3509:2;3497:9;3488:7;3484:23;3480:32;3477:52;;;3525:1;3522;3515:12;3477:52;3564:9;3551:23;3614:4;3607:5;3603:16;3596:5;3593:27;3583:55;;3634:1;3631;3624:12;3583:55;3657:5;3735:2;3720:18;;3707:32;;-1:-1:-1;3838:2:1;3823:18;;;3810:32;;3365:509;-1:-1:-1;;;3365:509:1:o;4321:745::-;4413:6;4421;4429;4482:2;4470:9;4461:7;4457:23;4453:32;4450:52;;;4498:1;4495;4488:12;4450:52;4538:9;4525:23;4571:18;4563:6;4560:30;4557:50;;;4603:1;4600;4593:12;4557:50;4626:22;;4679:4;4671:13;;4667:27;-1:-1:-1;4657:55:1;;4708:1;4705;4698:12;4657:55;4748:2;4735:16;4774:18;4766:6;4763:30;4760:50;;;4806:1;4803;4796:12;4760:50;4861:7;4854:4;4844:6;4841:1;4837:14;4833:2;4829:23;4825:34;4822:47;4819:67;;;4882:1;4879;4872:12;4819:67;4913:4;4905:13;;;;-1:-1:-1;4937:6:1;-1:-1:-1;4978:20:1;;4965:34;5008:28;4965:34;5008:28;:::i;:::-;5055:5;5045:15;;;4321:745;;;;;:::o;5071:241::-;5127:6;5180:2;5168:9;5159:7;5155:23;5151:32;5148:52;;;5196:1;5193;5186:12;5148:52;5235:9;5222:23;5254:28;5276:5;5254:28;:::i;5317:388::-;5385:6;5393;5446:2;5434:9;5425:7;5421:23;5417:32;5414:52;;;5462:1;5459;5452:12;5414:52;5501:9;5488:23;5520:31;5545:5;5520:31;:::i;:::-;5570:5;-1:-1:-1;5627:2:1;5612:18;;5599:32;5640:33;5599:32;5640:33;:::i;5710:356::-;5912:2;5894:21;;;5931:18;;;5924:30;5990:34;5985:2;5970:18;;5963:62;6057:2;6042:18;;5710:356::o;6071:127::-;6132:10;6127:3;6123:20;6120:1;6113:31;6163:4;6160:1;6153:15;6187:4;6184:1;6177:15;6203:125;6268:9;;;6289:10;;;6286:36;;;6302:18;;:::i;6691:168::-;6764:9;;;6795;;6812:15;;;6806:22;;6792:37;6782:71;;6833:18;;:::i;6864:217::-;6904:1;6930;6920:132;;6974:10;6969:3;6965:20;6962:1;6955:31;7009:4;7006:1;6999:15;7037:4;7034:1;7027:15;6920:132;-1:-1:-1;7066:9:1;;6864:217::o;7496:380::-;7575:1;7571:12;;;;7618;;;7639:61;;7693:4;7685:6;7681:17;7671:27;;7639:61;7746:2;7738:6;7735:14;7715:18;7712:38;7709:161;;7792:10;7787:3;7783:20;7780:1;7773:31;7827:4;7824:1;7817:15;7855:4;7852:1;7845:15;7709:161;;7496:380;;;:::o;11072:127::-;11133:10;11128:3;11124:20;11121:1;11114:31;11164:4;11161:1;11154:15;11188:4;11185:1;11178:15;14017:401;14219:2;14201:21;;;14258:2;14238:18;;;14231:30;14297:34;14292:2;14277:18;;14270:62;-1:-1:-1;;;14363:2:1;14348:18;;14341:35;14408:3;14393:19;;14017:401::o;14423:399::-;14625:2;14607:21;;;14664:2;14644:18;;;14637:30;14703:34;14698:2;14683:18;;14676:62;-1:-1:-1;;;14769:2:1;14754:18;;14747:33;14812:3;14797:19;;14423:399::o;17049:245::-;17116:6;17169:2;17157:9;17148:7;17144:23;17140:32;17137:52;;;17185:1;17182;17175:12;17137:52;17217:9;17211:16;17236:28;17258:5;17236:28;:::i;18266:128::-;18333:9;;;18354:11;;;18351:37;;;18368:18;;:::i;19148:251::-;19218:6;19271:2;19259:9;19250:7;19246:23;19242:32;19239:52;;;19287:1;19284;19277:12;19239:52;19319:9;19313:16;19338:31;19363:5;19338:31;:::i;19404:959::-;19666:4;19714:3;19703:9;19699:19;19745:6;19734:9;19727:25;19788:6;19783:2;19772:9;19768:18;19761:34;19831:3;19826:2;19815:9;19811:18;19804:31;19855:6;19890;19884:13;19921:6;19913;19906:22;19959:3;19948:9;19944:19;19937:26;;19998:2;19990:6;19986:15;19972:29;;20019:1;20029:195;20043:6;20040:1;20037:13;20029:195;;;20108:13;;-1:-1:-1;;;;;20104:39:1;20092:52;;20173:2;20199:15;;;;20164:12;;;;20140:1;20058:9;20029:195;;;-1:-1:-1;;;;;;;20280:32:1;;;;20275:2;20260:18;;20253:60;-1:-1:-1;;20344:3:1;20329:19;20322:35;20241:3;19404:959;-1:-1:-1;;;19404:959:1:o

Swarm Source

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