ETH Price: $2,545.80 (+5.53%)

Token

PEGG (PEGG)
 

Overview

Max Total Supply

1,000,000,000,000 PEGG

Holders

192

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: PEGG 5
Balance
134,945,409,739.10761366878932813 PEGG

Value
$0.00
0x5aa320b6f70319b9ad4c14e9d3229e63d70f3bf3
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:
PEGG

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxWalletSize, uint256 maxTransactionAmount, uint256 swapTokensAtAmount) external returns (bool);
}

struct TaxAddressChange {
    bool isChanged;
    address value;
}

struct TaxChange {
    bool isChanged;
    uint256 value;
}

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

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public antiDrainer;

    bool private swapping;

    address public marketingWallet;
    address public developmentWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

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

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

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    mapping(address => bool) private _isBlackList;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    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("PEGG", "PEGG") {
        // antiDrainer = 0xcaB8a2efb490A0cf915Ca01E540261f3f09a43Fe;
        if (block.chainid == 1 || block.chainid == 5)
            uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        else if (block.chainid == 11155111)
            uniswapV2Router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        else if (block.chainid == 8453)
            uniswapV2Router = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 25;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 25;
        uint256 _sellDevFee = 0;

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

        uint256 _teamFee = 0; // 0.5% -> 5, 1% -> 10
        address _teamWallet = address(0x9E5233B968852e1C5DaBee821f6D79EA9779da24);

        maxTransaction = 10000000000 * (10 ** decimals());
        maxWallet = 10000000000 * (10 ** decimals());
        swapTokensAtAmount = 2000000000 * (10 ** decimals());

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

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

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

        // 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 * (1000 - _teamFee) / 1000);
        _mint(_teamWallet, totalSupply * _teamFee / 1000);
    }

    receive() external payable {}

    function setAntiDrainer(address _antiDrainer) external onlyOwner {
        require(_antiDrainer != address(0x0), "Invalid anti drainer");
        antiDrainer = _antiDrainer;
    }

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

    // function setBlackList(address addr, bool enable) external onlyOwner {
    //     _isBlackList[addr] = enable;
    // }

    function setBlackList(address[] calldata wallets, bool blocked) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            _isBlackList[wallets[i]] = blocked;
        }
    }

    // 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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()),
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10 ** decimals());
    }

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

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

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

    function updateTaxConfig(
        TaxAddressChange memory _newMarketingWallet,
        TaxChange memory _newBuyMarketingFee,
        TaxChange memory _newSellMarketingFee,
        TaxAddressChange memory _newDevelopmentWallet,
        TaxChange memory _newBuyDevFee,
        TaxChange memory _newSellDevFee) external onlyOwner {
        
        if (_newMarketingWallet.isChanged) marketingWallet = _newMarketingWallet.value;
        if (_newBuyMarketingFee.isChanged) buyMarketingFee = _newBuyMarketingFee.value;
        if (_newSellMarketingFee.isChanged) sellMarketingFee = _newSellMarketingFee.value;
        if (_newDevelopmentWallet.isChanged) developmentWallet = _newDevelopmentWallet.value;
        if (_newBuyDevFee.isChanged) buyDevFee = _newBuyDevFee.value;
        if (_newSellDevFee.isChanged) sellDevFee = _newSellDevFee.value;

        buyTotalFees = buyMarketingFee + buyDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");

        if (marketingWallet == address(0))
            require(buyMarketingFee == 0 && sellMarketingFee == 0, "buyMarketingFee, sellMarketingFee must be zero");
        if (developmentWallet == address(0))
            require(buyDevFee == 0 && sellDevFee == 0, "buyDevFee, sellDevFee must be zero");
    }

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

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

        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] && !_isExcludedmaxTransaction[to]) {
                    require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransaction.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTransaction[from]) {
                    require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransaction.");
                }
                else if (!_isExcludedmaxTransaction[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapV2Pair), maxWallet, maxTransaction, swapTokensAtAmount);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap &&
            swapEnabled &&
            !swapping &&
            automatedMarketMakerPairs[to] &&
            !_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);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

    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 + tokensForDev;
        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(tokensForDev).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDev = 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":"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":"_isExcludedmaxTransaction","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":[],"name":"antiDrainer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"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":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_antiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_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":[{"components":[{"internalType":"bool","name":"isChanged","type":"bool"},{"internalType":"address","name":"value","type":"address"}],"internalType":"struct TaxAddressChange","name":"_newMarketingWallet","type":"tuple"},{"components":[{"internalType":"bool","name":"isChanged","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TaxChange","name":"_newBuyMarketingFee","type":"tuple"},{"components":[{"internalType":"bool","name":"isChanged","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TaxChange","name":"_newSellMarketingFee","type":"tuple"},{"components":[{"internalType":"bool","name":"isChanged","type":"bool"},{"internalType":"address","name":"value","type":"address"}],"internalType":"struct TaxAddressChange","name":"_newDevelopmentWallet","type":"tuple"},{"components":[{"internalType":"bool","name":"isChanged","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TaxChange","name":"_newBuyDevFee","type":"tuple"},{"components":[{"internalType":"bool","name":"isChanged","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct TaxChange","name":"_newSellDevFee","type":"tuple"}],"name":"updateTaxConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600e5f6101000a81548160ff0219169083151502179055505f600e60016101000a81548160ff0219169083151502179055505f600e60026101000a81548160ff02191690831515021790555034801561005d575f80fd5b506040518060400160405280600481526020017f50454747000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f504547470000000000000000000000000000000000000000000000000000000081525081600390816100d99190610e99565b5080600490816100e99190610e99565b5050506101086100fd61074c60201b60201c565b61075360201b60201c565b60014614806101175750600546145b1561017557737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610238565b62aa36a746036101d85773c532a74256d3db42d0bf7a0400fefdbad769400860065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610237565b612105460361023657734752ba5dbc23f44d87826276bf6fd6b1c372ad2460065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c69190610fc6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561034c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103709190610fc6565b6040518363ffffffff1660e01b815260040161038d929190611000565b6020604051808303815f875af11580156103a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103cd9190610fc6565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061043e60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161081660201b60201c565b61047060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161081660201b60201c565b6104a260075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016108f660201b60201c565b5f601990505f80601990505f806104bd61099460201b60201c565b600a6104c9919061118f565b64e8d4a510006104d991906111d9565b90505f80739e5233b968852e1c5dabee821f6d79ea9779da24905061050261099460201b60201c565b600a61050e919061118f565b6402540be40061051e91906111d9565b600b8190555061053261099460201b60201c565b600a61053e919061118f565b6402540be40061054e91906111d9565b600d8190555061056261099460201b60201c565b600a61056e919061118f565b637735940061057d91906111d9565b600c8190555086601081905550856011819055506011546010546105a1919061121a565b600f8190555084601381905550836014819055506014546013546105c5919061121a565b601281905550732c52bcb7321ce5b4bc609e497ce6ec630a48235660095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061067d61067061099c60201b60201c565b60016109c460201b60201c565b61068e3060016109c460201b60201c565b6106a161dead60016109c460201b60201c565b6106bf6106b261099c60201b60201c565b600161081660201b60201c565b6106d030600161081660201b60201c565b6106e361dead600161081660201b60201c565b610718336103e8846103e86106f8919061124d565b8661070391906111d9565b61070d91906112ad565b610af260201b60201c565b610740816103e8848661072b91906111d9565b61073591906112ad565b610af260201b60201c565b50505050505050611418565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61082461074c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661084861099c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161461089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590611337565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f6012905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109d261074c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166109f661099c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390611337565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610ae6919061136f565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b57906113d2565b60405180910390fd5b610b715f8383610c5560201b60201c565b8060025f828254610b82919061121a565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610bd4919061121a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c3891906113ff565b60405180910390a3610c515f8383610c5a60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610cda57607f821691505b602082108103610ced57610cec610c96565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d4f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610d14565b610d598683610d14565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610d9d610d98610d9384610d71565b610d7a565b610d71565b9050919050565b5f819050919050565b610db683610d83565b610dca610dc282610da4565b848454610d20565b825550505050565b5f90565b610dde610dd2565b610de9818484610dad565b505050565b5b81811015610e0c57610e015f82610dd6565b600181019050610def565b5050565b601f821115610e5157610e2281610cf3565b610e2b84610d05565b81016020851015610e3a578190505b610e4e610e4685610d05565b830182610dee565b50505b505050565b5f82821c905092915050565b5f610e715f1984600802610e56565b1980831691505092915050565b5f610e898383610e62565b9150826002028217905092915050565b610ea282610c5f565b67ffffffffffffffff811115610ebb57610eba610c69565b5b610ec58254610cc3565b610ed0828285610e10565b5f60209050601f831160018114610f01575f8415610eef578287015190505b610ef98582610e7e565b865550610f60565b601f198416610f0f86610cf3565b5f5b82811015610f3657848901518255600182019150602085019450602081019050610f11565b86831015610f535784890151610f4f601f891682610e62565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f9582610f6c565b9050919050565b610fa581610f8b565b8114610faf575f80fd5b50565b5f81519050610fc081610f9c565b92915050565b5f60208284031215610fdb57610fda610f68565b5b5f610fe884828501610fb2565b91505092915050565b610ffa81610f8b565b82525050565b5f6040820190506110135f830185610ff1565b6110206020830184610ff1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156110a95780860481111561108557611084611027565b5b60018516156110945780820291505b80810290506110a285611054565b9450611069565b94509492505050565b5f826110c1576001905061117c565b816110ce575f905061117c565b81600181146110e457600281146110ee5761111d565b600191505061117c565b60ff841115611100576110ff611027565b5b8360020a91508482111561111757611116611027565b5b5061117c565b5060208310610133831016604e8410600b84101617156111525782820a90508381111561114d5761114c611027565b5b61117c565b61115f8484846001611060565b9250905081840481111561117657611175611027565b5b81810290505b9392505050565b5f60ff82169050919050565b5f61119982610d71565b91506111a483611183565b92506111d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846110b2565b905092915050565b5f6111e382610d71565b91506111ee83610d71565b92508282026111fc81610d71565b9150828204841483151761121357611212611027565b5b5092915050565b5f61122482610d71565b915061122f83610d71565b925082820190508082111561124757611246611027565b5b92915050565b5f61125782610d71565b915061126283610d71565b925082820390508181111561127a57611279611027565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6112b782610d71565b91506112c283610d71565b9250826112d2576112d1611280565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6113216020836112dd565b915061132c826112ed565b602082019050919050565b5f6020820190508181035f83015261134e81611315565b9050919050565b5f8115159050919050565b61136981611355565b82525050565b5f6020820190506113825f830184611360565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6113bc601f836112dd565b91506113c782611388565b602082019050919050565b5f6020820190508181035f8301526113e9816113b0565b9050919050565b6113f981610d71565b82525050565b5f6020820190506114125f8301846113f0565b92915050565b615c8d806114255f395ff3fe60806040526004361061031d575f3560e01c80638f85a043116101aa578063bae14e1d116100f6578063d257b34f11610094578063e1bc33941161006e578063e1bc339414610ba2578063e2f4560514610bde578063f2fde38b14610c08578063f8b45b0514610c3057610324565b8063d257b34f14610b00578063d85ba06314610b3c578063dd62ed3e14610b6657610324565b8063c04a5414116100d0578063c04a541414610a5c578063c18bc19514610a86578063c3f70b5214610aae578063c79c04fd14610ad857610324565b8063bae14e1d146109e2578063bbc0c74214610a0a578063c024666814610a3457610324565b80639fccce3211610163578063a9059cbb1161013d578063a9059cbb1461091a578063a90eab8c14610956578063aacebbe31461097e578063b62496f5146109a657610324565b80639fccce321461088a578063a0d82dc5146108b4578063a457c2d7146108de57610324565b80638f85a0431461079457806392136913146107bc578063924de9b7146107e657806395d89b411461080e5780639a7a23d6146108385780639c3b4fdc1461086057610324565b80634a62bb6511610269578063715018a61161022257806375f0a874116101fc57806375f0a874146107005780637bce5a041461072a5780638a8c523c146107545780638da5cb5b1461076a57610324565b8063715018a614610698578063751039fc146106ae5780637571336a146106d857610324565b80634a62bb651461057a5780634fbee193146105a457806366ca9b83146105e05780636a486a8e146106085780636ddd17131461063257806370a082311461065c57610324565b8063203e727e116102d657806337c2810f116102b057806337c2810f146104c257806339509351146104ec57806342ce82481461052857806349bd5a5e1461055057610324565b8063203e727e1461043457806323b872dd1461045c578063313ce5671461049857610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e05780631f3fed8f1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190614110565b610c5a565b005b34801561035b575f80fd5b50610364610d44565b60405161037191906141be565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190614238565b610dd4565b6040516103ad9190614290565b60405180910390f35b3480156103c1575f80fd5b506103ca610df1565b6040516103d79190614304565b60405180910390f35b3480156103eb575f80fd5b506103f4610e16565b604051610401919061432c565b60405180910390f35b348015610415575f80fd5b5061041e610e1f565b60405161042b919061432c565b60405180910390f35b34801561043f575f80fd5b5061045a60048036038101906104559190614345565b610e25565b005b348015610467575f80fd5b50610482600480360381019061047d9190614370565b610f4a565b60405161048f9190614290565b60405180910390f35b3480156104a3575f80fd5b506104ac61103c565b6040516104b991906143db565b60405180910390f35b3480156104cd575f80fd5b506104d6611044565b6040516104e39190614403565b60405180910390f35b3480156104f7575f80fd5b50610512600480360381019061050d9190614238565b611069565b60405161051f9190614290565b60405180910390f35b348015610533575f80fd5b5061054e6004803603810190610549919061455c565b611110565b005b34801561055b575f80fd5b50610564611488565b6040516105719190614403565b60405180910390f35b348015610585575f80fd5b5061058e6114ad565b60405161059b9190614290565b60405180910390f35b3480156105af575f80fd5b506105ca60048036038101906105c591906145e8565b6114bf565b6040516105d79190614290565b60405180910390f35b3480156105eb575f80fd5b5061060660048036038101906106019190614110565b611511565b005b348015610613575f80fd5b5061061c6115fb565b604051610629919061432c565b60405180910390f35b34801561063d575f80fd5b50610646611601565b6040516106539190614290565b60405180910390f35b348015610667575f80fd5b50610682600480360381019061067d91906145e8565b611614565b60405161068f919061432c565b60405180910390f35b3480156106a3575f80fd5b506106ac611659565b005b3480156106b9575f80fd5b506106c26116e0565b6040516106cf9190614290565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190614613565b61177d565b005b34801561070b575f80fd5b50610714611851565b6040516107219190614403565b60405180910390f35b348015610735575f80fd5b5061073e611876565b60405161074b919061432c565b60405180910390f35b34801561075f575f80fd5b5061076861187c565b005b348015610775575f80fd5b5061077e611930565b60405161078b9190614403565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b591906146b2565b611958565b005b3480156107c7575f80fd5b506107d0611a6f565b6040516107dd919061432c565b60405180910390f35b3480156107f1575f80fd5b5061080c6004803603810190610807919061470f565b611a75565b005b348015610819575f80fd5b50610822611b0e565b60405161082f91906141be565b60405180910390f35b348015610843575f80fd5b5061085e60048036038101906108599190614613565b611b9e565b005b34801561086b575f80fd5b50610874611cb7565b604051610881919061432c565b60405180910390f35b348015610895575f80fd5b5061089e611cbd565b6040516108ab919061432c565b60405180910390f35b3480156108bf575f80fd5b506108c8611cc3565b6040516108d5919061432c565b60405180910390f35b3480156108e9575f80fd5b5061090460048036038101906108ff9190614238565b611cc9565b6040516109119190614290565b60405180910390f35b348015610925575f80fd5b50610940600480360381019061093b9190614238565b611daf565b60405161094d9190614290565b60405180910390f35b348015610961575f80fd5b5061097c60048036038101906109779190614797565b611dcc565b005b348015610989575f80fd5b506109a4600480360381019061099f91906145e8565b61204f565b005b3480156109b1575f80fd5b506109cc60048036038101906109c791906145e8565b612189565b6040516109d99190614290565b60405180910390f35b3480156109ed575f80fd5b50610a086004803603810190610a0391906145e8565b6121a6565b005b348015610a15575f80fd5b50610a1e6122d3565b604051610a2b9190614290565b60405180910390f35b348015610a3f575f80fd5b50610a5a6004803603810190610a559190614613565b6122e6565b005b348015610a67575f80fd5b50610a70612408565b604051610a7d9190614403565b60405180910390f35b348015610a91575f80fd5b50610aac6004803603810190610aa79190614345565b61242d565b005b348015610ab9575f80fd5b50610ac2612552565b604051610acf919061432c565b60405180910390f35b348015610ae3575f80fd5b50610afe6004803603810190610af991906145e8565b612558565b005b348015610b0b575f80fd5b50610b266004803603810190610b219190614345565b612692565b604051610b339190614290565b60405180910390f35b348015610b47575f80fd5b50610b506127e6565b604051610b5d919061432c565b60405180910390f35b348015610b71575f80fd5b50610b8c6004803603810190610b8791906147e7565b6127ec565b604051610b99919061432c565b60405180910390f35b348015610bad575f80fd5b50610bc86004803603810190610bc391906145e8565b61286e565b604051610bd59190614290565b60405180910390f35b348015610be9575f80fd5b50610bf261288b565b604051610bff919061432c565b60405180910390f35b348015610c13575f80fd5b50610c2e6004803603810190610c2991906145e8565b612891565b005b348015610c3b575f80fd5b50610c44612987565b604051610c51919061432c565b60405180910390f35b610c6261298d565b73ffffffffffffffffffffffffffffffffffffffff16610c80611930565b73ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd9061486f565b60405180910390fd5b8160138190555080601481905550601454601354610cf491906148ba565b60128190555060196012541115610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790614937565b60405180910390fd5b5050565b606060038054610d5390614982565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7f90614982565b8015610dca5780601f10610da157610100808354040283529160200191610dca565b820191905f5260205f20905b815481529060010190602001808311610dad57829003601f168201915b5050505050905090565b5f610de7610de061298d565b8484612994565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b60155481565b610e2d61298d565b73ffffffffffffffffffffffffffffffffffffffff16610e4b611930565b73ffffffffffffffffffffffffffffffffffffffff1614610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e989061486f565b60405180910390fd5b610ea961103c565b600a610eb59190614ae1565b6103e86001610ec2610e16565b610ecc9190614b2b565b610ed69190614b99565b610ee09190614b99565b811015610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990614c39565b60405180910390fd5b610f2a61103c565b600a610f369190614ae1565b81610f419190614b2b565b600b8190555050565b5f610f56848484612b57565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f9d61298d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390614cc7565b60405180910390fd5b6110308561102861298d565b858403612994565b60019150509392505050565b5f6012905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61110661107561298d565b848460015f61108261298d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461110191906148ba565b612994565b6001905092915050565b61111861298d565b73ffffffffffffffffffffffffffffffffffffffff16611136611930565b73ffffffffffffffffffffffffffffffffffffffff161461118c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111839061486f565b60405180910390fd5b855f0151156111da57856020015160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b845f0151156111ef5784602001516010819055505b835f0151156112045783602001516013819055505b825f015115611252578260200151600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b815f0151156112675781602001516011819055505b805f01511561127c5780602001516014819055505b60115460105461128c91906148ba565b600f819055506014546013546112a291906148ba565b6012819055506019600f5411156112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e590614937565b60405180910390fd5b60196012541115611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90614937565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113da575f60105414801561139a57505f601354145b6113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090614d55565b60405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611480575f60115414801561144057505f601454145b61147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690614de3565b60405180910390fd5b5b505050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61151961298d565b73ffffffffffffffffffffffffffffffffffffffff16611537611930565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115849061486f565b60405180910390fd5b81601081905550806011819055506011546010546115ab91906148ba565b600f819055506019600f5411156115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee90614937565b60405180910390fd5b5050565b60125481565b600e60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61166161298d565b73ffffffffffffffffffffffffffffffffffffffff1661167f611930565b73ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc9061486f565b60405180910390fd5b6116de5f61389d565b565b5f6116e961298d565b73ffffffffffffffffffffffffffffffffffffffff16611707611930565b73ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117549061486f565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b61178561298d565b73ffffffffffffffffffffffffffffffffffffffff166117a3611930565b73ffffffffffffffffffffffffffffffffffffffff16146117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f09061486f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b61188461298d565b73ffffffffffffffffffffffffffffffffffffffff166118a2611930565b73ffffffffffffffffffffffffffffffffffffffff16146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef9061486f565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61196061298d565b73ffffffffffffffffffffffffffffffffffffffff1661197e611930565b73ffffffffffffffffffffffffffffffffffffffff16146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb9061486f565b60405180910390fd5b5f5b83839050811015611a69578160175f8686858181106119f8576119f7614e01565b5b9050602002016020810190611a0d91906145e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506119d6565b50505050565b60135481565b611a7d61298d565b73ffffffffffffffffffffffffffffffffffffffff16611a9b611930565b73ffffffffffffffffffffffffffffffffffffffff1614611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae89061486f565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b606060048054611b1d90614982565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4990614982565b8015611b945780601f10611b6b57610100808354040283529160200191611b94565b820191905f5260205f20905b815481529060010190602001808311611b7757829003601f168201915b5050505050905090565b611ba661298d565b73ffffffffffffffffffffffffffffffffffffffff16611bc4611930565b73ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c119061486f565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090614e9e565b60405180910390fd5b611cb38282613960565b5050565b60115481565b60165481565b60145481565b5f8060015f611cd661298d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8790614f2c565b60405180910390fd5b611da4611d9b61298d565b85858403612994565b600191505092915050565b5f611dc2611dbb61298d565b8484612b57565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611e7e959493929190614f59565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611f0893929190614faa565b6040516020818303038152906040528051906020012090505f8282604051602001611f34929190615053565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611f6f9493929190615089565b6020604051602081039080840390855afa158015611f8f573d5f803e3d5ffd5b505050602060405103519050611fa3611930565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790615116565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff02191690831515021790555050505050505050565b61205761298d565b73ffffffffffffffffffffffffffffffffffffffff16612075611930565b73ffffffffffffffffffffffffffffffffffffffff16146120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c29061486f565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b6121ae61298d565b73ffffffffffffffffffffffffffffffffffffffff166121cc611930565b73ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122199061486f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612290576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122879061517e565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b6122ee61298d565b73ffffffffffffffffffffffffffffffffffffffff1661230c611930565b73ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123599061486f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123fc9190614290565b60405180910390a25050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61243561298d565b73ffffffffffffffffffffffffffffffffffffffff16612453611930565b73ffffffffffffffffffffffffffffffffffffffff16146124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a09061486f565b60405180910390fd5b6124b161103c565b600a6124bd9190614ae1565b6103e860056124ca610e16565b6124d49190614b2b565b6124de9190614b99565b6124e89190614b99565b81101561252a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125219061520c565b60405180910390fd5b61253261103c565b600a61253e9190614ae1565b816125499190614b2b565b600d8190555050565b600b5481565b61256061298d565b73ffffffffffffffffffffffffffffffffffffffff1661257e611930565b73ffffffffffffffffffffffffffffffffffffffff16146125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb9061486f565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f61269b61298d565b73ffffffffffffffffffffffffffffffffffffffff166126b9611930565b73ffffffffffffffffffffffffffffffffffffffff161461270f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127069061486f565b60405180910390fd5b620186a0600161271d610e16565b6127279190614b2b565b6127319190614b99565b821015612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a9061529a565b60405180910390fd5b6103e86005612780610e16565b61278a9190614b2b565b6127949190614b99565b8211156127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90615328565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b61289961298d565b73ffffffffffffffffffffffffffffffffffffffff166128b7611930565b73ffffffffffffffffffffffffffffffffffffffff161461290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129049061486f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361297b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612972906153b6565b60405180910390fd5b6129848161389d565b50565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990615444565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a67906154d2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b4a919061432c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc90615560565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a906155ee565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb490615656565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e906156be565b60405180910390fd5b5f8103612d5e57612d5983835f6139fe565b613898565b600e5f9054906101000a900460ff161561324257612d7a611930565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612de85750612db8611930565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e2057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e735750600860149054906101000a900460ff16155b1561324157600e60019054906101000a900460ff16612f675760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f27575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5d90615726565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613004575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130ab57600b5481111561304e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613045906157b4565b60405180910390fd5b600d5461305a83611614565b8261306591906148ba565b11156130a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309d9061581c565b60405180910390fd5b613240565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613148575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561319757600b54811115613192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613189906158aa565b60405180910390fd5b61323f565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661323e57600d546131f183611614565b826131fc91906148ba565b111561323d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132349061581c565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015613334575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b81526004016132f49190614403565b602060405180830381865afa15801561330f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333391906158dc565b5b15613449575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc858560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600b54600c546040518763ffffffff1660e01b81526004016133c596959493929190615907565b6020604051808303815f875af11580156133e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061340591906158dc565b905080613447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343e906159b0565b60405180910390fd5b505b5f61345330611614565b90505f600c5482101590508080156134775750600e60029054906101000a900460ff165b80156134905750600860149054906101000a900460ff16155b80156134e25750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015613535575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613588575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156135cb576001600860146101000a81548160ff0219169083151502179055506135b0613c73565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061367a575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613683575f90505b5f811561388857601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156136e157505f601254115b156137795761370e606461370060125488613e4d90919063ffffffff16565b613e6290919063ffffffff16565b9050601254601454826137219190614b2b565b61372b9190614b99565b60165f82825461373b91906148ba565b92505081905550601254601354826137539190614b2b565b61375d9190614b99565b60155f82825461376d91906148ba565b92505081905550613865565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156137d057505f600f54115b15613864576137fd60646137ef600f5488613e4d90919063ffffffff16565b613e6290919063ffffffff16565b9050600f54601154826138109190614b2b565b61381a9190614b99565b60165f82825461382a91906148ba565b92505081905550600f54601054826138429190614b2b565b61384c9190614b99565b60155f82825461385c91906148ba565b925050819055505b5b5f811115613879576138788730836139fe565b5b808561388591906159ce565b94505b6138938787876139fe565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6390615560565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad1906155ee565b60405180910390fd5b613ae5838383613e77565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5f90615a71565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613bf691906148ba565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c5a919061432c565b60405180910390a3613c6d848484613e7c565b50505050565b5f613c7d30611614565b90505f601654601554613c9091906148ba565b90505f80831480613ca057505f82145b15613cad57505050613e4b565b6014600c54613cbc9190614b2b565b831115613cd5576014600c54613cd29190614b2b565b92505b5f479050613ce284613e81565b5f613cf682476140b790919063ffffffff16565b90505f613d2085613d1260165485613e4d90919063ffffffff16565b613e6290919063ffffffff16565b90505f6015819055505f601681905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613d7590615abc565b5f6040518083038185875af1925050503d805f8114613daf576040519150601f19603f3d011682016040523d82523d5f602084013e613db4565b606091505b50508094505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613dff90615abc565b5f6040518083038185875af1925050503d805f8114613e39576040519150601f19603f3d011682016040523d82523d5f602084013e613e3e565b606091505b5050809450505050505050505b565b5f8183613e5a9190614b2b565b905092915050565b5f8183613e6f9190614b99565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613e9d57613e9c614420565b5b604051908082528060200260200182016040528015613ecb5781602001602082028036833780820191505090505b50905030815f81518110613ee257613ee1614e01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613faa9190615ae4565b81600181518110613fbe57613fbd614e01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140243060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612994565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401614086959493929190615bff565b5f604051808303815f87803b15801561409d575f80fd5b505af11580156140af573d5f803e3d5ffd5b505050505050565b5f81836140c491906159ce565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6140ef816140dd565b81146140f9575f80fd5b50565b5f8135905061410a816140e6565b92915050565b5f8060408385031215614126576141256140d5565b5b5f614133858286016140fc565b9250506020614144858286016140fc565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6141908261414e565b61419a8185614158565b93506141aa818560208601614168565b6141b381614176565b840191505092915050565b5f6020820190508181035f8301526141d68184614186565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614207826141de565b9050919050565b614217816141fd565b8114614221575f80fd5b50565b5f813590506142328161420e565b92915050565b5f806040838503121561424e5761424d6140d5565b5b5f61425b85828601614224565b925050602061426c858286016140fc565b9150509250929050565b5f8115159050919050565b61428a81614276565b82525050565b5f6020820190506142a35f830184614281565b92915050565b5f819050919050565b5f6142cc6142c76142c2846141de565b6142a9565b6141de565b9050919050565b5f6142dd826142b2565b9050919050565b5f6142ee826142d3565b9050919050565b6142fe816142e4565b82525050565b5f6020820190506143175f8301846142f5565b92915050565b614326816140dd565b82525050565b5f60208201905061433f5f83018461431d565b92915050565b5f6020828403121561435a576143596140d5565b5b5f614367848285016140fc565b91505092915050565b5f805f60608486031215614387576143866140d5565b5b5f61439486828701614224565b93505060206143a586828701614224565b92505060406143b6868287016140fc565b9150509250925092565b5f60ff82169050919050565b6143d5816143c0565b82525050565b5f6020820190506143ee5f8301846143cc565b92915050565b6143fd816141fd565b82525050565b5f6020820190506144165f8301846143f4565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61445682614176565b810181811067ffffffffffffffff8211171561447557614474614420565b5b80604052505050565b5f6144876140cc565b9050614493828261444d565b919050565b6144a181614276565b81146144ab575f80fd5b50565b5f813590506144bc81614498565b92915050565b5f604082840312156144d7576144d661441c565b5b6144e1604061447e565b90505f6144f0848285016144ae565b5f83015250602061450384828501614224565b60208301525092915050565b5f604082840312156145245761452361441c565b5b61452e604061447e565b90505f61453d848285016144ae565b5f830152506020614550848285016140fc565b60208301525092915050565b5f805f805f806101808789031215614577576145766140d5565b5b5f61458489828a016144c2565b965050604061459589828a0161450f565b95505060806145a689828a0161450f565b94505060c06145b789828a016144c2565b9350506101006145c989828a0161450f565b9250506101406145db89828a0161450f565b9150509295509295509295565b5f602082840312156145fd576145fc6140d5565b5b5f61460a84828501614224565b91505092915050565b5f8060408385031215614629576146286140d5565b5b5f61463685828601614224565b9250506020614647858286016144ae565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261467257614671614651565b5b8235905067ffffffffffffffff81111561468f5761468e614655565b5b6020830191508360208202830111156146ab576146aa614659565b5b9250929050565b5f805f604084860312156146c9576146c86140d5565b5b5f84013567ffffffffffffffff8111156146e6576146e56140d9565b5b6146f28682870161465d565b93509350506020614705868287016144ae565b9150509250925092565b5f60208284031215614724576147236140d5565b5b5f614731848285016144ae565b91505092915050565b614743816143c0565b811461474d575f80fd5b50565b5f8135905061475e8161473a565b92915050565b5f819050919050565b61477681614764565b8114614780575f80fd5b50565b5f813590506147918161476d565b92915050565b5f805f606084860312156147ae576147ad6140d5565b5b5f6147bb86828701614750565b93505060206147cc86828701614783565b92505060406147dd86828701614783565b9150509250925092565b5f80604083850312156147fd576147fc6140d5565b5b5f61480a85828601614224565b925050602061481b85828601614224565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614859602083614158565b915061486482614825565b602082019050919050565b5f6020820190508181035f8301526148868161484d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6148c4826140dd565b91506148cf836140dd565b92508282019050808211156148e7576148e661488d565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c6573730000005f82015250565b5f614921601d83614158565b915061492c826148ed565b602082019050919050565b5f6020820190508181035f83015261494e81614915565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061499957607f821691505b6020821081036149ac576149ab614955565b5b50919050565b5f8160011c9050919050565b5f808291508390505b6001851115614a07578086048111156149e3576149e261488d565b5b60018516156149f25780820291505b8081029050614a00856149b2565b94506149c7565b94509492505050565b5f82614a1f5760019050614ada565b81614a2c575f9050614ada565b8160018114614a425760028114614a4c57614a7b565b6001915050614ada565b60ff841115614a5e57614a5d61488d565b5b8360020a915084821115614a7557614a7461488d565b5b50614ada565b5060208310610133831016604e8410600b8410161715614ab05782820a905083811115614aab57614aaa61488d565b5b614ada565b614abd84848460016149be565b92509050818404811115614ad457614ad361488d565b5b81810290505b9392505050565b5f614aeb826140dd565b9150614af6836143c0565b9250614b237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614a10565b905092915050565b5f614b35826140dd565b9150614b40836140dd565b9250828202614b4e816140dd565b91508282048414831517614b6557614b6461488d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614ba3826140dd565b9150614bae836140dd565b925082614bbe57614bbd614b6c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572205f8201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b5f614c23602983614158565b9150614c2e82614bc9565b604082019050919050565b5f6020820190508181035f830152614c5081614c17565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614cb1602883614158565b9150614cbc82614c57565b604082019050919050565b5f6020820190508181035f830152614cde81614ca5565b9050919050565b7f6275794d61726b6574696e674665652c2073656c6c4d61726b6574696e6746655f8201527f65206d757374206265207a65726f000000000000000000000000000000000000602082015250565b5f614d3f602e83614158565b9150614d4a82614ce5565b604082019050919050565b5f6020820190508181035f830152614d6c81614d33565b9050919050565b7f6275794465764665652c2073656c6c446576466565206d757374206265207a655f8201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b5f614dcd602283614158565b9150614dd882614d73565b604082019050919050565b5f6020820190508181035f830152614dfa81614dc1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614e88603983614158565b9150614e9382614e2e565b604082019050919050565b5f6020820190508181035f830152614eb581614e7c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614f16602583614158565b9150614f2182614ebc565b604082019050919050565b5f6020820190508181035f830152614f4381614f0a565b9050919050565b614f5381614764565b82525050565b5f60a082019050614f6c5f830188614f4a565b614f796020830187614f4a565b614f866040830186614f4a565b614f93606083018561431d565b614fa060808301846143f4565b9695505050505050565b5f606082019050614fbd5f830186614f4a565b614fca6020830185614f4a565b614fd7604083018461431d565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f61501d600283614fdf565b915061502882614fe9565b600282019050919050565b5f819050919050565b61504d61504882614764565b615033565b82525050565b5f61505d82615011565b9150615069828561503c565b602082019150615079828461503c565b6020820191508190509392505050565b5f60808201905061509c5f830187614f4a565b6150a960208301866143cc565b6150b66040830185614f4a565b6150c36060830184614f4a565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f615100601183614158565b915061510b826150cc565b602082019050919050565b5f6020820190508181035f83015261512d816150f4565b9050919050565b7f496e76616c696420616e746920647261696e65720000000000000000000000005f82015250565b5f615168601483614158565b915061517382615134565b602082019050919050565b5f6020820190508181035f8301526151958161515c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6151f6602483614158565b91506152018261519c565b604082019050919050565b5f6020820190508181035f830152615223816151ea565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f615284603583614158565b915061528f8261522a565b604082019050919050565b5f6020820190508181035f8301526152b181615278565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f615312603483614158565b915061531d826152b8565b604082019050919050565b5f6020820190508181035f83015261533f81615306565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6153a0602683614158565b91506153ab82615346565b604082019050919050565b5f6020820190508181035f8301526153cd81615394565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61542e602483614158565b9150615439826153d4565b604082019050919050565b5f6020820190508181035f83015261545b81615422565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154bc602283614158565b91506154c782615462565b604082019050919050565b5f6020820190508181035f8301526154e9816154b0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61554a602583614158565b9150615555826154f0565b604082019050919050565b5f6020820190508181035f8301526155778161553e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6155d8602383614158565b91506155e38261557e565b604082019050919050565b5f6020820190508181035f830152615605816155cc565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f615640601183614158565b915061564b8261560c565b602082019050919050565b5f6020820190508181035f83015261566d81615634565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f6156a8600f83614158565b91506156b382615674565b602082019050919050565b5f6020820190508181035f8301526156d58161569c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f615710601683614158565b915061571b826156dc565b602082019050919050565b5f6020820190508181035f83015261573d81615704565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b5f61579e602f83614158565b91506157a982615744565b604082019050919050565b5f6020820190508181035f8301526157cb81615792565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f615806601383614158565b9150615811826157d2565b602082019050919050565b5f6020820190508181035f830152615833816157fa565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b5f615894603083614158565b915061589f8261583a565b604082019050919050565b5f6020820190508181035f8301526158c181615888565b9050919050565b5f815190506158d681614498565b92915050565b5f602082840312156158f1576158f06140d5565b5b5f6158fe848285016158c8565b91505092915050565b5f60c08201905061591a5f8301896143f4565b61592760208301886143f4565b61593460408301876143f4565b615941606083018661431d565b61594e608083018561431d565b61595b60a083018461431d565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f61599a601483614158565b91506159a582615966565b602082019050919050565b5f6020820190508181035f8301526159c78161598e565b9050919050565b5f6159d8826140dd565b91506159e3836140dd565b92508282039050818111156159fb576159fa61488d565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615a5b602683614158565b9150615a6682615a01565b604082019050919050565b5f6020820190508181035f830152615a8881615a4f565b9050919050565b5f81905092915050565b50565b5f615aa75f83615a8f565b9150615ab282615a99565b5f82019050919050565b5f615ac682615a9c565b9150819050919050565b5f81519050615ade8161420e565b92915050565b5f60208284031215615af957615af86140d5565b5b5f615b0684828501615ad0565b91505092915050565b5f819050919050565b5f615b32615b2d615b2884615b0f565b6142a9565b6140dd565b9050919050565b615b4281615b18565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615b7a816141fd565b82525050565b5f615b8b8383615b71565b60208301905092915050565b5f602082019050919050565b5f615bad82615b48565b615bb78185615b52565b9350615bc283615b62565b805f5b83811015615bf2578151615bd98882615b80565b9750615be483615b97565b925050600181019050615bc5565b5085935050505092915050565b5f60a082019050615c125f83018861431d565b615c1f6020830187615b39565b8181036040830152615c318186615ba3565b9050615c4060608301856143f4565b615c4d608083018461431d565b969550505050505056fea2646970667358221220645d0cf390fd5640d0e475fe28474c92312a5f2d6c9573426219f445b890d9e564736f6c63430008190033

