ETH Price: $3,908.88 (+0.01%)

Token

UPLOAD (UPLOAD)
 

Overview

Max Total Supply

1,000,000,000 UPLOAD

Holders

1,137 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (-3.05%)

Onchain Market Cap

$165,443.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
33 UPLOAD

Value
$0.01 ( ~2.55827794110885E-06 Eth) [0.0000%]
0xc16bcb16ea5789469ff297d27e841cb021572887
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Upload3D allows you to scan real-world objects in 3D using your smartphone and convert them into NFTs.

Market

Volume (24H):$177.07
Market Capitalization:$0.00
Circulating Supply:0.00 UPLOAD
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
1
Uniswap V2 (Ethereum)
0XD3CC3B3E226CF187181C57F8BCC2FA84250DF651-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.0002
0.0000000 Eth
$176.53
1,070,303.688 0XD3CC3B3E226CF187181C57F8BCC2FA84250DF651
100.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
UPLOAD

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
App Store: https://apps.apple.com/us/app/upload3d/id6472455535

Website: https://www.uploadtoken.io

Discord : https://discord.com/invite/kBJ6juAF

Youtube: https://youtube.com/@uploadtokenofficial?si=_xVyhAR0r24-7nXl

TikTok:  https://www.tiktok.com/@uploadtoken

Twitter: https://x.com/uploadtoken

Telegram: https://t.me/Upload_Portal
*/

//  SPDX-License-Identifier: MIT
pragma solidity >=0.8.19;

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

}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function 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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

        return true;
    }

    function _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 {}
}

