ETH Price: $3,466.78 (+0.76%)
Gas: 5 Gwei

Token

Shiller (SHILLA)
 

Overview

Max Total Supply

80,000,000 SHILLA

Holders

173

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
148,131.771949482 SHILLA

Value
$0.00
0x1F7208E63517810AD4E74d553ec0A627f58dF5C6
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:
Shiller

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-16
*/

// SPDX-License-Identifier: MIT
pragma solidity = 0.8.17;

/*
 SHILLER Token is here - Join the $SHILLA Army, with its brand new, first of its kind utility - SHILLING Competition on Twitter!
 The ShillerBot is LIVE and first shilling competition is starting on launch! The $SHILLA who shills on Twitter the most, wins the competition prize!
  Join us:
 
  Website: https://www.shiller.app
  Telegram: https://t.me/Shiller_portal
  Twitter: https://twitter.com/ShillerErc
 
 */


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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

}


interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}


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


abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }


    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }


    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// ERC20 Contract 

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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


    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    function name() external view virtual override returns (string memory) {
        return _name;
    }


    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }


    function decimals() public view virtual override returns (uint8) {
        return 9;
    }


    function totalSupply() external view virtual override returns (uint256) {
        return _totalSupply;
    }


    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }


    function transfer(address to, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }


    function approve(address spender, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }


    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }


    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }


    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }


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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }


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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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


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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}





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

    function WETH() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