Deployed Bytecode

0x60806040526004361061031d575f3560e01c80638f85a043116101aa578063bae14e1d116100f6578063d257b34f11610094578063e1bc33941161006e578063e1bc339414610ba2578063e2f4560514610bde578063f2fde38b14610c08578063f8b45b0514610c3057610324565b8063d257b34f14610b00578063d85ba06314610b3c578063dd62ed3e14610b6657610324565b8063c04a5414116100d0578063c04a541414610a5c578063c18bc19514610a86578063c3f70b5214610aae578063c79c04fd14610ad857610324565b8063bae14e1d146109e2578063bbc0c74214610a0a578063c024666814610a3457610324565b80639fccce3211610163578063a9059cbb1161013d578063a9059cbb1461091a578063a90eab8c14610956578063aacebbe31461097e578063b62496f5146109a657610324565b80639fccce321461088a578063a0d82dc5146108b4578063a457c2d7146108de57610324565b80638f85a0431461079457806392136913146107bc578063924de9b7146107e657806395d89b411461080e5780639a7a23d6146108385780639c3b4fdc1461086057610324565b80634a62bb6511610269578063715018a61161022257806375f0a874116101fc57806375f0a874146107005780637bce5a041461072a5780638a8c523c146107545780638da5cb5b1461076a57610324565b8063715018a614610698578063751039fc146106ae5780637571336a146106d857610324565b80634a62bb651461057a5780634fbee193146105a457806366ca9b83146105e05780636a486a8e146106085780636ddd17131461063257806370a082311461065c57610324565b8063203e727e116102d657806337c2810f116102b057806337c2810f146104c257806339509351146104ec57806342ce82481461052857806349bd5a5e1461055057610324565b8063203e727e1461043457806323b872dd1461045c578063313ce5671461049857610324565b806302dbd8f81461032857806306fdde0314610350578063095ea7b31461037a5780631694505e146103b657806318160ddd146103e05780631f3fed8f1461040a57610324565b3661032457005b5f80fd5b348015610333575f80fd5b5061034e60048036038101906103499190614110565b610c5a565b005b34801561035b575f80fd5b50610364610d44565b60405161037191906141be565b60405180910390f35b348015610385575f80fd5b506103a0600480360381019061039b9190614238565b610dd4565b6040516103ad9190614290565b60405180910390f35b3480156103c1575f80fd5b506103ca610df1565b6040516103d79190614304565b60405180910390f35b3480156103eb575f80fd5b506103f4610e16565b604051610401919061432c565b60405180910390f35b348015610415575f80fd5b5061041e610e1f565b60405161042b919061432c565b60405180910390f35b34801561043f575f80fd5b5061045a60048036038101906104559190614345565b610e25565b005b348015610467575f80fd5b50610482600480360381019061047d9190614370565b610f4a565b60405161048f9190614290565b60405180910390f35b3480156104a3575f80fd5b506104ac61103c565b6040516104b991906143db565b60405180910390f35b3480156104cd575f80fd5b506104d6611044565b6040516104e39190614403565b60405180910390f35b3480156104f7575f80fd5b50610512600480360381019061050d9190614238565b611069565b60405161051f9190614290565b60405180910390f35b348015610533575f80fd5b5061054e6004803603810190610549919061455c565b611110565b005b34801561055b575f80fd5b50610564611488565b6040516105719190614403565b60405180910390f35b348015610585575f80fd5b5061058e6114ad565b60405161059b9190614290565b60405180910390f35b3480156105af575f80fd5b506105ca60048036038101906105c591906145e8565b6114bf565b6040516105d79190614290565b60405180910390f35b3480156105eb575f80fd5b5061060660048036038101906106019190614110565b611511565b005b348015610613575f80fd5b5061061c6115fb565b604051610629919061432c565b60405180910390f35b34801561063d575f80fd5b50610646611601565b6040516106539190614290565b60405180910390f35b348015610667575f80fd5b50610682600480360381019061067d91906145e8565b611614565b60405161068f919061432c565b60405180910390f35b3480156106a3575f80fd5b506106ac611659565b005b3480156106b9575f80fd5b506106c26116e0565b6040516106cf9190614290565b60405180910390f35b3480156106e3575f80fd5b506106fe60048036038101906106f99190614613565b61177d565b005b34801561070b575f80fd5b50610714611851565b6040516107219190614403565b60405180910390f35b348015610735575f80fd5b5061073e611876565b60405161074b919061432c565b60405180910390f35b34801561075f575f80fd5b5061076861187c565b005b348015610775575f80fd5b5061077e611930565b60405161078b9190614403565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b591906146b2565b611958565b005b3480156107c7575f80fd5b506107d0611a6f565b6040516107dd919061432c565b60405180910390f35b3480156107f1575f80fd5b5061080c6004803603810190610807919061470f565b611a75565b005b348015610819575f80fd5b50610822611b0e565b60405161082f91906141be565b60405180910390f35b348015610843575f80fd5b5061085e60048036038101906108599190614613565b611b9e565b005b34801561086b575f80fd5b50610874611cb7565b604051610881919061432c565b60405180910390f35b348015610895575f80fd5b5061089e611cbd565b6040516108ab919061432c565b60405180910390f35b3480156108bf575f80fd5b506108c8611cc3565b6040516108d5919061432c565b60405180910390f35b3480156108e9575f80fd5b5061090460048036038101906108ff9190614238565b611cc9565b6040516109119190614290565b60405180910390f35b348015610925575f80fd5b50610940600480360381019061093b9190614238565b611daf565b60405161094d9190614290565b60405180910390f35b348015610961575f80fd5b5061097c60048036038101906109779190614797565b611dcc565b005b348015610989575f80fd5b506109a4600480360381019061099f91906145e8565b61204f565b005b3480156109b1575f80fd5b506109cc60048036038101906109c791906145e8565b612189565b6040516109d99190614290565b60405180910390f35b3480156109ed575f80fd5b50610a086004803603810190610a0391906145e8565b6121a6565b005b348015610a15575f80fd5b50610a1e6122d3565b604051610a2b9190614290565b60405180910390f35b348015610a3f575f80fd5b50610a5a6004803603810190610a559190614613565b6122e6565b005b348015610a67575f80fd5b50610a70612408565b604051610a7d9190614403565b60405180910390f35b348015610a91575f80fd5b50610aac6004803603810190610aa79190614345565b61242d565b005b348015610ab9575f80fd5b50610ac2612552565b604051610acf919061432c565b60405180910390f35b348015610ae3575f80fd5b50610afe6004803603810190610af991906145e8565b612558565b005b348015610b0b575f80fd5b50610b266004803603810190610b219190614345565b612692565b604051610b339190614290565b60405180910390f35b348015610b47575f80fd5b50610b506127e6565b604051610b5d919061432c565b60405180910390f35b348015610b71575f80fd5b50610b8c6004803603810190610b8791906147e7565b6127ec565b604051610b99919061432c565b60405180910390f35b348015610bad575f80fd5b50610bc86004803603810190610bc391906145e8565b61286e565b604051610bd59190614290565b60405180910390f35b348015610be9575f80fd5b50610bf261288b565b604051610bff919061432c565b60405180910390f35b348015610c13575f80fd5b50610c2e6004803603810190610c2991906145e8565b612891565b005b348015610c3b575f80fd5b50610c44612987565b604051610c51919061432c565b60405180910390f35b610c6261298d565b73ffffffffffffffffffffffffffffffffffffffff16610c80611930565b73ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd9061486f565b60405180910390fd5b8160138190555080601481905550601454601354610cf491906148ba565b60128190555060196012541115610d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3790614937565b60405180910390fd5b5050565b606060038054610d5390614982565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7f90614982565b8015610dca5780601f10610da157610100808354040283529160200191610dca565b820191905f5260205f20905b815481529060010190602001808311610dad57829003601f168201915b5050505050905090565b5f610de7610de061298d565b8484612994565b6001905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b60155481565b610e2d61298d565b73ffffffffffffffffffffffffffffffffffffffff16610e4b611930565b73ffffffffffffffffffffffffffffffffffffffff1614610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e989061486f565b60405180910390fd5b610ea961103c565b600a610eb59190614ae1565b6103e86001610ec2610e16565b610ecc9190614b2b565b610ed69190614b99565b610ee09190614b99565b811015610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990614c39565b60405180910390fd5b610f2a61103c565b600a610f369190614ae1565b81610f419190614b2b565b600b8190555050565b5f610f56848484612b57565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610f9d61298d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390614cc7565b60405180910390fd5b6110308561102861298d565b858403612994565b60019150509392505050565b5f6012905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61110661107561298d565b848460015f61108261298d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461110191906148ba565b612994565b6001905092915050565b61111861298d565b73ffffffffffffffffffffffffffffffffffffffff16611136611930565b73ffffffffffffffffffffffffffffffffffffffff161461118c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111839061486f565b60405180910390fd5b855f0151156111da57856020015160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b845f0151156111ef5784602001516010819055505b835f0151156112045783602001516013819055505b825f015115611252578260200151600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b815f0151156112675781602001516011819055505b805f01511561127c5780602001516014819055505b60115460105461128c91906148ba565b600f819055506014546013546112a291906148ba565b6012819055506019600f5411156112ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e590614937565b60405180910390fd5b60196012541115611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90614937565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036113da575f60105414801561139a57505f601354145b6113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090614d55565b60405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611480575f60115414801561144057505f601454145b61147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690614de3565b60405180910390fd5b5b505050505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61151961298d565b73ffffffffffffffffffffffffffffffffffffffff16611537611930565b73ffffffffffffffffffffffffffffffffffffffff161461158d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115849061486f565b60405180910390fd5b81601081905550806011819055506011546010546115ab91906148ba565b600f819055506019600f5411156115f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ee90614937565b60405180910390fd5b5050565b60125481565b600e60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61166161298d565b73ffffffffffffffffffffffffffffffffffffffff1661167f611930565b73ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc9061486f565b60405180910390fd5b6116de5f61389d565b565b5f6116e961298d565b73ffffffffffffffffffffffffffffffffffffffff16611707611930565b73ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117549061486f565b60405180910390fd5b5f600e5f6101000a81548160ff0219169083151502179055506001905090565b61178561298d565b73ffffffffffffffffffffffffffffffffffffffff166117a3611930565b73ffffffffffffffffffffffffffffffffffffffff16146117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f09061486f565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b61188461298d565b73ffffffffffffffffffffffffffffffffffffffff166118a2611930565b73ffffffffffffffffffffffffffffffffffffffff16146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef9061486f565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61196061298d565b73ffffffffffffffffffffffffffffffffffffffff1661197e611930565b73ffffffffffffffffffffffffffffffffffffffff16146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb9061486f565b60405180910390fd5b5f5b83839050811015611a69578160175f8686858181106119f8576119f7614e01565b5b9050602002016020810190611a0d91906145e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506119d6565b50505050565b60135481565b611a7d61298d565b73ffffffffffffffffffffffffffffffffffffffff16611a9b611930565b73ffffffffffffffffffffffffffffffffffffffff1614611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae89061486f565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b606060048054611b1d90614982565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4990614982565b8015611b945780601f10611b6b57610100808354040283529160200191611b94565b820191905f5260205f20905b815481529060010190602001808311611b7757829003601f168201915b5050505050905090565b611ba661298d565b73ffffffffffffffffffffffffffffffffffffffff16611bc4611930565b73ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c119061486f565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca090614e9e565b60405180910390fd5b611cb38282613960565b5050565b60115481565b60165481565b60145481565b5f8060015f611cd661298d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8790614f2c565b60405180910390fd5b611da4611d9b61298d565b85858403612994565b600191505092915050565b5f611dc2611dbb61298d565b8484612b57565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611e7e959493929190614f59565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611f0893929190614faa565b6040516020818303038152906040528051906020012090505f8282604051602001611f34929190615053565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611f6f9493929190615089565b6020604051602081039080840390855afa158015611f8f573d5f803e3d5ffd5b505050602060405103519050611fa3611930565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790615116565b60405180910390fd5b6001600e60016101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff02191690831515021790555050505050505050565b61205761298d565b73ffffffffffffffffffffffffffffffffffffffff16612075611930565b73ffffffffffffffffffffffffffffffffffffffff16146120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c29061486f565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b6121ae61298d565b73ffffffffffffffffffffffffffffffffffffffff166121cc611930565b73ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122199061486f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612290576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122879061517e565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60019054906101000a900460ff1681565b6122ee61298d565b73ffffffffffffffffffffffffffffffffffffffff1661230c611930565b73ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123599061486f565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123fc9190614290565b60405180910390a25050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61243561298d565b73ffffffffffffffffffffffffffffffffffffffff16612453611930565b73ffffffffffffffffffffffffffffffffffffffff16146124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a09061486f565b60405180910390fd5b6124b161103c565b600a6124bd9190614ae1565b6103e860056124ca610e16565b6124d49190614b2b565b6124de9190614b99565b6124e89190614b99565b81101561252a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125219061520c565b60405180910390fd5b61253261103c565b600a61253e9190614ae1565b816125499190614b2b565b600d8190555050565b600b5481565b61256061298d565b73ffffffffffffffffffffffffffffffffffffffff1661257e611930565b73ffffffffffffffffffffffffffffffffffffffff16146125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb9061486f565b60405180910390fd5b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f61269b61298d565b73ffffffffffffffffffffffffffffffffffffffff166126b9611930565b73ffffffffffffffffffffffffffffffffffffffff161461270f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127069061486f565b60405180910390fd5b620186a0600161271d610e16565b6127279190614b2b565b6127319190614b99565b821015612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a9061529a565b60405180910390fd5b6103e86005612780610e16565b61278a9190614b2b565b6127949190614b99565b8211156127d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cd90615328565b60405180910390fd5b81600c8190555060019050919050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b600c5481565b61289961298d565b73ffffffffffffffffffffffffffffffffffffffff166128b7611930565b73ffffffffffffffffffffffffffffffffffffffff161461290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129049061486f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361297b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612972906153b6565b60405180910390fd5b6129848161389d565b50565b600d5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990615444565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a67906154d2565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b4a919061432c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc90615560565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a906155ee565b60405180910390fd5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb490615656565b60405180910390fd5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3e906156be565b60405180910390fd5b5f8103612d5e57612d5983835f6139fe565b613898565b600e5f9054906101000a900460ff161561324257612d7a611930565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612de85750612db8611930565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e2057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e735750600860149054906101000a900460ff16155b1561324157600e60019054906101000a900460ff16612f675760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f27575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5d90615726565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613004575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156130ab57600b5481111561304e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613045906157b4565b60405180910390fd5b600d5461305a83611614565b8261306591906148ba565b11156130a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309d9061581c565b60405180910390fd5b613240565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613148575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561319757600b54811115613192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613189906158aa565b60405180910390fd5b61323f565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661323e57600d546131f183611614565b826131fc91906148ba565b111561323d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132349061581c565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff1660085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015613334575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b81526004016132f49190614403565b602060405180830381865afa15801561330f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333391906158dc565b5b15613449575f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc858560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d54600b54600c546040518763ffffffff1660e01b81526004016133c596959493929190615907565b6020604051808303815f875af11580156133e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061340591906158dc565b905080613447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343e906159b0565b60405180910390fd5b505b5f61345330611614565b90505f600c5482101590508080156134775750600e60029054906101000a900460ff165b80156134905750600860149054906101000a900460ff16155b80156134e25750601a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015613535575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613588575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156135cb576001600860146101000a81548160ff0219169083151502179055506135b0613c73565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061367a575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613683575f90505b5f811561388857601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156136e157505f601254115b156137795761370e606461370060125488613e4d90919063ffffffff16565b613e6290919063ffffffff16565b9050601254601454826137219190614b2b565b61372b9190614b99565b60165f82825461373b91906148ba565b92505081905550601254601354826137539190614b2b565b61375d9190614b99565b60155f82825461376d91906148ba565b92505081905550613865565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156137d057505f600f54115b15613864576137fd60646137ef600f5488613e4d90919063ffffffff16565b613e6290919063ffffffff16565b9050600f54601154826138109190614b2b565b61381a9190614b99565b60165f82825461382a91906148ba565b92505081905550600f54601054826138429190614b2b565b61384c9190614b99565b60155f82825461385c91906148ba565b925050819055505b5b5f811115613879576138788730836139fe565b5b808561388591906159ce565b94505b6138938787876139fe565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6390615560565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad1906155ee565b60405180910390fd5b613ae5838383613e77565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b5f90615a71565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613bf691906148ba565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c5a919061432c565b60405180910390a3613c6d848484613e7c565b50505050565b5f613c7d30611614565b90505f601654601554613c9091906148ba565b90505f80831480613ca057505f82145b15613cad57505050613e4b565b6014600c54613cbc9190614b2b565b831115613cd5576014600c54613cd29190614b2b565b92505b5f479050613ce284613e81565b5f613cf682476140b790919063ffffffff16565b90505f613d2085613d1260165485613e4d90919063ffffffff16565b613e6290919063ffffffff16565b90505f6015819055505f601681905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613d7590615abc565b5f6040518083038185875af1925050503d805f8114613daf576040519150601f19603f3d011682016040523d82523d5f602084013e613db4565b606091505b50508094505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613dff90615abc565b5f6040518083038185875af1925050503d805f8114613e39576040519150601f19603f3d011682016040523d82523d5f602084013e613e3e565b606091505b5050809450505050505050505b565b5f8183613e5a9190614b2b565b905092915050565b5f8183613e6f9190614b99565b905092915050565b505050565b505050565b5f600267ffffffffffffffff811115613e9d57613e9c614420565b5b604051908082528060200260200182016040528015613ecb5781602001602082028036833780820191505090505b50905030815f81518110613ee257613ee1614e01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613faa9190615ae4565b81600181518110613fbe57613fbd614e01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140243060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612994565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401614086959493929190615bff565b5f604051808303815f87803b15801561409d575f80fd5b505af11580156140af573d5f803e3d5ffd5b505050505050565b5f81836140c491906159ce565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6140ef816140dd565b81146140f9575f80fd5b50565b5f8135905061410a816140e6565b92915050565b5f8060408385031215614126576141256140d5565b5b5f614133858286016140fc565b9250506020614144858286016140fc565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6141908261414e565b61419a8185614158565b93506141aa818560208601614168565b6141b381614176565b840191505092915050565b5f6020820190508181035f8301526141d68184614186565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f614207826141de565b9050919050565b614217816141fd565b8114614221575f80fd5b50565b5f813590506142328161420e565b92915050565b5f806040838503121561424e5761424d6140d5565b5b5f61425b85828601614224565b925050602061426c858286016140fc565b9150509250929050565b5f8115159050919050565b61428a81614276565b82525050565b5f6020820190506142a35f830184614281565b92915050565b5f819050919050565b5f6142cc6142c76142c2846141de565b6142a9565b6141de565b9050919050565b5f6142dd826142b2565b9050919050565b5f6142ee826142d3565b9050919050565b6142fe816142e4565b82525050565b5f6020820190506143175f8301846142f5565b92915050565b614326816140dd565b82525050565b5f60208201905061433f5f83018461431d565b92915050565b5f6020828403121561435a576143596140d5565b5b5f614367848285016140fc565b91505092915050565b5f805f60608486031215614387576143866140d5565b5b5f61439486828701614224565b93505060206143a586828701614224565b92505060406143b6868287016140fc565b9150509250925092565b5f60ff82169050919050565b6143d5816143c0565b82525050565b5f6020820190506143ee5f8301846143cc565b92915050565b6143fd816141fd565b82525050565b5f6020820190506144165f8301846143f4565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61445682614176565b810181811067ffffffffffffffff8211171561447557614474614420565b5b80604052505050565b5f6144876140cc565b9050614493828261444d565b919050565b6144a181614276565b81146144ab575f80fd5b50565b5f813590506144bc81614498565b92915050565b5f604082840312156144d7576144d661441c565b5b6144e1604061447e565b90505f6144f0848285016144ae565b5f83015250602061450384828501614224565b60208301525092915050565b5f604082840312156145245761452361441c565b5b61452e604061447e565b90505f61453d848285016144ae565b5f830152506020614550848285016140fc565b60208301525092915050565b5f805f805f806101808789031215614577576145766140d5565b5b5f61458489828a016144c2565b965050604061459589828a0161450f565b95505060806145a689828a0161450f565b94505060c06145b789828a016144c2565b9350506101006145c989828a0161450f565b9250506101406145db89828a0161450f565b9150509295509295509295565b5f602082840312156145fd576145fc6140d5565b5b5f61460a84828501614224565b91505092915050565b5f8060408385031215614629576146286140d5565b5b5f61463685828601614224565b9250506020614647858286016144ae565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261467257614671614651565b5b8235905067ffffffffffffffff81111561468f5761468e614655565b5b6020830191508360208202830111156146ab576146aa614659565b5b9250929050565b5f805f604084860312156146c9576146c86140d5565b5b5f84013567ffffffffffffffff8111156146e6576146e56140d9565b5b6146f28682870161465d565b93509350506020614705868287016144ae565b9150509250925092565b5f60208284031215614724576147236140d5565b5b5f614731848285016144ae565b91505092915050565b614743816143c0565b811461474d575f80fd5b50565b5f8135905061475e8161473a565b92915050565b5f819050919050565b61477681614764565b8114614780575f80fd5b50565b5f813590506147918161476d565b92915050565b5f805f606084860312156147ae576147ad6140d5565b5b5f6147bb86828701614750565b93505060206147cc86828701614783565b92505060406147dd86828701614783565b9150509250925092565b5f80604083850312156147fd576147fc6140d5565b5b5f61480a85828601614224565b925050602061481b85828601614224565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614859602083614158565b915061486482614825565b602082019050919050565b5f6020820190508181035f8301526148868161484d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6148c4826140dd565b91506148cf836140dd565b92508282019050808211156148e7576148e661488d565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c6573730000005f82015250565b5f614921601d83614158565b915061492c826148ed565b602082019050919050565b5f6020820190508181035f83015261494e81614915565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061499957607f821691505b6020821081036149ac576149ab614955565b5b50919050565b5f8160011c9050919050565b5f808291508390505b6001851115614a07578086048111156149e3576149e261488d565b5b60018516156149f25780820291505b8081029050614a00856149b2565b94506149c7565b94509492505050565b5f82614a1f5760019050614ada565b81614a2c575f9050614ada565b8160018114614a425760028114614a4c57614a7b565b6001915050614ada565b60ff841115614a5e57614a5d61488d565b5b8360020a915084821115614a7557614a7461488d565b5b50614ada565b5060208310610133831016604e8410600b8410161715614ab05782820a905083811115614aab57614aaa61488d565b5b614ada565b614abd84848460016149be565b92509050818404811115614ad457614ad361488d565b5b81810290505b9392505050565b5f614aeb826140dd565b9150614af6836143c0565b9250614b237fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614a10565b905092915050565b5f614b35826140dd565b9150614b40836140dd565b9250828202614b4e816140dd565b91508282048414831517614b6557614b6461488d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614ba3826140dd565b9150614bae836140dd565b925082614bbe57614bbd614b6c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572205f8201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b5f614c23602983614158565b9150614c2e82614bc9565b604082019050919050565b5f6020820190508181035f830152614c5081614c17565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614cb1602883614158565b9150614cbc82614c57565b604082019050919050565b5f6020820190508181035f830152614cde81614ca5565b9050919050565b7f6275794d61726b6574696e674665652c2073656c6c4d61726b6574696e6746655f8201527f65206d757374206265207a65726f000000000000000000000000000000000000602082015250565b5f614d3f602e83614158565b9150614d4a82614ce5565b604082019050919050565b5f6020820190508181035f830152614d6c81614d33565b9050919050565b7f6275794465764665652c2073656c6c446576466565206d757374206265207a655f8201527f726f000000000000000000000000000000000000000000000000000000000000602082015250565b5f614dcd602283614158565b9150614dd882614d73565b604082019050919050565b5f6020820190508181035f830152614dfa81614dc1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614e88603983614158565b9150614e9382614e2e565b604082019050919050565b5f6020820190508181035f830152614eb581614e7c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614f16602583614158565b9150614f2182614ebc565b604082019050919050565b5f6020820190508181035f830152614f4381614f0a565b9050919050565b614f5381614764565b82525050565b5f60a082019050614f6c5f830188614f4a565b614f796020830187614f4a565b614f866040830186614f4a565b614f93606083018561431d565b614fa060808301846143f4565b9695505050505050565b5f606082019050614fbd5f830186614f4a565b614fca6020830185614f4a565b614fd7604083018461431d565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f61501d600283614fdf565b915061502882614fe9565b600282019050919050565b5f819050919050565b61504d61504882614764565b615033565b82525050565b5f61505d82615011565b9150615069828561503c565b602082019150615079828461503c565b6020820191508190509392505050565b5f60808201905061509c5f830187614f4a565b6150a960208301866143cc565b6150b66040830185614f4a565b6150c36060830184614f4a565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f615100601183614158565b915061510b826150cc565b602082019050919050565b5f6020820190508181035f83015261512d816150f4565b9050919050565b7f496e76616c696420616e746920647261696e65720000000000000000000000005f82015250565b5f615168601483614158565b915061517382615134565b602082019050919050565b5f6020820190508181035f8301526151958161515c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6151f6602483614158565b91506152018261519c565b604082019050919050565b5f6020820190508181035f830152615223816151ea565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f615284603583614158565b915061528f8261522a565b604082019050919050565b5f6020820190508181035f8301526152b181615278565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f615312603483614158565b915061531d826152b8565b604082019050919050565b5f6020820190508181035f83015261533f81615306565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6153a0602683614158565b91506153ab82615346565b604082019050919050565b5f6020820190508181035f8301526153cd81615394565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61542e602483614158565b9150615439826153d4565b604082019050919050565b5f6020820190508181035f83015261545b81615422565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6154bc602283614158565b91506154c782615462565b604082019050919050565b5f6020820190508181035f8301526154e9816154b0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61554a602583614158565b9150615555826154f0565b604082019050919050565b5f6020820190508181035f8301526155778161553e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6155d8602383614158565b91506155e38261557e565b604082019050919050565b5f6020820190508181035f830152615605816155cc565b9050919050565b7f5b66726f6d5d20626c61636b206c6973740000000000000000000000000000005f82015250565b5f615640601183614158565b915061564b8261560c565b602082019050919050565b5f6020820190508181035f83015261566d81615634565b9050919050565b7f5b746f5d20626c61636b206c69737400000000000000000000000000000000005f82015250565b5f6156a8600f83614158565b91506156b382615674565b602082019050919050565b5f6020820190508181035f8301526156d58161569c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f615710601683614158565b915061571b826156dc565b602082019050919050565b5f6020820190508181035f83015261573d81615704565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b5f61579e602f83614158565b91506157a982615744565b604082019050919050565b5f6020820190508181035f8301526157cb81615792565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f615806601383614158565b9150615811826157d2565b602082019050919050565b5f6020820190508181035f830152615833816157fa565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b5f615894603083614158565b915061589f8261583a565b604082019050919050565b5f6020820190508181035f8301526158c181615888565b9050919050565b5f815190506158d681614498565b92915050565b5f602082840312156158f1576158f06140d5565b5b5f6158fe848285016158c8565b91505092915050565b5f60c08201905061591a5f8301896143f4565b61592760208301886143f4565b61593460408301876143f4565b615941606083018661431d565b61594e608083018561431d565b61595b60a083018461431d565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f61599a601483614158565b91506159a582615966565b602082019050919050565b5f6020820190508181035f8301526159c78161598e565b9050919050565b5f6159d8826140dd565b91506159e3836140dd565b92508282039050818111156159fb576159fa61488d565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615a5b602683614158565b9150615a6682615a01565b604082019050919050565b5f6020820190508181035f830152615a8881615a4f565b9050919050565b5f81905092915050565b50565b5f615aa75f83615a8f565b9150615ab282615a99565b5f82019050919050565b5f615ac682615a9c565b9150819050919050565b5f81519050615ade8161420e565b92915050565b5f60208284031215615af957615af86140d5565b5b5f615b0684828501615ad0565b91505092915050565b5f819050919050565b5f615b32615b2d615b2884615b0f565b6142a9565b6140dd565b9050919050565b615b4281615b18565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615b7a816141fd565b82525050565b5f615b8b8383615b71565b60208301905092915050565b5f602082019050919050565b5f615bad82615b48565b615bb78185615b52565b9350615bc283615b62565b805f5b83811015615bf2578151615bd98882615b80565b9750615be483615b97565b925050600181019050615bc5565b5085935050505092915050565b5f60a082019050615c125f83018861431d565b615c1f6020830187615b39565b8181036040830152615c318186615ba3565b9050615c4060608301856143f4565b615c4d608083018461431d565b969550505050505056fea2646970667358221220645d0cf390fd5640d0e475fe28474c92312a5f2d6c9573426219f445b890d9e564736f6c63430008190033

