ETH Price: $3,480.74 (+0.29%)

Token

Veritas (VGPU)
 

Overview

Max Total Supply

1,000,000,000 VGPU

Holders

864

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
303,903.987400924851572585 VGPU

Value
$0.00
0x80d0134e1418d213d174a8df511b765aecbb6978
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:
Veritas

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
Illuminating tomorrow’s frontiers with cutting edge GPUs and Cloud Computing brilliance.

Twitter:  https://twitter.com/veritas_gpu
Telegram: https://t.me/VeritasCloud
Website:  https://www.veritascloud.io/
DAPP:     https://app.veritascloud.io/
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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 Veritas is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    address public marketingWallet;
    address public developmentWallet;

    uint256 public maxT;
    uint256 public swapTokensAtAmount;
    uint256 public maxW;

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevelopmentFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevelopmentFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDevelopment;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxT;

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("Veritas", unicode"VGPU") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint256 _buyMarketingFee = 10;
        uint256 _buyDevelopmentFee = 10;

        uint256 _sellMarketingFee = 15;
        uint256 _sellDevelopmentFee = 15;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxT = 20_000_000 * 1e18; // 2% from total supply maxTTxn
        maxW = 20_000_000 * 1e18; // 2% from total supply maxW
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyTotalFees = buyMarketingFee + buyDevelopmentFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellTotalFees = sellMarketingFee + sellDevelopmentFee;

        marketingWallet = address(0xed24aB83dB4B5Aaa7cf5746Cf3A4A81C9598A37B);
        developmentWallet = address(0xed24aB83dB4B5Aaa7cf5746Cf3A4A81C9598A37B);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function enableTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;
    }

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

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

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

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxT[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 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevelopmentFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevelopmentFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevelopmentFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevelopmentFee;
        require(sellTotalFees <= 30, "Must keep fees at 50% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updatedevelopmentWallet(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

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

    event BoughtEarly(address indexed sniper);

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

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

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

            amount -= fees;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function manualswap(uint256 amount) external {
      require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDevelopment;
        bool success;

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

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

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDevelopment = 0;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"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":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":"developmentWalletUpdated","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":"_isExcludedmaxT","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":"buyDevelopmentFee","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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxW","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":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxTAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040518060400160405280600781526020017f56657269746173000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f56475055000000000000000000000000000000000000000000000000000000008152508160039081620000dc919062000d13565b508060049081620000ee919062000d13565b50505062000111620001056200058760201b60201c565b6200058e60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200013c8160016200065160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e0919062000e5c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026c919062000e5c565b6040518363ffffffff1660e01b81526004016200028b92919062000e9d565b6020604051808303815f875af1158015620002a8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000e5c565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200034160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200065160201b60201c565b6200037560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073860201b60201c565b5f600a90505f600a90505f600f90505f600f90505f6b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006009819055506a108b2a2c28029094000000600b81905550612710600582620003cf919062000ef5565b620003db919062000f6c565b600a8190555084600e8190555083600f81905550600f54600e5462000401919062000fa3565b600d81905550826011819055508160128190555060125460115462000427919062000fa3565b60108190555073ed24ab83db4b5aaa7cf5746cf3a4a81c9598a37b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ed24ab83db4b5aaa7cf5746cf3a4a81c9598a37b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004f7620004e9620007d660201b60201c565b6001620007fe60201b60201c565b6200050a306001620007fe60201b60201c565b6200051f61dead6001620007fe60201b60201c565b6200054162000533620007d660201b60201c565b60016200065160201b60201c565b620005543060016200065160201b60201c565b6200056961dead60016200065160201b60201c565b6200057b33826200093560201b60201c565b5050505050506200112c565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006616200058760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000687620007d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d7906200103b565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200080e6200058760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000834620007d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000884906200103b565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000929919062001077565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099d90620010e0565b60405180910390fd5b620009b95f838362000aa560201b60201c565b8060025f828254620009cc919062000fa3565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a20919062000fa3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a86919062001111565b60405180910390a362000aa15f838362000aaa60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b2b57607f821691505b60208210810362000b415762000b4062000ae6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ba57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b68565b62000bb1868362000b68565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000bfb62000bf562000bef8462000bc9565b62000bd2565b62000bc9565b9050919050565b5f819050919050565b62000c168362000bdb565b62000c2e62000c258262000c02565b84845462000b74565b825550505050565b5f90565b62000c4462000c36565b62000c5181848462000c0b565b505050565b5b8181101562000c785762000c6c5f8262000c3a565b60018101905062000c57565b5050565b601f82111562000cc75762000c918162000b47565b62000c9c8462000b59565b8101602085101562000cac578190505b62000cc462000cbb8562000b59565b83018262000c56565b50505b505050565b5f82821c905092915050565b5f62000ce95f198460080262000ccc565b1980831691505092915050565b5f62000d03838362000cd8565b9150826002028217905092915050565b62000d1e8262000aaf565b67ffffffffffffffff81111562000d3a5762000d3962000ab9565b5b62000d46825462000b13565b62000d5382828562000c7c565b5f60209050601f83116001811462000d89575f841562000d74578287015190505b62000d80858262000cf6565b86555062000def565b601f19841662000d998662000b47565b5f5b8281101562000dc25784890151825560018201915060208501945060208101905062000d9b565b8683101562000de2578489015162000dde601f89168262000cd8565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e268262000dfb565b9050919050565b62000e388162000e1a565b811462000e43575f80fd5b50565b5f8151905062000e568162000e2d565b92915050565b5f6020828403121562000e745762000e7362000df7565b5b5f62000e838482850162000e46565b91505092915050565b62000e978162000e1a565b82525050565b5f60408201905062000eb25f83018562000e8c565b62000ec1602083018462000e8c565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f018262000bc9565b915062000f0e8362000bc9565b925082820262000f1e8162000bc9565b9150828204841483151762000f385762000f3762000ec8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f788262000bc9565b915062000f858362000bc9565b92508262000f985762000f9762000f3f565b5b828204905092915050565b5f62000faf8262000bc9565b915062000fbc8362000bc9565b925082820190508082111562000fd75762000fd662000ec8565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200102360208362000fdd565b9150620010308262000fed565b602082019050919050565b5f6020820190508181035f830152620010548162001015565b9050919050565b5f8115159050919050565b62001071816200105b565b82525050565b5f6020820190506200108c5f83018462001066565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010c8601f8362000fdd565b9150620010d58262001092565b602082019050919050565b5f6020820190508181035f830152620010f981620010ba565b9050919050565b6200110b8162000bc9565b82525050565b5f602082019050620011265f83018462001100565b92915050565b608051614d2e6200115a5f395f8181610d6d01528181613116015281816131f5015261321c0152614d2e5ff3fe6080604052600436106102e7575f3560e01c8063881dce601161018f578063b2041411116100db578063d257b34f11610094578063e2f456051161006e578063e2f4560514610b30578063ef8700e514610b5a578063f2fde38b14610b84578063fbc03bc814610bac576102ee565b8063d257b34f14610a8e578063d85ba06314610aca578063dd62ed3e14610af4576102ee565b8063b204141114610984578063b62496f5146109ae578063bbc0c742146109ea578063c024666814610a14578063c04a541414610a3c578063c79c04fd14610a66576102ee565b80639a7a23d611610148578063a9059cbb11610122578063a9059cbb146108bc578063a90eab8c146108f8578063aacebbe314610920578063af5b0f3714610948576102ee565b80639a7a23d61461082e578063a44edb2b14610856578063a457c2d714610880576102ee565b8063881dce601461074a5780638a8c523c146107725780638da5cb5b1461078857806392136913146107b2578063924de9b7146107dc57806395d89b4114610804576102ee565b80633aa7a74d1161024e5780636ddd171311610207578063751039fc116101e1578063751039fc146106a45780637571336a146106ce57806375f0a874146106f65780637bce5a0414610720576102ee565b80636ddd17131461062857806370a0823114610652578063715018a61461068e576102ee565b80633aa7a74d1461051e57806349bd5a5e146105465780634a62bb65146105705780634fbee1931461059a57806366ca9b83146105d65780636a486a8e146105fe576102ee565b806318a94cf1116102a057806318a94cf1146103fe5780631f3fed8f1461042857806323b872dd1461045257806327c8f8351461048e578063313ce567146104b857806339509351146104e2576102ee565b806302dbd8f8146102f257806306fdde031461031a578063095ea7b3146103445780631694505e1461038057806318126dce146103aa57806318160ddd146103d4576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b5061031860048036038101906103139190613819565b610bd4565b005b348015610325575f80fd5b5061032e610cbe565b60405161033b91906138e1565b60405180910390f35b34801561034f575f80fd5b5061036a6004803603810190610365919061395b565b610d4e565b60405161037791906139b3565b60405180910390f35b34801561038b575f80fd5b50610394610d6b565b6040516103a19190613a27565b60405180910390f35b3480156103b5575f80fd5b506103be610d8f565b6040516103cb9190613a4f565b60405180910390f35b3480156103df575f80fd5b506103e8610d95565b6040516103f59190613a4f565b60405180910390f35b348015610409575f80fd5b50610412610d9e565b60405161041f9190613a4f565b60405180910390f35b348015610433575f80fd5b5061043c610da4565b6040516104499190613a4f565b60405180910390f35b34801561045d575f80fd5b5061047860048036038101906104739190613a68565b610daa565b60405161048591906139b3565b60405180910390f35b348015610499575f80fd5b506104a2610e9c565b6040516104af9190613ac7565b60405180910390f35b3480156104c3575f80fd5b506104cc610ea2565b6040516104d99190613afb565b60405180910390f35b3480156104ed575f80fd5b506105086004803603810190610503919061395b565b610eaa565b60405161051591906139b3565b60405180910390f35b348015610529575f80fd5b50610544600480360381019061053f9190613b14565b610f51565b005b348015610551575f80fd5b5061055a611060565b6040516105679190613ac7565b60405180910390f35b34801561057b575f80fd5b50610584611085565b60405161059191906139b3565b60405180910390f35b3480156105a5575f80fd5b506105c060048036038101906105bb9190613b3f565b611097565b6040516105cd91906139b3565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f79190613819565b6110e9565b005b348015610609575f80fd5b506106126111d3565b60405161061f9190613a4f565b60405180910390f35b348015610633575f80fd5b5061063c6111d9565b60405161064991906139b3565b60405180910390f35b34801561065d575f80fd5b5061067860048036038101906106739190613b3f565b6111ec565b6040516106859190613a4f565b60405180910390f35b348015610699575f80fd5b506106a2611231565b005b3480156106af575f80fd5b506106b86112b8565b6040516106c591906139b3565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef9190613b94565b611355565b005b348015610701575f80fd5b5061070a611429565b6040516107179190613ac7565b60405180910390f35b34801561072b575f80fd5b5061073461144e565b6040516107419190613a4f565b60405180910390f35b348015610755575f80fd5b50610770600480360381019061076b9190613b14565b611454565b005b34801561077d575f80fd5b50610786611515565b005b348015610793575f80fd5b5061079c6115c9565b6040516107a99190613ac7565b60405180910390f35b3480156107bd575f80fd5b506107c66115f1565b6040516107d39190613a4f565b60405180910390f35b3480156107e7575f80fd5b5061080260048036038101906107fd9190613bd2565b6115f7565b005b34801561080f575f80fd5b50610818611690565b60405161082591906138e1565b60405180910390f35b348015610839575f80fd5b50610854600480360381019061084f9190613b94565b611720565b005b348015610861575f80fd5b5061086a611839565b6040516108779190613a4f565b60405180910390f35b34801561088b575f80fd5b506108a660048036038101906108a1919061395b565b61183f565b6040516108b391906139b3565b60405180910390f35b3480156108c7575f80fd5b506108e260048036038101906108dd919061395b565b611925565b6040516108ef91906139b3565b60405180910390f35b348015610903575f80fd5b5061091e60048036038101906109199190613c5a565b611942565b005b34801561092b575f80fd5b5061094660048036038101906109419190613b3f565b611bc5565b005b348015610953575f80fd5b5061096e60048036038101906109699190613b3f565b611cff565b60405161097b91906139b3565b60405180910390f35b34801561098f575f80fd5b50610998611d1c565b6040516109a59190613a4f565b60405180910390f35b3480156109b9575f80fd5b506109d460048036038101906109cf9190613b3f565b611d22565b6040516109e191906139b3565b60405180910390f35b3480156109f5575f80fd5b506109fe611d3f565b604051610a0b91906139b3565b60405180910390f35b348015610a1f575f80fd5b50610a3a6004803603810190610a359190613b94565b611d52565b005b348015610a47575f80fd5b50610a50611e74565b604051610a5d9190613ac7565b60405180910390f35b348015610a71575f80fd5b50610a8c6004803603810190610a879190613b3f565b611e99565b005b348015610a99575f80fd5b50610ab46004803603810190610aaf9190613b14565b611fd3565b604051610ac191906139b3565b60405180910390f35b348015610ad5575f80fd5b50610ade612127565b604051610aeb9190613a4f565b60405180910390f35b348015610aff575f80fd5b50610b1a6004803603810190610b159190613caa565b61212d565b604051610b279190613a4f565b60405180910390f35b348015610b3b575f80fd5b50610b446121af565b604051610b519190613a4f565b60405180910390f35b348015610b65575f80fd5b50610b6e6121b5565b604051610b7b9190613a4f565b60405180910390f35b348015610b8f575f80fd5b50610baa6004803603810190610ba59190613b3f565b6121bb565b005b348015610bb7575f80fd5b50610bd26004803603810190610bcd9190613b14565b6122b1565b005b610bdc6123c0565b73ffffffffffffffffffffffffffffffffffffffff16610bfa6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613d32565b60405180910390fd5b8160118190555080601281905550601254601154610c6e9190613d7d565b601081905550601e6010541115610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613dfa565b60405180910390fd5b5050565b606060038054610ccd90613e45565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf990613e45565b8015610d445780601f10610d1b57610100808354040283529160200191610d44565b820191905f5260205f20905b815481529060010190602001808311610d2757829003601f168201915b5050505050905090565b5f610d61610d5a6123c0565b84846123c7565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095481565b5f600254905090565b60125481565b60135481565b5f610db684848461258a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610dfd6123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390613ee5565b60405180910390fd5b610e9085610e886123c0565b8584036123c7565b60019150509392505050565b61dead81565b5f6012905090565b5f610f47610eb66123c0565b848460015f610ec36123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f429190613d7d565b6123c7565b6001905092915050565b610f596123c0565b73ffffffffffffffffffffffffffffffffffffffff16610f776115c9565b73ffffffffffffffffffffffffffffffffffffffff1614610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490613d32565b60405180910390fd5b670de0b6b3a76400006103e86001610fe3610d95565b610fed9190613f03565b610ff79190613f71565b6110019190613f71565b811015611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613feb565b60405180910390fd5b670de0b6b3a7640000816110579190613f03565b60098190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6110f16123c0565b73ffffffffffffffffffffffffffffffffffffffff1661110f6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90613d32565b60405180910390fd5b81600e8190555080600f81905550600f54600e546111839190613d7d565b600d819055506019600d5411156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690614053565b60405180910390fd5b5050565b60105481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112396123c0565b73ffffffffffffffffffffffffffffffffffffffff166112576115c9565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613d32565b60405180910390fd5b6112b65f612fb6565b565b5f6112c16123c0565b73ffffffffffffffffffffffffffffffffffffffff166112df6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90613d32565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b61135d6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661137b6115c9565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890613d32565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114946123c0565b73ffffffffffffffffffffffffffffffffffffffff16146114b3575f80fd5b6114bc306111ec565b81111580156114ca57505f81115b611509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611500906140bb565b60405180910390fd5b61151281613079565b50565b61151d6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661153b6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613d32565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6115ff6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661161d6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90613d32565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461169f90613e45565b80601f01602080910402602001604051908101604052809291908181526020018280546116cb90613e45565b80156117165780601f106116ed57610100808354040283529160200191611716565b820191905f5260205f20905b8154815290600101906020018083116116f957829003601f168201915b5050505050905090565b6117286123c0565b73ffffffffffffffffffffffffffffffffffffffff166117466115c9565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613d32565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614149565b60405180910390fd5b61183582826132ac565b5050565b600b5481565b5f8060015f61184c6123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd906141d7565b60405180910390fd5b61191a6119116123c0565b858584036123c7565b600191505092915050565b5f6119386119316123c0565b848461258a565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016119f4959493929190614204565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611a7e93929190614255565b6040516020818303038152906040528051906020012090505f8282604051602001611aaa9291906142fe565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611ae59493929190614334565b6020604051602081039080840390855afa158015611b05573d5f803e3d5ffd5b505050602060405103519050611b196115c9565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d906143c1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555050505050505050565b611bcd6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611beb6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613d32565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b6017602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611d5a6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611d786115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc590613d32565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e6891906139b3565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ea16123c0565b73ffffffffffffffffffffffffffffffffffffffff16611ebf6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90613d32565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f611fdc6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611ffa6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790613d32565b60405180910390fd5b620186a0600161205e610d95565b6120689190613f03565b6120729190613f71565b8210156120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab9061444f565b60405180910390fd5b6103e860056120c1610d95565b6120cb9190613f03565b6120d59190613f71565b821115612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e906144dd565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b60145481565b6121c36123c0565b73ffffffffffffffffffffffffffffffffffffffff166121e16115c9565b73ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613d32565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c9061456b565b60405180910390fd5b6122ae81612fb6565b50565b6122b96123c0565b73ffffffffffffffffffffffffffffffffffffffff166122d76115c9565b73ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490613d32565b60405180910390fd5b670de0b6b3a76400006103e86005612343610d95565b61234d9190613f03565b6123579190613f71565b6123619190613f71565b8110156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906145d3565b60405180910390fd5b670de0b6b3a7640000816123b79190613f03565b600b8190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c90614661565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a906146ef565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161257d9190613a4f565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef9061477d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d9061480b565b60405180910390fd5b5f810361267d5761267883835f61334a565b612fb1565b600c5f9054906101000a900460ff1615612b61576126996115c9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561270757506126d76115c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561273f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612779575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127925750600660149054906101000a900460ff16155b15612b6057600c60019054906101000a900460ff166128865760155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612846575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c90614873565b60405180910390fd5b5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612923575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129ca5760095481111561296d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296490614901565b60405180910390fd5b600b54612979836111ec565b826129849190613d7d565b11156129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90614969565b60405180910390fd5b612b5f565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a67575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ab657600954811115612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa8906149f7565b60405180910390fd5b612b5e565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b5d57600b54612b10836111ec565b82612b1b9190613d7d565b1115612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5390614969565b60405180910390fd5b5b5b5b5b5b5f612b6b306111ec565b90505f600a548210159050808015612b8f5750600c60029054906101000a900460ff165b8015612ba85750600660149054906101000a900460ff16155b8015612bfb575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c4e575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ca1575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ce4576001600660146101000a81548160ff021916908315150217905550612cc96135bf565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d93575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d9c575f90505b5f8115612fa15760175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dfa57505f601054115b15612e9257612e276064612e196010548861379990919063ffffffff16565b6137ae90919063ffffffff16565b905060105460125482612e3a9190613f03565b612e449190613f71565b60145f828254612e549190613d7d565b9250508190555060105460115482612e6c9190613f03565b612e769190613f71565b60135f828254612e869190613d7d565b92505081905550612f7e565b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ee957505f600d54115b15612f7d57612f166064612f08600d548861379990919063ffffffff16565b6137ae90919063ffffffff16565b9050600d54600f5482612f299190613f03565b612f339190613f71565b60145f828254612f439190613d7d565b92505081905550600d54600e5482612f5b9190613f03565b612f659190613f71565b60135f828254612f759190613d7d565b925050819055505b5b5f811115612f9257612f9187308361334a565b5b8085612f9e9190614a15565b94505b612fac87878761334a565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff81111561309557613094614a48565b5b6040519080825280602002602001820160405280156130c35781602001602082028036833780820191505090505b50905030815f815181106130da576130d9614a75565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561317d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a19190614ab6565b816001815181106131b5576131b4614a75565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061321a307f0000000000000000000000000000000000000000000000000000000000000000846123c7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161327b959493929190614bd1565b5f604051808303815f87803b158015613292575f80fd5b505af11580156132a4573d5f803e3d5ffd5b505050505050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af9061477d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341d9061480b565b60405180910390fd5b6134318383836137c3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ab90614c99565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135429190613d7d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135a69190613a4f565b60405180910390a36135b98484846137c8565b50505050565b5f6135c9306111ec565b90505f6014546013546135dc9190613d7d565b90505f808314806135ec57505f82145b156135f957505050613797565b6014600a546136089190613f03565b831115613621576014600a5461361e9190613f03565b92505b5f47905061362e84613079565b5f61364282476137cd90919063ffffffff16565b90505f61366c8561365e6014548561379990919063ffffffff16565b6137ae90919063ffffffff16565b90505f6013819055505f60148190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516136c190614ce4565b5f6040518083038185875af1925050503d805f81146136fb576040519150601f19603f3d011682016040523d82523d5f602084013e613700565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161374b90614ce4565b5f6040518083038185875af1925050503d805f8114613785576040519150601f19603f3d011682016040523d82523d5f602084013e61378a565b606091505b5050809450505050505050505b565b5f81836137a69190613f03565b905092915050565b5f81836137bb9190613f71565b905092915050565b505050565b505050565b5f81836137da9190614a15565b905092915050565b5f80fd5b5f819050919050565b6137f8816137e6565b8114613802575f80fd5b50565b5f81359050613813816137ef565b92915050565b5f806040838503121561382f5761382e6137e2565b5b5f61383c85828601613805565b925050602061384d85828601613805565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561388e578082015181840152602081019050613873565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6138b382613857565b6138bd8185613861565b93506138cd818560208601613871565b6138d681613899565b840191505092915050565b5f6020820190508181035f8301526138f981846138a9565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61392a82613901565b9050919050565b61393a81613920565b8114613944575f80fd5b50565b5f8135905061395581613931565b92915050565b5f8060408385031215613971576139706137e2565b5b5f61397e85828601613947565b925050602061398f85828601613805565b9150509250929050565b5f8115159050919050565b6139ad81613999565b82525050565b5f6020820190506139c65f8301846139a4565b92915050565b5f819050919050565b5f6139ef6139ea6139e584613901565b6139cc565b613901565b9050919050565b5f613a00826139d5565b9050919050565b5f613a11826139f6565b9050919050565b613a2181613a07565b82525050565b5f602082019050613a3a5f830184613a18565b92915050565b613a49816137e6565b82525050565b5f602082019050613a625f830184613a40565b92915050565b5f805f60608486031215613a7f57613a7e6137e2565b5b5f613a8c86828701613947565b9350506020613a9d86828701613947565b9250506040613aae86828701613805565b9150509250925092565b613ac181613920565b82525050565b5f602082019050613ada5f830184613ab8565b92915050565b5f60ff82169050919050565b613af581613ae0565b82525050565b5f602082019050613b0e5f830184613aec565b92915050565b5f60208284031215613b2957613b286137e2565b5b5f613b3684828501613805565b91505092915050565b5f60208284031215613b5457613b536137e2565b5b5f613b6184828501613947565b91505092915050565b613b7381613999565b8114613b7d575f80fd5b50565b5f81359050613b8e81613b6a565b92915050565b5f8060408385031215613baa57613ba96137e2565b5b5f613bb785828601613947565b9250506020613bc885828601613b80565b9150509250929050565b5f60208284031215613be757613be66137e2565b5b5f613bf484828501613b80565b91505092915050565b613c0681613ae0565b8114613c10575f80fd5b50565b5f81359050613c2181613bfd565b92915050565b5f819050919050565b613c3981613c27565b8114613c43575f80fd5b50565b5f81359050613c5481613c30565b92915050565b5f805f60608486031215613c7157613c706137e2565b5b5f613c7e86828701613c13565b9350506020613c8f86828701613c46565b9250506040613ca086828701613c46565b9150509250925092565b5f8060408385031215613cc057613cbf6137e2565b5b5f613ccd85828601613947565b9250506020613cde85828601613947565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613d1c602083613861565b9150613d2782613ce8565b602082019050919050565b5f6020820190508181035f830152613d4981613d10565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d87826137e6565b9150613d92836137e6565b9250828201905080821115613daa57613da9613d50565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c6573730000005f82015250565b5f613de4601d83613861565b9150613def82613db0565b602082019050919050565b5f6020820190508181035f830152613e1181613dd8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e5c57607f821691505b602082108103613e6f57613e6e613e18565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613ecf602883613861565b9150613eda82613e75565b604082019050919050565b5f6020820190508181035f830152613efc81613ec3565b9050919050565b5f613f0d826137e6565b9150613f18836137e6565b9250828202613f26816137e6565b91508282048414831517613f3d57613f3c613d50565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f7b826137e6565b9150613f86836137e6565b925082613f9657613f95613f44565b5b828204905092915050565b7f43616e6e6f7420736574206d617854206c6f776572207468616e20302e3125005f82015250565b5f613fd5601f83613861565b9150613fe082613fa1565b602082019050919050565b5f6020820190508181035f83015261400281613fc9565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c6573730000005f82015250565b5f61403d601d83613861565b915061404882614009565b602082019050919050565b5f6020820190508181035f83015261406a81614031565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f6140a5600c83613861565b91506140b082614071565b602082019050919050565b5f6020820190508181035f8301526140d281614099565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614133603983613861565b915061413e826140d9565b604082019050919050565b5f6020820190508181035f83015261416081614127565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141c1602583613861565b91506141cc82614167565b604082019050919050565b5f6020820190508181035f8301526141ee816141b5565b9050919050565b6141fe81613c27565b82525050565b5f60a0820190506142175f8301886141f5565b61422460208301876141f5565b61423160408301866141f5565b61423e6060830185613a40565b61424b6080830184613ab8565b9695505050505050565b5f6060820190506142685f8301866141f5565b61427560208301856141f5565b6142826040830184613a40565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f6142c860028361428a565b91506142d382614294565b600282019050919050565b5f819050919050565b6142f86142f382613c27565b6142de565b82525050565b5f614308826142bc565b915061431482856142e7565b60208201915061432482846142e7565b6020820191508190509392505050565b5f6080820190506143475f8301876141f5565b6143546020830186613aec565b61436160408301856141f5565b61436e60608301846141f5565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6143ab601183613861565b91506143b682614377565b602082019050919050565b5f6020820190508181035f8301526143d88161439f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614439603583613861565b9150614444826143df565b604082019050919050565b5f6020820190508181035f8301526144668161442d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6144c7603483613861565b91506144d28261446d565b604082019050919050565b5f6020820190508181035f8301526144f4816144bb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614555602683613861565b9150614560826144fb565b604082019050919050565b5f6020820190508181035f83015261458281614549565b9050919050565b7f43616e6e6f7420736574206d617857206c6f776572207468616e20302e3525005f82015250565b5f6145bd601f83613861565b91506145c882614589565b602082019050919050565b5f6020820190508181035f8301526145ea816145b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61464b602483613861565b9150614656826145f1565b604082019050919050565b5f6020820190508181035f8301526146788161463f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6146d9602283613861565b91506146e48261467f565b604082019050919050565b5f6020820190508181035f830152614706816146cd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614767602583613861565b91506147728261470d565b604082019050919050565b5f6020820190508181035f8301526147948161475b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6147f5602383613861565b91506148008261479b565b604082019050919050565b5f6020820190508181035f830152614822816147e9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61485d601683613861565b915061486882614829565b602082019050919050565b5f6020820190508181035f83015261488a81614851565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178542e000000000000000000000000000000000000000000000000000000602082015250565b5f6148eb602583613861565b91506148f682614891565b604082019050919050565b5f6020820190508181035f830152614918816148df565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614953601383613861565b915061495e8261491f565b602082019050919050565b5f6020820190508181035f83015261498081614947565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178542e0000000000000000000000000000000000000000000000000000602082015250565b5f6149e1602683613861565b91506149ec82614987565b604082019050919050565b5f6020820190508181035f830152614a0e816149d5565b9050919050565b5f614a1f826137e6565b9150614a2a836137e6565b9250828203905081811115614a4257614a41613d50565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614ab081613931565b92915050565b5f60208284031215614acb57614aca6137e2565b5b5f614ad884828501614aa2565b91505092915050565b5f819050919050565b5f614b04614aff614afa84614ae1565b6139cc565b6137e6565b9050919050565b614b1481614aea565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b4c81613920565b82525050565b5f614b5d8383614b43565b60208301905092915050565b5f602082019050919050565b5f614b7f82614b1a565b614b898185614b24565b9350614b9483614b34565b805f5b83811015614bc4578151614bab8882614b52565b9750614bb683614b69565b925050600181019050614b97565b5085935050505092915050565b5f60a082019050614be45f830188613a40565b614bf16020830187614b0b565b8181036040830152614c038186614b75565b9050614c126060830185613ab8565b614c1f6080830184613a40565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614c83602683613861565b9150614c8e82614c29565b604082019050919050565b5f6020820190508181035f830152614cb081614c77565b9050919050565b5f81905092915050565b50565b5f614ccf5f83614cb7565b9150614cda82614cc1565b5f82019050919050565b5f614cee82614cc4565b915081905091905056fea26469706673582212206a0f1533ef8d23ec40f7e7a7876af9238f14d727ea16e7d72a45ba10d7ec67f364736f6c63430008180033

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c8063881dce601161018f578063b2041411116100db578063d257b34f11610094578063e2f456051161006e578063e2f4560514610b30578063ef8700e514610b5a578063f2fde38b14610b84578063fbc03bc814610bac576102ee565b8063d257b34f14610a8e578063d85ba06314610aca578063dd62ed3e14610af4576102ee565b8063b204141114610984578063b62496f5146109ae578063bbc0c742146109ea578063c024666814610a14578063c04a541414610a3c578063c79c04fd14610a66576102ee565b80639a7a23d611610148578063a9059cbb11610122578063a9059cbb146108bc578063a90eab8c146108f8578063aacebbe314610920578063af5b0f3714610948576102ee565b80639a7a23d61461082e578063a44edb2b14610856578063a457c2d714610880576102ee565b8063881dce601461074a5780638a8c523c146107725780638da5cb5b1461078857806392136913146107b2578063924de9b7146107dc57806395d89b4114610804576102ee565b80633aa7a74d1161024e5780636ddd171311610207578063751039fc116101e1578063751039fc146106a45780637571336a146106ce57806375f0a874146106f65780637bce5a0414610720576102ee565b80636ddd17131461062857806370a0823114610652578063715018a61461068e576102ee565b80633aa7a74d1461051e57806349bd5a5e146105465780634a62bb65146105705780634fbee1931461059a57806366ca9b83146105d65780636a486a8e146105fe576102ee565b806318a94cf1116102a057806318a94cf1146103fe5780631f3fed8f1461042857806323b872dd1461045257806327c8f8351461048e578063313ce567146104b857806339509351146104e2576102ee565b806302dbd8f8146102f257806306fdde031461031a578063095ea7b3146103445780631694505e1461038057806318126dce146103aa57806318160ddd146103d4576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b5061031860048036038101906103139190613819565b610bd4565b005b348015610325575f80fd5b5061032e610cbe565b60405161033b91906138e1565b60405180910390f35b34801561034f575f80fd5b5061036a6004803603810190610365919061395b565b610d4e565b60405161037791906139b3565b60405180910390f35b34801561038b575f80fd5b50610394610d6b565b6040516103a19190613a27565b60405180910390f35b3480156103b5575f80fd5b506103be610d8f565b6040516103cb9190613a4f565b60405180910390f35b3480156103df575f80fd5b506103e8610d95565b6040516103f59190613a4f565b60405180910390f35b348015610409575f80fd5b50610412610d9e565b60405161041f9190613a4f565b60405180910390f35b348015610433575f80fd5b5061043c610da4565b6040516104499190613a4f565b60405180910390f35b34801561045d575f80fd5b5061047860048036038101906104739190613a68565b610daa565b60405161048591906139b3565b60405180910390f35b348015610499575f80fd5b506104a2610e9c565b6040516104af9190613ac7565b60405180910390f35b3480156104c3575f80fd5b506104cc610ea2565b6040516104d99190613afb565b60405180910390f35b3480156104ed575f80fd5b506105086004803603810190610503919061395b565b610eaa565b60405161051591906139b3565b60405180910390f35b348015610529575f80fd5b50610544600480360381019061053f9190613b14565b610f51565b005b348015610551575f80fd5b5061055a611060565b6040516105679190613ac7565b60405180910390f35b34801561057b575f80fd5b50610584611085565b60405161059191906139b3565b60405180910390f35b3480156105a5575f80fd5b506105c060048036038101906105bb9190613b3f565b611097565b6040516105cd91906139b3565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f79190613819565b6110e9565b005b348015610609575f80fd5b506106126111d3565b60405161061f9190613a4f565b60405180910390f35b348015610633575f80fd5b5061063c6111d9565b60405161064991906139b3565b60405180910390f35b34801561065d575f80fd5b5061067860048036038101906106739190613b3f565b6111ec565b6040516106859190613a4f565b60405180910390f35b348015610699575f80fd5b506106a2611231565b005b3480156106af575f80fd5b506106b86112b8565b6040516106c591906139b3565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef9190613b94565b611355565b005b348015610701575f80fd5b5061070a611429565b6040516107179190613ac7565b60405180910390f35b34801561072b575f80fd5b5061073461144e565b6040516107419190613a4f565b60405180910390f35b348015610755575f80fd5b50610770600480360381019061076b9190613b14565b611454565b005b34801561077d575f80fd5b50610786611515565b005b348015610793575f80fd5b5061079c6115c9565b6040516107a99190613ac7565b60405180910390f35b3480156107bd575f80fd5b506107c66115f1565b6040516107d39190613a4f565b60405180910390f35b3480156107e7575f80fd5b5061080260048036038101906107fd9190613bd2565b6115f7565b005b34801561080f575f80fd5b50610818611690565b60405161082591906138e1565b60405180910390f35b348015610839575f80fd5b50610854600480360381019061084f9190613b94565b611720565b005b348015610861575f80fd5b5061086a611839565b6040516108779190613a4f565b60405180910390f35b34801561088b575f80fd5b506108a660048036038101906108a1919061395b565b61183f565b6040516108b391906139b3565b60405180910390f35b3480156108c7575f80fd5b506108e260048036038101906108dd919061395b565b611925565b6040516108ef91906139b3565b60405180910390f35b348015610903575f80fd5b5061091e60048036038101906109199190613c5a565b611942565b005b34801561092b575f80fd5b5061094660048036038101906109419190613b3f565b611bc5565b005b348015610953575f80fd5b5061096e60048036038101906109699190613b3f565b611cff565b60405161097b91906139b3565b60405180910390f35b34801561098f575f80fd5b50610998611d1c565b6040516109a59190613a4f565b60405180910390f35b3480156109b9575f80fd5b506109d460048036038101906109cf9190613b3f565b611d22565b6040516109e191906139b3565b60405180910390f35b3480156109f5575f80fd5b506109fe611d3f565b604051610a0b91906139b3565b60405180910390f35b348015610a1f575f80fd5b50610a3a6004803603810190610a359190613b94565b611d52565b005b348015610a47575f80fd5b50610a50611e74565b604051610a5d9190613ac7565b60405180910390f35b348015610a71575f80fd5b50610a8c6004803603810190610a879190613b3f565b611e99565b005b348015610a99575f80fd5b50610ab46004803603810190610aaf9190613b14565b611fd3565b604051610ac191906139b3565b60405180910390f35b348015610ad5575f80fd5b50610ade612127565b604051610aeb9190613a4f565b60405180910390f35b348015610aff575f80fd5b50610b1a6004803603810190610b159190613caa565b61212d565b604051610b279190613a4f565b60405180910390f35b348015610b3b575f80fd5b50610b446121af565b604051610b519190613a4f565b60405180910390f35b348015610b65575f80fd5b50610b6e6121b5565b604051610b7b9190613a4f565b60405180910390f35b348015610b8f575f80fd5b50610baa6004803603810190610ba59190613b3f565b6121bb565b005b348015610bb7575f80fd5b50610bd26004803603810190610bcd9190613b14565b6122b1565b005b610bdc6123c0565b73ffffffffffffffffffffffffffffffffffffffff16610bfa6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613d32565b60405180910390fd5b8160118190555080601281905550601254601154610c6e9190613d7d565b601081905550601e6010541115610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613dfa565b60405180910390fd5b5050565b606060038054610ccd90613e45565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf990613e45565b8015610d445780601f10610d1b57610100808354040283529160200191610d44565b820191905f5260205f20905b815481529060010190602001808311610d2757829003601f168201915b5050505050905090565b5f610d61610d5a6123c0565b84846123c7565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095481565b5f600254905090565b60125481565b60135481565b5f610db684848461258a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610dfd6123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390613ee5565b60405180910390fd5b610e9085610e886123c0565b8584036123c7565b60019150509392505050565b61dead81565b5f6012905090565b5f610f47610eb66123c0565b848460015f610ec36123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f429190613d7d565b6123c7565b6001905092915050565b610f596123c0565b73ffffffffffffffffffffffffffffffffffffffff16610f776115c9565b73ffffffffffffffffffffffffffffffffffffffff1614610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490613d32565b60405180910390fd5b670de0b6b3a76400006103e86001610fe3610d95565b610fed9190613f03565b610ff79190613f71565b6110019190613f71565b811015611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613feb565b60405180910390fd5b670de0b6b3a7640000816110579190613f03565b60098190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6110f16123c0565b73ffffffffffffffffffffffffffffffffffffffff1661110f6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90613d32565b60405180910390fd5b81600e8190555080600f81905550600f54600e546111839190613d7d565b600d819055506019600d5411156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690614053565b60405180910390fd5b5050565b60105481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112396123c0565b73ffffffffffffffffffffffffffffffffffffffff166112576115c9565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613d32565b60405180910390fd5b6112b65f612fb6565b565b5f6112c16123c0565b73ffffffffffffffffffffffffffffffffffffffff166112df6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90613d32565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b61135d6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661137b6115c9565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890613d32565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114946123c0565b73ffffffffffffffffffffffffffffffffffffffff16146114b3575f80fd5b6114bc306111ec565b81111580156114ca57505f81115b611509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611500906140bb565b60405180910390fd5b61151281613079565b50565b61151d6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661153b6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158890613d32565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6115ff6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661161d6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90613d32565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461169f90613e45565b80601f01602080910402602001604051908101604052809291908181526020018280546116cb90613e45565b80156117165780601f106116ed57610100808354040283529160200191611716565b820191905f5260205f20905b8154815290600101906020018083116116f957829003601f168201915b5050505050905090565b6117286123c0565b73ffffffffffffffffffffffffffffffffffffffff166117466115c9565b73ffffffffffffffffffffffffffffffffffffffff161461179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613d32565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614149565b60405180910390fd5b61183582826132ac565b5050565b600b5481565b5f8060015f61184c6123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd906141d7565b60405180910390fd5b61191a6119116123c0565b858584036123c7565b600191505092915050565b5f6119386119316123c0565b848461258a565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016119f4959493929190614204565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611a7e93929190614255565b6040516020818303038152906040528051906020012090505f8282604051602001611aaa9291906142fe565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611ae59493929190614334565b6020604051602081039080840390855afa158015611b05573d5f803e3d5ffd5b505050602060405103519050611b196115c9565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d906143c1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555050505050505050565b611bcd6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611beb6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613d32565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b6017602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611d5a6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611d786115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc590613d32565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e6891906139b3565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ea16123c0565b73ffffffffffffffffffffffffffffffffffffffff16611ebf6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90613d32565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f611fdc6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611ffa6115c9565b73ffffffffffffffffffffffffffffffffffffffff1614612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790613d32565b60405180910390fd5b620186a0600161205e610d95565b6120689190613f03565b6120729190613f71565b8210156120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab9061444f565b60405180910390fd5b6103e860056120c1610d95565b6120cb9190613f03565b6120d59190613f71565b821115612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e906144dd565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b60145481565b6121c36123c0565b73ffffffffffffffffffffffffffffffffffffffff166121e16115c9565b73ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613d32565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c9061456b565b60405180910390fd5b6122ae81612fb6565b50565b6122b96123c0565b73ffffffffffffffffffffffffffffffffffffffff166122d76115c9565b73ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490613d32565b60405180910390fd5b670de0b6b3a76400006103e86005612343610d95565b61234d9190613f03565b6123579190613f71565b6123619190613f71565b8110156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906145d3565b60405180910390fd5b670de0b6b3a7640000816123b79190613f03565b600b8190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c90614661565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a906146ef565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161257d9190613a4f565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef9061477d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d9061480b565b60405180910390fd5b5f810361267d5761267883835f61334a565b612fb1565b600c5f9054906101000a900460ff1615612b61576126996115c9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561270757506126d76115c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561273f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612779575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127925750600660149054906101000a900460ff16155b15612b6057600c60019054906101000a900460ff166128865760155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612846575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c90614873565b60405180910390fd5b5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612923575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129ca5760095481111561296d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296490614901565b60405180910390fd5b600b54612979836111ec565b826129849190613d7d565b11156129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc90614969565b60405180910390fd5b612b5f565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a67575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ab657600954811115612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa8906149f7565b60405180910390fd5b612b5e565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b5d57600b54612b10836111ec565b82612b1b9190613d7d565b1115612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5390614969565b60405180910390fd5b5b5b5b5b5b5f612b6b306111ec565b90505f600a548210159050808015612b8f5750600c60029054906101000a900460ff165b8015612ba85750600660149054906101000a900460ff16155b8015612bfb575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c4e575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ca1575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ce4576001600660146101000a81548160ff021916908315150217905550612cc96135bf565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d93575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d9c575f90505b5f8115612fa15760175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dfa57505f601054115b15612e9257612e276064612e196010548861379990919063ffffffff16565b6137ae90919063ffffffff16565b905060105460125482612e3a9190613f03565b612e449190613f71565b60145f828254612e549190613d7d565b9250508190555060105460115482612e6c9190613f03565b612e769190613f71565b60135f828254612e869190613d7d565b92505081905550612f7e565b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ee957505f600d54115b15612f7d57612f166064612f08600d548861379990919063ffffffff16565b6137ae90919063ffffffff16565b9050600d54600f5482612f299190613f03565b612f339190613f71565b60145f828254612f439190613d7d565b92505081905550600d54600e5482612f5b9190613f03565b612f659190613f71565b60135f828254612f759190613d7d565b925050819055505b5b5f811115612f9257612f9187308361334a565b5b8085612f9e9190614a15565b94505b612fac87878761334a565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff81111561309557613094614a48565b5b6040519080825280602002602001820160405280156130c35781602001602082028036833780820191505090505b50905030815f815181106130da576130d9614a75565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561317d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131a19190614ab6565b816001815181106131b5576131b4614a75565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061321a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123c7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161327b959493929190614bd1565b5f604051808303815f87803b158015613292575f80fd5b505af11580156132a4573d5f803e3d5ffd5b505050505050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af9061477d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341d9061480b565b60405180910390fd5b6134318383836137c3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ab90614c99565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135429190613d7d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135a69190613a4f565b60405180910390a36135b98484846137c8565b50505050565b5f6135c9306111ec565b90505f6014546013546135dc9190613d7d565b90505f808314806135ec57505f82145b156135f957505050613797565b6014600a546136089190613f03565b831115613621576014600a5461361e9190613f03565b92505b5f47905061362e84613079565b5f61364282476137cd90919063ffffffff16565b90505f61366c8561365e6014548561379990919063ffffffff16565b6137ae90919063ffffffff16565b90505f6013819055505f60148190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516136c190614ce4565b5f6040518083038185875af1925050503d805f81146136fb576040519150601f19603f3d011682016040523d82523d5f602084013e613700565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161374b90614ce4565b5f6040518083038185875af1925050503d805f8114613785576040519150601f19603f3d011682016040523d82523d5f602084013e61378a565b606091505b5050809450505050505050505b565b5f81836137a69190613f03565b905092915050565b5f81836137bb9190613f71565b905092915050565b505050565b505050565b5f81836137da9190614a15565b905092915050565b5f80fd5b5f819050919050565b6137f8816137e6565b8114613802575f80fd5b50565b5f81359050613813816137ef565b92915050565b5f806040838503121561382f5761382e6137e2565b5b5f61383c85828601613805565b925050602061384d85828601613805565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561388e578082015181840152602081019050613873565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6138b382613857565b6138bd8185613861565b93506138cd818560208601613871565b6138d681613899565b840191505092915050565b5f6020820190508181035f8301526138f981846138a9565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61392a82613901565b9050919050565b61393a81613920565b8114613944575f80fd5b50565b5f8135905061395581613931565b92915050565b5f8060408385031215613971576139706137e2565b5b5f61397e85828601613947565b925050602061398f85828601613805565b9150509250929050565b5f8115159050919050565b6139ad81613999565b82525050565b5f6020820190506139c65f8301846139a4565b92915050565b5f819050919050565b5f6139ef6139ea6139e584613901565b6139cc565b613901565b9050919050565b5f613a00826139d5565b9050919050565b5f613a11826139f6565b9050919050565b613a2181613a07565b82525050565b5f602082019050613a3a5f830184613a18565b92915050565b613a49816137e6565b82525050565b5f602082019050613a625f830184613a40565b92915050565b5f805f60608486031215613a7f57613a7e6137e2565b5b5f613a8c86828701613947565b9350506020613a9d86828701613947565b9250506040613aae86828701613805565b9150509250925092565b613ac181613920565b82525050565b5f602082019050613ada5f830184613ab8565b92915050565b5f60ff82169050919050565b613af581613ae0565b82525050565b5f602082019050613b0e5f830184613aec565b92915050565b5f60208284031215613b2957613b286137e2565b5b5f613b3684828501613805565b91505092915050565b5f60208284031215613b5457613b536137e2565b5b5f613b6184828501613947565b91505092915050565b613b7381613999565b8114613b7d575f80fd5b50565b5f81359050613b8e81613b6a565b92915050565b5f8060408385031215613baa57613ba96137e2565b5b5f613bb785828601613947565b9250506020613bc885828601613b80565b9150509250929050565b5f60208284031215613be757613be66137e2565b5b5f613bf484828501613b80565b91505092915050565b613c0681613ae0565b8114613c10575f80fd5b50565b5f81359050613c2181613bfd565b92915050565b5f819050919050565b613c3981613c27565b8114613c43575f80fd5b50565b5f81359050613c5481613c30565b92915050565b5f805f60608486031215613c7157613c706137e2565b5b5f613c7e86828701613c13565b9350506020613c8f86828701613c46565b9250506040613ca086828701613c46565b9150509250925092565b5f8060408385031215613cc057613cbf6137e2565b5b5f613ccd85828601613947565b9250506020613cde85828601613947565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613d1c602083613861565b9150613d2782613ce8565b602082019050919050565b5f6020820190508181035f830152613d4981613d10565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d87826137e6565b9150613d92836137e6565b9250828201905080821115613daa57613da9613d50565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c6573730000005f82015250565b5f613de4601d83613861565b9150613def82613db0565b602082019050919050565b5f6020820190508181035f830152613e1181613dd8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e5c57607f821691505b602082108103613e6f57613e6e613e18565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613ecf602883613861565b9150613eda82613e75565b604082019050919050565b5f6020820190508181035f830152613efc81613ec3565b9050919050565b5f613f0d826137e6565b9150613f18836137e6565b9250828202613f26816137e6565b91508282048414831517613f3d57613f3c613d50565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f7b826137e6565b9150613f86836137e6565b925082613f9657613f95613f44565b5b828204905092915050565b7f43616e6e6f7420736574206d617854206c6f776572207468616e20302e3125005f82015250565b5f613fd5601f83613861565b9150613fe082613fa1565b602082019050919050565b5f6020820190508181035f83015261400281613fc9565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c6573730000005f82015250565b5f61403d601d83613861565b915061404882614009565b602082019050919050565b5f6020820190508181035f83015261406a81614031565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f6140a5600c83613861565b91506140b082614071565b602082019050919050565b5f6020820190508181035f8301526140d281614099565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614133603983613861565b915061413e826140d9565b604082019050919050565b5f6020820190508181035f83015261416081614127565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141c1602583613861565b91506141cc82614167565b604082019050919050565b5f6020820190508181035f8301526141ee816141b5565b9050919050565b6141fe81613c27565b82525050565b5f60a0820190506142175f8301886141f5565b61422460208301876141f5565b61423160408301866141f5565b61423e6060830185613a40565b61424b6080830184613ab8565b9695505050505050565b5f6060820190506142685f8301866141f5565b61427560208301856141f5565b6142826040830184613a40565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f6142c860028361428a565b91506142d382614294565b600282019050919050565b5f819050919050565b6142f86142f382613c27565b6142de565b82525050565b5f614308826142bc565b915061431482856142e7565b60208201915061432482846142e7565b6020820191508190509392505050565b5f6080820190506143475f8301876141f5565b6143546020830186613aec565b61436160408301856141f5565b61436e60608301846141f5565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f6143ab601183613861565b91506143b682614377565b602082019050919050565b5f6020820190508181035f8301526143d88161439f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614439603583613861565b9150614444826143df565b604082019050919050565b5f6020820190508181035f8301526144668161442d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6144c7603483613861565b91506144d28261446d565b604082019050919050565b5f6020820190508181035f8301526144f4816144bb565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614555602683613861565b9150614560826144fb565b604082019050919050565b5f6020820190508181035f83015261458281614549565b9050919050565b7f43616e6e6f7420736574206d617857206c6f776572207468616e20302e3525005f82015250565b5f6145bd601f83613861565b91506145c882614589565b602082019050919050565b5f6020820190508181035f8301526145ea816145b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61464b602483613861565b9150614656826145f1565b604082019050919050565b5f6020820190508181035f8301526146788161463f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6146d9602283613861565b91506146e48261467f565b604082019050919050565b5f6020820190508181035f830152614706816146cd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614767602583613861565b91506147728261470d565b604082019050919050565b5f6020820190508181035f8301526147948161475b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6147f5602383613861565b91506148008261479b565b604082019050919050565b5f6020820190508181035f830152614822816147e9565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61485d601683613861565b915061486882614829565b602082019050919050565b5f6020820190508181035f83015261488a81614851565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178542e000000000000000000000000000000000000000000000000000000602082015250565b5f6148eb602583613861565b91506148f682614891565b604082019050919050565b5f6020820190508181035f830152614918816148df565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614953601383613861565b915061495e8261491f565b602082019050919050565b5f6020820190508181035f83015261498081614947565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178542e0000000000000000000000000000000000000000000000000000602082015250565b5f6149e1602683613861565b91506149ec82614987565b604082019050919050565b5f6020820190508181035f830152614a0e816149d5565b9050919050565b5f614a1f826137e6565b9150614a2a836137e6565b9250828203905081811115614a4257614a41613d50565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614ab081613931565b92915050565b5f60208284031215614acb57614aca6137e2565b5b5f614ad884828501614aa2565b91505092915050565b5f819050919050565b5f614b04614aff614afa84614ae1565b6139cc565b6137e6565b9050919050565b614b1481614aea565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b4c81613920565b82525050565b5f614b5d8383614b43565b60208301905092915050565b5f602082019050919050565b5f614b7f82614b1a565b614b898185614b24565b9350614b9483614b34565b805f5b83811015614bc4578151614bab8882614b52565b9750614bb683614b69565b925050600181019050614b97565b5085935050505092915050565b5f60a082019050614be45f830188613a40565b614bf16020830187614b0b565b8181036040830152614c038186614b75565b9050614c126060830185613ab8565b614c1f6080830184613a40565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614c83602683613861565b9150614c8e82614c29565b604082019050919050565b5f6020820190508181035f830152614cb081614c77565b9050919050565b5f81905092915050565b50565b5f614ccf5f83614cb7565b9150614cda82614cc1565b5f82019050919050565b5f614cee82614cc4565b915081905091905056fea26469706673582212206a0f1533ef8d23ec40f7e7a7876af9238f14d727ea16e7d72a45ba10d7ec67f364736f6c63430008180033

Deployed Bytecode Sourcemap

15216:13270:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21815:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2913:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3827:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15293:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15556:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3234:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15955:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15997;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4004:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15386:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3133:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4504:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20627:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15351:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15650:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23268:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21480:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15882:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15730:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3350:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1035:103;;;;;;;;;;;;;:::i;:::-;;19931:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21125:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15478:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15804;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26719:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18697:112;;;;;;;;;;;;;:::i;:::-;;812:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15917:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21372:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3021:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22347:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15622:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4727:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3485:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18817:1062;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22855:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16140:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15841:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16196:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15690:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22157:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15515:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23071:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20122:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15770:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3668:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15582:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16037:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1146:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20876:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21815:334;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21953:13:::1;21934:16;:32;;;;21998:7;21977:18;:28;;;;22051:18;;22032:16;;:37;;;;:::i;:::-;22016:13;:53;;;;22105:2;22088:13;;:19;;22080:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21815:334:::0;;:::o;2913:100::-;2967:13;3000:5;2993:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2913:100;:::o;3827:169::-;3910:4;3927:39;3936:12;:10;:12::i;:::-;3950:7;3959:6;3927:8;:39::i;:::-;3984:4;3977:11;;3827:169;;;;:::o;15293:51::-;;;:::o;15556:19::-;;;;:::o;3234:108::-;3295:7;3322:12;;3315:19;;3234:108;:::o;15955:33::-;;;;:::o;15997:::-;;;;:::o;4004:492::-;4144:4;4161:36;4171:6;4179:9;4190:6;4161:9;:36::i;:::-;4210:24;4237:11;:19;4249:6;4237:19;;;;;;;;;;;;;;;:33;4257:12;:10;:12::i;:::-;4237:33;;;;;;;;;;;;;;;;4210:60;;4309:6;4289:16;:26;;4281:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4396:57;4405:6;4413:12;:10;:12::i;:::-;4446:6;4427:16;:25;4396:8;:57::i;:::-;4484:4;4477:11;;;4004:492;;;;;:::o;15386:53::-;15432:6;15386:53;:::o;3133:93::-;3191:5;3216:2;3209:9;;3133:93;:::o;4504:215::-;4592:4;4609:80;4618:12;:10;:12::i;:::-;4632:7;4678:10;4641:11;:25;4653:12;:10;:12::i;:::-;4641:25;;;;;;;;;;;;;;;:34;4667:7;4641:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4609:8;:80::i;:::-;4707:4;4700:11;;4504:215;;;;:::o;20627:241::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20762:4:::1;20754;20749:1;20733:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20732:26;;;;:::i;:::-;20731:35;;;;:::i;:::-;20721:6;:45;;20699:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;20853:6;20843;:17;;;;:::i;:::-;20836:4;:24;;;;20627:241:::0;:::o;15351:28::-;;;;;;;;;;;;;:::o;15650:33::-;;;;;;;;;;;;;:::o;23268:126::-;23334:4;23358:19;:28;23378:7;23358:28;;;;;;;;;;;;;;;;;;;;;;;;;23351:35;;23268:126;;;:::o;21480:327::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21616:13:::1;21598:15;:31;;;;21660:7;21640:17;:27;;;;21711:17;;21693:15;;:35;;;;:::i;:::-;21678:12;:50;;;;21763:2;21747:12;;:18;;21739:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21480:327:::0;;:::o;15882:28::-;;;;:::o;15730:31::-;;;;;;;;;;;;;:::o;3350:127::-;3424:7;3451:9;:18;3461:7;3451:18;;;;;;;;;;;;;;;;3444:25;;3350:127;;;:::o;1035:103::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1100:30:::1;1127:1;1100:18;:30::i;:::-;1035:103::o:0;19931:121::-;19983:4;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20017:5:::1;20000:14;;:22;;;;;;;;;;;;;;;;;;20040:4;20033:11;;19931:121:::0;:::o;21125:151::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21264:4:::1;21238:15;:23;21254:6;21238:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;21125:151:::0;;:::o;15478:30::-;;;;;;;;;;;;;:::o;15804:::-;;;;:::o;26719:221::-;26797:15;;;;;;;;;;;26781:31;;:12;:10;:12::i;:::-;:31;;;26773:40;;;;;;26842:24;26860:4;26842:9;:24::i;:::-;26832:6;:34;;:48;;;;;26879:1;26870:6;:10;26832:48;26824:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26908:24;26925:6;26908:16;:24::i;:::-;26719:221;:::o;18697:112::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18768:4:::1;18752:13;;:20;;;;;;;;;;;;;;;;;;18797:4;18783:11;;:18;;;;;;;;;;;;;;;;;;18697:112::o:0;812:87::-;858:7;885:6;;;;;;;;;;;878:13;;812:87;:::o;15917:31::-;;;;:::o;21372:100::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21457:7:::1;21443:11;;:21;;;;;;;;;;;;;;;;;;21372:100:::0;:::o;3021:104::-;3077:13;3110:7;3103:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3021:104;:::o;22347:304::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22491:13:::1;;;;;;;;;;;22483:21;;:4;:21;;::::0;22461:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22602:41;22631:4;22637:5;22602:28;:41::i;:::-;22347:304:::0;;:::o;15622:19::-;;;;:::o;4727:413::-;4820:4;4837:24;4864:11;:25;4876:12;:10;:12::i;:::-;4864:25;;;;;;;;;;;;;;;:34;4890:7;4864:34;;;;;;;;;;;;;;;;4837:61;;4937:15;4917:16;:35;;4909:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5030:67;5039:12;:10;:12::i;:::-;5053:7;5081:15;5062:16;:34;5030:8;:67::i;:::-;5128:4;5121:11;;;4727:413;;;;:::o;3485:175::-;3571:4;3588:42;3598:12;:10;:12::i;:::-;3612:9;3623:6;3588:9;:42::i;:::-;3648:4;3641:11;;3485:175;;;;:::o;18817:1062::-;18901:18;18975:95;19099:22;;;;;;;;;;;;;;;;;19089:33;;;;;;19151:10;;;;;;;;;;;;;;;;;19141:21;;;;;;19181:13;19221:4;18946:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18922:330;;;;;;18901:351;;19265:18;19339:49;19417:23;;;;;;;;;;;;;;;;;19407:34;;;;;;19468:1;19310:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19286:210;;;;;;19265:231;;19509:14;19614:10;19643;19550:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19526:169;;;;;;19509:186;;19708:14;19725:26;19735:6;19743:1;19746;19749;19725:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19708:43;;19780:7;:5;:7::i;:::-;19770:17;;:6;:17;;;19762:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19838:4;19822:13;;:20;;;;;;;;;;;;;;;;;;19867:4;19853:11;;:18;;;;;;;;;;;;;;;;;;18890:989;;;;18817:1062;;;:::o;22855:208::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22992:15:::1;;;;;;;;;;;22949:59;;22972:18;22949:59;;;;;;;;;;;;23037:18;23019:15;;:36;;;;;;;;;;;;;;;;;;22855:208:::0;:::o;16140:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;15841:32::-;;;;:::o;16196:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15690:33::-;;;;;;;;;;;;;:::o;22157:182::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22273:8:::1;22242:19;:28;22262:7;22242:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22313:7;22297:34;;;22322:8;22297:34;;;;;;:::i;:::-;;;;;;;;22157:182:::0;;:::o;15515:32::-;;;;;;;;;;;;;:::o;23071:189::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23194:17:::1;;;;;;;;;;;23158:54;;23183:9;23158:54;;;;;;;;;;;;23243:9;23223:17;;:29;;;;;;;;;;;;;;;;;;23071:189:::0;:::o;20122:497::-;20230:4;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20309:6:::1;20304:1;20288:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20287:28;;;;:::i;:::-;20274:9;:41;;20252:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20464:4;20459:1;20443:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20442:26;;;;:::i;:::-;20429:9;:39;;20407:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20580:9;20559:18;:30;;;;20607:4;20600:11;;20122:497:::0;;;:::o;15770:27::-;;;;:::o;3668:151::-;3757:7;3784:11;:18;3796:5;3784:18;;;;;;;;;;;;;;;:27;3803:7;3784:27;;;;;;;;;;;;;;;;3777:34;;3668:151;;;;:::o;15582:33::-;;;;:::o;16037:35::-;;;;:::o;1146:201::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1255:1:::1;1235:22;;:8;:22;;::::0;1227:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1311:28;1330:8;1311:18;:28::i;:::-;1146:201:::0;:::o;20876:241::-;958:12;:10;:12::i;:::-;947:23;;:7;:5;:7::i;:::-;:23;;;939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21011:4:::1;21003;20998:1;20982:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20981:26;;;;:::i;:::-;20980:35;;;;:::i;:::-;20970:6;:45;;20948:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;21102:6;21092;:17;;;;:::i;:::-;21085:4;:24;;;;20876:241:::0;:::o;358:98::-;411:7;438:10;431:17;;358:98;:::o;6895:380::-;7048:1;7031:19;;:5;:19;;;7023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7129:1;7110:21;;:7;:21;;;7102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7213:6;7183:11;:18;7195:5;7183:18;;;;;;;;;;;;;;;:27;7202:7;7183:27;;;;;;;;;;;;;;;:36;;;;7251:7;7235:32;;7244:5;7235:32;;;7260:6;7235:32;;;;;;:::i;:::-;;;;;;;;6895:380;;;:::o;23452:3144::-;23600:1;23584:18;;:4;:18;;;23576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23677:1;23663:16;;:2;:16;;;23655:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23746:1;23736:6;:11;23732:93;;23764:28;23780:4;23786:2;23790:1;23764:15;:28::i;:::-;23807:7;;23732:93;23841:14;;;;;;;;;;;23837:1070;;;23884:7;:5;:7::i;:::-;23876:15;;:4;:15;;;;:49;;;;;23918:7;:5;:7::i;:::-;23912:13;;:2;:13;;;;23876:49;:86;;;;;23960:1;23946:16;;:2;:16;;;;23876:86;:128;;;;;23997:6;23983:21;;:2;:21;;;;23876:128;:158;;;;;24026:8;;;;;;;;;;;24025:9;23876:158;23872:1024;;;24060:13;;;;;;;;;;;24055:150;;24106:19;:25;24126:4;24106:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24135:19;:23;24155:2;24135:23;;;;;;;;;;;;;;;;;;;;;;;;;24106:52;24098:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24055:150;24257:25;:31;24283:4;24257:31;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;24293:15;:19;24309:2;24293:19;;;;;;;;;;;;;;;;;;;;;;;;;24292:20;24257:55;24253:628;;;24355:4;;24345:6;:14;;24337:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24458:4;;24441:13;24451:2;24441:9;:13::i;:::-;24432:6;:22;;;;:::i;:::-;:30;;24424:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24253:628;;;24562:25;:29;24588:2;24562:29;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;24596:15;:21;24612:4;24596:21;;;;;;;;;;;;;;;;;;;;;;;;;24595:22;24562:55;24558:323;;;24660:4;;24650:6;:14;;24642:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24558:323;;;24755:15;:19;24771:2;24755:19;;;;;;;;;;;;;;;;;;;;;;;;;24750:131;;24833:4;;24816:13;24826:2;24816:9;:13::i;:::-;24807:6;:22;;;;:::i;:::-;:30;;24799:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24750:131;24558:323;24253:628;23872:1024;23837:1070;24919:28;24950:24;24968:4;24950:9;:24::i;:::-;24919:55;;24985:12;25024:18;;25000:20;:42;;24985:57;;25059:7;:35;;;;;25083:11;;;;;;;;;;;25059:35;:61;;;;;25112:8;;;;;;;;;;;25111:9;25059:61;:110;;;;;25138:25;:31;25164:4;25138:31;;;;;;;;;;;;;;;;;;;;;;;;;25137:32;25059:110;:153;;;;;25187:19;:25;25207:4;25187:25;;;;;;;;;;;;;;;;;;;;;;;;;25186:26;25059:153;:194;;;;;25230:19;:23;25250:2;25230:23;;;;;;;;;;;;;;;;;;;;;;;;;25229:24;25059:194;25055:302;;;25281:4;25270:8;;:15;;;;;;;;;;;;;;;;;;25302:10;:8;:10::i;:::-;25340:5;25329:8;;:16;;;;;;;;;;;;;;;;;;25055:302;25369:12;25385:8;;;;;;;;;;;25384:9;25369:24;;25495:19;:25;25515:4;25495:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25524:19;:23;25544:2;25524:23;;;;;;;;;;;;;;;;;;;;;;;;;25495:52;25491:100;;;25574:5;25564:15;;25491:100;25603:12;25708:7;25704:839;;;25760:25;:29;25786:2;25760:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25809:1;25793:13;;:17;25760:50;25756:638;;;25838:34;25868:3;25838:25;25849:13;;25838:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25831:41;;25945:13;;25923:18;;25916:4;:25;;;;:::i;:::-;25915:43;;;;:::i;:::-;25891:20;;:67;;;;;;;:::i;:::-;;;;;;;;26027:13;;26007:16;;26000:4;:23;;;;:::i;:::-;25999:41;;;;:::i;:::-;25977:18;;:63;;;;;;;:::i;:::-;;;;;;;;25756:638;;;26102:25;:31;26128:4;26102:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26152:1;26137:12;;:16;26102:51;26098:296;;;26181:33;26210:3;26181:24;26192:12;;26181:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26174:40;;26286:12;;26265:17;;26258:4;:24;;;;:::i;:::-;26257:41;;;;:::i;:::-;26233:20;;:65;;;;;;;:::i;:::-;;;;;;;;26366:12;;26347:15;;26340:4;:22;;;;:::i;:::-;26339:39;;;;:::i;:::-;26317:18;;:61;;;;;;;:::i;:::-;;;;;;;;26098:296;25756:638;26421:1;26414:4;:8;26410:91;;;26443:42;26459:4;26473;26480;26443:15;:42::i;:::-;26410:91;26527:4;26517:14;;;;;:::i;:::-;;;25704:839;26555:33;26571:4;26577:2;26581:6;26555:15;:33::i;:::-;23565:3031;;;;23452:3144;;;;:::o;1355:191::-;1429:16;1448:6;;;;;;;;;;;1429:25;;1474:8;1465:6;;:17;;;;;;;;;;;;;;;;;;1529:8;1498:40;;1519:8;1498:40;;;;;;;;;;;;1418:128;1355:191;:::o;26948:589::-;27074:21;27112:1;27098:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27074:40;;27143:4;27125;27130:1;27125:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27169:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27159:4;27164:1;27159:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27204:62;27221:4;27236:15;27254:11;27204:8;:62::i;:::-;27305:15;:66;;;27386:11;27412:1;27456:4;27483;27503:15;27305:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27003:534;26948:589;:::o;22659:188::-;22776:5;22742:25;:31;22768:4;22742:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22833:5;22799:40;;22827:4;22799:40;;;;;;;;;;;;22659:188;;:::o;5148:733::-;5306:1;5288:20;;:6;:20;;;5280:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5390:1;5369:23;;:9;:23;;;5361:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5445:47;5466:6;5474:9;5485:6;5445:20;:47::i;:::-;5505:21;5529:9;:17;5539:6;5529:17;;;;;;;;;;;;;;;;5505:41;;5582:6;5565:13;:23;;5557:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5703:6;5687:13;:22;5667:9;:17;5677:6;5667:17;;;;;;;;;;;;;;;:42;;;;5755:6;5731:9;:20;5741:9;5731:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5796:9;5779:35;;5788:6;5779:35;;;5807:6;5779:35;;;;;;:::i;:::-;;;;;;;;5827:46;5847:6;5855:9;5866:6;5827:19;:46::i;:::-;5269:612;5148:733;;;:::o;27545:938::-;27584:23;27610:24;27628:4;27610:9;:24::i;:::-;27584:50;;27645:25;27694:20;;27673:18;;:41;;;;:::i;:::-;27645:69;;27725:12;27773:1;27754:15;:20;:46;;;;27799:1;27778:17;:22;27754:46;27750:85;;;27817:7;;;;;27750:85;27890:2;27869:18;;:23;;;;:::i;:::-;27851:15;:41;27847:115;;;27948:2;27927:18;;:23;;;;:::i;:::-;27909:41;;27847:115;27974:25;28002:21;27974:49;;28034:33;28051:15;28034:16;:33::i;:::-;28080:18;28101:44;28127:17;28101:21;:25;;:44;;;;:::i;:::-;28080:65;;28156:17;28176:59;28217:17;28176:36;28191:20;;28176:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;28156:79;;28269:1;28248:18;:22;;;;28304:1;28281:20;:24;;;;28340:17;;;;;;;;;;;28332:31;;28371:9;28332:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28318:67;;;;;28418:15;;;;;;;;;;;28410:29;;28448:21;28410:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28396:79;;;;;27573:910;;;;;;27545:938;:::o;8901:98::-;8959:7;8990:1;8986;:5;;;;:::i;:::-;8979:12;;8901:98;;;;:::o;9007:::-;9065:7;9096:1;9092;:5;;;;:::i;:::-;9085:12;;9007:98;;;;:::o;7283:125::-;;;;:::o;7416:124::-;;;;:::o;8795:98::-;8853:7;8884:1;8880;:5;;;;:::i;:::-;8873:12;;8795:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:619::-;5333:6;5341;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5256:619;;;;;:::o;5881:118::-;5968:24;5986:5;5968:24;:::i;:::-;5963:3;5956:37;5881:118;;:::o;6005:222::-;6098:4;6136:2;6125:9;6121:18;6113:26;;6149:71;6217:1;6206:9;6202:17;6193:6;6149:71;:::i;:::-;6005:222;;;;:::o;6233:86::-;6268:7;6308:4;6301:5;6297:16;6286:27;;6233:86;;;:::o;6325:112::-;6408:22;6424:5;6408:22;:::i;:::-;6403:3;6396:35;6325:112;;:::o;6443:214::-;6532:4;6570:2;6559:9;6555:18;6547:26;;6583:67;6647:1;6636:9;6632:17;6623:6;6583:67;:::i;:::-;6443:214;;;;:::o;6663:329::-;6722:6;6771:2;6759:9;6750:7;6746:23;6742:32;6739:119;;;6777:79;;:::i;:::-;6739:119;6897:1;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6868:117;6663:329;;;;:::o;6998:::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:118::-;8468:22;8484:5;8468:22;:::i;:::-;8461:5;8458:33;8448:61;;8505:1;8502;8495:12;8448:61;8397:118;:::o;8521:135::-;8565:5;8603:6;8590:20;8581:29;;8619:31;8644:5;8619:31;:::i;:::-;8521:135;;;;:::o;8662:77::-;8699:7;8728:5;8717:16;;8662:77;;;:::o;8745:122::-;8818:24;8836:5;8818:24;:::i;:::-;8811:5;8808:35;8798:63;;8857:1;8854;8847:12;8798:63;8745:122;:::o;8873:139::-;8919:5;8957:6;8944:20;8935:29;;8973:33;9000:5;8973:33;:::i;:::-;8873:139;;;;:::o;9018:615::-;9093:6;9101;9109;9158:2;9146:9;9137:7;9133:23;9129:32;9126:119;;;9164:79;;:::i;:::-;9126:119;9284:1;9309:51;9352:7;9343:6;9332:9;9328:22;9309:51;:::i;:::-;9299:61;;9255:115;9409:2;9435:53;9480:7;9471:6;9460:9;9456:22;9435:53;:::i;:::-;9425:63;;9380:118;9537:2;9563:53;9608:7;9599:6;9588:9;9584:22;9563:53;:::i;:::-;9553:63;;9508:118;9018:615;;;;;:::o;9639:474::-;9707:6;9715;9764:2;9752:9;9743:7;9739:23;9735:32;9732:119;;;9770:79;;:::i;:::-;9732:119;9890:1;9915:53;9960:7;9951:6;9940:9;9936:22;9915:53;:::i;:::-;9905:63;;9861:117;10017:2;10043:53;10088:7;10079:6;10068:9;10064:22;10043:53;:::i;:::-;10033:63;;9988:118;9639:474;;;;;:::o;10119:182::-;10259:34;10255:1;10247:6;10243:14;10236:58;10119:182;:::o;10307:366::-;10449:3;10470:67;10534:2;10529:3;10470:67;:::i;:::-;10463:74;;10546:93;10635:3;10546:93;:::i;:::-;10664:2;10659:3;10655:12;10648:19;;10307:366;;;:::o;10679:419::-;10845:4;10883:2;10872:9;10868:18;10860:26;;10932:9;10926:4;10922:20;10918:1;10907:9;10903:17;10896:47;10960:131;11086:4;10960:131;:::i;:::-;10952:139;;10679:419;;;:::o;11104:180::-;11152:77;11149:1;11142:88;11249:4;11246:1;11239:15;11273:4;11270:1;11263:15;11290:191;11330:3;11349:20;11367:1;11349:20;:::i;:::-;11344:25;;11383:20;11401:1;11383:20;:::i;:::-;11378:25;;11426:1;11423;11419:9;11412:16;;11447:3;11444:1;11441:10;11438:36;;;11454:18;;:::i;:::-;11438:36;11290:191;;;;:::o;11487:179::-;11627:31;11623:1;11615:6;11611:14;11604:55;11487:179;:::o;11672:366::-;11814:3;11835:67;11899:2;11894:3;11835:67;:::i;:::-;11828:74;;11911:93;12000:3;11911:93;:::i;:::-;12029:2;12024:3;12020:12;12013:19;;11672:366;;;:::o;12044:419::-;12210:4;12248:2;12237:9;12233:18;12225:26;;12297:9;12291:4;12287:20;12283:1;12272:9;12268:17;12261:47;12325:131;12451:4;12325:131;:::i;:::-;12317:139;;12044:419;;;:::o;12469:180::-;12517:77;12514:1;12507:88;12614:4;12611:1;12604:15;12638:4;12635:1;12628:15;12655:320;12699:6;12736:1;12730:4;12726:12;12716:22;;12783:1;12777:4;12773:12;12804:18;12794:81;;12860:4;12852:6;12848:17;12838:27;;12794:81;12922:2;12914:6;12911:14;12891:18;12888:38;12885:84;;12941:18;;:::i;:::-;12885:84;12706:269;12655:320;;;:::o;12981:227::-;13121:34;13117:1;13109:6;13105:14;13098:58;13190:10;13185:2;13177:6;13173:15;13166:35;12981:227;:::o;13214:366::-;13356:3;13377:67;13441:2;13436:3;13377:67;:::i;:::-;13370:74;;13453:93;13542:3;13453:93;:::i;:::-;13571:2;13566:3;13562:12;13555:19;;13214:366;;;:::o;13586:419::-;13752:4;13790:2;13779:9;13775:18;13767:26;;13839:9;13833:4;13829:20;13825:1;13814:9;13810:17;13803:47;13867:131;13993:4;13867:131;:::i;:::-;13859:139;;13586:419;;;:::o;14011:410::-;14051:7;14074:20;14092:1;14074:20;:::i;:::-;14069:25;;14108:20;14126:1;14108:20;:::i;:::-;14103:25;;14163:1;14160;14156:9;14185:30;14203:11;14185:30;:::i;:::-;14174:41;;14364:1;14355:7;14351:15;14348:1;14345:22;14325:1;14318:9;14298:83;14275:139;;14394:18;;:::i;:::-;14275:139;14059:362;14011:410;;;;:::o;14427:180::-;14475:77;14472:1;14465:88;14572:4;14569:1;14562:15;14596:4;14593:1;14586:15;14613:185;14653:1;14670:20;14688:1;14670:20;:::i;:::-;14665:25;;14704:20;14722:1;14704:20;:::i;:::-;14699:25;;14743:1;14733:35;;14748:18;;:::i;:::-;14733:35;14790:1;14787;14783:9;14778:14;;14613:185;;;;:::o;14804:181::-;14944:33;14940:1;14932:6;14928:14;14921:57;14804:181;:::o;14991:366::-;15133:3;15154:67;15218:2;15213:3;15154:67;:::i;:::-;15147:74;;15230:93;15319:3;15230:93;:::i;:::-;15348:2;15343:3;15339:12;15332:19;;14991:366;;;:::o;15363:419::-;15529:4;15567:2;15556:9;15552:18;15544:26;;15616:9;15610:4;15606:20;15602:1;15591:9;15587:17;15580:47;15644:131;15770:4;15644:131;:::i;:::-;15636:139;;15363:419;;;:::o;15788:179::-;15928:31;15924:1;15916:6;15912:14;15905:55;15788:179;:::o;15973:366::-;16115:3;16136:67;16200:2;16195:3;16136:67;:::i;:::-;16129:74;;16212:93;16301:3;16212:93;:::i;:::-;16330:2;16325:3;16321:12;16314:19;;15973:366;;;:::o;16345:419::-;16511:4;16549:2;16538:9;16534:18;16526:26;;16598:9;16592:4;16588:20;16584:1;16573:9;16569:17;16562:47;16626:131;16752:4;16626:131;:::i;:::-;16618:139;;16345:419;;;:::o;16770:162::-;16910:14;16906:1;16898:6;16894:14;16887:38;16770:162;:::o;16938:366::-;17080:3;17101:67;17165:2;17160:3;17101:67;:::i;:::-;17094:74;;17177:93;17266:3;17177:93;:::i;:::-;17295:2;17290:3;17286:12;17279:19;;16938:366;;;:::o;17310:419::-;17476:4;17514:2;17503:9;17499:18;17491:26;;17563:9;17557:4;17553:20;17549:1;17538:9;17534:17;17527:47;17591:131;17717:4;17591:131;:::i;:::-;17583:139;;17310:419;;;:::o;17735:244::-;17875:34;17871:1;17863:6;17859:14;17852:58;17944:27;17939:2;17931:6;17927:15;17920:52;17735:244;:::o;17985:366::-;18127:3;18148:67;18212:2;18207:3;18148:67;:::i;:::-;18141:74;;18224:93;18313:3;18224:93;:::i;:::-;18342:2;18337:3;18333:12;18326:19;;17985:366;;;:::o;18357:419::-;18523:4;18561:2;18550:9;18546:18;18538:26;;18610:9;18604:4;18600:20;18596:1;18585:9;18581:17;18574:47;18638:131;18764:4;18638:131;:::i;:::-;18630:139;;18357:419;;;:::o;18782:224::-;18922:34;18918:1;18910:6;18906:14;18899:58;18991:7;18986:2;18978:6;18974:15;18967:32;18782:224;:::o;19012:366::-;19154:3;19175:67;19239:2;19234:3;19175:67;:::i;:::-;19168:74;;19251:93;19340:3;19251:93;:::i;:::-;19369:2;19364:3;19360:12;19353:19;;19012:366;;;:::o;19384:419::-;19550:4;19588:2;19577:9;19573:18;19565:26;;19637:9;19631:4;19627:20;19623:1;19612:9;19608:17;19601:47;19665:131;19791:4;19665:131;:::i;:::-;19657:139;;19384:419;;;:::o;19809:118::-;19896:24;19914:5;19896:24;:::i;:::-;19891:3;19884:37;19809:118;;:::o;19933:664::-;20138:4;20176:3;20165:9;20161:19;20153:27;;20190:71;20258:1;20247:9;20243:17;20234:6;20190:71;:::i;:::-;20271:72;20339:2;20328:9;20324:18;20315:6;20271:72;:::i;:::-;20353;20421:2;20410:9;20406:18;20397:6;20353:72;:::i;:::-;20435;20503:2;20492:9;20488:18;20479:6;20435:72;:::i;:::-;20517:73;20585:3;20574:9;20570:19;20561:6;20517:73;:::i;:::-;19933:664;;;;;;;;:::o;20603:442::-;20752:4;20790:2;20779:9;20775:18;20767:26;;20803:71;20871:1;20860:9;20856:17;20847:6;20803:71;:::i;:::-;20884:72;20952:2;20941:9;20937:18;20928:6;20884:72;:::i;:::-;20966;21034:2;21023:9;21019:18;21010:6;20966:72;:::i;:::-;20603:442;;;;;;:::o;21051:148::-;21153:11;21190:3;21175:18;;21051:148;;;;:::o;21205:214::-;21345:66;21341:1;21333:6;21329:14;21322:90;21205:214;:::o;21425:400::-;21585:3;21606:84;21688:1;21683:3;21606:84;:::i;:::-;21599:91;;21699:93;21788:3;21699:93;:::i;:::-;21817:1;21812:3;21808:11;21801:18;;21425:400;;;:::o;21831:79::-;21870:7;21899:5;21888:16;;21831:79;;;:::o;21916:157::-;22021:45;22041:24;22059:5;22041:24;:::i;:::-;22021:45;:::i;:::-;22016:3;22009:58;21916:157;;:::o;22079:663::-;22320:3;22342:148;22486:3;22342:148;:::i;:::-;22335:155;;22500:75;22571:3;22562:6;22500:75;:::i;:::-;22600:2;22595:3;22591:12;22584:19;;22613:75;22684:3;22675:6;22613:75;:::i;:::-;22713:2;22708:3;22704:12;22697:19;;22733:3;22726:10;;22079:663;;;;;:::o;22748:545::-;22921:4;22959:3;22948:9;22944:19;22936:27;;22973:71;23041:1;23030:9;23026:17;23017:6;22973:71;:::i;:::-;23054:68;23118:2;23107:9;23103:18;23094:6;23054:68;:::i;:::-;23132:72;23200:2;23189:9;23185:18;23176:6;23132:72;:::i;:::-;23214;23282:2;23271:9;23267:18;23258:6;23214:72;:::i;:::-;22748:545;;;;;;;:::o;23299:167::-;23439:19;23435:1;23427:6;23423:14;23416:43;23299:167;:::o;23472:366::-;23614:3;23635:67;23699:2;23694:3;23635:67;:::i;:::-;23628:74;;23711:93;23800:3;23711:93;:::i;:::-;23829:2;23824:3;23820:12;23813:19;;23472:366;;;:::o;23844:419::-;24010:4;24048:2;24037:9;24033:18;24025:26;;24097:9;24091:4;24087:20;24083:1;24072:9;24068:17;24061:47;24125:131;24251:4;24125:131;:::i;:::-;24117:139;;23844:419;;;:::o;24269:240::-;24409:34;24405:1;24397:6;24393:14;24386:58;24478:23;24473:2;24465:6;24461:15;24454:48;24269:240;:::o;24515:366::-;24657:3;24678:67;24742:2;24737:3;24678:67;:::i;:::-;24671:74;;24754:93;24843:3;24754:93;:::i;:::-;24872:2;24867:3;24863:12;24856:19;;24515:366;;;:::o;24887:419::-;25053:4;25091:2;25080:9;25076:18;25068:26;;25140:9;25134:4;25130:20;25126:1;25115:9;25111:17;25104:47;25168:131;25294:4;25168:131;:::i;:::-;25160:139;;24887:419;;;:::o;25312:239::-;25452:34;25448:1;25440:6;25436:14;25429:58;25521:22;25516:2;25508:6;25504:15;25497:47;25312:239;:::o;25557:366::-;25699:3;25720:67;25784:2;25779:3;25720:67;:::i;:::-;25713:74;;25796:93;25885:3;25796:93;:::i;:::-;25914:2;25909:3;25905:12;25898:19;;25557:366;;;:::o;25929:419::-;26095:4;26133:2;26122:9;26118:18;26110:26;;26182:9;26176:4;26172:20;26168:1;26157:9;26153:17;26146:47;26210:131;26336:4;26210:131;:::i;:::-;26202:139;;25929:419;;;:::o;26354:225::-;26494:34;26490:1;26482:6;26478:14;26471:58;26563:8;26558:2;26550:6;26546:15;26539:33;26354:225;:::o;26585:366::-;26727:3;26748:67;26812:2;26807:3;26748:67;:::i;:::-;26741:74;;26824:93;26913:3;26824:93;:::i;:::-;26942:2;26937:3;26933:12;26926:19;;26585:366;;;:::o;26957:419::-;27123:4;27161:2;27150:9;27146:18;27138:26;;27210:9;27204:4;27200:20;27196:1;27185:9;27181:17;27174:47;27238:131;27364:4;27238:131;:::i;:::-;27230:139;;26957:419;;;:::o;27382:181::-;27522:33;27518:1;27510:6;27506:14;27499:57;27382:181;:::o;27569:366::-;27711:3;27732:67;27796:2;27791:3;27732:67;:::i;:::-;27725:74;;27808:93;27897:3;27808:93;:::i;:::-;27926:2;27921:3;27917:12;27910:19;;27569:366;;;:::o;27941:419::-;28107:4;28145:2;28134:9;28130:18;28122:26;;28194:9;28188:4;28184:20;28180:1;28169:9;28165:17;28158:47;28222:131;28348:4;28222:131;:::i;:::-;28214:139;;27941:419;;;:::o;28366:223::-;28506:34;28502:1;28494:6;28490:14;28483:58;28575:6;28570:2;28562:6;28558:15;28551:31;28366:223;:::o;28595:366::-;28737:3;28758:67;28822:2;28817:3;28758:67;:::i;:::-;28751:74;;28834:93;28923:3;28834:93;:::i;:::-;28952:2;28947:3;28943:12;28936:19;;28595:366;;;:::o;28967:419::-;29133:4;29171:2;29160:9;29156:18;29148:26;;29220:9;29214:4;29210:20;29206:1;29195:9;29191:17;29184:47;29248:131;29374:4;29248:131;:::i;:::-;29240:139;;28967:419;;;:::o;29392:221::-;29532:34;29528:1;29520:6;29516:14;29509:58;29601:4;29596:2;29588:6;29584:15;29577:29;29392:221;:::o;29619:366::-;29761:3;29782:67;29846:2;29841:3;29782:67;:::i;:::-;29775:74;;29858:93;29947:3;29858:93;:::i;:::-;29976:2;29971:3;29967:12;29960:19;;29619:366;;;:::o;29991:419::-;30157:4;30195:2;30184:9;30180:18;30172:26;;30244:9;30238:4;30234:20;30230:1;30219:9;30215:17;30208:47;30272:131;30398:4;30272:131;:::i;:::-;30264:139;;29991:419;;;:::o;30416:224::-;30556:34;30552:1;30544:6;30540:14;30533:58;30625:7;30620:2;30612:6;30608:15;30601:32;30416:224;:::o;30646:366::-;30788:3;30809:67;30873:2;30868:3;30809:67;:::i;:::-;30802:74;;30885:93;30974:3;30885:93;:::i;:::-;31003:2;30998:3;30994:12;30987:19;;30646:366;;;:::o;31018:419::-;31184:4;31222:2;31211:9;31207:18;31199:26;;31271:9;31265:4;31261:20;31257:1;31246:9;31242:17;31235:47;31299:131;31425:4;31299:131;:::i;:::-;31291:139;;31018:419;;;:::o;31443:222::-;31583:34;31579:1;31571:6;31567:14;31560:58;31652:5;31647:2;31639:6;31635:15;31628:30;31443:222;:::o;31671:366::-;31813:3;31834:67;31898:2;31893:3;31834:67;:::i;:::-;31827:74;;31910:93;31999:3;31910:93;:::i;:::-;32028:2;32023:3;32019:12;32012:19;;31671:366;;;:::o;32043:419::-;32209:4;32247:2;32236:9;32232:18;32224:26;;32296:9;32290:4;32286:20;32282:1;32271:9;32267:17;32260:47;32324:131;32450:4;32324:131;:::i;:::-;32316:139;;32043:419;;;:::o;32468:172::-;32608:24;32604:1;32596:6;32592:14;32585:48;32468:172;:::o;32646:366::-;32788:3;32809:67;32873:2;32868:3;32809:67;:::i;:::-;32802:74;;32885:93;32974:3;32885:93;:::i;:::-;33003:2;32998:3;32994:12;32987:19;;32646:366;;;:::o;33018:419::-;33184:4;33222:2;33211:9;33207:18;33199:26;;33271:9;33265:4;33261:20;33257:1;33246:9;33242:17;33235:47;33299:131;33425:4;33299:131;:::i;:::-;33291:139;;33018:419;;;:::o;33443:224::-;33583:34;33579:1;33571:6;33567:14;33560:58;33652:7;33647:2;33639:6;33635:15;33628:32;33443:224;:::o;33673:366::-;33815:3;33836:67;33900:2;33895:3;33836:67;:::i;:::-;33829:74;;33912:93;34001:3;33912:93;:::i;:::-;34030:2;34025:3;34021:12;34014:19;;33673:366;;;:::o;34045:419::-;34211:4;34249:2;34238:9;34234:18;34226:26;;34298:9;34292:4;34288:20;34284:1;34273:9;34269:17;34262:47;34326:131;34452:4;34326:131;:::i;:::-;34318:139;;34045:419;;;:::o;34470:169::-;34610:21;34606:1;34598:6;34594:14;34587:45;34470:169;:::o;34645:366::-;34787:3;34808:67;34872:2;34867:3;34808:67;:::i;:::-;34801:74;;34884:93;34973:3;34884:93;:::i;:::-;35002:2;34997:3;34993:12;34986:19;;34645:366;;;:::o;35017:419::-;35183:4;35221:2;35210:9;35206:18;35198:26;;35270:9;35264:4;35260:20;35256:1;35245:9;35241:17;35234:47;35298:131;35424:4;35298:131;:::i;:::-;35290:139;;35017:419;;;:::o;35442:225::-;35582:34;35578:1;35570:6;35566:14;35559:58;35651:8;35646:2;35638:6;35634:15;35627:33;35442:225;:::o;35673:366::-;35815:3;35836:67;35900:2;35895:3;35836:67;:::i;:::-;35829:74;;35912:93;36001:3;35912:93;:::i;:::-;36030:2;36025:3;36021:12;36014:19;;35673:366;;;:::o;36045:419::-;36211:4;36249:2;36238:9;36234:18;36226:26;;36298:9;36292:4;36288:20;36284:1;36273:9;36269:17;36262:47;36326:131;36452:4;36326:131;:::i;:::-;36318:139;;36045:419;;;:::o;36470:194::-;36510:4;36530:20;36548:1;36530:20;:::i;:::-;36525:25;;36564:20;36582:1;36564:20;:::i;:::-;36559:25;;36608:1;36605;36601:9;36593:17;;36632:1;36626:4;36623:11;36620:37;;;36637:18;;:::i;:::-;36620:37;36470:194;;;;:::o;36670:180::-;36718:77;36715:1;36708:88;36815:4;36812:1;36805:15;36839:4;36836:1;36829:15;36856:180;36904:77;36901:1;36894:88;37001:4;36998:1;36991:15;37025:4;37022:1;37015:15;37042:143;37099:5;37130:6;37124:13;37115:22;;37146:33;37173:5;37146:33;:::i;:::-;37042:143;;;;:::o;37191:351::-;37261:6;37310:2;37298:9;37289:7;37285:23;37281:32;37278:119;;;37316:79;;:::i;:::-;37278:119;37436:1;37461:64;37517:7;37508:6;37497:9;37493:22;37461:64;:::i;:::-;37451:74;;37407:128;37191:351;;;;:::o;37548:85::-;37593:7;37622:5;37611:16;;37548:85;;;:::o;37639:158::-;37697:9;37730:61;37748:42;37757:32;37783:5;37757:32;:::i;:::-;37748:42;:::i;:::-;37730:61;:::i;:::-;37717:74;;37639:158;;;:::o;37803:147::-;37898:45;37937:5;37898:45;:::i;:::-;37893:3;37886:58;37803:147;;:::o;37956:114::-;38023:6;38057:5;38051:12;38041:22;;37956:114;;;:::o;38076:184::-;38175:11;38209:6;38204:3;38197:19;38249:4;38244:3;38240:14;38225:29;;38076:184;;;;:::o;38266:132::-;38333:4;38356:3;38348:11;;38386:4;38381:3;38377:14;38369:22;;38266:132;;;:::o;38404:108::-;38481:24;38499:5;38481:24;:::i;:::-;38476:3;38469:37;38404:108;;:::o;38518:179::-;38587:10;38608:46;38650:3;38642:6;38608:46;:::i;:::-;38686:4;38681:3;38677:14;38663:28;;38518:179;;;;:::o;38703:113::-;38773:4;38805;38800:3;38796:14;38788:22;;38703:113;;;:::o;38852:732::-;38971:3;39000:54;39048:5;39000:54;:::i;:::-;39070:86;39149:6;39144:3;39070:86;:::i;:::-;39063:93;;39180:56;39230:5;39180:56;:::i;:::-;39259:7;39290:1;39275:284;39300:6;39297:1;39294:13;39275:284;;;39376:6;39370:13;39403:63;39462:3;39447:13;39403:63;:::i;:::-;39396:70;;39489:60;39542:6;39489:60;:::i;:::-;39479:70;;39335:224;39322:1;39319;39315:9;39310:14;;39275:284;;;39279:14;39575:3;39568:10;;38976:608;;;38852:732;;;;:::o;39590:831::-;39853:4;39891:3;39880:9;39876:19;39868:27;;39905:71;39973:1;39962:9;39958:17;39949:6;39905:71;:::i;:::-;39986:80;40062:2;40051:9;40047:18;40038:6;39986:80;:::i;:::-;40113:9;40107:4;40103:20;40098:2;40087:9;40083:18;40076:48;40141:108;40244:4;40235:6;40141:108;:::i;:::-;40133:116;;40259:72;40327:2;40316:9;40312:18;40303:6;40259:72;:::i;:::-;40341:73;40409:3;40398:9;40394:19;40385:6;40341:73;:::i;:::-;39590:831;;;;;;;;:::o;40427:225::-;40567:34;40563:1;40555:6;40551:14;40544:58;40636:8;40631:2;40623:6;40619:15;40612:33;40427:225;:::o;40658:366::-;40800:3;40821:67;40885:2;40880:3;40821:67;:::i;:::-;40814:74;;40897:93;40986:3;40897:93;:::i;:::-;41015:2;41010:3;41006:12;40999:19;;40658:366;;;:::o;41030:419::-;41196:4;41234:2;41223:9;41219:18;41211:26;;41283:9;41277:4;41273:20;41269:1;41258:9;41254:17;41247:47;41311:131;41437:4;41311:131;:::i;:::-;41303:139;;41030:419;;;:::o;41455:147::-;41556:11;41593:3;41578:18;;41455:147;;;;:::o;41608:114::-;;:::o;41728:398::-;41887:3;41908:83;41989:1;41984:3;41908:83;:::i;:::-;41901:90;;42000:93;42089:3;42000:93;:::i;:::-;42118:1;42113:3;42109:11;42102:18;;41728:398;;;:::o;42132:379::-;42316:3;42338:147;42481:3;42338:147;:::i;:::-;42331:154;;42502:3;42495:10;;42132:379;;;:::o

Swarm Source

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