contract Shiller is ERC20, Ownable {
    
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    // TOKENOMICS
    string private _name = "Shiller";
    string private _symbol = "SHILLA";
    uint8 private _decimals = 9;
    uint256 private _supply = 100000000;
    uint256 public maxTxAmount = 1000000 * 10**_decimals;
    uint256 public maxWalletAmount = 1000000 * 10**_decimals;
    bool public maxWalletEnabled = true;


    // ======================================
    // FEE

    uint256 public buyLiqFee;
    uint256 public buyMarketingFee;
    uint256 public buyContestFee;
    uint256 public buyTotalFee;


    uint256 public sellLiqFee;
    uint256 public sellMarketingFee;
    uint256 public sellContestFee;
    uint256 public sellTotalFee;
    
    
    address public marketingFeeAddress;
    address public contestFeeAddress; 

    //=======================================
    // EVENTS

    event updateBuyTax(uint256 buyLiqFee, uint256 buyMarketingFee, uint256 buyContestFee);
    event updateSellTax(uint256 sellLiqFee, uint256 sellMarketingFee, uint256 sellContestFee);
    event updateMaxTxAmount(uint256 maxTxAmount);
    event updateMaxWalletAmount(uint256 maxWalletAmount);
    event updateContestReceiver(address contestFeeReceiver); 
    event updateMarketingReceiver(address marketingFeeAddress);
    event TradingEnabled();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    //=======================================
    // MAPS
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;
    mapping(address => bool) public automatedMarketMakerPairs;

    //=======================================

    uint256 private _feeReserves = 0;
    uint256 private _tokensAmountToSellForLiq = 500000 * 10**_decimals;
    uint256 private _tokensAmountToSellForMarketing = 800000 * 10**_decimals;
    uint256 private _tokensAmountToSellForContest = 200000 * 10**_decimals;
    uint256 private swapTokensTrigger = 1200000 * 10**_decimals;
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 private deadblocks;
    uint256 public launchtimestamp; 
    uint256 public cooldowntimer = 30; //COOLDOWN TIMER
    bool public swapAndLiquifyEnabled = true;
    bool public inSwapAndLiquify = false;
    bool public limitsInEffect = true;
    bool public tradingEnabled = false;
    bool private swapping;
    bool public cooldoownEnabled = true;

    event SwapAndLiquify(
        uint256 tokenAmountSwapped, 
        uint256 ethAmountReceived, 
        uint256 tokenAmountToLiquidity);

    modifier lockSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }



    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10**_decimals));

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        buyMarketingFee = 8;
        buyLiqFee = 2;
        buyContestFee = 2;
        buyTotalFee = buyLiqFee + buyMarketingFee + buyContestFee;

        sellMarketingFee = 30;
        sellLiqFee = 2;
        sellContestFee = 3;
        sellTotalFee = sellLiqFee + sellMarketingFee + sellContestFee;


        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        uniswapV2Router = _uniswapV2Router;

        marketingFeeAddress = address(0x9169923f0882a74aefd97e40302da40b32236409);
        contestFeeAddress = address(0xa0E5867C0dfD99847Af3830007C48a994C112710);

        _isExcludedFromFees[address(uniswapV2Router)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[address(this)] = true;
    
        canTransferBeforeTradingIsEnabled[msg.sender] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }


    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        deadblocks = 3;
        emit TradingEnabled();
    }

    function changeMarketingReceiver(address newAddress) public onlyOwner {
        marketingFeeAddress = newAddress;
        emit updateMarketingReceiver(marketingFeeAddress);
    }    

    function changeContestReceiver(address newAddress) public onlyOwner {
        contestFeeAddress = newAddress;
        emit updateContestReceiver(contestFeeAddress);
    }

    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setSwapTriggerAmount(uint256 amountMarketingFee, uint256 amountLiqFee, uint256 amountContestFee) public onlyOwner {
        _tokensAmountToSellForMarketing = amountMarketingFee * (10**_decimals);
        _tokensAmountToSellForLiq = amountLiqFee * (10**_decimals);
        _tokensAmountToSellForContest = amountContestFee * (10**_decimals);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setBuyTax(uint256 _buyLiqFee, uint256 _buyMarketingFee, uint256 _buyContestFee) public onlyOwner {
        require((_buyLiqFee + _buyMarketingFee + _buyContestFee) <= 100, "ERC20: total tax must no be greater than 100");
        buyLiqFee = _buyLiqFee;
        buyMarketingFee = _buyMarketingFee;
        buyContestFee = _buyContestFee;
        buyTotalFee = buyLiqFee + buyMarketingFee + buyContestFee;
        emit updateBuyTax(buyLiqFee, buyMarketingFee, buyContestFee);
    }


    function setSellTax(uint256 _sellLiqFee, uint256 _sellMarketingFee, uint256 _sellContestFee) public onlyOwner {
        require((_sellLiqFee + _sellMarketingFee) <= 100, "ERC20: total tax must no be greater than 100");
        sellLiqFee = _sellLiqFee;
        sellMarketingFee = _sellMarketingFee;
        sellContestFee = _sellContestFee;
        sellTotalFee = sellLiqFee + sellMarketingFee + sellContestFee;
        emit updateSellTax(sellLiqFee, sellMarketingFee, sellContestFee);
    }

    function setMaxTxAmount(uint256 _maxTxAmount) public onlyOwner {
        maxTxAmount = _maxTxAmount;
        emit updateMaxTxAmount(maxTxAmount);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) public onlyOwner {
        maxWalletAmount = _maxWalletAmount;
        emit updateMaxWalletAmount(maxWalletAmount);
    }

    

    function _swapTokensForEth(uint256 tokenAmount) private lockSwap {
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = uniswapV2Router.WETH();

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

    uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
        tokenAmount,
        0,
        path,
        address(this),
        (block.timestamp + 300)
    );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private lockSwap {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }
    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 marketingFee;
        uint256 liqFee;
        uint256 contestFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }    

        if (to == deadAddress) {
            _burn(from, amount);
            return;
        }

        else if (!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(amount <= maxTxAmount, "Cannot exceed max transaction amount");

            bool isSelling = automatedMarketMakerPairs[to];
            bool isBuying = automatedMarketMakerPairs[from];
            uint256 transferAmount = amount;

            // If the transaction is a Sell
            if (isSelling) {
                
                // Get the fee's
                marketingFee = sellMarketingFee;
                liqFee = sellLiqFee;
                contestFee = sellContestFee;

                // Check reserves and balances
                uint256 contractTokenBalance = balanceOf(address(this));

                bool swapForLiq = (contractTokenBalance - _feeReserves) >= _tokensAmountToSellForLiq;
                bool swapForFees = _feeReserves > _tokensAmountToSellForMarketing + _tokensAmountToSellForContest;

                // get fee's
                if (swapForLiq || swapForFees) {
                    swapping = true;

                    if (swapAndLiquifyEnabled && swapForLiq) {
                        _swapAndLiquify(_tokensAmountToSellForLiq);
                    }

                    if (swapForFees) {
                        uint256 amountToSwap = _tokensAmountToSellForMarketing + _tokensAmountToSellForContest;
                        _swapTokensForEth(amountToSwap);
                        _feeReserves -= amountToSwap;
                        uint256 ethForContest = (address(this).balance * _tokensAmountToSellForContest) / amountToSwap;
                        uint256 ethForMarketing = address(this).balance - ethForContest;

                        bool sentcontest = payable(contestFeeAddress).send(ethForContest);
                        bool sentmarketing = payable(marketingFeeAddress).send(ethForMarketing);
                        require(sentcontest, "Failed to send ETH");
                        require(sentmarketing, "Failed to send ETH");

                    }
                    
                    swapping = false;
                }
            }

            // Else if transaction is a Buy
            else if (isBuying) {
                marketingFee = buyMarketingFee;
                liqFee = buyLiqFee;
                contestFee = buyContestFee;

                if (maxWalletEnabled) {
                    uint256 contractBalanceRecipient = balanceOf(to);
                    require(contractBalanceRecipient + amount <= maxWalletAmount, "Exceeds max wallet.");
                }

                if (limitsInEffect) { 
                    if (block.number < launchblock + deadblocks) {
                        uint256 botFee = 99 - (liqFee + contestFee);
                        marketingFee = botFee;
                    }
                }

            }

            // Divide the amount between receiving and fee share
            if (marketingFee > 0 && liqFee > 0 && contestFee > 0) {
                uint256 marketingContestFeeShare = ((amount * (marketingFee + contestFee)) / 100);
                uint256 liqFeeShare = ((amount * liqFee) / 100);
                uint256 feeShare = marketingContestFeeShare + liqFeeShare;
                transferAmount = amount - feeShare;
                _feeReserves += marketingContestFeeShare;
                super._transfer(from, address(this), feeShare);
            }

            super._transfer(from, to, transferAmount);
        }
        else {
            super._transfer(from, to, amount);
        }
    }



    // Swaps Tokens for Fee's
    function _swapAndLiquify(uint256 contractTokenBalance) private lockSwap {
        uint256 dividedBalance = (contractTokenBalance / 2);
        uint256 otherdividedBalance = (contractTokenBalance - dividedBalance);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(dividedBalance);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherdividedBalance, newBalance);

        emit SwapAndLiquify(dividedBalance, newBalance, otherdividedBalance);
    }
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmountSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountToLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyLiqFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyContestFee","type":"uint256"}],"name":"updateBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contestFeeReceiver","type":"address"}],"name":"updateContestReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingFeeAddress","type":"address"}],"name":"updateMarketingReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"updateMaxTxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellLiqFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellContestFee","type":"uint256"}],"name":"updateSellTax","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyContestFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeContestReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"changeMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contestFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldoownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellContestFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiqFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLiqFee","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyContestFee","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellLiqFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellContestFee","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMarketingFee","type":"uint256"},{"internalType":"uint256","name":"amountLiqFee","type":"uint256"},{"internalType":"uint256","name":"amountContestFee","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600781526020017f5368696c6c657200000000000000000000000000000000000000000000000000815250600690816200004a919062000e46565b506040518060400160405280600681526020017f5348494c4c4100000000000000000000000000000000000000000000000000008152506007908162000091919062000e46565b506009600860006101000a81548160ff021916908360ff1602179055506305f5e100600955600860009054906101000a900460ff16600a620000d49190620010bd565b620f4240620000e491906200110e565b600a55600860009054906101000a900460ff16600a620001059190620010bd565b620f42406200011591906200110e565b600b556001600c60006101000a81548160ff0219169083151502179055506000601a55600860009054906101000a900460ff16600a620001569190620010bd565b6207a1206200016691906200110e565b601b55600860009054906101000a900460ff16600a620001879190620010bd565b620c35006200019791906200110e565b601c55600860009054906101000a900460ff16600a620001b89190620010bd565b62030d40620001c891906200110e565b601d55600860009054906101000a900460ff16600a620001e99190620010bd565b62124f80620001f991906200110e565b601e55601e6022556001602360006101000a81548160ff0219169083151502179055506000602360016101000a81548160ff0219169083151502179055506001602360026101000a81548160ff0219169083151502179055506000602360036101000a81548160ff0219169083151502179055506001602360056101000a81548160ff0219169083151502179055503480156200029557600080fd5b5060068054620002a59062000c35565b80601f0160208091040260200160405190810160405280929190818152602001828054620002d39062000c35565b8015620003245780601f10620002f85761010080835404028352916020019162000324565b820191906000526020600020905b8154815290600101906020018083116200030657829003601f168201915b505050505060078054620003389062000c35565b80601f0160208091040260200160405190810160405280929190818152602001828054620003669062000c35565b8015620003b75780601f106200038b57610100808354040283529160200191620003b7565b820191906000526020600020905b8154815290600101906020018083116200039957829003601f168201915b50505050508160039081620003cd919062000e46565b508060049081620003df919062000e46565b50505062000402620003f66200092360201b60201c565b6200092b60201b60201c565b6200044033600860009054906101000a900460ff16600a620004259190620010bd565b6009546200043491906200110e565b620009f160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cb9190620011c3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000533573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005599190620011c3565b6040518363ffffffff1660e01b81526004016200057892919062001206565b6020604051808303816000875af115801562000598573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005be9190620011c3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506008600e819055506002600d819055506002600f81905550600f54600e54600d546200061e919062001233565b6200062a919062001233565b601081905550601e601281905550600260118190555060036013819055506013546012546011546200065d919062001233565b62000669919062001233565b6014819055506200068460a051600162000b3660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050739169923f0882a74aefd97e40302da40b32236409601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0e5867c0dfd99847af3830007c48a994c112710601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016017600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062001369565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5a90620012cf565b60405180910390fd5b806002600082825462000a77919062001233565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b2a919062001302565b60405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab828260405162000bc09291906200133c565b60405180910390a15050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c4e57607f821691505b60208210810362000c645762000c6362000c06565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c8f565b62000cda868362000c8f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d2762000d2162000d1b8462000cf2565b62000cfc565b62000cf2565b9050919050565b6000819050919050565b62000d438362000d06565b62000d5b62000d528262000d2e565b84845462000c9c565b825550505050565b600090565b62000d7262000d63565b62000d7f81848462000d38565b505050565b5b8181101562000da75762000d9b60008262000d68565b60018101905062000d85565b5050565b601f82111562000df65762000dc08162000c6a565b62000dcb8462000c7f565b8101602085101562000ddb578190505b62000df362000dea8562000c7f565b83018262000d84565b50505b505050565b600082821c905092915050565b600062000e1b6000198460080262000dfb565b1980831691505092915050565b600062000e36838362000e08565b9150826002028217905092915050565b62000e518262000bcc565b67ffffffffffffffff81111562000e6d5762000e6c62000bd7565b5b62000e79825462000c35565b62000e8682828562000dab565b600060209050601f83116001811462000ebe576000841562000ea9578287015190505b62000eb5858262000e28565b86555062000f25565b601f19841662000ece8662000c6a565b60005b8281101562000ef85784890151825560018201915060208501945060208101905062000ed1565b8683101562000f18578489015162000f14601f89168262000e08565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000fbb5780860481111562000f935762000f9262000f2d565b5b600185161562000fa35780820291505b808102905062000fb38562000f5c565b945062000f73565b94509492505050565b60008262000fd65760019050620010a9565b8162000fe65760009050620010a9565b816001811462000fff57600281146200100a5762001040565b6001915050620010a9565b60ff8411156200101f576200101e62000f2d565b5b8360020a91508482111562001039576200103862000f2d565b5b50620010a9565b5060208310610133831016604e8410600b84101617156200107a5782820a90508381111562001074576200107362000f2d565b5b620010a9565b62001089848484600162000f69565b92509050818404811115620010a357620010a262000f2d565b5b81810290505b9392505050565b600060ff82169050919050565b6000620010ca8262000cf2565b9150620010d783620010b0565b9250620011067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fc4565b905092915050565b60006200111b8262000cf2565b9150620011288362000cf2565b9250828202620011388162000cf2565b9150828204841483151762001152576200115162000f2d565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200118b826200115e565b9050919050565b6200119d816200117e565b8114620011a957600080fd5b50565b600081519050620011bd8162001192565b92915050565b600060208284031215620011dc57620011db62001159565b5b6000620011ec84828501620011ac565b91505092915050565b62001200816200117e565b82525050565b60006040820190506200121d6000830185620011f5565b6200122c6020830184620011f5565b9392505050565b6000620012408262000cf2565b91506200124d8362000cf2565b925082820190508082111562001268576200126762000f2d565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012b7601f836200126e565b9150620012c4826200127f565b602082019050919050565b60006020820190508181036000830152620012ea81620012a8565b9050919050565b620012fc8162000cf2565b82525050565b6000602082019050620013196000830184620012f1565b92915050565b60008115159050919050565b62001336816200131f565b82525050565b6000604082019050620013536000830185620011f5565b6200136260208301846200132b565b9392505050565b60805160a051613efc620013b26000396000610f17015260008181610d24015281816125c3015281816126a4015281816126cb01528181612a0a0152612a310152613efc6000f3fe6080604052600436106102cc5760003560e01c806370a08231116101755780639a7a23d6116100dc578063b62496f511610095578063d045a3291161006f578063d045a32914610ad6578063dd62ed3e14610b01578063ec28438a14610b3e578063f2fde38b14610b67576102d3565b8063b62496f514610a43578063b6cf8ce614610a80578063c1aea0c314610aab576102d3565b80639a7a23d61461091f578063a1a93ae614610948578063a457c2d714610973578063a9059cbb146109b0578063aa4bde28146109ed578063b494298814610a18576102d3565b80638c0b5e221161012e5780638c0b5e221461081f5780638c3c82b21461084a5780638da5cb5b146108755780638f2076fd146108a057806392136913146108c957806395d89b41146108f4576102d3565b806370a0823114610735578063715018a6146107725780637290b982146107895780637bce5a04146107b45780638a8c523c146107df5780638aeb549d146107f6576102d3565b806327c8f835116102345780634a62bb65116101ed5780635b2a3611116101c75780635b2a36111461068f5780635dfb6bdb146106ba578063679ca6e9146106e35780636c83a3481461070c576102d3565b80634a62bb651461060e5780634a74bb02146106395780634ada218b14610664576102d3565b806327c8f835146104fa57806329979e3914610525578063313ce567146105505780633705b3921461057b57806339509351146105a657806349bd5a5e146105e3576102d3565b806318160ddd1161028657806318160ddd146103ea5780631d7b1fb41461041557806321ce72e514610440578063220f66961461046957806323b872dd1461049457806327a14fc2146104d1576102d3565b8062afb325146102d8578063053e39a31461030357806306fdde031461032e57806308dfe8a514610359578063095ea7b3146103825780631694505e146103bf576102d3565b366102d357005b600080fd5b3480156102e457600080fd5b506102ed610b90565b6040516102fa9190612b19565b60405180910390f35b34801561030f57600080fd5b50610318610b96565b6040516103259190612b75565b60405180910390f35b34801561033a57600080fd5b50610343610bbc565b6040516103509190612c20565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190612cab565b610c4e565b005b34801561038e57600080fd5b506103a960048036038101906103a49190612d17565b610cff565b6040516103b69190612d66565b60405180910390f35b3480156103cb57600080fd5b506103d4610d22565b6040516103e19190612de0565b60405180910390f35b3480156103f657600080fd5b506103ff610d46565b60405161040c9190612b19565b60405180910390f35b34801561042157600080fd5b5061042a610d50565b6040516104379190612b19565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190612dfb565b610d56565b005b34801561047557600080fd5b5061047e610e36565b60405161048b9190612d66565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190612e4e565b610e49565b6040516104c89190612d66565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190612ea1565b610e78565b005b34801561050657600080fd5b5061050f610ec3565b60405161051c9190612b75565b60405180910390f35b34801561053157600080fd5b5061053a610ec9565b6040516105479190612b19565b60405180910390f35b34801561055c57600080fd5b50610565610ecf565b6040516105729190612eea565b60405180910390f35b34801561058757600080fd5b50610590610ed8565b60405161059d9190612b19565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190612d17565b610ede565b6040516105da9190612d66565b60405180910390f35b3480156105ef57600080fd5b506105f8610f15565b6040516106059190612b75565b60405180910390f35b34801561061a57600080fd5b50610623610f39565b6040516106309190612d66565b60405180910390f35b34801561064557600080fd5b5061064e610f4c565b60405161065b9190612d66565b60405180910390f35b34801561067057600080fd5b50610679610f5f565b6040516106869190612d66565b60405180910390f35b34801561069b57600080fd5b506106a4610f72565b6040516106b19190612d66565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190612f05565b610f85565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190612f32565b61102a565b005b34801561071857600080fd5b50610733600480360381019061072e9190612f05565b61104f565b005b34801561074157600080fd5b5061075c60048036038101906107579190612f05565b6110f4565b6040516107699190612b19565b60405180910390f35b34801561077e57600080fd5b5061078761113c565b005b34801561079557600080fd5b5061079e611150565b6040516107ab9190612b19565b60405180910390f35b3480156107c057600080fd5b506107c9611156565b6040516107d69190612b19565b60405180910390f35b3480156107eb57600080fd5b506107f461115c565b005b34801561080257600080fd5b5061081d60048036038101906108189190612dfb565b6111dd565b005b34801561082b57600080fd5b50610834611271565b6040516108419190612b19565b60405180910390f35b34801561085657600080fd5b5061085f611277565b60405161086c9190612b19565b60405180910390f35b34801561088157600080fd5b5061088a61127d565b6040516108979190612b75565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190612dfb565b6112a7565b005b3480156108d557600080fd5b506108de61137c565b6040516108eb9190612b19565b60405180910390f35b34801561090057600080fd5b50610909611382565b6040516109169190612c20565b60405180910390f35b34801561092b57600080fd5b5061094660048036038101906109419190612cab565b611414565b005b34801561095457600080fd5b5061095d61142a565b60405161096a9190612b75565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190612d17565b611450565b6040516109a79190612d66565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d29190612d17565b6114c7565b6040516109e49190612d66565b60405180910390f35b3480156109f957600080fd5b50610a026114ea565b604051610a0f9190612b19565b60405180910390f35b348015610a2457600080fd5b50610a2d6114f0565b604051610a3a9190612b19565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190612f05565b6114f6565b604051610a779190612d66565b60405180910390f35b348015610a8c57600080fd5b50610a95611516565b604051610aa29190612b19565b60405180910390f35b348015610ab757600080fd5b50610ac061151c565b604051610acd9190612b19565b60405180910390f35b348015610ae257600080fd5b50610aeb611522565b604051610af89190612d66565b60405180910390f35b348015610b0d57600080fd5b50610b286004803603810190610b239190612f5f565b611535565b604051610b359190612b19565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190612ea1565b6115bc565b005b348015610b7357600080fd5b50610b8e6004803603810190610b899190612f05565b611607565b005b60145481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610bcb90612fce565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf790612fce565b8015610c445780601f10610c1957610100808354040283529160200191610c44565b820191906000526020600020905b815481529060010190602001808311610c2757829003601f168201915b5050505050905090565b610c5661168a565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610cf39190612d66565b60405180910390a25050565b600080610d0a611708565b9050610d17818585611710565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60225481565b610d5e61168a565b6064818385610d6d919061302e565b610d77919061302e565b1115610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf906130d4565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d54610de0919061302e565b610dea919061302e565b6010819055507fa0a485ca69c70f2ca7a93ab8656967a59e6e5852ff4c40993ab28c9ae206b228600d54600e54600f54604051610e29939291906130f4565b60405180910390a1505050565b602360019054906101000a900460ff1681565b600080610e54611708565b9050610e618582856118d9565b610e6c858585611965565b60019150509392505050565b610e8061168a565b80600b819055507fc18bc195ff0bbcd02b0409e9e2dda65c6fc97ad832399b82d372f296c70859e9600b54604051610eb89190612b19565b60405180910390a150565b61dead81565b60135481565b60006009905090565b60105481565b600080610ee9611708565b9050610f0a818585610efb8589611535565b610f05919061302e565b611710565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b602360029054906101000a900460ff1681565b602360009054906101000a900460ff1681565b602360039054906101000a900460ff1681565b602360059054906101000a900460ff1681565b610f8d61168a565b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3d6362d6814eb3715292fc4e8dfc3de41d3aa6796bc8dbf4828314f45fe8080a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161101f9190612b75565b60405180910390a150565b61103261168a565b80602360026101000a81548160ff02191690831515021790555050565b61105761168a565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f511309327894c8b5addbc2298af27ccf9245dc64900f0ccbe7633e88c994752b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516110e99190612b75565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61114461168a565b61114e6000612139565b565b600f5481565b600e5481565b61116461168a565b602360039054906101000a900460ff161561117e57600080fd5b6001602360036101000a81548160ff02191690831515021790555043601f819055504260218190555060036020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b6111e561168a565b600860009054906101000a900460ff16600a611201919061325e565b8361120c91906132a9565b601c81905550600860009054906101000a900460ff16600a61122e919061325e565b8261123991906132a9565b601b81905550600860009054906101000a900460ff16600a61125b919061325e565b8161126691906132a9565b601d81905550505050565b600a5481565b60215481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112af61168a565b606482846112bd919061302e565b11156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f5906130d4565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611326919061302e565b611330919061302e565b6014819055507f05f93650012c94ea63be12f3795f78013f5f551953d34bc0cfcd7a78672e36e360115460125460135460405161136f939291906130f4565b60405180910390a1505050565b60125481565b60606004805461139190612fce565b80601f01602080910402602001604051908101604052809291908181526020018280546113bd90612fce565b801561140a5780601f106113df5761010080835404028352916020019161140a565b820191906000526020600020905b8154815290600101906020018083116113ed57829003601f168201915b5050505050905090565b61141c61168a565b61142682826121ff565b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061145b611708565b905060006114698286611535565b9050838110156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a59061335d565b60405180910390fd5b6114bb8286868403611710565b60019250505092915050565b6000806114d2611708565b90506114df818585611965565b600191505092915050565b600b5481565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b60115481565b600d5481565b600c60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115c461168a565b80600a819055507f6256d1815d8ca7e753978cd124d35acd5490fa614262561f1d32bc2bf5db35e8600a546040516115fc9190612b19565b60405180910390a150565b61160f61168a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361167e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611675906133ef565b60405180910390fd5b61168781612139565b50565b611692611708565b73ffffffffffffffffffffffffffffffffffffffff166116b061127d565b73ffffffffffffffffffffffffffffffffffffffff1614611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd9061345b565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361177f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611776906134ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e59061357f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118cc9190612b19565b60405180910390a3505050565b60006118e58484611535565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461195f5781811015611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948906135eb565b60405180910390fd5b61195e8484848403611710565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb9061367d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a9061370f565b60405180910390fd5b60008111611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906137a1565b60405180910390fd5b6000806000601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b2c57602360039054906101000a900460ff16611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b229061380d565b60405180910390fd5b5b61dead73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611b7357611b6b8685612293565b505050612134565b602360049054906101000a900460ff16158015611bda5750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c305750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561212457600a54841115611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c719061389f565b60405180910390fd5b6000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008690508215611f8e576012549550601154945060135493506000611d41306110f4565b90506000601b54601a5483611d5691906138bf565b101590506000601d54601c54611d6c919061302e565b601a541190508180611d7b5750805b15611f86576001602360046101000a81548160ff021916908315150217905550602360009054906101000a900460ff168015611db45750815b15611dc557611dc4601b54612448565b5b8015611f6a576000601d54601c54611ddd919061302e565b9050611de881612509565b80601a6000828254611dfa91906138bf565b92505081905550600081601d5447611e1291906132a9565b611e1c9190613922565b905060008147611e2c91906138bf565b90506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505090506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050905081611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b9061399f565b60405180910390fd5b80611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b9061399f565b60405180910390fd5b50505050505b6000602360046101000a81548160ff0219169083151502179055505b505050612067565b811561206657600e549550600d549450600f549350600c60009054906101000a900460ff1615612017576000611fc3896110f4565b9050600b548882611fd4919061302e565b1115612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90613a0b565b60405180910390fd5b505b602360029054906101000a900460ff161561206557602054601f5461203c919061302e565b4310156120645760008486612051919061302e565b606361205d91906138bf565b9050809650505b5b5b5b6000861180156120775750600085115b80156120835750600084115b1561211157600060648588612098919061302e565b896120a391906132a9565b6120ad9190613922565b905060006064878a6120bf91906132a9565b6120c99190613922565b9050600081836120d9919061302e565b9050808a6120e791906138bf565b935082601a60008282546120fb919061302e565b9250508190555061210d8c3083612789565b5050505b61211c898983612789565b505050612130565b61212f868686612789565b5b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab8282604051612287929190613a2b565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990613ac6565b60405180910390fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90613b58565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161243b9190612b19565b60405180910390a3505050565b6001602360016101000a81548160ff02191690831515021790555060006002826124729190613922565b90506000818361248291906138bf565b9050600047905061249283612509565b600081476124a091906138bf565b90506124ac83826129e9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516124df939291906130f4565b60405180910390a1505050506000602360016101000a81548160ff02191690831515021790555050565b6001602360016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561254157612540613b78565b5b60405190808252806020026020018201604052801561256f5781602001602082028036833780820191505090505b509050308160008151811061258757612586613ba7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126509190613beb565b8160018151811061266457612663613ba7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506126c9307f000000000000000000000000000000000000000000000000000000000000000084611710565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42612718919061302e565b6040518663ffffffff1660e01b8152600401612738959493929190613d11565b600060405180830381600087803b15801561275257600080fd5b505af1158015612766573d6000803e3d6000fd5b50505050506000602360016101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef9061367d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285e9061370f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e490613ddd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129db9190612b19565b60405180910390a350505050565b6001602360016101000a81548160ff021916908315150217905550612a2f307f000000000000000000000000000000000000000000000000000000000000000084611710565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612a7961127d565b426040518863ffffffff1660e01b8152600401612a9b96959493929190613dfd565b60606040518083038185885af1158015612ab9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ade9190613e73565b5050506000602360016101000a81548160ff0219169083151502179055505050565b6000819050919050565b612b1381612b00565b82525050565b6000602082019050612b2e6000830184612b0a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b5f82612b34565b9050919050565b612b6f81612b54565b82525050565b6000602082019050612b8a6000830184612b66565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bca578082015181840152602081019050612baf565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bf282612b90565b612bfc8185612b9b565b9350612c0c818560208601612bac565b612c1581612bd6565b840191505092915050565b60006020820190508181036000830152612c3a8184612be7565b905092915050565b600080fd5b612c5081612b54565b8114612c5b57600080fd5b50565b600081359050612c6d81612c47565b92915050565b60008115159050919050565b612c8881612c73565b8114612c9357600080fd5b50565b600081359050612ca581612c7f565b92915050565b60008060408385031215612cc257612cc1612c42565b5b6000612cd085828601612c5e565b9250506020612ce185828601612c96565b9150509250929050565b612cf481612b00565b8114612cff57600080fd5b50565b600081359050612d1181612ceb565b92915050565b60008060408385031215612d2e57612d2d612c42565b5b6000612d3c85828601612c5e565b9250506020612d4d85828601612d02565b9150509250929050565b612d6081612c73565b82525050565b6000602082019050612d7b6000830184612d57565b92915050565b6000819050919050565b6000612da6612da1612d9c84612b34565b612d81565b612b34565b9050919050565b6000612db882612d8b565b9050919050565b6000612dca82612dad565b9050919050565b612dda81612dbf565b82525050565b6000602082019050612df56000830184612dd1565b92915050565b600080600060608486031215612e1457612e13612c42565b5b6000612e2286828701612d02565b9350506020612e3386828701612d02565b9250506040612e4486828701612d02565b9150509250925092565b600080600060608486031215612e6757612e66612c42565b5b6000612e7586828701612c5e565b9350506020612e8686828701612c5e565b9250506040612e9786828701612d02565b9150509250925092565b600060208284031215612eb757612eb6612c42565b5b6000612ec584828501612d02565b91505092915050565b600060ff82169050919050565b612ee481612ece565b82525050565b6000602082019050612eff6000830184612edb565b92915050565b600060208284031215612f1b57612f1a612c42565b5b6000612f2984828501612c5e565b91505092915050565b600060208284031215612f4857612f47612c42565b5b6000612f5684828501612c96565b91505092915050565b60008060408385031215612f7657612f75612c42565b5b6000612f8485828601612c5e565b9250506020612f9585828601612c5e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fe657607f821691505b602082108103612ff957612ff8612f9f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061303982612b00565b915061304483612b00565b925082820190508082111561305c5761305b612fff565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f206265206772656160008201527f746572207468616e203130300000000000000000000000000000000000000000602082015250565b60006130be602c83612b9b565b91506130c982613062565b604082019050919050565b600060208201905081810360008301526130ed816130b1565b9050919050565b60006060820190506131096000830186612b0a565b6131166020830185612b0a565b6131236040830184612b0a565b949350505050565b60008160011c9050919050565b6000808291508390505b60018511156131825780860481111561315e5761315d612fff565b5b600185161561316d5780820291505b808102905061317b8561312b565b9450613142565b94509492505050565b60008261319b5760019050613257565b816131a95760009050613257565b81600181146131bf57600281146131c9576131f8565b6001915050613257565b60ff8411156131db576131da612fff565b5b8360020a9150848211156131f2576131f1612fff565b5b50613257565b5060208310610133831016604e8410600b841016171561322d5782820a90508381111561322857613227612fff565b5b613257565b61323a8484846001613138565b9250905081840481111561325157613250612fff565b5b81810290505b9392505050565b600061326982612b00565b915061327483612ece565b92506132a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461318b565b905092915050565b60006132b482612b00565b91506132bf83612b00565b92508282026132cd81612b00565b915082820484148315176132e4576132e3612fff565b5b5092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613347602583612b9b565b9150613352826132eb565b604082019050919050565b600060208201905081810360008301526133768161333a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133d9602683612b9b565b91506133e48261337d565b604082019050919050565b60006020820190508181036000830152613408816133cc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613445602083612b9b565b91506134508261340f565b602082019050919050565b6000602082019050818103600083015261347481613438565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134d7602483612b9b565b91506134e28261347b565b604082019050919050565b60006020820190508181036000830152613506816134ca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613569602283612b9b565b91506135748261350d565b604082019050919050565b600060208201905081810360008301526135988161355c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006135d5601d83612b9b565b91506135e08261359f565b602082019050919050565b60006020820190508181036000830152613604816135c8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613667602583612b9b565b91506136728261360b565b604082019050919050565b600060208201905081810360008301526136968161365a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006136f9602383612b9b565b91506137048261369d565b604082019050919050565b60006020820190508181036000830152613728816136ec565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061378b602983612b9b565b91506137968261372f565b604082019050919050565b600060208201905081810360008301526137ba8161377e565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b60006137f7602083612b9b565b9150613802826137c1565b602082019050919050565b60006020820190508181036000830152613826816137ea565b9050919050565b7f43616e6e6f7420657863656564206d6178207472616e73616374696f6e20616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613889602483612b9b565b91506138948261382d565b604082019050919050565b600060208201905081810360008301526138b88161387c565b9050919050565b60006138ca82612b00565b91506138d583612b00565b92508282039050818111156138ed576138ec612fff565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061392d82612b00565b915061393883612b00565b925082613948576139476138f3565b5b828204905092915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b6000613989601283612b9b565b915061399482613953565b602082019050919050565b600060208201905081810360008301526139b88161397c565b9050919050565b7f45786365656473206d61782077616c6c65742e00000000000000000000000000600082015250565b60006139f5601383612b9b565b9150613a00826139bf565b602082019050919050565b60006020820190508181036000830152613a24816139e8565b9050919050565b6000604082019050613a406000830185612b66565b613a4d6020830184612d57565b9392505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ab0602183612b9b565b9150613abb82613a54565b604082019050919050565b60006020820190508181036000830152613adf81613aa3565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b42602283612b9b565b9150613b4d82613ae6565b604082019050919050565b60006020820190508181036000830152613b7181613b35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613be581612c47565b92915050565b600060208284031215613c0157613c00612c42565b5b6000613c0f84828501613bd6565b91505092915050565b6000819050919050565b6000613c3d613c38613c3384613c18565b612d81565b612b00565b9050919050565b613c4d81613c22565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c8881612b54565b82525050565b6000613c9a8383613c7f565b60208301905092915050565b6000602082019050919050565b6000613cbe82613c53565b613cc88185613c5e565b9350613cd383613c6f565b8060005b83811015613d04578151613ceb8882613c8e565b9750613cf683613ca6565b925050600181019050613cd7565b5085935050505092915050565b600060a082019050613d266000830188612b0a565b613d336020830187613c44565b8181036040830152613d458186613cb3565b9050613d546060830185612b66565b613d616080830184612b0a565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613dc7602683612b9b565b9150613dd282613d6b565b604082019050919050565b60006020820190508181036000830152613df681613dba565b9050919050565b600060c082019050613e126000830189612b66565b613e1f6020830188612b0a565b613e2c6040830187613c44565b613e396060830186613c44565b613e466080830185612b66565b613e5360a0830184612b0a565b979650505050505050565b600081519050613e6d81612ceb565b92915050565b600080600060608486031215613e8c57613e8b612c42565b5b6000613e9a86828701613e5e565b9350506020613eab86828701613e5e565b9250506040613ebc86828701613e5e565b915050925092509256fea2646970667358221220dd0a951d4ce1a27367d11fa9eeec9183def24bff8de70bbe666a868e8d1b134864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102cc5760003560e01c806370a08231116101755780639a7a23d6116100dc578063b62496f511610095578063d045a3291161006f578063d045a32914610ad6578063dd62ed3e14610b01578063ec28438a14610b3e578063f2fde38b14610b67576102d3565b8063b62496f514610a43578063b6cf8ce614610a80578063c1aea0c314610aab576102d3565b80639a7a23d61461091f578063a1a93ae614610948578063a457c2d714610973578063a9059cbb146109b0578063aa4bde28146109ed578063b494298814610a18576102d3565b80638c0b5e221161012e5780638c0b5e221461081f5780638c3c82b21461084a5780638da5cb5b146108755780638f2076fd146108a057806392136913146108c957806395d89b41146108f4576102d3565b806370a0823114610735578063715018a6146107725780637290b982146107895780637bce5a04146107b45780638a8c523c146107df5780638aeb549d146107f6576102d3565b806327c8f835116102345780634a62bb65116101ed5780635b2a3611116101c75780635b2a36111461068f5780635dfb6bdb146106ba578063679ca6e9146106e35780636c83a3481461070c576102d3565b80634a62bb651461060e5780634a74bb02146106395780634ada218b14610664576102d3565b806327c8f835146104fa57806329979e3914610525578063313ce567146105505780633705b3921461057b57806339509351146105a657806349bd5a5e146105e3576102d3565b806318160ddd1161028657806318160ddd146103ea5780631d7b1fb41461041557806321ce72e514610440578063220f66961461046957806323b872dd1461049457806327a14fc2146104d1576102d3565b8062afb325146102d8578063053e39a31461030357806306fdde031461032e57806308dfe8a514610359578063095ea7b3146103825780631694505e146103bf576102d3565b366102d357005b600080fd5b3480156102e457600080fd5b506102ed610b90565b6040516102fa9190612b19565b60405180910390f35b34801561030f57600080fd5b50610318610b96565b6040516103259190612b75565b60405180910390f35b34801561033a57600080fd5b50610343610bbc565b6040516103509190612c20565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190612cab565b610c4e565b005b34801561038e57600080fd5b506103a960048036038101906103a49190612d17565b610cff565b6040516103b69190612d66565b60405180910390f35b3480156103cb57600080fd5b506103d4610d22565b6040516103e19190612de0565b60405180910390f35b3480156103f657600080fd5b506103ff610d46565b60405161040c9190612b19565b60405180910390f35b34801561042157600080fd5b5061042a610d50565b6040516104379190612b19565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190612dfb565b610d56565b005b34801561047557600080fd5b5061047e610e36565b60405161048b9190612d66565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190612e4e565b610e49565b6040516104c89190612d66565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f39190612ea1565b610e78565b005b34801561050657600080fd5b5061050f610ec3565b60405161051c9190612b75565b60405180910390f35b34801561053157600080fd5b5061053a610ec9565b6040516105479190612b19565b60405180910390f35b34801561055c57600080fd5b50610565610ecf565b6040516105729190612eea565b60405180910390f35b34801561058757600080fd5b50610590610ed8565b60405161059d9190612b19565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c89190612d17565b610ede565b6040516105da9190612d66565b60405180910390f35b3480156105ef57600080fd5b506105f8610f15565b6040516106059190612b75565b60405180910390f35b34801561061a57600080fd5b50610623610f39565b6040516106309190612d66565b60405180910390f35b34801561064557600080fd5b5061064e610f4c565b60405161065b9190612d66565b60405180910390f35b34801561067057600080fd5b50610679610f5f565b6040516106869190612d66565b60405180910390f35b34801561069b57600080fd5b506106a4610f72565b6040516106b19190612d66565b60405180910390f35b3480156106c657600080fd5b506106e160048036038101906106dc9190612f05565b610f85565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190612f32565b61102a565b005b34801561071857600080fd5b50610733600480360381019061072e9190612f05565b61104f565b005b34801561074157600080fd5b5061075c60048036038101906107579190612f05565b6110f4565b6040516107699190612b19565b60405180910390f35b34801561077e57600080fd5b5061078761113c565b005b34801561079557600080fd5b5061079e611150565b6040516107ab9190612b19565b60405180910390f35b3480156107c057600080fd5b506107c9611156565b6040516107d69190612b19565b60405180910390f35b3480156107eb57600080fd5b506107f461115c565b005b34801561080257600080fd5b5061081d60048036038101906108189190612dfb565b6111dd565b005b34801561082b57600080fd5b50610834611271565b6040516108419190612b19565b60405180910390f35b34801561085657600080fd5b5061085f611277565b60405161086c9190612b19565b60405180910390f35b34801561088157600080fd5b5061088a61127d565b6040516108979190612b75565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190612dfb565b6112a7565b005b3480156108d557600080fd5b506108de61137c565b6040516108eb9190612b19565b60405180910390f35b34801561090057600080fd5b50610909611382565b6040516109169190612c20565b60405180910390f35b34801561092b57600080fd5b5061094660048036038101906109419190612cab565b611414565b005b34801561095457600080fd5b5061095d61142a565b60405161096a9190612b75565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190612d17565b611450565b6040516109a79190612d66565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d29190612d17565b6114c7565b6040516109e49190612d66565b60405180910390f35b3480156109f957600080fd5b50610a026114ea565b604051610a0f9190612b19565b60405180910390f35b348015610a2457600080fd5b50610a2d6114f0565b604051610a3a9190612b19565b60405180910390f35b348015610a4f57600080fd5b50610a6a6004803603810190610a659190612f05565b6114f6565b604051610a779190612d66565b60405180910390f35b348015610a8c57600080fd5b50610a95611516565b604051610aa29190612b19565b60405180910390f35b348015610ab757600080fd5b50610ac061151c565b604051610acd9190612b19565b60405180910390f35b348015610ae257600080fd5b50610aeb611522565b604051610af89190612d66565b60405180910390f35b348015610b0d57600080fd5b50610b286004803603810190610b239190612f5f565b611535565b604051610b359190612b19565b60405180910390f35b348015610b4a57600080fd5b50610b656004803603810190610b609190612ea1565b6115bc565b005b348015610b7357600080fd5b50610b8e6004803603810190610b899190612f05565b611607565b005b60145481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610bcb90612fce565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf790612fce565b8015610c445780601f10610c1957610100808354040283529160200191610c44565b820191906000526020600020905b815481529060010190602001808311610c2757829003601f168201915b5050505050905090565b610c5661168a565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610cf39190612d66565b60405180910390a25050565b600080610d0a611708565b9050610d17818585611710565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60225481565b610d5e61168a565b6064818385610d6d919061302e565b610d77919061302e565b1115610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf906130d4565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d54610de0919061302e565b610dea919061302e565b6010819055507fa0a485ca69c70f2ca7a93ab8656967a59e6e5852ff4c40993ab28c9ae206b228600d54600e54600f54604051610e29939291906130f4565b60405180910390a1505050565b602360019054906101000a900460ff1681565b600080610e54611708565b9050610e618582856118d9565b610e6c858585611965565b60019150509392505050565b610e8061168a565b80600b819055507fc18bc195ff0bbcd02b0409e9e2dda65c6fc97ad832399b82d372f296c70859e9600b54604051610eb89190612b19565b60405180910390a150565b61dead81565b60135481565b60006009905090565b60105481565b600080610ee9611708565b9050610f0a818585610efb8589611535565b610f05919061302e565b611710565b600191505092915050565b7f000000000000000000000000728386d2b77eadc1a1d71db9b922f47eb9aa520781565b602360029054906101000a900460ff1681565b602360009054906101000a900460ff1681565b602360039054906101000a900460ff1681565b602360059054906101000a900460ff1681565b610f8d61168a565b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3d6362d6814eb3715292fc4e8dfc3de41d3aa6796bc8dbf4828314f45fe8080a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161101f9190612b75565b60405180910390a150565b61103261168a565b80602360026101000a81548160ff02191690831515021790555050565b61105761168a565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f511309327894c8b5addbc2298af27ccf9245dc64900f0ccbe7633e88c994752b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516110e99190612b75565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61114461168a565b61114e6000612139565b565b600f5481565b600e5481565b61116461168a565b602360039054906101000a900460ff161561117e57600080fd5b6001602360036101000a81548160ff02191690831515021790555043601f819055504260218190555060036020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b6111e561168a565b600860009054906101000a900460ff16600a611201919061325e565b8361120c91906132a9565b601c81905550600860009054906101000a900460ff16600a61122e919061325e565b8261123991906132a9565b601b81905550600860009054906101000a900460ff16600a61125b919061325e565b8161126691906132a9565b601d81905550505050565b600a5481565b60215481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112af61168a565b606482846112bd919061302e565b11156112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f5906130d4565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611326919061302e565b611330919061302e565b6014819055507f05f93650012c94ea63be12f3795f78013f5f551953d34bc0cfcd7a78672e36e360115460125460135460405161136f939291906130f4565b60405180910390a1505050565b60125481565b60606004805461139190612fce565b80601f01602080910402602001604051908101604052809291908181526020018280546113bd90612fce565b801561140a5780601f106113df5761010080835404028352916020019161140a565b820191906000526020600020905b8154815290600101906020018083116113ed57829003601f168201915b5050505050905090565b61141c61168a565b61142682826121ff565b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008061145b611708565b905060006114698286611535565b9050838110156114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a59061335d565b60405180910390fd5b6114bb8286868403611710565b60019250505092915050565b6000806114d2611708565b90506114df818585611965565b600191505092915050565b600b5481565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b60115481565b600d5481565b600c60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115c461168a565b80600a819055507f6256d1815d8ca7e753978cd124d35acd5490fa614262561f1d32bc2bf5db35e8600a546040516115fc9190612b19565b60405180910390a150565b61160f61168a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361167e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611675906133ef565b60405180910390fd5b61168781612139565b50565b611692611708565b73ffffffffffffffffffffffffffffffffffffffff166116b061127d565b73ffffffffffffffffffffffffffffffffffffffff1614611706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fd9061345b565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361177f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611776906134ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e59061357f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118cc9190612b19565b60405180910390a3505050565b60006118e58484611535565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461195f5781811015611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948906135eb565b60405180910390fd5b61195e8484848403611710565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb9061367d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a9061370f565b60405180910390fd5b60008111611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d906137a1565b60405180910390fd5b6000806000601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b2c57602360039054906101000a900460ff16611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b229061380d565b60405180910390fd5b5b61dead73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611b7357611b6b8685612293565b505050612134565b602360049054906101000a900460ff16158015611bda5750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611c305750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561212457600a54841115611c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c719061389f565b60405180910390fd5b6000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008690508215611f8e576012549550601154945060135493506000611d41306110f4565b90506000601b54601a5483611d5691906138bf565b101590506000601d54601c54611d6c919061302e565b601a541190508180611d7b5750805b15611f86576001602360046101000a81548160ff021916908315150217905550602360009054906101000a900460ff168015611db45750815b15611dc557611dc4601b54612448565b5b8015611f6a576000601d54601c54611ddd919061302e565b9050611de881612509565b80601a6000828254611dfa91906138bf565b92505081905550600081601d5447611e1291906132a9565b611e1c9190613922565b905060008147611e2c91906138bf565b90506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505090506000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050905081611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b9061399f565b60405180910390fd5b80611f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5b9061399f565b60405180910390fd5b50505050505b6000602360046101000a81548160ff0219169083151502179055505b505050612067565b811561206657600e549550600d549450600f549350600c60009054906101000a900460ff1615612017576000611fc3896110f4565b9050600b548882611fd4919061302e565b1115612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90613a0b565b60405180910390fd5b505b602360029054906101000a900460ff161561206557602054601f5461203c919061302e565b4310156120645760008486612051919061302e565b606361205d91906138bf565b9050809650505b5b5b5b6000861180156120775750600085115b80156120835750600084115b1561211157600060648588612098919061302e565b896120a391906132a9565b6120ad9190613922565b905060006064878a6120bf91906132a9565b6120c99190613922565b9050600081836120d9919061302e565b9050808a6120e791906138bf565b935082601a60008282546120fb919061302e565b9250508190555061210d8c3083612789565b5050505b61211c898983612789565b505050612130565b61212f868686612789565b5b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab8282604051612287929190613a2b565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990613ac6565b60405180910390fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90613b58565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161243b9190612b19565b60405180910390a3505050565b6001602360016101000a81548160ff02191690831515021790555060006002826124729190613922565b90506000818361248291906138bf565b9050600047905061249283612509565b600081476124a091906138bf565b90506124ac83826129e9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516124df939291906130f4565b60405180910390a1505050506000602360016101000a81548160ff02191690831515021790555050565b6001602360016101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561254157612540613b78565b5b60405190808252806020026020018201604052801561256f5781602001602082028036833780820191505090505b509050308160008151811061258757612586613ba7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561262c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126509190613beb565b8160018151811061266457612663613ba7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506126c9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611710565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42612718919061302e565b6040518663ffffffff1660e01b8152600401612738959493929190613d11565b600060405180830381600087803b15801561275257600080fd5b505af1158015612766573d6000803e3d6000fd5b50505050506000602360016101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef9061367d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285e9061370f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156128ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e490613ddd565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129db9190612b19565b60405180910390a350505050565b6001602360016101000a81548160ff021916908315150217905550612a2f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611710565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612a7961127d565b426040518863ffffffff1660e01b8152600401612a9b96959493929190613dfd565b60606040518083038185885af1158015612ab9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ade9190613e73565b5050506000602360016101000a81548160ff0219169083151502179055505050565b6000819050919050565b612b1381612b00565b82525050565b6000602082019050612b2e6000830184612b0a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b5f82612b34565b9050919050565b612b6f81612b54565b82525050565b6000602082019050612b8a6000830184612b66565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612bca578082015181840152602081019050612baf565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bf282612b90565b612bfc8185612b9b565b9350612c0c818560208601612bac565b612c1581612bd6565b840191505092915050565b60006020820190508181036000830152612c3a8184612be7565b905092915050565b600080fd5b612c5081612b54565b8114612c5b57600080fd5b50565b600081359050612c6d81612c47565b92915050565b60008115159050919050565b612c8881612c73565b8114612c9357600080fd5b50565b600081359050612ca581612c7f565b92915050565b60008060408385031215612cc257612cc1612c42565b5b6000612cd085828601612c5e565b9250506020612ce185828601612c96565b9150509250929050565b612cf481612b00565b8114612cff57600080fd5b50565b600081359050612d1181612ceb565b92915050565b60008060408385031215612d2e57612d2d612c42565b5b6000612d3c85828601612c5e565b9250506020612d4d85828601612d02565b9150509250929050565b612d6081612c73565b82525050565b6000602082019050612d7b6000830184612d57565b92915050565b6000819050919050565b6000612da6612da1612d9c84612b34565b612d81565b612b34565b9050919050565b6000612db882612d8b565b9050919050565b6000612dca82612dad565b9050919050565b612dda81612dbf565b82525050565b6000602082019050612df56000830184612dd1565b92915050565b600080600060608486031215612e1457612e13612c42565b5b6000612e2286828701612d02565b9350506020612e3386828701612d02565b9250506040612e4486828701612d02565b9150509250925092565b600080600060608486031215612e6757612e66612c42565b5b6000612e7586828701612c5e565b9350506020612e8686828701612c5e565b9250506040612e9786828701612d02565b9150509250925092565b600060208284031215612eb757612eb6612c42565b5b6000612ec584828501612d02565b91505092915050565b600060ff82169050919050565b612ee481612ece565b82525050565b6000602082019050612eff6000830184612edb565b92915050565b600060208284031215612f1b57612f1a612c42565b5b6000612f2984828501612c5e565b91505092915050565b600060208284031215612f4857612f47612c42565b5b6000612f5684828501612c96565b91505092915050565b60008060408385031215612f7657612f75612c42565b5b6000612f8485828601612c5e565b9250506020612f9585828601612c5e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fe657607f821691505b602082108103612ff957612ff8612f9f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061303982612b00565b915061304483612b00565b925082820190508082111561305c5761305b612fff565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f206265206772656160008201527f746572207468616e203130300000000000000000000000000000000000000000602082015250565b60006130be602c83612b9b565b91506130c982613062565b604082019050919050565b600060208201905081810360008301526130ed816130b1565b9050919050565b60006060820190506131096000830186612b0a565b6131166020830185612b0a565b6131236040830184612b0a565b949350505050565b60008160011c9050919050565b6000808291508390505b60018511156131825780860481111561315e5761315d612fff565b5b600185161561316d5780820291505b808102905061317b8561312b565b9450613142565b94509492505050565b60008261319b5760019050613257565b816131a95760009050613257565b81600181146131bf57600281146131c9576131f8565b6001915050613257565b60ff8411156131db576131da612fff565b5b8360020a9150848211156131f2576131f1612fff565b5b50613257565b5060208310610133831016604e8410600b841016171561322d5782820a90508381111561322857613227612fff565b5b613257565b61323a8484846001613138565b9250905081840481111561325157613250612fff565b5b81810290505b9392505050565b600061326982612b00565b915061327483612ece565b92506132a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461318b565b905092915050565b60006132b482612b00565b91506132bf83612b00565b92508282026132cd81612b00565b915082820484148315176132e4576132e3612fff565b5b5092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613347602583612b9b565b9150613352826132eb565b604082019050919050565b600060208201905081810360008301526133768161333a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133d9602683612b9b565b91506133e48261337d565b604082019050919050565b60006020820190508181036000830152613408816133cc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613445602083612b9b565b91506134508261340f565b602082019050919050565b6000602082019050818103600083015261347481613438565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134d7602483612b9b565b91506134e28261347b565b604082019050919050565b60006020820190508181036000830152613506816134ca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613569602283612b9b565b91506135748261350d565b604082019050919050565b600060208201905081810360008301526135988161355c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006135d5601d83612b9b565b91506135e08261359f565b602082019050919050565b60006020820190508181036000830152613604816135c8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613667602583612b9b565b91506136728261360b565b604082019050919050565b600060208201905081810360008301526136968161365a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006136f9602383612b9b565b91506137048261369d565b604082019050919050565b60006020820190508181036000830152613728816136ec565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061378b602983612b9b565b91506137968261372f565b604082019050919050565b600060208201905081810360008301526137ba8161377e565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b60006137f7602083612b9b565b9150613802826137c1565b602082019050919050565b60006020820190508181036000830152613826816137ea565b9050919050565b7f43616e6e6f7420657863656564206d6178207472616e73616374696f6e20616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b6000613889602483612b9b565b91506138948261382d565b604082019050919050565b600060208201905081810360008301526138b88161387c565b9050919050565b60006138ca82612b00565b91506138d583612b00565b92508282039050818111156138ed576138ec612fff565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061392d82612b00565b915061393883612b00565b925082613948576139476138f3565b5b828204905092915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b6000613989601283612b9b565b915061399482613953565b602082019050919050565b600060208201905081810360008301526139b88161397c565b9050919050565b7f45786365656473206d61782077616c6c65742e00000000000000000000000000600082015250565b60006139f5601383612b9b565b9150613a00826139bf565b602082019050919050565b60006020820190508181036000830152613a24816139e8565b9050919050565b6000604082019050613a406000830185612b66565b613a4d6020830184612d57565b9392505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ab0602183612b9b565b9150613abb82613a54565b604082019050919050565b60006020820190508181036000830152613adf81613aa3565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b42602283612b9b565b9150613b4d82613ae6565b604082019050919050565b60006020820190508181036000830152613b7181613b35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613be581612c47565b92915050565b600060208284031215613c0157613c00612c42565b5b6000613c0f84828501613bd6565b91505092915050565b6000819050919050565b6000613c3d613c38613c3384613c18565b612d81565b612b00565b9050919050565b613c4d81613c22565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c8881612b54565b82525050565b6000613c9a8383613c7f565b60208301905092915050565b6000602082019050919050565b6000613cbe82613c53565b613cc88185613c5e565b9350613cd383613c6f565b8060005b83811015613d04578151613ceb8882613c8e565b9750613cf683613ca6565b925050600181019050613cd7565b5085935050505092915050565b600060a082019050613d266000830188612b0a565b613d336020830187613c44565b8181036040830152613d458186613cb3565b9050613d546060830185612b66565b613d616080830184612b0a565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613dc7602683612b9b565b9150613dd282613d6b565b604082019050919050565b60006020820190508181036000830152613df681613dba565b9050919050565b600060c082019050613e126000830189612b66565b613e1f6020830188612b0a565b613e2c6040830187613c44565b613e396060830186613c44565b613e466080830185612b66565b613e5360a0830184612b0a565b979650505050505050565b600081519050613e6d81612ceb565b92915050565b600080600060608486031215613e8c57613e8b612c42565b5b6000613e9a86828701613e5e565b9350506020613eab86828701613e5e565b9250506040613ebc86828701613e5e565b915050925092509256fea2646970667358221220dd0a951d4ce1a27367d11fa9eeec9183def24bff8de70bbe666a868e8d1b134864736f6c63430008110033

