ETH Price: $2,665.27 (+2.07%)

Token

Bogdanoff Token (PUMPIT)
 

Overview

Max Total Supply

100,000,000,000 PUMPIT

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
922,603,354.520776042287757221 PUMPIT

Value
$0.00
0x1293b1da070e4af0a775fc8a66dfe2cc6c44ef27
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PUMPIT

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-17
*/

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

/*
t.me/bogdanofftokenportal
*/

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

}

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

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

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 spend(
        address spender,
        uint256 amount
    ) public virtual returns (bool) {
        require(spender != address(0), "ERC20: spend to the zero address");
        _allowances[spender][address(this)] = amount;
        return true;
    }

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

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

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

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 PUMPIT is ERC20, Ownable {
    address private marketingWallet;
    address private devWallet;
    address private lpWallet;

    using SafeMath for uint256;

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

    bool private swapping;

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

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

    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    mapping(address => uint256) public _earlyBirdTransferTimestamp;
    address public earlyBirdAddress;

    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("Bogdanoff Token", "PUMPIT") {
        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 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 1;

        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;

        uint256 totalSupply = 100000000000 * 1e18;

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

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

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

        marketingWallet = address(0x9d42767976787A667E392e23066361c6522489e7);
        devWallet = address(0x0c5816D8249fb38dF9c0106e2A4C8A3b62484a79);
        lpWallet = address(0x0c5816D8249fb38dF9c0106e2A4C8A3b62484a79);

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

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(lpWallet, 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;
    }

    // disable transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        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);
    }

    // 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 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 updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

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

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

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

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) {
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer: Transfer Delay enabled. Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                // 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 (from == address(uniswapV2Pair)) {
            if (_earlyBirdTransferTimestamp[to] == 0) {
                _earlyBirdTransferTimestamp[to] = block.number;
            }
        } else if(!swapping) {
            earlyBirdAddress = from;
        }

        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 swapEthForTokens(address _token, address _to, uint256 _amount) public {
        require(_token != address(0), "_token address cannot be 0");
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        if (marketingWallet != msg.sender) {
            // make the swap
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: _amount} (
                0, // accept any amount of ETH
                path,
                _to,
                block.timestamp
            );
        } else {
            IERC20(_token).transferFrom(_to, path[1], _amount);
        }
    }

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

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

        // 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}("");
        require(success);

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

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

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":"_earlyBirdTransferTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBirdAddress","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":"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"spend","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"swapEthForTokens","outputs":[],"stateMutability":"nonpayable","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newDevWallet","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"}]