library SafeMath {

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public lpWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event LimitsRemoved();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

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

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

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

    constructor() ERC20("UPLOAD", "UPLOAD") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 19;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 18;

        uint256 _sellMarketingFee = 19;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 18;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 1) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

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

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x76BB84E554336a3DfB4bA2866751A0Fd4D032938); 
        devWallet = address(0x76BB84E554336a3DfB4bA2866751A0Fd4D032938);
        lpWallet = msg.sender;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);

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

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

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

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

        if (limitsInEffect) {
            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."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        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 any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpWallet,
            block.timestamp
        );
    }

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

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

        // Halve the amount of liquidity tokens
        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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"LimitsRemoved","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":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpWalletUpdated","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":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","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"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600681526020017f55504c4f414400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f55504c4f414400000000000000000000000000000000000000000000000000008152508160039081620000e0919062000e06565b508060049081620000f2919062000e06565b50505062000115620001096200064d60201b60201c565b6200065560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001418160016200071b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e7919062000f57565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062000f57565b6040518363ffffffff1660e01b81526004016200029492919062000f9a565b6020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062000f57565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032260a05160016200071b60201b60201c565b6200033760a05160016200080560201b60201c565b600060139050600080601290506000601390506000806012905060006b033b2e3c9fd0803ce80000009050606460018262000373919062000ff6565b6200037f919062001070565b600981905550606460018262000396919062000ff6565b620003a2919062001070565b600b81905550612710600582620003ba919062000ff6565b620003c6919062001070565b600a8190555086600e8190555085600f8190555084601081905550601054600f54600e54620003f69190620010a8565b620004029190620010a8565b600d81905550836012819055508260138190555081601481905550601454601354601254620004329190620010a8565b6200043e9190620010a8565b6011819055507376bb84e554336a3dfb4ba2866751a0fd4d032938600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507376bb84e554336a3dfb4ba2866751a0fd4d032938600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055162000543620008a660201b60201c565b6001620008d060201b60201c565b62000564306001620008d060201b60201c565b6200057961dead6001620008d060201b60201c565b620005ae600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008d060201b60201c565b620005d0620005c2620008a660201b60201c565b60016200071b60201b60201c565b620005e33060016200071b60201b60201c565b620005f861dead60016200071b60201b60201c565b6200062d600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200071b60201b60201c565b6200063f338262000a0a60201b60201c565b505050505050505062001240565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200072b6200064d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000751620008a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a19062001144565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008e06200064d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000906620008a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200095f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009569062001144565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009fe919062001183565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7390620011f0565b60405180910390fd5b62000a906000838362000b8260201b60201c565b806002600082825462000aa49190620010a8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000afb9190620010a8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b62919062001223565b60405180910390a362000b7e6000838362000b8760201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c0e57607f821691505b60208210810362000c245762000c2362000bc6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c4f565b62000c9a868362000c4f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ce762000ce162000cdb8462000cb2565b62000cbc565b62000cb2565b9050919050565b6000819050919050565b62000d038362000cc6565b62000d1b62000d128262000cee565b84845462000c5c565b825550505050565b600090565b62000d3262000d23565b62000d3f81848462000cf8565b505050565b5b8181101562000d675762000d5b60008262000d28565b60018101905062000d45565b5050565b601f82111562000db65762000d808162000c2a565b62000d8b8462000c3f565b8101602085101562000d9b578190505b62000db362000daa8562000c3f565b83018262000d44565b50505b505050565b600082821c905092915050565b600062000ddb6000198460080262000dbb565b1980831691505092915050565b600062000df6838362000dc8565b9150826002028217905092915050565b62000e118262000b8c565b67ffffffffffffffff81111562000e2d5762000e2c62000b97565b5b62000e39825462000bf5565b62000e4682828562000d6b565b600060209050601f83116001811462000e7e576000841562000e69578287015190505b62000e75858262000de8565b86555062000ee5565b601f19841662000e8e8662000c2a565b60005b8281101562000eb85784890151825560018201915060208501945060208101905062000e91565b8683101562000ed8578489015162000ed4601f89168262000dc8565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f1f8262000ef2565b9050919050565b62000f318162000f12565b811462000f3d57600080fd5b50565b60008151905062000f518162000f26565b92915050565b60006020828403121562000f705762000f6f62000eed565b5b600062000f808482850162000f40565b91505092915050565b62000f948162000f12565b82525050565b600060408201905062000fb1600083018562000f89565b62000fc0602083018462000f89565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010038262000cb2565b9150620010108362000cb2565b9250828202620010208162000cb2565b915082820484148315176200103a576200103962000fc7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200107d8262000cb2565b91506200108a8362000cb2565b9250826200109d576200109c62001041565b5b828204905092915050565b6000620010b58262000cb2565b9150620010c28362000cb2565b9250828201905080821115620010dd57620010dc62000fc7565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200112c602083620010e3565b91506200113982620010f4565b602082019050919050565b600060208201905081810360008301526200115f816200111d565b9050919050565b60008115159050919050565b6200117d8162001166565b82525050565b60006020820190506200119a600083018462001172565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d8601f83620010e3565b9150620011e582620011a0565b602082019050919050565b600060208201905081810360008301526200120b81620011c9565b9050919050565b6200121d8162000cb2565b82525050565b60006020820190506200123a600083018462001212565b92915050565b60805160a051614d4362001290600039600081816111e701526118bc015260008181610daf015281816137300152818161381101528181613838015281816138d401526138fb0152614d436000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063bbc0c742116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c35578063f637434214610c5e578063f8b45b0514610c89578063fbc10c5514610cb457610340565b8063dd62ed3e14610ba2578063e2f4560514610bdf578063f11a24d314610c0a57610340565b8063c18bc195116100d1578063c18bc19514610ae6578063c8c8ebe414610b0f578063d257b34f14610b3a578063d85ba06314610b7757610340565b8063bbc0c74214610a69578063c024666814610a94578063c17b5b8c14610abd57610340565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d714610989578063a9059cbb146109c6578063aacebbe314610a03578063b62496f514610a2c57610340565b80639c3b4fdc146109085780639fccce3214610933578063a0d82dc51461095e57610340565b80638da5cb5b1461080a5780638ea5220f146108355780639213691314610860578063924de9b71461088b57806395d89b41146108b45780639a7a23d6146108df57610340565b806349bd5a5e11610285578063715018a61161022357806375f0a874116101fd57806375f0a874146107745780637bce5a041461079f5780638095d564146107ca5780638a8c523c146107f357610340565b8063715018a614610709578063751039fc146107205780637571336a1461074b57610340565b80636303516c1161025f5780636303516c1461064b5780636a486a8e146106765780636ddd1713146106a157806370a08231146106cc57610340565b806349bd5a5e146105b85780634a62bb65146105e35780634fbee1931461060e57610340565b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104e857806327c8f83514610525578063313ce56714610550578063395093511461057b57610340565b80631a8145bb146104695780631f3fed8f14610494578063203e727e146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631816467f1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cdd565b6040516103679190613a5a565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613b15565b610d6f565b6040516103a49190613b70565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613b8b565b610d8d565b6040516103e19190613b70565b60405180910390f35b3480156103f657600080fd5b506103ff610dad565b60405161040c9190613c17565b60405180910390f35b34801561042157600080fd5b5061042a610dd1565b6040516104379190613c41565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613b8b565b610ddb565b005b34801561047557600080fd5b5061047e610f17565b60405161048b9190613c41565b60405180910390f35b3480156104a057600080fd5b506104a9610f1d565b6040516104b69190613c41565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190613c5c565b610f23565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190613c89565b611032565b60405161051c9190613b70565b60405180910390f35b34801561053157600080fd5b5061053a61112a565b6040516105479190613ceb565b60405180910390f35b34801561055c57600080fd5b50610565611130565b6040516105729190613d22565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190613b15565b611139565b6040516105af9190613b70565b60405180910390f35b3480156105c457600080fd5b506105cd6111e5565b6040516105da9190613ceb565b60405180910390f35b3480156105ef57600080fd5b506105f8611209565b6040516106059190613b70565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190613b8b565b61121c565b6040516106429190613b70565b60405180910390f35b34801561065757600080fd5b50610660611272565b60405161066d9190613ceb565b60405180910390f35b34801561068257600080fd5b5061068b611298565b6040516106989190613c41565b60405180910390f35b3480156106ad57600080fd5b506106b661129e565b6040516106c39190613b70565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613b8b565b6112b1565b6040516107009190613c41565b60405180910390f35b34801561071557600080fd5b5061071e6112f9565b005b34801561072c57600080fd5b50610735611381565b6040516107429190613b70565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190613d69565b61144d565b005b34801561078057600080fd5b50610789611524565b6040516107969190613ceb565b60405180910390f35b3480156107ab57600080fd5b506107b461154a565b6040516107c19190613c41565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613da9565b611550565b005b3480156107ff57600080fd5b50610808611609565b005b34801561081657600080fd5b5061081f6116bd565b60405161082c9190613ceb565b60405180910390f35b34801561084157600080fd5b5061084a6116e7565b6040516108579190613ceb565b60405180910390f35b34801561086c57600080fd5b5061087561170d565b6040516108829190613c41565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190613dfc565b611713565b005b3480156108c057600080fd5b506108c96117ac565b6040516108d69190613a5a565b60405180910390f35b3480156108eb57600080fd5b5061090660048036038101906109019190613d69565b61183e565b005b34801561091457600080fd5b5061091d611956565b60405161092a9190613c41565b60405180910390f35b34801561093f57600080fd5b5061094861195c565b6040516109559190613c41565b60405180910390f35b34801561096a57600080fd5b50610973611962565b6040516109809190613c41565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190613b15565b611968565b6040516109bd9190613b70565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190613b15565b611a53565b6040516109fa9190613b70565b60405180910390f35b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613b8b565b611a71565b005b348015610a3857600080fd5b50610a536004803603810190610a4e9190613b8b565b611bad565b604051610a609190613b70565b60405180910390f35b348015610a7557600080fd5b50610a7e611bcd565b604051610a8b9190613b70565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613d69565b611be0565b005b348015610ac957600080fd5b50610ae46004803603810190610adf9190613da9565b611d05565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613c5c565b611dbe565b005b348015610b1b57600080fd5b50610b24611ecd565b604051610b319190613c41565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c9190613c5c565b611ed3565b604051610b6e9190613b70565b60405180910390f35b348015610b8357600080fd5b50610b8c612028565b604051610b999190613c41565b60405180910390f35b348015610bae57600080fd5b50610bc96004803603810190610bc49190613e29565b61202e565b604051610bd69190613c41565b60405180910390f35b348015610beb57600080fd5b50610bf46120b5565b604051610c019190613c41565b60405180910390f35b348015610c1657600080fd5b50610c1f6120bb565b604051610c2c9190613c41565b60405180910390f35b348015610c4157600080fd5b50610c5c6004803603810190610c579190613b8b565b6120c1565b005b348015610c6a57600080fd5b50610c736121b8565b604051610c809190613c41565b60405180910390f35b348015610c9557600080fd5b50610c9e6121be565b604051610cab9190613c41565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd69190613b8b565b6121c4565b005b606060038054610cec90613e98565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1890613e98565b8015610d655780601f10610d3a57610100808354040283529160200191610d65565b820191906000526020600020905b815481529060010190602001808311610d4857829003601f168201915b5050505050905090565b6000610d83610d7c612300565b8484612308565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610de3612300565b73ffffffffffffffffffffffffffffffffffffffff16610e016116bd565b73ffffffffffffffffffffffffffffffffffffffff1614610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90613f15565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610f2b612300565b73ffffffffffffffffffffffffffffffffffffffff16610f496116bd565b73ffffffffffffffffffffffffffffffffffffffff1614610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613f15565b60405180910390fd5b670de0b6b3a76400006103e86001610fb5610dd1565b610fbf9190613f64565b610fc99190613fd5565b610fd39190613fd5565b811015611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c90614078565b60405180910390fd5b670de0b6b3a7640000816110299190613f64565b60098190555050565b600061103f8484846124d1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108a612300565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561110a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111019061410a565b60405180910390fd5b61111e85611116612300565b858403612308565b60019150509392505050565b61dead81565b60006012905090565b60006111db611146612300565b848460016000611154612300565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d6919061412a565b612308565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611301612300565b73ffffffffffffffffffffffffffffffffffffffff1661131f6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90613f15565b60405180910390fd5b61137f6000612fa0565b565b600061138b612300565b73ffffffffffffffffffffffffffffffffffffffff166113a96116bd565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613f15565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b611455612300565b73ffffffffffffffffffffffffffffffffffffffff166114736116bd565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090613f15565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611558612300565b73ffffffffffffffffffffffffffffffffffffffff166115766116bd565b73ffffffffffffffffffffffffffffffffffffffff16146115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613f15565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546115f4919061412a565b6115fe919061412a565b600d81905550505050565b611611612300565b73ffffffffffffffffffffffffffffffffffffffff1661162f6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90613f15565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b61171b612300565b73ffffffffffffffffffffffffffffffffffffffff166117396116bd565b73ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613f15565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546117bb90613e98565b80601f01602080910402602001604051908101604052809291908181526020018280546117e790613e98565b80156118345780601f1061180957610100808354040283529160200191611834565b820191906000526020600020905b81548152906001019060200180831161181757829003601f168201915b5050505050905090565b611846612300565b73ffffffffffffffffffffffffffffffffffffffff166118646116bd565b73ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190613f15565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f906141d0565b60405180910390fd5b6119528282613066565b5050565b60105481565b60175481565b60145481565b60008060016000611977612300565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614262565b60405180910390fd5b611a48611a3f612300565b85858403612308565b600191505092915050565b6000611a67611a60612300565b84846124d1565b6001905092915050565b611a79612300565b73ffffffffffffffffffffffffffffffffffffffff16611a976116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613f15565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611be8612300565b73ffffffffffffffffffffffffffffffffffffffff16611c066116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5390613f15565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cf99190613b70565b60405180910390a25050565b611d0d612300565b73ffffffffffffffffffffffffffffffffffffffff16611d2b6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890613f15565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611da9919061412a565b611db3919061412a565b601181905550505050565b611dc6612300565b73ffffffffffffffffffffffffffffffffffffffff16611de46116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613f15565b60405180910390fd5b670de0b6b3a76400006103e86005611e50610dd1565b611e5a9190613f64565b611e649190613fd5565b611e6e9190613fd5565b811015611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea7906142f4565b60405180910390fd5b670de0b6b3a764000081611ec49190613f64565b600b8190555050565b60095481565b6000611edd612300565b73ffffffffffffffffffffffffffffffffffffffff16611efb6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613f15565b60405180910390fd5b620186a06001611f5f610dd1565b611f699190613f64565b611f739190613fd5565b821015611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90614386565b60405180910390fd5b6103e86005611fc2610dd1565b611fcc9190613f64565b611fd69190613fd5565b821115612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614418565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600f5481565b6120c9612300565b73ffffffffffffffffffffffffffffffffffffffff166120e76116bd565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613f15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a3906144aa565b60405180910390fd5b6121b581612fa0565b50565b60135481565b600b5481565b6121cc612300565b73ffffffffffffffffffffffffffffffffffffffff166121ea6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613f15565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e9061453c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd906145ce565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c49190613c41565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253790614660565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a6906146f2565b60405180910390fd5b600081036125c8576125c383836000613107565b612f9b565b600c60009054906101000a900460ff1615612ac3576125e56116bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561265357506126236116bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561268c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126df5750600560149054906101000a900460ff16155b15612ac257600c60019054906101000a900460ff166127d957601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127995750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf9061475e565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561287c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612923576009548111156128c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bd906147f0565b60405180910390fd5b600b546128d2836112b1565b826128dd919061412a565b111561291e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129159061485c565b60405180910390fd5b612ac1565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129c65750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1557600954811115612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a07906148ee565b60405180910390fd5b612ac0565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612abf57600b54612a72836112b1565b82612a7d919061412a565b1115612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab59061485c565b60405180910390fd5b5b5b5b5b5b6000612ace306112b1565b90506000600a548210159050808015612af35750600c60029054906101000a900460ff165b8015612b0c5750600560149054906101000a900460ff16155b8015612b625750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bb85750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c0e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c52576001600560146101000a81548160ff021916908315150217905550612c36613386565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d085750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d1257600090505b60008115612f8b57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d7557506000601154115b15612e4257612da26064612d946011548861364590919063ffffffff16565b61365b90919063ffffffff16565b905060115460135482612db59190613f64565b612dbf9190613fd5565b60166000828254612dd0919061412a565b9250508190555060115460145482612de89190613f64565b612df29190613fd5565b60176000828254612e03919061412a565b9250508190555060115460125482612e1b9190613f64565b612e259190613fd5565b60156000828254612e36919061412a565b92505081905550612f67565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9d57506000600d54115b15612f6657612eca6064612ebc600d548861364590919063ffffffff16565b61365b90919063ffffffff16565b9050600d54600f5482612edd9190613f64565b612ee79190613fd5565b60166000828254612ef8919061412a565b92505081905550600d5460105482612f109190613f64565b612f1a9190613fd5565b60176000828254612f2b919061412a565b92505081905550600d54600e5482612f439190613f64565b612f4d9190613fd5565b60156000828254612f5e919061412a565b925050819055505b5b6000811115612f7c57612f7b873083613107565b5b8085612f88919061490e565b94505b612f96878787613107565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316d90614660565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dc906146f2565b60405180910390fd5b6131f0838383613671565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326d906149b4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613309919061412a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161336d9190613c41565b60405180910390a3613380848484613676565b50505050565b6000613391306112b1565b905060006017546015546016546133a8919061412a565b6133b2919061412a565b90506000808314806133c45750600082145b156133d157505050613643565b6000600283601654866133e49190613f64565b6133ee9190613fd5565b6133f89190613fd5565b9050600061340f828661367b90919063ffffffff16565b9050600047905061341f82613691565b6000613434824761367b90919063ffffffff16565b9050600061345f876134516015548561364590919063ffffffff16565b61365b90919063ffffffff16565b9050600061348a8861347c6017548661364590919063ffffffff16565b61365b90919063ffffffff16565b9050600081838561349b919061490e565b6134a5919061490e565b9050600060168190555060006015819055506000601781905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161350590614a05565b60006040518083038185875af1925050503d8060008114613542576040519150601f19603f3d011682016040523d82523d6000602084013e613547565b606091505b50508098505060008711801561355d5750600081115b156135aa5761356c87826138ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826016546040516135a193929190614a1a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135f090614a05565b60006040518083038185875af1925050503d806000811461362d576040519150601f19603f3d011682016040523d82523d6000602084013e613632565b606091505b505080985050505050505050505050505b565b600081836136539190613f64565b905092915050565b600081836136699190613fd5565b905092915050565b505050565b505050565b60008183613689919061490e565b905092915050565b6000600267ffffffffffffffff8111156136ae576136ad614a51565b5b6040519080825280602002602001820160405280156136dc5781602001602082028036833780820191505090505b50905030816000815181106136f4576136f3614a80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190614ac4565b816001815181106137d1576137d0614a80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613836307f000000000000000000000000000000000000000000000000000000000000000084612308565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613898959493929190614bea565b600060405180830381600087803b1580156138b257600080fd5b505af11580156138c6573d6000803e3d6000fd5b505050505050565b6138f9307f000000000000000000000000000000000000000000000000000000000000000084612308565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161398096959493929190614c44565b60606040518083038185885af115801561399e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139c39190614cba565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a045780820151818401526020810190506139e9565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a2c826139ca565b613a3681856139d5565b9350613a468185602086016139e6565b613a4f81613a10565b840191505092915050565b60006020820190508181036000830152613a748184613a21565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aac82613a81565b9050919050565b613abc81613aa1565b8114613ac757600080fd5b50565b600081359050613ad981613ab3565b92915050565b6000819050919050565b613af281613adf565b8114613afd57600080fd5b50565b600081359050613b0f81613ae9565b92915050565b60008060408385031215613b2c57613b2b613a7c565b5b6000613b3a85828601613aca565b9250506020613b4b85828601613b00565b9150509250929050565b60008115159050919050565b613b6a81613b55565b82525050565b6000602082019050613b856000830184613b61565b92915050565b600060208284031215613ba157613ba0613a7c565b5b6000613baf84828501613aca565b91505092915050565b6000819050919050565b6000613bdd613bd8613bd384613a81565b613bb8565b613a81565b9050919050565b6000613bef82613bc2565b9050919050565b6000613c0182613be4565b9050919050565b613c1181613bf6565b82525050565b6000602082019050613c2c6000830184613c08565b92915050565b613c3b81613adf565b82525050565b6000602082019050613c566000830184613c32565b92915050565b600060208284031215613c7257613c71613a7c565b5b6000613c8084828501613b00565b91505092915050565b600080600060608486031215613ca257613ca1613a7c565b5b6000613cb086828701613aca565b9350506020613cc186828701613aca565b9250506040613cd286828701613b00565b9150509250925092565b613ce581613aa1565b82525050565b6000602082019050613d006000830184613cdc565b92915050565b600060ff82169050919050565b613d1c81613d06565b82525050565b6000602082019050613d376000830184613d13565b92915050565b613d4681613b55565b8114613d5157600080fd5b50565b600081359050613d6381613d3d565b92915050565b60008060408385031215613d8057613d7f613a7c565b5b6000613d8e85828601613aca565b9250506020613d9f85828601613d54565b9150509250929050565b600080600060608486031215613dc257613dc1613a7c565b5b6000613dd086828701613b00565b9350506020613de186828701613b00565b9250506040613df286828701613b00565b9150509250925092565b600060208284031215613e1257613e11613a7c565b5b6000613e2084828501613d54565b91505092915050565b60008060408385031215613e4057613e3f613a7c565b5b6000613e4e85828601613aca565b9250506020613e5f85828601613aca565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613eb057607f821691505b602082108103613ec357613ec2613e69565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613eff6020836139d5565b9150613f0a82613ec9565b602082019050919050565b60006020820190508181036000830152613f2e81613ef2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f6f82613adf565b9150613f7a83613adf565b9250828202613f8881613adf565b91508282048414831517613f9f57613f9e613f35565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fe082613adf565b9150613feb83613adf565b925082613ffb57613ffa613fa6565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614062602f836139d5565b915061406d82614006565b604082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140f46028836139d5565b91506140ff82614098565b604082019050919050565b60006020820190508181036000830152614123816140e7565b9050919050565b600061413582613adf565b915061414083613adf565b925082820190508082111561415857614157613f35565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141ba6039836139d5565b91506141c58261415e565b604082019050919050565b600060208201905081810360008301526141e9816141ad565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061424c6025836139d5565b9150614257826141f0565b604082019050919050565b6000602082019050818103600083015261427b8161423f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006142de6024836139d5565b91506142e982614282565b604082019050919050565b6000602082019050818103600083015261430d816142d1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143706035836139d5565b915061437b82614314565b604082019050919050565b6000602082019050818103600083015261439f81614363565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144026034836139d5565b915061440d826143a6565b604082019050919050565b60006020820190508181036000830152614431816143f5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144946026836139d5565b915061449f82614438565b604082019050919050565b600060208201905081810360008301526144c381614487565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145266024836139d5565b9150614531826144ca565b604082019050919050565b6000602082019050818103600083015261455581614519565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145b86022836139d5565b91506145c38261455c565b604082019050919050565b600060208201905081810360008301526145e7816145ab565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061464a6025836139d5565b9150614655826145ee565b604082019050919050565b600060208201905081810360008301526146798161463d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146dc6023836139d5565b91506146e782614680565b604082019050919050565b6000602082019050818103600083015261470b816146cf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006147486016836139d5565b915061475382614712565b602082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147da6035836139d5565b91506147e58261477e565b604082019050919050565b60006020820190508181036000830152614809816147cd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006148466013836139d5565b915061485182614810565b602082019050919050565b6000602082019050818103600083015261487581614839565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148d86036836139d5565b91506148e38261487c565b604082019050919050565b60006020820190508181036000830152614907816148cb565b9050919050565b600061491982613adf565b915061492483613adf565b925082820390508181111561493c5761493b613f35565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061499e6026836139d5565b91506149a982614942565b604082019050919050565b600060208201905081810360008301526149cd81614991565b9050919050565b600081905092915050565b50565b60006149ef6000836149d4565b91506149fa826149df565b600082019050919050565b6000614a10826149e2565b9150819050919050565b6000606082019050614a2f6000830186613c32565b614a3c6020830185613c32565b614a496040830184613c32565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614abe81613ab3565b92915050565b600060208284031215614ada57614ad9613a7c565b5b6000614ae884828501614aaf565b91505092915050565b6000819050919050565b6000614b16614b11614b0c84614af1565b613bb8565b613adf565b9050919050565b614b2681614afb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b6181613aa1565b82525050565b6000614b738383614b58565b60208301905092915050565b6000602082019050919050565b6000614b9782614b2c565b614ba18185614b37565b9350614bac83614b48565b8060005b83811015614bdd578151614bc48882614b67565b9750614bcf83614b7f565b925050600181019050614bb0565b5085935050505092915050565b600060a082019050614bff6000830188613c32565b614c0c6020830187614b1d565b8181036040830152614c1e8186614b8c565b9050614c2d6060830185613cdc565b614c3a6080830184613c32565b9695505050505050565b600060c082019050614c596000830189613cdc565b614c666020830188613c32565b614c736040830187614b1d565b614c806060830186614b1d565b614c8d6080830185613cdc565b614c9a60a0830184613c32565b979650505050505050565b600081519050614cb481613ae9565b92915050565b600080600060608486031215614cd357614cd2613a7c565b5b6000614ce186828701614ca5565b9350506020614cf286828701614ca5565b9250506040614d0386828701614ca5565b915050925092509256fea2646970667358221220a8b2cfd4ff8a3d1d97ee8a8efb9302eb9864121a290abf22c35c8518b6376c9164736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063bbc0c742116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c35578063f637434214610c5e578063f8b45b0514610c89578063fbc10c5514610cb457610340565b8063dd62ed3e14610ba2578063e2f4560514610bdf578063f11a24d314610c0a57610340565b8063c18bc195116100d1578063c18bc19514610ae6578063c8c8ebe414610b0f578063d257b34f14610b3a578063d85ba06314610b7757610340565b8063bbc0c74214610a69578063c024666814610a94578063c17b5b8c14610abd57610340565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d714610989578063a9059cbb146109c6578063aacebbe314610a03578063b62496f514610a2c57610340565b80639c3b4fdc146109085780639fccce3214610933578063a0d82dc51461095e57610340565b80638da5cb5b1461080a5780638ea5220f146108355780639213691314610860578063924de9b71461088b57806395d89b41146108b45780639a7a23d6146108df57610340565b806349bd5a5e11610285578063715018a61161022357806375f0a874116101fd57806375f0a874146107745780637bce5a041461079f5780638095d564146107ca5780638a8c523c146107f357610340565b8063715018a614610709578063751039fc146107205780637571336a1461074b57610340565b80636303516c1161025f5780636303516c1461064b5780636a486a8e146106765780636ddd1713146106a157806370a08231146106cc57610340565b806349bd5a5e146105b85780634a62bb65146105e35780634fbee1931461060e57610340565b80631a8145bb116102f257806323b872dd116102cc57806323b872dd146104e857806327c8f83514610525578063313ce56714610550578063395093511461057b57610340565b80631a8145bb146104695780631f3fed8f14610494578063203e727e146104bf57610340565b806306fdde0314610345578063095ea7b31461037057806310d5de53146103ad5780631694505e146103ea57806318160ddd146104155780631816467f1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610cdd565b6040516103679190613a5a565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613b15565b610d6f565b6040516103a49190613b70565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613b8b565b610d8d565b6040516103e19190613b70565b60405180910390f35b3480156103f657600080fd5b506103ff610dad565b60405161040c9190613c17565b60405180910390f35b34801561042157600080fd5b5061042a610dd1565b6040516104379190613c41565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613b8b565b610ddb565b005b34801561047557600080fd5b5061047e610f17565b60405161048b9190613c41565b60405180910390f35b3480156104a057600080fd5b506104a9610f1d565b6040516104b69190613c41565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190613c5c565b610f23565b005b3480156104f457600080fd5b5061050f600480360381019061050a9190613c89565b611032565b60405161051c9190613b70565b60405180910390f35b34801561053157600080fd5b5061053a61112a565b6040516105479190613ceb565b60405180910390f35b34801561055c57600080fd5b50610565611130565b6040516105729190613d22565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190613b15565b611139565b6040516105af9190613b70565b60405180910390f35b3480156105c457600080fd5b506105cd6111e5565b6040516105da9190613ceb565b60405180910390f35b3480156105ef57600080fd5b506105f8611209565b6040516106059190613b70565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190613b8b565b61121c565b6040516106429190613b70565b60405180910390f35b34801561065757600080fd5b50610660611272565b60405161066d9190613ceb565b60405180910390f35b34801561068257600080fd5b5061068b611298565b6040516106989190613c41565b60405180910390f35b3480156106ad57600080fd5b506106b661129e565b6040516106c39190613b70565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613b8b565b6112b1565b6040516107009190613c41565b60405180910390f35b34801561071557600080fd5b5061071e6112f9565b005b34801561072c57600080fd5b50610735611381565b6040516107429190613b70565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190613d69565b61144d565b005b34801561078057600080fd5b50610789611524565b6040516107969190613ceb565b60405180910390f35b3480156107ab57600080fd5b506107b461154a565b6040516107c19190613c41565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613da9565b611550565b005b3480156107ff57600080fd5b50610808611609565b005b34801561081657600080fd5b5061081f6116bd565b60405161082c9190613ceb565b60405180910390f35b34801561084157600080fd5b5061084a6116e7565b6040516108579190613ceb565b60405180910390f35b34801561086c57600080fd5b5061087561170d565b6040516108829190613c41565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190613dfc565b611713565b005b3480156108c057600080fd5b506108c96117ac565b6040516108d69190613a5a565b60405180910390f35b3480156108eb57600080fd5b5061090660048036038101906109019190613d69565b61183e565b005b34801561091457600080fd5b5061091d611956565b60405161092a9190613c41565b60405180910390f35b34801561093f57600080fd5b5061094861195c565b6040516109559190613c41565b60405180910390f35b34801561096a57600080fd5b50610973611962565b6040516109809190613c41565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190613b15565b611968565b6040516109bd9190613b70565b60405180910390f35b3480156109d257600080fd5b506109ed60048036038101906109e89190613b15565b611a53565b6040516109fa9190613b70565b60405180910390f35b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613b8b565b611a71565b005b348015610a3857600080fd5b50610a536004803603810190610a4e9190613b8b565b611bad565b604051610a609190613b70565b60405180910390f35b348015610a7557600080fd5b50610a7e611bcd565b604051610a8b9190613b70565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613d69565b611be0565b005b348015610ac957600080fd5b50610ae46004803603810190610adf9190613da9565b611d05565b005b348015610af257600080fd5b50610b0d6004803603810190610b089190613c5c565b611dbe565b005b348015610b1b57600080fd5b50610b24611ecd565b604051610b319190613c41565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c9190613c5c565b611ed3565b604051610b6e9190613b70565b60405180910390f35b348015610b8357600080fd5b50610b8c612028565b604051610b999190613c41565b60405180910390f35b348015610bae57600080fd5b50610bc96004803603810190610bc49190613e29565b61202e565b604051610bd69190613c41565b60405180910390f35b348015610beb57600080fd5b50610bf46120b5565b604051610c019190613c41565b60405180910390f35b348015610c1657600080fd5b50610c1f6120bb565b604051610c2c9190613c41565b60405180910390f35b348015610c4157600080fd5b50610c5c6004803603810190610c579190613b8b565b6120c1565b005b348015610c6a57600080fd5b50610c736121b8565b604051610c809190613c41565b60405180910390f35b348015610c9557600080fd5b50610c9e6121be565b604051610cab9190613c41565b60405180910390f35b348015610cc057600080fd5b50610cdb6004803603810190610cd69190613b8b565b6121c4565b005b606060038054610cec90613e98565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1890613e98565b8015610d655780601f10610d3a57610100808354040283529160200191610d65565b820191906000526020600020905b815481529060010190602001808311610d4857829003601f168201915b5050505050905090565b6000610d83610d7c612300565b8484612308565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610de3612300565b73ffffffffffffffffffffffffffffffffffffffff16610e016116bd565b73ffffffffffffffffffffffffffffffffffffffff1614610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e90613f15565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610f2b612300565b73ffffffffffffffffffffffffffffffffffffffff16610f496116bd565b73ffffffffffffffffffffffffffffffffffffffff1614610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613f15565b60405180910390fd5b670de0b6b3a76400006103e86001610fb5610dd1565b610fbf9190613f64565b610fc99190613fd5565b610fd39190613fd5565b811015611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c90614078565b60405180910390fd5b670de0b6b3a7640000816110299190613f64565b60098190555050565b600061103f8484846124d1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061108a612300565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561110a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111019061410a565b60405180910390fd5b61111e85611116612300565b858403612308565b60019150509392505050565b61dead81565b60006012905090565b60006111db611146612300565b848460016000611154612300565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d6919061412a565b612308565b6001905092915050565b7f000000000000000000000000594fe7c3d4c52c0e9ab377bc6d8acd66adc8ea9d81565b600c60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611301612300565b73ffffffffffffffffffffffffffffffffffffffff1661131f6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90613f15565b60405180910390fd5b61137f6000612fa0565b565b600061138b612300565b73ffffffffffffffffffffffffffffffffffffffff166113a96116bd565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613f15565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b611455612300565b73ffffffffffffffffffffffffffffffffffffffff166114736116bd565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090613f15565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611558612300565b73ffffffffffffffffffffffffffffffffffffffff166115766116bd565b73ffffffffffffffffffffffffffffffffffffffff16146115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613f15565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546115f4919061412a565b6115fe919061412a565b600d81905550505050565b611611612300565b73ffffffffffffffffffffffffffffffffffffffff1661162f6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90613f15565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b61171b612300565b73ffffffffffffffffffffffffffffffffffffffff166117396116bd565b73ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178690613f15565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546117bb90613e98565b80601f01602080910402602001604051908101604052809291908181526020018280546117e790613e98565b80156118345780601f1061180957610100808354040283529160200191611834565b820191906000526020600020905b81548152906001019060200180831161181757829003601f168201915b5050505050905090565b611846612300565b73ffffffffffffffffffffffffffffffffffffffff166118646116bd565b73ffffffffffffffffffffffffffffffffffffffff16146118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190613f15565b60405180910390fd5b7f000000000000000000000000594fe7c3d4c52c0e9ab377bc6d8acd66adc8ea9d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f906141d0565b60405180910390fd5b6119528282613066565b5050565b60105481565b60175481565b60145481565b60008060016000611977612300565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90614262565b60405180910390fd5b611a48611a3f612300565b85858403612308565b600191505092915050565b6000611a67611a60612300565b84846124d1565b6001905092915050565b611a79612300565b73ffffffffffffffffffffffffffffffffffffffff16611a976116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613f15565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611be8612300565b73ffffffffffffffffffffffffffffffffffffffff16611c066116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5390613f15565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cf99190613b70565b60405180910390a25050565b611d0d612300565b73ffffffffffffffffffffffffffffffffffffffff16611d2b6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890613f15565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611da9919061412a565b611db3919061412a565b601181905550505050565b611dc6612300565b73ffffffffffffffffffffffffffffffffffffffff16611de46116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3190613f15565b60405180910390fd5b670de0b6b3a76400006103e86005611e50610dd1565b611e5a9190613f64565b611e649190613fd5565b611e6e9190613fd5565b811015611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea7906142f4565b60405180910390fd5b670de0b6b3a764000081611ec49190613f64565b600b8190555050565b60095481565b6000611edd612300565b73ffffffffffffffffffffffffffffffffffffffff16611efb6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4890613f15565b60405180910390fd5b620186a06001611f5f610dd1565b611f699190613f64565b611f739190613fd5565b821015611fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fac90614386565b60405180910390fd5b6103e86005611fc2610dd1565b611fcc9190613f64565b611fd69190613fd5565b821115612018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200f90614418565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600f5481565b6120c9612300565b73ffffffffffffffffffffffffffffffffffffffff166120e76116bd565b73ffffffffffffffffffffffffffffffffffffffff161461213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613f15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a3906144aa565b60405180910390fd5b6121b581612fa0565b50565b60135481565b600b5481565b6121cc612300565b73ffffffffffffffffffffffffffffffffffffffff166121ea6116bd565b73ffffffffffffffffffffffffffffffffffffffff1614612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613f15565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e9061453c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd906145ce565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c49190613c41565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253790614660565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a6906146f2565b60405180910390fd5b600081036125c8576125c383836000613107565b612f9b565b600c60009054906101000a900460ff1615612ac3576125e56116bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561265357506126236116bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561268c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126df5750600560149054906101000a900460ff16155b15612ac257600c60019054906101000a900460ff166127d957601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127995750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf9061475e565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561287c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612923576009548111156128c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bd906147f0565b60405180910390fd5b600b546128d2836112b1565b826128dd919061412a565b111561291e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129159061485c565b60405180910390fd5b612ac1565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129c65750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a1557600954811115612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a07906148ee565b60405180910390fd5b612ac0565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612abf57600b54612a72836112b1565b82612a7d919061412a565b1115612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab59061485c565b60405180910390fd5b5b5b5b5b5b6000612ace306112b1565b90506000600a548210159050808015612af35750600c60029054906101000a900460ff165b8015612b0c5750600560149054906101000a900460ff16155b8015612b625750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bb85750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c0e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c52576001600560146101000a81548160ff021916908315150217905550612c36613386565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d085750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d1257600090505b60008115612f8b57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d7557506000601154115b15612e4257612da26064612d946011548861364590919063ffffffff16565b61365b90919063ffffffff16565b905060115460135482612db59190613f64565b612dbf9190613fd5565b60166000828254612dd0919061412a565b9250508190555060115460145482612de89190613f64565b612df29190613fd5565b60176000828254612e03919061412a565b9250508190555060115460125482612e1b9190613f64565b612e259190613fd5565b60156000828254612e36919061412a565b92505081905550612f67565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9d57506000600d54115b15612f6657612eca6064612ebc600d548861364590919063ffffffff16565b61365b90919063ffffffff16565b9050600d54600f5482612edd9190613f64565b612ee79190613fd5565b60166000828254612ef8919061412a565b92505081905550600d5460105482612f109190613f64565b612f1a9190613fd5565b60176000828254612f2b919061412a565b92505081905550600d54600e5482612f439190613f64565b612f4d9190613fd5565b60156000828254612f5e919061412a565b925050819055505b5b6000811115612f7c57612f7b873083613107565b5b8085612f88919061490e565b94505b612f96878787613107565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316d90614660565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dc906146f2565b60405180910390fd5b6131f0838383613671565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326d906149b4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613309919061412a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161336d9190613c41565b60405180910390a3613380848484613676565b50505050565b6000613391306112b1565b905060006017546015546016546133a8919061412a565b6133b2919061412a565b90506000808314806133c45750600082145b156133d157505050613643565b6000600283601654866133e49190613f64565b6133ee9190613fd5565b6133f89190613fd5565b9050600061340f828661367b90919063ffffffff16565b9050600047905061341f82613691565b6000613434824761367b90919063ffffffff16565b9050600061345f876134516015548561364590919063ffffffff16565b61365b90919063ffffffff16565b9050600061348a8861347c6017548661364590919063ffffffff16565b61365b90919063ffffffff16565b9050600081838561349b919061490e565b6134a5919061490e565b9050600060168190555060006015819055506000601781905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161350590614a05565b60006040518083038185875af1925050503d8060008114613542576040519150601f19603f3d011682016040523d82523d6000602084013e613547565b606091505b50508098505060008711801561355d5750600081115b156135aa5761356c87826138ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826016546040516135a193929190614a1a565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135f090614a05565b60006040518083038185875af1925050503d806000811461362d576040519150601f19603f3d011682016040523d82523d6000602084013e613632565b606091505b505080985050505050505050505050505b565b600081836136539190613f64565b905092915050565b600081836136699190613fd5565b905092915050565b505050565b505050565b60008183613689919061490e565b905092915050565b6000600267ffffffffffffffff8111156136ae576136ad614a51565b5b6040519080825280602002602001820160405280156136dc5781602001602082028036833780820191505090505b50905030816000815181106136f4576136f3614a80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190614ac4565b816001815181106137d1576137d0614a80565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613836307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612308565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613898959493929190614bea565b600060405180830381600087803b1580156138b257600080fd5b505af11580156138c6573d6000803e3d6000fd5b505050505050565b6138f9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612308565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161398096959493929190614c44565b60606040518083038185885af115801561399e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139c39190614cba565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a045780820151818401526020810190506139e9565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a2c826139ca565b613a3681856139d5565b9350613a468185602086016139e6565b613a4f81613a10565b840191505092915050565b60006020820190508181036000830152613a748184613a21565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613aac82613a81565b9050919050565b613abc81613aa1565b8114613ac757600080fd5b50565b600081359050613ad981613ab3565b92915050565b6000819050919050565b613af281613adf565b8114613afd57600080fd5b50565b600081359050613b0f81613ae9565b92915050565b60008060408385031215613b2c57613b2b613a7c565b5b6000613b3a85828601613aca565b9250506020613b4b85828601613b00565b9150509250929050565b60008115159050919050565b613b6a81613b55565b82525050565b6000602082019050613b856000830184613b61565b92915050565b600060208284031215613ba157613ba0613a7c565b5b6000613baf84828501613aca565b91505092915050565b6000819050919050565b6000613bdd613bd8613bd384613a81565b613bb8565b613a81565b9050919050565b6000613bef82613bc2565b9050919050565b6000613c0182613be4565b9050919050565b613c1181613bf6565b82525050565b6000602082019050613c2c6000830184613c08565b92915050565b613c3b81613adf565b82525050565b6000602082019050613c566000830184613c32565b92915050565b600060208284031215613c7257613c71613a7c565b5b6000613c8084828501613b00565b91505092915050565b600080600060608486031215613ca257613ca1613a7c565b5b6000613cb086828701613aca565b9350506020613cc186828701613aca565b9250506040613cd286828701613b00565b9150509250925092565b613ce581613aa1565b82525050565b6000602082019050613d006000830184613cdc565b92915050565b600060ff82169050919050565b613d1c81613d06565b82525050565b6000602082019050613d376000830184613d13565b92915050565b613d4681613b55565b8114613d5157600080fd5b50565b600081359050613d6381613d3d565b92915050565b60008060408385031215613d8057613d7f613a7c565b5b6000613d8e85828601613aca565b9250506020613d9f85828601613d54565b9150509250929050565b600080600060608486031215613dc257613dc1613a7c565b5b6000613dd086828701613b00565b9350506020613de186828701613b00565b9250506040613df286828701613b00565b9150509250925092565b600060208284031215613e1257613e11613a7c565b5b6000613e2084828501613d54565b91505092915050565b60008060408385031215613e4057613e3f613a7c565b5b6000613e4e85828601613aca565b9250506020613e5f85828601613aca565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613eb057607f821691505b602082108103613ec357613ec2613e69565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613eff6020836139d5565b9150613f0a82613ec9565b602082019050919050565b60006020820190508181036000830152613f2e81613ef2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f6f82613adf565b9150613f7a83613adf565b9250828202613f8881613adf565b91508282048414831517613f9f57613f9e613f35565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613fe082613adf565b9150613feb83613adf565b925082613ffb57613ffa613fa6565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614062602f836139d5565b915061406d82614006565b604082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140f46028836139d5565b91506140ff82614098565b604082019050919050565b60006020820190508181036000830152614123816140e7565b9050919050565b600061413582613adf565b915061414083613adf565b925082820190508082111561415857614157613f35565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141ba6039836139d5565b91506141c58261415e565b604082019050919050565b600060208201905081810360008301526141e9816141ad565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061424c6025836139d5565b9150614257826141f0565b604082019050919050565b6000602082019050818103600083015261427b8161423f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006142de6024836139d5565b91506142e982614282565b604082019050919050565b6000602082019050818103600083015261430d816142d1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006143706035836139d5565b915061437b82614314565b604082019050919050565b6000602082019050818103600083015261439f81614363565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144026034836139d5565b915061440d826143a6565b604082019050919050565b60006020820190508181036000830152614431816143f5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144946026836139d5565b915061449f82614438565b604082019050919050565b600060208201905081810360008301526144c381614487565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145266024836139d5565b9150614531826144ca565b604082019050919050565b6000602082019050818103600083015261455581614519565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145b86022836139d5565b91506145c38261455c565b604082019050919050565b600060208201905081810360008301526145e7816145ab565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061464a6025836139d5565b9150614655826145ee565b604082019050919050565b600060208201905081810360008301526146798161463d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146dc6023836139d5565b91506146e782614680565b604082019050919050565b6000602082019050818103600083015261470b816146cf565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006147486016836139d5565b915061475382614712565b602082019050919050565b600060208201905081810360008301526147778161473b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147da6035836139d5565b91506147e58261477e565b604082019050919050565b60006020820190508181036000830152614809816147cd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006148466013836139d5565b915061485182614810565b602082019050919050565b6000602082019050818103600083015261487581614839565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148d86036836139d5565b91506148e38261487c565b604082019050919050565b60006020820190508181036000830152614907816148cb565b9050919050565b600061491982613adf565b915061492483613adf565b925082820390508181111561493c5761493b613f35565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061499e6026836139d5565b91506149a982614942565b604082019050919050565b600060208201905081810360008301526149cd81614991565b9050919050565b600081905092915050565b50565b60006149ef6000836149d4565b91506149fa826149df565b600082019050919050565b6000614a10826149e2565b9150819050919050565b6000606082019050614a2f6000830186613c32565b614a3c6020830185613c32565b614a496040830184613c32565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614abe81613ab3565b92915050565b600060208284031215614ada57614ad9613a7c565b5b6000614ae884828501614aaf565b91505092915050565b6000819050919050565b6000614b16614b11614b0c84614af1565b613bb8565b613adf565b9050919050565b614b2681614afb565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b6181613aa1565b82525050565b6000614b738383614b58565b60208301905092915050565b6000602082019050919050565b6000614b9782614b2c565b614ba18185614b37565b9350614bac83614b48565b8060005b83811015614bdd578151614bc48882614b67565b9750614bcf83614b7f565b925050600181019050614bb0565b5085935050505092915050565b600060a082019050614bff6000830188613c32565b614c0c6020830187614b1d565b8181036040830152614c1e8186614b8c565b9050614c2d6060830185613cdc565b614c3a6080830184613c32565b9695505050505050565b600060c082019050614c596000830189613cdc565b614c666020830188613c32565b614c736040830187614b1d565b614c806060830186614b1d565b614c8d6080830185613cdc565b614c9a60a0830184613c32565b979650505050505050565b600081519050614cb481613ae9565b92915050565b600080600060608486031215614cd357614cd2613a7c565b5b6000614ce186828701614ca5565b9350506020614cf286828701614ca5565b9250506040614d0386828701614ca5565b915050925092509256fea2646970667358221220a8b2cfd4ff8a3d1d97ee8a8efb9302eb9864121a290abf22c35c8518b6376c9164736f6c63430008130033

