ETH Price: $2,629.68 (-0.47%)

Token

OTHERCOIN (OTHERCOIN)
 

Overview

Max Total Supply

1,000,000,000,000 OTHERCOIN

Holders

52

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,088,651,111.743784274865420452 OTHERCOIN

Value
$0.00
0xaed66aae345d979bf6d2d5f9f7a50a30b59fbbaf
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:
OTHERCOIN

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-26
*/

// 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 OTHERCOIN is Context, IERC20, ERC20Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private constant tokenName = "OTHERCOIN";
    string private constant tokenSymbol = "OTHERCOIN";
    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 treasuryAddress;
    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 treasuryTokens;
    uint256 private liquidityTokens;
	uint256 private totalBurnedTokens;

    uint256 private marketingTax;
    uint256 private treasuryTax;
    uint256 private liquidityTax;
    uint256 private divForSplitTax;
    uint256 private taxBuyMarketing;
    uint256 private taxBuyTreasury;
    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(3).div(100);
        minTaxSwap = tokenSupply.mul(5).div(10000);

        marketingAddress = payable(0xC6Fecc0499D42c169751BB9aFE11771aDD830Ad5);
        treasuryAddress = payable(0x08BE2314DC59fDa2Ece4f38F95624679eA69DB8E);
        devAddress = payable(0xC6Fecc0499D42c169751BB9aFE11771aDD830Ad5);

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

        taxBuyMarketing = 3;
        taxBuyTreasury = 4;
        taxBuyLiquidity = 2;
        taxSellMarketing = 3;
        taxSellTreasury = 4;
        taxSellLiquidity = 2;

        isContractsExcluded[address(this)] = true;
        isTaxExcluded[owner()] = true;
        isTaxExcluded[dead] = true;
        isTaxExcluded[address(this)] = true;
        isTaxExcluded[marketingAddress] = true;
        isTaxExcluded[treasuryAddress] = true;
        isTaxExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[address(this)] = true;
        isMaxWalletExcluded[owner()] = true;
        isMaxWalletExcluded[marketingAddress] = true;
        isMaxWalletExcluded[treasuryAddress] = 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(2 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;
            treasuryTax = 0;
            liquidityTax = 0;
            divForSplitTax = marketingTax.add(treasuryTax).add(liquidityTax);
        } else {
            if (from == uniV2Pair) {
                marketingTax = taxBuyMarketing;
                treasuryTax = taxBuyTreasury;
                liquidityTax = taxBuyLiquidity;
                divForSplitTax = taxBuyMarketing.add(taxBuyTreasury).add(taxBuyLiquidity);
            }else if (to == uniV2Pair) {
                marketingTax = taxSellMarketing;
                treasuryTax = taxSellTreasury;
                liquidityTax = taxSellLiquidity;
                divForSplitTax = taxSellMarketing.add(taxSellTreasury).add(taxSellLiquidity);
                if(isSniper[from] && sniperPenaltyEnd >= block.timestamp){
                    marketingTax = 85;
                    treasuryTax = 10;
                    liquidityTax = 0;
                    divForSplitTax = marketingTax.add(treasuryTax).add(liquidityTax);
                }
            }else {
                require(!isSniper[from] || sniperPenaltyEnd <= block.timestamp, "ERC20: Snipers can not transfer till penalty time is over");
                marketingTax = 0;
                treasuryTax = 0;
                liquidityTax = 0;
            }
        }
        tokenTransfer(from, to, amount);
    }
    function taxTokenSwap() internal lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = marketingTokens.add(treasuryTokens).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 ethForTreasury = ethBalance.mul(treasuryTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing).sub(ethForTreasury);
        marketingTokens = 0;
        treasuryTokens = 0;
        liquidityTokens = 0;
        (bool success,) = address(marketingAddress).call{value: ethForMarketing}("");
        (success,) = address(treasuryAddress).call{value: ethForTreasury}("");
        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(treasuryTax).add(liquidityTax)).div(100);
    }
    function splitTaxTokens(uint256 taxTokens) internal {
        marketingTokens += taxTokens.mul(marketingTax).div(divForSplitTax);
        treasuryTokens += taxTokens.mul(treasuryTax).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 buyTreasuryTax, uint256 buyLiquidityTax, uint256 sellMarketingTax, uint256 sellTreasuryTax, uint256 sellLiquidityTax) external onlyOwner {
        taxBuyMarketing = buyMarketingTax;
        taxBuyTreasury = buyTreasuryTax;
        taxBuyLiquidity = buyLiquidityTax;
        taxSellMarketing = sellMarketingTax;
        taxSellTreasury = sellTreasuryTax;
        taxSellLiquidity = sellLiquidityTax;
    }
    function viewTaxes() public view returns(uint256 marketingBuy, uint256 treasuryBuy, uint256 liquidityBuy, uint256 marketingSell, uint256 trasurySell, uint256 liquiditySell) {
        return(taxBuyMarketing,taxBuyTreasury,taxBuyLiquidity,taxSellMarketing,taxSellTreasury,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":"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":"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":"buyTreasuryTax","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"sellTreasuryTax","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":"treasuryBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"trasurySell","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"}]

6080604052600c80546001600160a01b03191661dead1790556022805465ff00ffffffff191690556000620000313390565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000896012600a6200042f565b6200009a9064e8d4a5100062000440565b30600090815260026020526040902055620000fd6064620000e96003620000c46012600a6200042f565b620000d59064e8d4a5100062000440565b620002f760201b62001a531790919060201c565b6200030e60201b62001a661790919060201c565b6010556200011b612710620000e96005620000c46012600a6200042f565b601155600980546001600160a01b031990811673c6fecc0499d42c169751bb9afe11771add830ad59081178355600a805483167308be2314dc59fda2ece4f38f95624679ea69db8e178155600b8054841690921790915560008054600880549094166001600160a01b039182161784556003601a8190556004601b8190556002601c819055601d839055601e829055601f553080855260209283526040808620805460ff199081166001908117909255875487168852600586528288208054821683179055600c805488168952838920805483168417905584895283892080548316841790558b5488168952838920805483168417905589548816895283892080548316841790558a548816895283892080548316841790558489529490955281872080548616821790558654861687528187208054861682179055985485168652808620805485168a179055865485168652808620805485168a17905596548416855286852080548416891790559054909216835293822080549094169094179092557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620002cf906012906200042f565b620002e09064e8d4a5100062000440565b60405190815260200160405180910390a362000485565b600062000305828462000440565b90505b92915050565b600062000305828462000462565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003735781600019048211156200035757620003576200031c565b808516156200036557918102915b93841c939080029062000337565b509250929050565b6000826200038c5750600162000308565b816200039b5750600062000308565b8160018114620003b45760028114620003bf57620003df565b600191505062000308565b60ff841115620003d357620003d36200031c565b50506001821b62000308565b5060208310610133831016604e8410600b841016171562000404575081810a62000308565b62000410838362000332565b80600019048211156200042757620004276200031c565b029392505050565b60006200030560ff8416836200037b565b60008160001904831182151516156200045d576200045d6200031c565b500290565b6000826200048057634e487b7160e01b600052601260045260246000fd5b500490565b61311880620004956000396000f3fe6080604052600436106102765760003560e01c806375d0cc431161014f578063a73f9b58116100c1578063ee2e5a2e1161007a578063ee2e5a2e146107c4578063f0c0cf87146107e4578063f2fde38b146107fa578063f35900d01461081a578063f5648a4f1461083a578063ffecf5161461084f57600080fd5b8063a73f9b5814610713578063a9059cbb14610728578063c2ed286b14610748578063dd62ed3e14610768578063e4252ddf14610659578063ea090d97146107ae57600080fd5b806391c09d1e1161011357806391c09d1e14610659578063957aa58c14610679578063958c2e521461069957806395d89b41146102a457806396c9b442146106b9578063a20d9615146106da57600080fd5b806375d0cc43146105bb5780637817be6c146105db5780638bcea939146105fb5780638c714f801461061b5780638da5cb5b1461063b57600080fd5b806333251a0b116101e85780635e6710de116101ac5780635e6710de146104ef5780635fafa5891461050f5780635fecd9261461054757806370a0823114610567578063715018a614610587578063745d032f1461059c57600080fd5b806333251a0b1461044a5780633b4e935a1461046a5780633bbac5791461047f57806341220104146104af57806351524e5b146104cf57600080fd5b8063162790551161023a578063162790551461039157806318160ddd146103b1578063186d260d146103d45780631c42047a146103f457806323b872dd1461040e578063313ce5671461042e57600080fd5b806304d4c9901461028257806306fdde03146102a4578063095ea7b3146102e55780630f3a325f1461031557806311abf5371461034557600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102a261029d3660046129bc565b61086f565b005b3480156102b057600080fd5b50604080518082018252600981526827aa2422a921a7a4a760b91b602082015290516102dc91906129ff565b60405180910390f35b3480156102f157600080fd5b50610305610300366004612a69565b6108bf565b60405190151581526020016102dc565b34801561032157600080fd5b50610305610330366004612a95565b60066020526000908152604090205460ff1681565b34801561035157600080fd5b50601a54601b54601c54601d54601e54601f54604080519687526020870195909552938501929092526060840152608083015260a082015260c0016102dc565b34801561039d57600080fd5b506103056103ac366004612a95565b610969565b3480156103bd57600080fd5b506103c66109a5565b6040519081526020016102dc565b3480156103e057600080fd5b506102a26103ef366004612ac2565b6109c7565b34801561040057600080fd5b506022546103059060ff1681565b34801561041a57600080fd5b50610305610429366004612add565b610a04565b34801561043a57600080fd5b50604051601281526020016102dc565b34801561045657600080fd5b506102a2610465366004612a95565b610a6d565b34801561047657600080fd5b50610305610b20565b34801561048b57600080fd5b5061030561049a366004612a95565b60076020526000908152604090205460ff1681565b3480156104bb57600080fd5b506102a26104ca366004612b1e565b610f45565b3480156104db57600080fd5b506102a26104ea366004612c29565b610f9a565b3480156104fb57600080fd5b506102a261050a366004612ceb565b6110d2565b34801561051b57600080fd5b50600f5461052f906001600160a01b031681565b6040516001600160a01b0390911681526020016102dc565b34801561055357600080fd5b506102a2610562366004612a95565b61114c565b34801561057357600080fd5b506103c6610582366004612a95565b6111ff565b34801561059357600080fd5b506102a261121a565b3480156105a857600080fd5b5060225461030590610100900460ff1681565b3480156105c757600080fd5b506102a26105d6366004612ac2565b61128e565b3480156105e757600080fd5b506103056105f6366004612ceb565b6112d6565b34801561060757600080fd5b50600d5461052f906001600160a01b031681565b34801561062757600080fd5b506102a2610636366004612ac2565b611540565b34801561064757600080fd5b506000546001600160a01b031661052f565b34801561066557600080fd5b506102a2610674366004612b1e565b611584565b34801561068557600080fd5b506022546103059062010000900460ff1681565b3480156106a557600080fd5b50600e5461052f906001600160a01b031681565b3480156106c557600080fd5b50602254610305906301000000900460ff1681565b3480156106e657600080fd5b506103056106f5366004612a95565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561071f57600080fd5b506102a26115d9565b34801561073457600080fd5b50610305610743366004612a69565b6116b5565b34801561075457600080fd5b506102a2610763366004612b1e565b6116cb565b34801561077457600080fd5b506103c6610783366004612d04565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ba57600080fd5b506103c660205481565b3480156107d057600080fd5b506102a26107df366004612ac2565b611720565b3480156107f057600080fd5b506103c660215481565b34801561080657600080fd5b506102a2610815366004612a95565b61176c565b34801561082657600080fd5b506102a2610835366004612d3d565b61185b565b34801561084657600080fd5b506102a261191a565b34801561085b57600080fd5b506102a261086a366004612a95565b61199c565b6000546001600160a01b031633146108a25760405162461bcd60e51b815260040161089990612d5f565b60405180910390fd5b601a95909555601b93909355601c91909155601d55601e55601f55565b6000336108de5760405162461bcd60e51b815260040161089990612da4565b6001600160a01b0383166109045760405162461bcd60e51b815260040161089990612dec565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061099d57508115155b949350505050565b60006109b36012600a612f2c565b6109c29064e8d4a51000612f3b565b905090565b6000546001600160a01b031633146109f15760405162461bcd60e51b815260040161089990612d5f565b6022805460ff1916911515919091179055565b6000610a11848484611a72565b610a638433610a5e856040518060600160405280603181526020016130b2603191396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612218565b612244565b5060019392505050565b6000546001600160a01b03163314610a975760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03811660009081526006602052604090205460ff16610aff5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e69706572000000006044820152606401610899565b6001600160a01b03166000908152600660205260409020805460ff19169055565b600080546001600160a01b03163314610b4b5760405162461bcd60e51b815260040161089990612d5f565b60225462010000900460ff1615610ba45760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c6976652100000000006044820152606401610899565b43602055610bb5426202a3006122f2565b602155600e80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600f80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610cb13082610ca26012600a612f2c565b610a5e9064e8d4a51000612f3b565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cea57600080fd5b505afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d229190612f5a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6a57600080fd5b505afa158015610d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da29190612f5a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610dea57600080fd5b505af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612f5a565b600d80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610edb5760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b6064820152608401610899565b610eed610ee7306111ff565b476122fe565b600c54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff1916600117905550506022805465ff0000ffffff191665010000010101179055600190565b6000546001600160a01b03163314610f6f5760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fc45760405162461bcd60e51b815260040161089990612d5f565b60648251106110345760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610899565b60005b82518110156110cd57600083828151811061105457611054612f77565b6020026020010151905060006110ab60646110a586868151811061107a5761107a612f77565b60200260200101516012600a6110909190612f2c565b61109f9064e8d4a51000612f3b565b90611a53565b90611a66565b90506110b8338383611a72565b505080806110c590612f8d565b915050611037565b505050565b6000546001600160a01b031633146110fc5760405162461bcd60e51b815260040161089990612d5f565b611149306111126000546001600160a01b031690565b6064846111216012600a612f2c565b6111309064e8d4a51000612f3b565b61113a9190612f3b565b6111449190612fa8565b611a72565b50565b6000546001600160a01b031633146111765760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03811660009081526007602052604090205460ff166111de5760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f74000000000000006044820152606401610899565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031633146112445760405162461bcd60e51b815260040161089990612d5f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112b85760405162461bcd60e51b815260040161089990612d5f565b6022805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b031633146113015760405162461bcd60e51b815260040161089990612d5f565b600a82111561136c5760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b6064820152608401610899565b600d546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b1580156113b257600080fd5b505afa1580156113c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea9190612fca565b905060006113fd60646110a58487611a53565b9050801561142257600d54600c54611422916001600160a01b03908116911683611a72565b600c54611437906001600160a01b03166111ff565b60155560646114486012600a612f2c565b6114579064e8d4a51000612f3b565b611462906032612f3b565b61146c9190612fa8565b60155411156114d15760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b6064820152608401610899565b600d546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561151b57600080fd5b505af115801561152f573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b0316331461156a5760405162461bcd60e51b815260040161089990612d5f565b602280549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146115ae5760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116035760405162461bcd60e51b815260040161089990612d5f565b600061160e306111ff565b90506116276127106110a560056110906012600a612f2c565b8110156116ad5760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a401610899565b6111496123c1565b60006116c2338484611a72565b50600192915050565b6000546001600160a01b031633146116f55760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461174a5760405162461bcd60e51b815260040161089990612d5f565b60228054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146117965760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b0381166118005760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610899565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118855760405162461bcd60e51b815260040161089990612d5f565b611899816110a5846110906012600a612f2c565b6010556118b260646110a560046110906012600a612f2c565b60105411156119165760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b6064820152608401610899565b5050565b6000546001600160a01b031633146119445760405162461bcd60e51b815260040161089990612d5f565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114611991576040519150601f19603f3d011682016040523d82523d6000602084013e611996565b606091505b50505050565b6000546001600160a01b031633146119c65760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03811660009081526007602052604090205460ff1615611a2f5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c7265616479206164646564000000006044820152606401610899565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611a5f8284612f3b565b9392505050565b6000611a5f8284612fa8565b6001600160a01b038316611ad65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610899565b6001600160a01b038216611b385760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610899565b60008111611ba15760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610899565b6001600160a01b03831660009081526007602052604090205460ff1615611c0a5760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f546044820152606401610899565b60225462010000900460ff16611ca5576001600160a01b03831660009081526005602052604090205460ff1680611c5957506001600160a01b03821660009081526005602052604090205460ff165b611ca55760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c6976652100000000006044820152606401610899565b60225460ff6101009091041615156001148015611cdb57506001600160a01b03821660009081526004602052604090205460ff16155b15611d5b57601054611cf682611cf0856111ff565b906122f2565b1115611d5b5760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b6064820152608401610899565b60225460ff1615611e37576000546001600160a01b03848116911614801590611d9257506000546001600160a01b03838116911614155b8015611da657506001600160a01b03821615155b8015611dc05750600c546001600160a01b03838116911614155b8015611dda5750600d546001600160a01b03838116911614155b15611e375760005b6002811015611e3557602054611df890826122f2565b431415611e23576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611e2d81612f8d565b915050611de2565b505b6022546301000000900460ff1615611f1a57611e5282610969565b158015611e7757506001600160a01b03831660009081526003602052604090205460ff165b80611eab5750611e8683610969565b158015611eab57506001600160a01b03821660009081526003602052604090205460ff165b80611ede5750611eba83610969565b8015611ede57506001600160a01b03821660009081526003602052604090205460ff165b80611f115750611eed82610969565b8015611f1157506001600160a01b03831660009081526003602052604090205460ff165b611f1a57600080fd5b6000611f336012546014546122f290919063ffffffff16565b90506000611f40306111ff565b60115460225491925082101590640100000000900460ff16158015611f70575060225465010000000000900460ff165b8015611f915750600d54600090611f8f906001600160a01b03166111ff565b115b8015611f9d5750600083115b8015611fc257506001600160a01b03851660009081526005602052604090205460ff16155b8015611fe757506001600160a01b03861660009081526005602052604090205460ff16155b80156120005750600d546001600160a01b038681169116145b80156120095750805b15612016576120166123c1565b6001600160a01b03861660009081526005602052604090205460ff168061205557506001600160a01b03851660009081526005602052604090205460ff165b1561208157600060168190556017819055601881905561207990611cf081806122f2565b601955612205565b600d546001600160a01b03878116911614156120bf57601a546016819055601b546017819055601c546018819055612079929091611cf091906122f2565b600d546001600160a01b038681169116141561215957601d546016819055601e546017819055601f5460188190556120fd929091611cf091906122f2565b6019556001600160a01b03861660009081526006602052604090205460ff16801561212a57504260215410155b156121545760556016819055600a601781905560006018819055612079929091611cf091906122f2565b612205565b6001600160a01b03861660009081526006602052604090205460ff16158061218357504260215411155b6121f55760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f766572000000000000006064820152608401610899565b6000601681905560178190556018555b6122108686866125f4565b505050505050565b6000818484111561223c5760405162461bcd60e51b815260040161089991906129ff565b505050900390565b6001600160a01b03831661226a5760405162461bcd60e51b815260040161089990612da4565b6001600160a01b0382166122905760405162461bcd60e51b815260040161089990612dec565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611a5f8284612fe3565b600e546123169030906001600160a01b031684612244565b600e5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561238157600080fd5b505af1158015612395573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123ba9190612ffb565b5050505050565b6022805464ff00000000191664010000000017905560006123e1306111ff565b90506000612402601454611cf06013546012546122f290919063ffffffff16565b9050600061241c6002601454611a6690919063ffffffff16565b9050600061242a8483612795565b905047612436826127a1565b60006124424783612795565b9050600061245f866110a560125485611a5390919063ffffffff16565b9050600061247c876110a560135486611a5390919063ffffffff16565b905060006124948261248e8686612795565b90612795565b600060128190556013819055601481905560095460405192935090916001600160a01b039091169085908381818185875af1925050503d80600081146124f6576040519150601f19603f3d011682016040523d82523d6000602084013e6124fb565b606091505b5050600a546040519192506001600160a01b0316908490600081818185875af1925050503d806000811461254b576040519150601f19603f3d011682016040523d82523d6000602084013e612550565b606091505b5090915050811580159061256357508715155b156125725761257288836122fe565b6706f05b59d3b200004711156125da57600b546040516001600160a01b03909116904790600081818185875af1925050503d80600081146125cf576040519150601f19603f3d011682016040523d82523d6000602084013e6125d4565b606091505b50909150505b50506022805464ff00000000191690555050505050505050565b601954156126f457600061260782612902565b905060006126158383612795565b905061262082612930565b6001600160a01b03851660009081526002602052604081208054859290612648908490613029565b90915550506001600160a01b03841660009081526002602052604081208054839290612675908490612fe3565b90915550503060009081526002602052604081208054849290612699908490612fe3565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126e591815260200190565b60405180910390a35050505050565b6001600160a01b0383166000908152600260205260408120805483929061271c908490613029565b90915550506001600160a01b03821660009081526002602052604081208054839290612749908490612fe3565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122e591815260200190565b6000611a5f8284613029565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127d6576127d6612f77565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561282a57600080fd5b505afa15801561283e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128629190612f5a565b8160018151811061287557612875612f77565b6001600160a01b039283166020918202929092010152600e5461289b9130911684612244565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906128d4908590600090869030904290600401613040565b600060405180830381600087803b1580156128ee57600080fd5b505af1158015612210573d6000803e3d6000fd5b600061096360646110a5612929601854611cf06017546016546122f290919063ffffffff16565b8590611a53565b61294b6019546110a560165484611a5390919063ffffffff16565b6012600082825461295c9190612fe3565b909155505060195460175461297791906110a5908490611a53565b601360008282546129889190612fe3565b90915550506019546018546129a391906110a5908490611a53565b601460008282546129b49190612fe3565b909155505050565b60008060008060008060c087890312156129d557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b81811015612a2c57858101830151858201604001528201612a10565b81811115612a3e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461114957600080fd5b60008060408385031215612a7c57600080fd5b8235612a8781612a54565b946020939093013593505050565b600060208284031215612aa757600080fd5b8135611a5f81612a54565b8035801515811461153b57600080fd5b600060208284031215612ad457600080fd5b611a5f82612ab2565b600080600060608486031215612af257600080fd5b8335612afd81612a54565b92506020840135612b0d81612a54565b929592945050506040919091013590565b60008060408385031215612b3157600080fd5b8235612b3c81612a54565b9150612b4a60208401612ab2565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b9257612b92612b53565b604052919050565b600067ffffffffffffffff821115612bb457612bb4612b53565b5060051b60200190565b600082601f830112612bcf57600080fd5b81356020612be4612bdf83612b9a565b612b69565b82815260059290921b84018101918181019086841115612c0357600080fd5b8286015b84811015612c1e5780358352918301918301612c07565b509695505050505050565b60008060408385031215612c3c57600080fd5b823567ffffffffffffffff80821115612c5457600080fd5b818501915085601f830112612c6857600080fd5b81356020612c78612bdf83612b9a565b82815260059290921b84018101918181019089841115612c9757600080fd5b948201945b83861015612cbe578535612caf81612a54565b82529482019490820190612c9c565b96505086013592505080821115612cd457600080fd5b50612ce185828601612bbe565b9150509250929050565b600060208284031215612cfd57600080fd5b5035919050565b60008060408385031215612d1757600080fd5b8235612d2281612a54565b91506020830135612d3281612a54565b809150509250929050565b60008060408385031215612d5057600080fd5b50508035926020909101359150565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612e83578160001904821115612e6957612e69612e32565b80851615612e7657918102915b93841c9390800290612e4d565b509250929050565b600082612e9a57506001610963565b81612ea757506000610963565b8160018114612ebd5760028114612ec757612ee3565b6001915050610963565b60ff841115612ed857612ed8612e32565b50506001821b610963565b5060208310610133831016604e8410600b8410161715612f06575081810a610963565b612f108383612e48565b8060001904821115612f2457612f24612e32565b029392505050565b6000611a5f60ff841683612e8b565b6000816000190483118215151615612f5557612f55612e32565b500290565b600060208284031215612f6c57600080fd5b8151611a5f81612a54565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612fa157612fa1612e32565b5060010190565b600082612fc557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fdc57600080fd5b5051919050565b60008219821115612ff657612ff6612e32565b500190565b60008060006060848603121561301057600080fd5b8351925060208401519150604084015190509250925092565b60008282101561303b5761303b612e32565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130905784516001600160a01b03168352938301939183019160010161306b565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204c913cb896ff9bd461e6c685b99d1975923426355bd2a56c8e586fc7545f9d6164736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102765760003560e01c806375d0cc431161014f578063a73f9b58116100c1578063ee2e5a2e1161007a578063ee2e5a2e146107c4578063f0c0cf87146107e4578063f2fde38b146107fa578063f35900d01461081a578063f5648a4f1461083a578063ffecf5161461084f57600080fd5b8063a73f9b5814610713578063a9059cbb14610728578063c2ed286b14610748578063dd62ed3e14610768578063e4252ddf14610659578063ea090d97146107ae57600080fd5b806391c09d1e1161011357806391c09d1e14610659578063957aa58c14610679578063958c2e521461069957806395d89b41146102a457806396c9b442146106b9578063a20d9615146106da57600080fd5b806375d0cc43146105bb5780637817be6c146105db5780638bcea939146105fb5780638c714f801461061b5780638da5cb5b1461063b57600080fd5b806333251a0b116101e85780635e6710de116101ac5780635e6710de146104ef5780635fafa5891461050f5780635fecd9261461054757806370a0823114610567578063715018a614610587578063745d032f1461059c57600080fd5b806333251a0b1461044a5780633b4e935a1461046a5780633bbac5791461047f57806341220104146104af57806351524e5b146104cf57600080fd5b8063162790551161023a578063162790551461039157806318160ddd146103b1578063186d260d146103d45780631c42047a146103f457806323b872dd1461040e578063313ce5671461042e57600080fd5b806304d4c9901461028257806306fdde03146102a4578063095ea7b3146102e55780630f3a325f1461031557806311abf5371461034557600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102a261029d3660046129bc565b61086f565b005b3480156102b057600080fd5b50604080518082018252600981526827aa2422a921a7a4a760b91b602082015290516102dc91906129ff565b60405180910390f35b3480156102f157600080fd5b50610305610300366004612a69565b6108bf565b60405190151581526020016102dc565b34801561032157600080fd5b50610305610330366004612a95565b60066020526000908152604090205460ff1681565b34801561035157600080fd5b50601a54601b54601c54601d54601e54601f54604080519687526020870195909552938501929092526060840152608083015260a082015260c0016102dc565b34801561039d57600080fd5b506103056103ac366004612a95565b610969565b3480156103bd57600080fd5b506103c66109a5565b6040519081526020016102dc565b3480156103e057600080fd5b506102a26103ef366004612ac2565b6109c7565b34801561040057600080fd5b506022546103059060ff1681565b34801561041a57600080fd5b50610305610429366004612add565b610a04565b34801561043a57600080fd5b50604051601281526020016102dc565b34801561045657600080fd5b506102a2610465366004612a95565b610a6d565b34801561047657600080fd5b50610305610b20565b34801561048b57600080fd5b5061030561049a366004612a95565b60076020526000908152604090205460ff1681565b3480156104bb57600080fd5b506102a26104ca366004612b1e565b610f45565b3480156104db57600080fd5b506102a26104ea366004612c29565b610f9a565b3480156104fb57600080fd5b506102a261050a366004612ceb565b6110d2565b34801561051b57600080fd5b50600f5461052f906001600160a01b031681565b6040516001600160a01b0390911681526020016102dc565b34801561055357600080fd5b506102a2610562366004612a95565b61114c565b34801561057357600080fd5b506103c6610582366004612a95565b6111ff565b34801561059357600080fd5b506102a261121a565b3480156105a857600080fd5b5060225461030590610100900460ff1681565b3480156105c757600080fd5b506102a26105d6366004612ac2565b61128e565b3480156105e757600080fd5b506103056105f6366004612ceb565b6112d6565b34801561060757600080fd5b50600d5461052f906001600160a01b031681565b34801561062757600080fd5b506102a2610636366004612ac2565b611540565b34801561064757600080fd5b506000546001600160a01b031661052f565b34801561066557600080fd5b506102a2610674366004612b1e565b611584565b34801561068557600080fd5b506022546103059062010000900460ff1681565b3480156106a557600080fd5b50600e5461052f906001600160a01b031681565b3480156106c557600080fd5b50602254610305906301000000900460ff1681565b3480156106e657600080fd5b506103056106f5366004612a95565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561071f57600080fd5b506102a26115d9565b34801561073457600080fd5b50610305610743366004612a69565b6116b5565b34801561075457600080fd5b506102a2610763366004612b1e565b6116cb565b34801561077457600080fd5b506103c6610783366004612d04565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ba57600080fd5b506103c660205481565b3480156107d057600080fd5b506102a26107df366004612ac2565b611720565b3480156107f057600080fd5b506103c660215481565b34801561080657600080fd5b506102a2610815366004612a95565b61176c565b34801561082657600080fd5b506102a2610835366004612d3d565b61185b565b34801561084657600080fd5b506102a261191a565b34801561085b57600080fd5b506102a261086a366004612a95565b61199c565b6000546001600160a01b031633146108a25760405162461bcd60e51b815260040161089990612d5f565b60405180910390fd5b601a95909555601b93909355601c91909155601d55601e55601f55565b6000336108de5760405162461bcd60e51b815260040161089990612da4565b6001600160a01b0383166109045760405162461bcd60e51b815260040161089990612dec565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061099d57508115155b949350505050565b60006109b36012600a612f2c565b6109c29064e8d4a51000612f3b565b905090565b6000546001600160a01b031633146109f15760405162461bcd60e51b815260040161089990612d5f565b6022805460ff1916911515919091179055565b6000610a11848484611a72565b610a638433610a5e856040518060600160405280603181526020016130b2603191396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612218565b612244565b5060019392505050565b6000546001600160a01b03163314610a975760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03811660009081526006602052604090205460ff16610aff5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e69706572000000006044820152606401610899565b6001600160a01b03166000908152600660205260409020805460ff19169055565b600080546001600160a01b03163314610b4b5760405162461bcd60e51b815260040161089990612d5f565b60225462010000900460ff1615610ba45760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c6976652100000000006044820152606401610899565b43602055610bb5426202a3006122f2565b602155600e80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600f80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610cb13082610ca26012600a612f2c565b610a5e9064e8d4a51000612f3b565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610cea57600080fd5b505afa158015610cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d229190612f5a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6a57600080fd5b505afa158015610d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da29190612f5a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610dea57600080fd5b505af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612f5a565b600d80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610edb5760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b6064820152608401610899565b610eed610ee7306111ff565b476122fe565b600c54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff1916600117905550506022805465ff0000ffffff191665010000010101179055600190565b6000546001600160a01b03163314610f6f5760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fc45760405162461bcd60e51b815260040161089990612d5f565b60648251106110345760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610899565b60005b82518110156110cd57600083828151811061105457611054612f77565b6020026020010151905060006110ab60646110a586868151811061107a5761107a612f77565b60200260200101516012600a6110909190612f2c565b61109f9064e8d4a51000612f3b565b90611a53565b90611a66565b90506110b8338383611a72565b505080806110c590612f8d565b915050611037565b505050565b6000546001600160a01b031633146110fc5760405162461bcd60e51b815260040161089990612d5f565b611149306111126000546001600160a01b031690565b6064846111216012600a612f2c565b6111309064e8d4a51000612f3b565b61113a9190612f3b565b6111449190612fa8565b611a72565b50565b6000546001600160a01b031633146111765760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03811660009081526007602052604090205460ff166111de5760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f74000000000000006044820152606401610899565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031633146112445760405162461bcd60e51b815260040161089990612d5f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146112b85760405162461bcd60e51b815260040161089990612d5f565b6022805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b031633146113015760405162461bcd60e51b815260040161089990612d5f565b600a82111561136c5760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b6064820152608401610899565b600d546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b1580156113b257600080fd5b505afa1580156113c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea9190612fca565b905060006113fd60646110a58487611a53565b9050801561142257600d54600c54611422916001600160a01b03908116911683611a72565b600c54611437906001600160a01b03166111ff565b60155560646114486012600a612f2c565b6114579064e8d4a51000612f3b565b611462906032612f3b565b61146c9190612fa8565b60155411156114d15760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b6064820152608401610899565b600d546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b15801561151b57600080fd5b505af115801561152f573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b0316331461156a5760405162461bcd60e51b815260040161089990612d5f565b602280549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146115ae5760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116035760405162461bcd60e51b815260040161089990612d5f565b600061160e306111ff565b90506116276127106110a560056110906012600a612f2c565b8110156116ad5760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a401610899565b6111496123c1565b60006116c2338484611a72565b50600192915050565b6000546001600160a01b031633146116f55760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461174a5760405162461bcd60e51b815260040161089990612d5f565b60228054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146117965760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b0381166118005760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610899565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118855760405162461bcd60e51b815260040161089990612d5f565b611899816110a5846110906012600a612f2c565b6010556118b260646110a560046110906012600a612f2c565b60105411156119165760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b6064820152608401610899565b5050565b6000546001600160a01b031633146119445760405162461bcd60e51b815260040161089990612d5f565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114611991576040519150601f19603f3d011682016040523d82523d6000602084013e611996565b606091505b50505050565b6000546001600160a01b031633146119c65760405162461bcd60e51b815260040161089990612d5f565b6001600160a01b03811660009081526007602052604090205460ff1615611a2f5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c7265616479206164646564000000006044820152606401610899565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611a5f8284612f3b565b9392505050565b6000611a5f8284612fa8565b6001600160a01b038316611ad65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610899565b6001600160a01b038216611b385760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610899565b60008111611ba15760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610899565b6001600160a01b03831660009081526007602052604090205460ff1615611c0a5760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f546044820152606401610899565b60225462010000900460ff16611ca5576001600160a01b03831660009081526005602052604090205460ff1680611c5957506001600160a01b03821660009081526005602052604090205460ff165b611ca55760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c6976652100000000006044820152606401610899565b60225460ff6101009091041615156001148015611cdb57506001600160a01b03821660009081526004602052604090205460ff16155b15611d5b57601054611cf682611cf0856111ff565b906122f2565b1115611d5b5760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b6064820152608401610899565b60225460ff1615611e37576000546001600160a01b03848116911614801590611d9257506000546001600160a01b03838116911614155b8015611da657506001600160a01b03821615155b8015611dc05750600c546001600160a01b03838116911614155b8015611dda5750600d546001600160a01b03838116911614155b15611e375760005b6002811015611e3557602054611df890826122f2565b431415611e23576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611e2d81612f8d565b915050611de2565b505b6022546301000000900460ff1615611f1a57611e5282610969565b158015611e7757506001600160a01b03831660009081526003602052604090205460ff165b80611eab5750611e8683610969565b158015611eab57506001600160a01b03821660009081526003602052604090205460ff165b80611ede5750611eba83610969565b8015611ede57506001600160a01b03821660009081526003602052604090205460ff165b80611f115750611eed82610969565b8015611f1157506001600160a01b03831660009081526003602052604090205460ff165b611f1a57600080fd5b6000611f336012546014546122f290919063ffffffff16565b90506000611f40306111ff565b60115460225491925082101590640100000000900460ff16158015611f70575060225465010000000000900460ff165b8015611f915750600d54600090611f8f906001600160a01b03166111ff565b115b8015611f9d5750600083115b8015611fc257506001600160a01b03851660009081526005602052604090205460ff16155b8015611fe757506001600160a01b03861660009081526005602052604090205460ff16155b80156120005750600d546001600160a01b038681169116145b80156120095750805b15612016576120166123c1565b6001600160a01b03861660009081526005602052604090205460ff168061205557506001600160a01b03851660009081526005602052604090205460ff165b1561208157600060168190556017819055601881905561207990611cf081806122f2565b601955612205565b600d546001600160a01b03878116911614156120bf57601a546016819055601b546017819055601c546018819055612079929091611cf091906122f2565b600d546001600160a01b038681169116141561215957601d546016819055601e546017819055601f5460188190556120fd929091611cf091906122f2565b6019556001600160a01b03861660009081526006602052604090205460ff16801561212a57504260215410155b156121545760556016819055600a601781905560006018819055612079929091611cf091906122f2565b612205565b6001600160a01b03861660009081526006602052604090205460ff16158061218357504260215411155b6121f55760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f766572000000000000006064820152608401610899565b6000601681905560178190556018555b6122108686866125f4565b505050505050565b6000818484111561223c5760405162461bcd60e51b815260040161089991906129ff565b505050900390565b6001600160a01b03831661226a5760405162461bcd60e51b815260040161089990612da4565b6001600160a01b0382166122905760405162461bcd60e51b815260040161089990612dec565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611a5f8284612fe3565b600e546123169030906001600160a01b031684612244565b600e5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561238157600080fd5b505af1158015612395573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123ba9190612ffb565b5050505050565b6022805464ff00000000191664010000000017905560006123e1306111ff565b90506000612402601454611cf06013546012546122f290919063ffffffff16565b9050600061241c6002601454611a6690919063ffffffff16565b9050600061242a8483612795565b905047612436826127a1565b60006124424783612795565b9050600061245f866110a560125485611a5390919063ffffffff16565b9050600061247c876110a560135486611a5390919063ffffffff16565b905060006124948261248e8686612795565b90612795565b600060128190556013819055601481905560095460405192935090916001600160a01b039091169085908381818185875af1925050503d80600081146124f6576040519150601f19603f3d011682016040523d82523d6000602084013e6124fb565b606091505b5050600a546040519192506001600160a01b0316908490600081818185875af1925050503d806000811461254b576040519150601f19603f3d011682016040523d82523d6000602084013e612550565b606091505b5090915050811580159061256357508715155b156125725761257288836122fe565b6706f05b59d3b200004711156125da57600b546040516001600160a01b03909116904790600081818185875af1925050503d80600081146125cf576040519150601f19603f3d011682016040523d82523d6000602084013e6125d4565b606091505b50909150505b50506022805464ff00000000191690555050505050505050565b601954156126f457600061260782612902565b905060006126158383612795565b905061262082612930565b6001600160a01b03851660009081526002602052604081208054859290612648908490613029565b90915550506001600160a01b03841660009081526002602052604081208054839290612675908490612fe3565b90915550503060009081526002602052604081208054849290612699908490612fe3565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126e591815260200190565b60405180910390a35050505050565b6001600160a01b0383166000908152600260205260408120805483929061271c908490613029565b90915550506001600160a01b03821660009081526002602052604081208054839290612749908490612fe3565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122e591815260200190565b6000611a5f8284613029565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106127d6576127d6612f77565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561282a57600080fd5b505afa15801561283e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128629190612f5a565b8160018151811061287557612875612f77565b6001600160a01b039283166020918202929092010152600e5461289b9130911684612244565b600e5460405163791ac94760e01b81526001600160a01b039091169063791ac947906128d4908590600090869030904290600401613040565b600060405180830381600087803b1580156128ee57600080fd5b505af1158015612210573d6000803e3d6000fd5b600061096360646110a5612929601854611cf06017546016546122f290919063ffffffff16565b8590611a53565b61294b6019546110a560165484611a5390919063ffffffff16565b6012600082825461295c9190612fe3565b909155505060195460175461297791906110a5908490611a53565b601360008282546129889190612fe3565b90915550506019546018546129a391906110a5908490611a53565b601460008282546129b49190612fe3565b909155505050565b60008060008060008060c087890312156129d557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b81811015612a2c57858101830151858201604001528201612a10565b81811115612a3e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461114957600080fd5b60008060408385031215612a7c57600080fd5b8235612a8781612a54565b946020939093013593505050565b600060208284031215612aa757600080fd5b8135611a5f81612a54565b8035801515811461153b57600080fd5b600060208284031215612ad457600080fd5b611a5f82612ab2565b600080600060608486031215612af257600080fd5b8335612afd81612a54565b92506020840135612b0d81612a54565b929592945050506040919091013590565b60008060408385031215612b3157600080fd5b8235612b3c81612a54565b9150612b4a60208401612ab2565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b9257612b92612b53565b604052919050565b600067ffffffffffffffff821115612bb457612bb4612b53565b5060051b60200190565b600082601f830112612bcf57600080fd5b81356020612be4612bdf83612b9a565b612b69565b82815260059290921b84018101918181019086841115612c0357600080fd5b8286015b84811015612c1e5780358352918301918301612c07565b509695505050505050565b60008060408385031215612c3c57600080fd5b823567ffffffffffffffff80821115612c5457600080fd5b818501915085601f830112612c6857600080fd5b81356020612c78612bdf83612b9a565b82815260059290921b84018101918181019089841115612c9757600080fd5b948201945b83861015612cbe578535612caf81612a54565b82529482019490820190612c9c565b96505086013592505080821115612cd457600080fd5b50612ce185828601612bbe565b9150509250929050565b600060208284031215612cfd57600080fd5b5035919050565b60008060408385031215612d1757600080fd5b8235612d2281612a54565b91506020830135612d3281612a54565b809150509250929050565b60008060408385031215612d5057600080fd5b50508035926020909101359150565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612e83578160001904821115612e6957612e69612e32565b80851615612e7657918102915b93841c9390800290612e4d565b509250929050565b600082612e9a57506001610963565b81612ea757506000610963565b8160018114612ebd5760028114612ec757612ee3565b6001915050610963565b60ff841115612ed857612ed8612e32565b50506001821b610963565b5060208310610133831016604e8410600b8410161715612f06575081810a610963565b612f108383612e48565b8060001904821115612f2457612f24612e32565b029392505050565b6000611a5f60ff841683612e8b565b6000816000190483118215151615612f5557612f55612e32565b500290565b600060208284031215612f6c57600080fd5b8151611a5f81612a54565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612fa157612fa1612e32565b5060010190565b600082612fc557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fdc57600080fd5b5051919050565b60008219821115612ff657612ff6612e32565b500190565b60008060006060848603121561301057600080fd5b8351925060208401519150604084015190509250925092565b60008282101561303b5761303b612e32565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130905784516001600160a01b03168352938301939183019160010161306b565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204c913cb896ff9bd461e6c685b99d1975923426355bd2a56c8e586fc7545f9d6164736f6c63430008090033

Deployed Bytecode Sourcemap

18113:18407:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35753:462;;;;;;;;;;-1:-1:-1;35753:462:0;;;;;:::i;:::-;;:::i;:::-;;21587:98;;;;;;;;;;-1:-1:-1;21668:9:0;;;;;;;;;;;-1:-1:-1;;;21668:9:0;;;;21587:98;;;;21668:9;21587:98;:::i;:::-;;;;;;;;22292:397;;;;;;;;;;-1:-1:-1;22292:397:0;;;;;:::i;:::-;;:::i;:::-;;;1765:14:1;;1758:22;1740:41;;1728:2;1713:18;22292:397:0;1600:187:1;18771:40:0;;;;;;;;;;-1:-1:-1;18771:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36221:296;;;;;;;;;;-1:-1:-1;36412:15:0;;36428:14;;36443:15;;36459:16;;36476:15;;36492:16;;36221:296;;;2331:25:1;;;2387:2;2372:18;;2365:34;;;;2415:18;;;2408:34;;;;2473:2;2458:18;;2451:34;2516:3;2501:19;;2494:35;2560:3;2545:19;;2538:35;2318:3;2303:19;36221:296:0;2044:535:1;32112:337:0;;;;;;;;;;-1:-1:-1;32112:337:0;;;;;:::i;:::-;;:::i;21902:101::-;;;;;;;;;;;;;:::i;:::-;;;2730:25:1;;;2718:2;2703:18;21902:101:0;2584:177:1;35276:103:0;;;;;;;;;;-1:-1:-1;35276:103:0;;;;;:::i;:::-;;:::i;19833:28::-;;;;;;;;;;-1:-1:-1;19833:28:0;;;;;;;;23236:348;;;;;;;;;;-1:-1:-1;23236:348:0;;;;;:::i;:::-;;:::i;21799:97::-;;;;;;;;;;-1:-1:-1;21799:97:0;;18387:2;3719:36:1;;3707:2;3692:18;21799:97:0;3577:184:1;34357:171:0;;;;;;;;;;-1:-1:-1;34357:171:0;;;;;:::i;:::-;;:::i;24025:1249::-;;;;;;;;;;;;;:::i;18818:37::-;;;;;;;;;;-1:-1:-1;18818:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34852:158;;;;;;;;;;-1:-1:-1;34852:158:0;;;;;:::i;:::-;;:::i;23590:429::-;;;;;;;;;;-1:-1:-1;23590:429:0;;;;;:::i;:::-;;:::i;32898:149::-;;;;;;;;;;-1:-1:-1;32898:149:0;;;;;:::i;:::-;;:::i;19125:26::-;;;;;;;;;;-1:-1:-1;19125:26:0;;;;-1:-1:-1;;;;;19125:26:0;;;;;;-1:-1:-1;;;;;6922:32:1;;;6904:51;;6892:2;6877:18;19125:26:0;6758:203:1;34195:159:0;;;;;;;;;;-1:-1:-1;34195:159:0;;;;;:::i;:::-;;:::i;22009:122::-;;;;;;;;;;-1:-1:-1;22009:122:0;;;;;:::i;:::-;;:::i;727:148::-;;;;;;;;;;;;;:::i;19868:31::-;;;;;;;;;;-1:-1:-1;19868:31:0;;;;;;;;;;;35499:119;;;;;;;;;;-1:-1:-1;35499:119:0;;;;;:::i;:::-;;:::i;33053:686::-;;;;;;;;;;-1:-1:-1;33053:686:0;;;;;:::i;:::-;;:::i;19050:24::-;;;;;;;;;;-1:-1:-1;19050:24:0;;;;-1:-1:-1;;;;;19050:24:0;;;35385:108;;;;;;;;;;-1:-1:-1;35385:108:0;;;;;:::i;:::-;;:::i;503:87::-;;;;;;;;;;-1:-1:-1;549:7:0;576:6;-1:-1:-1;;;;;576:6:0;503:87;;34534:160;;;;;;;;;;-1:-1:-1;34534:160:0;;;;;:::i;:::-;;:::i;19906:24::-;;;;;;;;;;-1:-1:-1;19906:24:0;;;;;;;;;;;19081:37;;;;;;;;;;-1:-1:-1;19081:37:0;;;;-1:-1:-1;;;;;19081:37:0;;;19937:35;;;;;;;;;;-1:-1:-1;19937:35:0;;;;;;;;;;;32603:126;;;;;;;;;;-1:-1:-1;32603:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32693:28:0;32669:4;32693:28;;;:19;:28;;;;;;;;;32603:126;33745:282;;;;;;;;;;;;;:::i;23054:176::-;;;;;;;;;;-1:-1:-1;23054:176:0;;;;;:::i;:::-;;:::i;34700:146::-;;;;;;;;;;-1:-1:-1;34700:146:0;;;;;:::i;:::-;;:::i;22137:149::-;;;;;;;;;;-1:-1:-1;22137:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;22247:22:0;;;22220:7;22247:22;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;22137:149;19753:33;;;;;;;;;;;;;;;;35624:123;;;;;;;;;;-1:-1:-1;35624:123:0;;;;;:::i;:::-;;:::i;19793:31::-;;;;;;;;;;;;;;;;881:249;;;;;;;;;;-1:-1:-1;881:249:0;;;;;:::i;:::-;;:::i;35016:254::-;;;;;;;;;;-1:-1:-1;35016:254:0;;;;;:::i;:::-;;:::i;32735:157::-;;;;;;;;;;;;;:::i;34033:159::-;;;;;;;;;;-1:-1:-1;34033:159:0;;;;;:::i;:::-;;:::i;35753:462::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;;;;;;;;;35952:15:::1;:33:::0;;;;35996:14:::1;:31:::0;;;;36038:15:::1;:33:::0;;;;36082:16:::1;:35:::0;36128:15:::1;:33:::0;36172:16:::1;:35:::0;35753:462::o;22292:397::-;22367:4;162:10;22384:79;;;;-1:-1:-1;;;22384:79:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22482:21:0;;22474:72;;;;-1:-1:-1;;;22474:72:0;;;;;;;:::i;:::-;162:10;22557:29;;;;:15;:29;;;;;;;;-1:-1:-1;;;;;22557:38:0;;;;;;;;;;;;:47;;;22620:39;2730:25:1;;;22557:38:0;;162:10;22620:39;;2703:18:1;22620:39:0;;;;;;;-1:-1:-1;22677:4:0;22292:397;;;;;:::o;32112:337::-;32170:4;32349:20;;32236:66;32398:23;;;;;;:42;;-1:-1:-1;32425:15:0;;;32398:42;32390:51;32112:337;-1:-1:-1;;;;32112:337:0:o;21902:101::-;21957:7;18442:16;18387:2;18442;:16;:::i;:::-;18435:23;;:4;:23;:::i;:::-;21977:18;;21902:101;:::o;35276:103::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;35349:8:::1;:22:::0;;-1:-1:-1;;35349:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35276:103::o;23236:348::-;23334:4;23351:43;23368:6;23376:9;23387:6;23351:16;:43::i;:::-;23405:149;23421:6;162:10;23451:102;23493:6;23451:102;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23451:23:0;;;;;;:15;:23;;;;;;;;162:10;23451:37;;;;;;;;;;:41;:102::i;:::-;23405:15;:149::i;:::-;-1:-1:-1;23572:4:0;23236:348;;;;;:::o;34357:171::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34434:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;34426:58;;;::::0;-1:-1:-1;;;34426:58:0;;10959:2:1;34426:58:0::1;::::0;::::1;10941:21:1::0;10998:2;10978:18;;;10971:30;11037;11017:18;;;11010:58;11085:18;;34426:58:0::1;10757:352:1::0;34426:58:0::1;-1:-1:-1::0;;;;;34495:17:0::1;34515:5;34495:17:::0;;;:8:::1;:17;::::0;;;;:25;;-1:-1:-1;;34495:25:0::1;::::0;;34357:171::o;24025:1249::-;24071:4;576:6;;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;24096:4:::1;::::0;;;::::1;;;24095:5;24087:45;;;::::0;-1:-1:-1;;;24087:45:0;;11316:2:1;24087:45:0::1;::::0;::::1;11298:21:1::0;11355:2;11335:18;;;11328:30;11394:29;11374:18;;;11367:57;11441:18;;24087:45:0::1;11114:351:1::0;24087:45:0::1;24164:12;24143:18;:33:::0;24206:27:::1;:15;24226:6;24206:19;:27::i;:::-;24187:16;:46:::0;24351:11:::1;:26:::0;;-1:-1:-1;;;;;;24351:26:0;;::::1;24297:42;24351:26:::0;;::::1;::::0;;;24388:11:::1;:56:::0;;;;::::1;24402:42;24388:56;::::0;;24455:41;:48;;-1:-1:-1;;24455:48:0;;::::1;24351:26:::0;24455:48;;::::1;::::0;;;24514:41;:48;;;::::1;::::0;::::1;::::0;;24244:31:::1;24573:41:::0;;;:19:::1;24455:41;24573::::0;;:48;;;;::::1;::::0;;::::1;::::0;;24632:65:::1;24656:4;24297:42:::0;18442:16:::1;-1:-1:-1::0;18442:2:0::1;:16;:::i;:::-;18435:23;::::0;:4:::1;:23;:::i;24632:65::-;24738:12;-1:-1:-1::0;;;;;24738:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24720:52:0::1;;24781:4;24788:12;-1:-1:-1::0;;;;;24788:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24720:88;::::0;-1:-1:-1;;;;;;24720:88:0::1;::::0;;;;;;-1:-1:-1;;;;;11956:15:1;;;24720:88:0::1;::::0;::::1;11938:34:1::0;12008:15;;11988:18;;;11981:43;11873:18;;24720:88:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24708:9;:100:::0;;-1:-1:-1;;;;;;24708:100:0::1;-1:-1:-1::0;;;;;24708:100:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;24819:39:0;;;:19:::1;:39;::::0;;;;;;;:46;;-1:-1:-1;;24819:46:0;;::::1;-1:-1:-1::0;24819:46:0;;::::1;::::0;;;24904:9;;;;::::1;24876:39:::0;;:19:::1;:39:::0;;;;;:46;;;;::::1;::::0;;::::1;::::0;;24941:21:::1;24933:82;;;::::0;-1:-1:-1;;;24933:82:0;;12237:2:1;24933:82:0::1;::::0;::::1;12219:21:1::0;12276:2;12256:18;;;12249:30;12315:34;12295:18;;;12288:62;-1:-1:-1;;;12366:18:1;;;12359:42;12418:19;;24933:82:0::1;12035:408:1::0;24933:82:0::1;25026:61;25039:24;25057:4;25039:9;:24::i;:::-;25065:21;25026:12;:61::i;:::-;25124:4;::::0;32012:16;:37;;-1:-1:-1;;;;;;32012:37:0;-1:-1:-1;;;;;25124:4:0;;::::1;32012:37:::0;;;;;-1:-1:-1;32060:31:0;;;:13;:31;;;;;:38;;-1:-1:-1;;32060:38:0;-1:-1:-1;32060:38:0;;;-1:-1:-1;;25140:11:0::1;:18:::0;;-1:-1:-1;;25233:11:0;;;;;-1:-1:-1;;24025:1249:0:o;34852:158::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34951:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;34951:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34852:158::o;23590:429::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;23713:3:::1;23696:7;:14;:20;23688:87;;;::::0;-1:-1:-1;;;23688:87:0;;12650:2:1;23688:87:0::1;::::0;::::1;12632:21:1::0;12689:2;12669:18;;;12662:30;12728:34;12708:18;;;12701:62;-1:-1:-1;;;12779:18:1;;;12772:52;12841:19;;23688:87:0::1;12448:418:1::0;23688:87:0::1;23790:9;23786:226;23809:7;:14;23805:1;:18;23786:226;;;23844:14;23861:7;23869:1;23861:10;;;;;;;;:::i;:::-;;;;;;;23844:27;;23886:14;23903:36;23935:3;23903:27;23919:7;23927:1;23919:10;;;;;;;;:::i;:::-;;;;;;;18387:2;18442;:16;;;;:::i;:::-;18435:23;::::0;:4:::1;:23;:::i;:::-;23903:15:::0;::::1;:27::i;:::-;:31:::0;::::1;:36::i;:::-;23886:53:::0;-1:-1:-1;23954:46:0::1;162:10:::0;23985:6:::1;23993;23954:16;:46::i;:::-;23829:183;;23825:3;;;;;:::i;:::-;;;;23786:226;;;;23590:429:::0;;:::o;32898:149::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;32974:65:::1;32999:4;33006:7;549::::0;576:6;-1:-1:-1;;;;;576:6:0;;503:87;33006:7:::1;33035:3;33027:7:::0;18442:16:::1;18387:2;18442;:16;:::i;:::-;18435:23;::::0;:4:::1;:23;:::i;:::-;33015:19;;;;:::i;:::-;:23;;;;:::i;:::-;32974:16;:65::i;:::-;32898:149:::0;:::o;34195:159::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34269:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;34261:52;;;::::0;-1:-1:-1;;;34261:52:0;;13567:2:1;34261:52:0::1;::::0;::::1;13549:21:1::0;13606:2;13586:18;;;13579:30;13645:27;13625:18;;;13618:55;13690:18;;34261:52:0::1;13365:349:1::0;34261:52:0::1;-1:-1:-1::0;;;;;34324:14:0::1;34341:5;34324:14:::0;;;:5:::1;:14;::::0;;;;:22;;-1:-1:-1;;34324:22:0::1;::::0;;34195:159::o;22009:122::-;-1:-1:-1;;;;;22102:21:0;22075:7;22102:21;;;:12;:21;;;;;;;22009:122::o;727:148::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;834:1:::1;818:6:::0;;797:40:::1;::::0;-1:-1:-1;;;;;818:6:0;;::::1;::::0;797:40:::1;::::0;834:1;;797:40:::1;865:1;848:19:::0;;-1:-1:-1;;;;;;848:19:0::1;::::0;;727:148::o;35499:119::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;35581:15:::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35581:29:0;;::::1;::::0;;;::::1;::::0;;35499:119::o;33053:686::-;33130:4;576:6;;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;33165:2:::1;33154:7;:13;;33146:75;;;::::0;-1:-1:-1;;;33146:75:0;;13921:2:1;33146:75:0::1;::::0;::::1;13903:21:1::0;13960:2;13940:18;;;13933:30;13999:34;13979:18;;;13972:62;-1:-1:-1;;;14050:18:1;;;14043:47;14107:19;;33146:75:0::1;13719:413:1::0;33146:75:0::1;33278:9;::::0;33263:25:::1;::::0;-1:-1:-1;;;33263:25:0;;-1:-1:-1;;;;;33278:9:0;;::::1;33263:25;::::0;::::1;6904:51:1::0;33232:28:0::1;::::0;33263:4:::1;::::0;:14:::1;::::0;6877:18:1;;33263:25:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33232:56:::0;-1:-1:-1;33299:20:0::1;33322:44;33360:5;33322:33;33232:56:::0;33347:7;33322:24:::1;:33::i;:44::-;33299:67:::0;-1:-1:-1;33381:16:0;;33377:95:::1;;33430:9;::::0;33441:4:::1;::::0;33413:47:::1;::::0;-1:-1:-1;;;;;33430:9:0;;::::1;::::0;33441:4:::1;33447:12:::0;33413:16:::1;:47::i;:::-;33512:4;::::0;33502:15:::1;::::0;-1:-1:-1;;;;;33512:4:0::1;33502:9;:15::i;:::-;33482:17;:35:::0;33576:5:::1;18442:16;18387:2;18442;:16;:::i;:::-;18435:23;::::0;:4:::1;:23;:::i;:::-;33557:16;::::0;33571:2:::1;33557:16;:::i;:::-;:24;;;;:::i;:::-;33536:17;;:45;;33528:101;;;::::0;-1:-1:-1;;;33528:101:0;;14528:2:1;33528:101:0::1;::::0;::::1;14510:21:1::0;14567:2;14547:18;;;14540:30;14606:34;14586:18;;;14579:62;-1:-1:-1;;;14657:18:1;;;14650:41;14708:19;;33528:101:0::1;14326:407:1::0;33528:101:0::1;33677:9;::::0;33698:11:::1;::::0;;-1:-1:-1;;;;;;33698:11:0;;;;-1:-1:-1;;;;;33677:9:0;;::::1;::::0;;;33698::::1;::::0;:11:::1;::::0;;::::1;::::0;33640:19:::1;::::0;33698:11;;;;;;;33640:19;33677:9;33698:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33727:4;33720:11;;;;;712:1;33053:686:::0;;;:::o;35385:108::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;35460:11:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;35460:25:0;;::::1;::::0;;;::::1;::::0;;35385:108::o;34534:160::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34635:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;34635:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34534:160::o;33745:282::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;33800:23:::1;33826:24;33844:4;33826:9;:24::i;:::-;33800:50:::0;-1:-1:-1;33888:29:0::1;33911:5;33888:18;33904:1;18442:16;18387:2;18442;:16;:::i;33888:29::-;33869:15;:48;;33861:133;;;::::0;-1:-1:-1;;;33861:133:0;;14940:2:1;33861:133:0::1;::::0;::::1;14922:21:1::0;14979:2;14959:18;;;14952:30;15018:34;14998:18;;;14991:62;15089:34;15069:18;;;15062:62;-1:-1:-1;;;15140:19:1;;;15133:39;15189:19;;33861:133:0::1;14738:476:1::0;33861:133:0::1;34005:14;:12;:14::i;23054:176::-:0;23134:4;23151:49;162:10;23182:9;23193:6;23151:16;:49::i;:::-;-1:-1:-1;23218:4:0;23054:176;;;;:::o;34700:146::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34793:31:0;;;::::1;;::::0;;;:13:::1;:31;::::0;;;;:45;;-1:-1:-1;;34793:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34700:146::o;35624:123::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;35705:20:::1;:34:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35705:34:0;;::::1;::::0;;;::::1;::::0;;35624:123::o;881:249::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;970:22:0;::::1;962:78;;;::::0;-1:-1:-1;;;962:78:0;;15421:2:1;962:78:0::1;::::0;::::1;15403:21:1::0;15460:2;15440:18;;;15433:30;15499:34;15479:18;;;15472:62;-1:-1:-1;;;15550:18:1;;;15543:41;15601:19;;962:78:0::1;15219:407:1::0;962:78:0::1;1077:6;::::0;;1056:38:::1;::::0;-1:-1:-1;;;;;1056:38:0;;::::1;::::0;1077:6;::::1;::::0;1056:38:::1;::::0;::::1;1105:6;:17:::0;;-1:-1:-1;;;;;;1105:17:0::1;-1:-1:-1::0;;;;;1105:17:0;;;::::1;::::0;;;::::1;::::0;;881:249::o;35016:254::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;35120:37:::1;35149:7:::0;35120:24:::1;35136:7:::0;18442:16:::1;18387:2;18442;:16;:::i;35120:37::-;35108:9;:49:::0;35188:27:::1;35211:3;35188:18;35204:1;18442:16;18387:2;18442;:16;:::i;35188:27::-;35176:9;;:39;;35168:94;;;::::0;-1:-1:-1;;;35168:94:0;;15833:2:1;35168:94:0::1;::::0;::::1;15815:21:1::0;15872:2;15852:18;;;15845:30;15911:34;15891:18;;;15884:62;-1:-1:-1;;;15962:18:1;;;15955:40;16012:19;;35168:94:0::1;15631:406:1::0;35168:94:0::1;35016:254:::0;;:::o;32735:157::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;32793:12:::1;576:6:::0;;32829:55:::1;::::0;-1:-1:-1;;;;;576:6:0;;;;32858:21:::1;::::0;32793:12;32829:55;32793:12;32829:55;32858:21;576:6;32829:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;32735:157:0:o;34033:159::-;549:7;576:6;-1:-1:-1;;;;;576:6:0;162:10;636:23;628:73;;;;-1:-1:-1;;;628:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34105:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;34104:15;34096:56;;;::::0;-1:-1:-1;;;34096:56:0;;16454:2:1;34096:56:0::1;::::0;::::1;16436:21:1::0;16493:2;16473:18;;;16466:30;16532;16512:18;;;16505:58;16580:18;;34096:56:0::1;16252:352:1::0;34096:56:0::1;-1:-1:-1::0;;;;;34163:14:0::1;;::::0;;;:5:::1;:14;::::0;;;;:21;;-1:-1:-1;;34163:21:0::1;34180:4;34163:21;::::0;;34033:159::o;2706:98::-;2764:7;2791:5;2795:1;2791;:5;:::i;:::-;2784:12;2706:98;-1:-1:-1;;;2706:98:0:o;2810:::-;2868:7;2895:5;2899:1;2895;:5;:::i;25280:3310::-;-1:-1:-1;;;;;25376:18:0;;25368:68;;;;-1:-1:-1;;;25368:68:0;;16811:2:1;25368:68:0;;;16793:21:1;16850:2;16830:18;;;16823:30;16889:34;16869:18;;;16862:62;-1:-1:-1;;;16940:18:1;;;16933:35;16985:19;;25368:68:0;16609:401:1;25368:68:0;-1:-1:-1;;;;;25455:16:0;;25447:64;;;;-1:-1:-1;;;25447:64:0;;17217:2:1;25447:64:0;;;17199:21:1;17256:2;17236:18;;;17229:30;17295:34;17275:18;;;17268:62;-1:-1:-1;;;17346:18:1;;;17339:33;17389:19;;25447:64:0;17015:399:1;25447:64:0;25539:1;25530:6;:10;25522:71;;;;-1:-1:-1;;;25522:71:0;;17621:2:1;25522:71:0;;;17603:21:1;17660:2;17640:18;;;17633:30;17699:34;17679:18;;;17672:62;-1:-1:-1;;;17750:18:1;;;17743:46;17806:19;;25522:71:0;17419:412:1;25522:71:0;-1:-1:-1;;;;;25613:11:0;;;;;;:5;:11;;;;;;;;25612:12;25604:57;;;;-1:-1:-1;;;25604:57:0;;18038:2:1;25604:57:0;;;18020:21:1;;;18057:18;;;18050:30;18116:34;18096:18;;;18089:62;18168:18;;25604:57:0;17836:356:1;25604:57:0;25676:4;;;;;;;25672:116;;-1:-1:-1;;;;;25704:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;25727:17:0;;;;;;:13;:17;;;;;;;;25704:40;25696:80;;;;-1:-1:-1;;;25696:80:0;;18399:2:1;25696:80:0;;;18381:21:1;18438:2;18418:18;;;18411:30;18477:29;18457:18;;;18450:57;18524:18;;25696:80:0;18197:351:1;25696:80:0;25802:11;;;;;;;;:19;;:11;:19;:48;;;;-1:-1:-1;;;;;;25827:23:0;;;;;;:19;:23;;;;;;;;25825:25;25802:48;25798:178;;;25904:9;;25875:25;25893:6;25875:13;25885:2;25875:9;:13::i;:::-;:17;;:25::i;:::-;:38;;25867:97;;;;-1:-1:-1;;;25867:97:0;;18755:2:1;25867:97:0;;;18737:21:1;18794:2;18774:18;;;18767:30;18833:34;18813:18;;;18806:62;-1:-1:-1;;;18884:18:1;;;18877:44;18938:19;;25867:97:0;18553:410:1;25867:97:0;25989:8;;;;25986:350;;;549:7;576:6;-1:-1:-1;;;;;26017:15:0;;;576:6;;26017:15;;;;:32;;-1:-1:-1;549:7:0;576:6;-1:-1:-1;;;;;26036:13:0;;;576:6;;26036:13;;26017:32;:52;;;;-1:-1:-1;;;;;;26053:16:0;;;;26017:52;:66;;;;-1:-1:-1;26079:4:0;;-1:-1:-1;;;;;26073:10:0;;;26079:4;;26073:10;;26017:66;:85;;;;-1:-1:-1;26093:9:0;;-1:-1:-1;;;;;26087:15:0;;;26093:9;;26087:15;;26017:85;26013:312;;;26128:6;26123:187;26144:1;26140;:5;26123:187;;;26194:18;;:25;;26217:1;26194:22;:25::i;:::-;26178:12;:41;26175:116;;;-1:-1:-1;;;;;26248:12:0;;;;;;:8;:12;;;;;:19;;-1:-1:-1;;26248:19:0;26263:4;26248:19;;;26175:116;26147:3;;;;:::i;:::-;;;;26123:187;;;;26013:312;26349:15;;;;;;;26346:331;;;26408:14;26419:2;26408:10;:14::i;:::-;26407:15;:44;;;;-1:-1:-1;;;;;;26426:25:0;;;;;;:19;:25;;;;;;;;26407:44;:109;;;;26473:16;26484:4;26473:10;:16::i;:::-;26472:17;:44;;;;-1:-1:-1;;;;;;26493:23:0;;;;;;:19;:23;;;;;;;;26472:44;26407:174;;;;26538:16;26549:4;26538:10;:16::i;:::-;:43;;;;-1:-1:-1;;;;;;26558:23:0;;;;;;:19;:23;;;;;;;;26538:43;26407:239;;;;26603:14;26614:2;26603:10;:14::i;:::-;:43;;;;-1:-1:-1;;;;;;26621:25:0;;;;;;:19;:25;;;;;;;;26603:43;26381:284;;;;;;26687:25;26715:36;26735:15;;26715;;:19;;:36;;;;:::i;:::-;26687:64;;26762:28;26793:24;26811:4;26793:9;:24::i;:::-;26883:10;;26909:16;;26762:55;;-1:-1:-1;26859:34:0;;;;26909:16;;;;;26908:17;:41;;;;-1:-1:-1;26929:20:0;;;;;;;26908:41;:69;;;;-1:-1:-1;26963:9:0;;26976:1;;26953:20;;-1:-1:-1;;;;;26963:9:0;26953;:20::i;:::-;:24;26908:69;:94;;;;;27001:1;26981:17;:21;26908:94;:116;;;;-1:-1:-1;;;;;;27007:17:0;;;;;;:13;:17;;;;;;;;27006:18;26908:116;:140;;;;-1:-1:-1;;;;;;27029:19:0;;;;;;:13;:19;;;;;;;;27028:20;26908:140;:159;;;;-1:-1:-1;27058:9:0;;-1:-1:-1;;;;;27052:15:0;;;27058:9;;27052:15;26908:159;:186;;;;;27071:23;26908:186;26904:237;;;27111:14;:12;:14::i;:::-;-1:-1:-1;;;;;27155:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;27178:17:0;;;;;;:13;:17;;;;;;;;27155:40;27151:1390;;;27227:1;27212:12;:16;;;27243:11;:15;;;27273:12;:16;;;27321:47;;:29;27227:1;;27321:16;:29::i;:47::-;27304:14;:64;27151:1390;;;27413:9;;-1:-1:-1;;;;;27405:17:0;;;27413:9;;27405:17;27401:1129;;;27458:15;;27443:12;:30;;;27506:14;;27492:11;:28;;;27554:15;;27539:12;:30;;;27605:56;;27554:15;;27605:35;;27458:15;27605:19;:35::i;27401:1129::-;27692:9;;-1:-1:-1;;;;;27686:15:0;;;27692:9;;27686:15;27682:848;;;27737:16;;27722:12;:31;;;27786:15;;27772:11;:29;;;27835:16;;27820:12;:31;;;27887:59;;27835:16;;27887:37;;27737:16;27887:20;:37::i;:59::-;27870:14;:76;-1:-1:-1;;;;;27968:14:0;;;;;;:8;:14;;;;;;;;:53;;;;;28006:15;27986:16;;:35;;27968:53;27965:282;;;28060:2;28045:12;:17;;;28099:2;28085:11;:16;;;-1:-1:-1;28124:12:0;:16;;;28180:47;;-1:-1:-1;;28180:29:0;;28060:2;28180:16;:29::i;27965:282::-;27682:848;;;-1:-1:-1;;;;;28295:14:0;;;;;;:8;:14;;;;;;;;28294:15;;:54;;;28333:15;28313:16;;:35;;28294:54;28286:124;;;;-1:-1:-1;;;28286:124:0;;19170:2:1;28286:124:0;;;19152:21:1;19209:2;19189:18;;;19182:30;19248:34;19228:18;;;19221:62;19319:27;19299:18;;;19292:55;19364:19;;28286:124:0;18968:421:1;28286:124:0;28444:1;28429:12;:16;;;28464:11;:15;;;28498:12;:16;27682:848;28551:31;28565:4;28571:2;28575:6;28551:13;:31::i;:::-;25357:3233;;;25280:3310;;;:::o;3018:206::-;3104:7;3165:12;3157:6;;;;3149:29;;;;-1:-1:-1;;;3149:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3200:5:0;;;3018:206::o;22695:353::-;-1:-1:-1;;;;;22794:19:0;;22786:72;;;;-1:-1:-1;;;22786:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22877:21:0;;22869:72;;;;-1:-1:-1;;;22869:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22952:22:0;;;;;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;:40;;;23008:32;;2730:25:1;;;23008:32:0;;2703:18:1;23008:32:0;;;;;;;;22695:353;;;:::o;2498:98::-;2556:7;2583:5;2587:1;2583;:5;:::i;30419:369::-;30540:11;;30501:65;;30525:4;;-1:-1:-1;;;;;30540:11:0;30554;30501:15;:65::i;:::-;30577:11;;30723:16;;30577:203;;-1:-1:-1;;;30577:203:0;;30645:4;30577:203;;;19876:34:1;19926:18;;;19919:34;;;30577:11:0;19969:18:1;;;19962:34;;;20012:18;;;20005:34;-1:-1:-1;;;;;30723:16:0;;;20055:19:1;;;20048:44;30754:15:0;20108:19:1;;;20101:35;30577:11:0;;;:27;;30612:9;;19810:19:1;;30577:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30419:369;;:::o;28596:1344::-;20089:16;:23;;-1:-1:-1;;20089:23:0;;;;;;28678:24:::1;28696:4;28678:9;:24::i;:::-;28652:50;;28713:25;28741:56;28781:15;;28741:35;28761:14;;28741:15;;:19;;:35;;;;:::i;:56::-;28713:84;;28808:27;28838:22;28858:1;28838:15;;:19;;:22;;;;:::i;:::-;28808:52:::0;-1:-1:-1;28871:26:0::1;28900:40;:15:::0;28808:52;28900:19:::1;:40::i;:::-;28871:69:::0;-1:-1:-1;28979:21:0::1;29011:36;28871:69:::0;29011:16:::1;:36::i;:::-;29059:18;29080:44;:21;29106:17:::0;29080:25:::1;:44::i;:::-;29059:65;;29135:23;29161:54;29197:17;29161:31;29176:15;;29161:10;:14;;:31;;;;:::i;:54::-;29135:80;;29226:22;29251:53;29286:17;29251:30;29266:14;;29251:10;:14;;:30;;;;:::i;:53::-;29226:78:::0;-1:-1:-1;29315:23:0::1;29341:51;29226:78:::0;29341:31:::1;:10:::0;29356:15;29341:14:::1;:31::i;:::-;:35:::0;::::1;:51::i;:::-;29421:1;29403:15;:19:::0;;;29433:14:::1;:18:::0;;;29462:15:::1;:19:::0;;;29518:16:::1;::::0;29510:58:::1;::::0;29315:77;;-1:-1:-1;29421:1:0;;-1:-1:-1;;;;;29518:16:0;;::::1;::::0;29548:15;;29421:1;29510:58;29421:1;29510:58;29548:15;29518:16;29510:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29600:15:0::1;::::0;29592:56:::1;::::0;29492:76;;-1:-1:-1;;;;;;29600:15:0::1;::::0;29629:14;;29592:56:::1;::::0;;;29629:14;29600:15;29592:56:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29579:69:0;;-1:-1:-1;;29662:20:0;;;::::1;::::0;:48:::1;;-1:-1:-1::0;29686:24:0;;::::1;29662:48;29659:130;;;29727:50;29740:19;29761:15;29727:12;:50::i;:::-;29826:8;29802:21;:32;29799:134;;;29871:10;::::0;29863:58:::1;::::0;-1:-1:-1;;;;;29871:10:0;;::::1;::::0;29895:21:::1;::::0;29863:58:::1;::::0;;;29895:21;29871:10;29863:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29850:71:0;;-1:-1:-1;;29799:134:0::1;-1:-1:-1::0;;20135:16:0;:24;;-1:-1:-1;;20135:24:0;;;-1:-1:-1;;;;;;;;28596:1344:0:o;31259:673::-;31354:14;;:19;31351:574;;31389:17;31409:20;31422:6;31409:12;:20::i;:::-;31389:40;-1:-1:-1;31444:22:0;31469:21;:6;31389:40;31469:10;:21::i;:::-;31444:46;;31505:25;31520:9;31505:14;:25::i;:::-;-1:-1:-1;;;;;31545:20:0;;;;;;:12;:20;;;;;:30;;31569:6;;31545:20;:30;;31569:6;;31545:30;:::i;:::-;;;;-1:-1:-1;;;;;;;31590:23:0;;;;;;:12;:23;;;;;:41;;31617:14;;31590:23;:41;;31617:14;;31590:41;:::i;:::-;;;;-1:-1:-1;;31667:4:0;31646:27;;;;:12;:27;;;;;:40;;31677:9;;31646:27;:40;;31677:9;;31646:40;:::i;:::-;;;;;;;;31723:9;-1:-1:-1;;;;;31706:43:0;31715:6;-1:-1:-1;;;;;31706:43:0;;31734:14;31706:43;;;;2730:25:1;;2718:2;2703:18;;2584:177;31706:43:0;;;;;;;;31374:387;;23786:226:::1;23590:429:::0;;:::o;31351:574::-;-1:-1:-1;;;;;31780:20:0;;;;;;:12;:20;;;;;:30;;31804:6;;31780:20;:30;;31804:6;;31780:30;:::i;:::-;;;;-1:-1:-1;;;;;;;31825:23:0;;;;;;:12;:23;;;;;:33;;31852:6;;31825:23;:33;;31852:6;;31825:33;:::i;:::-;;;;;;;;31895:9;-1:-1:-1;;;;;31878:35:0;31887:6;-1:-1:-1;;;;;31878:35:0;;31906:6;31878:35;;;;2730:25:1;;2718:2;2703:18;;2584:177;2602:98:0;2660:7;2687:5;2691:1;2687;:5;:::i;29946:467::-;30037:16;;;30051:1;30037:16;;;;;;;;30013:21;;30037:16;;;;;;;;;;-1:-1:-1;30037:16:0;30013:40;;30082:4;30064;30069:1;30064:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30064:23:0;;;:7;;;;;;;;;;:23;;;;30108:11;;:18;;;-1:-1:-1;;;30108:18:0;;;;:11;;;;;:16;;:18;;;;;30064:7;;30108:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30098:4;30103:1;30098:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30098:28:0;;;:7;;;;;;;;;:28;30176:11;;30137:65;;30161:4;;30176:11;30190;30137:15;:65::i;:::-;30213:11;;:192;;-1:-1:-1;;;30213:192:0;;-1:-1:-1;;;;;30213:11:0;;;;:62;;:192;;30290:11;;30213;;30332:4;;30359;;30379:15;;30213:192;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30794:164;30855:7;30882:68;30946:3;30882:59;30893:47;30927:12;;30893:29;30910:11;;30893:12;;:16;;:29;;;;:::i;:47::-;30882:6;;:10;:59::i;30964:289::-;31046:47;31078:14;;31046:27;31060:12;;31046:9;:13;;:27;;;;:::i;:47::-;31027:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;31153:14:0;;31136:11;;31122:46;;31153:14;31122:26;;:9;;:13;:26::i;:46::-;31104:14;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;31230:14:0;;31212:12;;31198:47;;31230:14;31198:27;;:9;;:13;:27::i;:47::-;31179:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;30964:289:0:o;14:523:1:-;118:6;126;134;142;150;158;211:3;199:9;190:7;186:23;182:33;179:53;;;228:1;225;218:12;179:53;-1:-1:-1;;251:23:1;;;321:2;306:18;;293:32;;-1:-1:-1;372:2:1;357:18;;344:32;;423:2;408:18;;395:32;;-1:-1:-1;474:3:1;459:19;;446:33;;-1:-1:-1;526:3:1;511:19;498:33;;-1:-1:-1;14:523:1;-1:-1:-1;14:523:1:o;542:597::-;654:4;683:2;712;701:9;694:21;744:6;738:13;787:6;782:2;771:9;767:18;760:34;812:1;822:140;836:6;833:1;830:13;822:140;;;931:14;;;927:23;;921:30;897:17;;;916:2;893:26;886:66;851:10;;822:140;;;980:6;977:1;974:13;971:91;;;1050:1;1045:2;1036:6;1025:9;1021:22;1017:31;1010:42;971:91;-1:-1:-1;1123:2:1;1102:15;-1:-1:-1;;1098:29:1;1083:45;;;;1130:2;1079:54;;542:597;-1:-1:-1;;;542:597:1:o;1144:131::-;-1:-1:-1;;;;;1219:31:1;;1209:42;;1199:70;;1265:1;1262;1255:12;1280:315;1348:6;1356;1409:2;1397:9;1388:7;1384:23;1380:32;1377:52;;;1425:1;1422;1415:12;1377:52;1464:9;1451:23;1483:31;1508:5;1483:31;:::i;:::-;1533:5;1585:2;1570:18;;;;1557:32;;-1:-1:-1;;;1280:315:1:o;1792:247::-;1851:6;1904:2;1892:9;1883:7;1879:23;1875:32;1872:52;;;1920:1;1917;1910:12;1872:52;1959:9;1946:23;1978:31;2003:5;1978:31;:::i;2766:160::-;2831:20;;2887:13;;2880:21;2870:32;;2860:60;;2916:1;2913;2906:12;2931:180;2987:6;3040:2;3028:9;3019:7;3015:23;3011:32;3008:52;;;3056:1;3053;3046:12;3008:52;3079:26;3095:9;3079:26;:::i;3116:456::-;3193:6;3201;3209;3262:2;3250:9;3241:7;3237:23;3233:32;3230:52;;;3278:1;3275;3268:12;3230:52;3317:9;3304:23;3336:31;3361:5;3336:31;:::i;:::-;3386:5;-1:-1:-1;3443:2:1;3428:18;;3415:32;3456:33;3415:32;3456:33;:::i;:::-;3116:456;;3508:7;;-1:-1:-1;;;3562:2:1;3547:18;;;;3534:32;;3116:456::o;3766:315::-;3831:6;3839;3892:2;3880:9;3871:7;3867:23;3863:32;3860:52;;;3908:1;3905;3898:12;3860:52;3947:9;3934:23;3966:31;3991:5;3966:31;:::i;:::-;4016:5;-1:-1:-1;4040:35:1;4071:2;4056:18;;4040:35;:::i;:::-;4030:45;;3766:315;;;;;:::o;4086:127::-;4147:10;4142:3;4138:20;4135:1;4128:31;4178:4;4175:1;4168:15;4202:4;4199:1;4192:15;4218:275;4289:2;4283:9;4354:2;4335:13;;-1:-1:-1;;4331:27:1;4319:40;;4389:18;4374:34;;4410:22;;;4371:62;4368:88;;;4436:18;;:::i;:::-;4472:2;4465:22;4218:275;;-1:-1:-1;4218:275:1:o;4498:183::-;4558:4;4591:18;4583:6;4580:30;4577:56;;;4613:18;;:::i;:::-;-1:-1:-1;4658:1:1;4654:14;4670:4;4650:25;;4498:183::o;4686:662::-;4740:5;4793:3;4786:4;4778:6;4774:17;4770:27;4760:55;;4811:1;4808;4801:12;4760:55;4847:6;4834:20;4873:4;4897:60;4913:43;4953:2;4913:43;:::i;:::-;4897:60;:::i;:::-;4991:15;;;5077:1;5073:10;;;;5061:23;;5057:32;;;5022:12;;;;5101:15;;;5098:35;;;5129:1;5126;5119:12;5098:35;5165:2;5157:6;5153:15;5177:142;5193:6;5188:3;5185:15;5177:142;;;5259:17;;5247:30;;5297:12;;;;5210;;5177:142;;;-1:-1:-1;5337:5:1;4686:662;-1:-1:-1;;;;;;4686:662:1:o;5353:1215::-;5471:6;5479;5532:2;5520:9;5511:7;5507:23;5503:32;5500:52;;;5548:1;5545;5538:12;5500:52;5588:9;5575:23;5617:18;5658:2;5650:6;5647:14;5644:34;;;5674:1;5671;5664:12;5644:34;5712:6;5701:9;5697:22;5687:32;;5757:7;5750:4;5746:2;5742:13;5738:27;5728:55;;5779:1;5776;5769:12;5728:55;5815:2;5802:16;5837:4;5861:60;5877:43;5917:2;5877:43;:::i;5861:60::-;5955:15;;;6037:1;6033:10;;;;6025:19;;6021:28;;;5986:12;;;;6061:19;;;6058:39;;;6093:1;6090;6083:12;6058:39;6117:11;;;;6137:217;6153:6;6148:3;6145:15;6137:217;;;6233:3;6220:17;6250:31;6275:5;6250:31;:::i;:::-;6294:18;;6170:12;;;;6332;;;;6137:217;;;6373:5;-1:-1:-1;;6416:18:1;;6403:32;;-1:-1:-1;;6447:16:1;;;6444:36;;;6476:1;6473;6466:12;6444:36;;6499:63;6554:7;6543:8;6532:9;6528:24;6499:63;:::i;:::-;6489:73;;;5353:1215;;;;;:::o;6573:180::-;6632:6;6685:2;6673:9;6664:7;6660:23;6656:32;6653:52;;;6701:1;6698;6691:12;6653:52;-1:-1:-1;6724:23:1;;6573:180;-1:-1:-1;6573:180:1:o;7201:388::-;7269:6;7277;7330:2;7318:9;7309:7;7305:23;7301:32;7298:52;;;7346:1;7343;7336:12;7298:52;7385:9;7372:23;7404:31;7429:5;7404:31;:::i;:::-;7454:5;-1:-1:-1;7511:2:1;7496:18;;7483:32;7524:33;7483:32;7524:33;:::i;:::-;7576:7;7566:17;;;7201:388;;;;;:::o;7594:248::-;7662:6;7670;7723:2;7711:9;7702:7;7698:23;7694:32;7691:52;;;7739:1;7736;7729:12;7691:52;-1:-1:-1;;7762:23:1;;;7832:2;7817:18;;;7804:32;;-1:-1:-1;7594:248:1:o;7847:401::-;8049:2;8031:21;;;8088:2;8068:18;;;8061:30;8127:34;8122:2;8107:18;;8100:62;-1:-1:-1;;;8193:2:1;8178:18;;8171:35;8238:3;8223:19;;7847:401::o;8253:404::-;8455:2;8437:21;;;8494:2;8474:18;;;8467:30;8533:34;8528:2;8513:18;;8506:62;-1:-1:-1;;;8599:2:1;8584:18;;8577:38;8647:3;8632:19;;8253:404::o;8662:402::-;8864:2;8846:21;;;8903:2;8883:18;;;8876:30;8942:34;8937:2;8922:18;;8915:62;-1:-1:-1;;;9008:2:1;8993:18;;8986:36;9054:3;9039:19;;8662:402::o;9069:127::-;9130:10;9125:3;9121:20;9118:1;9111:31;9161:4;9158:1;9151:15;9185:4;9182:1;9175:15;9201:422;9290:1;9333:5;9290:1;9347:270;9368:7;9358:8;9355:21;9347:270;;;9427:4;9423:1;9419:6;9415:17;9409:4;9406:27;9403:53;;;9436:18;;:::i;:::-;9486:7;9476:8;9472:22;9469:55;;;9506:16;;;;9469:55;9585:22;;;;9545:15;;;;9347:270;;;9351:3;9201:422;;;;;:::o;9628:806::-;9677:5;9707:8;9697:80;;-1:-1:-1;9748:1:1;9762:5;;9697:80;9796:4;9786:76;;-1:-1:-1;9833:1:1;9847:5;;9786:76;9878:4;9896:1;9891:59;;;;9964:1;9959:130;;;;9871:218;;9891:59;9921:1;9912:10;;9935:5;;;9959:130;9996:3;9986:8;9983:17;9980:43;;;10003:18;;:::i;:::-;-1:-1:-1;;10059:1:1;10045:16;;10074:5;;9871:218;;10173:2;10163:8;10160:16;10154:3;10148:4;10145:13;10141:36;10135:2;10125:8;10122:16;10117:2;10111:4;10108:12;10104:35;10101:77;10098:159;;;-1:-1:-1;10210:19:1;;;10242:5;;10098:159;10289:34;10314:8;10308:4;10289:34;:::i;:::-;10359:6;10355:1;10351:6;10347:19;10338:7;10335:32;10332:58;;;10370:18;;:::i;:::-;10408:20;;9628:806;-1:-1:-1;;;9628:806:1:o;10439:140::-;10497:5;10526:47;10567:4;10557:8;10553:19;10547:4;10526:47;:::i;10584:168::-;10624:7;10690:1;10686;10682:6;10678:14;10675:1;10672:21;10667:1;10660:9;10653:17;10649:45;10646:71;;;10697:18;;:::i;:::-;-1:-1:-1;10737:9:1;;10584:168::o;11470:251::-;11540:6;11593:2;11581:9;11572:7;11568:23;11564:32;11561:52;;;11609:1;11606;11599:12;11561:52;11641:9;11635:16;11660:31;11685:5;11660:31;:::i;12871:127::-;12932:10;12927:3;12923:20;12920:1;12913:31;12963:4;12960:1;12953:15;12987:4;12984:1;12977:15;13003:135;13042:3;-1:-1:-1;;13063:17:1;;13060:43;;;13083:18;;:::i;:::-;-1:-1:-1;13130:1:1;13119:13;;13003:135::o;13143:217::-;13183:1;13209;13199:132;;13253:10;13248:3;13244:20;13241:1;13234:31;13288:4;13285:1;13278:15;13316:4;13313:1;13306:15;13199:132;-1:-1:-1;13345:9:1;;13143:217::o;14137:184::-;14207:6;14260:2;14248:9;14239:7;14235:23;14231:32;14228:52;;;14276:1;14273;14266:12;14228:52;-1:-1:-1;14299:16:1;;14137:184;-1:-1:-1;14137:184:1:o;19394:128::-;19434:3;19465:1;19461:6;19458:1;19455:13;19452:39;;;19471:18;;:::i;:::-;-1:-1:-1;19507:9:1;;19394:128::o;20147:306::-;20235:6;20243;20251;20304:2;20292:9;20283:7;20279:23;20275:32;20272:52;;;20320:1;20317;20310:12;20272:52;20349:9;20343:16;20333:26;;20399:2;20388:9;20384:18;20378:25;20368:35;;20443:2;20432:9;20428:18;20422:25;20412:35;;20147:306;;;;;:::o;20458:125::-;20498:4;20526:1;20523;20520:8;20517:34;;;20531:18;;:::i;:::-;-1:-1:-1;20568:9:1;;20458:125::o;20588:980::-;20850:4;20898:3;20887:9;20883:19;20929:6;20918:9;20911:25;20955:2;20993:6;20988:2;20977:9;20973:18;20966:34;21036:3;21031:2;21020:9;21016:18;21009:31;21060:6;21095;21089:13;21126:6;21118;21111:22;21164:3;21153:9;21149:19;21142:26;;21203:2;21195:6;21191:15;21177:29;;21224:1;21234:195;21248:6;21245:1;21242:13;21234:195;;;21313:13;;-1:-1:-1;;;;;21309:39:1;21297:52;;21404:15;;;;21369:12;;;;21345:1;21263:9;21234:195;;;-1:-1:-1;;;;;;;21485:32:1;;;;21480:2;21465:18;;21458:60;-1:-1:-1;;;21549:3:1;21534:19;21527:35;21446:3;20588:980;-1:-1:-1;;;20588:980:1:o

Swarm Source

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