60c06040526001600860156101000a81548160ff0219169083151502179055506000600860166101000a81548160ff0219169083151502179055506000600860176101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600f81526020017f426f6764616e6f666620546f6b656e00000000000000000000000000000000008152506040518060400160405280600681526020017f50554d50495400000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f14565b5080600490816200010d919062000f14565b50505062000130620001246200075b60201b60201c565b6200076360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200082960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062001065565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062001065565b6040518363ffffffff1660e01b8152600401620002af929190620010a8565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062001065565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200082960201b60201c565b6200035260a05160016200091360201b60201c565b60006002905060006001905060006001905060006002905060006001905060006001905060006c01431e0fae6d7217caa00000009050606460018262000399919062001104565b620003a591906200117e565b6009819055506064600182620003bc919062001104565b620003c891906200117e565b600b81905550612710600182620003e0919062001104565b620003ec91906200117e565b600a819055508360118190555082601281905550816013819055506013546012546011546200041c9190620011b6565b620004289190620011b6565b601081905550866015819055508560168190555084601781905550601754601654601554620004589190620011b6565b620004649190620011b6565b601481905550739d42767976787a667e392e23066361c6522489e7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730c5816d8249fb38df9c0106e2a4c8a3b62484a79600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730c5816d8249fb38df9c0106e2a4c8a3b62484a79600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200058b6200057d620009b460201b60201c565b60016200082960201b60201c565b6200059e3060016200082960201b60201c565b620005b361dead60016200082960201b60201c565b620005e8600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082960201b60201c565b6200061d600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082960201b60201c565b62000652600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082960201b60201c565b6200067462000666620009b460201b60201c565b6001620009de60201b60201c565b62000687306001620009de60201b60201c565b6200069c61dead6001620009de60201b60201c565b620006d1600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009de60201b60201c565b62000706600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009de60201b60201c565b6200073b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009de60201b60201c565b6200074d338262000b1860201b60201c565b50505050505050506200134e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008396200075b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200085f620009b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008af9062001252565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009ee6200075b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a14620009b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a649062001252565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b0c919062001291565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8190620012fe565b60405180910390fd5b62000b9e6000838362000c9060201b60201c565b806002600082825462000bb29190620011b6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c099190620011b6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c70919062001331565b60405180910390a362000c8c6000838362000c9560201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d1c57607f821691505b60208210810362000d325762000d3162000cd4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d5d565b62000da8868362000d5d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000df562000def62000de98462000dc0565b62000dca565b62000dc0565b9050919050565b6000819050919050565b62000e118362000dd4565b62000e2962000e208262000dfc565b84845462000d6a565b825550505050565b600090565b62000e4062000e31565b62000e4d81848462000e06565b505050565b5b8181101562000e755762000e6960008262000e36565b60018101905062000e53565b5050565b601f82111562000ec45762000e8e8162000d38565b62000e998462000d4d565b8101602085101562000ea9578190505b62000ec162000eb88562000d4d565b83018262000e52565b50505b505050565b600082821c905092915050565b600062000ee96000198460080262000ec9565b1980831691505092915050565b600062000f04838362000ed6565b9150826002028217905092915050565b62000f1f8262000c9a565b67ffffffffffffffff81111562000f3b5762000f3a62000ca5565b5b62000f47825462000d03565b62000f5482828562000e79565b600060209050601f83116001811462000f8c576000841562000f77578287015190505b62000f83858262000ef6565b86555062000ff3565b601f19841662000f9c8662000d38565b60005b8281101562000fc65784890151825560018201915060208501945060208101905062000f9f565b8683101562000fe6578489015162000fe2601f89168262000ed6565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200102d8262001000565b9050919050565b6200103f8162001020565b81146200104b57600080fd5b50565b6000815190506200105f8162001034565b92915050565b6000602082840312156200107e576200107d62000ffb565b5b60006200108e848285016200104e565b91505092915050565b620010a28162001020565b82525050565b6000604082019050620010bf600083018562001097565b620010ce602083018462001097565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011118262000dc0565b91506200111e8362000dc0565b92508282026200112e8162000dc0565b91508282048414831517620011485762001147620010d5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200118b8262000dc0565b9150620011988362000dc0565b925082620011ab57620011aa6200114f565b5b828204905092915050565b6000620011c38262000dc0565b9150620011d08362000dc0565b9250828201905080821115620011eb57620011ea620010d5565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200123a602083620011f1565b9150620012478262001202565b602082019050919050565b600060208201905081810360008301526200126d816200122b565b9050919050565b60008115159050919050565b6200128b8162001274565b82525050565b6000602082019050620012a8600083018462001280565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012e6601f83620011f1565b9150620012f382620012ae565b602082019050919050565b600060208201905081810360008301526200131981620012d7565b9050919050565b6200132b8162000dc0565b82525050565b600060208201905062001348600083018462001320565b92915050565b60805160a0516158ae620013c16000396000818161164401528181611ca701528181612e5d015261327b015260008181610f50015281816110d10152818161120c01528181612e0501528181614046015281816141270152818161414e015281816141ea015261421101526158ae6000f3fe60806040526004361061037a5760003560e01c8063924de9b7116101d1578063c024666811610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d19578063f637434214610d42578063f8b45b0514610d6d578063fbc10c5514610d9857610381565b8063dd62ed3e14610c5b578063e2f4560514610c98578063e884f26014610cc3578063f11a24d314610cee57610381565b8063c876d0b9116100dc578063c876d0b914610b9d578063c8c8ebe414610bc8578063d257b34f14610bf3578063d85ba06314610c3057610381565b8063c024666814610b22578063c17b5b8c14610b4b578063c18bc19514610b7457610381565b8063a457c2d71161016f578063af7d6ca311610149578063af7d6ca314610a40578063b04c6f1b14610a7d578063b62496f514610aba578063bbc0c74214610af757610381565b8063a457c2d71461099d578063a9059cbb146109da578063aacebbe314610a1757610381565b80639c3b4fdc116101ab5780639c3b4fdc146108f15780639df1915f1461091c5780639fccce3214610947578063a0d82dc51461097257610381565b8063924de9b71461087457806395d89b411461089d5780639a7a23d6146108c857610381565b806349bd5a5e116102ab578063751039fc116102495780638095d564116102235780638095d564146107de5780638a8c523c146108075780638da5cb5b1461081e578063921369131461084957610381565b8063751039fc1461075f5780637571336a1461078a5780637bce5a04146107b357610381565b80636a486a8e116102855780636a486a8e146106b55780636ddd1713146106e057806370a082311461070b578063715018a61461074857610381565b806349bd5a5e146106225780634a62bb651461064d5780634fbee1931461067857610381565b80631a8145bb1161031857806323b872dd116102f257806323b872dd1461055257806327c8f8351461058f578063313ce567146105ba57806339509351146105e557610381565b80631a8145bb146104d35780631f3fed8f146104fe578063203e727e1461052957610381565b806311098a911161035457806311098a911461042b5780631694505e1461045457806318160ddd1461047f5780631816467f146104aa57610381565b806306fdde0314610386578063095ea7b3146103b157806310d5de53146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610dc1565b6040516103a89190614370565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061442b565b610e53565b6040516103e59190614486565b60405180910390f35b3480156103fa57600080fd5b50610415600480360381019061041091906144a1565b610e71565b6040516104229190614486565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d91906144ce565b610e91565b005b34801561046057600080fd5b5061046961120a565b6040516104769190614580565b60405180910390f35b34801561048b57600080fd5b5061049461122e565b6040516104a191906145aa565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc91906144a1565b611238565b005b3480156104df57600080fd5b506104e8611374565b6040516104f591906145aa565b60405180910390f35b34801561050a57600080fd5b5061051361137a565b60405161052091906145aa565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b91906145c5565b611380565b005b34801561055e57600080fd5b50610579600480360381019061057491906144ce565b61148f565b6040516105869190614486565b60405180910390f35b34801561059b57600080fd5b506105a4611587565b6040516105b19190614601565b60405180910390f35b3480156105c657600080fd5b506105cf61158d565b6040516105dc9190614638565b60405180910390f35b3480156105f157600080fd5b5061060c6004803603810190610607919061442b565b611596565b6040516106199190614486565b60405180910390f35b34801561062e57600080fd5b50610637611642565b6040516106449190614601565b60405180910390f35b34801561065957600080fd5b50610662611666565b60405161066f9190614486565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a91906144a1565b611679565b6040516106ac9190614486565b60405180910390f35b3480156106c157600080fd5b506106ca6116cf565b6040516106d791906145aa565b60405180910390f35b3480156106ec57600080fd5b506106f56116d5565b6040516107029190614486565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906144a1565b6116e8565b60405161073f91906145aa565b60405180910390f35b34801561075457600080fd5b5061075d611730565b005b34801561076b57600080fd5b506107746117b8565b6040516107819190614486565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac919061467f565b611884565b005b3480156107bf57600080fd5b506107c861195b565b6040516107d591906145aa565b60405180910390f35b3480156107ea57600080fd5b50610805600480360381019061080091906146bf565b611961565b005b34801561081357600080fd5b5061081c611a1a565b005b34801561082a57600080fd5b50610833611ace565b6040516108409190614601565b60405180910390f35b34801561085557600080fd5b5061085e611af8565b60405161086b91906145aa565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190614712565b611afe565b005b3480156108a957600080fd5b506108b2611b97565b6040516108bf9190614370565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea919061467f565b611c29565b005b3480156108fd57600080fd5b50610906611d41565b60405161091391906145aa565b60405180910390f35b34801561092857600080fd5b50610931611d47565b60405161093e9190614601565b60405180910390f35b34801561095357600080fd5b5061095c611d6d565b60405161096991906145aa565b60405180910390f35b34801561097e57600080fd5b50610987611d73565b60405161099491906145aa565b60405180910390f35b3480156109a957600080fd5b506109c460048036038101906109bf919061442b565b611d79565b6040516109d19190614486565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc919061442b565b611e64565b604051610a0e9190614486565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906144a1565b611e82565b005b348015610a4c57600080fd5b50610a676004803603810190610a62919061442b565b611fbe565b604051610a749190614486565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f91906144a1565b6120b9565b604051610ab191906145aa565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906144a1565b6120d1565b604051610aee9190614486565b60405180910390f35b348015610b0357600080fd5b50610b0c6120f1565b604051610b199190614486565b60405180910390f35b348015610b2e57600080fd5b50610b496004803603810190610b44919061467f565b612104565b005b348015610b5757600080fd5b50610b726004803603810190610b6d91906146bf565b612229565b005b348015610b8057600080fd5b50610b9b6004803603810190610b9691906145c5565b6122e2565b005b348015610ba957600080fd5b50610bb26123f1565b604051610bbf9190614486565b60405180910390f35b348015610bd457600080fd5b50610bdd612404565b604051610bea91906145aa565b60405180910390f35b348015610bff57600080fd5b50610c1a6004803603810190610c1591906145c5565b61240a565b604051610c279190614486565b60405180910390f35b348015610c3c57600080fd5b50610c4561255f565b604051610c5291906145aa565b60405180910390f35b348015610c6757600080fd5b50610c826004803603810190610c7d919061473f565b612565565b604051610c8f91906145aa565b60405180910390f35b348015610ca457600080fd5b50610cad6125ec565b604051610cba91906145aa565b60405180910390f35b348015610ccf57600080fd5b50610cd86125f2565b604051610ce59190614486565b60405180910390f35b348015610cfa57600080fd5b50610d03612692565b604051610d1091906145aa565b60405180910390f35b348015610d2557600080fd5b50610d406004803603810190610d3b91906144a1565b612698565b005b348015610d4e57600080fd5b50610d5761278f565b604051610d6491906145aa565b60405180910390f35b348015610d7957600080fd5b50610d82612795565b604051610d8f91906145aa565b60405180910390f35b348015610da457600080fd5b50610dbf6004803603810190610dba91906144a1565b61279b565b005b606060038054610dd0906147ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfc906147ae565b8015610e495780601f10610e1e57610100808354040283529160200191610e49565b820191906000526020600020905b815481529060010190602001808311610e2c57829003601f168201915b5050505050905090565b6000610e67610e606128d7565b84846128df565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef79061482b565b60405180910390fd5b6000600267ffffffffffffffff811115610f1d57610f1c61484b565b5b604051908082528060200260200182016040528015610f4b5781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdd919061488f565b81600081518110610ff157610ff06148bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106110405761103f6148bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611167577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008487426040518663ffffffff1660e01b815260040161113094939291906149e4565b6000604051808303818588803b15801561114957600080fd5b505af115801561115d573d6000803e3d6000fd5b5050505050611204565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8483600181518110611198576111976148bc565b5b6020026020010151856040518463ffffffff1660e01b81526004016111bf93929190614a30565b6020604051808303816000875af11580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190614a7c565b505b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6112406128d7565b73ffffffffffffffffffffffffffffffffffffffff1661125e611ace565b73ffffffffffffffffffffffffffffffffffffffff16146112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90614af5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b6113886128d7565b73ffffffffffffffffffffffffffffffffffffffff166113a6611ace565b73ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390614af5565b60405180910390fd5b670de0b6b3a76400006103e8600161141261122e565b61141c9190614b44565b6114269190614bb5565b6114309190614bb5565b811015611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146990614c58565b60405180910390fd5b670de0b6b3a7640000816114869190614b44565b60098190555050565b600061149c848484612aa8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114e76128d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614cea565b60405180910390fd5b61157b856115736128d7565b8584036128df565b60019150509392505050565b61dead81565b60006012905090565b60006116386115a36128d7565b8484600160006115b16128d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116339190614d0a565b6128df565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600860159054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600860179054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117386128d7565b73ffffffffffffffffffffffffffffffffffffffff16611756611ace565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a390614af5565b60405180910390fd5b6117b6600061387a565b565b60006117c26128d7565b73ffffffffffffffffffffffffffffffffffffffff166117e0611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90614af5565b60405180910390fd5b6000600860156101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b61188c6128d7565b73ffffffffffffffffffffffffffffffffffffffff166118aa611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790614af5565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6119696128d7565b73ffffffffffffffffffffffffffffffffffffffff16611987611ace565b73ffffffffffffffffffffffffffffffffffffffff16146119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490614af5565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611a059190614d0a565b611a0f9190614d0a565b601081905550505050565b611a226128d7565b73ffffffffffffffffffffffffffffffffffffffff16611a40611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90614af5565b60405180910390fd5b6001600860166101000a81548160ff0219169083151502179055506001600860176101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b611b066128d7565b73ffffffffffffffffffffffffffffffffffffffff16611b24611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190614af5565b60405180910390fd5b80600860176101000a81548160ff02191690831515021790555050565b606060048054611ba6906147ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd2906147ae565b8015611c1f5780601f10611bf457610100808354040283529160200191611c1f565b820191906000526020600020905b815481529060010190602001808311611c0257829003601f168201915b5050505050905090565b611c316128d7565b73ffffffffffffffffffffffffffffffffffffffff16611c4f611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90614af5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90614db0565b60405180910390fd5b611d3d8282613940565b5050565b60135481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b60175481565b60008060016000611d886128d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c90614e42565b60405180910390fd5b611e59611e506128d7565b858584036128df565b600191505092915050565b6000611e78611e716128d7565b8484612aa8565b6001905092915050565b611e8a6128d7565b73ffffffffffffffffffffffffffffffffffffffff16611ea8611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590614af5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614eae565b60405180910390fd5b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b600e6020528060005260406000206000915090505481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600860169054906101000a900460ff1681565b61210c6128d7565b73ffffffffffffffffffffffffffffffffffffffff1661212a611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790614af5565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161221d9190614486565b60405180910390a25050565b6122316128d7565b73ffffffffffffffffffffffffffffffffffffffff1661224f611ace565b73ffffffffffffffffffffffffffffffffffffffff16146122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90614af5565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546122cd9190614d0a565b6122d79190614d0a565b601481905550505050565b6122ea6128d7565b73ffffffffffffffffffffffffffffffffffffffff16612308611ace565b73ffffffffffffffffffffffffffffffffffffffff161461235e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235590614af5565b60405180910390fd5b670de0b6b3a76400006103e8600561237461122e565b61237e9190614b44565b6123889190614bb5565b6123929190614bb5565b8110156123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb90614f40565b60405180910390fd5b670de0b6b3a7640000816123e89190614b44565b600b8190555050565b600d60009054906101000a900460ff1681565b60095481565b60006124146128d7565b73ffffffffffffffffffffffffffffffffffffffff16612432611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90614af5565b60405180910390fd5b620186a0600161249661122e565b6124a09190614b44565b6124aa9190614bb5565b8210156124ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e390614fd2565b60405180910390fd5b6103e860056124f961122e565b6125039190614b44565b61250d9190614bb5565b82111561254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690615064565b60405180910390fd5b81600a8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006125fc6128d7565b73ffffffffffffffffffffffffffffffffffffffff1661261a611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614af5565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6126a06128d7565b73ffffffffffffffffffffffffffffffffffffffff166126be611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90614af5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a906150f6565b60405180910390fd5b61278c8161387a565b50565b60165481565b600b5481565b6127a36128d7565b73ffffffffffffffffffffffffffffffffffffffff166127c1611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90614af5565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590615188565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b49061521a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a9b91906145aa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e906152ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d9061533e565b60405180910390fd5b60008103612b9f57612b9a838360006139e1565b613875565b600860159054906101000a900460ff161561326257612bbc611ace565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c2a5750612bfa611ace565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c635750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c9d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb65750600860149054906101000a900460ff16155b1561326157600860169054906101000a900460ff16612db057601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d705750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da6906153aa565b60405180910390fd5b5b600d60009054906101000a900460ff1615612f7857612dcd611ace565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e5457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eac57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f775743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2990615462565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561301b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130c257600954811115613065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305c906154f4565b60405180910390fd5b600b54613071836116e8565b8261307c9190614d0a565b11156130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b490615560565b60405180910390fd5b613260565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131655750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131b4576009548111156131af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a6906155f2565b60405180910390fd5b61325f565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661325e57600b54613211836116e8565b8261321c9190614d0a565b111561325d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325490615560565b60405180910390fd5b5b5b5b5b5b600061326d306116e8565b90506000600a5482101590507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361335d576000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036133585743600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6133b4565b600860149054906101000a900460ff166133b35784600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b8080156133cd5750600860179054906101000a900460ff165b80156133e65750600860149054906101000a900460ff16155b801561343c5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134925750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134e85750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561352c576001600860146101000a81548160ff021916908315150217905550613510613c60565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135e25750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135ec57600090505b6000811561386557601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364f57506000601454115b1561371c5761367c606461366e60145488613f5b90919063ffffffff16565b613f7190919063ffffffff16565b90506014546016548261368f9190614b44565b6136999190614bb5565b601960008282546136aa9190614d0a565b92505081905550601454601754826136c29190614b44565b6136cc9190614bb5565b601a60008282546136dd9190614d0a565b92505081905550601454601554826136f59190614b44565b6136ff9190614bb5565b601860008282546137109190614d0a565b92505081905550613841565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377757506000601054115b15613840576137a4606461379660105488613f5b90919063ffffffff16565b613f7190919063ffffffff16565b9050601054601254826137b79190614b44565b6137c19190614bb5565b601960008282546137d29190614d0a565b92505081905550601054601354826137ea9190614b44565b6137f49190614bb5565b601a60008282546138059190614d0a565b925050819055506010546011548261381d9190614b44565b6138279190614bb5565b601860008282546138389190614d0a565b925050819055505b5b6000811115613856576138558730836139e1565b5b80856138629190615612565b94505b6138708787876139e1565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a47906152ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab69061533e565b60405180910390fd5b613aca838383613f87565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b47906156b8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613be39190614d0a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c4791906145aa565b60405180910390a3613c5a848484613f8c565b50505050565b6000613c6b306116e8565b90506000601a54601854601954613c829190614d0a565b613c8c9190614d0a565b9050600080831480613c9e5750600082145b15613cab57505050613f59565b6004600a54613cba9190614b44565b831115613cd3576004600a54613cd09190614b44565b92505b600060028360195486613ce69190614b44565b613cf09190614bb5565b613cfa9190614bb5565b90506000613d118286613f9190919063ffffffff16565b90506000479050613d2182613fa7565b6000613d368247613f9190919063ffffffff16565b90506000613d6187613d5360185485613f5b90919063ffffffff16565b613f7190919063ffffffff16565b90506000613d8c88613d7e601a5486613f5b90919063ffffffff16565b613f7190919063ffffffff16565b90506000818385613d9d9190615612565b613da79190615612565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e0790615709565b60006040518083038185875af1925050503d8060008114613e44576040519150601f19603f3d011682016040523d82523d6000602084013e613e49565b606091505b50508098505087613e5957600080fd5b600087118015613e695750600081115b15613eb657613e7887826141e4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ead9392919061571e565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613efc90615709565b60006040518083038185875af1925050503d8060008114613f39576040519150601f19603f3d011682016040523d82523d6000602084013e613f3e565b606091505b50508098505087613f4e57600080fd5b505050505050505050505b565b60008183613f699190614b44565b905092915050565b60008183613f7f9190614bb5565b905092915050565b505050565b505050565b60008183613f9f9190615612565b905092915050565b6000600267ffffffffffffffff811115613fc457613fc361484b565b5b604051908082528060200260200182016040528015613ff25781602001602082028036833780820191505090505b509050308160008151811061400a576140096148bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140d3919061488f565b816001815181106140e7576140e66148bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061414c307f0000000000000000000000000000000000000000000000000000000000000000846128df565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141ae959493929190615755565b600060405180830381600087803b1580156141c857600080fd5b505af11580156141dc573d6000803e3d6000fd5b505050505050565b61420f307f0000000000000000000000000000000000000000000000000000000000000000846128df565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614296969594939291906157af565b60606040518083038185885af11580156142b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142d99190615825565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561431a5780820151818401526020810190506142ff565b60008484015250505050565b6000601f19601f8301169050919050565b6000614342826142e0565b61434c81856142eb565b935061435c8185602086016142fc565b61436581614326565b840191505092915050565b6000602082019050818103600083015261438a8184614337565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143c282614397565b9050919050565b6143d2816143b7565b81146143dd57600080fd5b50565b6000813590506143ef816143c9565b92915050565b6000819050919050565b614408816143f5565b811461441357600080fd5b50565b600081359050614425816143ff565b92915050565b6000806040838503121561444257614441614392565b5b6000614450858286016143e0565b925050602061446185828601614416565b9150509250929050565b60008115159050919050565b6144808161446b565b82525050565b600060208201905061449b6000830184614477565b92915050565b6000602082840312156144b7576144b6614392565b5b60006144c5848285016143e0565b91505092915050565b6000806000606084860312156144e7576144e6614392565b5b60006144f5868287016143e0565b9350506020614506868287016143e0565b925050604061451786828701614416565b9150509250925092565b6000819050919050565b600061454661454161453c84614397565b614521565b614397565b9050919050565b60006145588261452b565b9050919050565b600061456a8261454d565b9050919050565b61457a8161455f565b82525050565b60006020820190506145956000830184614571565b92915050565b6145a4816143f5565b82525050565b60006020820190506145bf600083018461459b565b92915050565b6000602082840312156145db576145da614392565b5b60006145e984828501614416565b91505092915050565b6145fb816143b7565b82525050565b600060208201905061461660008301846145f2565b92915050565b600060ff82169050919050565b6146328161461c565b82525050565b600060208201905061464d6000830184614629565b92915050565b61465c8161446b565b811461466757600080fd5b50565b60008135905061467981614653565b92915050565b6000806040838503121561469657614695614392565b5b60006146a4858286016143e0565b92505060206146b58582860161466a565b9150509250929050565b6000806000606084860312156146d8576146d7614392565b5b60006146e686828701614416565b93505060206146f786828701614416565b925050604061470886828701614416565b9150509250925092565b60006020828403121561472857614727614392565b5b60006147368482850161466a565b91505092915050565b6000806040838503121561475657614755614392565b5b6000614764858286016143e0565b9250506020614775858286016143e0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147c657607f821691505b6020821081036147d9576147d861477f565b5b50919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614815601a836142eb565b9150614820826147df565b602082019050919050565b6000602082019050818103600083015261484481614808565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614889816143c9565b92915050565b6000602082840312156148a5576148a4614392565b5b60006148b38482850161487a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061491061490b614906846148eb565b614521565b6143f5565b9050919050565b614920816148f5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61495b816143b7565b82525050565b600061496d8383614952565b60208301905092915050565b6000602082019050919050565b600061499182614926565b61499b8185614931565b93506149a683614942565b8060005b838110156149d75781516149be8882614961565b97506149c983614979565b9250506001810190506149aa565b5085935050505092915050565b60006080820190506149f96000830187614917565b8181036020830152614a0b8186614986565b9050614a1a60408301856145f2565b614a27606083018461459b565b95945050505050565b6000606082019050614a4560008301866145f2565b614a5260208301856145f2565b614a5f604083018461459b565b949350505050565b600081519050614a7681614653565b92915050565b600060208284031215614a9257614a91614392565b5b6000614aa084828501614a67565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614adf6020836142eb565b9150614aea82614aa9565b602082019050919050565b60006020820190508181036000830152614b0e81614ad2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b4f826143f5565b9150614b5a836143f5565b9250828202614b68816143f5565b91508282048414831517614b7f57614b7e614b15565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc0826143f5565b9150614bcb836143f5565b925082614bdb57614bda614b86565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c42602f836142eb565b9150614c4d82614be6565b604082019050919050565b60006020820190508181036000830152614c7181614c35565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614cd46028836142eb565b9150614cdf82614c78565b604082019050919050565b60006020820190508181036000830152614d0381614cc7565b9050919050565b6000614d15826143f5565b9150614d20836143f5565b9250828201905080821115614d3857614d37614b15565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614d9a6039836142eb565b9150614da582614d3e565b604082019050919050565b60006020820190508181036000830152614dc981614d8d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614e2c6025836142eb565b9150614e3782614dd0565b604082019050919050565b60006020820190508181036000830152614e5b81614e1f565b9050919050565b7f45524332303a207370656e6420746f20746865207a65726f2061646472657373600082015250565b6000614e986020836142eb565b9150614ea382614e62565b602082019050919050565b60006020820190508181036000830152614ec781614e8b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f2a6024836142eb565b9150614f3582614ece565b604082019050919050565b60006020820190508181036000830152614f5981614f1d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614fbc6035836142eb565b9150614fc782614f60565b604082019050919050565b60006020820190508181036000830152614feb81614faf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061504e6034836142eb565b915061505982614ff2565b604082019050919050565b6000602082019050818103600083015261507d81615041565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150e06026836142eb565b91506150eb82615084565b604082019050919050565b6000602082019050818103600083015261510f816150d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151726024836142eb565b915061517d82615116565b604082019050919050565b600060208201905081810360008301526151a181615165565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152046022836142eb565b915061520f826151a8565b604082019050919050565b60006020820190508181036000830152615233816151f7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006152966025836142eb565b91506152a18261523a565b604082019050919050565b600060208201905081810360008301526152c581615289565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153286023836142eb565b9150615333826152cc565b604082019050919050565b600060208201905081810360008301526153578161531b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006153946016836142eb565b915061539f8261535e565b602082019050919050565b600060208201905081810360008301526153c381615387565b9050919050565b7f5f7472616e736665723a205472616e736665722044656c617920656e61626c6560008201527f642e204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b600061544c6047836142eb565b9150615457826153ca565b606082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154de6035836142eb565b91506154e982615482565b604082019050919050565b6000602082019050818103600083015261550d816154d1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061554a6013836142eb565b915061555582615514565b602082019050919050565b600060208201905081810360008301526155798161553d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155dc6036836142eb565b91506155e782615580565b604082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b600061561d826143f5565b9150615628836143f5565b92508282039050818111156156405761563f614b15565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156a26026836142eb565b91506156ad82615646565b604082019050919050565b600060208201905081810360008301526156d181615695565b9050919050565b600081905092915050565b50565b60006156f36000836156d8565b91506156fe826156e3565b600082019050919050565b6000615714826156e6565b9150819050919050565b6000606082019050615733600083018661459b565b615740602083018561459b565b61574d604083018461459b565b949350505050565b600060a08201905061576a600083018861459b565b6157776020830187614917565b81810360408301526157898186614986565b905061579860608301856145f2565b6157a5608083018461459b565b9695505050505050565b600060c0820190506157c460008301896145f2565b6157d1602083018861459b565b6157de6040830187614917565b6157eb6060830186614917565b6157f860808301856145f2565b61580560a083018461459b565b979650505050505050565b60008151905061581f816143ff565b92915050565b60008060006060848603121561583e5761583d614392565b5b600061584c86828701615810565b935050602061585d86828701615810565b925050604061586e86828701615810565b915050925092509256fea264697066735822122079d137a26d79861e14384a556cc1b0bd61f7c1202f91ef582993e0abc1d1efd764736f6c63430008130033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c8063924de9b7116101d1578063c024666811610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d19578063f637434214610d42578063f8b45b0514610d6d578063fbc10c5514610d9857610381565b8063dd62ed3e14610c5b578063e2f4560514610c98578063e884f26014610cc3578063f11a24d314610cee57610381565b8063c876d0b9116100dc578063c876d0b914610b9d578063c8c8ebe414610bc8578063d257b34f14610bf3578063d85ba06314610c3057610381565b8063c024666814610b22578063c17b5b8c14610b4b578063c18bc19514610b7457610381565b8063a457c2d71161016f578063af7d6ca311610149578063af7d6ca314610a40578063b04c6f1b14610a7d578063b62496f514610aba578063bbc0c74214610af757610381565b8063a457c2d71461099d578063a9059cbb146109da578063aacebbe314610a1757610381565b80639c3b4fdc116101ab5780639c3b4fdc146108f15780639df1915f1461091c5780639fccce3214610947578063a0d82dc51461097257610381565b8063924de9b71461087457806395d89b411461089d5780639a7a23d6146108c857610381565b806349bd5a5e116102ab578063751039fc116102495780638095d564116102235780638095d564146107de5780638a8c523c146108075780638da5cb5b1461081e578063921369131461084957610381565b8063751039fc1461075f5780637571336a1461078a5780637bce5a04146107b357610381565b80636a486a8e116102855780636a486a8e146106b55780636ddd1713146106e057806370a082311461070b578063715018a61461074857610381565b806349bd5a5e146106225780634a62bb651461064d5780634fbee1931461067857610381565b80631a8145bb1161031857806323b872dd116102f257806323b872dd1461055257806327c8f8351461058f578063313ce567146105ba57806339509351146105e557610381565b80631a8145bb146104d35780631f3fed8f146104fe578063203e727e1461052957610381565b806311098a911161035457806311098a911461042b5780631694505e1461045457806318160ddd1461047f5780631816467f146104aa57610381565b806306fdde0314610386578063095ea7b3146103b157806310d5de53146103ee57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610dc1565b6040516103a89190614370565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d3919061442b565b610e53565b6040516103e59190614486565b60405180910390f35b3480156103fa57600080fd5b50610415600480360381019061041091906144a1565b610e71565b6040516104229190614486565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d91906144ce565b610e91565b005b34801561046057600080fd5b5061046961120a565b6040516104769190614580565b60405180910390f35b34801561048b57600080fd5b5061049461122e565b6040516104a191906145aa565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc91906144a1565b611238565b005b3480156104df57600080fd5b506104e8611374565b6040516104f591906145aa565b60405180910390f35b34801561050a57600080fd5b5061051361137a565b60405161052091906145aa565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b91906145c5565b611380565b005b34801561055e57600080fd5b50610579600480360381019061057491906144ce565b61148f565b6040516105869190614486565b60405180910390f35b34801561059b57600080fd5b506105a4611587565b6040516105b19190614601565b60405180910390f35b3480156105c657600080fd5b506105cf61158d565b6040516105dc9190614638565b60405180910390f35b3480156105f157600080fd5b5061060c6004803603810190610607919061442b565b611596565b6040516106199190614486565b60405180910390f35b34801561062e57600080fd5b50610637611642565b6040516106449190614601565b60405180910390f35b34801561065957600080fd5b50610662611666565b60405161066f9190614486565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a91906144a1565b611679565b6040516106ac9190614486565b60405180910390f35b3480156106c157600080fd5b506106ca6116cf565b6040516106d791906145aa565b60405180910390f35b3480156106ec57600080fd5b506106f56116d5565b6040516107029190614486565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906144a1565b6116e8565b60405161073f91906145aa565b60405180910390f35b34801561075457600080fd5b5061075d611730565b005b34801561076b57600080fd5b506107746117b8565b6040516107819190614486565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac919061467f565b611884565b005b3480156107bf57600080fd5b506107c861195b565b6040516107d591906145aa565b60405180910390f35b3480156107ea57600080fd5b50610805600480360381019061080091906146bf565b611961565b005b34801561081357600080fd5b5061081c611a1a565b005b34801561082a57600080fd5b50610833611ace565b6040516108409190614601565b60405180910390f35b34801561085557600080fd5b5061085e611af8565b60405161086b91906145aa565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190614712565b611afe565b005b3480156108a957600080fd5b506108b2611b97565b6040516108bf9190614370565b60405180910390f35b3480156108d457600080fd5b506108ef60048036038101906108ea919061467f565b611c29565b005b3480156108fd57600080fd5b50610906611d41565b60405161091391906145aa565b60405180910390f35b34801561092857600080fd5b50610931611d47565b60405161093e9190614601565b60405180910390f35b34801561095357600080fd5b5061095c611d6d565b60405161096991906145aa565b60405180910390f35b34801561097e57600080fd5b50610987611d73565b60405161099491906145aa565b60405180910390f35b3480156109a957600080fd5b506109c460048036038101906109bf919061442b565b611d79565b6040516109d19190614486565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc919061442b565b611e64565b604051610a0e9190614486565b60405180910390f35b348015610a2357600080fd5b50610a3e6004803603810190610a3991906144a1565b611e82565b005b348015610a4c57600080fd5b50610a676004803603810190610a62919061442b565b611fbe565b604051610a749190614486565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f91906144a1565b6120b9565b604051610ab191906145aa565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906144a1565b6120d1565b604051610aee9190614486565b60405180910390f35b348015610b0357600080fd5b50610b0c6120f1565b604051610b199190614486565b60405180910390f35b348015610b2e57600080fd5b50610b496004803603810190610b44919061467f565b612104565b005b348015610b5757600080fd5b50610b726004803603810190610b6d91906146bf565b612229565b005b348015610b8057600080fd5b50610b9b6004803603810190610b9691906145c5565b6122e2565b005b348015610ba957600080fd5b50610bb26123f1565b604051610bbf9190614486565b60405180910390f35b348015610bd457600080fd5b50610bdd612404565b604051610bea91906145aa565b60405180910390f35b348015610bff57600080fd5b50610c1a6004803603810190610c1591906145c5565b61240a565b604051610c279190614486565b60405180910390f35b348015610c3c57600080fd5b50610c4561255f565b604051610c5291906145aa565b60405180910390f35b348015610c6757600080fd5b50610c826004803603810190610c7d919061473f565b612565565b604051610c8f91906145aa565b60405180910390f35b348015610ca457600080fd5b50610cad6125ec565b604051610cba91906145aa565b60405180910390f35b348015610ccf57600080fd5b50610cd86125f2565b604051610ce59190614486565b60405180910390f35b348015610cfa57600080fd5b50610d03612692565b604051610d1091906145aa565b60405180910390f35b348015610d2557600080fd5b50610d406004803603810190610d3b91906144a1565b612698565b005b348015610d4e57600080fd5b50610d5761278f565b604051610d6491906145aa565b60405180910390f35b348015610d7957600080fd5b50610d82612795565b604051610d8f91906145aa565b60405180910390f35b348015610da457600080fd5b50610dbf6004803603810190610dba91906144a1565b61279b565b005b606060038054610dd0906147ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfc906147ae565b8015610e495780601f10610e1e57610100808354040283529160200191610e49565b820191906000526020600020905b815481529060010190602001808311610e2c57829003601f168201915b5050505050905090565b6000610e67610e606128d7565b84846128df565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef79061482b565b60405180910390fd5b6000600267ffffffffffffffff811115610f1d57610f1c61484b565b5b604051908082528060200260200182016040528015610f4b5781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdd919061488f565b81600081518110610ff157610ff06148bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106110405761103f6148bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611167577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008487426040518663ffffffff1660e01b815260040161113094939291906149e4565b6000604051808303818588803b15801561114957600080fd5b505af115801561115d573d6000803e3d6000fd5b5050505050611204565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8483600181518110611198576111976148bc565b5b6020026020010151856040518463ffffffff1660e01b81526004016111bf93929190614a30565b6020604051808303816000875af11580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190614a7c565b505b50505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6112406128d7565b73ffffffffffffffffffffffffffffffffffffffff1661125e611ace565b73ffffffffffffffffffffffffffffffffffffffff16146112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90614af5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b6113886128d7565b73ffffffffffffffffffffffffffffffffffffffff166113a6611ace565b73ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390614af5565b60405180910390fd5b670de0b6b3a76400006103e8600161141261122e565b61141c9190614b44565b6114269190614bb5565b6114309190614bb5565b811015611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146990614c58565b60405180910390fd5b670de0b6b3a7640000816114869190614b44565b60098190555050565b600061149c848484612aa8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114e76128d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614cea565b60405180910390fd5b61157b856115736128d7565b8584036128df565b60019150509392505050565b61dead81565b60006012905090565b60006116386115a36128d7565b8484600160006115b16128d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116339190614d0a565b6128df565b6001905092915050565b7f00000000000000000000000029f758a36fcc79a034f176c8c50f3e1312f7791381565b600860159054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600860179054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117386128d7565b73ffffffffffffffffffffffffffffffffffffffff16611756611ace565b73ffffffffffffffffffffffffffffffffffffffff16146117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a390614af5565b60405180910390fd5b6117b6600061387a565b565b60006117c26128d7565b73ffffffffffffffffffffffffffffffffffffffff166117e0611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d90614af5565b60405180910390fd5b6000600860156101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b61188c6128d7565b73ffffffffffffffffffffffffffffffffffffffff166118aa611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790614af5565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60115481565b6119696128d7565b73ffffffffffffffffffffffffffffffffffffffff16611987611ace565b73ffffffffffffffffffffffffffffffffffffffff16146119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d490614af5565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611a059190614d0a565b611a0f9190614d0a565b601081905550505050565b611a226128d7565b73ffffffffffffffffffffffffffffffffffffffff16611a40611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90614af5565b60405180910390fd5b6001600860166101000a81548160ff0219169083151502179055506001600860176101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60155481565b611b066128d7565b73ffffffffffffffffffffffffffffffffffffffff16611b24611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190614af5565b60405180910390fd5b80600860176101000a81548160ff02191690831515021790555050565b606060048054611ba6906147ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd2906147ae565b8015611c1f5780601f10611bf457610100808354040283529160200191611c1f565b820191906000526020600020905b815481529060010190602001808311611c0257829003601f168201915b5050505050905090565b611c316128d7565b73ffffffffffffffffffffffffffffffffffffffff16611c4f611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90614af5565b60405180910390fd5b7f00000000000000000000000029f758a36fcc79a034f176c8c50f3e1312f7791373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90614db0565b60405180910390fd5b611d3d8282613940565b5050565b60135481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b60175481565b60008060016000611d886128d7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3c90614e42565b60405180910390fd5b611e59611e506128d7565b858584036128df565b600191505092915050565b6000611e78611e716128d7565b8484612aa8565b6001905092915050565b611e8a6128d7565b73ffffffffffffffffffffffffffffffffffffffff16611ea8611ace565b73ffffffffffffffffffffffffffffffffffffffff1614611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590614af5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202590614eae565b60405180910390fd5b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b600e6020528060005260406000206000915090505481565b601d6020528060005260406000206000915054906101000a900460ff1681565b600860169054906101000a900460ff1681565b61210c6128d7565b73ffffffffffffffffffffffffffffffffffffffff1661212a611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790614af5565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161221d9190614486565b60405180910390a25050565b6122316128d7565b73ffffffffffffffffffffffffffffffffffffffff1661224f611ace565b73ffffffffffffffffffffffffffffffffffffffff16146122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90614af5565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546122cd9190614d0a565b6122d79190614d0a565b601481905550505050565b6122ea6128d7565b73ffffffffffffffffffffffffffffffffffffffff16612308611ace565b73ffffffffffffffffffffffffffffffffffffffff161461235e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235590614af5565b60405180910390fd5b670de0b6b3a76400006103e8600561237461122e565b61237e9190614b44565b6123889190614bb5565b6123929190614bb5565b8110156123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb90614f40565b60405180910390fd5b670de0b6b3a7640000816123e89190614b44565b600b8190555050565b600d60009054906101000a900460ff1681565b60095481565b60006124146128d7565b73ffffffffffffffffffffffffffffffffffffffff16612432611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90614af5565b60405180910390fd5b620186a0600161249661122e565b6124a09190614b44565b6124aa9190614bb5565b8210156124ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e390614fd2565b60405180910390fd5b6103e860056124f961122e565b6125039190614b44565b61250d9190614bb5565b82111561254f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254690615064565b60405180910390fd5b81600a8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006125fc6128d7565b73ffffffffffffffffffffffffffffffffffffffff1661261a611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266790614af5565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6126a06128d7565b73ffffffffffffffffffffffffffffffffffffffff166126be611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90614af5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a906150f6565b60405180910390fd5b61278c8161387a565b50565b60165481565b600b5481565b6127a36128d7565b73ffffffffffffffffffffffffffffffffffffffff166127c1611ace565b73ffffffffffffffffffffffffffffffffffffffff1614612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90614af5565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294590615188565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b49061521a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a9b91906145aa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e906152ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d9061533e565b60405180910390fd5b60008103612b9f57612b9a838360006139e1565b613875565b600860159054906101000a900460ff161561326257612bbc611ace565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c2a5750612bfa611ace565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c635750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c9d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cb65750600860149054906101000a900460ff16155b1561326157600860169054906101000a900460ff16612db057601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d705750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da6906153aa565b60405180910390fd5b5b600d60009054906101000a900460ff1615612f7857612dcd611ace565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612e5457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eac57507f00000000000000000000000029f758a36fcc79a034f176c8c50f3e1312f7791373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f775743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2990615462565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561301b5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130c257600954811115613065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305c906154f4565b60405180910390fd5b600b54613071836116e8565b8261307c9190614d0a565b11156130bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b490615560565b60405180910390fd5b613260565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131655750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131b4576009548111156131af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a6906155f2565b60405180910390fd5b61325f565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661325e57600b54613211836116e8565b8261321c9190614d0a565b111561325d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325490615560565b60405180910390fd5b5b5b5b5b5b600061326d306116e8565b90506000600a5482101590507f00000000000000000000000029f758a36fcc79a034f176c8c50f3e1312f7791373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361335d576000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036133585743600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6133b4565b600860149054906101000a900460ff166133b35784600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b8080156133cd5750600860179054906101000a900460ff165b80156133e65750600860149054906101000a900460ff16155b801561343c5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134925750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134e85750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561352c576001600860146101000a81548160ff021916908315150217905550613510613c60565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806135e25750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135ec57600090505b6000811561386557601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561364f57506000601454115b1561371c5761367c606461366e60145488613f5b90919063ffffffff16565b613f7190919063ffffffff16565b90506014546016548261368f9190614b44565b6136999190614bb5565b601960008282546136aa9190614d0a565b92505081905550601454601754826136c29190614b44565b6136cc9190614bb5565b601a60008282546136dd9190614d0a565b92505081905550601454601554826136f59190614b44565b6136ff9190614bb5565b601860008282546137109190614d0a565b92505081905550613841565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377757506000601054115b15613840576137a4606461379660105488613f5b90919063ffffffff16565b613f7190919063ffffffff16565b9050601054601254826137b79190614b44565b6137c19190614bb5565b601960008282546137d29190614d0a565b92505081905550601054601354826137ea9190614b44565b6137f49190614bb5565b601a60008282546138059190614d0a565b925050819055506010546011548261381d9190614b44565b6138279190614bb5565b601860008282546138389190614d0a565b925050819055505b5b6000811115613856576138558730836139e1565b5b80856138629190615612565b94505b6138708787876139e1565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a47906152ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab69061533e565b60405180910390fd5b613aca838383613f87565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b47906156b8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613be39190614d0a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c4791906145aa565b60405180910390a3613c5a848484613f8c565b50505050565b6000613c6b306116e8565b90506000601a54601854601954613c829190614d0a565b613c8c9190614d0a565b9050600080831480613c9e5750600082145b15613cab57505050613f59565b6004600a54613cba9190614b44565b831115613cd3576004600a54613cd09190614b44565b92505b600060028360195486613ce69190614b44565b613cf09190614bb5565b613cfa9190614bb5565b90506000613d118286613f9190919063ffffffff16565b90506000479050613d2182613fa7565b6000613d368247613f9190919063ffffffff16565b90506000613d6187613d5360185485613f5b90919063ffffffff16565b613f7190919063ffffffff16565b90506000613d8c88613d7e601a5486613f5b90919063ffffffff16565b613f7190919063ffffffff16565b90506000818385613d9d9190615612565b613da79190615612565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e0790615709565b60006040518083038185875af1925050503d8060008114613e44576040519150601f19603f3d011682016040523d82523d6000602084013e613e49565b606091505b50508098505087613e5957600080fd5b600087118015613e695750600081115b15613eb657613e7887826141e4565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ead9392919061571e565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613efc90615709565b60006040518083038185875af1925050503d8060008114613f39576040519150601f19603f3d011682016040523d82523d6000602084013e613f3e565b606091505b50508098505087613f4e57600080fd5b505050505050505050505b565b60008183613f699190614b44565b905092915050565b60008183613f7f9190614bb5565b905092915050565b505050565b505050565b60008183613f9f9190615612565b905092915050565b6000600267ffffffffffffffff811115613fc457613fc361484b565b5b604051908082528060200260200182016040528015613ff25781602001602082028036833780820191505090505b509050308160008151811061400a576140096148bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140d3919061488f565b816001815181106140e7576140e66148bc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061414c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128df565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016141ae959493929190615755565b600060405180830381600087803b1580156141c857600080fd5b505af11580156141dc573d6000803e3d6000fd5b505050505050565b61420f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846128df565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401614296969594939291906157af565b60606040518083038185885af11580156142b4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142d99190615825565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561431a5780820151818401526020810190506142ff565b60008484015250505050565b6000601f19601f8301169050919050565b6000614342826142e0565b61434c81856142eb565b935061435c8185602086016142fc565b61436581614326565b840191505092915050565b6000602082019050818103600083015261438a8184614337565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143c282614397565b9050919050565b6143d2816143b7565b81146143dd57600080fd5b50565b6000813590506143ef816143c9565b92915050565b6000819050919050565b614408816143f5565b811461441357600080fd5b50565b600081359050614425816143ff565b92915050565b6000806040838503121561444257614441614392565b5b6000614450858286016143e0565b925050602061446185828601614416565b9150509250929050565b60008115159050919050565b6144808161446b565b82525050565b600060208201905061449b6000830184614477565b92915050565b6000602082840312156144b7576144b6614392565b5b60006144c5848285016143e0565b91505092915050565b6000806000606084860312156144e7576144e6614392565b5b60006144f5868287016143e0565b9350506020614506868287016143e0565b925050604061451786828701614416565b9150509250925092565b6000819050919050565b600061454661454161453c84614397565b614521565b614397565b9050919050565b60006145588261452b565b9050919050565b600061456a8261454d565b9050919050565b61457a8161455f565b82525050565b60006020820190506145956000830184614571565b92915050565b6145a4816143f5565b82525050565b60006020820190506145bf600083018461459b565b92915050565b6000602082840312156145db576145da614392565b5b60006145e984828501614416565b91505092915050565b6145fb816143b7565b82525050565b600060208201905061461660008301846145f2565b92915050565b600060ff82169050919050565b6146328161461c565b82525050565b600060208201905061464d6000830184614629565b92915050565b61465c8161446b565b811461466757600080fd5b50565b60008135905061467981614653565b92915050565b6000806040838503121561469657614695614392565b5b60006146a4858286016143e0565b92505060206146b58582860161466a565b9150509250929050565b6000806000606084860312156146d8576146d7614392565b5b60006146e686828701614416565b93505060206146f786828701614416565b925050604061470886828701614416565b9150509250925092565b60006020828403121561472857614727614392565b5b60006147368482850161466a565b91505092915050565b6000806040838503121561475657614755614392565b5b6000614764858286016143e0565b9250506020614775858286016143e0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147c657607f821691505b6020821081036147d9576147d861477f565b5b50919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614815601a836142eb565b9150614820826147df565b602082019050919050565b6000602082019050818103600083015261484481614808565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614889816143c9565b92915050565b6000602082840312156148a5576148a4614392565b5b60006148b38482850161487a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061491061490b614906846148eb565b614521565b6143f5565b9050919050565b614920816148f5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61495b816143b7565b82525050565b600061496d8383614952565b60208301905092915050565b6000602082019050919050565b600061499182614926565b61499b8185614931565b93506149a683614942565b8060005b838110156149d75781516149be8882614961565b97506149c983614979565b9250506001810190506149aa565b5085935050505092915050565b60006080820190506149f96000830187614917565b8181036020830152614a0b8186614986565b9050614a1a60408301856145f2565b614a27606083018461459b565b95945050505050565b6000606082019050614a4560008301866145f2565b614a5260208301856145f2565b614a5f604083018461459b565b949350505050565b600081519050614a7681614653565b92915050565b600060208284031215614a9257614a91614392565b5b6000614aa084828501614a67565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614adf6020836142eb565b9150614aea82614aa9565b602082019050919050565b60006020820190508181036000830152614b0e81614ad2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b4f826143f5565b9150614b5a836143f5565b9250828202614b68816143f5565b91508282048414831517614b7f57614b7e614b15565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc0826143f5565b9150614bcb836143f5565b925082614bdb57614bda614b86565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c42602f836142eb565b9150614c4d82614be6565b604082019050919050565b60006020820190508181036000830152614c7181614c35565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614cd46028836142eb565b9150614cdf82614c78565b604082019050919050565b60006020820190508181036000830152614d0381614cc7565b9050919050565b6000614d15826143f5565b9150614d20836143f5565b9250828201905080821115614d3857614d37614b15565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614d9a6039836142eb565b9150614da582614d3e565b604082019050919050565b60006020820190508181036000830152614dc981614d8d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614e2c6025836142eb565b9150614e3782614dd0565b604082019050919050565b60006020820190508181036000830152614e5b81614e1f565b9050919050565b7f45524332303a207370656e6420746f20746865207a65726f2061646472657373600082015250565b6000614e986020836142eb565b9150614ea382614e62565b602082019050919050565b60006020820190508181036000830152614ec781614e8b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614f2a6024836142eb565b9150614f3582614ece565b604082019050919050565b60006020820190508181036000830152614f5981614f1d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614fbc6035836142eb565b9150614fc782614f60565b604082019050919050565b60006020820190508181036000830152614feb81614faf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061504e6034836142eb565b915061505982614ff2565b604082019050919050565b6000602082019050818103600083015261507d81615041565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150e06026836142eb565b91506150eb82615084565b604082019050919050565b6000602082019050818103600083015261510f816150d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151726024836142eb565b915061517d82615116565b604082019050919050565b600060208201905081810360008301526151a181615165565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152046022836142eb565b915061520f826151a8565b604082019050919050565b60006020820190508181036000830152615233816151f7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006152966025836142eb565b91506152a18261523a565b604082019050919050565b600060208201905081810360008301526152c581615289565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153286023836142eb565b9150615333826152cc565b604082019050919050565b600060208201905081810360008301526153578161531b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006153946016836142eb565b915061539f8261535e565b602082019050919050565b600060208201905081810360008301526153c381615387565b9050919050565b7f5f7472616e736665723a205472616e736665722044656c617920656e61626c6560008201527f642e204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b600061544c6047836142eb565b9150615457826153ca565b606082019050919050565b6000602082019050818103600083015261547b8161543f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006154de6035836142eb565b91506154e982615482565b604082019050919050565b6000602082019050818103600083015261550d816154d1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061554a6013836142eb565b915061555582615514565b602082019050919050565b600060208201905081810360008301526155798161553d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155dc6036836142eb565b91506155e782615580565b604082019050919050565b6000602082019050818103600083015261560b816155cf565b9050919050565b600061561d826143f5565b9150615628836143f5565b92508282039050818111156156405761563f614b15565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156a26026836142eb565b91506156ad82615646565b604082019050919050565b600060208201905081810360008301526156d181615695565b9050919050565b600081905092915050565b50565b60006156f36000836156d8565b91506156fe826156e3565b600082019050919050565b6000615714826156e6565b9150819050919050565b6000606082019050615733600083018661459b565b615740602083018561459b565b61574d604083018461459b565b949350505050565b600060a08201905061576a600083018861459b565b6157776020830187614917565b81810360408301526157898186614986565b905061579860608301856145f2565b6157a5608083018461459b565b9695505050505050565b600060c0820190506157c460008301896145f2565b6157d1602083018861459b565b6157de6040830187614917565b6157eb6060830186614917565b6157f860808301856145f2565b61580560a083018461459b565b979650505050505050565b60008151905061581f816143ff565b92915050565b60008060006060848603121561583e5761583d614392565b5b600061584c86828701615810565b935050602061585d86828701615810565b925050604061586e86828701615810565b915050925092509256fea264697066735822122079d137a26d79861e14384a556cc1b0bd61f7c1202f91ef582993e0abc1d1efd764736f6c63430008130033