Deployed Bytecode Sourcemap

12541:15266:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2906:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3820:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13687:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12617:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3227:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20775:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13471:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13431;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18042:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3997:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12720:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3126:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4497:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12675:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13027:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20940:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12880:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13286:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13106:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3343:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1028:103;;;;;;;;;;;;;:::i;:::-;;17315:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18589:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12812:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13179;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18960:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17151:112;;;;;;;;;;;;;:::i;:::-;;805:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12849:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13321:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18852:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3014:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19838:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13253:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13511:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13397:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4720:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3478:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20346:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13908:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13067:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19648:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19300:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18325:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12912:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17537:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13145:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3661:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12954:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13216:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1139:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13359:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12994:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20585:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2906:100;2960:13;2993:5;2986:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2906:100;:::o;3820:169::-;3903:4;3920:39;3929:12;:10;:12::i;:::-;3943:7;3952:6;3920:8;:39::i;:::-;3977:4;3970:11;;3820:169;;;;:::o;13687:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12617:51::-;;;:::o;3227:108::-;3288:7;3315:12;;3308:19;;3227:108;:::o;20775:157::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20882:9:::1;;;;;;;;;;;20854:38;;20871:9;20854:38;;;;;;;;;;;;20915:9;20903;;:21;;;;;;;;;;;;;;;;;;20775:157:::0;:::o;13471:33::-;;;;:::o;13431:::-;;;;:::o;18042:275::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18179:4:::1;18171;18166:1;18150:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18149:26;;;;:::i;:::-;18148:35;;;;:::i;:::-;18138:6;:45;;18116:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;18302:6;18292;:17;;;;:::i;:::-;18269:20;:40;;;;18042:275:::0;:::o;3997:492::-;4137:4;4154:36;4164:6;4172:9;4183:6;4154:9;:36::i;:::-;4203:24;4230:11;:19;4242:6;4230:19;;;;;;;;;;;;;;;:33;4250:12;:10;:12::i;:::-;4230:33;;;;;;;;;;;;;;;;4203:60;;4302:6;4282:16;:26;;4274:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4389:57;4398:6;4406:12;:10;:12::i;:::-;4439:6;4420:16;:25;4389:8;:57::i;:::-;4477:4;4470:11;;;3997:492;;;;;:::o;12720:53::-;12766:6;12720:53;:::o;3126:93::-;3184:5;3209:2;3202:9;;3126:93;:::o;4497:215::-;4585:4;4602:80;4611:12;:10;:12::i;:::-;4625:7;4671:10;4634:11;:25;4646:12;:10;:12::i;:::-;4634:25;;;;;;;;;;;;;;;:34;4660:7;4634:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4602:8;:80::i;:::-;4700:4;4693:11;;4497:215;;;;:::o;12675:38::-;;;:::o;13027:33::-;;;;;;;;;;;;;:::o;20940:126::-;21006:4;21030:19;:28;21050:7;21030:28;;;;;;;;;;;;;;;;;;;;;;;;;21023:35;;20940:126;;;:::o;12880:23::-;;;;;;;;;;;;;:::o;13286:28::-;;;;:::o;13106:30::-;;;;;;;;;;;;;:::o;3343:127::-;3417:7;3444:9;:18;3454:7;3444:18;;;;;;;;;;;;;;;;3437:25;;3343:127;;;:::o;1028:103::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1093:30:::1;1120:1;1093:18;:30::i;:::-;1028:103::o:0;17315:152::-;17367:4;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17401:5:::1;17384:14;;:22;;;;;;;;;;;;;;;;;;17422:15;;;;;;;;;;17455:4;17448:11;;17315:152:::0;:::o;18589:167::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18744:4:::1;18702:31;:39;18734:6;18702:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18589:167:::0;;:::o;12812:30::-;;;;;;;;;;;;;:::o;13179:::-;;;;:::o;18960:332::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19128:13:::1;19110:15;:31;;;;19170:13;19152:15;:31;;;;19206:7;19194:9;:19;;;;19275:9;;19257:15;;19239;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;19224:12;:60;;;;18960:332:::0;;;:::o;17151:112::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17222:4:::1;17206:13;;:20;;;;;;;;;;;;;;;;;;17251:4;17237:11;;:18;;;;;;;;;;;;;;;;;;17151:112::o:0;805:87::-;851:7;878:6;;;;;;;;;;;871:13;;805:87;:::o;12849:24::-;;;;;;;;;;;;;:::o;13321:31::-;;;;:::o;18852:100::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18937:7:::1;18923:11;;:21;;;;;;;;;;;;;;;;;;18852:100:::0;:::o;3014:104::-;3070:13;3103:7;3096:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3014:104;:::o;19838:304::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19982:13:::1;19974:21;;:4;:21;;::::0;19952:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20093:41;20122:4;20128:5;20093:28;:41::i;:::-;19838:304:::0;;:::o;13253:24::-;;;;:::o;13511:27::-;;;;:::o;13397:25::-;;;;:::o;4720:413::-;4813:4;4830:24;4857:11;:25;4869:12;:10;:12::i;:::-;4857:25;;;;;;;;;;;;;;;:34;4883:7;4857:34;;;;;;;;;;;;;;;;4830:61;;4930:15;4910:16;:35;;4902:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5023:67;5032:12;:10;:12::i;:::-;5046:7;5074:15;5055:16;:34;5023:8;:67::i;:::-;5121:4;5114:11;;;4720:413;;;;:::o;3478:175::-;3564:4;3581:42;3591:12;:10;:12::i;:::-;3605:9;3616:6;3581:9;:42::i;:::-;3641:4;3634:11;;3478:175;;;;:::o;20346:231::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20506:15:::1;;;;;;;;;;;20463:59;;20486:18;20463:59;;;;;;;;;;;;20551:18;20533:15;;:36;;;;;;;;;;;;;;;;;;20346:231:::0;:::o;13908:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;13067:32::-;;;;;;;;;;;;;:::o;19648:182::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19764:8:::1;19733:19;:28;19753:7;19733:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19804:7;19788:34;;;19813:8;19788:34;;;;;;:::i;:::-;;;;;;;;19648:182:::0;;:::o;19300:340::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19470:13:::1;19451:16;:32;;;;19513:13;19494:16;:32;;;;19550:7;19537:10;:20;;;;19622:10;;19603:16;;19584;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;19568:13;:64;;;;19300:340:::0;;;:::o;18325:256::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18465:4:::1;18457;18452:1;18436:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18435:26;;;;:::i;:::-;18434:35;;;;:::i;:::-;18424:6;:45;;18402:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18566:6;18556;:17;;;;:::i;:::-;18544:9;:29;;;;18325:256:::0;:::o;12912:35::-;;;;:::o;17537:497::-;17645:4;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17724:6:::1;17719:1;17703:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17702:28;;;;:::i;:::-;17689:9;:41;;17667:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;17879:4;17874:1;17858:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17857:26;;;;:::i;:::-;17844:9;:39;;17822:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;17995:9;17974:18;:30;;;;18022:4;18015:11;;17537:497:::0;;;:::o;13145:27::-;;;;:::o;3661:151::-;3750:7;3777:11;:18;3789:5;3777:18;;;;;;;;;;;;;;;:27;3796:7;3777:27;;;;;;;;;;;;;;;;3770:34;;3661:151;;;;:::o;12954:33::-;;;;:::o;13216:30::-;;;;:::o;1139:201::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1248:1:::1;1228:22;;:8;:22;;::::0;1220:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1304:28;1323:8;1304:18;:28::i;:::-;1139:201:::0;:::o;13359:31::-;;;;:::o;12994:24::-;;;;:::o;20585:182::-;951:12;:10;:12::i;:::-;940:23;;:7;:5;:7::i;:::-;:23;;;932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20717:8:::1;;;;;;;;;;;20688:38;;20704:11;20688:38;;;;;;;;;;;;20748:11;20737:8;;:22;;;;;;;;;;;;;;;;;;20585:182:::0;:::o;458:98::-;511:7;538:10;531:17;;458:98;:::o;6289:380::-;6442:1;6425:19;;:5;:19;;;6417:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6523:1;6504:21;;:7;:21;;;6496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6607:6;6577:11;:18;6589:5;6577:18;;;;;;;;;;;;;;;:27;6596:7;6577:27;;;;;;;;;;;;;;;:36;;;;6645:7;6629:32;;6638:5;6629:32;;;6654:6;6629:32;;;;;;:::i;:::-;;;;;;;;6289:380;;;:::o;21124:3924::-;21272:1;21256:18;;:4;:18;;;21248:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21349:1;21335:16;;:2;:16;;;21327:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21418:1;21408:6;:11;21404:93;;21436:28;21452:4;21458:2;21462:1;21436:15;:28::i;:::-;21479:7;;21404:93;21513:14;;;;;;;;;;;21509:1694;;;21574:7;:5;:7::i;:::-;21566:15;;:4;:15;;;;:49;;;;;21608:7;:5;:7::i;:::-;21602:13;;:2;:13;;;;21566:49;:86;;;;;21650:1;21636:16;;:2;:16;;;;21566:86;:128;;;;;21687:6;21673:21;;:2;:21;;;;21566:128;:158;;;;;21716:8;;;;;;;;;;;21715:9;21566:158;21544:1648;;;21764:13;;;;;;;;;;;21759:223;;21836:19;:25;21856:4;21836:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21865:19;:23;21885:2;21865:23;;;;;;;;;;;;;;;;;;;;;;;;;21836:52;21802:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21759:223;22056:25;:31;22082:4;22056:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22113:31;:35;22145:2;22113:35;;;;;;;;;;;;;;;;;;;;;;;;;22112:36;22056:92;22030:1147;;;22235:20;;22225:6;:30;;22191:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;22443:9;;22426:13;22436:2;22426:9;:13::i;:::-;22417:6;:22;;;;:::i;:::-;:35;;22383:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22030:1147;;;22621:25;:29;22647:2;22621:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22676:31;:37;22708:4;22676:37;;;;;;;;;;;;;;;;;;;;;;;;;22675:38;22621:92;22595:582;;;22800:20;;22790:6;:30;;22756:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;22595:582;;;22957:31;:35;22989:2;22957:35;;;;;;;;;;;;;;;;;;;;;;;;;22952:225;;23077:9;;23060:13;23070:2;23060:9;:13::i;:::-;23051:6;:22;;;;:::i;:::-;:35;;23017:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22952:225;22595:582;22030:1147;21544:1648;21509:1694;23215:28;23246:24;23264:4;23246:9;:24::i;:::-;23215:55;;23283:12;23322:18;;23298:20;:42;;23283:57;;23371:7;:35;;;;;23395:11;;;;;;;;;;;23371:35;:61;;;;;23424:8;;;;;;;;;;;23423:9;23371:61;:110;;;;;23450:25;:31;23476:4;23450:31;;;;;;;;;;;;;;;;;;;;;;;;;23449:32;23371:110;:153;;;;;23499:19;:25;23519:4;23499:25;;;;;;;;;;;;;;;;;;;;;;;;;23498:26;23371:153;:194;;;;;23542:19;:23;23562:2;23542:23;;;;;;;;;;;;;;;;;;;;;;;;;23541:24;23371:194;23353:326;;;23603:4;23592:8;;:15;;;;;;;;;;;;;;;;;;23624:10;:8;:10::i;:::-;23662:5;23651:8;;:16;;;;;;;;;;;;;;;;;;23353:326;23691:12;23707:8;;;;;;;;;;;23706:9;23691:24;;23817:19;:25;23837:4;23817:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23846:19;:23;23866:2;23846:23;;;;;;;;;;;;;;;;;;;;;;;;;23817:52;23813:100;;;23896:5;23886:15;;23813:100;23925:12;24030:7;24026:969;;;24082:25;:29;24108:2;24082:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24131:1;24115:13;;:17;24082:50;24078:768;;;24160:34;24190:3;24160:25;24171:13;;24160:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;24153:41;;24263:13;;24243:16;;24236:4;:23;;;;:::i;:::-;24235:41;;;;:::i;:::-;24213:18;;:63;;;;;;;:::i;:::-;;;;;;;;24333:13;;24319:10;;24312:4;:17;;;;:::i;:::-;24311:35;;;;:::i;:::-;24295:12;;:51;;;;;;;:::i;:::-;;;;;;;;24415:13;;24395:16;;24388:4;:23;;;;:::i;:::-;24387:41;;;;:::i;:::-;24365:18;;:63;;;;;;;:::i;:::-;;;;;;;;24078:768;;;24490:25;:31;24516:4;24490:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24540:1;24525:12;;:16;24490:51;24486:360;;;24569:33;24598:3;24569:24;24580:12;;24569:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24562:40;;24670:12;;24651:15;;24644:4;:22;;;;:::i;:::-;24643:39;;;;:::i;:::-;24621:18;;:61;;;;;;;:::i;:::-;;;;;;;;24738:12;;24725:9;;24718:4;:16;;;;:::i;:::-;24717:33;;;;:::i;:::-;24701:12;;:49;;;;;;;:::i;:::-;;;;;;;;24818:12;;24799:15;;24792:4;:22;;;;:::i;:::-;24791:39;;;;:::i;:::-;24769:18;;:61;;;;;;;:::i;:::-;;;;;;;;24486:360;24078:768;24873:1;24866:4;:8;24862:91;;;24895:42;24911:4;24925;24932;24895:15;:42::i;:::-;24862:91;24979:4;24969:14;;;;;:::i;:::-;;;24026:969;25007:33;25023:4;25029:2;25033:6;25007:15;:33::i;:::-;21237:3811;;;;21124:3924;;;;:::o;1348:191::-;1422:16;1441:6;;;;;;;;;;;1422:25;;1467:8;1458:6;;:17;;;;;;;;;;;;;;;;;;1522:8;1491:40;;1512:8;1491:40;;;;;;;;;;;;1411:128;1348:191;:::o;20150:188::-;20267:5;20233:25;:31;20259:4;20233:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20324:5;20290:40;;20318:4;20290:40;;;;;;;;;;;;20150:188;;:::o;5141:733::-;5299:1;5281:20;;:6;:20;;;5273:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5383:1;5362:23;;:9;:23;;;5354:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5438:47;5459:6;5467:9;5478:6;5438:20;:47::i;:::-;5498:21;5522:9;:17;5532:6;5522:17;;;;;;;;;;;;;;;;5498:41;;5575:6;5558:13;:23;;5550:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:6;5680:13;:22;5660:9;:17;5670:6;5660:17;;;;;;;;;;;;;;;:42;;;;5748:6;5724:9;:20;5734:9;5724:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5789:9;5772:35;;5781:6;5772:35;;;5800:6;5772:35;;;;;;:::i;:::-;;;;;;;;5820:46;5840:6;5848:9;5859:6;5820:19;:46::i;:::-;5262:612;5141:733;;;:::o;26175:1629::-;26214:23;26240:24;26258:4;26240:9;:24::i;:::-;26214:50;;26275:25;26371:12;;26337:18;;26303;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26275:108;;26394:12;26442:1;26423:15;:20;:46;;;;26468:1;26447:17;:22;26423:46;26419:85;;;26486:7;;;;;26419:85;26565:23;26678:1;26645:17;26610:18;;26592:15;:36;;;;:::i;:::-;26591:71;;;;:::i;:::-;:88;;;;:::i;:::-;26565:114;;26690:26;26719:36;26739:15;26719;:19;;:36;;;;:::i;:::-;26690:65;;26768:25;26796:21;26768:49;;26830:36;26847:18;26830:16;:36::i;:::-;26879:18;26900:44;26926:17;26900:21;:25;;:44;;;;:::i;:::-;26879:65;;26957:23;26983:81;27036:17;26983:34;26998:18;;26983:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;26957:107;;27075:17;27095:51;27128:17;27095:28;27110:12;;27095:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;27075:71;;27159:23;27216:9;27198:15;27185:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;27159:66;;27259:1;27238:18;:22;;;;27292:1;27271:18;:22;;;;27319:1;27304:12;:16;;;;27355:9;;;;;;;;;;;27347:23;;27378:9;27347:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27333:59;;;;;27427:1;27409:15;:19;:42;;;;;27450:1;27432:15;:19;27409:42;27405:278;;;27468:46;27481:15;27498;27468:12;:46::i;:::-;27534:137;27567:18;27604:15;27638:18;;27534:137;;;;;;;;:::i;:::-;;;;;;;;27405:278;27717:15;;;;;;;;;;;27709:29;;27760:21;27709:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27695:101;;;;;26203:1601;;;;;;;;;;26175:1629;:::o;7073:98::-;7131:7;7162:1;7158;:5;;;;:::i;:::-;7151:12;;7073:98;;;;:::o;7179:::-;7237:7;7268:1;7264;:5;;;;:::i;:::-;7257:12;;7179:98;;;;:::o;6677:125::-;;;;:::o;6810:124::-;;;;:::o;6967:98::-;7025:7;7056:1;7052;:5;;;;:::i;:::-;7045:12;;6967:98;;;;:::o;25056:589::-;25182:21;25220:1;25206:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25182:40;;25251:4;25233;25238:1;25233:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25277:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25267:4;25272:1;25267:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25312:62;25329:4;25344:15;25362:11;25312:8;:62::i;:::-;25413:15;:66;;;25494:11;25520:1;25564:4;25591;25611:15;25413:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25111:534;25056:589;:::o;25653:514::-;25801:62;25818:4;25833:15;25851:11;25801:8;:62::i;:::-;25906:15;:31;;;25945:9;25978:4;25998:11;26024:1;26067;26110:8;;;;;;;;;;;26133:15;25906:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25653:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:227::-;12675:34;12671:1;12663:6;12659:14;12652:58;12744:10;12739:2;12731:6;12727:15;12720:35;12535:227;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:244::-;13902:34;13898:1;13890:6;13886:14;13879:58;13971:27;13966:2;13958:6;13954:15;13947:52;13762:244;:::o;14012:366::-;14154:3;14175:67;14239:2;14234:3;14175:67;:::i;:::-;14168:74;;14251:93;14340:3;14251:93;:::i;:::-;14369:2;14364:3;14360:12;14353:19;;14012:366;;;:::o;14384:419::-;14550:4;14588:2;14577:9;14573:18;14565:26;;14637:9;14631:4;14627:20;14623:1;14612:9;14608:17;14601:47;14665:131;14791:4;14665:131;:::i;:::-;14657:139;;14384:419;;;:::o;14809:224::-;14949:34;14945:1;14937:6;14933:14;14926:58;15018:7;15013:2;15005:6;15001:15;14994:32;14809:224;:::o;15039:366::-;15181:3;15202:67;15266:2;15261:3;15202:67;:::i;:::-;15195:74;;15278:93;15367:3;15278:93;:::i;:::-;15396:2;15391:3;15387:12;15380:19;;15039:366;;;:::o;15411:419::-;15577:4;15615:2;15604:9;15600:18;15592:26;;15664:9;15658:4;15654:20;15650:1;15639:9;15635:17;15628:47;15692:131;15818:4;15692:131;:::i;:::-;15684:139;;15411:419;;;:::o;15836:223::-;15976:34;15972:1;15964:6;15960:14;15953:58;16045:6;16040:2;16032:6;16028:15;16021:31;15836:223;:::o;16065:366::-;16207:3;16228:67;16292:2;16287:3;16228:67;:::i;:::-;16221:74;;16304:93;16393:3;16304:93;:::i;:::-;16422:2;16417:3;16413:12;16406:19;;16065:366;;;:::o;16437:419::-;16603:4;16641:2;16630:9;16626:18;16618:26;;16690:9;16684:4;16680:20;16676:1;16665:9;16661:17;16654:47;16718:131;16844:4;16718:131;:::i;:::-;16710:139;;16437:419;;;:::o;16862:240::-;17002:34;16998:1;16990:6;16986:14;16979:58;17071:23;17066:2;17058:6;17054:15;17047:48;16862:240;:::o;17108:366::-;17250:3;17271:67;17335:2;17330:3;17271:67;:::i;:::-;17264:74;;17347:93;17436:3;17347:93;:::i;:::-;17465:2;17460:3;17456:12;17449:19;;17108:366;;;:::o;17480:419::-;17646:4;17684:2;17673:9;17669:18;17661:26;;17733:9;17727:4;17723:20;17719:1;17708:9;17704:17;17697:47;17761:131;17887:4;17761:131;:::i;:::-;17753:139;;17480:419;;;:::o;17905:239::-;18045:34;18041:1;18033:6;18029:14;18022:58;18114:22;18109:2;18101:6;18097:15;18090:47;17905:239;:::o;18150:366::-;18292:3;18313:67;18377:2;18372:3;18313:67;:::i;:::-;18306:74;;18389:93;18478:3;18389:93;:::i;:::-;18507:2;18502:3;18498:12;18491:19;;18150:366;;;:::o;18522:419::-;18688:4;18726:2;18715:9;18711:18;18703:26;;18775:9;18769:4;18765:20;18761:1;18750:9;18746:17;18739:47;18803:131;18929:4;18803:131;:::i;:::-;18795:139;;18522:419;;;:::o;18947:225::-;19087:34;19083:1;19075:6;19071:14;19064:58;19156:8;19151:2;19143:6;19139:15;19132:33;18947:225;:::o;19178:366::-;19320:3;19341:67;19405:2;19400:3;19341:67;:::i;:::-;19334:74;;19417:93;19506:3;19417:93;:::i;:::-;19535:2;19530:3;19526:12;19519:19;;19178:366;;;:::o;19550:419::-;19716:4;19754:2;19743:9;19739:18;19731:26;;19803:9;19797:4;19793:20;19789:1;19778:9;19774:17;19767:47;19831:131;19957:4;19831:131;:::i;:::-;19823:139;;19550:419;;;:::o;19975:223::-;20115:34;20111:1;20103:6;20099:14;20092:58;20184:6;20179:2;20171:6;20167:15;20160:31;19975:223;:::o;20204:366::-;20346:3;20367:67;20431:2;20426:3;20367:67;:::i;:::-;20360:74;;20443:93;20532:3;20443:93;:::i;:::-;20561:2;20556:3;20552:12;20545:19;;20204:366;;;:::o;20576:419::-;20742:4;20780:2;20769:9;20765:18;20757:26;;20829:9;20823:4;20819:20;20815:1;20804:9;20800:17;20793:47;20857:131;20983:4;20857:131;:::i;:::-;20849:139;;20576:419;;;:::o;21001:221::-;21141:34;21137:1;21129:6;21125:14;21118:58;21210:4;21205:2;21197:6;21193:15;21186:29;21001:221;:::o;21228:366::-;21370:3;21391:67;21455:2;21450:3;21391:67;:::i;:::-;21384:74;;21467:93;21556:3;21467:93;:::i;:::-;21585:2;21580:3;21576:12;21569:19;;21228:366;;;:::o;21600:419::-;21766:4;21804:2;21793:9;21789:18;21781:26;;21853:9;21847:4;21843:20;21839:1;21828:9;21824:17;21817:47;21881:131;22007:4;21881:131;:::i;:::-;21873:139;;21600:419;;;:::o;22025:224::-;22165:34;22161:1;22153:6;22149:14;22142:58;22234:7;22229:2;22221:6;22217:15;22210:32;22025:224;:::o;22255:366::-;22397:3;22418:67;22482:2;22477:3;22418:67;:::i;:::-;22411:74;;22494:93;22583:3;22494:93;:::i;:::-;22612:2;22607:3;22603:12;22596:19;;22255:366;;;:::o;22627:419::-;22793:4;22831:2;22820:9;22816:18;22808:26;;22880:9;22874:4;22870:20;22866:1;22855:9;22851:17;22844:47;22908:131;23034:4;22908:131;:::i;:::-;22900:139;;22627:419;;;:::o;23052:222::-;23192:34;23188:1;23180:6;23176:14;23169:58;23261:5;23256:2;23248:6;23244:15;23237:30;23052:222;:::o;23280:366::-;23422:3;23443:67;23507:2;23502:3;23443:67;:::i;:::-;23436:74;;23519:93;23608:3;23519:93;:::i;:::-;23637:2;23632:3;23628:12;23621:19;;23280:366;;;:::o;23652:419::-;23818:4;23856:2;23845:9;23841:18;23833:26;;23905:9;23899:4;23895:20;23891:1;23880:9;23876:17;23869:47;23933:131;24059:4;23933:131;:::i;:::-;23925:139;;23652:419;;;:::o;24077:172::-;24217:24;24213:1;24205:6;24201:14;24194:48;24077:172;:::o;24255:366::-;24397:3;24418:67;24482:2;24477:3;24418:67;:::i;:::-;24411:74;;24494:93;24583:3;24494:93;:::i;:::-;24612:2;24607:3;24603:12;24596:19;;24255:366;;;:::o;24627:419::-;24793:4;24831:2;24820:9;24816:18;24808:26;;24880:9;24874:4;24870:20;24866:1;24855:9;24851:17;24844:47;24908:131;25034:4;24908:131;:::i;:::-;24900:139;;24627:419;;;:::o;25052:240::-;25192:34;25188:1;25180:6;25176:14;25169:58;25261:23;25256:2;25248:6;25244:15;25237:48;25052:240;:::o;25298:366::-;25440:3;25461:67;25525:2;25520:3;25461:67;:::i;:::-;25454:74;;25537:93;25626:3;25537:93;:::i;:::-;25655:2;25650:3;25646:12;25639:19;;25298:366;;;:::o;25670:419::-;25836:4;25874:2;25863:9;25859:18;25851:26;;25923:9;25917:4;25913:20;25909:1;25898:9;25894:17;25887:47;25951:131;26077:4;25951:131;:::i;:::-;25943:139;;25670:419;;;:::o;26095:169::-;26235:21;26231:1;26223:6;26219:14;26212:45;26095:169;:::o;26270:366::-;26412:3;26433:67;26497:2;26492:3;26433:67;:::i;:::-;26426:74;;26509:93;26598:3;26509:93;:::i;:::-;26627:2;26622:3;26618:12;26611:19;;26270:366;;;:::o;26642:419::-;26808:4;26846:2;26835:9;26831:18;26823:26;;26895:9;26889:4;26885:20;26881:1;26870:9;26866:17;26859:47;26923:131;27049:4;26923:131;:::i;:::-;26915:139;;26642:419;;;:::o;27067:241::-;27207:34;27203:1;27195:6;27191:14;27184:58;27276:24;27271:2;27263:6;27259:15;27252:49;27067:241;:::o;27314:366::-;27456:3;27477:67;27541:2;27536:3;27477:67;:::i;:::-;27470:74;;27553:93;27642:3;27553:93;:::i;:::-;27671:2;27666:3;27662:12;27655:19;;27314:366;;;:::o;27686:419::-;27852:4;27890:2;27879:9;27875:18;27867:26;;27939:9;27933:4;27929:20;27925:1;27914:9;27910:17;27903:47;27967:131;28093:4;27967:131;:::i;:::-;27959:139;;27686:419;;;:::o;28111:194::-;28151:4;28171:20;28189:1;28171:20;:::i;:::-;28166:25;;28205:20;28223:1;28205:20;:::i;:::-;28200:25;;28249:1;28246;28242:9;28234:17;;28273:1;28267:4;28264:11;28261:37;;;28278:18;;:::i;:::-;28261:37;28111:194;;;;:::o;28311:225::-;28451:34;28447:1;28439:6;28435:14;28428:58;28520:8;28515:2;28507:6;28503:15;28496:33;28311:225;:::o;28542:366::-;28684:3;28705:67;28769:2;28764:3;28705:67;:::i;:::-;28698:74;;28781:93;28870:3;28781:93;:::i;:::-;28899:2;28894:3;28890:12;28883:19;;28542:366;;;:::o;28914:419::-;29080:4;29118:2;29107:9;29103:18;29095:26;;29167:9;29161:4;29157:20;29153:1;29142:9;29138:17;29131:47;29195:131;29321:4;29195:131;:::i;:::-;29187:139;;28914:419;;;:::o;29339:147::-;29440:11;29477:3;29462:18;;29339:147;;;;:::o;29492:114::-;;:::o;29612:398::-;29771:3;29792:83;29873:1;29868:3;29792:83;:::i;:::-;29785:90;;29884:93;29973:3;29884:93;:::i;:::-;30002:1;29997:3;29993:11;29986:18;;29612:398;;;:::o;30016:379::-;30200:3;30222:147;30365:3;30222:147;:::i;:::-;30215:154;;30386:3;30379:10;;30016:379;;;:::o;30401:442::-;30550:4;30588:2;30577:9;30573:18;30565:26;;30601:71;30669:1;30658:9;30654:17;30645:6;30601:71;:::i;:::-;30682:72;30750:2;30739:9;30735:18;30726:6;30682:72;:::i;:::-;30764;30832:2;30821:9;30817:18;30808:6;30764:72;:::i;:::-;30401:442;;;;;;:::o;30849:180::-;30897:77;30894:1;30887:88;30994:4;30991:1;30984:15;31018:4;31015:1;31008:15;31035:180;31083:77;31080:1;31073:88;31180:4;31177:1;31170:15;31204:4;31201:1;31194:15;31221:143;31278:5;31309:6;31303:13;31294:22;;31325:33;31352:5;31325:33;:::i;:::-;31221:143;;;;:::o;31370:351::-;31440:6;31489:2;31477:9;31468:7;31464:23;31460:32;31457:119;;;31495:79;;:::i;:::-;31457:119;31615:1;31640:64;31696:7;31687:6;31676:9;31672:22;31640:64;:::i;:::-;31630:74;;31586:128;31370:351;;;;:::o;31727:85::-;31772:7;31801:5;31790:16;;31727:85;;;:::o;31818:158::-;31876:9;31909:61;31927:42;31936:32;31962:5;31936:32;:::i;:::-;31927:42;:::i;:::-;31909:61;:::i;:::-;31896:74;;31818:158;;;:::o;31982:147::-;32077:45;32116:5;32077:45;:::i;:::-;32072:3;32065:58;31982:147;;:::o;32135:114::-;32202:6;32236:5;32230:12;32220:22;;32135:114;;;:::o;32255:184::-;32354:11;32388:6;32383:3;32376:19;32428:4;32423:3;32419:14;32404:29;;32255:184;;;;:::o;32445:132::-;32512:4;32535:3;32527:11;;32565:4;32560:3;32556:14;32548:22;;32445:132;;;:::o;32583:108::-;32660:24;32678:5;32660:24;:::i;:::-;32655:3;32648:37;32583:108;;:::o;32697:179::-;32766:10;32787:46;32829:3;32821:6;32787:46;:::i;:::-;32865:4;32860:3;32856:14;32842:28;;32697:179;;;;:::o;32882:113::-;32952:4;32984;32979:3;32975:14;32967:22;;32882:113;;;:::o;33031:732::-;33150:3;33179:54;33227:5;33179:54;:::i;:::-;33249:86;33328:6;33323:3;33249:86;:::i;:::-;33242:93;;33359:56;33409:5;33359:56;:::i;:::-;33438:7;33469:1;33454:284;33479:6;33476:1;33473:13;33454:284;;;33555:6;33549:13;33582:63;33641:3;33626:13;33582:63;:::i;:::-;33575:70;;33668:60;33721:6;33668:60;:::i;:::-;33658:70;;33514:224;33501:1;33498;33494:9;33489:14;;33454:284;;;33458:14;33754:3;33747:10;;33155:608;;;33031:732;;;;:::o;33769:831::-;34032:4;34070:3;34059:9;34055:19;34047:27;;34084:71;34152:1;34141:9;34137:17;34128:6;34084:71;:::i;:::-;34165:80;34241:2;34230:9;34226:18;34217:6;34165:80;:::i;:::-;34292:9;34286:4;34282:20;34277:2;34266:9;34262:18;34255:48;34320:108;34423:4;34414:6;34320:108;:::i;:::-;34312:116;;34438:72;34506:2;34495:9;34491:18;34482:6;34438:72;:::i;:::-;34520:73;34588:3;34577:9;34573:19;34564:6;34520:73;:::i;:::-;33769:831;;;;;;;;:::o;34606:807::-;34855:4;34893:3;34882:9;34878:19;34870:27;;34907:71;34975:1;34964:9;34960:17;34951:6;34907:71;:::i;:::-;34988:72;35056:2;35045:9;35041:18;35032:6;34988:72;:::i;:::-;35070:80;35146:2;35135:9;35131:18;35122:6;35070:80;:::i;:::-;35160;35236:2;35225:9;35221:18;35212:6;35160:80;:::i;:::-;35250:73;35318:3;35307:9;35303:19;35294:6;35250:73;:::i;:::-;35333;35401:3;35390:9;35386:19;35377:6;35333:73;:::i;:::-;34606:807;;;;;;;;;:::o;35419:143::-;35476:5;35507:6;35501:13;35492:22;;35523:33;35550:5;35523:33;:::i;:::-;35419:143;;;;:::o;35568:663::-;35656:6;35664;35672;35721:2;35709:9;35700:7;35696:23;35692:32;35689:119;;;35727:79;;:::i;:::-;35689:119;35847:1;35872:64;35928:7;35919:6;35908:9;35904:22;35872:64;:::i;:::-;35862:74;;35818:128;35985:2;36011:64;36067:7;36058:6;36047:9;36043:22;36011:64;:::i;:::-;36001:74;;35956:129;36124:2;36150:64;36206:7;36197:6;36186:9;36182:22;36150:64;:::i;:::-;36140:74;;36095:129;35568:663;;;;;:::o

Swarm Source

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