Deployed Bytecode Sourcemap

16607:12969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17469:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17515:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5917:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21465:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6895:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16655:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6318:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19022:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22471:495;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19126:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7149:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23644:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16758:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17433:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6216:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17326:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7973:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16713:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19169:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19079:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19209:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19278:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21091:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21654:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21284:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6029:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4853:103;;;;;;;;;;;;;:::i;:::-;;17291:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17254:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20826:257;;;;;;;;;;;;;:::i;:::-;;21761:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16994:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18984:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4616:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22976:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17395:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5803:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22127:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17556:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7456:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6649:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17053:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18900:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18451:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17363:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17223:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17116:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6438:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23482:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4966:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17469:27;;;;:::o;17515:34::-;;;;;;;;;;;;;:::o;5917:102::-;5973:13;6006:5;5999:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5917:102;:::o;21465:181::-;4575:13;:11;:13::i;:::-;21580:8:::1;21549:19;:28;21569:7;21549:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21620:7;21604:34;;;21629:8;21604:34;;;;;;:::i;:::-;;;;;;;;21465:181:::0;;:::o;6895:244::-;7016:4;7038:13;7054:12;:10;:12::i;:::-;7038:28;;7077:32;7086:5;7093:7;7102:6;7077:8;:32::i;:::-;7127:4;7120:11;;;6895:244;;;;:::o;16655:51::-;;;:::o;6318:110::-;6381:7;6408:12;;6401:19;;6318:110;:::o;19022:33::-;;;;:::o;22471:495::-;4575:13;:11;:13::i;:::-;22648:3:::1;22629:14;22610:16;22597:10;:29;;;;:::i;:::-;:46;;;;:::i;:::-;22596:55;;22588:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;22723:10;22711:9;:22;;;;22762:16;22744:15;:34;;;;22805:14;22789:13;:30;;;;22874:13;;22856:15;;22844:9;;:27;;;;:::i;:::-;:43;;;;:::i;:::-;22830:11;:57;;;;22903:55;22916:9;;22927:15;;22944:13;;22903:55;;;;;;;;:::i;:::-;;;;;;;;22471:495:::0;;;:::o;19126:36::-;;;;;;;;;;;;;:::o;7149:297::-;7282:4;7299:15;7317:12;:10;:12::i;:::-;7299:30;;7340:38;7356:4;7362:7;7371:6;7340:15;:38::i;:::-;7389:27;7399:4;7405:2;7409:6;7389:9;:27::i;:::-;7434:4;7427:11;;;7149:297;;;;;:::o;23644:178::-;4575:13;:11;:13::i;:::-;23744:16:::1;23726:15;:34;;;;23776:38;23798:15;;23776:38;;;;;;:::i;:::-;;;;;;;;23644:178:::0;:::o;16758:53::-;16804:6;16758:53;:::o;17433:29::-;;;;:::o;6216:92::-;6274:5;6299:1;6292:8;;6216:92;:::o;17326:26::-;;;;:::o;7973:272::-;8090:4;8112:13;8128:12;:10;:12::i;:::-;8112:28;;8151:64;8160:5;8167:7;8204:10;8176:25;8186:5;8193:7;8176:9;:25::i;:::-;:38;;;;:::i;:::-;8151:8;:64::i;:::-;8233:4;8226:11;;;7973:272;;;;:::o;16713:38::-;;;:::o;19169:33::-;;;;;;;;;;;;;:::o;19079:40::-;;;;;;;;;;;;;:::o;19209:34::-;;;;;;;;;;;;;:::o;19278:35::-;;;;;;;;;;;;;:::o;21091:181::-;4575:13;:11;:13::i;:::-;21194:10:::1;21172:19;;:32;;;;;;;;;;;;;;;;;;21220:44;21244:19;;;;;;;;;;;21220:44;;;;;;:::i;:::-;;;;;;;;21091:181:::0;:::o;21654:99::-;4575:13;:11;:13::i;:::-;21740:5:::1;21723:14;;:22;;;;;;;;;;;;;;;;;;21654:99:::0;:::o;21284:173::-;4575:13;:11;:13::i;:::-;21383:10:::1;21363:17;;:30;;;;;;;;;;;;;;;;;;21409:40;21431:17;;;;;;;;;;;21409:40;;;;;;:::i;:::-;;;;;;;;21284:173:::0;:::o;6029:177::-;6148:7;6180:9;:18;6190:7;6180:18;;;;;;;;;;;;;;;;6173:25;;6029:177;;;:::o;4853:103::-;4575:13;:11;:13::i;:::-;4918:30:::1;4945:1;4918:18;:30::i;:::-;4853:103::o:0;17291:28::-;;;;:::o;17254:30::-;;;;:::o;20826:257::-;4575:13;:11;:13::i;:::-;20890:14:::1;;;;;;;;;;;20889:15;20881:24;;;::::0;::::1;;20933:4;20916:14;;:21;;;;;;;;;;;;;;;;;;20962:12;20948:11;:26;;;;21003:15;20985;:33;;;;21042:1;21029:10;:14;;;;21059:16;;;;;;;;;;20826:257::o:0;21761:358::-;4575:13;:11;:13::i;:::-;21955:9:::1;;;;;;;;;;;21951:2;:13;;;;:::i;:::-;21929:18;:36;;;;:::i;:::-;21895:31;:70;;;;22024:9;;;;;;;;;;;22020:2;:13;;;;:::i;:::-;22004:12;:30;;;;:::i;:::-;21976:25;:58;;;;22101:9;;;;;;;;;;;22097:2;:13;;;;:::i;:::-;22077:16;:34;;;;:::i;:::-;22045:29;:66;;;;21761:358:::0;;;:::o;16994:52::-;;;;:::o;18984:30::-;;;;:::o;4616:87::-;4662:7;4689:6;;;;;;;;;;;4682:13;;4616:87;:::o;22976:498::-;4575:13;:11;:13::i;:::-;23142:3:::1;23120:17;23106:11;:31;;;;:::i;:::-;23105:40;;23097:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;23218:11;23205:10;:24;;;;23259:17;23240:16;:36;;;;23304:15;23287:14;:32;;;;23377:14;;23358:16;;23345:10;;:29;;;;:::i;:::-;:46;;;;:::i;:::-;23330:12;:61;;;;23407:59;23421:10;;23433:16;;23451:14;;23407:59;;;;;;;;:::i;:::-;;;;;;;;22976:498:::0;;;:::o;17395:31::-;;;;:::o;5803:106::-;5861:13;5894:7;5887:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5803:106;:::o;22127:140::-;4575:13;:11;:13::i;:::-;22218:41:::1;22247:4;22253:5;22218:28;:41::i;:::-;22127:140:::0;;:::o;17556:32::-;;;;;;;;;;;;;:::o;7456:507::-;7578:4;7600:13;7616:12;:10;:12::i;:::-;7600:28;;7639:24;7666:25;7676:5;7683:7;7666:9;:25::i;:::-;7639:52;;7744:15;7724:16;:35;;7702:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7860:60;7869:5;7876:7;7904:15;7885:16;:34;7860:8;:60::i;:::-;7951:4;7944:11;;;;7456:507;;;;:::o;6649:236::-;6766:4;6788:13;6804:12;:10;:12::i;:::-;6788:28;;6827;6837:5;6844:2;6848:6;6827:9;:28::i;:::-;6873:4;6866:11;;;6649:236;;;;:::o;17053:56::-;;;;:::o;18900:26::-;;;;:::o;18451:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;17363:25::-;;;;:::o;17223:24::-;;;;:::o;17116:35::-;;;;;;;;;;;;;:::o;6438:201::-;6572:7;6604:11;:18;6616:5;6604:18;;;;;;;;;;;;;;;:27;6623:7;6604:27;;;;;;;;;;;;;;;;6597:34;;6438:201;;;;:::o;23482:154::-;4575:13;:11;:13::i;:::-;23570:12:::1;23556:11;:26;;;;23598:30;23616:11;;23598:30;;;;;;:::i;:::-;;;;;;;;23482:154:::0;:::o;4966:201::-;4575:13;:11;:13::i;:::-;5075:1:::1;5055:22;;:8;:22;;::::0;5047:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5131:28;5150:8;5131:18;:28::i;:::-;4966:201:::0;:::o;4711:132::-;4786:12;:10;:12::i;:::-;4775:23;;:7;:5;:7::i;:::-;:23;;;4767:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4711:132::o;527:98::-;580:7;607:10;600:17;;527:98;:::o;9252:380::-;9405:1;9388:19;;:5;:19;;;9380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9486:1;9467:21;;:7;:21;;;9459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9570:6;9540:11;:18;9552:5;9540:18;;;;;;;;;;;;;;;:27;9559:7;9540:27;;;;;;;;;;;;;;;:36;;;;9608:7;9592:32;;9601:5;9592:32;;;9617:6;9592:32;;;;;;:::i;:::-;;;;;;;;9252:380;;;:::o;9640:502::-;9775:24;9802:25;9812:5;9819:7;9802:9;:25::i;:::-;9775:52;;9862:17;9842:16;:37;9838:297;;9942:6;9922:16;:26;;9896:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;10057:51;10066:5;10073:7;10101:6;10082:16;:25;10057:8;:51::i;:::-;9838:297;9764:378;9640:502;;;:::o;24673:4281::-;24787:1;24771:18;;:4;:18;;;24763:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24864:1;24850:16;;:2;:16;;;24842:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24934:1;24925:6;:10;24917:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24994:20;25025:14;25050:18;25086:33;:39;25120:4;25086:39;;;;;;;;;;;;;;;;;;;;;;;;;25081:142;;25150:14;;;;;;;;;;;25142:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;25081:142;16804:6;25243:17;;:2;:17;;;25239:3708;;25277:19;25283:4;25289:6;25277:5;:19::i;:::-;25311:7;;;;;25239:3708;25351:8;;;;;;;;;;;25350:9;:39;;;;;25364:19;:25;25384:4;25364:25;;;;;;;;;;;;;;;;;;;;;;;;;25363:26;25350:39;:67;;;;;25394:19;:23;25414:2;25394:23;;;;;;;;;;;;;;;;;;;;;;;;;25393:24;25350:67;25346:3601;;;25452:11;;25442:6;:21;;25434:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25521:14;25538:25;:29;25564:2;25538:29;;;;;;;;;;;;;;;;;;;;;;;;;25521:46;;25582:13;25598:25;:31;25624:4;25598:31;;;;;;;;;;;;;;;;;;;;;;;;;25582:47;;25644:22;25669:6;25644:31;;25741:9;25737:2495;;;25838:16;;25823:31;;25882:10;;25873:19;;25924:14;;25911:27;;26007:28;26038:24;26056:4;26038:9;:24::i;:::-;26007:55;;26083:15;26142:25;;26125:12;;26102:20;:35;;;;:::i;:::-;26101:66;;26083:84;;26186:16;26254:29;;26220:31;;:63;;;;:::i;:::-;26205:12;;:78;26186:97;;26338:10;:25;;;;26352:11;26338:25;26334:1144;;;26399:4;26388:8;;:15;;;;;;;;;;;;;;;;;;26432:21;;;;;;;;;;;:35;;;;;26457:10;26432:35;26428:134;;;26496:42;26512:25;;26496:15;:42::i;:::-;26428:134;26590:11;26586:812;;;26630:20;26687:29;;26653:31;;:63;;;;:::i;:::-;26630:86;;26743:31;26761:12;26743:17;:31::i;:::-;26817:12;26801;;:28;;;;;;;:::i;:::-;;;;;;;;26856:21;26938:12;26905:29;;26881:21;:53;;;;:::i;:::-;26880:70;;;;:::i;:::-;26856:94;;26977:23;27027:13;27003:21;:37;;;;:::i;:::-;26977:63;;27069:16;27096:17;;;;;;;;;;;27088:31;;:46;27120:13;27088:46;;;;;;;;;;;;;;;;;;;;;;;27069:65;;27161:18;27190:19;;;;;;;;;;;27182:33;;:50;27216:15;27182:50;;;;;;;;;;;;;;;;;;;;;;;27161:71;;27267:11;27259:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;27336:13;27328:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;26603:795;;;;;26586:812;27453:5;27442:8;;:16;;;;;;;;;;;;;;;;;;26334:1144;25752:1741;;;25737:2495;;;27563:8;27559:673;;;27607:15;;27592:30;;27650:9;;27641:18;;27691:13;;27678:26;;27729:16;;;;;;;;;;;27725:220;;;27770:32;27805:13;27815:2;27805:9;:13::i;:::-;27770:48;;27886:15;;27876:6;27849:24;:33;;;;:::i;:::-;:52;;27841:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;27747:198;27725:220;27969:14;;;;;;;;;;;27965:250;;;28042:10;;28028:11;;:24;;;;:::i;:::-;28013:12;:39;28009:187;;;28081:14;28113:10;28104:6;:19;;;;:::i;:::-;28098:2;:26;;;;:::i;:::-;28081:43;;28166:6;28151:21;;28054:142;28009:187;27965:250;27559:673;25737:2495;28333:1;28318:12;:16;:30;;;;;28347:1;28338:6;:10;28318:30;:48;;;;;28365:1;28352:10;:14;28318:48;28314:489;;;28387:32;28464:3;28449:10;28434:12;:25;;;;:::i;:::-;28424:6;:36;;;;:::i;:::-;28423:44;;;;:::i;:::-;28387:81;;28487:19;28530:3;28520:6;28511;:15;;;;:::i;:::-;28510:23;;;;:::i;:::-;28487:47;;28553:16;28599:11;28572:24;:38;;;;:::i;:::-;28553:57;;28655:8;28646:6;:17;;;;:::i;:::-;28629:34;;28698:24;28682:12;;:40;;;;;;;:::i;:::-;;;;;;;;28741:46;28757:4;28771;28778:8;28741:15;:46::i;:::-;28368:435;;;28314:489;28819:41;28835:4;28841:2;28845:14;28819:15;:41::i;:::-;25419:3453;;;25346:3601;;;28902:33;28918:4;28924:2;28928:6;28902:15;:33::i;:::-;25346:3601;24752:4202;;;24673:4281;;;;:::o;5177:191::-;5251:16;5270:6;;;;;;;;;;;5251:25;;5296:8;5287:6;;:17;;;;;;;;;;;;;;;;;;5351:8;5320:40;;5341:8;5320:40;;;;;;;;;;;;5240:128;5177:191;:::o;22275:188::-;22392:5;22358:25;:31;22384:4;22358:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22415:40;22443:4;22449:5;22415:40;;;;;;;:::i;:::-;;;;;;;;22275:188;;:::o;8690:552::-;8793:1;8774:21;;:7;:21;;;8766:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8846:22;8871:9;:18;8881:7;8871:18;;;;;;;;;;;;;;;;8846:43;;8926:6;8908:14;:24;;8900:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9045:6;9028:14;:23;9007:9;:18;9017:7;9007:18;;;;;;;;;;;;;;;:44;;;;9162:6;9146:12;;:22;;;;;;;;;;;9223:1;9197:37;;9206:7;9197:37;;;9227:6;9197:37;;;;;;:::i;:::-;;;;;;;;8755:487;8690:552;;:::o;28997:541::-;19518:4;19499:16;;:23;;;;;;;;;;;;;;;;;;29080:22:::1;29129:1;29106:20;:24;;;;:::i;:::-;29080:51;;29142:27;29196:14;29173:20;:37;;;;:::i;:::-;29142:69;;29224:22;29249:21;29224:46;;29283:33;29301:14;29283:17;:33::i;:::-;29329:18;29375:14;29351:21;:38;;;;:::i;:::-;29329:61;;29403:46;29417:19;29438:10;29403:13;:46::i;:::-;29467:63;29482:14;29498:10;29510:19;29467:63;;;;;;;;:::i;:::-;;;;;;;;29069:469;;;;19564:5:::0;19545:16;;:24;;;;;;;;;;;;;;;;;;28997:541;:::o;23838:449::-;19518:4;19499:16;;:23;;;;;;;;;;;;;;;;;;23910:21:::1;23948:1;23934:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23910:40;;23975:4;23957;23962:1;23957:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23997:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23987:4;23992:1;23987:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;24028:62;24045:4;24060:15;24078:11;24028:8;:62::i;:::-;24099:15;:66;;;24176:11;24198:1;24210:4;24233;24268:3;24250:15;:21;;;;:::i;:::-;24099:180;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23903:384;19564:5:::0;19545:16;;:24;;;;;;;;;;;;;;;;;;23838:449;:::o;10150:776::-;10297:1;10281:18;;:4;:18;;;10273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10374:1;10360:16;;:2;:16;;;10352:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10429:19;10451:9;:15;10461:4;10451:15;;;;;;;;;;;;;;;;10429:37;;10514:6;10499:11;:21;;10477:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;10654:6;10640:11;:20;10622:9;:15;10632:4;10622:15;;;;;;;;;;;;;;;:38;;;;10857:6;10840:9;:13;10850:2;10840:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10907:2;10892:26;;10901:4;10892:26;;;10911:6;10892:26;;;;;;:::i;:::-;;;;;;;;10262:664;10150:776;;;:::o;24295:372::-;19518:4;19499:16;;:23;;;;;;;;;;;;;;;;;;24386:62:::1;24403:4;24418:15;24436:11;24386:8;:62::i;:::-;24461:15;:31;;;24500:9;24533:4;24553:11;24579:1;24595::::0;24611:7:::1;:5;:7::i;:::-;24633:15;24461:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19564:5:::0;19545:16;;:24;;;;;;;;;;;;;;;;;;24295:372;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:126::-;479:7;519:42;512:5;508:54;497:65;;442:126;;;:::o;574:96::-;611:7;640:24;658:5;640:24;:::i;:::-;629:35;;574:96;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2451:117::-;2560:1;2557;2550:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:90::-;3004:7;3047:5;3040:13;3033:21;3022:32;;2970:90;;;:::o;3066:116::-;3136:21;3151:5;3136:21;:::i;:::-;3129:5;3126:32;3116:60;;3172:1;3169;3162:12;3116:60;3066:116;:::o;3188:133::-;3231:5;3269:6;3256:20;3247:29;;3285:30;3309:5;3285:30;:::i;:::-;3188:133;;;;:::o;3327:468::-;3392:6;3400;3449:2;3437:9;3428:7;3424:23;3420:32;3417:119;;;3455:79;;:::i;:::-;3417:119;3575:1;3600:53;3645:7;3636:6;3625:9;3621:22;3600:53;:::i;:::-;3590:63;;3546:117;3702:2;3728:50;3770:7;3761:6;3750:9;3746:22;3728:50;:::i;:::-;3718:60;;3673:115;3327:468;;;;;:::o;3801:122::-;3874:24;3892:5;3874:24;:::i;:::-;3867:5;3864:35;3854:63;;3913:1;3910;3903:12;3854:63;3801:122;:::o;3929:139::-;3975:5;4013:6;4000:20;3991:29;;4029:33;4056:5;4029:33;:::i;:::-;3929:139;;;;:::o;4074:474::-;4142:6;4150;4199:2;4187:9;4178:7;4174:23;4170:32;4167:119;;;4205:79;;:::i;:::-;4167:119;4325:1;4350:53;4395:7;4386:6;4375:9;4371:22;4350:53;:::i;:::-;4340:63;;4296:117;4452:2;4478:53;4523:7;4514:6;4503:9;4499:22;4478:53;:::i;:::-;4468:63;;4423:118;4074:474;;;;;:::o;4554:109::-;4635:21;4650:5;4635:21;:::i;:::-;4630:3;4623:34;4554:109;;:::o;4669:210::-;4756:4;4794:2;4783:9;4779:18;4771:26;;4807:65;4869:1;4858:9;4854:17;4845:6;4807:65;:::i;:::-;4669:210;;;;:::o;4885:60::-;4913:3;4934:5;4927:12;;4885:60;;;:::o;4951:142::-;5001:9;5034:53;5052:34;5061:24;5079:5;5061:24;:::i;:::-;5052:34;:::i;:::-;5034:53;:::i;:::-;5021:66;;4951:142;;;:::o;5099:126::-;5149:9;5182:37;5213:5;5182:37;:::i;:::-;5169:50;;5099:126;;;:::o;5231:153::-;5308:9;5341:37;5372:5;5341:37;:::i;:::-;5328:50;;5231:153;;;:::o;5390:185::-;5504:64;5562:5;5504:64;:::i;:::-;5499:3;5492:77;5390:185;;:::o;5581:276::-;5701:4;5739:2;5728:9;5724:18;5716:26;;5752:98;5847:1;5836:9;5832:17;5823:6;5752:98;:::i;:::-;5581:276;;;;:::o;5863:619::-;5940:6;5948;5956;6005:2;5993:9;5984:7;5980:23;5976:32;5973:119;;;6011:79;;:::i;:::-;5973:119;6131:1;6156:53;6201:7;6192:6;6181:9;6177:22;6156:53;:::i;:::-;6146:63;;6102:117;6258:2;6284:53;6329:7;6320:6;6309:9;6305:22;6284:53;:::i;:::-;6274:63;;6229:118;6386:2;6412:53;6457:7;6448:6;6437:9;6433:22;6412:53;:::i;:::-;6402:63;;6357:118;5863:619;;;;;:::o;6488:::-;6565:6;6573;6581;6630:2;6618:9;6609:7;6605:23;6601:32;6598:119;;;6636:79;;:::i;:::-;6598:119;6756:1;6781:53;6826:7;6817:6;6806:9;6802:22;6781:53;:::i;:::-;6771:63;;6727:117;6883:2;6909:53;6954:7;6945:6;6934:9;6930:22;6909:53;:::i;:::-;6899:63;;6854:118;7011:2;7037:53;7082:7;7073:6;7062:9;7058:22;7037:53;:::i;:::-;7027:63;;6982:118;6488:619;;;;;:::o;7113:329::-;7172:6;7221:2;7209:9;7200:7;7196:23;7192:32;7189:119;;;7227:79;;:::i;:::-;7189:119;7347:1;7372:53;7417:7;7408:6;7397:9;7393:22;7372:53;:::i;:::-;7362:63;;7318:117;7113:329;;;;:::o;7448:86::-;7483:7;7523:4;7516:5;7512:16;7501:27;;7448:86;;;:::o;7540:112::-;7623:22;7639:5;7623:22;:::i;:::-;7618:3;7611:35;7540:112;;:::o;7658:214::-;7747:4;7785:2;7774:9;7770:18;7762:26;;7798:67;7862:1;7851:9;7847:17;7838:6;7798:67;:::i;:::-;7658:214;;;;:::o;7878:329::-;7937:6;7986:2;7974:9;7965:7;7961:23;7957:32;7954:119;;;7992:79;;:::i;:::-;7954:119;8112:1;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8083:117;7878:329;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:180::-;9582:77;9579:1;9572:88;9679:4;9676:1;9669:15;9703:4;9700:1;9693:15;9720:191;9760:3;9779:20;9797:1;9779:20;:::i;:::-;9774:25;;9813:20;9831:1;9813:20;:::i;:::-;9808:25;;9856:1;9853;9849:9;9842:16;;9877:3;9874:1;9871:10;9868:36;;;9884:18;;:::i;:::-;9868:36;9720:191;;;;:::o;9917:231::-;10057:34;10053:1;10045:6;10041:14;10034:58;10126:14;10121:2;10113:6;10109:15;10102:39;9917:231;:::o;10154:366::-;10296:3;10317:67;10381:2;10376:3;10317:67;:::i;:::-;10310:74;;10393:93;10482:3;10393:93;:::i;:::-;10511:2;10506:3;10502:12;10495:19;;10154:366;;;:::o;10526:419::-;10692:4;10730:2;10719:9;10715:18;10707:26;;10779:9;10773:4;10769:20;10765:1;10754:9;10750:17;10743:47;10807:131;10933:4;10807:131;:::i;:::-;10799:139;;10526:419;;;:::o;10951:442::-;11100:4;11138:2;11127:9;11123:18;11115:26;;11151:71;11219:1;11208:9;11204:17;11195:6;11151:71;:::i;:::-;11232:72;11300:2;11289:9;11285:18;11276:6;11232:72;:::i;:::-;11314;11382:2;11371:9;11367:18;11358:6;11314:72;:::i;:::-;10951:442;;;;;;:::o;11399:102::-;11441:8;11488:5;11485:1;11481:13;11460:34;;11399:102;;;:::o;11507:848::-;11568:5;11575:4;11599:6;11590:15;;11623:5;11614:14;;11637:712;11658:1;11648:8;11645:15;11637:712;;;11753:4;11748:3;11744:14;11738:4;11735:24;11732:50;;;11762:18;;:::i;:::-;11732:50;11812:1;11802:8;11798:16;11795:451;;;12227:4;12220:5;12216:16;12207:25;;11795:451;12277:4;12271;12267:15;12259:23;;12307:32;12330:8;12307:32;:::i;:::-;12295:44;;11637:712;;;11507:848;;;;;;;:::o;12361:1073::-;12415:5;12606:8;12596:40;;12627:1;12618:10;;12629:5;;12596:40;12655:4;12645:36;;12672:1;12663:10;;12674:5;;12645:36;12741:4;12789:1;12784:27;;;;12825:1;12820:191;;;;12734:277;;12784:27;12802:1;12793:10;;12804:5;;;12820:191;12865:3;12855:8;12852:17;12849:43;;;12872:18;;:::i;:::-;12849:43;12921:8;12918:1;12914:16;12905:25;;12956:3;12949:5;12946:14;12943:40;;;12963:18;;:::i;:::-;12943:40;12996:5;;;12734:277;;13120:2;13110:8;13107:16;13101:3;13095:4;13092:13;13088:36;13070:2;13060:8;13057:16;13052:2;13046:4;13043:12;13039:35;13023:111;13020:246;;;13176:8;13170:4;13166:19;13157:28;;13211:3;13204:5;13201:14;13198:40;;;13218:18;;:::i;:::-;13198:40;13251:5;;13020:246;13291:42;13329:3;13319:8;13313:4;13310:1;13291:42;:::i;:::-;13276:57;;;;13365:4;13360:3;13356:14;13349:5;13346:25;13343:51;;;13374:18;;:::i;:::-;13343:51;13423:4;13416:5;13412:16;13403:25;;12361:1073;;;;;;:::o;13440:281::-;13498:5;13522:23;13540:4;13522:23;:::i;:::-;13514:31;;13566:25;13582:8;13566:25;:::i;:::-;13554:37;;13610:104;13647:66;13637:8;13631:4;13610:104;:::i;:::-;13601:113;;13440:281;;;;:::o;13727:410::-;13767:7;13790:20;13808:1;13790:20;:::i;:::-;13785:25;;13824:20;13842:1;13824:20;:::i;:::-;13819:25;;13879:1;13876;13872:9;13901:30;13919:11;13901:30;:::i;:::-;13890:41;;14080:1;14071:7;14067:15;14064:1;14061:22;14041:1;14034:9;14014:83;13991:139;;14110:18;;:::i;:::-;13991:139;13775:362;13727:410;;;;:::o;14143:224::-;14283:34;14279:1;14271:6;14267:14;14260:58;14352:7;14347:2;14339:6;14335:15;14328:32;14143:224;:::o;14373:366::-;14515:3;14536:67;14600:2;14595:3;14536:67;:::i;:::-;14529:74;;14612:93;14701:3;14612:93;:::i;:::-;14730:2;14725:3;14721:12;14714:19;;14373:366;;;:::o;14745:419::-;14911:4;14949:2;14938:9;14934:18;14926:26;;14998:9;14992:4;14988:20;14984:1;14973:9;14969:17;14962:47;15026:131;15152:4;15026:131;:::i;:::-;15018:139;;14745:419;;;:::o;15170:225::-;15310:34;15306:1;15298:6;15294:14;15287:58;15379:8;15374:2;15366:6;15362:15;15355:33;15170:225;:::o;15401:366::-;15543:3;15564:67;15628:2;15623:3;15564:67;:::i;:::-;15557:74;;15640:93;15729:3;15640:93;:::i;:::-;15758:2;15753:3;15749:12;15742:19;;15401:366;;;:::o;15773:419::-;15939:4;15977:2;15966:9;15962:18;15954:26;;16026:9;16020:4;16016:20;16012:1;16001:9;15997:17;15990:47;16054:131;16180:4;16054:131;:::i;:::-;16046:139;;15773:419;;;:::o;16198:182::-;16338:34;16334:1;16326:6;16322:14;16315:58;16198:182;:::o;16386:366::-;16528:3;16549:67;16613:2;16608:3;16549:67;:::i;:::-;16542:74;;16625:93;16714:3;16625:93;:::i;:::-;16743:2;16738:3;16734:12;16727:19;;16386:366;;;:::o;16758:419::-;16924:4;16962:2;16951:9;16947:18;16939:26;;17011:9;17005:4;17001:20;16997:1;16986:9;16982:17;16975:47;17039:131;17165:4;17039:131;:::i;:::-;17031:139;;16758:419;;;:::o;17183:223::-;17323:34;17319:1;17311:6;17307:14;17300:58;17392:6;17387:2;17379:6;17375:15;17368:31;17183:223;:::o;17412:366::-;17554:3;17575:67;17639:2;17634:3;17575:67;:::i;:::-;17568:74;;17651:93;17740:3;17651:93;:::i;:::-;17769:2;17764:3;17760:12;17753:19;;17412:366;;;:::o;17784:419::-;17950:4;17988:2;17977:9;17973:18;17965:26;;18037:9;18031:4;18027:20;18023:1;18012:9;18008:17;18001:47;18065:131;18191:4;18065:131;:::i;:::-;18057:139;;17784:419;;;:::o;18209:221::-;18349:34;18345:1;18337:6;18333:14;18326:58;18418:4;18413:2;18405:6;18401:15;18394:29;18209:221;:::o;18436:366::-;18578:3;18599:67;18663:2;18658:3;18599:67;:::i;:::-;18592:74;;18675:93;18764:3;18675:93;:::i;:::-;18793:2;18788:3;18784:12;18777:19;;18436:366;;;:::o;18808:419::-;18974:4;19012:2;19001:9;18997:18;18989:26;;19061:9;19055:4;19051:20;19047:1;19036:9;19032:17;19025:47;19089:131;19215:4;19089:131;:::i;:::-;19081:139;;18808:419;;;:::o;19233:179::-;19373:31;19369:1;19361:6;19357:14;19350:55;19233:179;:::o;19418:366::-;19560:3;19581:67;19645:2;19640:3;19581:67;:::i;:::-;19574:74;;19657:93;19746:3;19657:93;:::i;:::-;19775:2;19770:3;19766:12;19759:19;;19418:366;;;:::o;19790:419::-;19956:4;19994:2;19983:9;19979:18;19971:26;;20043:9;20037:4;20033:20;20029:1;20018:9;20014:17;20007:47;20071:131;20197:4;20071:131;:::i;:::-;20063:139;;19790:419;;;:::o;20215:224::-;20355:34;20351:1;20343:6;20339:14;20332:58;20424:7;20419:2;20411:6;20407:15;20400:32;20215:224;:::o;20445:366::-;20587:3;20608:67;20672:2;20667:3;20608:67;:::i;:::-;20601:74;;20684:93;20773:3;20684:93;:::i;:::-;20802:2;20797:3;20793:12;20786:19;;20445:366;;;:::o;20817:419::-;20983:4;21021:2;21010:9;21006:18;20998:26;;21070:9;21064:4;21060:20;21056:1;21045:9;21041:17;21034:47;21098:131;21224:4;21098:131;:::i;:::-;21090:139;;20817:419;;;:::o;21242:222::-;21382:34;21378:1;21370:6;21366:14;21359:58;21451:5;21446:2;21438:6;21434:15;21427:30;21242:222;:::o;21470:366::-;21612:3;21633:67;21697:2;21692:3;21633:67;:::i;:::-;21626:74;;21709:93;21798:3;21709:93;:::i;:::-;21827:2;21822:3;21818:12;21811:19;;21470:366;;;:::o;21842:419::-;22008:4;22046:2;22035:9;22031:18;22023:26;;22095:9;22089:4;22085:20;22081:1;22070:9;22066:17;22059:47;22123:131;22249:4;22123:131;:::i;:::-;22115:139;;21842:419;;;:::o;22267:228::-;22407:34;22403:1;22395:6;22391:14;22384:58;22476:11;22471:2;22463:6;22459:15;22452:36;22267:228;:::o;22501:366::-;22643:3;22664:67;22728:2;22723:3;22664:67;:::i;:::-;22657:74;;22740:93;22829:3;22740:93;:::i;:::-;22858:2;22853:3;22849:12;22842:19;;22501:366;;;:::o;22873:419::-;23039:4;23077:2;23066:9;23062:18;23054:26;;23126:9;23120:4;23116:20;23112:1;23101:9;23097:17;23090:47;23154:131;23280:4;23154:131;:::i;:::-;23146:139;;22873:419;;;:::o;23298:182::-;23438:34;23434:1;23426:6;23422:14;23415:58;23298:182;:::o;23486:366::-;23628:3;23649:67;23713:2;23708:3;23649:67;:::i;:::-;23642:74;;23725:93;23814:3;23725:93;:::i;:::-;23843:2;23838:3;23834:12;23827:19;;23486:366;;;:::o;23858:419::-;24024:4;24062:2;24051:9;24047:18;24039:26;;24111:9;24105:4;24101:20;24097:1;24086:9;24082:17;24075:47;24139:131;24265:4;24139:131;:::i;:::-;24131:139;;23858:419;;;:::o;24283:223::-;24423:34;24419:1;24411:6;24407:14;24400:58;24492:6;24487:2;24479:6;24475:15;24468:31;24283:223;:::o;24512:366::-;24654:3;24675:67;24739:2;24734:3;24675:67;:::i;:::-;24668:74;;24751:93;24840:3;24751:93;:::i;:::-;24869:2;24864:3;24860:12;24853:19;;24512:366;;;:::o;24884:419::-;25050:4;25088:2;25077:9;25073:18;25065:26;;25137:9;25131:4;25127:20;25123:1;25112:9;25108:17;25101:47;25165:131;25291:4;25165:131;:::i;:::-;25157:139;;24884:419;;;:::o;25309:194::-;25349:4;25369:20;25387:1;25369:20;:::i;:::-;25364:25;;25403:20;25421:1;25403:20;:::i;:::-;25398:25;;25447:1;25444;25440:9;25432:17;;25471:1;25465:4;25462:11;25459:37;;;25476:18;;:::i;:::-;25459:37;25309:194;;;;:::o;25509:180::-;25557:77;25554:1;25547:88;25654:4;25651:1;25644:15;25678:4;25675:1;25668:15;25695:185;25735:1;25752:20;25770:1;25752:20;:::i;:::-;25747:25;;25786:20;25804:1;25786:20;:::i;:::-;25781:25;;25825:1;25815:35;;25830:18;;:::i;:::-;25815:35;25872:1;25869;25865:9;25860:14;;25695:185;;;;:::o;25886:168::-;26026:20;26022:1;26014:6;26010:14;26003:44;25886:168;:::o;26060:366::-;26202:3;26223:67;26287:2;26282:3;26223:67;:::i;:::-;26216:74;;26299:93;26388:3;26299:93;:::i;:::-;26417:2;26412:3;26408:12;26401:19;;26060:366;;;:::o;26432:419::-;26598:4;26636:2;26625:9;26621:18;26613:26;;26685:9;26679:4;26675:20;26671:1;26660:9;26656:17;26649:47;26713:131;26839:4;26713:131;:::i;:::-;26705:139;;26432:419;;;:::o;26857:169::-;26997:21;26993:1;26985:6;26981:14;26974:45;26857:169;:::o;27032:366::-;27174:3;27195:67;27259:2;27254:3;27195:67;:::i;:::-;27188:74;;27271:93;27360:3;27271:93;:::i;:::-;27389:2;27384:3;27380:12;27373:19;;27032:366;;;:::o;27404:419::-;27570:4;27608:2;27597:9;27593:18;27585:26;;27657:9;27651:4;27647:20;27643:1;27632:9;27628:17;27621:47;27685:131;27811:4;27685:131;:::i;:::-;27677:139;;27404:419;;;:::o;27829:320::-;27944:4;27982:2;27971:9;27967:18;27959:26;;27995:71;28063:1;28052:9;28048:17;28039:6;27995:71;:::i;:::-;28076:66;28138:2;28127:9;28123:18;28114:6;28076:66;:::i;:::-;27829:320;;;;;:::o;28155:220::-;28295:34;28291:1;28283:6;28279:14;28272:58;28364:3;28359:2;28351:6;28347:15;28340:28;28155:220;:::o;28381:366::-;28523:3;28544:67;28608:2;28603:3;28544:67;:::i;:::-;28537:74;;28620:93;28709:3;28620:93;:::i;:::-;28738:2;28733:3;28729:12;28722:19;;28381:366;;;:::o;28753:419::-;28919:4;28957:2;28946:9;28942:18;28934:26;;29006:9;29000:4;28996:20;28992:1;28981:9;28977:17;28970:47;29034:131;29160:4;29034:131;:::i;:::-;29026:139;;28753:419;;;:::o;29178:221::-;29318:34;29314:1;29306:6;29302:14;29295:58;29387:4;29382:2;29374:6;29370:15;29363:29;29178:221;:::o;29405:366::-;29547:3;29568:67;29632:2;29627:3;29568:67;:::i;:::-;29561:74;;29644:93;29733:3;29644:93;:::i;:::-;29762:2;29757:3;29753:12;29746:19;;29405:366;;;:::o;29777:419::-;29943:4;29981:2;29970:9;29966:18;29958:26;;30030:9;30024:4;30020:20;30016:1;30005:9;30001:17;29994:47;30058:131;30184:4;30058:131;:::i;:::-;30050:139;;29777:419;;;:::o;30202:180::-;30250:77;30247:1;30240:88;30347:4;30344:1;30337:15;30371:4;30368:1;30361:15;30388:180;30436:77;30433:1;30426:88;30533:4;30530:1;30523:15;30557:4;30554:1;30547:15;30574:143;30631:5;30662:6;30656:13;30647:22;;30678:33;30705:5;30678:33;:::i;:::-;30574:143;;;;:::o;30723:351::-;30793:6;30842:2;30830:9;30821:7;30817:23;30813:32;30810:119;;;30848:79;;:::i;:::-;30810:119;30968:1;30993:64;31049:7;31040:6;31029:9;31025:22;30993:64;:::i;:::-;30983:74;;30939:128;30723:351;;;;:::o;31080:85::-;31125:7;31154:5;31143:16;;31080:85;;;:::o;31171:158::-;31229:9;31262:61;31280:42;31289:32;31315:5;31289:32;:::i;:::-;31280:42;:::i;:::-;31262:61;:::i;:::-;31249:74;;31171:158;;;:::o;31335:147::-;31430:45;31469:5;31430:45;:::i;:::-;31425:3;31418:58;31335:147;;:::o;31488:114::-;31555:6;31589:5;31583:12;31573:22;;31488:114;;;:::o;31608:184::-;31707:11;31741:6;31736:3;31729:19;31781:4;31776:3;31772:14;31757:29;;31608:184;;;;:::o;31798:132::-;31865:4;31888:3;31880:11;;31918:4;31913:3;31909:14;31901:22;;31798:132;;;:::o;31936:108::-;32013:24;32031:5;32013:24;:::i;:::-;32008:3;32001:37;31936:108;;:::o;32050:179::-;32119:10;32140:46;32182:3;32174:6;32140:46;:::i;:::-;32218:4;32213:3;32209:14;32195:28;;32050:179;;;;:::o;32235:113::-;32305:4;32337;32332:3;32328:14;32320:22;;32235:113;;;:::o;32384:732::-;32503:3;32532:54;32580:5;32532:54;:::i;:::-;32602:86;32681:6;32676:3;32602:86;:::i;:::-;32595:93;;32712:56;32762:5;32712:56;:::i;:::-;32791:7;32822:1;32807:284;32832:6;32829:1;32826:13;32807:284;;;32908:6;32902:13;32935:63;32994:3;32979:13;32935:63;:::i;:::-;32928:70;;33021:60;33074:6;33021:60;:::i;:::-;33011:70;;32867:224;32854:1;32851;32847:9;32842:14;;32807:284;;;32811:14;33107:3;33100:10;;32508:608;;;32384:732;;;;:::o;33122:831::-;33385:4;33423:3;33412:9;33408:19;33400:27;;33437:71;33505:1;33494:9;33490:17;33481:6;33437:71;:::i;:::-;33518:80;33594:2;33583:9;33579:18;33570:6;33518:80;:::i;:::-;33645:9;33639:4;33635:20;33630:2;33619:9;33615:18;33608:48;33673:108;33776:4;33767:6;33673:108;:::i;:::-;33665:116;;33791:72;33859:2;33848:9;33844:18;33835:6;33791:72;:::i;:::-;33873:73;33941:3;33930:9;33926:19;33917:6;33873:73;:::i;:::-;33122:831;;;;;;;;:::o;33959:225::-;34099:34;34095:1;34087:6;34083:14;34076:58;34168:8;34163:2;34155:6;34151:15;34144:33;33959:225;:::o;34190:366::-;34332:3;34353:67;34417:2;34412:3;34353:67;:::i;:::-;34346:74;;34429:93;34518:3;34429:93;:::i;:::-;34547:2;34542:3;34538:12;34531:19;;34190:366;;;:::o;34562:419::-;34728:4;34766:2;34755:9;34751:18;34743:26;;34815:9;34809:4;34805:20;34801:1;34790:9;34786:17;34779:47;34843:131;34969:4;34843:131;:::i;:::-;34835:139;;34562:419;;;:::o;34987:807::-;35236:4;35274:3;35263:9;35259:19;35251:27;;35288:71;35356:1;35345:9;35341:17;35332:6;35288:71;:::i;:::-;35369:72;35437:2;35426:9;35422:18;35413:6;35369:72;:::i;:::-;35451:80;35527:2;35516:9;35512:18;35503:6;35451:80;:::i;:::-;35541;35617:2;35606:9;35602:18;35593:6;35541:80;:::i;:::-;35631:73;35699:3;35688:9;35684:19;35675:6;35631:73;:::i;:::-;35714;35782:3;35771:9;35767:19;35758:6;35714:73;:::i;:::-;34987:807;;;;;;;;;:::o;35800:143::-;35857:5;35888:6;35882:13;35873:22;;35904:33;35931:5;35904:33;:::i;:::-;35800:143;;;;:::o;35949:663::-;36037:6;36045;36053;36102:2;36090:9;36081:7;36077:23;36073:32;36070:119;;;36108:79;;:::i;:::-;36070:119;36228:1;36253:64;36309:7;36300:6;36289:9;36285:22;36253:64;:::i;:::-;36243:74;;36199:128;36366:2;36392:64;36448:7;36439:6;36428:9;36424:22;36392:64;:::i;:::-;36382:74;;36337:129;36505:2;36531:64;36587:7;36578:6;36567:9;36563:22;36531:64;:::i;:::-;36521:74;;36476:129;35949:663;;;;;:::o

Swarm Source

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