ETH Price: $3,310.12 (+2.23%)
Gas: 8.19 Gwei

Token

Densetsu Bozu (BOZU)
 

Overview

Max Total Supply

1,000,000,000,000 BOZU

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,470,302,788.043887450786235543 BOZU

Value
$0.00
0xdb45808fd51de0be6772ead6368fc9ec33ec65d8
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:
Bozu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-02
*/

/**

Telegram: https://t.me/BozuETH
Twitter: https://twitter.com/BozuETH
Website: https://densetsubozu.com/

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
contract ERC20Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
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 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 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;
}

contract Bozu is Context, IERC20, ERC20Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private constant tokenName = "Densetsu Bozu";
    string private constant tokenSymbol = "BOZU";
    uint8 private constant tokenDecimal = 18;
    uint256 private constant tokenSupply = 1e12 * 10**tokenDecimal;

    mapping(address => mapping(address => uint256)) private tokenAllowances;
    mapping(address => uint256) private tokenBalance;
    mapping(address => bool) private isContractsExcluded;
    mapping(address => bool) private isMaxWalletExcluded;
    mapping(address => bool) private isTaxExcluded;
    mapping(address => bool) public isSniper;
    mapping(address => bool) public isBot;

    address payable liquidityAddress;
    address payable marketingAddress;
    address payable devAddress;
    address dead = address(0xdead);
    address public uniV2Pair;
    IUniswapV2Router02 public uniV2Router;
    address public uniV3Router;
    
    uint256 private maxWallet;
    uint256 private minTaxSwap;
    uint256 private marketingTokens;
    uint256 private liquidityTokens;
	uint256 private totalBurnedTokens;

    uint256 private marketingTax;
    uint256 private liquidityTax;
    uint256 private divForSplitTax;
    uint256 private taxBuyMarketing;
    uint256 private taxBuyLiquidity;
    uint256 private taxSellMarketing;
    uint256 private taxSellTreasury;
    uint256 private taxSellLiquidity;

    uint256 public activeTradingBlock;
    uint256 public sniperPenaltyEnd;

    bool public limitsOn = false;
    bool public maxWalletOn = false;
    bool public live = false;
    bool public contractBlocker = false;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyStatus = false;
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() payable {
        tokenBalance[address(this)] = tokenSupply;
        maxWallet = tokenSupply.mul(2).div(100);
        minTaxSwap = tokenSupply.mul(5).div(10000);

        marketingAddress = payable(0x18E6C6eb0569976118704b505D317a267eF558EC);
        devAddress = payable(0x18E6C6eb0569976118704b505D317a267eF558EC);

        liquidityAddress = payable(owner()); //LEAVE AS OWNER

        taxBuyMarketing = 20;
        taxBuyLiquidity = 0;
        taxSellMarketing = 30;
        taxSellLiquidity = 0;

        isContractsExcluded[address(this)] = true;
        isTaxExcluded[owner()] = true;
        isTaxExcluded[dead] = true;
        isTaxExcluded[address(this)] = true;
        isTaxExcluded[marketingAddress] = true;
        isTaxExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[address(this)] = true;
        isMaxWalletExcluded[owner()] = true;
        isMaxWalletExcluded[marketingAddress] = true;
        isMaxWalletExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[dead] = true;
        
        emit Transfer(address(0), address(this), tokenSupply);
    }
    receive() external payable {}
    function name() external pure override returns (string memory) {
        return tokenName;
    }
    function symbol() external pure override returns (string memory) {
        return tokenSymbol;
    }
    function decimals() external pure override returns (uint8) {
        return tokenDecimal;
    }
    function totalSupply() external pure override returns (uint256) {
        return tokenSupply;
    }
    function balanceOf(address account) public view override returns (uint256) {
        return tokenBalance[account];
    }
    function allowance(address owner, address spender) external view override returns (uint256) {
        return tokenAllowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Can not approve from zero address");
        require(spender != address(0), "ERC20: Can not approve to zero address");
        tokenAllowances[_msgSender()][spender] = amount;
        emit Approval(_msgSender(), spender, amount);
        return true;
    }
    function internalApprove(address owner,address spender,uint256 amount) internal {
        require(owner != address(0), "ERC20: Can not approve from zero address");
        require(spender != address(0), "ERC20: Can not approve to zero address");
        tokenAllowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        internalTransfer(_msgSender(), recipient, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) external override returns (bool) {
        internalTransfer(sender, recipient, amount);
        internalApprove(sender,_msgSender(),
        tokenAllowances[sender][_msgSender()].sub(amount, "ERC20: Can not transfer. Amount exceeds allowance"));
        return true;
    }
    function AirDrop(address[] memory wallets, uint256[] memory percent) external onlyOwner{
        require(wallets.length < 100, "Can only airdrop 100 wallets per txn due to gas limits");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = tokenSupply.mul(percent[i]).div(100);
            internalTransfer(_msgSender(), wallet, amount);
        }
    }
    function GoLive() external onlyOwner returns (bool){
        require(!live, "ERC20: Trades already Live!");
        activeTradingBlock = block.number;
        sniperPenaltyEnd = block.timestamp.add(5 days);
        IUniswapV2Router02 _uniV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniV2Router = _uniV2Router;
        uniV3Router = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
        isContractsExcluded[address(uniV2Router)] = true;
        isContractsExcluded[address(uniV3Router)] = true;
        isMaxWalletExcluded[address(uniV2Router)] = true;
        internalApprove(address(this), address(uniV2Router), tokenSupply);
        uniV2Pair = IUniswapV2Factory(_uniV2Router.factory()).createPair(address(this), _uniV2Router.WETH());
        isContractsExcluded[address(uniV2Pair)] = true;
        isMaxWalletExcluded[address(uniV2Pair)] = true;
        require(address(this).balance > 0, "ERC20: Must have ETH on contract to Go Live!");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        launchSetLiquidityAddress(dead);
        maxWalletOn = true;
        swapAndLiquifyStatus = true;
        limitsOn = true;
        live = true;
        return true;
    }
    function internalTransfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: Transfer amount must be greater than zero");
        require(!isBot[from], "ERC20: Can not transfer from BOT");
        if(!live){
            require(isTaxExcluded[from] || isTaxExcluded[to], "ERC20: Trading Is Not Live!");
        }
        if (maxWalletOn == true && ! isMaxWalletExcluded[to]) {
            require(balanceOf(to).add(amount) <= maxWallet, "ERC20: Max amount of tokens for wallet reached");
        }
        if(limitsOn){
            if (from != owner() && to != owner() && to != address(0) && to != dead && to != uniV2Pair) {
                for (uint x = 0; x < 2; x++) {
                    if(block.number == activeTradingBlock.add(x)) {
                        isSniper[to] = true;
                    }
                }
            }
        }
        if(contractBlocker) {
            require(
                !isContract(to) && isContractsExcluded[from] ||
                !isContract(from) && isContractsExcluded[to] || 
                isContract(from) && isContractsExcluded[to] || 
                isContract(to) && isContractsExcluded[from]
                );
        }
        uint256 totalTokensToSwap = liquidityTokens.add(marketingTokens);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minTaxSwap;
        if (!inSwapAndLiquify && swapAndLiquifyStatus && balanceOf(uniV2Pair) > 0 && totalTokensToSwap > 0 && !isTaxExcluded[to] && !isTaxExcluded[from] && to == uniV2Pair && overMinimumTokenBalance) {
            taxTokenSwap();
            }
        if (isTaxExcluded[from] || isTaxExcluded[to]) {
            marketingTax = 0;
            liquidityTax = 0;
            divForSplitTax = marketingTax.add(liquidityTax);
        } else {
            if (from == uniV2Pair) {
                marketingTax = taxBuyMarketing;
                liquidityTax = taxBuyLiquidity;
                divForSplitTax = taxBuyMarketing.add(taxBuyLiquidity);
            }else if (to == uniV2Pair) {
                marketingTax = taxSellMarketing;
                liquidityTax = taxSellLiquidity;
                divForSplitTax = taxSellMarketing.add(taxSellLiquidity);
                if(isSniper[from] && sniperPenaltyEnd >= block.timestamp){
                    marketingTax = 85;
                    liquidityTax = 10;
                    divForSplitTax = marketingTax.add(liquidityTax);
                }
            }else {
                require(!isSniper[from] || sniperPenaltyEnd <= block.timestamp, "ERC20: Snipers can not transfer till penalty time is over");
                marketingTax = 0;
                liquidityTax = 0;
            }
        }
        tokenTransfer(from, to, amount);
    }
    function taxTokenSwap() internal lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = marketingTokens.add(liquidityTokens);
        uint256 swapLiquidityTokens = liquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(swapLiquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(marketingTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        marketingTokens = 0;
        liquidityTokens = 0;
        (bool success,) = address(marketingAddress).call{value: ethForMarketing}("");
        if(ethForLiquidity != 0 && swapLiquidityTokens != 0) {
            addLiquidity(swapLiquidityTokens, ethForLiquidity);
        }
        if(address(this).balance > 5 * 1e17){
            (success,) = address(devAddress).call{value: address(this).balance}("");
        }
    }
    function swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniV2Router.WETH();
        internalApprove(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        internalApprove(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityAddress,
            block.timestamp
        );
    }
    function calculateTax(uint256 amount) internal view returns (uint256) {
        return amount.mul(marketingTax.add(liquidityTax)).div(100);
    }
    function splitTaxTokens(uint256 taxTokens) internal {
        marketingTokens += taxTokens.mul(marketingTax).div(divForSplitTax);
        liquidityTokens += taxTokens.mul(liquidityTax).div(divForSplitTax);
    }
    function tokenTransfer(address sender,address recipient,uint256 amount) internal {
        if(divForSplitTax != 0){
            uint256 taxTokens = calculateTax(amount);
            uint256 transferTokens = amount.sub(taxTokens);
            splitTaxTokens(taxTokens);
            tokenBalance[sender] -= amount;
            tokenBalance[recipient] += transferTokens;
            tokenBalance[address(this)] += taxTokens;
            emit Transfer(sender, recipient, transferTokens);
        }else{
            tokenBalance[sender] -= amount;
            tokenBalance[recipient] += amount;
            emit Transfer(sender, recipient, amount);
        }
    }
    function launchSetLiquidityAddress(address LPAddress) internal {
        liquidityAddress = payable(LPAddress);
        isTaxExcluded[liquidityAddress] = true;
    }
    function isContract(address account) public view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function addRemoveContract(address account, bool trueORfalse) external onlyOwner {
        isContractsExcluded[account] = trueORfalse;
    }
    function isExcludedContract(address account) public view returns (bool) {
        return isContractsExcluded[account];
    }
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(owner()).call{value: address(this).balance}("");
    }
    function withdrawStuckTokens(uint256 percent) external onlyOwner {
        internalTransfer(address(this), owner(), tokenSupply*percent/100);
    }
    function manualBurnTokensFromLP(uint256 percent) external onlyOwner returns (bool){
        require(percent <= 10, "ERC20: May not nuke more than 10% of tokens in LP");
        uint256 liquidityPairBalance = this.balanceOf(uniV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10**2);
        if (amountToBurn > 0){
            internalTransfer(uniV2Pair, dead, amountToBurn);
        }
        totalBurnedTokens = balanceOf(dead);
        require(totalBurnedTokens <= tokenSupply * 50 / 10**2, "ERC20: Can not burn more then 50% of supply");
        IUniswapV2Pair pair = IUniswapV2Pair(uniV2Pair);
        pair.sync();
        return true;
    }
    function manualSwapTax() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= tokenSupply.mul(5).div(10000), "ERC20: Can only swap back if more than 0.05% of tokens stuck on contract");
        taxTokenSwap();
    }
    function addBot(address account) external onlyOwner {
        require(!isBot[account], "ERC20: Account already added");
        isBot[account] = true;
    }
	function removeBot(address account) external onlyOwner {
        require(isBot[account], "ERC20: Account is not bot");
        isBot[account] = false;
    }
	function removeSniper(address account) external onlyOwner {
        require(isSniper[account], "ERC20: Account is not sniper");
        isSniper[account] = false;
    }
    function setExcludedContractAccount(address account, bool trueORfalse) external onlyOwner {
        isContractsExcluded[address(account)] = trueORfalse;
    }
    function setExcludedFromTax(address account, bool trueORfalse) external onlyOwner {
        isTaxExcluded[address(account)] = trueORfalse;
    }
    function setExcludedFromMaxWallet(address account, bool trueORfalse) external onlyOwner {
        isMaxWalletExcluded[address(account)] = trueORfalse;
    }
    function setMaxWalletAmount(uint256 percent, uint256 divider) external onlyOwner {
        maxWallet = tokenSupply.mul(percent).div(divider);
        require(maxWallet <=tokenSupply.mul(4).div(100), "ERC20: Can not set max wallet more than 4%");
    }
    function setStatusLimits(bool trueORfalse) external onlyOwner {
        limitsOn = trueORfalse;
    }
    function setStatusMaxWallet(bool trueORfalse) external onlyOwner {
       maxWalletOn = trueORfalse;
    }
    function setStatusContractBlocker(bool trueORfalse) external onlyOwner {
        contractBlocker = trueORfalse;
    }
    function setSwapAndLiquifyStatus(bool trueORfalse) external onlyOwner {
        swapAndLiquifyStatus = trueORfalse;
    }
    function setTaxes(uint256 buyMarketingTax, uint256 buyLiquidityTax, uint256 sellMarketingTax, uint256 sellLiquidityTax) external onlyOwner {
        taxBuyMarketing = buyMarketingTax;
        taxBuyLiquidity = buyLiquidityTax;
        taxSellMarketing = sellMarketingTax;
        taxSellLiquidity = sellLiquidityTax;
    }
    function normalTaxes() external onlyOwner {
        taxBuyMarketing = 4;
        taxBuyLiquidity = 1;
        taxSellMarketing = 4;
        taxSellLiquidity = 1;
    }
    function botTaxes() external onlyOwner {
        taxBuyMarketing = 99;
        taxBuyLiquidity = 1;
        taxSellMarketing = 99;
        taxSellLiquidity = 1;
    }
    function viewTaxes() public view returns(uint256 marketingBuy, uint256 liquidityBuy, uint256 marketingSell, uint256 liquiditySell) {
        return(taxBuyMarketing,taxBuyLiquidity,taxSellMarketing,taxSellLiquidity);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"percent","type":"uint256[]"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"GoLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"addRemoveContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractBlocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnTokensFromLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"normalTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedContractAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divider","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusContractBlocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setSwapAndLiquifyStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"uniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV3Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTaxes","outputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b80546001600160a01b03191661dead179055601e805465ff00ffffffff191690556000620000313390565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000896012600a62000404565b6200009a9064e8d4a5100062000415565b306000908152600260208190526040909120919091556200010490606490620000f090620000cb6012600a62000404565b620000dc9064e8d4a5100062000415565b620002cc60201b62001b311790919060201c565b620002e360201b62001b441790919060201c565b600f5562000122612710620000f06005620000cb6012600a62000404565b601055600980547318e6c6eb0569976118704b505d317a267ef558ec6001600160a01b03199182168117909255600a805490911690911790556200016e6000546001600160a01b031690565b600880546001600160a01b0319166001600160a01b03928316178155601460175560006018819055601e601955601b81905530808252600360209081526040808420805460ff199081166001908117909255855488168652600584528286208054821683179055600b80548916875283872080548316841790558587528387208054831684179055600980548a168852848820805484168517905588548a1688528488208054841685179055868852600490955283872080548316841790558654891687528387208054831684179055935488168652828620805482168317905595548716855281852080548716821790559154909516835293822080549093169093179091557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002a46012600a62000404565b620002b59064e8d4a5100062000415565b60405190815260200160405180910390a36200045a565b6000620002da828462000415565b90505b92915050565b6000620002da828462000437565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003485781600019048211156200032c576200032c620002f1565b808516156200033a57918102915b93841c93908002906200030c565b509250929050565b6000826200036157506001620002dd565b816200037057506000620002dd565b81600181146200038957600281146200039457620003b4565b6001915050620002dd565b60ff841115620003a857620003a8620002f1565b50506001821b620002dd565b5060208310610133831016604e8410600b8410161715620003d9575081810a620002dd565b620003e5838362000307565b8060001904821115620003fc57620003fc620002f1565b029392505050565b6000620002da60ff84168362000350565b6000816000190483118215151615620004325762000432620002f1565b500290565b6000826200045557634e487b7160e01b600052601260045260246000fd5b500490565b6130f5806200046a6000396000f3fe60806040526004361061028c5760003560e01c80638bcea9391161015a578063c2ed286b116100c1578063f0c0cf871161007a578063f0c0cf8714610830578063f2fde38b14610846578063f35900d014610866578063f5648a4f14610886578063fa35ab0b1461089b578063ffecf516146108b057600080fd5b8063c2ed286b1461077f578063c8cd94e21461079f578063dd62ed3e146107b4578063e4252ddf14610643578063ea090d97146107fa578063ee2e5a2e1461081057600080fd5b806395d89b411161011357806395d89b41146106a357806396c9b442146106d0578063a12a7d61146106f1578063a20d961514610711578063a73f9b581461074a578063a9059cbb1461075f57600080fd5b80638bcea939146105e55780638c714f80146106055780638da5cb5b1461062557806391c09d1e14610643578063957aa58c14610663578063958c2e521461068357600080fd5b80633b4e935a116101fe5780635fecd926116101b75780635fecd9261461053157806370a0823114610551578063715018a614610571578063745d032f1461058657806375d0cc43146105a55780637817be6c146105c557600080fd5b80633b4e935a146104545780633bbac57914610469578063412201041461049957806351524e5b146104b95780635e6710de146104d95780635fafa589146104f957600080fd5b806318160ddd1161025057806318160ddd14610399578063186d260d146103bc5780631c42047a146103de57806323b872dd146103f8578063313ce5671461041857806333251a0b1461043457600080fd5b806306fdde0314610298578063095ea7b3146102e05780630f3a325f1461031057806311abf53714610340578063162790551461037957600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b5060408051808201909152600d81526c44656e736574737520426f7a7560981b60208201525b6040516102d791906129aa565b60405180910390f35b3480156102ec57600080fd5b506103006102fb366004612a14565b6108d0565b60405190151581526020016102d7565b34801561031c57600080fd5b5061030061032b366004612a40565b60066020526000908152604090205460ff1681565b34801561034c57600080fd5b50601754601854601954601b546040805194855260208501939093529183015260608201526080016102d7565b34801561038557600080fd5b50610300610394366004612a40565b610983565b3480156103a557600080fd5b506103ae6109bf565b6040519081526020016102d7565b3480156103c857600080fd5b506103dc6103d7366004612a6d565b6109e1565b005b3480156103ea57600080fd5b50601e546103009060ff1681565b34801561040457600080fd5b50610300610413366004612a88565b610a1e565b34801561042457600080fd5b50604051601281526020016102d7565b34801561044057600080fd5b506103dc61044f366004612a40565b610a87565b34801561046057600080fd5b50610300610b3a565b34801561047557600080fd5b50610300610484366004612a40565b60076020526000908152604090205460ff1681565b3480156104a557600080fd5b506103dc6104b4366004612ac9565b610f5f565b3480156104c557600080fd5b506103dc6104d4366004612bd4565b610fb4565b3480156104e557600080fd5b506103dc6104f4366004612c96565b6110ec565b34801561050557600080fd5b50600e54610519906001600160a01b031681565b6040516001600160a01b0390911681526020016102d7565b34801561053d57600080fd5b506103dc61054c366004612a40565b611166565b34801561055d57600080fd5b506103ae61056c366004612a40565b611219565b34801561057d57600080fd5b506103dc611234565b34801561059257600080fd5b50601e5461030090610100900460ff1681565b3480156105b157600080fd5b506103dc6105c0366004612a6d565b6112a8565b3480156105d157600080fd5b506103006105e0366004612c96565b6112f0565b3480156105f157600080fd5b50600c54610519906001600160a01b031681565b34801561061157600080fd5b506103dc610620366004612a6d565b61155a565b34801561063157600080fd5b506000546001600160a01b0316610519565b34801561064f57600080fd5b506103dc61065e366004612ac9565b61159e565b34801561066f57600080fd5b50601e546103009062010000900460ff1681565b34801561068f57600080fd5b50600d54610519906001600160a01b031681565b3480156106af57600080fd5b50604080518082019091526004815263424f5a5560e01b60208201526102ca565b3480156106dc57600080fd5b50601e54610300906301000000900460ff1681565b3480156106fd57600080fd5b506103dc61070c366004612caf565b6115f3565b34801561071d57600080fd5b5061030061072c366004612a40565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561075657600080fd5b506103dc611631565b34801561076b57600080fd5b5061030061077a366004612a14565b61170d565b34801561078b57600080fd5b506103dc61079a366004612ac9565b611723565b3480156107ab57600080fd5b506103dc611778565b3480156107c057600080fd5b506103ae6107cf366004612ce1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561080657600080fd5b506103ae601c5481565b34801561081c57600080fd5b506103dc61082b366004612a6d565b6117bb565b34801561083c57600080fd5b506103ae601d5481565b34801561085257600080fd5b506103dc610861366004612a40565b611807565b34801561087257600080fd5b506103dc610881366004612d1a565b6118f6565b34801561089257600080fd5b506103dc6119b5565b3480156108a757600080fd5b506103dc611a37565b3480156108bc57600080fd5b506103dc6108cb366004612a40565b611a7a565b6000336108f85760405162461bcd60e51b81526004016108ef90612d3c565b60405180910390fd5b6001600160a01b03831661091e5760405162461bcd60e51b81526004016108ef90612d84565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906109b757508115155b949350505050565b60006109cd6012600a612ec4565b6109dc9064e8d4a51000612ed3565b905090565b6000546001600160a01b03163314610a0b5760405162461bcd60e51b81526004016108ef90612ef2565b601e805460ff1916911515919091179055565b6000610a2b848484611b50565b610a7d8433610a788560405180606001604052806031815260200161308f603191396001600160a01b038a16600090815260016020908152604080832033845290915290205491906122bf565b6122eb565b5060019392505050565b6000546001600160a01b03163314610ab15760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03811660009081526006602052604090205460ff16610b195760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e697065720000000060448201526064016108ef565b6001600160a01b03166000908152600660205260409020805460ff19169055565b600080546001600160a01b03163314610b655760405162461bcd60e51b81526004016108ef90612ef2565b601e5462010000900460ff1615610bbe5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108ef565b43601c55610bcf4262069780612399565b601d55600d80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600e80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610ccb3082610cbc6012600a612ec4565b610a789064e8d4a51000612ed3565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0457600080fd5b505afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c9190612f37565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc9190612f37565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610e0457600080fd5b505af1158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c9190612f37565b600c80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610ef55760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b60648201526084016108ef565b610f07610f0130611219565b476123a5565b600b54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff191660011790555050601e805465ff0000ffffff191665010000010101179055600190565b6000546001600160a01b03163314610f895760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fde5760405162461bcd60e51b81526004016108ef90612ef2565b606482511061104e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016108ef565b60005b82518110156110e757600083828151811061106e5761106e612f54565b6020026020010151905060006110c560646110bf86868151811061109457611094612f54565b60200260200101516012600a6110aa9190612ec4565b6110b99064e8d4a51000612ed3565b90611b31565b90611b44565b90506110d2338383611b50565b505080806110df90612f6a565b915050611051565b505050565b6000546001600160a01b031633146111165760405162461bcd60e51b81526004016108ef90612ef2565b6111633061112c6000546001600160a01b031690565b60648461113b6012600a612ec4565b61114a9064e8d4a51000612ed3565b6111549190612ed3565b61115e9190612f85565b611b50565b50565b6000546001600160a01b031633146111905760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03811660009081526007602052604090205460ff166111f85760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f740000000000000060448201526064016108ef565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b0316331461125e5760405162461bcd60e51b81526004016108ef90612ef2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112d25760405162461bcd60e51b81526004016108ef90612ef2565b601e805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b0316331461131b5760405162461bcd60e51b81526004016108ef90612ef2565b600a8211156113865760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b60648201526084016108ef565b600c546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b1580156113cc57600080fd5b505afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114049190612fa7565b9050600061141760646110bf8487611b31565b9050801561143c57600c54600b5461143c916001600160a01b03908116911683611b50565b600b54611451906001600160a01b0316611219565b60135560646114626012600a612ec4565b6114719064e8d4a51000612ed3565b61147c906032612ed3565b6114869190612f85565b60135411156114eb5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b60648201526084016108ef565b600c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b031633146115845760405162461bcd60e51b81526004016108ef90612ef2565b601e80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146115c85760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461161d5760405162461bcd60e51b81526004016108ef90612ef2565b601793909355601891909155601955601b55565b6000546001600160a01b0316331461165b5760405162461bcd60e51b81526004016108ef90612ef2565b600061166630611219565b905061167f6127106110bf60056110aa6012600a612ec4565b8110156117055760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a4016108ef565b611163612468565b600061171a338484611b50565b50600192915050565b6000546001600160a01b0316331461174d5760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117a25760405162461bcd60e51b81526004016108ef90612ef2565b6004601781905560016018819055601991909155601b55565b6000546001600160a01b031633146117e55760405162461bcd60e51b81526004016108ef90612ef2565b601e8054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146118315760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03811661189b5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016108ef565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119205760405162461bcd60e51b81526004016108ef90612ef2565b611934816110bf846110aa6012600a612ec4565b600f5561194d60646110bf60046110aa6012600a612ec4565b600f5411156119b15760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b60648201526084016108ef565b5050565b6000546001600160a01b031633146119df5760405162461bcd60e51b81526004016108ef90612ef2565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b50505050565b6000546001600160a01b03163314611a615760405162461bcd60e51b81526004016108ef90612ef2565b6063601781905560016018819055601991909155601b55565b6000546001600160a01b03163314611aa45760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03811660009081526007602052604090205460ff1615611b0d5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c72656164792061646465640000000060448201526064016108ef565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611b3d8284612ed3565b9392505050565b6000611b3d8284612f85565b6001600160a01b038316611bb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ef565b6001600160a01b038216611c165760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ef565b60008111611c7f5760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108ef565b6001600160a01b03831660009081526007602052604090205460ff1615611ce85760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f5460448201526064016108ef565b601e5462010000900460ff16611d83576001600160a01b03831660009081526005602052604090205460ff1680611d3757506001600160a01b03821660009081526005602052604090205460ff165b611d835760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c69766521000000000060448201526064016108ef565b601e5460ff6101009091041615156001148015611db957506001600160a01b03821660009081526004602052604090205460ff16155b15611e3957600f54611dd482611dce85611219565b90612399565b1115611e395760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b60648201526084016108ef565b601e5460ff1615611f15576000546001600160a01b03848116911614801590611e7057506000546001600160a01b03838116911614155b8015611e8457506001600160a01b03821615155b8015611e9e5750600b546001600160a01b03838116911614155b8015611eb85750600c546001600160a01b03838116911614155b15611f155760005b6002811015611f1357601c54611ed69082612399565b431415611f01576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611f0b81612f6a565b915050611ec0565b505b601e546301000000900460ff1615611ff857611f3082610983565b158015611f5557506001600160a01b03831660009081526003602052604090205460ff165b80611f895750611f6483610983565b158015611f8957506001600160a01b03821660009081526003602052604090205460ff165b80611fbc5750611f9883610983565b8015611fbc57506001600160a01b03821660009081526003602052604090205460ff165b80611fef5750611fcb82610983565b8015611fef57506001600160a01b03831660009081526003602052604090205460ff165b611ff857600080fd5b600061201160115460125461239990919063ffffffff16565b9050600061201e30611219565b601054601e5491925082101590640100000000900460ff1615801561204e5750601e5465010000000000900460ff165b801561206f5750600c5460009061206d906001600160a01b0316611219565b115b801561207b5750600083115b80156120a057506001600160a01b03851660009081526005602052604090205460ff16155b80156120c557506001600160a01b03861660009081526005602052604090205460ff16155b80156120de5750600c546001600160a01b038681169116145b80156120e75750805b156120f4576120f4612468565b6001600160a01b03861660009081526005602052604090205460ff168061213357506001600160a01b03851660009081526005602052604090205460ff165b156121565760006014819055601581905561214e9080612399565b6016556122ac565b600c546001600160a01b0387811691161415612186576017546014819055601854601581905561214e9190612399565b600c546001600160a01b0386811691161415612205576019546014819055601b5460158190556121b69190612399565b6016556001600160a01b03861660009081526006602052604090205460ff1680156121e3575042601d5410155b156122005760556014819055600a601581905561214e9190612399565b6122ac565b6001600160a01b03861660009081526006602052604090205460ff16158061222f575042601d5411155b6122a15760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f7665720000000000000060648201526084016108ef565b600060148190556015555b6122b7868686612614565b505050505050565b600081848411156122e35760405162461bcd60e51b81526004016108ef91906129aa565b505050900390565b6001600160a01b0383166123115760405162461bcd60e51b81526004016108ef90612d3c565b6001600160a01b0382166123375760405162461bcd60e51b81526004016108ef90612d84565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611b3d8284612fc0565b600d546123bd9030906001600160a01b0316846122eb565b600d5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124619190612fd8565b5050505050565b601e805464ff000000001916640100000000179055600061248830611219565b905060006124a360125460115461239990919063ffffffff16565b905060006124bd6002601254611b4490919063ffffffff16565b905060006124cb84836127b5565b9050476124d7826127c1565b60006124e347836127b5565b90506000612500866110bf60115485611b3190919063ffffffff16565b9050600061250e83836127b5565b60006011819055601281905560095460405192935090916001600160a01b039091169084908381818185875af1925050503d806000811461256b576040519150601f19603f3d011682016040523d82523d6000602084013e612570565b606091505b505090508160001415801561258457508615155b156125935761259387836123a5565b6706f05b59d3b200004711156125fb57600a546040516001600160a01b03909116904790600081818185875af1925050503d80600081146125f0576040519150601f19603f3d011682016040523d82523d6000602084013e6125f5565b606091505b50909150505b5050601e805464ff000000001916905550505050505050565b6016541561271457600061262782612922565b9050600061263583836127b5565b90506126408261294a565b6001600160a01b03851660009081526002602052604081208054859290612668908490613006565b90915550506001600160a01b03841660009081526002602052604081208054839290612695908490612fc0565b909155505030600090815260026020526040812080548492906126b9908490612fc0565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161270591815260200190565b60405180910390a35050505050565b6001600160a01b0383166000908152600260205260408120805483929061273c908490613006565b90915550506001600160a01b03821660009081526002602052604081208054839290612769908490612fc0565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161238c91815260200190565b6000611b3d8284613006565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127f6576127f6612f54565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561284a57600080fd5b505afa15801561285e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128829190612f37565b8160018151811061289557612895612f54565b6001600160a01b039283166020918202929092010152600d546128bb91309116846122eb565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906128f490859060009086903090429060040161301d565b600060405180830381600087803b15801561290e57600080fd5b505af11580156122b7573d6000803e3d6000fd5b600061097d60646110bf61294360155460145461239990919063ffffffff16565b8590611b31565b6129656016546110bf60145484611b3190919063ffffffff16565b601160008282546129769190612fc0565b909155505060165460155461299191906110bf908490611b31565b601260008282546129a29190612fc0565b909155505050565b600060208083528351808285015260005b818110156129d7578581018301518582016040015282016129bb565b818111156129e9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461116357600080fd5b60008060408385031215612a2757600080fd5b8235612a32816129ff565b946020939093013593505050565b600060208284031215612a5257600080fd5b8135611b3d816129ff565b8035801515811461155557600080fd5b600060208284031215612a7f57600080fd5b611b3d82612a5d565b600080600060608486031215612a9d57600080fd5b8335612aa8816129ff565b92506020840135612ab8816129ff565b929592945050506040919091013590565b60008060408385031215612adc57600080fd5b8235612ae7816129ff565b9150612af560208401612a5d565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b3d57612b3d612afe565b604052919050565b600067ffffffffffffffff821115612b5f57612b5f612afe565b5060051b60200190565b600082601f830112612b7a57600080fd5b81356020612b8f612b8a83612b45565b612b14565b82815260059290921b84018101918181019086841115612bae57600080fd5b8286015b84811015612bc95780358352918301918301612bb2565b509695505050505050565b60008060408385031215612be757600080fd5b823567ffffffffffffffff80821115612bff57600080fd5b818501915085601f830112612c1357600080fd5b81356020612c23612b8a83612b45565b82815260059290921b84018101918181019089841115612c4257600080fd5b948201945b83861015612c69578535612c5a816129ff565b82529482019490820190612c47565b96505086013592505080821115612c7f57600080fd5b50612c8c85828601612b69565b9150509250929050565b600060208284031215612ca857600080fd5b5035919050565b60008060008060808587031215612cc557600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612cf457600080fd5b8235612cff816129ff565b91506020830135612d0f816129ff565b809150509250929050565b60008060408385031215612d2d57600080fd5b50508035926020909101359150565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612e1b578160001904821115612e0157612e01612dca565b80851615612e0e57918102915b93841c9390800290612de5565b509250929050565b600082612e325750600161097d565b81612e3f5750600061097d565b8160018114612e555760028114612e5f57612e7b565b600191505061097d565b60ff841115612e7057612e70612dca565b50506001821b61097d565b5060208310610133831016604e8410600b8410161715612e9e575081810a61097d565b612ea88383612de0565b8060001904821115612ebc57612ebc612dca565b029392505050565b6000611b3d60ff841683612e23565b6000816000190483118215151615612eed57612eed612dca565b500290565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060208284031215612f4957600080fd5b8151611b3d816129ff565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612f7e57612f7e612dca565b5060010190565b600082612fa257634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fb957600080fd5b5051919050565b60008219821115612fd357612fd3612dca565b500190565b600080600060608486031215612fed57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561301857613018612dca565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561306d5784516001600160a01b031683529383019391830191600101613048565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a92ce22f9f3fca365465ce5deea888497e0e3657715afbc2f733cca9bb56c4c164736f6c63430008090033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80638bcea9391161015a578063c2ed286b116100c1578063f0c0cf871161007a578063f0c0cf8714610830578063f2fde38b14610846578063f35900d014610866578063f5648a4f14610886578063fa35ab0b1461089b578063ffecf516146108b057600080fd5b8063c2ed286b1461077f578063c8cd94e21461079f578063dd62ed3e146107b4578063e4252ddf14610643578063ea090d97146107fa578063ee2e5a2e1461081057600080fd5b806395d89b411161011357806395d89b41146106a357806396c9b442146106d0578063a12a7d61146106f1578063a20d961514610711578063a73f9b581461074a578063a9059cbb1461075f57600080fd5b80638bcea939146105e55780638c714f80146106055780638da5cb5b1461062557806391c09d1e14610643578063957aa58c14610663578063958c2e521461068357600080fd5b80633b4e935a116101fe5780635fecd926116101b75780635fecd9261461053157806370a0823114610551578063715018a614610571578063745d032f1461058657806375d0cc43146105a55780637817be6c146105c557600080fd5b80633b4e935a146104545780633bbac57914610469578063412201041461049957806351524e5b146104b95780635e6710de146104d95780635fafa589146104f957600080fd5b806318160ddd1161025057806318160ddd14610399578063186d260d146103bc5780631c42047a146103de57806323b872dd146103f8578063313ce5671461041857806333251a0b1461043457600080fd5b806306fdde0314610298578063095ea7b3146102e05780630f3a325f1461031057806311abf53714610340578063162790551461037957600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b5060408051808201909152600d81526c44656e736574737520426f7a7560981b60208201525b6040516102d791906129aa565b60405180910390f35b3480156102ec57600080fd5b506103006102fb366004612a14565b6108d0565b60405190151581526020016102d7565b34801561031c57600080fd5b5061030061032b366004612a40565b60066020526000908152604090205460ff1681565b34801561034c57600080fd5b50601754601854601954601b546040805194855260208501939093529183015260608201526080016102d7565b34801561038557600080fd5b50610300610394366004612a40565b610983565b3480156103a557600080fd5b506103ae6109bf565b6040519081526020016102d7565b3480156103c857600080fd5b506103dc6103d7366004612a6d565b6109e1565b005b3480156103ea57600080fd5b50601e546103009060ff1681565b34801561040457600080fd5b50610300610413366004612a88565b610a1e565b34801561042457600080fd5b50604051601281526020016102d7565b34801561044057600080fd5b506103dc61044f366004612a40565b610a87565b34801561046057600080fd5b50610300610b3a565b34801561047557600080fd5b50610300610484366004612a40565b60076020526000908152604090205460ff1681565b3480156104a557600080fd5b506103dc6104b4366004612ac9565b610f5f565b3480156104c557600080fd5b506103dc6104d4366004612bd4565b610fb4565b3480156104e557600080fd5b506103dc6104f4366004612c96565b6110ec565b34801561050557600080fd5b50600e54610519906001600160a01b031681565b6040516001600160a01b0390911681526020016102d7565b34801561053d57600080fd5b506103dc61054c366004612a40565b611166565b34801561055d57600080fd5b506103ae61056c366004612a40565b611219565b34801561057d57600080fd5b506103dc611234565b34801561059257600080fd5b50601e5461030090610100900460ff1681565b3480156105b157600080fd5b506103dc6105c0366004612a6d565b6112a8565b3480156105d157600080fd5b506103006105e0366004612c96565b6112f0565b3480156105f157600080fd5b50600c54610519906001600160a01b031681565b34801561061157600080fd5b506103dc610620366004612a6d565b61155a565b34801561063157600080fd5b506000546001600160a01b0316610519565b34801561064f57600080fd5b506103dc61065e366004612ac9565b61159e565b34801561066f57600080fd5b50601e546103009062010000900460ff1681565b34801561068f57600080fd5b50600d54610519906001600160a01b031681565b3480156106af57600080fd5b50604080518082019091526004815263424f5a5560e01b60208201526102ca565b3480156106dc57600080fd5b50601e54610300906301000000900460ff1681565b3480156106fd57600080fd5b506103dc61070c366004612caf565b6115f3565b34801561071d57600080fd5b5061030061072c366004612a40565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561075657600080fd5b506103dc611631565b34801561076b57600080fd5b5061030061077a366004612a14565b61170d565b34801561078b57600080fd5b506103dc61079a366004612ac9565b611723565b3480156107ab57600080fd5b506103dc611778565b3480156107c057600080fd5b506103ae6107cf366004612ce1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561080657600080fd5b506103ae601c5481565b34801561081c57600080fd5b506103dc61082b366004612a6d565b6117bb565b34801561083c57600080fd5b506103ae601d5481565b34801561085257600080fd5b506103dc610861366004612a40565b611807565b34801561087257600080fd5b506103dc610881366004612d1a565b6118f6565b34801561089257600080fd5b506103dc6119b5565b3480156108a757600080fd5b506103dc611a37565b3480156108bc57600080fd5b506103dc6108cb366004612a40565b611a7a565b6000336108f85760405162461bcd60e51b81526004016108ef90612d3c565b60405180910390fd5b6001600160a01b03831661091e5760405162461bcd60e51b81526004016108ef90612d84565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906109b757508115155b949350505050565b60006109cd6012600a612ec4565b6109dc9064e8d4a51000612ed3565b905090565b6000546001600160a01b03163314610a0b5760405162461bcd60e51b81526004016108ef90612ef2565b601e805460ff1916911515919091179055565b6000610a2b848484611b50565b610a7d8433610a788560405180606001604052806031815260200161308f603191396001600160a01b038a16600090815260016020908152604080832033845290915290205491906122bf565b6122eb565b5060019392505050565b6000546001600160a01b03163314610ab15760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03811660009081526006602052604090205460ff16610b195760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e697065720000000060448201526064016108ef565b6001600160a01b03166000908152600660205260409020805460ff19169055565b600080546001600160a01b03163314610b655760405162461bcd60e51b81526004016108ef90612ef2565b601e5462010000900460ff1615610bbe5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108ef565b43601c55610bcf4262069780612399565b601d55600d80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600e80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610ccb3082610cbc6012600a612ec4565b610a789064e8d4a51000612ed3565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0457600080fd5b505afa158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c9190612f37565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc9190612f37565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610e0457600080fd5b505af1158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c9190612f37565b600c80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610ef55760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b60648201526084016108ef565b610f07610f0130611219565b476123a5565b600b54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff191660011790555050601e805465ff0000ffffff191665010000010101179055600190565b6000546001600160a01b03163314610f895760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fde5760405162461bcd60e51b81526004016108ef90612ef2565b606482511061104e5760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016108ef565b60005b82518110156110e757600083828151811061106e5761106e612f54565b6020026020010151905060006110c560646110bf86868151811061109457611094612f54565b60200260200101516012600a6110aa9190612ec4565b6110b99064e8d4a51000612ed3565b90611b31565b90611b44565b90506110d2338383611b50565b505080806110df90612f6a565b915050611051565b505050565b6000546001600160a01b031633146111165760405162461bcd60e51b81526004016108ef90612ef2565b6111633061112c6000546001600160a01b031690565b60648461113b6012600a612ec4565b61114a9064e8d4a51000612ed3565b6111549190612ed3565b61115e9190612f85565b611b50565b50565b6000546001600160a01b031633146111905760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03811660009081526007602052604090205460ff166111f85760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f740000000000000060448201526064016108ef565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b0316331461125e5760405162461bcd60e51b81526004016108ef90612ef2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112d25760405162461bcd60e51b81526004016108ef90612ef2565b601e805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b0316331461131b5760405162461bcd60e51b81526004016108ef90612ef2565b600a8211156113865760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b60648201526084016108ef565b600c546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b1580156113cc57600080fd5b505afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114049190612fa7565b9050600061141760646110bf8487611b31565b9050801561143c57600c54600b5461143c916001600160a01b03908116911683611b50565b600b54611451906001600160a01b0316611219565b60135560646114626012600a612ec4565b6114719064e8d4a51000612ed3565b61147c906032612ed3565b6114869190612f85565b60135411156114eb5760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b60648201526084016108ef565b600c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b031633146115845760405162461bcd60e51b81526004016108ef90612ef2565b601e80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146115c85760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461161d5760405162461bcd60e51b81526004016108ef90612ef2565b601793909355601891909155601955601b55565b6000546001600160a01b0316331461165b5760405162461bcd60e51b81526004016108ef90612ef2565b600061166630611219565b905061167f6127106110bf60056110aa6012600a612ec4565b8110156117055760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a4016108ef565b611163612468565b600061171a338484611b50565b50600192915050565b6000546001600160a01b0316331461174d5760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117a25760405162461bcd60e51b81526004016108ef90612ef2565b6004601781905560016018819055601991909155601b55565b6000546001600160a01b031633146117e55760405162461bcd60e51b81526004016108ef90612ef2565b601e8054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146118315760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03811661189b5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016108ef565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146119205760405162461bcd60e51b81526004016108ef90612ef2565b611934816110bf846110aa6012600a612ec4565b600f5561194d60646110bf60046110aa6012600a612ec4565b600f5411156119b15760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b60648201526084016108ef565b5050565b6000546001600160a01b031633146119df5760405162461bcd60e51b81526004016108ef90612ef2565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114611a2c576040519150601f19603f3d011682016040523d82523d6000602084013e611a31565b606091505b50505050565b6000546001600160a01b03163314611a615760405162461bcd60e51b81526004016108ef90612ef2565b6063601781905560016018819055601991909155601b55565b6000546001600160a01b03163314611aa45760405162461bcd60e51b81526004016108ef90612ef2565b6001600160a01b03811660009081526007602052604090205460ff1615611b0d5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c72656164792061646465640000000060448201526064016108ef565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611b3d8284612ed3565b9392505050565b6000611b3d8284612f85565b6001600160a01b038316611bb45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108ef565b6001600160a01b038216611c165760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108ef565b60008111611c7f5760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108ef565b6001600160a01b03831660009081526007602052604090205460ff1615611ce85760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f5460448201526064016108ef565b601e5462010000900460ff16611d83576001600160a01b03831660009081526005602052604090205460ff1680611d3757506001600160a01b03821660009081526005602052604090205460ff165b611d835760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c69766521000000000060448201526064016108ef565b601e5460ff6101009091041615156001148015611db957506001600160a01b03821660009081526004602052604090205460ff16155b15611e3957600f54611dd482611dce85611219565b90612399565b1115611e395760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b60648201526084016108ef565b601e5460ff1615611f15576000546001600160a01b03848116911614801590611e7057506000546001600160a01b03838116911614155b8015611e8457506001600160a01b03821615155b8015611e9e5750600b546001600160a01b03838116911614155b8015611eb85750600c546001600160a01b03838116911614155b15611f155760005b6002811015611f1357601c54611ed69082612399565b431415611f01576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611f0b81612f6a565b915050611ec0565b505b601e546301000000900460ff1615611ff857611f3082610983565b158015611f5557506001600160a01b03831660009081526003602052604090205460ff165b80611f895750611f6483610983565b158015611f8957506001600160a01b03821660009081526003602052604090205460ff165b80611fbc5750611f9883610983565b8015611fbc57506001600160a01b03821660009081526003602052604090205460ff165b80611fef5750611fcb82610983565b8015611fef57506001600160a01b03831660009081526003602052604090205460ff165b611ff857600080fd5b600061201160115460125461239990919063ffffffff16565b9050600061201e30611219565b601054601e5491925082101590640100000000900460ff1615801561204e5750601e5465010000000000900460ff165b801561206f5750600c5460009061206d906001600160a01b0316611219565b115b801561207b5750600083115b80156120a057506001600160a01b03851660009081526005602052604090205460ff16155b80156120c557506001600160a01b03861660009081526005602052604090205460ff16155b80156120de5750600c546001600160a01b038681169116145b80156120e75750805b156120f4576120f4612468565b6001600160a01b03861660009081526005602052604090205460ff168061213357506001600160a01b03851660009081526005602052604090205460ff165b156121565760006014819055601581905561214e9080612399565b6016556122ac565b600c546001600160a01b0387811691161415612186576017546014819055601854601581905561214e9190612399565b600c546001600160a01b0386811691161415612205576019546014819055601b5460158190556121b69190612399565b6016556001600160a01b03861660009081526006602052604090205460ff1680156121e3575042601d5410155b156122005760556014819055600a601581905561214e9190612399565b6122ac565b6001600160a01b03861660009081526006602052604090205460ff16158061222f575042601d5411155b6122a15760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f7665720000000000000060648201526084016108ef565b600060148190556015555b6122b7868686612614565b505050505050565b600081848411156122e35760405162461bcd60e51b81526004016108ef91906129aa565b505050900390565b6001600160a01b0383166123115760405162461bcd60e51b81526004016108ef90612d3c565b6001600160a01b0382166123375760405162461bcd60e51b81526004016108ef90612d84565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611b3d8284612fc0565b600d546123bd9030906001600160a01b0316846122eb565b600d5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124619190612fd8565b5050505050565b601e805464ff000000001916640100000000179055600061248830611219565b905060006124a360125460115461239990919063ffffffff16565b905060006124bd6002601254611b4490919063ffffffff16565b905060006124cb84836127b5565b9050476124d7826127c1565b60006124e347836127b5565b90506000612500866110bf60115485611b3190919063ffffffff16565b9050600061250e83836127b5565b60006011819055601281905560095460405192935090916001600160a01b039091169084908381818185875af1925050503d806000811461256b576040519150601f19603f3d011682016040523d82523d6000602084013e612570565b606091505b505090508160001415801561258457508615155b156125935761259387836123a5565b6706f05b59d3b200004711156125fb57600a546040516001600160a01b03909116904790600081818185875af1925050503d80600081146125f0576040519150601f19603f3d011682016040523d82523d6000602084013e6125f5565b606091505b50909150505b5050601e805464ff000000001916905550505050505050565b6016541561271457600061262782612922565b9050600061263583836127b5565b90506126408261294a565b6001600160a01b03851660009081526002602052604081208054859290612668908490613006565b90915550506001600160a01b03841660009081526002602052604081208054839290612695908490612fc0565b909155505030600090815260026020526040812080548492906126b9908490612fc0565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161270591815260200190565b60405180910390a35050505050565b6001600160a01b0383166000908152600260205260408120805483929061273c908490613006565b90915550506001600160a01b03821660009081526002602052604081208054839290612769908490612fc0565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161238c91815260200190565b6000611b3d8284613006565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127f6576127f6612f54565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561284a57600080fd5b505afa15801561285e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128829190612f37565b8160018151811061289557612895612f54565b6001600160a01b039283166020918202929092010152600d546128bb91309116846122eb565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906128f490859060009086903090429060040161301d565b600060405180830381600087803b15801561290e57600080fd5b505af11580156122b7573d6000803e3d6000fd5b600061097d60646110bf61294360155460145461239990919063ffffffff16565b8590611b31565b6129656016546110bf60145484611b3190919063ffffffff16565b601160008282546129769190612fc0565b909155505060165460155461299191906110bf908490611b31565b601260008282546129a29190612fc0565b909155505050565b600060208083528351808285015260005b818110156129d7578581018301518582016040015282016129bb565b818111156129e9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461116357600080fd5b60008060408385031215612a2757600080fd5b8235612a32816129ff565b946020939093013593505050565b600060208284031215612a5257600080fd5b8135611b3d816129ff565b8035801515811461155557600080fd5b600060208284031215612a7f57600080fd5b611b3d82612a5d565b600080600060608486031215612a9d57600080fd5b8335612aa8816129ff565b92506020840135612ab8816129ff565b929592945050506040919091013590565b60008060408385031215612adc57600080fd5b8235612ae7816129ff565b9150612af560208401612a5d565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b3d57612b3d612afe565b604052919050565b600067ffffffffffffffff821115612b5f57612b5f612afe565b5060051b60200190565b600082601f830112612b7a57600080fd5b81356020612b8f612b8a83612b45565b612b14565b82815260059290921b84018101918181019086841115612bae57600080fd5b8286015b84811015612bc95780358352918301918301612bb2565b509695505050505050565b60008060408385031215612be757600080fd5b823567ffffffffffffffff80821115612bff57600080fd5b818501915085601f830112612c1357600080fd5b81356020612c23612b8a83612b45565b82815260059290921b84018101918181019089841115612c4257600080fd5b948201945b83861015612c69578535612c5a816129ff565b82529482019490820190612c47565b96505086013592505080821115612c7f57600080fd5b50612c8c85828601612b69565b9150509250929050565b600060208284031215612ca857600080fd5b5035919050565b60008060008060808587031215612cc557600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612cf457600080fd5b8235612cff816129ff565b91506020830135612d0f816129ff565b809150509250929050565b60008060408385031215612d2d57600080fd5b50508035926020909101359150565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612e1b578160001904821115612e0157612e01612dca565b80851615612e0e57918102915b93841c9390800290612de5565b509250929050565b600082612e325750600161097d565b81612e3f5750600061097d565b8160018114612e555760028114612e5f57612e7b565b600191505061097d565b60ff841115612e7057612e70612dca565b50506001821b61097d565b5060208310610133831016604e8410600b8410161715612e9e575081810a61097d565b612ea88383612de0565b8060001904821115612ebc57612ebc612dca565b029392505050565b6000611b3d60ff841683612e23565b6000816000190483118215151615612eed57612eed612dca565b500290565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060208284031215612f4957600080fd5b8151611b3d816129ff565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612f7e57612f7e612dca565b5060010190565b600082612fa257634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fb957600080fd5b5051919050565b60008219821115612fd357612fd3612dca565b500190565b600080600060608486031215612fed57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561301857613018612dca565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561306d5784516001600160a01b031683529383019391830191600101613048565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a92ce22f9f3fca365465ce5deea888497e0e3657715afbc2f733cca9bb56c4c164736f6c63430008090033

Deployed Bytecode Sourcemap

18234:17561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21317:98;;;;;;;;;;-1:-1:-1;21398:9:0;;;;;;;;;;;;-1:-1:-1;;;21398:9:0;;;;21317:98;;;;;;;:::i;:::-;;;;;;;;22022:397;;;;;;;;;;-1:-1:-1;22022:397:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;22022:397:0;1072:187:1;18886:40:0;;;;;;;;;;-1:-1:-1;18886:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35569:223;;;;;;;;;;-1:-1:-1;35718:15:0;;35734;;35750:16;;35767;;35569:223;;;1747:25:1;;;1803:2;1788:18;;1781:34;;;;1831:18;;;1824:34;1889:2;1874:18;;1867:34;1734:3;1719:19;35569:223:0;1516:391:1;31240:337:0;;;;;;;;;;-1:-1:-1;31240:337:0;;;;;:::i;:::-;;:::i;21632:101::-;;;;;;;;;;;;;:::i;:::-;;;2058:25:1;;;2046:2;2031:18;21632:101:0;1912:177:1;34404:103:0;;;;;;;;;;-1:-1:-1;34404:103:0;;;;;:::i;:::-;;:::i;:::-;;19802:28;;;;;;;;;;-1:-1:-1;19802:28:0;;;;;;;;22966:348;;;;;;;;;;-1:-1:-1;22966:348:0;;;;;:::i;:::-;;:::i;21529:97::-;;;;;;;;;;-1:-1:-1;21529:97:0;;18502:2;3047:36:1;;3035:2;3020:18;21529:97:0;2905:184:1;33485:171:0;;;;;;;;;;-1:-1:-1;33485:171:0;;;;;:::i;:::-;;:::i;23755:1249::-;;;;;;;;;;;;;:::i;18933:37::-;;;;;;;;;;-1:-1:-1;18933:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33980:158;;;;;;;;;;-1:-1:-1;33980:158:0;;;;;:::i;:::-;;:::i;23320:429::-;;;;;;;;;;-1:-1:-1;23320:429:0;;;;;:::i;:::-;;:::i;32026:149::-;;;;;;;;;;-1:-1:-1;32026:149:0;;;;;:::i;:::-;;:::i;19202:26::-;;;;;;;;;;-1:-1:-1;19202:26:0;;;;-1:-1:-1;;;;;19202:26:0;;;;;;-1:-1:-1;;;;;6250:32:1;;;6232:51;;6220:2;6205:18;19202:26:0;6086:203:1;33323:159:0;;;;;;;;;;-1:-1:-1;33323:159:0;;;;;:::i;:::-;;:::i;21739:122::-;;;;;;;;;;-1:-1:-1;21739:122:0;;;;;:::i;:::-;;:::i;848:148::-;;;;;;;;;;;;;:::i;19837:31::-;;;;;;;;;;-1:-1:-1;19837:31:0;;;;;;;;;;;34627:119;;;;;;;;;;-1:-1:-1;34627:119:0;;;;;:::i;:::-;;:::i;32181:686::-;;;;;;;;;;-1:-1:-1;32181:686:0;;;;;:::i;:::-;;:::i;19127:24::-;;;;;;;;;;-1:-1:-1;19127:24:0;;;;-1:-1:-1;;;;;19127:24:0;;;34513:108;;;;;;;;;;-1:-1:-1;34513:108:0;;;;;:::i;:::-;;:::i;624:87::-;;;;;;;;;;-1:-1:-1;670:7:0;697:6;-1:-1:-1;;;;;697:6:0;624:87;;33662:160;;;;;;;;;;-1:-1:-1;33662:160:0;;;;;:::i;:::-;;:::i;19875:24::-;;;;;;;;;;-1:-1:-1;19875:24:0;;;;;;;;;;;19158:37;;;;;;;;;;-1:-1:-1;19158:37:0;;;;-1:-1:-1;;;;;19158:37:0;;;21421:102;;;;;;;;;;-1:-1:-1;21504:11:0;;;;;;;;;;;;-1:-1:-1;;;21504:11:0;;;;21421:102;;19906:35;;;;;;;;;;-1:-1:-1;19906:35:0;;;;;;;;;;;34881:327;;;;;;;;;;-1:-1:-1;34881:327:0;;;;;:::i;:::-;;:::i;31731:126::-;;;;;;;;;;-1:-1:-1;31731:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;31821:28:0;31797:4;31821:28;;;:19;:28;;;;;;;;;31731:126;32873:282;;;;;;;;;;;;;:::i;22784:176::-;;;;;;;;;;-1:-1:-1;22784:176:0;;;;;:::i;:::-;;:::i;33828:146::-;;;;;;;;;;-1:-1:-1;33828:146:0;;;;;:::i;:::-;;:::i;35214:172::-;;;;;;;;;;;;;:::i;21867:149::-;;;;;;;;;;-1:-1:-1;21867:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;21977:22:0;;;21950:7;21977:22;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;21867:149;19722:33;;;;;;;;;;;;;;;;34752:123;;;;;;;;;;-1:-1:-1;34752:123:0;;;;;:::i;:::-;;:::i;19762:31::-;;;;;;;;;;;;;;;;1002:249;;;;;;;;;;-1:-1:-1;1002:249:0;;;;;:::i;:::-;;:::i;34144:254::-;;;;;;;;;;-1:-1:-1;34144:254:0;;;;;:::i;:::-;;:::i;31863:157::-;;;;;;;;;;;;;:::i;35392:171::-;;;;;;;;;;;;;:::i;33161:159::-;;;;;;;;;;-1:-1:-1;33161:159:0;;;;;:::i;:::-;;:::i;22022:397::-;22097:4;283:10;22114:79;;;;-1:-1:-1;;;22114:79:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;22212:21:0;;22204:72;;;;-1:-1:-1;;;22204:72:0;;;;;;;:::i;:::-;283:10;22287:29;;;;:15;:29;;;;;;;;-1:-1:-1;;;;;22287:38:0;;;;;;;;;;;;:47;;;22350:39;2058:25:1;;;22287:38:0;;283:10;22350:39;;2031:18:1;22350:39:0;;;;;;;-1:-1:-1;22407:4:0;22022:397;;;;;:::o;31240:337::-;31298:4;31477:20;;31364:66;31526:23;;;;;;:42;;-1:-1:-1;31553:15:0;;;31526:42;31518:51;31240:337;-1:-1:-1;;;;31240:337:0:o;21632:101::-;21687:7;18557:16;18502:2;18557;:16;:::i;:::-;18550:23;;:4;:23;:::i;:::-;21707:18;;21632:101;:::o;34404:103::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;34477:8:::1;:22:::0;;-1:-1:-1;;34477:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34404:103::o;22966:348::-;23064:4;23081:43;23098:6;23106:9;23117:6;23081:16;:43::i;:::-;23135:149;23151:6;283:10;23181:102;23223:6;23181:102;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23181:23:0;;;;;;:15;:23;;;;;;;;283:10;23181:37;;;;;;;;;;:41;:102::i;:::-;23135:15;:149::i;:::-;-1:-1:-1;23302:4:0;22966:348;;;;;:::o;33485:171::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33562:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;33554:58;;;::::0;-1:-1:-1;;;33554:58:0;;10677:2:1;33554:58:0::1;::::0;::::1;10659:21:1::0;10716:2;10696:18;;;10689:30;10755;10735:18;;;10728:58;10803:18;;33554:58:0::1;10475:352:1::0;33554:58:0::1;-1:-1:-1::0;;;;;33623:17:0::1;33643:5;33623:17:::0;;;:8:::1;:17;::::0;;;;:25;;-1:-1:-1;;33623:25:0::1;::::0;;33485:171::o;23755:1249::-;23801:4;697:6;;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;23826:4:::1;::::0;;;::::1;;;23825:5;23817:45;;;::::0;-1:-1:-1;;;23817:45:0;;11034:2:1;23817:45:0::1;::::0;::::1;11016:21:1::0;11073:2;11053:18;;;11046:30;11112:29;11092:18;;;11085:57;11159:18;;23817:45:0::1;10832:351:1::0;23817:45:0::1;23894:12;23873:18;:33:::0;23936:27:::1;:15;23956:6;23936:19;:27::i;:::-;23917:16;:46:::0;24081:11:::1;:26:::0;;-1:-1:-1;;;;;;24081:26:0;;::::1;24027:42;24081:26:::0;;::::1;::::0;;;24118:11:::1;:56:::0;;;;::::1;24132:42;24118:56;::::0;;24185:41;:48;;-1:-1:-1;;24185:48:0;;::::1;24081:26:::0;24185:48;;::::1;::::0;;;24244:41;:48;;;::::1;::::0;::::1;::::0;;23974:31:::1;24303:41:::0;;;:19:::1;24185:41;24303::::0;;:48;;;;::::1;::::0;;::::1;::::0;;24362:65:::1;24386:4;24027:42:::0;18557:16:::1;18502:2;18557;:16;:::i;:::-;18550:23;::::0;:4:::1;:23;:::i;24362:65::-;24468:12;-1:-1:-1::0;;;;;24468:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24450:52:0::1;;24511:4;24518:12;-1:-1:-1::0;;;;;24518:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24450:88;::::0;-1:-1:-1;;;;;;24450:88:0::1;::::0;;;;;;-1:-1:-1;;;;;11674:15:1;;;24450:88:0::1;::::0;::::1;11656:34:1::0;11726:15;;11706:18;;;11699:43;11591:18;;24450:88:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24438:9;:100:::0;;-1:-1:-1;;;;;;24438:100:0::1;-1:-1:-1::0;;;;;24438:100:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;24549:39:0;;;:19:::1;:39;::::0;;;;;;;:46;;-1:-1:-1;;24549:46:0;;::::1;-1:-1:-1::0;24549:46:0;;::::1;::::0;;;24634:9;;;;::::1;24606:39:::0;;:19:::1;:39:::0;;;;;:46;;;;::::1;::::0;;::::1;::::0;;24671:21:::1;24663:82;;;::::0;-1:-1:-1;;;24663:82:0;;11955:2:1;24663:82:0::1;::::0;::::1;11937:21:1::0;11994:2;11974:18;;;11967:30;12033:34;12013:18;;;12006:62;-1:-1:-1;;;12084:18:1;;;12077:42;12136:19;;24663:82:0::1;11753:408:1::0;24663:82:0::1;24756:61;24769:24;24787:4;24769:9;:24::i;:::-;24795:21;24756:12;:61::i;:::-;24854:4;::::0;31140:16;:37;;-1:-1:-1;;;;;;31140:37:0;-1:-1:-1;;;;;24854:4:0;;::::1;31140:37:::0;;;;;-1:-1:-1;31188:31:0;;;:13;:31;;;;;:38;;-1:-1:-1;;31188:38:0;-1:-1:-1;31188:38:0;;;-1:-1:-1;;24870:11:0::1;:18:::0;;-1:-1:-1;;24963:11:0;;;;;-1:-1:-1;;23755:1249:0:o;33980:158::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34079:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;34079:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33980:158::o;23320:429::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;23443:3:::1;23426:7;:14;:20;23418:87;;;::::0;-1:-1:-1;;;23418:87:0;;12368:2:1;23418:87:0::1;::::0;::::1;12350:21:1::0;12407:2;12387:18;;;12380:30;12446:34;12426:18;;;12419:62;-1:-1:-1;;;12497:18:1;;;12490:52;12559:19;;23418:87:0::1;12166:418:1::0;23418:87:0::1;23520:9;23516:226;23539:7;:14;23535:1;:18;23516:226;;;23574:14;23591:7;23599:1;23591:10;;;;;;;;:::i;:::-;;;;;;;23574:27;;23616:14;23633:36;23665:3;23633:27;23649:7;23657:1;23649:10;;;;;;;;:::i;:::-;;;;;;;18502:2;18557;:16;;;;:::i;:::-;18550:23;::::0;:4:::1;:23;:::i;:::-;23633:15:::0;::::1;:27::i;:::-;:31:::0;::::1;:36::i;:::-;23616:53:::0;-1:-1:-1;23684:46:0::1;283:10:::0;23715:6:::1;23723;23684:16;:46::i;:::-;23559:183;;23555:3;;;;;:::i;:::-;;;;23516:226;;;;23320:429:::0;;:::o;32026:149::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;32102:65:::1;32127:4;32134:7;670::::0;697:6;-1:-1:-1;;;;;697:6:0;;624:87;32134:7:::1;32163:3;32155:7:::0;18557:16:::1;18502:2;18557;:16;:::i;:::-;18550:23;::::0;:4:::1;:23;:::i;:::-;32143:19;;;;:::i;:::-;:23;;;;:::i;:::-;32102:16;:65::i;:::-;32026:149:::0;:::o;33323:159::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33397:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;33389:52;;;::::0;-1:-1:-1;;;33389:52:0;;13285:2:1;33389:52:0::1;::::0;::::1;13267:21:1::0;13324:2;13304:18;;;13297:30;13363:27;13343:18;;;13336:55;13408:18;;33389:52:0::1;13083:349:1::0;33389:52:0::1;-1:-1:-1::0;;;;;33452:14:0::1;33469:5;33452:14:::0;;;:5:::1;:14;::::0;;;;:22;;-1:-1:-1;;33452:22:0::1;::::0;;33323:159::o;21739:122::-;-1:-1:-1;;;;;21832:21:0;21805:7;21832:21;;;:12;:21;;;;;;;21739:122::o;848:148::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;955:1:::1;939:6:::0;;918:40:::1;::::0;-1:-1:-1;;;;;939:6:0;;::::1;::::0;918:40:::1;::::0;955:1;;918:40:::1;986:1;969:19:::0;;-1:-1:-1;;;;;;969:19:0::1;::::0;;848:148::o;34627:119::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;34709:15:::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34709:29:0;;::::1;::::0;;;::::1;::::0;;34627:119::o;32181:686::-;32258:4;697:6;;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;32293:2:::1;32282:7;:13;;32274:75;;;::::0;-1:-1:-1;;;32274:75:0;;13639:2:1;32274:75:0::1;::::0;::::1;13621:21:1::0;13678:2;13658:18;;;13651:30;13717:34;13697:18;;;13690:62;-1:-1:-1;;;13768:18:1;;;13761:47;13825:19;;32274:75:0::1;13437:413:1::0;32274:75:0::1;32406:9;::::0;32391:25:::1;::::0;-1:-1:-1;;;32391:25:0;;-1:-1:-1;;;;;32406:9:0;;::::1;32391:25;::::0;::::1;6232:51:1::0;32360:28:0::1;::::0;32391:4:::1;::::0;:14:::1;::::0;6205:18:1;;32391:25:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32360:56:::0;-1:-1:-1;32427:20:0::1;32450:44;32488:5;32450:33;32360:56:::0;32475:7;32450:24:::1;:33::i;:44::-;32427:67:::0;-1:-1:-1;32509:16:0;;32505:95:::1;;32558:9;::::0;32569:4:::1;::::0;32541:47:::1;::::0;-1:-1:-1;;;;;32558:9:0;;::::1;::::0;32569:4:::1;32575:12:::0;32541:16:::1;:47::i;:::-;32640:4;::::0;32630:15:::1;::::0;-1:-1:-1;;;;;32640:4:0::1;32630:9;:15::i;:::-;32610:17;:35:::0;32704:5:::1;18557:16;18502:2;18557;:16;:::i;:::-;18550:23;::::0;:4:::1;:23;:::i;:::-;32685:16;::::0;32699:2:::1;32685:16;:::i;:::-;:24;;;;:::i;:::-;32664:17;;:45;;32656:101;;;::::0;-1:-1:-1;;;32656:101:0;;14246:2:1;32656:101:0::1;::::0;::::1;14228:21:1::0;14285:2;14265:18;;;14258:30;14324:34;14304:18;;;14297:62;-1:-1:-1;;;14375:18:1;;;14368:41;14426:19;;32656:101:0::1;14044:407:1::0;32656:101:0::1;32805:9;::::0;32826:11:::1;::::0;;-1:-1:-1;;;;;;32826:11:0;;;;-1:-1:-1;;;;;32805:9:0;;::::1;::::0;;;32826::::1;::::0;:11:::1;::::0;;::::1;::::0;32768:19:::1;::::0;32826:11;;;;;;;32768:19;32805:9;32826:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32855:4;32848:11;;;;;833:1;32181:686:::0;;;:::o;34513:108::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;34588:11:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;34588:25:0;;::::1;::::0;;;::::1;::::0;;34513:108::o;33662:160::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33763:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;33763:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33662:160::o;34881:327::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;35031:15:::1;:33:::0;;;;35075:15:::1;:33:::0;;;;35119:16:::1;:35:::0;35165:16:::1;:35:::0;34881:327::o;32873:282::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;32928:23:::1;32954:24;32972:4;32954:9;:24::i;:::-;32928:50:::0;-1:-1:-1;33016:29:0::1;33039:5;33016:18;33032:1;18557:16;18502:2;18557;:16;:::i;33016:29::-;32997:15;:48;;32989:133;;;::::0;-1:-1:-1;;;32989:133:0;;14658:2:1;32989:133:0::1;::::0;::::1;14640:21:1::0;14697:2;14677:18;;;14670:30;14736:34;14716:18;;;14709:62;14807:34;14787:18;;;14780:62;-1:-1:-1;;;14858:19:1;;;14851:39;14907:19;;32989:133:0::1;14456:476:1::0;32989:133:0::1;33133:14;:12;:14::i;22784:176::-:0;22864:4;22881:49;283:10;22912:9;22923:6;22881:16;:49::i;:::-;-1:-1:-1;22948:4:0;22784:176;;;;:::o;33828:146::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33921:31:0;;;::::1;;::::0;;;:13:::1;:31;::::0;;;;:45;;-1:-1:-1;;33921:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33828:146::o;35214:172::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;35285:1:::1;35267:15;:19:::0;;;35315:1:::1;35297:15;:19:::0;;;35327:16:::1;:20:::0;;;;35358:16:::1;:20:::0;35214:172::o;34752:123::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;34833:20:::1;:34:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34833:34:0;;::::1;::::0;;;::::1;::::0;;34752:123::o;1002:249::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1091:22:0;::::1;1083:78;;;::::0;-1:-1:-1;;;1083:78:0;;15139:2:1;1083:78:0::1;::::0;::::1;15121:21:1::0;15178:2;15158:18;;;15151:30;15217:34;15197:18;;;15190:62;-1:-1:-1;;;15268:18:1;;;15261:41;15319:19;;1083:78:0::1;14937:407:1::0;1083:78:0::1;1198:6;::::0;;1177:38:::1;::::0;-1:-1:-1;;;;;1177:38:0;;::::1;::::0;1198:6;::::1;::::0;1177:38:::1;::::0;::::1;1226:6;:17:::0;;-1:-1:-1;;;;;;1226:17:0::1;-1:-1:-1::0;;;;;1226:17:0;;;::::1;::::0;;;::::1;::::0;;1002:249::o;34144:254::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;34248:37:::1;34277:7:::0;34248:24:::1;34264:7:::0;18557:16:::1;18502:2;18557;:16;:::i;34248:37::-;34236:9;:49:::0;34316:27:::1;34339:3;34316:18;34332:1;18557:16;18502:2;18557;:16;:::i;34316:27::-;34304:9;;:39;;34296:94;;;::::0;-1:-1:-1;;;34296:94:0;;15551:2:1;34296:94:0::1;::::0;::::1;15533:21:1::0;15590:2;15570:18;;;15563:30;15629:34;15609:18;;;15602:62;-1:-1:-1;;;15680:18:1;;;15673:40;15730:19;;34296:94:0::1;15349:406:1::0;34296:94:0::1;34144:254:::0;;:::o;31863:157::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;31921:12:::1;697:6:::0;;31957:55:::1;::::0;-1:-1:-1;;;;;697:6:0;;;;31986:21:::1;::::0;31921:12;31957:55;31921:12;31957:55;31986:21;697:6;31957:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;31863:157:0:o;35392:171::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;35460:2:::1;35442:15;:20:::0;;;35491:1:::1;35473:15;:19:::0;;;35503:16:::1;:21:::0;;;;35535:16:::1;:20:::0;35392:171::o;33161:159::-;670:7;697:6;-1:-1:-1;;;;;697:6:0;283:10;757:23;749:73;;;;-1:-1:-1;;;749:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33233:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;33232:15;33224:56;;;::::0;-1:-1:-1;;;33224:56:0;;16172:2:1;33224:56:0::1;::::0;::::1;16154:21:1::0;16211:2;16191:18;;;16184:30;16250;16230:18;;;16223:58;16298:18;;33224:56:0::1;15970:352:1::0;33224:56:0::1;-1:-1:-1::0;;;;;33291:14:0::1;;::::0;;;:5:::1;:14;::::0;;;;:21;;-1:-1:-1;;33291:21:0::1;33308:4;33291:21;::::0;;33161:159::o;2827:98::-;2885:7;2912:5;2916:1;2912;:5;:::i;:::-;2905:12;2827:98;-1:-1:-1;;;2827:98:0:o;2931:::-;2989:7;3016:5;3020:1;3016;:5;:::i;25010:3038::-;-1:-1:-1;;;;;25106:18:0;;25098:68;;;;-1:-1:-1;;;25098:68:0;;16529:2:1;25098:68:0;;;16511:21:1;16568:2;16548:18;;;16541:30;16607:34;16587:18;;;16580:62;-1:-1:-1;;;16658:18:1;;;16651:35;16703:19;;25098:68:0;16327:401:1;25098:68:0;-1:-1:-1;;;;;25185:16:0;;25177:64;;;;-1:-1:-1;;;25177:64:0;;16935:2:1;25177:64:0;;;16917:21:1;16974:2;16954:18;;;16947:30;17013:34;16993:18;;;16986:62;-1:-1:-1;;;17064:18:1;;;17057:33;17107:19;;25177:64:0;16733:399:1;25177:64:0;25269:1;25260:6;:10;25252:71;;;;-1:-1:-1;;;25252:71:0;;17339:2:1;25252:71:0;;;17321:21:1;17378:2;17358:18;;;17351:30;17417:34;17397:18;;;17390:62;-1:-1:-1;;;17468:18:1;;;17461:46;17524:19;;25252:71:0;17137:412:1;25252:71:0;-1:-1:-1;;;;;25343:11:0;;;;;;:5;:11;;;;;;;;25342:12;25334:57;;;;-1:-1:-1;;;25334:57:0;;17756:2:1;25334:57:0;;;17738:21:1;;;17775:18;;;17768:30;17834:34;17814:18;;;17807:62;17886:18;;25334:57:0;17554:356:1;25334:57:0;25406:4;;;;;;;25402:116;;-1:-1:-1;;;;;25434:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;25457:17:0;;;;;;:13;:17;;;;;;;;25434:40;25426:80;;;;-1:-1:-1;;;25426:80:0;;18117:2:1;25426:80:0;;;18099:21:1;18156:2;18136:18;;;18129:30;18195:29;18175:18;;;18168:57;18242:18;;25426:80:0;17915:351:1;25426:80:0;25532:11;;;;;;;;:19;;:11;:19;:48;;;;-1:-1:-1;;;;;;25557:23:0;;;;;;:19;:23;;;;;;;;25555:25;25532:48;25528:178;;;25634:9;;25605:25;25623:6;25605:13;25615:2;25605:9;:13::i;:::-;:17;;:25::i;:::-;:38;;25597:97;;;;-1:-1:-1;;;25597:97:0;;18473:2:1;25597:97:0;;;18455:21:1;18512:2;18492:18;;;18485:30;18551:34;18531:18;;;18524:62;-1:-1:-1;;;18602:18:1;;;18595:44;18656:19;;25597:97:0;18271:410:1;25597:97:0;25719:8;;;;25716:350;;;670:7;697:6;-1:-1:-1;;;;;25747:15:0;;;697:6;;25747:15;;;;:32;;-1:-1:-1;670:7:0;697:6;-1:-1:-1;;;;;25766:13:0;;;697:6;;25766:13;;25747:32;:52;;;;-1:-1:-1;;;;;;25783:16:0;;;;25747:52;:66;;;;-1:-1:-1;25809:4:0;;-1:-1:-1;;;;;25803:10:0;;;25809:4;;25803:10;;25747:66;:85;;;;-1:-1:-1;25823:9:0;;-1:-1:-1;;;;;25817:15:0;;;25823:9;;25817:15;;25747:85;25743:312;;;25858:6;25853:187;25874:1;25870;:5;25853:187;;;25924:18;;:25;;25947:1;25924:22;:25::i;:::-;25908:12;:41;25905:116;;;-1:-1:-1;;;;;25978:12:0;;;;;;:8;:12;;;;;:19;;-1:-1:-1;;25978:19:0;25993:4;25978:19;;;25905:116;25877:3;;;;:::i;:::-;;;;25853:187;;;;25743:312;26079:15;;;;;;;26076:331;;;26138:14;26149:2;26138:10;:14::i;:::-;26137:15;:44;;;;-1:-1:-1;;;;;;26156:25:0;;;;;;:19;:25;;;;;;;;26137:44;:109;;;;26203:16;26214:4;26203:10;:16::i;:::-;26202:17;:44;;;;-1:-1:-1;;;;;;26223:23:0;;;;;;:19;:23;;;;;;;;26202:44;26137:174;;;;26268:16;26279:4;26268:10;:16::i;:::-;:43;;;;-1:-1:-1;;;;;;26288:23:0;;;;;;:19;:23;;;;;;;;26268:43;26137:239;;;;26333:14;26344:2;26333:10;:14::i;:::-;:43;;;;-1:-1:-1;;;;;;26351:25:0;;;;;;:19;:25;;;;;;;;26333:43;26111:284;;;;;;26417:25;26445:36;26465:15;;26445;;:19;;:36;;;;:::i;:::-;26417:64;;26492:28;26523:24;26541:4;26523:9;:24::i;:::-;26613:10;;26639:16;;26492:55;;-1:-1:-1;26589:34:0;;;;26639:16;;;;;26638:17;:41;;;;-1:-1:-1;26659:20:0;;;;;;;26638:41;:69;;;;-1:-1:-1;26693:9:0;;26706:1;;26683:20;;-1:-1:-1;;;;;26693:9:0;26683;:20::i;:::-;:24;26638:69;:94;;;;;26731:1;26711:17;:21;26638:94;:116;;;;-1:-1:-1;;;;;;26737:17:0;;;;;;:13;:17;;;;;;;;26736:18;26638:116;:140;;;;-1:-1:-1;;;;;;26759:19:0;;;;;;:13;:19;;;;;;;;26758:20;26638:140;:159;;;;-1:-1:-1;26788:9:0;;-1:-1:-1;;;;;26782:15:0;;;26788:9;;26782:15;26638:159;:186;;;;;26801:23;26638:186;26634:237;;;26841:14;:12;:14::i;:::-;-1:-1:-1;;;;;26885:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;26908:17:0;;;;;;:13;:17;;;;;;;;26885:40;26881:1118;;;26957:1;26942:12;:16;;;26973:12;:16;;;27021:30;;26957:1;27021:16;:30::i;:::-;27004:14;:47;26881:1118;;;27096:9;;-1:-1:-1;;;;;27088:17:0;;;27096:9;;27088:17;27084:904;;;27141:15;;27126:12;:30;;;27190:15;;27175:12;:30;;;27241:36;;27141:15;27241:19;:36::i;27084:904::-;27308:9;;-1:-1:-1;;;;;27302:15:0;;;27308:9;;27302:15;27298:690;;;27353:16;;27338:12;:31;;;27403:16;;27388:12;:31;;;27455:38;;27353:16;27455:20;:38::i;:::-;27438:14;:55;-1:-1:-1;;;;;27515:14:0;;;;;;:8;:14;;;;;;;;:53;;;;;27553:15;27533:16;;:35;;27515:53;27512:227;;;27607:2;27592:12;:17;;;27647:2;27632:12;:17;;;27689:30;;27607:2;27689:16;:30::i;27512:227::-;27298:690;;;-1:-1:-1;;;;;27787:14:0;;;;;;:8;:14;;;;;;;;27786:15;;:54;;;27825:15;27805:16;;:35;;27786:54;27778:124;;;;-1:-1:-1;;;27778:124:0;;18888:2:1;27778:124:0;;;18870:21:1;18927:2;18907:18;;;18900:30;18966:34;18946:18;;;18939:62;19037:27;19017:18;;;19010:55;19082:19;;27778:124:0;18686:421:1;27778:124:0;27936:1;27921:12;:16;;;27956:12;:16;27298:690;28009:31;28023:4;28029:2;28033:6;28009:13;:31::i;:::-;25087:2961;;;25010:3038;;;:::o;3139:206::-;3225:7;3286:12;3278:6;;;;3270:29;;;;-1:-1:-1;;;3270:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3321:5:0;;;3139:206::o;22425:353::-;-1:-1:-1;;;;;22524:19:0;;22516:72;;;;-1:-1:-1;;;22516:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22607:21:0;;22599:72;;;;-1:-1:-1;;;22599:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22682:22:0;;;;;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;:40;;;22738:32;;2058:25:1;;;22738:32:0;;2031:18:1;22738:32:0;;;;;;;;22425:353;;;:::o;2619:98::-;2677:7;2704:5;2708:1;2704;:5;:::i;29639:369::-;29760:11;;29721:65;;29745:4;;-1:-1:-1;;;;;29760:11:0;29774;29721:15;:65::i;:::-;29797:11;;29943:16;;29797:203;;-1:-1:-1;;;29797:203:0;;29865:4;29797:203;;;19594:34:1;19644:18;;;19637:34;;;29797:11:0;19687:18:1;;;19680:34;;;19730:18;;;19723:34;-1:-1:-1;;;;;29943:16:0;;;19773:19:1;;;19766:44;29974:15:0;19826:19:1;;;19819:35;29797:11:0;;;:27;;29832:9;;19528:19:1;;29797:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29639:369;;:::o;28054:1106::-;20058:16;:23;;-1:-1:-1;;20058:23:0;;;;;;28136:24:::1;28154:4;28136:9;:24::i;:::-;28110:50;;28171:25;28199:36;28219:15;;28199;;:19;;:36;;;;:::i;:::-;28171:64;;28246:27;28276:22;28296:1;28276:15;;:19;;:22;;;;:::i;:::-;28246:52:::0;-1:-1:-1;28309:26:0::1;28338:40;:15:::0;28246:52;28338:19:::1;:40::i;:::-;28309:69:::0;-1:-1:-1;28417:21:0::1;28449:36;28309:69:::0;28449:16:::1;:36::i;:::-;28497:18;28518:44;:21;28544:17:::0;28518:25:::1;:44::i;:::-;28497:65;;28573:23;28599:54;28635:17;28599:31;28614:15;;28599:10;:14;;:31;;;;:::i;:54::-;28573:80:::0;-1:-1:-1;28664:23:0::1;28690:31;:10:::0;28573:80;28690:14:::1;:31::i;:::-;28750:1;28732:15;:19:::0;;;28762:15:::1;:19:::0;;;28818:16:::1;::::0;28810:58:::1;::::0;28664:57;;-1:-1:-1;28750:1:0;;-1:-1:-1;;;;;28818:16:0;;::::1;::::0;28848:15;;28750:1;28810:58;28750:1;28810:58;28848:15;28818:16;28810:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28792:76;;;28882:15;28901:1;28882:20;;:48;;;;-1:-1:-1::0;28906:24:0;;::::1;28882:48;28879:130;;;28947:50;28960:19;28981:15;28947:12;:50::i;:::-;29046:8;29022:21;:32;29019:134;;;29091:10;::::0;29083:58:::1;::::0;-1:-1:-1;;;;;29091:10:0;;::::1;::::0;29115:21:::1;::::0;29083:58:::1;::::0;;;29115:21;29091:10;29083:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29070:71:0;;-1:-1:-1;;29019:134:0::1;-1:-1:-1::0;;20104:16:0;:24;;-1:-1:-1;;20104:24:0;;;-1:-1:-1;;;;;;;28054:1106:0:o;30387:673::-;30482:14;;:19;30479:574;;30517:17;30537:20;30550:6;30537:12;:20::i;:::-;30517:40;-1:-1:-1;30572:22:0;30597:21;:6;30517:40;30597:10;:21::i;:::-;30572:46;;30633:25;30648:9;30633:14;:25::i;:::-;-1:-1:-1;;;;;30673:20:0;;;;;;:12;:20;;;;;:30;;30697:6;;30673:20;:30;;30697:6;;30673:30;:::i;:::-;;;;-1:-1:-1;;;;;;;30718:23:0;;;;;;:12;:23;;;;;:41;;30745:14;;30718:23;:41;;30745:14;;30718:41;:::i;:::-;;;;-1:-1:-1;;30795:4:0;30774:27;;;;:12;:27;;;;;:40;;30805:9;;30774:27;:40;;30805:9;;30774:40;:::i;:::-;;;;;;;;30851:9;-1:-1:-1;;;;;30834:43:0;30843:6;-1:-1:-1;;;;;30834:43:0;;30862:14;30834:43;;;;2058:25:1;;2046:2;2031:18;;1912:177;30834:43:0;;;;;;;;30502:387;;23516:226:::1;23320:429:::0;;:::o;30479:574::-;-1:-1:-1;;;;;30908:20:0;;;;;;:12;:20;;;;;:30;;30932:6;;30908:20;:30;;30932:6;;30908:30;:::i;:::-;;;;-1:-1:-1;;;;;;;30953:23:0;;;;;;:12;:23;;;;;:33;;30980:6;;30953:23;:33;;30980:6;;30953:33;:::i;:::-;;;;;;;;31023:9;-1:-1:-1;;;;;31006:35:0;31015:6;-1:-1:-1;;;;;31006:35:0;;31034:6;31006:35;;;;2058:25:1;;2046:2;2031:18;;1912:177;2723:98:0;2781:7;2808:5;2812:1;2808;:5;:::i;29166:467::-;29257:16;;;29271:1;29257:16;;;;;;;;29233:21;;29257:16;;;;;;;;;;-1:-1:-1;29257:16:0;29233:40;;29302:4;29284;29289:1;29284:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29284:23:0;;;:7;;;;;;;;;;:23;;;;29328:11;;:18;;;-1:-1:-1;;;29328:18:0;;;;:11;;;;;:16;;:18;;;;;29284:7;;29328:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29318:4;29323:1;29318:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29318:28:0;;;:7;;;;;;;;;:28;29396:11;;29357:65;;29381:4;;29396:11;29410;29357:15;:65::i;:::-;29433:11;;:192;;-1:-1:-1;;;29433:192:0;;-1:-1:-1;;;;;29433:11:0;;;;:62;;:192;;29510:11;;29433;;29552:4;;29579;;29599:15;;29433:192;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30014:147;30075:7;30102:51;30149:3;30102:42;30113:30;30130:12;;30113;;:16;;:30;;;;:::i;:::-;30102:6;;:10;:42::i;30167:214::-;30249:47;30281:14;;30249:27;30263:12;;30249:9;:13;;:27;;;;:::i;:47::-;30230:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;30358:14:0;;30340:12;;30326:47;;30358:14;30326:27;;:9;;:13;:27::i;:47::-;30307:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;30167:214:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;2094:160::-;2159:20;;2215:13;;2208:21;2198:32;;2188:60;;2244:1;2241;2234:12;2259:180;2315:6;2368:2;2356:9;2347:7;2343:23;2339:32;2336:52;;;2384:1;2381;2374:12;2336:52;2407:26;2423:9;2407:26;:::i;2444:456::-;2521:6;2529;2537;2590:2;2578:9;2569:7;2565:23;2561:32;2558:52;;;2606:1;2603;2596:12;2558:52;2645:9;2632:23;2664:31;2689:5;2664:31;:::i;:::-;2714:5;-1:-1:-1;2771:2:1;2756:18;;2743:32;2784:33;2743:32;2784:33;:::i;:::-;2444:456;;2836:7;;-1:-1:-1;;;2890:2:1;2875:18;;;;2862:32;;2444:456::o;3094:315::-;3159:6;3167;3220:2;3208:9;3199:7;3195:23;3191:32;3188:52;;;3236:1;3233;3226:12;3188:52;3275:9;3262:23;3294:31;3319:5;3294:31;:::i;:::-;3344:5;-1:-1:-1;3368:35:1;3399:2;3384:18;;3368:35;:::i;:::-;3358:45;;3094:315;;;;;:::o;3414:127::-;3475:10;3470:3;3466:20;3463:1;3456:31;3506:4;3503:1;3496:15;3530:4;3527:1;3520:15;3546:275;3617:2;3611:9;3682:2;3663:13;;-1:-1:-1;;3659:27:1;3647:40;;3717:18;3702:34;;3738:22;;;3699:62;3696:88;;;3764:18;;:::i;:::-;3800:2;3793:22;3546:275;;-1:-1:-1;3546:275:1:o;3826:183::-;3886:4;3919:18;3911:6;3908:30;3905:56;;;3941:18;;:::i;:::-;-1:-1:-1;3986:1:1;3982:14;3998:4;3978:25;;3826:183::o;4014:662::-;4068:5;4121:3;4114:4;4106:6;4102:17;4098:27;4088:55;;4139:1;4136;4129:12;4088:55;4175:6;4162:20;4201:4;4225:60;4241:43;4281:2;4241:43;:::i;:::-;4225:60;:::i;:::-;4319:15;;;4405:1;4401:10;;;;4389:23;;4385:32;;;4350:12;;;;4429:15;;;4426:35;;;4457:1;4454;4447:12;4426:35;4493:2;4485:6;4481:15;4505:142;4521:6;4516:3;4513:15;4505:142;;;4587:17;;4575:30;;4625:12;;;;4538;;4505:142;;;-1:-1:-1;4665:5:1;4014:662;-1:-1:-1;;;;;;4014:662:1:o;4681:1215::-;4799:6;4807;4860:2;4848:9;4839:7;4835:23;4831:32;4828:52;;;4876:1;4873;4866:12;4828:52;4916:9;4903:23;4945:18;4986:2;4978:6;4975:14;4972:34;;;5002:1;4999;4992:12;4972:34;5040:6;5029:9;5025:22;5015:32;;5085:7;5078:4;5074:2;5070:13;5066:27;5056:55;;5107:1;5104;5097:12;5056:55;5143:2;5130:16;5165:4;5189:60;5205:43;5245:2;5205:43;:::i;5189:60::-;5283:15;;;5365:1;5361:10;;;;5353:19;;5349:28;;;5314:12;;;;5389:19;;;5386:39;;;5421:1;5418;5411:12;5386:39;5445:11;;;;5465:217;5481:6;5476:3;5473:15;5465:217;;;5561:3;5548:17;5578:31;5603:5;5578:31;:::i;:::-;5622:18;;5498:12;;;;5660;;;;5465:217;;;5701:5;-1:-1:-1;;5744:18:1;;5731:32;;-1:-1:-1;;5775:16:1;;;5772:36;;;5804:1;5801;5794:12;5772:36;;5827:63;5882:7;5871:8;5860:9;5856:24;5827:63;:::i;:::-;5817:73;;;4681:1215;;;;;:::o;5901:180::-;5960:6;6013:2;6001:9;5992:7;5988:23;5984:32;5981:52;;;6029:1;6026;6019:12;5981:52;-1:-1:-1;6052:23:1;;5901:180;-1:-1:-1;5901:180:1:o;6529:385::-;6615:6;6623;6631;6639;6692:3;6680:9;6671:7;6667:23;6663:33;6660:53;;;6709:1;6706;6699:12;6660:53;-1:-1:-1;;6732:23:1;;;6802:2;6787:18;;6774:32;;-1:-1:-1;6853:2:1;6838:18;;6825:32;;6904:2;6889:18;6876:32;;-1:-1:-1;6529:385:1;-1:-1:-1;6529:385:1:o;6919:388::-;6987:6;6995;7048:2;7036:9;7027:7;7023:23;7019:32;7016:52;;;7064:1;7061;7054:12;7016:52;7103:9;7090:23;7122:31;7147:5;7122:31;:::i;:::-;7172:5;-1:-1:-1;7229:2:1;7214:18;;7201:32;7242:33;7201:32;7242:33;:::i;:::-;7294:7;7284:17;;;6919:388;;;;;:::o;7312:248::-;7380:6;7388;7441:2;7429:9;7420:7;7416:23;7412:32;7409:52;;;7457:1;7454;7447:12;7409:52;-1:-1:-1;;7480:23:1;;;7550:2;7535:18;;;7522:32;;-1:-1:-1;7312:248:1:o;7565:404::-;7767:2;7749:21;;;7806:2;7786:18;;;7779:30;7845:34;7840:2;7825:18;;7818:62;-1:-1:-1;;;7911:2:1;7896:18;;7889:38;7959:3;7944:19;;7565:404::o;7974:402::-;8176:2;8158:21;;;8215:2;8195:18;;;8188:30;8254:34;8249:2;8234:18;;8227:62;-1:-1:-1;;;8320:2:1;8305:18;;8298:36;8366:3;8351:19;;7974:402::o;8381:127::-;8442:10;8437:3;8433:20;8430:1;8423:31;8473:4;8470:1;8463:15;8497:4;8494:1;8487:15;8513:422;8602:1;8645:5;8602:1;8659:270;8680:7;8670:8;8667:21;8659:270;;;8739:4;8735:1;8731:6;8727:17;8721:4;8718:27;8715:53;;;8748:18;;:::i;:::-;8798:7;8788:8;8784:22;8781:55;;;8818:16;;;;8781:55;8897:22;;;;8857:15;;;;8659:270;;;8663:3;8513:422;;;;;:::o;8940:806::-;8989:5;9019:8;9009:80;;-1:-1:-1;9060:1:1;9074:5;;9009:80;9108:4;9098:76;;-1:-1:-1;9145:1:1;9159:5;;9098:76;9190:4;9208:1;9203:59;;;;9276:1;9271:130;;;;9183:218;;9203:59;9233:1;9224:10;;9247:5;;;9271:130;9308:3;9298:8;9295:17;9292:43;;;9315:18;;:::i;:::-;-1:-1:-1;;9371:1:1;9357:16;;9386:5;;9183:218;;9485:2;9475:8;9472:16;9466:3;9460:4;9457:13;9453:36;9447:2;9437:8;9434:16;9429:2;9423:4;9420:12;9416:35;9413:77;9410:159;;;-1:-1:-1;9522:19:1;;;9554:5;;9410:159;9601:34;9626:8;9620:4;9601:34;:::i;:::-;9671:6;9667:1;9663:6;9659:19;9650:7;9647:32;9644:58;;;9682:18;;:::i;:::-;9720:20;;8940:806;-1:-1:-1;;;8940:806:1:o;9751:140::-;9809:5;9838:47;9879:4;9869:8;9865:19;9859:4;9838:47;:::i;9896:168::-;9936:7;10002:1;9998;9994:6;9990:14;9987:1;9984:21;9979:1;9972:9;9965:17;9961:45;9958:71;;;10009:18;;:::i;:::-;-1:-1:-1;10049:9:1;;9896:168::o;10069:401::-;10271:2;10253:21;;;10310:2;10290:18;;;10283:30;10349:34;10344:2;10329:18;;10322:62;-1:-1:-1;;;10415:2:1;10400:18;;10393:35;10460:3;10445:19;;10069:401::o;11188:251::-;11258:6;11311:2;11299:9;11290:7;11286:23;11282:32;11279:52;;;11327:1;11324;11317:12;11279:52;11359:9;11353:16;11378:31;11403:5;11378:31;:::i;12589:127::-;12650:10;12645:3;12641:20;12638:1;12631:31;12681:4;12678:1;12671:15;12705:4;12702:1;12695:15;12721:135;12760:3;-1:-1:-1;;12781:17:1;;12778:43;;;12801:18;;:::i;:::-;-1:-1:-1;12848:1:1;12837:13;;12721:135::o;12861:217::-;12901:1;12927;12917:132;;12971:10;12966:3;12962:20;12959:1;12952:31;13006:4;13003:1;12996:15;13034:4;13031:1;13024:15;12917:132;-1:-1:-1;13063:9:1;;12861:217::o;13855:184::-;13925:6;13978:2;13966:9;13957:7;13953:23;13949:32;13946:52;;;13994:1;13991;13984:12;13946:52;-1:-1:-1;14017:16:1;;13855:184;-1:-1:-1;13855:184:1:o;19112:128::-;19152:3;19183:1;19179:6;19176:1;19173:13;19170:39;;;19189:18;;:::i;:::-;-1:-1:-1;19225:9:1;;19112:128::o;19865:306::-;19953:6;19961;19969;20022:2;20010:9;20001:7;19997:23;19993:32;19990:52;;;20038:1;20035;20028:12;19990:52;20067:9;20061:16;20051:26;;20117:2;20106:9;20102:18;20096:25;20086:35;;20161:2;20150:9;20146:18;20140:25;20130:35;;19865:306;;;;;:::o;20176:125::-;20216:4;20244:1;20241;20238:8;20235:34;;;20249:18;;:::i;:::-;-1:-1:-1;20286:9:1;;20176:125::o;20306:980::-;20568:4;20616:3;20605:9;20601:19;20647:6;20636:9;20629:25;20673:2;20711:6;20706:2;20695:9;20691:18;20684:34;20754:3;20749:2;20738:9;20734:18;20727:31;20778:6;20813;20807:13;20844:6;20836;20829:22;20882:3;20871:9;20867:19;20860:26;;20921:2;20913:6;20909:15;20895:29;;20942:1;20952:195;20966:6;20963:1;20960:13;20952:195;;;21031:13;;-1:-1:-1;;;;;21027:39:1;21015:52;;21122:15;;;;21087:12;;;;21063:1;20981:9;20952:195;;;-1:-1:-1;;;;;;;21203:32:1;;;;21198:2;21183:18;;21176:60;-1:-1:-1;;;21267:3:1;21252:19;21245:35;21164:3;20306:980;-1:-1:-1;;;20306:980:1:o

Swarm Source

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