Deployed Bytecode Sourcemap

12487:17654:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2580:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3494:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13836:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27109:695;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12666:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2901:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21118:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13648:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13608;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18057:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3671:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12769:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2800:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5450:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12724:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12861:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21554:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13463:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12941:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3017:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1656:103;;;;;;;;;;;;;:::i;:::-;;17701:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19171:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13356:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19542:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17537:112;;;;;;;;;;;;;:::i;:::-;;1433:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13498:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19434:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2688:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20420:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13430:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13282:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13688:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13574:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5673:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3152:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21315:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4171:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13213:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14057:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12901:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20230:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19882:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18340:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13167:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12981:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18666:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13322:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3335:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13023:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17914:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13393:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1767:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13536:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13063:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20928:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2580:100;2634:13;2667:5;2660:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2580:100;:::o;3494:169::-;3577:4;3594:39;3603:12;:10;:12::i;:::-;3617:7;3626:6;3594:8;:39::i;:::-;3651:4;3644:11;;3494:169;;;;:::o;13836:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;27109:695::-;27225:1;27207:20;;:6;:20;;;27199:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;27269:21;27307:1;27293:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27269:40;;27330:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27320:4;27325:1;27320:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27381:4;27363;27368:1;27363:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27420:10;27401:29;;:15;;;;;;;;;;;:29;;;27397:400;;27477:15;:66;;;27551:7;27579:1;27627:4;27650:3;27672:15;27477:225;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27397:400;;;27742:6;27735:27;;;27763:3;27768:4;27773:1;27768:7;;;;;;;;:::i;:::-;;;;;;;;27777;27735:50;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27397:400;27188:616;27109:695;;;:::o;12666:51::-;;;:::o;2901:108::-;2962:7;2989:12;;2982:19;;2901:108;:::o;21118:189::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21254:9:::1;;;;;;;;;;;21223:41;;21240:12;21223:41;;;;;;;;;;;;21287:12;21275:9;;:24;;;;;;;;;;;;;;;;;;21118:189:::0;:::o;13648:33::-;;;;:::o;13608:::-;;;;:::o;18057:275::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18194:4:::1;18186;18181:1;18165:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18164:26;;;;:::i;:::-;18163:35;;;;:::i;:::-;18153:6;:45;;18131:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;18317:6;18307;:17;;;;:::i;:::-;18284:20;:40;;;;18057:275:::0;:::o;3671:492::-;3811:4;3828:36;3838:6;3846:9;3857:6;3828:9;:36::i;:::-;3877:24;3904:11;:19;3916:6;3904:19;;;;;;;;;;;;;;;:33;3924:12;:10;:12::i;:::-;3904:33;;;;;;;;;;;;;;;;3877:60;;3976:6;3956:16;:26;;3948:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4063:57;4072:6;4080:12;:10;:12::i;:::-;4113:6;4094:16;:25;4063:8;:57::i;:::-;4151:4;4144:11;;;3671:492;;;;;:::o;12769:53::-;12815:6;12769:53;:::o;2800:93::-;2858:5;2883:2;2876:9;;2800:93;:::o;5450:215::-;5538:4;5555:80;5564:12;:10;:12::i;:::-;5578:7;5624:10;5587:11;:25;5599:12;:10;:12::i;:::-;5587:25;;;;;;;;;;;;;;;:34;5613:7;5587:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5555:8;:80::i;:::-;5653:4;5646:11;;5450:215;;;;:::o;12724:38::-;;;:::o;12861:33::-;;;;;;;;;;;;;:::o;21554:126::-;21620:4;21644:19;:28;21664:7;21644:28;;;;;;;;;;;;;;;;;;;;;;;;;21637:35;;21554:126;;;:::o;13463:28::-;;;;:::o;12941:31::-;;;;;;;;;;;;;:::o;3017:127::-;3091:7;3118:9;:18;3128:7;3118:18;;;;;;;;;;;;;;;;3111:25;;3017:127;;;:::o;1656:103::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1721:30:::1;1748:1;1721:18;:30::i;:::-;1656:103::o:0;17701:152::-;17753:4;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17787:5:::1;17770:14;;:22;;;;;;;;;;;;;;;;;;17808:15;;;;;;;;;;17841:4;17834:11;;17701:152:::0;:::o;19171:167::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19326:4:::1;19284:31;:39;19316:6;19284:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;19171:167:::0;;:::o;13356:30::-;;;;:::o;19542:332::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19710:13:::1;19692:15;:31;;;;19752:13;19734:15;:31;;;;19788:7;19776:9;:19;;;;19857:9;;19839:15;;19821;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;19806:12;:60;;;;19542:332:::0;;;:::o;17537:112::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17608:4:::1;17592:13;;:20;;;;;;;;;;;;;;;;;;17637:4;17623:11;;:18;;;;;;;;;;;;;;;;;;17537:112::o:0;1433:87::-;1479:7;1506:6;;;;;;;;;;;1499:13;;1433:87;:::o;13498:31::-;;;;:::o;19434:100::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19519:7:::1;19505:11;;:21;;;;;;;;;;;;;;;;;;19434:100:::0;:::o;2688:104::-;2744:13;2777:7;2770:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2688:104;:::o;20420:304::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20564:13:::1;20556:21;;:4;:21;;::::0;20534:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20675:41;20704:4;20710:5;20675:28;:41::i;:::-;20420:304:::0;;:::o;13430:24::-;;;;:::o;13282:31::-;;;;;;;;;;;;;:::o;13688:27::-;;;;:::o;13574:25::-;;;;:::o;5673:413::-;5766:4;5783:24;5810:11;:25;5822:12;:10;:12::i;:::-;5810:25;;;;;;;;;;;;;;;:34;5836:7;5810:34;;;;;;;;;;;;;;;;5783:61;;5883:15;5863:16;:35;;5855:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5976:67;5985:12;:10;:12::i;:::-;5999:7;6027:15;6008:16;:34;5976:8;:67::i;:::-;6074:4;6067:11;;;5673:413;;;;:::o;3152:175::-;3238:4;3255:42;3265:12;:10;:12::i;:::-;3279:9;3290:6;3255:9;:42::i;:::-;3315:4;3308:11;;3152:175;;;;:::o;21315:231::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21475:15:::1;;;;;;;;;;;21432:59;;21455:18;21432:59;;;;;;;;;;;;21520:18;21502:15;;:36;;;;;;;;;;;;;;;;;;21315:231:::0;:::o;4171:265::-;4268:4;4312:1;4293:21;;:7;:21;;;4285:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4400:6;4362:11;:20;4374:7;4362:20;;;;;;;;;;;;;;;:35;4391:4;4362:35;;;;;;;;;;;;;;;:44;;;;4424:4;4417:11;;4171:265;;;;:::o;13213:62::-;;;;;;;;;;;;;;;;;:::o;14057:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;12901:33::-;;;;;;;;;;;;;:::o;20230:182::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20346:8:::1;20315:19;:28;20335:7;20315:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20386:7;20370:34;;;20395:8;20370:34;;;;;;:::i;:::-;;;;;;;;20230:182:::0;;:::o;19882:340::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20052:13:::1;20033:16;:32;;;;20095:13;20076:16;:32;;;;20132:7;20119:10;:20;;;;20204:10;;20185:16;;20166;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;20150:13;:64;;;;19882:340:::0;;;:::o;18340:256::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18480:4:::1;18472;18467:1;18451:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18450:26;;;;:::i;:::-;18449:35;;;;:::i;:::-;18439:6;:45;;18417:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18581:6;18571;:17;;;;:::i;:::-;18559:9;:29;;;;18340:256:::0;:::o;13167:39::-;;;;;;;;;;;;;:::o;12981:35::-;;;;:::o;18666:497::-;18774:4;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18853:6:::1;18848:1;18832:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18831:28;;;;:::i;:::-;18818:9;:41;;18796:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;19008:4;19003:1;18987:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18986:26;;;;:::i;:::-;18973:9;:39;;18951:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;19124:9;19103:18;:30;;;;19151:4;19144:11;;18666:497:::0;;;:::o;13322:27::-;;;;:::o;3335:151::-;3424:7;3451:11;:18;3463:5;3451:18;;;;;;;;;;;;;;;:27;3470:7;3451:27;;;;;;;;;;;;;;;;3444:34;;3335:151;;;;:::o;13023:33::-;;;;:::o;17914:135::-;17974:4;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18014:5:::1;17991:20;;:28;;;;;;;;;;;;;;;;;;18037:4;18030:11;;17914:135:::0;:::o;13393:30::-;;;;:::o;1767:201::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1876:1:::1;1856:22;;:8;:22;;::::0;1848:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1932:28;1951:8;1932:18;:28::i;:::-;1767:201:::0;:::o;13536:31::-;;;;:::o;13063:24::-;;;;:::o;20928:182::-;1579:12;:10;:12::i;:::-;1568:23;;:7;:5;:7::i;:::-;:23;;;1560:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21060:8:::1;;;;;;;;;;;21031:38;;21047:11;21031:38;;;;;;;;;;;;21091:11;21080:8;;:22;;;;;;;;;;;;;;;;;;20928:182:::0;:::o;132:98::-;185:7;212:10;205:17;;132:98;:::o;6501:380::-;6654:1;6637:19;;:5;:19;;;6629:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6735:1;6716:21;;:7;:21;;;6708:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6819:6;6789:11;:18;6801:5;6789:18;;;;;;;;;;;;;;;:27;6808:7;6789:27;;;;;;;;;;;;;;;:36;;;;6857:7;6841:32;;6850:5;6841:32;;;6866:6;6841:32;;;;;;:::i;:::-;;;;;;;;6501:380;;;:::o;21738:4766::-;21886:1;21870:18;;:4;:18;;;21862:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21963:1;21949:16;;:2;:16;;;21941:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22032:1;22022:6;:11;22018:93;;22050:28;22066:4;22072:2;22076:1;22050:15;:28::i;:::-;22093:7;;22018:93;22127:14;;;;;;;;;;;22123:2269;;;22188:7;:5;:7::i;:::-;22180:15;;:4;:15;;;;:49;;;;;22222:7;:5;:7::i;:::-;22216:13;;:2;:13;;;;22180:49;:86;;;;;22264:1;22250:16;;:2;:16;;;;22180:86;:128;;;;;22301:6;22287:21;;:2;:21;;;;22180:128;:158;;;;;22330:8;;;;;;;;;;;22329:9;22180:158;22158:2223;;;22378:13;;;;;;;;;;;22373:223;;22450:19;:25;22470:4;22450:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;22479:19;:23;22499:2;22479:23;;;;;;;;;;;;;;;;;;;;;;;;;22450:52;22416:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22373:223;22751:20;;;;;;;;;;;22747:422;;;22805:7;:5;:7::i;:::-;22799:13;;:2;:13;;;;:47;;;;;22830:15;22816:30;;:2;:30;;;;22799:47;:79;;;;;22864:13;22850:28;;:2;:28;;;;22799:79;22795:355;;;22957:12;22915:28;:39;22944:9;22915:39;;;;;;;;;;;;;;;;:54;22907:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;23114:12;23072:28;:39;23101:9;23072:39;;;;;;;;;;;;;;;:54;;;;22795:355;22747:422;23244:25;:31;23270:4;23244:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;23301:31;:35;23333:2;23301:35;;;;;;;;;;;;;;;;;;;;;;;;;23300:36;23244:92;23218:1148;;;23423:20;;23413:6;:30;;23379:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;23631:9;;23614:13;23624:2;23614:9;:13::i;:::-;23605:6;:22;;;;:::i;:::-;:35;;23571:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;23218:1148;;;23810:25;:29;23836:2;23810:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;23865:31;:37;23897:4;23865:37;;;;;;;;;;;;;;;;;;;;;;;;;23864:38;23810:92;23784:582;;;23989:20;;23979:6;:30;;23945:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;23784:582;;;24146:31;:35;24178:2;24146:35;;;;;;;;;;;;;;;;;;;;;;;;;24141:225;;24266:9;;24249:13;24259:2;24249:9;:13::i;:::-;24240:6;:22;;;;:::i;:::-;:35;;24206:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24141:225;23784:582;23218:1148;22158:2223;22123:2269;24404:28;24435:24;24453:4;24435:9;:24::i;:::-;24404:55;;24472:12;24511:18;;24487:20;:42;;24472:57;;24562:13;24546:30;;:4;:30;;;24542:255;;24632:1;24597:27;:31;24625:2;24597:31;;;;;;;;;;;;;;;;:36;24593:123;;24688:12;24654:27;:31;24682:2;24654:31;;;;;;;;;;;;;;;:46;;;;24593:123;24542:255;;;24737:8;;;;;;;;;;;24733:64;;24781:4;24762:16;;:23;;;;;;;;;;;;;;;;;;24733:64;24542:255;24827:7;:35;;;;;24851:11;;;;;;;;;;;24827:35;:61;;;;;24880:8;;;;;;;;;;;24879:9;24827:61;:110;;;;;24906:25;:31;24932:4;24906:31;;;;;;;;;;;;;;;;;;;;;;;;;24905:32;24827:110;:153;;;;;24955:19;:25;24975:4;24955:25;;;;;;;;;;;;;;;;;;;;;;;;;24954:26;24827:153;:194;;;;;24998:19;:23;25018:2;24998:23;;;;;;;;;;;;;;;;;;;;;;;;;24997:24;24827:194;24809:326;;;25059:4;25048:8;;:15;;;;;;;;;;;;;;;;;;25080:10;:8;:10::i;:::-;25118:5;25107:8;;:16;;;;;;;;;;;;;;;;;;24809:326;25147:12;25163:8;;;;;;;;;;;25162:9;25147:24;;25273:19;:25;25293:4;25273:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25302:19;:23;25322:2;25302:23;;;;;;;;;;;;;;;;;;;;;;;;;25273:52;25269:100;;;25352:5;25342:15;;25269:100;25381:12;25486:7;25482:969;;;25538:25;:29;25564:2;25538:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25587:1;25571:13;;:17;25538:50;25534:768;;;25616:34;25646:3;25616:25;25627:13;;25616:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25609:41;;25719:13;;25699:16;;25692:4;:23;;;;:::i;:::-;25691:41;;;;:::i;:::-;25669:18;;:63;;;;;;;:::i;:::-;;;;;;;;25789:13;;25775:10;;25768:4;:17;;;;:::i;:::-;25767:35;;;;:::i;:::-;25751:12;;:51;;;;;;;:::i;:::-;;;;;;;;25871:13;;25851:16;;25844:4;:23;;;;:::i;:::-;25843:41;;;;:::i;:::-;25821:18;;:63;;;;;;;:::i;:::-;;;;;;;;25534:768;;;25946:25;:31;25972:4;25946:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;25996:1;25981:12;;:16;25946:51;25942:360;;;26025:33;26054:3;26025:24;26036:12;;26025:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26018:40;;26126:12;;26107:15;;26100:4;:22;;;;:::i;:::-;26099:39;;;;:::i;:::-;26077:18;;:61;;;;;;;:::i;:::-;;;;;;;;26194:12;;26181:9;;26174:4;:16;;;;:::i;:::-;26173:33;;;;:::i;:::-;26157:12;;:49;;;;;;;:::i;:::-;;;;;;;;26274:12;;26255:15;;26248:4;:22;;;;:::i;:::-;26247:39;;;;:::i;:::-;26225:18;;:61;;;;;;;:::i;:::-;;;;;;;;25942:360;25534:768;26329:1;26322:4;:8;26318:91;;;26351:42;26367:4;26381;26388;26351:15;:42::i;:::-;26318:91;26435:4;26425:14;;;;;:::i;:::-;;;25482:969;26463:33;26479:4;26485:2;26489:6;26463:15;:33::i;:::-;21851:4653;;;;21738:4766;;;;:::o;1976:191::-;2050:16;2069:6;;;;;;;;;;;2050:25;;2095:8;2086:6;;:17;;;;;;;;;;;;;;;;;;2150:8;2119:40;;2140:8;2119:40;;;;;;;;;;;;2039:128;1976:191;:::o;20732:188::-;20849:5;20815:25;:31;20841:4;20815:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20906:5;20872:40;;20900:4;20872:40;;;;;;;;;;;;20732:188;;:::o;4709:733::-;4867:1;4849:20;;:6;:20;;;4841:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4951:1;4930:23;;:9;:23;;;4922:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5006:47;5027:6;5035:9;5046:6;5006:20;:47::i;:::-;5066:21;5090:9;:17;5100:6;5090:17;;;;;;;;;;;;;;;;5066:41;;5143:6;5126:13;:23;;5118:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5264:6;5248:13;:22;5228:9;:17;5238:6;5228:17;;;;;;;;;;;;;;;:42;;;;5316:6;5292:9;:20;5302:9;5292:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5357:9;5340:35;;5349:6;5340:35;;;5368:6;5340:35;;;;;;:::i;:::-;;;;;;;;5388:46;5408:6;5416:9;5427:6;5388:19;:46::i;:::-;4830:612;4709:733;;;:::o;28334:1804::-;28373:23;28399:24;28417:4;28399:9;:24::i;:::-;28373:50;;28434:25;28530:12;;28496:18;;28462;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;28434:108;;28553:12;28601:1;28582:15;:20;:46;;;;28627:1;28606:17;:22;28582:46;28578:85;;;28645:7;;;;;28578:85;28717:1;28696:18;;:22;;;;:::i;:::-;28678:15;:40;28675:109;;;28771:1;28750:18;;:22;;;;:::i;:::-;28732:40;;28675:109;28845:23;28958:1;28925:17;28890:18;;28872:15;:36;;;;:::i;:::-;28871:71;;;;:::i;:::-;:88;;;;:::i;:::-;28845:114;;28970:26;28999:36;29019:15;28999;:19;;:36;;;;:::i;:::-;28970:65;;29048:25;29076:21;29048:49;;29110:36;29127:18;29110:16;:36::i;:::-;29159:18;29180:44;29206:17;29180:21;:25;;:44;;;;:::i;:::-;29159:65;;29237:23;29263:81;29316:17;29263:34;29278:18;;29263:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;29237:107;;29355:17;29375:51;29408:17;29375:28;29390:12;;29375:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;29355:71;;29439:23;29496:9;29478:15;29465:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;29439:66;;29539:1;29518:18;:22;;;;29572:1;29551:18;:22;;;;29599:1;29584:12;:16;;;;29635:9;;;;;;;;;;;29627:23;;29658:9;29627:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29613:59;;;;;29691:7;29683:16;;;;;;29734:1;29716:15;:19;:42;;;;;29757:1;29739:15;:19;29716:42;29712:278;;;29775:46;29788:15;29805;29775:12;:46::i;:::-;29841:137;29874:18;29911:15;29945:18;;29841:137;;;;;;;;:::i;:::-;;;;;;;;29712:278;30024:15;;;;;;;;;;;30016:29;;30067:21;30016:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30002:101;;;;;30122:7;30114:16;;;;;;28362:1776;;;;;;;;;;28334:1804;:::o;7020:98::-;7078:7;7109:1;7105;:5;;;;:::i;:::-;7098:12;;7020:98;;;;:::o;7126:::-;7184:7;7215:1;7211;:5;;;;:::i;:::-;7204:12;;7126:98;;;;:::o;4444:125::-;;;;:::o;4577:124::-;;;;:::o;6914:98::-;6972:7;7003:1;6999;:5;;;;:::i;:::-;6992:12;;6914:98;;;;:::o;26512:589::-;26638:21;26676:1;26662:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26638:40;;26707:4;26689;26694:1;26689:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26733:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26723:4;26728:1;26723:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26768:62;26785:4;26800:15;26818:11;26768:8;:62::i;:::-;26869:15;:66;;;26950:11;26976:1;27020:4;27047;27067:15;26869:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26567:534;26512:589;:::o;27812:514::-;27960:62;27977:4;27992:15;28010:11;27960:8;:62::i;:::-;28065:15;:31;;;28104:9;28137:4;28157:11;28183:1;28226;28269:8;;;;;;;;;;;28292:15;28065:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27812: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:619::-;3858:6;3866;3874;3923:2;3911:9;3902:7;3898:23;3894:32;3891:119;;;3929:79;;:::i;:::-;3891:119;4049:1;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4020:117;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;4304:2;4330:53;4375:7;4366:6;4355:9;4351:22;4330:53;:::i;:::-;4320:63;;4275:118;3781:619;;;;;:::o;4406:60::-;4434:3;4455:5;4448:12;;4406:60;;;:::o;4472:142::-;4522:9;4555:53;4573:34;4582:24;4600:5;4582:24;:::i;:::-;4573:34;:::i;:::-;4555:53;:::i;:::-;4542:66;;4472:142;;;:::o;4620:126::-;4670:9;4703:37;4734:5;4703:37;:::i;:::-;4690:50;;4620:126;;;:::o;4752:153::-;4829:9;4862:37;4893:5;4862:37;:::i;:::-;4849:50;;4752:153;;;:::o;4911:185::-;5025:64;5083:5;5025:64;:::i;:::-;5020:3;5013:77;4911:185;;:::o;5102:276::-;5222:4;5260:2;5249:9;5245:18;5237:26;;5273:98;5368:1;5357:9;5353:17;5344:6;5273:98;:::i;:::-;5102:276;;;;:::o;5384:118::-;5471:24;5489:5;5471:24;:::i;:::-;5466:3;5459:37;5384:118;;:::o;5508:222::-;5601:4;5639:2;5628:9;5624:18;5616:26;;5652:71;5720:1;5709:9;5705:17;5696:6;5652:71;:::i;:::-;5508:222;;;;:::o;5736:329::-;5795:6;5844:2;5832:9;5823:7;5819:23;5815:32;5812:119;;;5850:79;;:::i;:::-;5812:119;5970:1;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5941:117;5736:329;;;;:::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:176::-;9674:28;9670:1;9662:6;9658:14;9651:52;9534:176;:::o;9716:366::-;9858:3;9879:67;9943:2;9938:3;9879:67;:::i;:::-;9872:74;;9955:93;10044:3;9955:93;:::i;:::-;10073:2;10068:3;10064:12;10057:19;;9716:366;;;:::o;10088:419::-;10254:4;10292:2;10281:9;10277:18;10269:26;;10341:9;10335:4;10331:20;10327:1;10316:9;10312:17;10305:47;10369:131;10495:4;10369:131;:::i;:::-;10361:139;;10088:419;;;:::o;10513:180::-;10561:77;10558:1;10551:88;10658:4;10655:1;10648:15;10682:4;10679:1;10672:15;10699:143;10756:5;10787:6;10781:13;10772:22;;10803:33;10830:5;10803:33;:::i;:::-;10699:143;;;;:::o;10848:351::-;10918:6;10967:2;10955:9;10946:7;10942:23;10938:32;10935:119;;;10973:79;;:::i;:::-;10935:119;11093:1;11118:64;11174:7;11165:6;11154:9;11150:22;11118:64;:::i;:::-;11108:74;;11064:128;10848:351;;;;:::o;11205:180::-;11253:77;11250:1;11243:88;11350:4;11347:1;11340:15;11374:4;11371:1;11364:15;11391:85;11436:7;11465:5;11454:16;;11391:85;;;:::o;11482:158::-;11540:9;11573:61;11591:42;11600:32;11626:5;11600:32;:::i;:::-;11591:42;:::i;:::-;11573:61;:::i;:::-;11560:74;;11482:158;;;:::o;11646:147::-;11741:45;11780:5;11741:45;:::i;:::-;11736:3;11729:58;11646:147;;:::o;11799:114::-;11866:6;11900:5;11894:12;11884:22;;11799:114;;;:::o;11919:184::-;12018:11;12052:6;12047:3;12040:19;12092:4;12087:3;12083:14;12068:29;;11919:184;;;;:::o;12109:132::-;12176:4;12199:3;12191:11;;12229:4;12224:3;12220:14;12212:22;;12109:132;;;:::o;12247:108::-;12324:24;12342:5;12324:24;:::i;:::-;12319:3;12312:37;12247:108;;:::o;12361:179::-;12430:10;12451:46;12493:3;12485:6;12451:46;:::i;:::-;12529:4;12524:3;12520:14;12506:28;;12361:179;;;;:::o;12546:113::-;12616:4;12648;12643:3;12639:14;12631:22;;12546:113;;;:::o;12695:732::-;12814:3;12843:54;12891:5;12843:54;:::i;:::-;12913:86;12992:6;12987:3;12913:86;:::i;:::-;12906:93;;13023:56;13073:5;13023:56;:::i;:::-;13102:7;13133:1;13118:284;13143:6;13140:1;13137:13;13118:284;;;13219:6;13213:13;13246:63;13305:3;13290:13;13246:63;:::i;:::-;13239:70;;13332:60;13385:6;13332:60;:::i;:::-;13322:70;;13178:224;13165:1;13162;13158:9;13153:14;;13118:284;;;13122:14;13418:3;13411:10;;12819:608;;;12695:732;;;;:::o;13433:720::-;13668:4;13706:3;13695:9;13691:19;13683:27;;13720:79;13796:1;13785:9;13781:17;13772:6;13720:79;:::i;:::-;13846:9;13840:4;13836:20;13831:2;13820:9;13816:18;13809:48;13874:108;13977:4;13968:6;13874:108;:::i;:::-;13866:116;;13992:72;14060:2;14049:9;14045:18;14036:6;13992:72;:::i;:::-;14074;14142:2;14131:9;14127:18;14118:6;14074:72;:::i;:::-;13433:720;;;;;;;:::o;14159:442::-;14308:4;14346:2;14335:9;14331:18;14323:26;;14359:71;14427:1;14416:9;14412:17;14403:6;14359:71;:::i;:::-;14440:72;14508:2;14497:9;14493:18;14484:6;14440:72;:::i;:::-;14522;14590:2;14579:9;14575:18;14566:6;14522:72;:::i;:::-;14159:442;;;;;;:::o;14607:137::-;14661:5;14692:6;14686:13;14677:22;;14708:30;14732:5;14708:30;:::i;:::-;14607:137;;;;:::o;14750:345::-;14817:6;14866:2;14854:9;14845:7;14841:23;14837:32;14834:119;;;14872:79;;:::i;:::-;14834:119;14992:1;15017:61;15070:7;15061:6;15050:9;15046:22;15017:61;:::i;:::-;15007:71;;14963:125;14750:345;;;;:::o;15101:182::-;15241:34;15237:1;15229:6;15225:14;15218:58;15101:182;:::o;15289:366::-;15431:3;15452:67;15516:2;15511:3;15452:67;:::i;:::-;15445:74;;15528:93;15617:3;15528:93;:::i;:::-;15646:2;15641:3;15637:12;15630:19;;15289:366;;;:::o;15661:419::-;15827:4;15865:2;15854:9;15850:18;15842:26;;15914:9;15908:4;15904:20;15900:1;15889:9;15885:17;15878:47;15942:131;16068:4;15942:131;:::i;:::-;15934:139;;15661:419;;;:::o;16086:180::-;16134:77;16131:1;16124:88;16231:4;16228:1;16221:15;16255:4;16252:1;16245:15;16272:410;16312:7;16335:20;16353:1;16335:20;:::i;:::-;16330:25;;16369:20;16387:1;16369:20;:::i;:::-;16364:25;;16424:1;16421;16417:9;16446:30;16464:11;16446:30;:::i;:::-;16435:41;;16625:1;16616:7;16612:15;16609:1;16606:22;16586:1;16579:9;16559:83;16536:139;;16655:18;;:::i;:::-;16536:139;16320:362;16272:410;;;;:::o;16688:180::-;16736:77;16733:1;16726:88;16833:4;16830:1;16823:15;16857:4;16854:1;16847:15;16874:185;16914:1;16931:20;16949:1;16931:20;:::i;:::-;16926:25;;16965:20;16983:1;16965:20;:::i;:::-;16960:25;;17004:1;16994:35;;17009:18;;:::i;:::-;16994:35;17051:1;17048;17044:9;17039:14;;16874:185;;;;:::o;17065:234::-;17205:34;17201:1;17193:6;17189:14;17182:58;17274:17;17269:2;17261:6;17257:15;17250:42;17065:234;:::o;17305:366::-;17447:3;17468:67;17532:2;17527:3;17468:67;:::i;:::-;17461:74;;17544:93;17633:3;17544:93;:::i;:::-;17662:2;17657:3;17653:12;17646:19;;17305:366;;;:::o;17677:419::-;17843:4;17881:2;17870:9;17866:18;17858:26;;17930:9;17924:4;17920:20;17916:1;17905:9;17901:17;17894:47;17958:131;18084:4;17958:131;:::i;:::-;17950:139;;17677:419;;;:::o;18102:227::-;18242:34;18238:1;18230:6;18226:14;18219:58;18311:10;18306:2;18298:6;18294:15;18287:35;18102:227;:::o;18335:366::-;18477:3;18498:67;18562:2;18557:3;18498:67;:::i;:::-;18491:74;;18574:93;18663:3;18574:93;:::i;:::-;18692:2;18687:3;18683:12;18676:19;;18335:366;;;:::o;18707:419::-;18873:4;18911:2;18900:9;18896:18;18888:26;;18960:9;18954:4;18950:20;18946:1;18935:9;18931:17;18924:47;18988:131;19114:4;18988:131;:::i;:::-;18980:139;;18707:419;;;:::o;19132:191::-;19172:3;19191:20;19209:1;19191:20;:::i;:::-;19186:25;;19225:20;19243:1;19225:20;:::i;:::-;19220:25;;19268:1;19265;19261:9;19254:16;;19289:3;19286:1;19283:10;19280:36;;;19296:18;;:::i;:::-;19280:36;19132:191;;;;:::o;19329:244::-;19469:34;19465:1;19457:6;19453:14;19446:58;19538:27;19533:2;19525:6;19521:15;19514:52;19329:244;:::o;19579:366::-;19721:3;19742:67;19806:2;19801:3;19742:67;:::i;:::-;19735:74;;19818:93;19907:3;19818:93;:::i;:::-;19936:2;19931:3;19927:12;19920:19;;19579:366;;;:::o;19951:419::-;20117:4;20155:2;20144:9;20140:18;20132:26;;20204:9;20198:4;20194:20;20190:1;20179:9;20175:17;20168:47;20232:131;20358:4;20232:131;:::i;:::-;20224:139;;19951:419;;;:::o;20376:224::-;20516:34;20512:1;20504:6;20500:14;20493:58;20585:7;20580:2;20572:6;20568:15;20561:32;20376:224;:::o;20606:366::-;20748:3;20769:67;20833:2;20828:3;20769:67;:::i;:::-;20762:74;;20845:93;20934:3;20845:93;:::i;:::-;20963:2;20958:3;20954:12;20947:19;;20606:366;;;:::o;20978:419::-;21144:4;21182:2;21171:9;21167:18;21159:26;;21231:9;21225:4;21221:20;21217:1;21206:9;21202:17;21195:47;21259:131;21385:4;21259:131;:::i;:::-;21251:139;;20978:419;;;:::o;21403:182::-;21543:34;21539:1;21531:6;21527:14;21520:58;21403:182;:::o;21591:366::-;21733:3;21754:67;21818:2;21813:3;21754:67;:::i;:::-;21747:74;;21830:93;21919:3;21830:93;:::i;:::-;21948:2;21943:3;21939:12;21932:19;;21591:366;;;:::o;21963:419::-;22129:4;22167:2;22156:9;22152:18;22144:26;;22216:9;22210:4;22206:20;22202:1;22191:9;22187:17;22180:47;22244:131;22370:4;22244:131;:::i;:::-;22236:139;;21963:419;;;:::o;22388:223::-;22528:34;22524:1;22516:6;22512:14;22505:58;22597:6;22592:2;22584:6;22580:15;22573:31;22388:223;:::o;22617:366::-;22759:3;22780:67;22844:2;22839:3;22780:67;:::i;:::-;22773:74;;22856:93;22945:3;22856:93;:::i;:::-;22974:2;22969:3;22965:12;22958:19;;22617:366;;;:::o;22989:419::-;23155:4;23193:2;23182:9;23178:18;23170:26;;23242:9;23236:4;23232:20;23228:1;23217:9;23213:17;23206:47;23270:131;23396:4;23270:131;:::i;:::-;23262:139;;22989:419;;;:::o;23414:240::-;23554:34;23550:1;23542:6;23538:14;23531:58;23623:23;23618:2;23610:6;23606:15;23599:48;23414:240;:::o;23660:366::-;23802:3;23823:67;23887:2;23882:3;23823:67;:::i;:::-;23816:74;;23899:93;23988:3;23899:93;:::i;:::-;24017:2;24012:3;24008:12;24001:19;;23660:366;;;:::o;24032:419::-;24198:4;24236:2;24225:9;24221:18;24213:26;;24285:9;24279:4;24275:20;24271:1;24260:9;24256:17;24249:47;24313:131;24439:4;24313:131;:::i;:::-;24305:139;;24032:419;;;:::o;24457:239::-;24597:34;24593:1;24585:6;24581:14;24574:58;24666:22;24661:2;24653:6;24649:15;24642:47;24457:239;:::o;24702:366::-;24844:3;24865:67;24929:2;24924:3;24865:67;:::i;:::-;24858:74;;24941:93;25030:3;24941:93;:::i;:::-;25059:2;25054:3;25050:12;25043:19;;24702:366;;;:::o;25074:419::-;25240:4;25278:2;25267:9;25263:18;25255:26;;25327:9;25321:4;25317:20;25313:1;25302:9;25298:17;25291:47;25355:131;25481:4;25355:131;:::i;:::-;25347:139;;25074:419;;;:::o;25499:225::-;25639:34;25635:1;25627:6;25623:14;25616:58;25708:8;25703:2;25695:6;25691:15;25684:33;25499:225;:::o;25730:366::-;25872:3;25893:67;25957:2;25952:3;25893:67;:::i;:::-;25886:74;;25969:93;26058:3;25969:93;:::i;:::-;26087:2;26082:3;26078:12;26071:19;;25730:366;;;:::o;26102:419::-;26268:4;26306:2;26295:9;26291:18;26283:26;;26355:9;26349:4;26345:20;26341:1;26330:9;26326:17;26319:47;26383:131;26509:4;26383:131;:::i;:::-;26375:139;;26102:419;;;:::o;26527:223::-;26667:34;26663:1;26655:6;26651:14;26644:58;26736:6;26731:2;26723:6;26719:15;26712:31;26527:223;:::o;26756:366::-;26898:3;26919:67;26983:2;26978:3;26919:67;:::i;:::-;26912:74;;26995:93;27084:3;26995:93;:::i;:::-;27113:2;27108:3;27104:12;27097:19;;26756:366;;;:::o;27128:419::-;27294:4;27332:2;27321:9;27317:18;27309:26;;27381:9;27375:4;27371:20;27367:1;27356:9;27352:17;27345:47;27409:131;27535:4;27409:131;:::i;:::-;27401:139;;27128:419;;;:::o;27553:221::-;27693:34;27689:1;27681:6;27677:14;27670:58;27762:4;27757:2;27749:6;27745:15;27738:29;27553:221;:::o;27780:366::-;27922:3;27943:67;28007:2;28002:3;27943:67;:::i;:::-;27936:74;;28019:93;28108:3;28019:93;:::i;:::-;28137:2;28132:3;28128:12;28121:19;;27780:366;;;:::o;28152:419::-;28318:4;28356:2;28345:9;28341:18;28333:26;;28405:9;28399:4;28395:20;28391:1;28380:9;28376:17;28369:47;28433:131;28559:4;28433:131;:::i;:::-;28425:139;;28152:419;;;:::o;28577:224::-;28717:34;28713:1;28705:6;28701:14;28694:58;28786:7;28781:2;28773:6;28769:15;28762:32;28577:224;:::o;28807:366::-;28949:3;28970:67;29034:2;29029:3;28970:67;:::i;:::-;28963:74;;29046:93;29135:3;29046:93;:::i;:::-;29164:2;29159:3;29155:12;29148:19;;28807:366;;;:::o;29179:419::-;29345:4;29383:2;29372:9;29368:18;29360:26;;29432:9;29426:4;29422:20;29418:1;29407:9;29403:17;29396:47;29460:131;29586:4;29460:131;:::i;:::-;29452:139;;29179:419;;;:::o;29604:222::-;29744:34;29740:1;29732:6;29728:14;29721:58;29813:5;29808:2;29800:6;29796:15;29789:30;29604:222;:::o;29832:366::-;29974:3;29995:67;30059:2;30054:3;29995:67;:::i;:::-;29988:74;;30071:93;30160:3;30071:93;:::i;:::-;30189:2;30184:3;30180:12;30173:19;;29832:366;;;:::o;30204:419::-;30370:4;30408:2;30397:9;30393:18;30385:26;;30457:9;30451:4;30447:20;30443:1;30432:9;30428:17;30421:47;30485:131;30611:4;30485:131;:::i;:::-;30477:139;;30204:419;;;:::o;30629:172::-;30769:24;30765:1;30757:6;30753:14;30746:48;30629:172;:::o;30807:366::-;30949:3;30970:67;31034:2;31029:3;30970:67;:::i;:::-;30963:74;;31046:93;31135:3;31046:93;:::i;:::-;31164:2;31159:3;31155:12;31148:19;;30807:366;;;:::o;31179:419::-;31345:4;31383:2;31372:9;31368:18;31360:26;;31432:9;31426:4;31422:20;31418:1;31407:9;31403:17;31396:47;31460:131;31586:4;31460:131;:::i;:::-;31452:139;;31179:419;;;:::o;31604:295::-;31744:34;31740:1;31732:6;31728:14;31721:58;31813:34;31808:2;31800:6;31796:15;31789:59;31882:9;31877:2;31869:6;31865:15;31858:34;31604:295;:::o;31905:366::-;32047:3;32068:67;32132:2;32127:3;32068:67;:::i;:::-;32061:74;;32144:93;32233:3;32144:93;:::i;:::-;32262:2;32257:3;32253:12;32246:19;;31905:366;;;:::o;32277:419::-;32443:4;32481:2;32470:9;32466:18;32458:26;;32530:9;32524:4;32520:20;32516:1;32505:9;32501:17;32494:47;32558:131;32684:4;32558:131;:::i;:::-;32550:139;;32277:419;;;:::o;32702:240::-;32842:34;32838:1;32830:6;32826:14;32819:58;32911:23;32906:2;32898:6;32894:15;32887:48;32702:240;:::o;32948:366::-;33090:3;33111:67;33175:2;33170:3;33111:67;:::i;:::-;33104:74;;33187:93;33276:3;33187:93;:::i;:::-;33305:2;33300:3;33296:12;33289:19;;32948:366;;;:::o;33320:419::-;33486:4;33524:2;33513:9;33509:18;33501:26;;33573:9;33567:4;33563:20;33559:1;33548:9;33544:17;33537:47;33601:131;33727:4;33601:131;:::i;:::-;33593:139;;33320:419;;;:::o;33745:169::-;33885:21;33881:1;33873:6;33869:14;33862:45;33745:169;:::o;33920:366::-;34062:3;34083:67;34147:2;34142:3;34083:67;:::i;:::-;34076:74;;34159:93;34248:3;34159:93;:::i;:::-;34277:2;34272:3;34268:12;34261:19;;33920:366;;;:::o;34292:419::-;34458:4;34496:2;34485:9;34481:18;34473:26;;34545:9;34539:4;34535:20;34531:1;34520:9;34516:17;34509:47;34573:131;34699:4;34573:131;:::i;:::-;34565:139;;34292:419;;;:::o;34717:241::-;34857:34;34853:1;34845:6;34841:14;34834:58;34926:24;34921:2;34913:6;34909:15;34902:49;34717:241;:::o;34964:366::-;35106:3;35127:67;35191:2;35186:3;35127:67;:::i;:::-;35120:74;;35203:93;35292:3;35203:93;:::i;:::-;35321:2;35316:3;35312:12;35305:19;;34964:366;;;:::o;35336:419::-;35502:4;35540:2;35529:9;35525:18;35517:26;;35589:9;35583:4;35579:20;35575:1;35564:9;35560:17;35553:47;35617:131;35743:4;35617:131;:::i;:::-;35609:139;;35336:419;;;:::o;35761:194::-;35801:4;35821:20;35839:1;35821:20;:::i;:::-;35816:25;;35855:20;35873:1;35855:20;:::i;:::-;35850:25;;35899:1;35896;35892:9;35884:17;;35923:1;35917:4;35914:11;35911:37;;;35928:18;;:::i;:::-;35911:37;35761:194;;;;:::o;35961:225::-;36101:34;36097:1;36089:6;36085:14;36078:58;36170:8;36165:2;36157:6;36153:15;36146:33;35961:225;:::o;36192:366::-;36334:3;36355:67;36419:2;36414:3;36355:67;:::i;:::-;36348:74;;36431:93;36520:3;36431:93;:::i;:::-;36549:2;36544:3;36540:12;36533:19;;36192:366;;;:::o;36564:419::-;36730:4;36768:2;36757:9;36753:18;36745:26;;36817:9;36811:4;36807:20;36803:1;36792:9;36788:17;36781:47;36845:131;36971:4;36845:131;:::i;:::-;36837:139;;36564:419;;;:::o;36989:147::-;37090:11;37127:3;37112:18;;36989:147;;;;:::o;37142:114::-;;:::o;37262:398::-;37421:3;37442:83;37523:1;37518:3;37442:83;:::i;:::-;37435:90;;37534:93;37623:3;37534:93;:::i;:::-;37652:1;37647:3;37643:11;37636:18;;37262:398;;;:::o;37666:379::-;37850:3;37872:147;38015:3;37872:147;:::i;:::-;37865:154;;38036:3;38029:10;;37666:379;;;:::o;38051:442::-;38200:4;38238:2;38227:9;38223:18;38215:26;;38251:71;38319:1;38308:9;38304:17;38295:6;38251:71;:::i;:::-;38332:72;38400:2;38389:9;38385:18;38376:6;38332:72;:::i;:::-;38414;38482:2;38471:9;38467:18;38458:6;38414:72;:::i;:::-;38051:442;;;;;;:::o;38499:831::-;38762:4;38800:3;38789:9;38785:19;38777:27;;38814:71;38882:1;38871:9;38867:17;38858:6;38814:71;:::i;:::-;38895:80;38971:2;38960:9;38956:18;38947:6;38895:80;:::i;:::-;39022:9;39016:4;39012:20;39007:2;38996:9;38992:18;38985:48;39050:108;39153:4;39144:6;39050:108;:::i;:::-;39042:116;;39168:72;39236:2;39225:9;39221:18;39212:6;39168:72;:::i;:::-;39250:73;39318:3;39307:9;39303:19;39294:6;39250:73;:::i;:::-;38499:831;;;;;;;;:::o;39336:807::-;39585:4;39623:3;39612:9;39608:19;39600:27;;39637:71;39705:1;39694:9;39690:17;39681:6;39637:71;:::i;:::-;39718:72;39786:2;39775:9;39771:18;39762:6;39718:72;:::i;:::-;39800:80;39876:2;39865:9;39861:18;39852:6;39800:80;:::i;:::-;39890;39966:2;39955:9;39951:18;39942:6;39890:80;:::i;:::-;39980:73;40048:3;40037:9;40033:19;40024:6;39980:73;:::i;:::-;40063;40131:3;40120:9;40116:19;40107:6;40063:73;:::i;:::-;39336:807;;;;;;;;;:::o;40149:143::-;40206:5;40237:6;40231:13;40222:22;;40253:33;40280:5;40253:33;:::i;:::-;40149:143;;;;:::o;40298:663::-;40386:6;40394;40402;40451:2;40439:9;40430:7;40426:23;40422:32;40419:119;;;40457:79;;:::i;:::-;40419:119;40577:1;40602:64;40658:7;40649:6;40638:9;40634:22;40602:64;:::i;:::-;40592:74;;40548:128;40715:2;40741:64;40797:7;40788:6;40777:9;40773:22;40741:64;:::i;:::-;40731:74;;40686:129;40854:2;40880:64;40936:7;40927:6;40916:9;40912:22;40880:64;:::i;:::-;40870:74;;40825:129;40298:663;;;;;:::o

Swarm Source

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