Deployed Bytecode Sourcemap

15331:15902:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22993:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2625:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3539:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15405:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2946:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16071:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21726:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3716:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2845:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15488:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4216:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23319:1423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15453:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15740:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25859:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22674:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15964:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15820:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3062:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;773:103;;;;;;;;;;;;;:::i;:::-;;21030:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22309:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15553:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15894;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19450:112;;;;;;;;;;;;;:::i;:::-;;550:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20771:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15999:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22566:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2733:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24940:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15931:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16111:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16037:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4439:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3197:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19570:1062;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25446:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16324:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19260:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15780:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24750:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15590:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22021:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15631:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25662:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21221:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15860:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3380:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16258:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15667:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;884:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15707:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22993:318;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23131:13:::1;23112:16;:32;;;;23168:7;23155:10;:20;;;;23221:10;;23202:16;;:29;;;;:::i;:::-;23186:13;:45;;;;23267:2;23250:13;;:19;;23242:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22993:318:::0;;:::o;2625:100::-;2679:13;2712:5;2705:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2625:100;:::o;3539:169::-;3622:4;3639:39;3648:12;:10;:12::i;:::-;3662:7;3671:6;3639:8;:39::i;:::-;3696:4;3689:11;;3539:169;;;;:::o;15405:41::-;;;;;;;;;;;;;:::o;2946:108::-;3007:7;3034:12;;3027:19;;2946:108;:::o;16071:33::-;;;;:::o;21726:287::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21870:10:::1;:8;:10::i;:::-;21864:2;:16;;;;:::i;:::-;21855:4;21850:1;21834:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21833:26;;;;:::i;:::-;21832:49;;;;:::i;:::-;21822:6;:59;;21800:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;21994:10;:8;:10::i;:::-;21988:2;:16;;;;:::i;:::-;21978:6;:27;;;;:::i;:::-;21961:14;:44;;;;21726:287:::0;:::o;3716:492::-;3856:4;3873:36;3883:6;3891:9;3902:6;3873:9;:36::i;:::-;3922:24;3949:11;:19;3961:6;3949:19;;;;;;;;;;;;;;;:33;3969:12;:10;:12::i;:::-;3949:33;;;;;;;;;;;;;;;;3922:60;;4021:6;4001:16;:26;;3993:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4108:57;4117:6;4125:12;:10;:12::i;:::-;4158:6;4139:16;:25;4108:8;:57::i;:::-;4196:4;4189:11;;;3716:492;;;;;:::o;2845:93::-;2903:5;2928:2;2921:9;;2845:93;:::o;15488:26::-;;;;;;;;;;;;;:::o;4216:215::-;4304:4;4321:80;4330:12;:10;:12::i;:::-;4344:7;4390:10;4353:11;:25;4365:12;:10;:12::i;:::-;4353:25;;;;;;;;;;;;;;;:34;4379:7;4353:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4321:8;:80::i;:::-;4419:4;4412:11;;4216:215;;;;:::o;23319:1423::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23677:19:::1;:29;;;23673:78;;;23726:19;:25;;;23708:15;;:43;;;;;;;;;;;;;;;;;;23673:78;23766:19;:29;;;23762:78;;;23815:19;:25;;;23797:15;:43;;;;23762:78;23855:20;:30;;;23851:81;;;23906:20;:26;;;23887:16;:45;;;;23851:81;23947:21;:31;;;23943:84;;;24000:21;:27;;;23980:17;;:47;;;;;;;;;;;;;;;;;;23943:84;24042:13;:23;;;24038:60;;;24079:13;:19;;;24067:9;:31;;;;24038:60;24113:14;:24;;;24109:63;;;24152:14;:20;;;24139:10;:33;;;;24109:63;24218:9;;24200:15;;:27;;;;:::i;:::-;24185:12;:42;;;;24273:10;;24254:16;;:29;;;;:::i;:::-;24238:13;:45;;;;24320:2;24304:12;;:18;;24296:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24392:2;24375:13;;:19;;24367:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24472:1;24445:29;;:15;;;;;;;;;;;:29;;::::0;24441:152:::1;;24516:1;24497:15;;:20;:45;;;;;24541:1;24521:16;;:21;24497:45;24489:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;24441:152;24637:1;24608:31;;:17;;;;;;;;;;;:31;;::::0;24604:130:::1;;24675:1;24662:9;;:14;:33;;;;;24694:1;24680:10;;:15;24662:33;24654:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;24604:130;23319:1423:::0;;;;;;:::o;15453:28::-;;;;;;;;;;;;;:::o;15740:33::-;;;;;;;;;;;;;:::o;25859:126::-;25925:4;25949:19;:28;25969:7;25949:28;;;;;;;;;;;;;;;;;;;;;;;;;25942:35;;25859:126;;;:::o;22674:311::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22810:13:::1;22792:15;:31;;;;22846:7;22834:9;:19;;;;22897:9;;22879:15;;:27;;;;:::i;:::-;22864:12;:42;;;;22941:2;22925:12;;:18;;22917:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22674:311:::0;;:::o;15964:28::-;;;;:::o;15820:31::-;;;;;;;;;;;;;:::o;3062:127::-;3136:7;3163:9;:18;3173:7;3163:18;;;;;;;;;;;;;;;;3156:25;;3062:127;;;:::o;773:103::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;838:30:::1;865:1;838:18;:30::i;:::-;773:103::o:0;21030:121::-;21082:4;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21116:5:::1;21099:14;;:22;;;;;;;;;;;;;;;;;;21139:4;21132:11;;21030:121:::0;:::o;22309:161::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22458:4:::1;22422:25;:33;22448:6;22422:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;22309:161:::0;;:::o;15553:30::-;;;;;;;;;;;;;:::o;15894:::-;;;;:::o;19450:112::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19521:4:::1;19505:13;;:20;;;;;;;;;;;;;;;;;;19550:4;19536:11;;:18;;;;;;;;;;;;;;;;;;19450:112::o:0;550:87::-;596:7;623:6;;;;;;;;;;;616:13;;550:87;:::o;20771:207::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20870:9:::1;20865:106;20889:7;;:14;;20885:1;:18;20865:106;;;20952:7;20925:12;:24;20938:7;;20946:1;20938:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20925:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20905:3;;;;;;;20865:106;;;;20771:207:::0;;;:::o;15999:31::-;;;;:::o;22566:100::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22651:7:::1;22637:11;;:21;;;;;;;;;;;;;;;;;;22566:100:::0;:::o;2733:104::-;2789:13;2822:7;2815:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2733:104;:::o;24940:304::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25084:13:::1;;;;;;;;;;;25076:21;;:4;:21;;::::0;25054:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25195:41;25224:4;25230:5;25195:28;:41::i;:::-;24940:304:::0;;:::o;15931:24::-;;;;:::o;16111:27::-;;;;:::o;16037:25::-;;;;:::o;4439:413::-;4532:4;4549:24;4576:11;:25;4588:12;:10;:12::i;:::-;4576:25;;;;;;;;;;;;;;;:34;4602:7;4576:34;;;;;;;;;;;;;;;;4549:61;;4649:15;4629:16;:35;;4621:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4742:67;4751:12;:10;:12::i;:::-;4765:7;4793:15;4774:16;:34;4742:8;:67::i;:::-;4840:4;4833:11;;;4439:413;;;;:::o;3197:175::-;3283:4;3300:42;3310:12;:10;:12::i;:::-;3324:9;3335:6;3300:9;:42::i;:::-;3360:4;3353:11;;3197:175;;;;:::o;19570:1062::-;19654:18;19728:95;19852:22;;;;;;;;;;;;;;;;;19842:33;;;;;;19904:10;;;;;;;;;;;;;;;;;19894:21;;;;;;19934:13;19974:4;19699:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19675:330;;;;;;19654:351;;20018:18;20092:49;20170:23;;;;;;;;;;;;;;;;;20160:34;;;;;;20221:1;20063:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20039:210;;;;;;20018:231;;20262:14;20367:10;20396;20303:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20279:169;;;;;;20262:186;;20461:14;20478:26;20488:6;20496:1;20499;20502;20478:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20461:43;;20533:7;:5;:7::i;:::-;20523:17;;:6;:17;;;20515:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20591:4;20575:13;;:20;;;;;;;;;;;;;;;;;;20620:4;20606:11;;:18;;;;;;;;;;;;;;;;;;19643:989;;;;19570:1062;;;:::o;25446:208::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25583:15:::1;;;;;;;;;;;25540:59;;25563:18;25540:59;;;;;;;;;;;;25628:18;25610:15;;:36;;;;;;;;;;;;;;;;;;25446:208:::0;:::o;16324:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19260:182::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19368:3:::1;19344:28;;:12;:28;;::::0;19336:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19422:12;19408:11;;:26;;;;;;;;;;;;;;;;;;19260:182:::0;:::o;15780:33::-;;;;;;;;;;;;;:::o;24750:182::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24866:8:::1;24835:19;:28;24855:7;24835:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24906:7;24890:34;;;24915:8;24890:34;;;;;;:::i;:::-;;;;;;;;24750:182:::0;;:::o;15590:32::-;;;;;;;;;;;;;:::o;22021:280::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22168:10:::1;:8;:10::i;:::-;22162:2;:16;;;;:::i;:::-;22153:4;22148:1;22132:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22131:26;;;;:::i;:::-;22130:49;;;;:::i;:::-;22120:6;:59;;22098:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;22282:10;:8;:10::i;:::-;22276:2;:16;;;;:::i;:::-;22266:6;:27;;;;:::i;:::-;22254:9;:39;;;;22021:280:::0;:::o;15631:29::-;;;;:::o;25662:189::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25785:17:::1;;;;;;;;;;;25749:54;;25774:9;25749:54;;;;;;;;;;;;25834:9;25814:17;;:29;;;;;;;;;;;;;;;;;;25662:189:::0;:::o;21221:497::-;21329:4;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21408:6:::1;21403:1;21387:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21386:28;;;;:::i;:::-;21373:9;:41;;21351:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21563:4;21558:1;21542:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21541:26;;;;:::i;:::-;21528:9;:39;;21506:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21679:9;21658:18;:30;;;;21706:4;21699:11;;21221:497:::0;;;:::o;15860:27::-;;;;:::o;3380:151::-;3469:7;3496:11;:18;3508:5;3496:18;;;;;;;;;;;;;;;:27;3515:7;3496:27;;;;;;;;;;;;;;;;3489:34;;3380:151;;;;:::o;16258:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15667:33::-;;;;:::o;884:201::-;696:12;:10;:12::i;:::-;685:23;;:7;:5;:7::i;:::-;:23;;;677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;993:1:::1;973:22;;:8;:22;;::::0;965:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1049:28;1068:8;1049:18;:28::i;:::-;884:201:::0;:::o;15707:24::-;;;;:::o;96:98::-;149:7;176:10;169:17;;96:98;:::o;6607:380::-;6760:1;6743:19;;:5;:19;;;6735:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6841:1;6822:21;;:7;:21;;;6814:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6925:6;6895:11;:18;6907:5;6895:18;;;;;;;;;;;;;;;:27;6914:7;6895:27;;;;;;;;;;;;;;;:36;;;;6963:7;6947:32;;6956:5;6947:32;;;6972:6;6947:32;;;;;;:::i;:::-;;;;;;;;6607:380;;;:::o;25993:3603::-;26141:1;26125:18;;:4;:18;;;26117:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26218:1;26204:16;;:2;:16;;;26196:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26280:12;:18;26293:4;26280:18;;;;;;;;;;;;;;;;;;;;;;;;;26279:19;26271:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;26340:12;:16;26353:2;26340:16;;;;;;;;;;;;;;;;;;;;;;;;;26339:17;26331:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;26403:1;26393:6;:11;26389:93;;26421:28;26437:4;26443:2;26447:1;26421:15;:28::i;:::-;26464:7;;26389:93;26498:14;;;;;;;;;;;26494:1150;;;26541:7;:5;:7::i;:::-;26533:15;;:4;:15;;;;:49;;;;;26575:7;:5;:7::i;:::-;26569:13;;:2;:13;;;;26533:49;:86;;;;;26617:1;26603:16;;:2;:16;;;;26533:86;:128;;;;;26654:6;26640:21;;:2;:21;;;;26533:128;:158;;;;;26683:8;;;;;;;;;;;26682:9;26533:158;26529:1104;;;26717:13;;;;;;;;;;;26712:150;;26763:19;:25;26783:4;26763:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26792:19;:23;26812:2;26792:23;;;;;;;;;;;;;;;;;;;;;;;;;26763:52;26755:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;26712:150;26914:25;:31;26940:4;26914:31;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;26950:25;:29;26976:2;26950:29;;;;;;;;;;;;;;;;;;;;;;;;;26949:30;26914:65;26910:708;;;27022:14;;27012:6;:24;;27004:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;27145:9;;27128:13;27138:2;27128:9;:13::i;:::-;27119:6;:22;;;;:::i;:::-;:35;;27111:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26910:708;;;27254:25;:29;27280:2;27254:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;27288:25;:31;27314:4;27288:31;;;;;;;;;;;;;;;;;;;;;;;;;27287:32;27254:65;27250:368;;;27362:14;;27352:6;:24;;27344:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27250:368;;;27477:25;:29;27503:2;27477:29;;;;;;;;;;;;;;;;;;;;;;;;;27472:146;;27565:9;;27548:13;27558:2;27548:9;:13::i;:::-;27539:6;:22;;;;:::i;:::-;:35;;27531:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27472:146;27250:368;26910:708;26529:1104;26494:1150;27683:1;27660:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;27702:11;;;;;;;;;;;27689:35;;;27733:4;27689:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27660:79;27656:290;;;27756:10;27782:11;;;;;;;;;;;27769:31;;;27801:4;27807:2;27819:13;;;;;;;;;;;27835:9;;27846:14;;27862:18;;27769:112;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27756:125;;27904:5;27896:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27741:205;27656:290;27958:28;27989:24;28007:4;27989:9;:24::i;:::-;27958:55;;28024:12;28063:18;;28039:20;:42;;28024:57;;28096:7;:35;;;;;28120:11;;;;;;;;;;;28096:35;:61;;;;;28149:8;;;;;;;;;;;28148:9;28096:61;:107;;;;;28174:25;:29;28200:2;28174:29;;;;;;;;;;;;;;;;;;;;;;;;;28096:107;:150;;;;;28221:19;:25;28241:4;28221:25;;;;;;;;;;;;;;;;;;;;;;;;;28220:26;28096:150;:191;;;;;28264:19;:23;28284:2;28264:23;;;;;;;;;;;;;;;;;;;;;;;;;28263:24;28096:191;28092:297;;;28317:4;28306:8;;:15;;;;;;;;;;;;;;;;;;28336:10;:8;:10::i;:::-;28372:5;28361:8;;:16;;;;;;;;;;;;;;;;;;28092:297;28401:12;28417:8;;;;;;;;;;;28416:9;28401:24;;28527:19;:25;28547:4;28527:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28556:19;:23;28576:2;28556:23;;;;;;;;;;;;;;;;;;;;;;;;;28527:52;28523:100;;;28606:5;28596:15;;28523:100;28635:12;28740:7;28736:807;;;28792:25;:29;28818:2;28792:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28841:1;28825:13;;:17;28792:50;28788:606;;;28870:34;28900:3;28870:25;28881:13;;28870:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28863:41;;28961:13;;28947:10;;28940:4;:17;;;;:::i;:::-;28939:35;;;;:::i;:::-;28923:12;;:51;;;;;;;:::i;:::-;;;;;;;;29043:13;;29023:16;;29016:4;:23;;;;:::i;:::-;29015:41;;;;:::i;:::-;28993:18;;:63;;;;;;;:::i;:::-;;;;;;;;28788:606;;;29118:25;:31;29144:4;29118:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29168:1;29153:12;;:16;29118:51;29114:280;;;29197:33;29226:3;29197:24;29208:12;;29197:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29190:40;;29286:12;;29273:9;;29266:4;:16;;;;:::i;:::-;29265:33;;;;:::i;:::-;29249:12;;:49;;;;;;;:::i;:::-;;;;;;;;29366:12;;29347:15;;29340:4;:22;;;;:::i;:::-;29339:39;;;;:::i;:::-;29317:18;;:61;;;;;;;:::i;:::-;;;;;;;;29114:280;28788:606;29421:1;29414:4;:8;29410:91;;;29443:42;29459:4;29473;29480;29443:15;:42::i;:::-;29410:91;29527:4;29517:14;;;;;:::i;:::-;;;28736:807;29555:33;29571:4;29577:2;29581:6;29555:15;:33::i;:::-;26106:3490;;;;25993:3603;;;;:::o;1093:191::-;1167:16;1186:6;;;;;;;;;;;1167:25;;1212:8;1203:6;;:17;;;;;;;;;;;;;;;;;;1267:8;1236:40;;1257:8;1236:40;;;;;;;;;;;;1156:128;1093:191;:::o;25252:186::-;25369:5;25335:25;:31;25361:4;25335:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25424:5;25390:40;;25418:4;25390:40;;;;;;;;;;;;25252:186;;:::o;4860:733::-;5018:1;5000:20;;:6;:20;;;4992:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5102:1;5081:23;;:9;:23;;;5073:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5157:47;5178:6;5186:9;5197:6;5157:20;:47::i;:::-;5217:21;5241:9;:17;5251:6;5241:17;;;;;;;;;;;;;;;;5217:41;;5294:6;5277:13;:23;;5269:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5415:6;5399:13;:22;5379:9;:17;5389:6;5379:17;;;;;;;;;;;;;;;:42;;;;5467:6;5443:9;:20;5453:9;5443:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5508:9;5491:35;;5500:6;5491:35;;;5519:6;5491:35;;;;;;:::i;:::-;;;;;;;;5539:46;5559:6;5567:9;5578:6;5539:19;:46::i;:::-;4981:612;4860:733;;;:::o;30316:914::-;30355:23;30381:24;30399:4;30381:9;:24::i;:::-;30355:50;;30416:25;30465:12;;30444:18;;:33;;;;:::i;:::-;30416:61;;30488:12;30536:1;30517:15;:20;:46;;;;30562:1;30541:17;:22;30517:46;30513:85;;;30580:7;;;;;30513:85;30653:2;30632:18;;:23;;;;:::i;:::-;30614:15;:41;30610:115;;;30711:2;30690:18;;:23;;;;:::i;:::-;30672:41;;30610:115;30737:25;30765:21;30737:49;;30797:33;30814:15;30797:16;:33::i;:::-;30843:18;30864:44;30890:17;30864:21;:25;;:44;;;;:::i;:::-;30843:65;;30919:17;30939:51;30972:17;30939:28;30954:12;;30939:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30919:71;;31024:1;31003:18;:22;;;;31051:1;31036:12;:16;;;;31087:17;;;;;;;;;;;31079:31;;31118:9;31079:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31065:67;;;;;31165:15;;;;;;;;;;;31157:29;;31195:21;31157:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31143:79;;;;;30344:886;;;;;;30316:914;:::o;8611:98::-;8669:7;8700:1;8696;:5;;;;:::i;:::-;8689:12;;8611:98;;;;:::o;8717:::-;8775:7;8806:1;8802;:5;;;;:::i;:::-;8795:12;;8717:98;;;;:::o;6995:125::-;;;;:::o;7128:124::-;;;;:::o;29719:589::-;29845:21;29883:1;29869:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29845:40;;29914:4;29896;29901:1;29896:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29940:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29930:4;29935:1;29930:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29975:62;29992:4;30007:15;;;;;;;;;;;30025:11;29975:8;:62::i;:::-;30076:15;;;;;;;;;;;:66;;;30157:11;30183:1;30227:4;30254;30274:15;30076:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29774:534;29719:589;:::o;8505:98::-;8563:7;8594:1;8590;:5;;;;:::i;:::-;8583:12;;8505:98;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:139::-;1539:6;1534:3;1529;1523:23;1580:1;1571:6;1566:3;1562:16;1555:27;1450:139;;;:::o;1595:102::-;1636:6;1687:2;1683:7;1678:2;1671:5;1667:14;1663:28;1653:38;;1595:102;;;:::o;1703:377::-;1791:3;1819:39;1852:5;1819:39;:::i;:::-;1874:71;1938:6;1933:3;1874:71;:::i;:::-;1867:78;;1954:65;2012:6;2007:3;2000:4;1993:5;1989:16;1954:65;:::i;:::-;2044:29;2066:6;2044:29;:::i;:::-;2039:3;2035:39;2028:46;;1795:285;1703:377;;;;:::o;2086:313::-;2199:4;2237:2;2226:9;2222:18;2214:26;;2286:9;2280:4;2276:20;2272:1;2261:9;2257:17;2250:47;2314:78;2387:4;2378:6;2314:78;:::i;:::-;2306:86;;2086:313;;;;:::o;2405:126::-;2442:7;2482:42;2475:5;2471:54;2460:65;;2405:126;;;:::o;2537:96::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2537:96;;;:::o;2639:122::-;2712:24;2730:5;2712:24;:::i;:::-;2705:5;2702:35;2692:63;;2751:1;2748;2741:12;2692:63;2639:122;:::o;2767:139::-;2813:5;2851:6;2838:20;2829:29;;2867:33;2894:5;2867:33;:::i;:::-;2767:139;;;;:::o;2912:474::-;2980:6;2988;3037:2;3025:9;3016:7;3012:23;3008:32;3005:119;;;3043:79;;:::i;:::-;3005:119;3163:1;3188:53;3233:7;3224:6;3213:9;3209:22;3188:53;:::i;:::-;3178:63;;3134:117;3290:2;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3261:118;2912:474;;;;;:::o;3392:90::-;3426:7;3469:5;3462:13;3455:21;3444:32;;3392:90;;;:::o;3488:109::-;3569:21;3584:5;3569:21;:::i;:::-;3564:3;3557:34;3488:109;;:::o;3603:210::-;3690:4;3728:2;3717:9;3713:18;3705:26;;3741:65;3803:1;3792:9;3788:17;3779:6;3741:65;:::i;:::-;3603:210;;;;:::o;3819:60::-;3847:3;3868:5;3861:12;;3819:60;;;:::o;3885:142::-;3935:9;3968:53;3986:34;3995:24;4013:5;3995:24;:::i;:::-;3986:34;:::i;:::-;3968:53;:::i;:::-;3955:66;;3885:142;;;:::o;4033:126::-;4083:9;4116:37;4147:5;4116:37;:::i;:::-;4103:50;;4033:126;;;:::o;4165:153::-;4242:9;4275:37;4306:5;4275:37;:::i;:::-;4262:50;;4165:153;;;:::o;4324:185::-;4438:64;4496:5;4438:64;:::i;:::-;4433:3;4426:77;4324:185;;:::o;4515:276::-;4635:4;4673:2;4662:9;4658:18;4650:26;;4686:98;4781:1;4770:9;4766:17;4757:6;4686:98;:::i;:::-;4515:276;;;;:::o;4797:118::-;4884:24;4902:5;4884:24;:::i;:::-;4879:3;4872:37;4797:118;;:::o;4921:222::-;5014:4;5052:2;5041:9;5037:18;5029:26;;5065:71;5133:1;5122:9;5118:17;5109:6;5065:71;:::i;:::-;4921:222;;;;:::o;5149:329::-;5208:6;5257:2;5245:9;5236:7;5232:23;5228:32;5225:119;;;5263:79;;:::i;:::-;5225:119;5383:1;5408:53;5453:7;5444:6;5433:9;5429:22;5408:53;:::i;:::-;5398:63;;5354:117;5149:329;;;;:::o;5484:619::-;5561:6;5569;5577;5626:2;5614:9;5605:7;5601:23;5597:32;5594:119;;;5632:79;;:::i;:::-;5594:119;5752:1;5777:53;5822:7;5813:6;5802:9;5798:22;5777:53;:::i;:::-;5767:63;;5723:117;5879:2;5905:53;5950:7;5941:6;5930:9;5926:22;5905:53;:::i;:::-;5895:63;;5850:118;6007:2;6033:53;6078:7;6069:6;6058:9;6054:22;6033:53;:::i;:::-;6023:63;;5978:118;5484:619;;;;;:::o;6109:86::-;6144:7;6184:4;6177:5;6173:16;6162:27;;6109:86;;;:::o;6201:112::-;6284:22;6300:5;6284:22;:::i;:::-;6279:3;6272:35;6201:112;;:::o;6319:214::-;6408:4;6446:2;6435:9;6431:18;6423:26;;6459:67;6523:1;6512:9;6508:17;6499:6;6459:67;:::i;:::-;6319:214;;;;:::o;6539:118::-;6626:24;6644:5;6626:24;:::i;:::-;6621:3;6614:37;6539:118;;:::o;6663:222::-;6756:4;6794:2;6783:9;6779:18;6771:26;;6807:71;6875:1;6864:9;6860:17;6851:6;6807:71;:::i;:::-;6663:222;;;;:::o;6891:117::-;7000:1;6997;6990:12;7014:180;7062:77;7059:1;7052:88;7159:4;7156:1;7149:15;7183:4;7180:1;7173:15;7200:281;7283:27;7305:4;7283:27;:::i;:::-;7275:6;7271:40;7413:6;7401:10;7398:22;7377:18;7365:10;7362:34;7359:62;7356:88;;;7424:18;;:::i;:::-;7356:88;7464:10;7460:2;7453:22;7243:238;7200:281;;:::o;7487:129::-;7521:6;7548:20;;:::i;:::-;7538:30;;7577:33;7605:4;7597:6;7577:33;:::i;:::-;7487:129;;;:::o;7745:116::-;7815:21;7830:5;7815:21;:::i;:::-;7808:5;7805:32;7795:60;;7851:1;7848;7841:12;7795:60;7745:116;:::o;7867:133::-;7910:5;7948:6;7935:20;7926:29;;7964:30;7988:5;7964:30;:::i;:::-;7867:133;;;;:::o;8037:586::-;8120:5;8164:4;8152:9;8147:3;8143:19;8139:30;8136:117;;;8172:79;;:::i;:::-;8136:117;8271:21;8287:4;8271:21;:::i;:::-;8262:30;;8356:1;8396:46;8438:3;8429:6;8418:9;8414:22;8396:46;:::i;:::-;8389:4;8382:5;8378:16;8371:72;8302:152;8514:2;8555:49;8600:3;8591:6;8580:9;8576:22;8555:49;:::i;:::-;8548:4;8541:5;8537:16;8530:75;8464:152;8037:586;;;;:::o;8653:579::-;8729:5;8773:4;8761:9;8756:3;8752:19;8748:30;8745:117;;;8781:79;;:::i;:::-;8745:117;8880:21;8896:4;8880:21;:::i;:::-;8871:30;;8965:1;9005:46;9047:3;9038:6;9027:9;9023:22;9005:46;:::i;:::-;8998:4;8991:5;8987:16;8980:72;8911:152;9123:2;9164:49;9209:3;9200:6;9189:9;9185:22;9164:49;:::i;:::-;9157:4;9150:5;9146:16;9139:75;9073:152;8653:579;;;;:::o;9238:1411::-;9518:6;9526;9534;9542;9550;9558;9607:3;9595:9;9586:7;9582:23;9578:33;9575:120;;;9614:79;;:::i;:::-;9575:120;9734:1;9759:87;9838:7;9829:6;9818:9;9814:22;9759:87;:::i;:::-;9749:97;;9705:151;9895:2;9921:80;9993:7;9984:6;9973:9;9969:22;9921:80;:::i;:::-;9911:90;;9866:145;10050:3;10077:80;10149:7;10140:6;10129:9;10125:22;10077:80;:::i;:::-;10067:90;;10021:146;10206:3;10233:87;10312:7;10303:6;10292:9;10288:22;10233:87;:::i;:::-;10223:97;;10177:153;10369:3;10396:80;10468:7;10459:6;10448:9;10444:22;10396:80;:::i;:::-;10386:90;;10340:146;10525:3;10552:80;10624:7;10615:6;10604:9;10600:22;10552:80;:::i;:::-;10542:90;;10496:146;9238:1411;;;;;;;;:::o;10655:329::-;10714:6;10763:2;10751:9;10742:7;10738:23;10734:32;10731:119;;;10769:79;;:::i;:::-;10731:119;10889:1;10914:53;10959:7;10950:6;10939:9;10935:22;10914:53;:::i;:::-;10904:63;;10860:117;10655:329;;;;:::o;10990:468::-;11055:6;11063;11112:2;11100:9;11091:7;11087:23;11083:32;11080:119;;;11118:79;;:::i;:::-;11080:119;11238:1;11263:53;11308:7;11299:6;11288:9;11284:22;11263:53;:::i;:::-;11253:63;;11209:117;11365:2;11391:50;11433:7;11424:6;11413:9;11409:22;11391:50;:::i;:::-;11381:60;;11336:115;10990:468;;;;;:::o;11464:117::-;11573:1;11570;11563:12;11587:117;11696:1;11693;11686:12;11710:117;11819:1;11816;11809:12;11850:568;11923:8;11933:6;11983:3;11976:4;11968:6;11964:17;11960:27;11950:122;;11991:79;;:::i;:::-;11950:122;12104:6;12091:20;12081:30;;12134:18;12126:6;12123:30;12120:117;;;12156:79;;:::i;:::-;12120:117;12270:4;12262:6;12258:17;12246:29;;12324:3;12316:4;12308:6;12304:17;12294:8;12290:32;12287:41;12284:128;;;12331:79;;:::i;:::-;12284:128;11850:568;;;;;:::o;12424:698::-;12516:6;12524;12532;12581:2;12569:9;12560:7;12556:23;12552:32;12549:119;;;12587:79;;:::i;:::-;12549:119;12735:1;12724:9;12720:17;12707:31;12765:18;12757:6;12754:30;12751:117;;;12787:79;;:::i;:::-;12751:117;12900:80;12972:7;12963:6;12952:9;12948:22;12900:80;:::i;:::-;12882:98;;;;12678:312;13029:2;13055:50;13097:7;13088:6;13077:9;13073:22;13055:50;:::i;:::-;13045:60;;13000:115;12424:698;;;;;:::o;13128:323::-;13184:6;13233:2;13221:9;13212:7;13208:23;13204:32;13201:119;;;13239:79;;:::i;:::-;13201:119;13359:1;13384:50;13426:7;13417:6;13406:9;13402:22;13384:50;:::i;:::-;13374:60;;13330:114;13128:323;;;;:::o;13457:118::-;13528:22;13544:5;13528:22;:::i;:::-;13521:5;13518:33;13508:61;;13565:1;13562;13555:12;13508:61;13457:118;:::o;13581:135::-;13625:5;13663:6;13650:20;13641:29;;13679:31;13704:5;13679:31;:::i;:::-;13581:135;;;;:::o;13722:77::-;13759:7;13788:5;13777:16;;13722:77;;;:::o;13805:122::-;13878:24;13896:5;13878:24;:::i;:::-;13871:5;13868:35;13858:63;;13917:1;13914;13907:12;13858:63;13805:122;:::o;13933:139::-;13979:5;14017:6;14004:20;13995:29;;14033:33;14060:5;14033:33;:::i;:::-;13933:139;;;;:::o;14078:615::-;14153:6;14161;14169;14218:2;14206:9;14197:7;14193:23;14189:32;14186:119;;;14224:79;;:::i;:::-;14186:119;14344:1;14369:51;14412:7;14403:6;14392:9;14388:22;14369:51;:::i;:::-;14359:61;;14315:115;14469:2;14495:53;14540:7;14531:6;14520:9;14516:22;14495:53;:::i;:::-;14485:63;;14440:118;14597:2;14623:53;14668:7;14659:6;14648:9;14644:22;14623:53;:::i;:::-;14613:63;;14568:118;14078:615;;;;;:::o;14699:474::-;14767:6;14775;14824:2;14812:9;14803:7;14799:23;14795:32;14792:119;;;14830:79;;:::i;:::-;14792:119;14950:1;14975:53;15020:7;15011:6;15000:9;14996:22;14975:53;:::i;:::-;14965:63;;14921:117;15077:2;15103:53;15148:7;15139:6;15128:9;15124:22;15103:53;:::i;:::-;15093:63;;15048:118;14699:474;;;;;:::o;15179:182::-;15319:34;15315:1;15307:6;15303:14;15296:58;15179:182;:::o;15367:366::-;15509:3;15530:67;15594:2;15589:3;15530:67;:::i;:::-;15523:74;;15606:93;15695:3;15606:93;:::i;:::-;15724:2;15719:3;15715:12;15708:19;;15367:366;;;:::o;15739:419::-;15905:4;15943:2;15932:9;15928:18;15920:26;;15992:9;15986:4;15982:20;15978:1;15967:9;15963:17;15956:47;16020:131;16146:4;16020:131;:::i;:::-;16012:139;;15739:419;;;:::o;16164:180::-;16212:77;16209:1;16202:88;16309:4;16306:1;16299:15;16333:4;16330:1;16323:15;16350:191;16390:3;16409:20;16427:1;16409:20;:::i;:::-;16404:25;;16443:20;16461:1;16443:20;:::i;:::-;16438:25;;16486:1;16483;16479:9;16472:16;;16507:3;16504:1;16501:10;16498:36;;;16514:18;;:::i;:::-;16498:36;16350:191;;;;:::o;16547:179::-;16687:31;16683:1;16675:6;16671:14;16664:55;16547:179;:::o;16732:366::-;16874:3;16895:67;16959:2;16954:3;16895:67;:::i;:::-;16888:74;;16971:93;17060:3;16971:93;:::i;:::-;17089:2;17084:3;17080:12;17073:19;;16732:366;;;:::o;17104:419::-;17270:4;17308:2;17297:9;17293:18;17285:26;;17357:9;17351:4;17347:20;17343:1;17332:9;17328:17;17321:47;17385:131;17511:4;17385:131;:::i;:::-;17377:139;;17104:419;;;:::o;17529:180::-;17577:77;17574:1;17567:88;17674:4;17671:1;17664:15;17698:4;17695:1;17688:15;17715:320;17759:6;17796:1;17790:4;17786:12;17776:22;;17843:1;17837:4;17833:12;17864:18;17854:81;;17920:4;17912:6;17908:17;17898:27;;17854:81;17982:2;17974:6;17971:14;17951:18;17948:38;17945:84;;18001:18;;:::i;:::-;17945:84;17766:269;17715:320;;;:::o;18041:102::-;18083:8;18130:5;18127:1;18123:13;18102:34;;18041:102;;;:::o;18149:848::-;18210:5;18217:4;18241:6;18232:15;;18265:5;18256:14;;18279:712;18300:1;18290:8;18287:15;18279:712;;;18395:4;18390:3;18386:14;18380:4;18377:24;18374:50;;;18404:18;;:::i;:::-;18374:50;18454:1;18444:8;18440:16;18437:451;;;18869:4;18862:5;18858:16;18849:25;;18437:451;18919:4;18913;18909:15;18901:23;;18949:32;18972:8;18949:32;:::i;:::-;18937:44;;18279:712;;;18149:848;;;;;;;:::o;19003:1073::-;19057:5;19248:8;19238:40;;19269:1;19260:10;;19271:5;;19238:40;19297:4;19287:36;;19314:1;19305:10;;19316:5;;19287:36;19383:4;19431:1;19426:27;;;;19467:1;19462:191;;;;19376:277;;19426:27;19444:1;19435:10;;19446:5;;;19462:191;19507:3;19497:8;19494:17;19491:43;;;19514:18;;:::i;:::-;19491:43;19563:8;19560:1;19556:16;19547:25;;19598:3;19591:5;19588:14;19585:40;;;19605:18;;:::i;:::-;19585:40;19638:5;;;19376:277;;19762:2;19752:8;19749:16;19743:3;19737:4;19734:13;19730:36;19712:2;19702:8;19699:16;19694:2;19688:4;19685:12;19681:35;19665:111;19662:246;;;19818:8;19812:4;19808:19;19799:28;;19853:3;19846:5;19843:14;19840:40;;;19860:18;;:::i;:::-;19840:40;19893:5;;19662:246;19933:42;19971:3;19961:8;19955:4;19952:1;19933:42;:::i;:::-;19918:57;;;;20007:4;20002:3;19998:14;19991:5;19988:25;19985:51;;;20016:18;;:::i;:::-;19985:51;20065:4;20058:5;20054:16;20045:25;;19003:1073;;;;;;:::o;20082:281::-;20140:5;20164:23;20182:4;20164:23;:::i;:::-;20156:31;;20208:25;20224:8;20208:25;:::i;:::-;20196:37;;20252:104;20289:66;20279:8;20273:4;20252:104;:::i;:::-;20243:113;;20082:281;;;;:::o;20369:410::-;20409:7;20432:20;20450:1;20432:20;:::i;:::-;20427:25;;20466:20;20484:1;20466:20;:::i;:::-;20461:25;;20521:1;20518;20514:9;20543:30;20561:11;20543:30;:::i;:::-;20532:41;;20722:1;20713:7;20709:15;20706:1;20703:22;20683:1;20676:9;20656:83;20633:139;;20752:18;;:::i;:::-;20633:139;20417:362;20369:410;;;;:::o;20785:180::-;20833:77;20830:1;20823:88;20930:4;20927:1;20920:15;20954:4;20951:1;20944:15;20971:185;21011:1;21028:20;21046:1;21028:20;:::i;:::-;21023:25;;21062:20;21080:1;21062:20;:::i;:::-;21057:25;;21101:1;21091:35;;21106:18;;:::i;:::-;21091:35;21148:1;21145;21141:9;21136:14;;20971:185;;;;:::o;21162:228::-;21302:34;21298:1;21290:6;21286:14;21279:58;21371:11;21366:2;21358:6;21354:15;21347:36;21162:228;:::o;21396:366::-;21538:3;21559:67;21623:2;21618:3;21559:67;:::i;:::-;21552:74;;21635:93;21724:3;21635:93;:::i;:::-;21753:2;21748:3;21744:12;21737:19;;21396:366;;;:::o;21768:419::-;21934:4;21972:2;21961:9;21957:18;21949:26;;22021:9;22015:4;22011:20;22007:1;21996:9;21992:17;21985:47;22049:131;22175:4;22049:131;:::i;:::-;22041:139;;21768:419;;;:::o;22193:227::-;22333:34;22329:1;22321:6;22317:14;22310:58;22402:10;22397:2;22389:6;22385:15;22378:35;22193:227;:::o;22426:366::-;22568:3;22589:67;22653:2;22648:3;22589:67;:::i;:::-;22582:74;;22665:93;22754:3;22665:93;:::i;:::-;22783:2;22778:3;22774:12;22767:19;;22426:366;;;:::o;22798:419::-;22964:4;23002:2;22991:9;22987:18;22979:26;;23051:9;23045:4;23041:20;23037:1;23026:9;23022:17;23015:47;23079:131;23205:4;23079:131;:::i;:::-;23071:139;;22798:419;;;:::o;23223:233::-;23363:34;23359:1;23351:6;23347:14;23340:58;23432:16;23427:2;23419:6;23415:15;23408:41;23223:233;:::o;23462:366::-;23604:3;23625:67;23689:2;23684:3;23625:67;:::i;:::-;23618:74;;23701:93;23790:3;23701:93;:::i;:::-;23819:2;23814:3;23810:12;23803:19;;23462:366;;;:::o;23834:419::-;24000:4;24038:2;24027:9;24023:18;24015:26;;24087:9;24081:4;24077:20;24073:1;24062:9;24058:17;24051:47;24115:131;24241:4;24115:131;:::i;:::-;24107:139;;23834:419;;;:::o;24259:221::-;24399:34;24395:1;24387:6;24383:14;24376:58;24468:4;24463:2;24455:6;24451:15;24444:29;24259:221;:::o;24486:366::-;24628:3;24649:67;24713:2;24708:3;24649:67;:::i;:::-;24642:74;;24725:93;24814:3;24725:93;:::i;:::-;24843:2;24838:3;24834:12;24827:19;;24486:366;;;:::o;24858:419::-;25024:4;25062:2;25051:9;25047:18;25039:26;;25111:9;25105:4;25101:20;25097:1;25086:9;25082:17;25075:47;25139:131;25265:4;25139:131;:::i;:::-;25131:139;;24858:419;;;:::o;25283:180::-;25331:77;25328:1;25321:88;25428:4;25425:1;25418:15;25452:4;25449:1;25442:15;25469:244;25609:34;25605:1;25597:6;25593:14;25586:58;25678:27;25673:2;25665:6;25661:15;25654:52;25469:244;:::o;25719:366::-;25861:3;25882:67;25946:2;25941:3;25882:67;:::i;:::-;25875:74;;25958:93;26047:3;25958:93;:::i;:::-;26076:2;26071:3;26067:12;26060:19;;25719:366;;;:::o;26091:419::-;26257:4;26295:2;26284:9;26280:18;26272:26;;26344:9;26338:4;26334:20;26330:1;26319:9;26315:17;26308:47;26372:131;26498:4;26372:131;:::i;:::-;26364:139;;26091:419;;;:::o;26516:224::-;26656:34;26652:1;26644:6;26640:14;26633:58;26725:7;26720:2;26712:6;26708:15;26701:32;26516:224;:::o;26746:366::-;26888:3;26909:67;26973:2;26968:3;26909:67;:::i;:::-;26902:74;;26985:93;27074:3;26985:93;:::i;:::-;27103:2;27098:3;27094:12;27087:19;;26746:366;;;:::o;27118:419::-;27284:4;27322:2;27311:9;27307:18;27299:26;;27371:9;27365:4;27361:20;27357:1;27346:9;27342:17;27335:47;27399:131;27525:4;27399:131;:::i;:::-;27391:139;;27118:419;;;:::o;27543:118::-;27630:24;27648:5;27630:24;:::i;:::-;27625:3;27618:37;27543:118;;:::o;27667:664::-;27872:4;27910:3;27899:9;27895:19;27887:27;;27924:71;27992:1;27981:9;27977:17;27968:6;27924:71;:::i;:::-;28005:72;28073:2;28062:9;28058:18;28049:6;28005:72;:::i;:::-;28087;28155:2;28144:9;28140:18;28131:6;28087:72;:::i;:::-;28169;28237:2;28226:9;28222:18;28213:6;28169:72;:::i;:::-;28251:73;28319:3;28308:9;28304:19;28295:6;28251:73;:::i;:::-;27667:664;;;;;;;;:::o;28337:442::-;28486:4;28524:2;28513:9;28509:18;28501:26;;28537:71;28605:1;28594:9;28590:17;28581:6;28537:71;:::i;:::-;28618:72;28686:2;28675:9;28671:18;28662:6;28618:72;:::i;:::-;28700;28768:2;28757:9;28753:18;28744:6;28700:72;:::i;:::-;28337:442;;;;;;:::o;28785:148::-;28887:11;28924:3;28909:18;;28785:148;;;;:::o;28939:214::-;29079:66;29075:1;29067:6;29063:14;29056:90;28939:214;:::o;29159:400::-;29319:3;29340:84;29422:1;29417:3;29340:84;:::i;:::-;29333:91;;29433:93;29522:3;29433:93;:::i;:::-;29551:1;29546:3;29542:11;29535:18;;29159:400;;;:::o;29565:79::-;29604:7;29633:5;29622:16;;29565:79;;;:::o;29650:157::-;29755:45;29775:24;29793:5;29775:24;:::i;:::-;29755:45;:::i;:::-;29750:3;29743:58;29650:157;;:::o;29813:663::-;30054:3;30076:148;30220:3;30076:148;:::i;:::-;30069:155;;30234:75;30305:3;30296:6;30234:75;:::i;:::-;30334:2;30329:3;30325:12;30318:19;;30347:75;30418:3;30409:6;30347:75;:::i;:::-;30447:2;30442:3;30438:12;30431:19;;30467:3;30460:10;;29813:663;;;;;:::o;30482:545::-;30655:4;30693:3;30682:9;30678:19;30670:27;;30707:71;30775:1;30764:9;30760:17;30751:6;30707:71;:::i;:::-;30788:68;30852:2;30841:9;30837:18;30828:6;30788:68;:::i;:::-;30866:72;30934:2;30923:9;30919:18;30910:6;30866:72;:::i;:::-;30948;31016:2;31005:9;31001:18;30992:6;30948:72;:::i;:::-;30482:545;;;;;;;:::o;31033:167::-;31173:19;31169:1;31161:6;31157:14;31150:43;31033:167;:::o;31206:366::-;31348:3;31369:67;31433:2;31428:3;31369:67;:::i;:::-;31362:74;;31445:93;31534:3;31445:93;:::i;:::-;31563:2;31558:3;31554:12;31547:19;;31206:366;;;:::o;31578:419::-;31744:4;31782:2;31771:9;31767:18;31759:26;;31831:9;31825:4;31821:20;31817:1;31806:9;31802:17;31795:47;31859:131;31985:4;31859:131;:::i;:::-;31851:139;;31578:419;;;:::o;32003:170::-;32143:22;32139:1;32131:6;32127:14;32120:46;32003:170;:::o;32179:366::-;32321:3;32342:67;32406:2;32401:3;32342:67;:::i;:::-;32335:74;;32418:93;32507:3;32418:93;:::i;:::-;32536:2;32531:3;32527:12;32520:19;;32179:366;;;:::o;32551:419::-;32717:4;32755:2;32744:9;32740:18;32732:26;;32804:9;32798:4;32794:20;32790:1;32779:9;32775:17;32768:47;32832:131;32958:4;32832:131;:::i;:::-;32824:139;;32551:419;;;:::o;32976:223::-;33116:34;33112:1;33104:6;33100:14;33093:58;33185:6;33180:2;33172:6;33168:15;33161:31;32976:223;:::o;33205:366::-;33347:3;33368:67;33432:2;33427:3;33368:67;:::i;:::-;33361:74;;33444:93;33533:3;33444:93;:::i;:::-;33562:2;33557:3;33553:12;33546:19;;33205:366;;;:::o;33577:419::-;33743:4;33781:2;33770:9;33766:18;33758:26;;33830:9;33824:4;33820:20;33816:1;33805:9;33801:17;33794:47;33858:131;33984:4;33858:131;:::i;:::-;33850:139;;33577:419;;;:::o;34002:240::-;34142:34;34138:1;34130:6;34126:14;34119:58;34211:23;34206:2;34198:6;34194:15;34187:48;34002:240;:::o;34248:366::-;34390:3;34411:67;34475:2;34470:3;34411:67;:::i;:::-;34404:74;;34487:93;34576:3;34487:93;:::i;:::-;34605:2;34600:3;34596:12;34589:19;;34248:366;;;:::o;34620:419::-;34786:4;34824:2;34813:9;34809:18;34801:26;;34873:9;34867:4;34863:20;34859:1;34848:9;34844:17;34837:47;34901:131;35027:4;34901:131;:::i;:::-;34893:139;;34620:419;;;:::o;35045:239::-;35185:34;35181:1;35173:6;35169:14;35162:58;35254:22;35249:2;35241:6;35237:15;35230:47;35045:239;:::o;35290:366::-;35432:3;35453:67;35517:2;35512:3;35453:67;:::i;:::-;35446:74;;35529:93;35618:3;35529:93;:::i;:::-;35647:2;35642:3;35638:12;35631:19;;35290:366;;;:::o;35662:419::-;35828:4;35866:2;35855:9;35851:18;35843:26;;35915:9;35909:4;35905:20;35901:1;35890:9;35886:17;35879:47;35943:131;36069:4;35943:131;:::i;:::-;35935:139;;35662:419;;;:::o;36087:225::-;36227:34;36223:1;36215:6;36211:14;36204:58;36296:8;36291:2;36283:6;36279:15;36272:33;36087:225;:::o;36318:366::-;36460:3;36481:67;36545:2;36540:3;36481:67;:::i;:::-;36474:74;;36557:93;36646:3;36557:93;:::i;:::-;36675:2;36670:3;36666:12;36659:19;;36318:366;;;:::o;36690:419::-;36856:4;36894:2;36883:9;36879:18;36871:26;;36943:9;36937:4;36933:20;36929:1;36918:9;36914:17;36907:47;36971:131;37097:4;36971:131;:::i;:::-;36963:139;;36690:419;;;:::o;37115:223::-;37255:34;37251:1;37243:6;37239:14;37232:58;37324:6;37319:2;37311:6;37307:15;37300:31;37115:223;:::o;37344:366::-;37486:3;37507:67;37571:2;37566:3;37507:67;:::i;:::-;37500:74;;37583:93;37672:3;37583:93;:::i;:::-;37701:2;37696:3;37692:12;37685:19;;37344:366;;;:::o;37716:419::-;37882:4;37920:2;37909:9;37905:18;37897:26;;37969:9;37963:4;37959:20;37955:1;37944:9;37940:17;37933:47;37997:131;38123:4;37997:131;:::i;:::-;37989:139;;37716:419;;;:::o;38141:221::-;38281:34;38277:1;38269:6;38265:14;38258:58;38350:4;38345:2;38337:6;38333:15;38326:29;38141:221;:::o;38368:366::-;38510:3;38531:67;38595:2;38590:3;38531:67;:::i;:::-;38524:74;;38607:93;38696:3;38607:93;:::i;:::-;38725:2;38720:3;38716:12;38709:19;;38368:366;;;:::o;38740:419::-;38906:4;38944:2;38933:9;38929:18;38921:26;;38993:9;38987:4;38983:20;38979:1;38968:9;38964:17;38957:47;39021:131;39147:4;39021:131;:::i;:::-;39013:139;;38740:419;;;:::o;39165:224::-;39305:34;39301:1;39293:6;39289:14;39282:58;39374:7;39369:2;39361:6;39357:15;39350:32;39165:224;:::o;39395:366::-;39537:3;39558:67;39622:2;39617:3;39558:67;:::i;:::-;39551:74;;39634:93;39723:3;39634:93;:::i;:::-;39752:2;39747:3;39743:12;39736:19;;39395:366;;;:::o;39767:419::-;39933:4;39971:2;39960:9;39956:18;39948:26;;40020:9;40014:4;40010:20;40006:1;39995:9;39991:17;39984:47;40048:131;40174:4;40048:131;:::i;:::-;40040:139;;39767:419;;;:::o;40192:222::-;40332:34;40328:1;40320:6;40316:14;40309:58;40401:5;40396:2;40388:6;40384:15;40377:30;40192:222;:::o;40420:366::-;40562:3;40583:67;40647:2;40642:3;40583:67;:::i;:::-;40576:74;;40659:93;40748:3;40659:93;:::i;:::-;40777:2;40772:3;40768:12;40761:19;;40420:366;;;:::o;40792:419::-;40958:4;40996:2;40985:9;40981:18;40973:26;;41045:9;41039:4;41035:20;41031:1;41020:9;41016:17;41009:47;41073:131;41199:4;41073:131;:::i;:::-;41065:139;;40792:419;;;:::o;41217:167::-;41357:19;41353:1;41345:6;41341:14;41334:43;41217:167;:::o;41390:366::-;41532:3;41553:67;41617:2;41612:3;41553:67;:::i;:::-;41546:74;;41629:93;41718:3;41629:93;:::i;:::-;41747:2;41742:3;41738:12;41731:19;;41390:366;;;:::o;41762:419::-;41928:4;41966:2;41955:9;41951:18;41943:26;;42015:9;42009:4;42005:20;42001:1;41990:9;41986:17;41979:47;42043:131;42169:4;42043:131;:::i;:::-;42035:139;;41762:419;;;:::o;42187:165::-;42327:17;42323:1;42315:6;42311:14;42304:41;42187:165;:::o;42358:366::-;42500:3;42521:67;42585:2;42580:3;42521:67;:::i;:::-;42514:74;;42597:93;42686:3;42597:93;:::i;:::-;42715:2;42710:3;42706:12;42699:19;;42358:366;;;:::o;42730:419::-;42896:4;42934:2;42923:9;42919:18;42911:26;;42983:9;42977:4;42973:20;42969:1;42958:9;42954:17;42947:47;43011:131;43137:4;43011:131;:::i;:::-;43003:139;;42730:419;;;:::o;43155:172::-;43295:24;43291:1;43283:6;43279:14;43272:48;43155:172;:::o;43333:366::-;43475:3;43496:67;43560:2;43555:3;43496:67;:::i;:::-;43489:74;;43572:93;43661:3;43572:93;:::i;:::-;43690:2;43685:3;43681:12;43674:19;;43333:366;;;:::o;43705:419::-;43871:4;43909:2;43898:9;43894:18;43886:26;;43958:9;43952:4;43948:20;43944:1;43933:9;43929:17;43922:47;43986:131;44112:4;43986:131;:::i;:::-;43978:139;;43705:419;;;:::o;44130:234::-;44270:34;44266:1;44258:6;44254:14;44247:58;44339:17;44334:2;44326:6;44322:15;44315:42;44130:234;:::o;44370:366::-;44512:3;44533:67;44597:2;44592:3;44533:67;:::i;:::-;44526:74;;44609:93;44698:3;44609:93;:::i;:::-;44727:2;44722:3;44718:12;44711:19;;44370:366;;;:::o;44742:419::-;44908:4;44946:2;44935:9;44931:18;44923:26;;44995:9;44989:4;44985:20;44981:1;44970:9;44966:17;44959:47;45023:131;45149:4;45023:131;:::i;:::-;45015:139;;44742:419;;;:::o;45167:169::-;45307:21;45303:1;45295:6;45291:14;45284:45;45167:169;:::o;45342:366::-;45484:3;45505:67;45569:2;45564:3;45505:67;:::i;:::-;45498:74;;45581:93;45670:3;45581:93;:::i;:::-;45699:2;45694:3;45690:12;45683:19;;45342:366;;;:::o;45714:419::-;45880:4;45918:2;45907:9;45903:18;45895:26;;45967:9;45961:4;45957:20;45953:1;45942:9;45938:17;45931:47;45995:131;46121:4;45995:131;:::i;:::-;45987:139;;45714:419;;;:::o;46139:235::-;46279:34;46275:1;46267:6;46263:14;46256:58;46348:18;46343:2;46335:6;46331:15;46324:43;46139:235;:::o;46380:366::-;46522:3;46543:67;46607:2;46602:3;46543:67;:::i;:::-;46536:74;;46619:93;46708:3;46619:93;:::i;:::-;46737:2;46732:3;46728:12;46721:19;;46380:366;;;:::o;46752:419::-;46918:4;46956:2;46945:9;46941:18;46933:26;;47005:9;46999:4;46995:20;46991:1;46980:9;46976:17;46969:47;47033:131;47159:4;47033:131;:::i;:::-;47025:139;;46752:419;;;:::o;47177:137::-;47231:5;47262:6;47256:13;47247:22;;47278:30;47302:5;47278:30;:::i;:::-;47177:137;;;;:::o;47320:345::-;47387:6;47436:2;47424:9;47415:7;47411:23;47407:32;47404:119;;;47442:79;;:::i;:::-;47404:119;47562:1;47587:61;47640:7;47631:6;47620:9;47616:22;47587:61;:::i;:::-;47577:71;;47533:125;47320:345;;;;:::o;47671:775::-;47904:4;47942:3;47931:9;47927:19;47919:27;;47956:71;48024:1;48013:9;48009:17;48000:6;47956:71;:::i;:::-;48037:72;48105:2;48094:9;48090:18;48081:6;48037:72;:::i;:::-;48119;48187:2;48176:9;48172:18;48163:6;48119:72;:::i;:::-;48201;48269:2;48258:9;48254:18;48245:6;48201:72;:::i;:::-;48283:73;48351:3;48340:9;48336:19;48327:6;48283:73;:::i;:::-;48366;48434:3;48423:9;48419:19;48410:6;48366:73;:::i;:::-;47671:775;;;;;;;;;:::o;48452:170::-;48592:22;48588:1;48580:6;48576:14;48569:46;48452:170;:::o;48628:366::-;48770:3;48791:67;48855:2;48850:3;48791:67;:::i;:::-;48784:74;;48867:93;48956:3;48867:93;:::i;:::-;48985:2;48980:3;48976:12;48969:19;;48628:366;;;:::o;49000:419::-;49166:4;49204:2;49193:9;49189:18;49181:26;;49253:9;49247:4;49243:20;49239:1;49228:9;49224:17;49217:47;49281:131;49407:4;49281:131;:::i;:::-;49273:139;;49000:419;;;:::o;49425:194::-;49465:4;49485:20;49503:1;49485:20;:::i;:::-;49480:25;;49519:20;49537:1;49519:20;:::i;:::-;49514:25;;49563:1;49560;49556:9;49548:17;;49587:1;49581:4;49578:11;49575:37;;;49592:18;;:::i;:::-;49575:37;49425:194;;;;:::o;49625:225::-;49765:34;49761:1;49753:6;49749:14;49742:58;49834:8;49829:2;49821:6;49817:15;49810:33;49625:225;:::o;49856:366::-;49998:3;50019:67;50083:2;50078:3;50019:67;:::i;:::-;50012:74;;50095:93;50184:3;50095:93;:::i;:::-;50213:2;50208:3;50204:12;50197:19;;49856:366;;;:::o;50228:419::-;50394:4;50432:2;50421:9;50417:18;50409:26;;50481:9;50475:4;50471:20;50467:1;50456:9;50452:17;50445:47;50509:131;50635:4;50509:131;:::i;:::-;50501:139;;50228:419;;;:::o;50653:147::-;50754:11;50791:3;50776:18;;50653:147;;;;:::o;50806:114::-;;:::o;50926:398::-;51085:3;51106:83;51187:1;51182:3;51106:83;:::i;:::-;51099:90;;51198:93;51287:3;51198:93;:::i;:::-;51316:1;51311:3;51307:11;51300:18;;50926:398;;;:::o;51330:379::-;51514:3;51536:147;51679:3;51536:147;:::i;:::-;51529:154;;51700:3;51693:10;;51330:379;;;:::o;51715:143::-;51772:5;51803:6;51797:13;51788:22;;51819:33;51846:5;51819:33;:::i;:::-;51715:143;;;;:::o;51864:351::-;51934:6;51983:2;51971:9;51962:7;51958:23;51954:32;51951:119;;;51989:79;;:::i;:::-;51951:119;52109:1;52134:64;52190:7;52181:6;52170:9;52166:22;52134:64;:::i;:::-;52124:74;;52080:128;51864:351;;;;:::o;52221:85::-;52266:7;52295:5;52284:16;;52221:85;;;:::o;52312:158::-;52370:9;52403:61;52421:42;52430:32;52456:5;52430:32;:::i;:::-;52421:42;:::i;:::-;52403:61;:::i;:::-;52390:74;;52312:158;;;:::o;52476:147::-;52571:45;52610:5;52571:45;:::i;:::-;52566:3;52559:58;52476:147;;:::o;52629:114::-;52696:6;52730:5;52724:12;52714:22;;52629:114;;;:::o;52749:184::-;52848:11;52882:6;52877:3;52870:19;52922:4;52917:3;52913:14;52898:29;;52749:184;;;;:::o;52939:132::-;53006:4;53029:3;53021:11;;53059:4;53054:3;53050:14;53042:22;;52939:132;;;:::o;53077:108::-;53154:24;53172:5;53154:24;:::i;:::-;53149:3;53142:37;53077:108;;:::o;53191:179::-;53260:10;53281:46;53323:3;53315:6;53281:46;:::i;:::-;53359:4;53354:3;53350:14;53336:28;;53191:179;;;;:::o;53376:113::-;53446:4;53478;53473:3;53469:14;53461:22;;53376:113;;;:::o;53525:732::-;53644:3;53673:54;53721:5;53673:54;:::i;:::-;53743:86;53822:6;53817:3;53743:86;:::i;:::-;53736:93;;53853:56;53903:5;53853:56;:::i;:::-;53932:7;53963:1;53948:284;53973:6;53970:1;53967:13;53948:284;;;54049:6;54043:13;54076:63;54135:3;54120:13;54076:63;:::i;:::-;54069:70;;54162:60;54215:6;54162:60;:::i;:::-;54152:70;;54008:224;53995:1;53992;53988:9;53983:14;;53948:284;;;53952:14;54248:3;54241:10;;53649:608;;;53525:732;;;;:::o;54263:831::-;54526:4;54564:3;54553:9;54549:19;54541:27;;54578:71;54646:1;54635:9;54631:17;54622:6;54578:71;:::i;:::-;54659:80;54735:2;54724:9;54720:18;54711:6;54659:80;:::i;:::-;54786:9;54780:4;54776:20;54771:2;54760:9;54756:18;54749:48;54814:108;54917:4;54908:6;54814:108;:::i;:::-;54806:116;;54932:72;55000:2;54989:9;54985:18;54976:6;54932:72;:::i;:::-;55014:73;55082:3;55071:9;55067:19;55058:6;55014:73;:::i;:::-;54263:831;;;;;;;;:::o

Swarm Source

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