ETH Price: $3,447.03 (+3.52%)

Token

Hottie Froggie (FROGGIE)
 

Overview

Max Total Supply

1,000,000,000,000 FROGGIE

Holders

92

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
saintnickk.eth
Balance
9,064,652,014.359798144888259001 FROGGIE

Value
$0.00
0x68e491141e4fc4e394b953ed9f1e04bce8f739af
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:
Froggie

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// https://t.me/HottieFroggieOG
// https://twitter.com/HottieFroggieOG
// https://www.hottiefroggie.net/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public papaWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public operationsWallet;

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

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyPapaFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellPapaFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForPapa;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    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 papaWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

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

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

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

    constructor() ERC20("Hottie Froggie","FROGGIE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniV2router); 

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

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

        // launch buy fees
        uint256 _buyPapaFee = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 10;
        
        // launch sell fees
        uint256 _sellPapaFee = 10;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 10;

        uint256 totalSupply = 1_000_000_000_000 * 1e18;

        maxTransaction = 10_000_000_000 * 1e18; // 2% max transaction at launch
        maxWallet = 10_000_000_000 * 1e18; // 2% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyPapaFee = _buyPapaFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyPapaFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

        sellPapaFee = _sellPapaFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellPapaFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        papaWallet = address(0xC3330A1BdfEF984EC5eD44B1B1e9a8bF818Ff196); 
        developmentWallet = address(0xC3330A1BdfEF984EC5eD44B1B1e9a8bF818Ff196); 
        liquidityWallet = address(0xC3330A1BdfEF984EC5eD44B1B1e9a8bF818Ff196); 
        operationsWallet = address(0xc5BC14c0fca2b75a461614d19ef04E3F1dF2BEfa);

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

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = 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 updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _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 _papaFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyPapaFee = _papaFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyPapaFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        require(buyTotalFees <= 40);
    }

    function updateSellFees(
        uint256 _papaFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellPapaFee = _papaFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellPapaFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        require(sellTotalFees <= 40); 
    }

    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 updatepapaWallet(address newpapaWallet) external onlyOwner {
        emit papaWalletUpdated(newpapaWallet, papaWallet);
        papaWallet = newpapaWallet;
    }

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

    function updateoperationsWallet(address newWallet) external onlyOwner{
        emit operationsWalletUpdated(newWallet, operationsWallet);
        operationsWallet = newWallet;
    }

    function updateliquidityWallet(address newliquidityWallet) external onlyOwner {
        emit liquidityWalletUpdated(newliquidityWallet, liquidityWallet);
        liquidityWallet = newliquidityWallet;
    }

    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(!blocked[from], "Sniper blocked");

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

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

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

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_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"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForPapa += (fees * sellPapaFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForPapa += (fees * buyPapaFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

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

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

    function updateBL(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != uniV2router && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

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

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForPapa = ethBalance.mul(tokensForPapa).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForPapa - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForPapa = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsWallet).call{value: ethForOperations}("");
        (success, ) = address(papaWallet).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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"operationsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"papaWalletUpdated","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":[{"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":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyPapaFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","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":"operationsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"papaWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellPapaFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForPapa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"updateBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_papaFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_papaFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newliquidityWallet","type":"address"}],"name":"updateliquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateoperationsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newpapaWallet","type":"address"}],"name":"updatepapaWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550348015620000d257600080fd5b506040518060400160405280600e81526020017f486f747469652046726f676769650000000000000000000000000000000000008152506040518060400160405280600781526020017f46524f474749450000000000000000000000000000000000000000000000000081525081600390805190602001906200015792919062000c2b565b5080600490805190602001906200017092919062000c2b565b5050506200019362000187620006eb60201b60201c565b620006f360201b60201c565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050620001cd816001620007b960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000d45565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000301919062000d45565b6040518363ffffffff1660e01b81526004016200032092919062000d88565b6020604051808303816000875af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000d45565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ae60a0516001620007b960201b60201c565b620003c360a0516001620008a360201b60201c565b6000600a90506000806000600a90506000600a90506000806000600a905060006c0c9f2c9cd04674edea4000000090506b204fce5e3e25026110000000600b819055506b204fce5e3e25026110000000600d819055506127106005826200042b919062000dee565b62000437919062000e7e565b600c819055508860148190555087601581905550866016819055508560178190555060175460165460155460145462000471919062000eb6565b6200047d919062000eb6565b62000489919062000eb6565b6013819055508460198190555083601a8190555082601b8190555081601c81905550601c54601b54601a54601954620004c3919062000eb6565b620004cf919062000eb6565b620004db919062000eb6565b60188190555073c3330a1bdfef984ec5ed44b1b1e9a8bf818ff196600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c3330a1bdfef984ec5ed44b1b1e9a8bf818ff196600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c3330a1bdfef984ec5ed44b1b1e9a8bf818ff196600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c5bc14c0fca2b75a461614d19ef04e3f1df2befa600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000657620006496200094460201b60201c565b60016200096e60201b60201c565b6200066a3060016200096e60201b60201c565b6200067f61dead60016200096e60201b60201c565b620006a1620006936200094460201b60201c565b6001620007b960201b60201c565b620006b4306001620007b960201b60201c565b620006c961dead6001620007b960201b60201c565b620006db338262000aa860201b60201c565b50505050505050505050620010d5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007c9620006eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007ef6200094460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000848576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083f9062000f74565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200097e620006eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009a46200094460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f49062000f74565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a9c919062000fb3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b129062001020565b60405180910390fd5b62000b2f6000838362000c2160201b60201c565b806002600082825462000b43919062000eb6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b9a919062000eb6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c01919062001053565b60405180910390a362000c1d6000838362000c2660201b60201c565b5050565b505050565b505050565b82805462000c39906200109f565b90600052602060002090601f01602090048101928262000c5d576000855562000ca9565b82601f1062000c7857805160ff191683800117855562000ca9565b8280016001018555821562000ca9579182015b8281111562000ca857825182559160200191906001019062000c8b565b5b50905062000cb8919062000cbc565b5090565b5b8082111562000cd757600081600090555060010162000cbd565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d0d8262000ce0565b9050919050565b62000d1f8162000d00565b811462000d2b57600080fd5b50565b60008151905062000d3f8162000d14565b92915050565b60006020828403121562000d5e5762000d5d62000cdb565b5b600062000d6e8482850162000d2e565b91505092915050565b62000d828162000d00565b82525050565b600060408201905062000d9f600083018562000d77565b62000dae602083018462000d77565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dfb8262000db5565b915062000e088362000db5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e445762000e4362000dbf565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e8b8262000db5565b915062000e988362000db5565b92508262000eab5762000eaa62000e4f565b5b828204905092915050565b600062000ec38262000db5565b915062000ed08362000db5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f085762000f0762000dbf565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f5c60208362000f13565b915062000f698262000f24565b602082019050919050565b6000602082019050818103600083015262000f8f8162000f4d565b9050919050565b60008115159050919050565b62000fad8162000f96565b82525050565b600060208201905062000fca600083018462000fa2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001008601f8362000f13565b9150620010158262000fd0565b602082019050919050565b600060208201905081810360008301526200103b8162000ff9565b9050919050565b6200104d8162000db5565b82525050565b60006020820190506200106a600083018462001042565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010b857607f821691505b60208210811415620010cf57620010ce62001070565b5b50919050565b60805160a051615b3f6200113a6000396000818161147c015281816116fd01528181611f5001526130550152600081816110e801528181612ffd015281816142310152818161431201528181614339015281816143d501526143fc0152615b3f6000f3fe6080604052600436106103c75760003560e01c806392aa3773116101f2578063d46980161161010d578063e884f260116100a0578063f63743421161006f578063f637434214610e7b578063f8b45b0514610ea6578063fb002c9714610ed1578063fd72e22a14610efc576103ce565b8063e884f26014610dd1578063ef8700e514610dfc578063f11a24d314610e27578063f2fde38b14610e52576103ce565b8063e2f45605116100dc578063e2f4560514610d15578063e596219514610d40578063e7ad9fcd14610d7d578063e80177c714610da6576103ce565b8063d469801614610c45578063d85ba06314610c70578063dd62ed3e14610c9b578063e1bc339414610cd8576103ce565b8063c024666811610185578063c876d0b911610154578063c876d0b914610b89578063d1b89d4e14610bb4578063d257b34f14610bdd578063d347be6a14610c1a576103ce565b8063c024666814610ae1578063c04a541414610b0a578063c3f70b5214610b35578063c79c04fd14610b60576103ce565b8063a9059cbb116101c1578063a9059cbb14610a11578063b204141114610a4e578063b62496f514610a79578063bbc0c74214610ab6576103ce565b806392aa37731461095757806395d89b41146109805780639a7a23d6146109ab578063a457c2d7146109d4576103ce565b806349bd5a5e116102e257806370a082311161027557806376b5aa931161024457806376b5aa93146108c15780638a8c523c146108ec5780638da5cb5b14610903578063924de9b71461092e576103ce565b806370a0823114610819578063715018a614610856578063751039fc1461086d5780637571336a14610898576103ce565b80635a139dd4116102b15780635a139dd41461076f5780636a486a8e1461079a5780636aebf627146107c55780636ddd1713146107ee576103ce565b806349bd5a5e146106b15780634a62bb65146106dc5780634f77f6c0146107075780634fbee19314610732576103ce565b8063229f2c5f1161035a5780632e6ed7ef116103295780632e6ed7ef146105f5578063313ce5671461061e578063377ad127146106495780633950935114610674576103ce565b8063229f2c5f1461053957806323b872dd1461056457806327c8f835146105a15780632cefac29146105cc576103ce565b806318160ddd1161039657806318160ddd1461048f57806318a94cf1146104ba5780631a8145bb146104e55780631c499ab014610510576103ce565b80630517d13d146103d357806306fdde03146103fc578063095ea7b3146104275780631694505e14610464576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103fa60048036038101906103f5919061450b565b610f27565b005b34801561040857600080fd5b50610411611036565b60405161041e91906145d1565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614651565b6110c8565b60405161045b91906146ac565b60405180910390f35b34801561047057600080fd5b506104796110e6565b6040516104869190614726565b60405180910390f35b34801561049b57600080fd5b506104a461110a565b6040516104b19190614750565b60405180910390f35b3480156104c657600080fd5b506104cf611114565b6040516104dc9190614750565b60405180910390f35b3480156104f157600080fd5b506104fa61111a565b6040516105079190614750565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061450b565b611120565b005b34801561054557600080fd5b5061054e61122f565b60405161055b9190614750565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061476b565b611235565b60405161059891906146ac565b60405180910390f35b3480156105ad57600080fd5b506105b661132d565b6040516105c391906147cd565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614879565b611333565b005b34801561060157600080fd5b5061061c600480360381019061061791906148d9565b611542565b005b34801561062a57600080fd5b50610633611620565b604051610640919061495c565b60405180910390f35b34801561065557600080fd5b5061065e611629565b60405161066b91906147cd565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190614651565b61164f565b6040516106a891906146ac565b60405180910390f35b3480156106bd57600080fd5b506106c66116fb565b6040516106d391906147cd565b60405180910390f35b3480156106e857600080fd5b506106f161171f565b6040516106fe91906146ac565b60405180910390f35b34801561071357600080fd5b5061071c611732565b6040516107299190614750565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190614977565b611738565b60405161076691906146ac565b60405180910390f35b34801561077b57600080fd5b5061078461178e565b6040516107919190614750565b60405180910390f35b3480156107a657600080fd5b506107af611794565b6040516107bc9190614750565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190614977565b61179a565b005b3480156107fa57600080fd5b506108036118d6565b60405161081091906146ac565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190614977565b6118e9565b60405161084d9190614750565b60405180910390f35b34801561086257600080fd5b5061086b611931565b005b34801561087957600080fd5b506108826119b9565b60405161088f91906146ac565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906149a4565b611a59565b005b3480156108cd57600080fd5b506108d6611b30565b6040516108e39190614750565b60405180910390f35b3480156108f857600080fd5b50610901611b36565b005b34801561090f57600080fd5b50610918611c41565b60405161092591906147cd565b60405180910390f35b34801561093a57600080fd5b50610955600480360381019061095091906149e4565b611c6b565b005b34801561096357600080fd5b5061097e60048036038101906109799190614977565b611d04565b005b34801561098c57600080fd5b50610995611e40565b6040516109a291906145d1565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd91906149a4565b611ed2565b005b3480156109e057600080fd5b506109fb60048036038101906109f69190614651565b611feb565b604051610a0891906146ac565b60405180910390f35b348015610a1d57600080fd5b50610a386004803603810190610a339190614651565b6120d6565b604051610a4591906146ac565b60405180910390f35b348015610a5a57600080fd5b50610a636120f4565b604051610a709190614750565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190614977565b6120fa565b604051610aad91906146ac565b60405180910390f35b348015610ac257600080fd5b50610acb61211a565b604051610ad891906146ac565b60405180910390f35b348015610aed57600080fd5b50610b086004803603810190610b0391906149a4565b61212d565b005b348015610b1657600080fd5b50610b1f612252565b604051610b2c91906147cd565b60405180910390f35b348015610b4157600080fd5b50610b4a612278565b604051610b579190614750565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b829190614977565b61227e565b005b348015610b9557600080fd5b50610b9e6123ba565b604051610bab91906146ac565b60405180910390f35b348015610bc057600080fd5b50610bdb6004803603810190610bd69190614977565b6123cd565b005b348015610be957600080fd5b50610c046004803603810190610bff919061450b565b612509565b604051610c1191906146ac565b60405180910390f35b348015610c2657600080fd5b50610c2f61265e565b604051610c3c9190614750565b60405180910390f35b348015610c5157600080fd5b50610c5a612664565b604051610c6791906147cd565b60405180910390f35b348015610c7c57600080fd5b50610c8561268a565b604051610c929190614750565b60405180910390f35b348015610ca757600080fd5b50610cc26004803603810190610cbd9190614a11565b612690565b604051610ccf9190614750565b60405180910390f35b348015610ce457600080fd5b50610cff6004803603810190610cfa9190614977565b612717565b604051610d0c91906146ac565b60405180910390f35b348015610d2157600080fd5b50610d2a612737565b604051610d379190614750565b60405180910390f35b348015610d4c57600080fd5b50610d676004803603810190610d629190614977565b61273d565b604051610d7491906146ac565b60405180910390f35b348015610d8957600080fd5b50610da46004803603810190610d9f91906148d9565b61275d565b005b348015610db257600080fd5b50610dbb61283b565b604051610dc891906147cd565b60405180910390f35b348015610ddd57600080fd5b50610de6612861565b604051610df391906146ac565b60405180910390f35b348015610e0857600080fd5b50610e11612901565b604051610e1e9190614750565b60405180910390f35b348015610e3357600080fd5b50610e3c612907565b604051610e499190614750565b60405180910390f35b348015610e5e57600080fd5b50610e796004803603810190610e749190614977565b61290d565b005b348015610e8757600080fd5b50610e90612a05565b604051610e9d9190614750565b60405180910390f35b348015610eb257600080fd5b50610ebb612a0b565b604051610ec89190614750565b60405180910390f35b348015610edd57600080fd5b50610ee6612a11565b604051610ef39190614750565b60405180910390f35b348015610f0857600080fd5b50610f11612a17565b604051610f1e91906147cd565b60405180910390f35b610f2f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611c41565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a9d565b60405180910390fd5b670de0b6b3a76400006103e86001610fb961110a565b610fc39190614aec565b610fcd9190614b75565b610fd79190614b75565b811015611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614c18565b60405180910390fd5b670de0b6b3a76400008161102d9190614aec565b600b8190555050565b60606003805461104590614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461107190614c67565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b60006110dc6110d5612a3d565b8484612a45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601b5481565b601e5481565b611128612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611146611c41565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a9d565b60405180910390fd5b670de0b6b3a76400006103e860056111b261110a565b6111bc9190614aec565b6111c69190614b75565b6111d09190614b75565b811015611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990614d0b565b60405180910390fd5b670de0b6b3a7640000816112269190614aec565b600d8190555050565b60195481565b6000611242848484612c10565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061128d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614d9d565b60405180910390fd5b61132185611319612a3d565b858403612a45565b60019150509392505050565b61dead81565b61133b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611359611c41565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614a9d565b60405180910390fd5b60005b8383905081101561153c5760008484838181106113d2576113d1614dbd565b5b90506020020160208101906113e79190614977565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114735750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114cb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156115285782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061153490614dec565b9150506113b2565b50505050565b61154a612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611568611c41565b73ffffffffffffffffffffffffffffffffffffffff16146115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b590614a9d565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546115f09190614e35565b6115fa9190614e35565b6116049190614e35565b6013819055506028601354111561161a57600080fd5b50505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116f161165c612a3d565b84846001600061166a612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ec9190614e35565b612a45565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60185481565b6117a2612a3d565b73ffffffffffffffffffffffffffffffffffffffff166117c0611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90614a9d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611939612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611957611c41565b73ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490614a9d565b60405180910390fd5b6119b7600061399d565b565b60006119c3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119e1611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614a9d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611a61612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a7f611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90614a9d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d5481565b611b3e612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611b5c611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614a9d565b60405180910390fd5b600e60019054906101000a900460ff1615611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf990614ed7565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c73612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611c91611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90614a9d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611d0c612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611d2a611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614a9d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611e4f90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7b90614c67565b8015611ec85780601f10611e9d57610100808354040283529160200191611ec8565b820191906000526020600020905b815481529060010190602001808311611eab57829003601f168201915b5050505050905090565b611eda612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611ef8611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590614a9d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614f69565b60405180910390fd5b611fe78282613a63565b5050565b60008060016000611ffa612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90614ffb565b60405180910390fd5b6120cb6120c2612a3d565b85858403612a45565b600191505092915050565b60006120ea6120e3612a3d565b8484612c10565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b612135612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612153611c41565b73ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614a9d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161224691906146ac565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b612286612a3d565b73ffffffffffffffffffffffffffffffffffffffff166122a4611c41565b73ffffffffffffffffffffffffffffffffffffffff16146122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190614a9d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b6123d5612a3d565b73ffffffffffffffffffffffffffffffffffffffff166123f3611c41565b73ffffffffffffffffffffffffffffffffffffffff1614612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614a9d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1be79b363311a081e3513abd6064d09dc657018011f7ea0d62ceff4e3094d0b260405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612513612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612531611c41565b73ffffffffffffffffffffffffffffffffffffffff1614612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e90614a9d565b60405180910390fd5b620186a0600161259561110a565b61259f9190614aec565b6125a99190614b75565b8210156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e29061508d565b60405180910390fd5b6103e860056125f861110a565b6126029190614aec565b61260c9190614b75565b82111561264e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126459061511f565b60405180910390fd5b81600c8190555060019050919050565b60145481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b612765612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612783611c41565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614a9d565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a5460195461280b9190614e35565b6128159190614e35565b61281f9190614e35565b6018819055506028601854111561283557600080fd5b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061286b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612889611c41565b73ffffffffffffffffffffffffffffffffffffffff16146128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690614a9d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b612915612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612933611c41565b73ffffffffffffffffffffffffffffffffffffffff1614612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f0906151b1565b60405180910390fd5b612a028161399d565b50565b601a5481565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615243565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c906152d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c039190614750565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce7906153f9565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490615465565b60405180910390fd5b6000811415612d9757612d9283836000613b04565b613998565b600e60009054906101000a900460ff161561345a57612db4611c41565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e225750612df2611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e95575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eae5750600660149054906101000a900460ff16155b1561345957600e60019054906101000a900460ff16612fa857602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e906154d1565b60405180910390fd5b5b601060009054906101000a900460ff161561317057612fc5611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561304c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561316f5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190615589565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132135750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba57600b5481111561325d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132549061561b565b60405180910390fd5b600d54613269836118e9565b826132749190614e35565b11156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615687565b60405180910390fd5b613458565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335d5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ac57600b548111156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e90615719565b60405180910390fd5b613457565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345657600d54613409836118e9565b826134149190614e35565b1115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90615687565b60405180910390fd5b5b5b5b5b5b6000613465306118e9565b90506000600c54821015905080801561348a5750600e60029054906101000a900460ff165b80156134a35750600660149054906101000a900460ff16155b80156134f95750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e9576001600660146101000a81548160ff0219169083151502179055506135cd613d85565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061369f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a957600090505b6000811561398857602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370c57506000601854115b1561380c57613739606461372b6018548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a548261374c9190614aec565b6137569190614b75565b601e60008282546137679190614e35565b92505081905550601854601b548261377f9190614aec565b6137899190614b75565b601f600082825461379a9190614e35565b92505081905550601854601954826137b29190614aec565b6137bc9190614b75565b601d60008282546137cd9190614e35565b92505081905550601854601c54826137e59190614aec565b6137ef9190614b75565b602060008282546138009190614e35565b92505081905550613964565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386757506000601354115b156139635761389460646138866013548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601354601554826138a79190614aec565b6138b19190614b75565b601e60008282546138c29190614e35565b92505081905550601354601654826138da9190614aec565b6138e49190614b75565b601f60008282546138f59190614e35565b925050819055506013546014548261390d9190614aec565b6139179190614b75565b601d60008282546139289190614e35565b92505081905550601354601754826139409190614aec565b61394a9190614b75565b6020600082825461395b9190614e35565b925050819055505b5b600081111561397957613978873083613b04565b5b80856139859190615739565b94505b613993878787613b04565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6b90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdb906153f9565b60405180910390fd5b613bef838383614172565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6c906157df565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d089190614e35565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6c9190614750565b60405180910390a3613d7f848484614177565b50505050565b6000613d90306118e9565b90506000602054601f54601d54601e54613daa9190614e35565b613db49190614e35565b613dbe9190614e35565b9050600080831480613dd05750600082145b15613ddd57505050614144565b6014600c54613dec9190614aec565b831115613e05576014600c54613e029190614aec565b92505b6000600283601e5486613e189190614aec565b613e229190614b75565b613e2c9190614b75565b90506000613e43828661417c90919063ffffffff16565b90506000479050613e5382614192565b6000613e68824761417c90919063ffffffff16565b90506000613e9387613e85601d548561414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ebe88613eb0601f548661414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ee989613edb6020548761414690919063ffffffff16565b61415c90919063ffffffff16565b9050600081838587613efb9190615739565b613f059190615739565b613f0f9190615739565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f7790615830565b60006040518083038185875af1925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b505080995050600088118015613fcf5750600081115b1561401c57613fde88826143cf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161401393929190615845565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406290615830565b60006040518083038185875af1925050503d806000811461409f576040519150601f19603f3d011682016040523d82523d6000602084013e6140a4565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f090615830565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b50508099505050505050505050505050505b565b600081836141549190614aec565b905092915050565b6000818361416a9190614b75565b905092915050565b505050565b505050565b6000818361418a9190615739565b905092915050565b6000600267ffffffffffffffff8111156141af576141ae61587c565b5b6040519080825280602002602001820160405280156141dd5781602001602082028036833780820191505090505b50905030816000815181106141f5576141f4614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142be91906158c0565b816001815181106142d2576142d1614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614337307f000000000000000000000000000000000000000000000000000000000000000084612a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143999594939291906159e6565b600060405180830381600087803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505050505050565b6143fa307f000000000000000000000000000000000000000000000000000000000000000084612a45565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448196959493929190615a40565b60606040518083038185885af115801561449f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c49190615ab6565b5050505050565b600080fd5b600080fd5b6000819050919050565b6144e8816144d5565b81146144f357600080fd5b50565b600081359050614505816144df565b92915050565b600060208284031215614521576145206144cb565b5b600061452f848285016144f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b83811115614581576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a382614538565b6145ad8185614543565b93506145bd818560208601614554565b6145c681614587565b840191505092915050565b600060208201905081810360008301526145eb8184614598565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061461e826145f3565b9050919050565b61462e81614613565b811461463957600080fd5b50565b60008135905061464b81614625565b92915050565b60008060408385031215614668576146676144cb565b5b60006146768582860161463c565b9250506020614687858286016144f6565b9150509250929050565b60008115159050919050565b6146a681614691565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000819050919050565b60006146ec6146e76146e2846145f3565b6146c7565b6145f3565b9050919050565b60006146fe826146d1565b9050919050565b6000614710826146f3565b9050919050565b61472081614705565b82525050565b600060208201905061473b6000830184614717565b92915050565b61474a816144d5565b82525050565b60006020820190506147656000830184614741565b92915050565b600080600060608486031215614784576147836144cb565b5b60006147928682870161463c565b93505060206147a38682870161463c565b92505060406147b4868287016144f6565b9150509250925092565b6147c781614613565b82525050565b60006020820190506147e260008301846147be565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261480d5761480c6147e8565b5b8235905067ffffffffffffffff81111561482a576148296147ed565b5b602083019150836020820283011115614846576148456147f2565b5b9250929050565b61485681614691565b811461486157600080fd5b50565b6000813590506148738161484d565b92915050565b600080600060408486031215614892576148916144cb565b5b600084013567ffffffffffffffff8111156148b0576148af6144d0565b5b6148bc868287016147f7565b935093505060206148cf86828701614864565b9150509250925092565b600080600080608085870312156148f3576148f26144cb565b5b6000614901878288016144f6565b9450506020614912878288016144f6565b9350506040614923878288016144f6565b9250506060614934878288016144f6565b91505092959194509250565b600060ff82169050919050565b61495681614940565b82525050565b6000602082019050614971600083018461494d565b92915050565b60006020828403121561498d5761498c6144cb565b5b600061499b8482850161463c565b91505092915050565b600080604083850312156149bb576149ba6144cb565b5b60006149c98582860161463c565b92505060206149da85828601614864565b9150509250929050565b6000602082840312156149fa576149f96144cb565b5b6000614a0884828501614864565b91505092915050565b60008060408385031215614a2857614a276144cb565b5b6000614a368582860161463c565b9250506020614a478582860161463c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a87602083614543565b9150614a9282614a51565b602082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614af7826144d5565b9150614b02836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3b57614b3a614abd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b80826144d5565b9150614b8b836144d5565b925082614b9b57614b9a614b46565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614c02602983614543565b9150614c0d82614ba6565b604082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf5602483614543565b9150614d0082614c99565b604082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d87602883614543565b9150614d9282614d2b565b604082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614df7826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2a57614e29614abd565b5b600182019050919050565b6000614e40826144d5565b9150614e4b836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8057614e7f614abd565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ec1600e83614543565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f53603983614543565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602583614543565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615077603583614543565b91506150828261501b565b604082019050919050565b600060208201905081810360008301526150a68161506a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615109603483614543565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061519b602683614543565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522d602483614543565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bf602283614543565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615351602583614543565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e3602383614543565b91506153ee82615387565b604082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b600061544f600e83614543565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154bb601683614543565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615573604983614543565b915061557e826154f1565b606082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615605602f83614543565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615671601383614543565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615703603083614543565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000615744826144d5565b915061574f836144d5565b92508282101561576257615761614abd565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157c9602683614543565b91506157d48261576d565b604082019050919050565b600060208201905081810360008301526157f8816157bc565b9050919050565b600081905092915050565b50565b600061581a6000836157ff565b91506158258261580a565b600082019050919050565b600061583b8261580d565b9150819050919050565b600060608201905061585a6000830186614741565b6158676020830185614741565b6158746040830184614741565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506158ba81614625565b92915050565b6000602082840312156158d6576158d56144cb565b5b60006158e4848285016158ab565b91505092915050565b6000819050919050565b600061591261590d615908846158ed565b6146c7565b6144d5565b9050919050565b615922816158f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61595d81614613565b82525050565b600061596f8383615954565b60208301905092915050565b6000602082019050919050565b600061599382615928565b61599d8185615933565b93506159a883615944565b8060005b838110156159d95781516159c08882615963565b97506159cb8361597b565b9250506001810190506159ac565b5085935050505092915050565b600060a0820190506159fb6000830188614741565b615a086020830187615919565b8181036040830152615a1a8186615988565b9050615a2960608301856147be565b615a366080830184614741565b9695505050505050565b600060c082019050615a5560008301896147be565b615a626020830188614741565b615a6f6040830187615919565b615a7c6060830186615919565b615a8960808301856147be565b615a9660a0830184614741565b979650505050505050565b600081519050615ab0816144df565b92915050565b600080600060608486031215615acf57615ace6144cb565b5b6000615add86828701615aa1565b9350506020615aee86828701615aa1565b9250506040615aff86828701615aa1565b915050925092509256fea26469706673582212207c2c3cd257d224c79bd3c853312cc164daeb686e4a34146f47df3b82b86a508464736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806392aa3773116101f2578063d46980161161010d578063e884f260116100a0578063f63743421161006f578063f637434214610e7b578063f8b45b0514610ea6578063fb002c9714610ed1578063fd72e22a14610efc576103ce565b8063e884f26014610dd1578063ef8700e514610dfc578063f11a24d314610e27578063f2fde38b14610e52576103ce565b8063e2f45605116100dc578063e2f4560514610d15578063e596219514610d40578063e7ad9fcd14610d7d578063e80177c714610da6576103ce565b8063d469801614610c45578063d85ba06314610c70578063dd62ed3e14610c9b578063e1bc339414610cd8576103ce565b8063c024666811610185578063c876d0b911610154578063c876d0b914610b89578063d1b89d4e14610bb4578063d257b34f14610bdd578063d347be6a14610c1a576103ce565b8063c024666814610ae1578063c04a541414610b0a578063c3f70b5214610b35578063c79c04fd14610b60576103ce565b8063a9059cbb116101c1578063a9059cbb14610a11578063b204141114610a4e578063b62496f514610a79578063bbc0c74214610ab6576103ce565b806392aa37731461095757806395d89b41146109805780639a7a23d6146109ab578063a457c2d7146109d4576103ce565b806349bd5a5e116102e257806370a082311161027557806376b5aa931161024457806376b5aa93146108c15780638a8c523c146108ec5780638da5cb5b14610903578063924de9b71461092e576103ce565b806370a0823114610819578063715018a614610856578063751039fc1461086d5780637571336a14610898576103ce565b80635a139dd4116102b15780635a139dd41461076f5780636a486a8e1461079a5780636aebf627146107c55780636ddd1713146107ee576103ce565b806349bd5a5e146106b15780634a62bb65146106dc5780634f77f6c0146107075780634fbee19314610732576103ce565b8063229f2c5f1161035a5780632e6ed7ef116103295780632e6ed7ef146105f5578063313ce5671461061e578063377ad127146106495780633950935114610674576103ce565b8063229f2c5f1461053957806323b872dd1461056457806327c8f835146105a15780632cefac29146105cc576103ce565b806318160ddd1161039657806318160ddd1461048f57806318a94cf1146104ba5780631a8145bb146104e55780631c499ab014610510576103ce565b80630517d13d146103d357806306fdde03146103fc578063095ea7b3146104275780631694505e14610464576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103fa60048036038101906103f5919061450b565b610f27565b005b34801561040857600080fd5b50610411611036565b60405161041e91906145d1565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190614651565b6110c8565b60405161045b91906146ac565b60405180910390f35b34801561047057600080fd5b506104796110e6565b6040516104869190614726565b60405180910390f35b34801561049b57600080fd5b506104a461110a565b6040516104b19190614750565b60405180910390f35b3480156104c657600080fd5b506104cf611114565b6040516104dc9190614750565b60405180910390f35b3480156104f157600080fd5b506104fa61111a565b6040516105079190614750565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061450b565b611120565b005b34801561054557600080fd5b5061054e61122f565b60405161055b9190614750565b60405180910390f35b34801561057057600080fd5b5061058b6004803603810190610586919061476b565b611235565b60405161059891906146ac565b60405180910390f35b3480156105ad57600080fd5b506105b661132d565b6040516105c391906147cd565b60405180910390f35b3480156105d857600080fd5b506105f360048036038101906105ee9190614879565b611333565b005b34801561060157600080fd5b5061061c600480360381019061061791906148d9565b611542565b005b34801561062a57600080fd5b50610633611620565b604051610640919061495c565b60405180910390f35b34801561065557600080fd5b5061065e611629565b60405161066b91906147cd565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190614651565b61164f565b6040516106a891906146ac565b60405180910390f35b3480156106bd57600080fd5b506106c66116fb565b6040516106d391906147cd565b60405180910390f35b3480156106e857600080fd5b506106f161171f565b6040516106fe91906146ac565b60405180910390f35b34801561071357600080fd5b5061071c611732565b6040516107299190614750565b60405180910390f35b34801561073e57600080fd5b5061075960048036038101906107549190614977565b611738565b60405161076691906146ac565b60405180910390f35b34801561077b57600080fd5b5061078461178e565b6040516107919190614750565b60405180910390f35b3480156107a657600080fd5b506107af611794565b6040516107bc9190614750565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190614977565b61179a565b005b3480156107fa57600080fd5b506108036118d6565b60405161081091906146ac565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190614977565b6118e9565b60405161084d9190614750565b60405180910390f35b34801561086257600080fd5b5061086b611931565b005b34801561087957600080fd5b506108826119b9565b60405161088f91906146ac565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906149a4565b611a59565b005b3480156108cd57600080fd5b506108d6611b30565b6040516108e39190614750565b60405180910390f35b3480156108f857600080fd5b50610901611b36565b005b34801561090f57600080fd5b50610918611c41565b60405161092591906147cd565b60405180910390f35b34801561093a57600080fd5b50610955600480360381019061095091906149e4565b611c6b565b005b34801561096357600080fd5b5061097e60048036038101906109799190614977565b611d04565b005b34801561098c57600080fd5b50610995611e40565b6040516109a291906145d1565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd91906149a4565b611ed2565b005b3480156109e057600080fd5b506109fb60048036038101906109f69190614651565b611feb565b604051610a0891906146ac565b60405180910390f35b348015610a1d57600080fd5b50610a386004803603810190610a339190614651565b6120d6565b604051610a4591906146ac565b60405180910390f35b348015610a5a57600080fd5b50610a636120f4565b604051610a709190614750565b60405180910390f35b348015610a8557600080fd5b50610aa06004803603810190610a9b9190614977565b6120fa565b604051610aad91906146ac565b60405180910390f35b348015610ac257600080fd5b50610acb61211a565b604051610ad891906146ac565b60405180910390f35b348015610aed57600080fd5b50610b086004803603810190610b0391906149a4565b61212d565b005b348015610b1657600080fd5b50610b1f612252565b604051610b2c91906147cd565b60405180910390f35b348015610b4157600080fd5b50610b4a612278565b604051610b579190614750565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b829190614977565b61227e565b005b348015610b9557600080fd5b50610b9e6123ba565b604051610bab91906146ac565b60405180910390f35b348015610bc057600080fd5b50610bdb6004803603810190610bd69190614977565b6123cd565b005b348015610be957600080fd5b50610c046004803603810190610bff919061450b565b612509565b604051610c1191906146ac565b60405180910390f35b348015610c2657600080fd5b50610c2f61265e565b604051610c3c9190614750565b60405180910390f35b348015610c5157600080fd5b50610c5a612664565b604051610c6791906147cd565b60405180910390f35b348015610c7c57600080fd5b50610c8561268a565b604051610c929190614750565b60405180910390f35b348015610ca757600080fd5b50610cc26004803603810190610cbd9190614a11565b612690565b604051610ccf9190614750565b60405180910390f35b348015610ce457600080fd5b50610cff6004803603810190610cfa9190614977565b612717565b604051610d0c91906146ac565b60405180910390f35b348015610d2157600080fd5b50610d2a612737565b604051610d379190614750565b60405180910390f35b348015610d4c57600080fd5b50610d676004803603810190610d629190614977565b61273d565b604051610d7491906146ac565b60405180910390f35b348015610d8957600080fd5b50610da46004803603810190610d9f91906148d9565b61275d565b005b348015610db257600080fd5b50610dbb61283b565b604051610dc891906147cd565b60405180910390f35b348015610ddd57600080fd5b50610de6612861565b604051610df391906146ac565b60405180910390f35b348015610e0857600080fd5b50610e11612901565b604051610e1e9190614750565b60405180910390f35b348015610e3357600080fd5b50610e3c612907565b604051610e499190614750565b60405180910390f35b348015610e5e57600080fd5b50610e796004803603810190610e749190614977565b61290d565b005b348015610e8757600080fd5b50610e90612a05565b604051610e9d9190614750565b60405180910390f35b348015610eb257600080fd5b50610ebb612a0b565b604051610ec89190614750565b60405180910390f35b348015610edd57600080fd5b50610ee6612a11565b604051610ef39190614750565b60405180910390f35b348015610f0857600080fd5b50610f11612a17565b604051610f1e91906147cd565b60405180910390f35b610f2f612a3d565b73ffffffffffffffffffffffffffffffffffffffff16610f4d611c41565b73ffffffffffffffffffffffffffffffffffffffff1614610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a9d565b60405180910390fd5b670de0b6b3a76400006103e86001610fb961110a565b610fc39190614aec565b610fcd9190614b75565b610fd79190614b75565b811015611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614c18565b60405180910390fd5b670de0b6b3a76400008161102d9190614aec565b600b8190555050565b60606003805461104590614c67565b80601f016020809104026020016040519081016040528092919081815260200182805461107190614c67565b80156110be5780601f10611093576101008083540402835291602001916110be565b820191906000526020600020905b8154815290600101906020018083116110a157829003601f168201915b5050505050905090565b60006110dc6110d5612a3d565b8484612a45565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b601b5481565b601e5481565b611128612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611146611c41565b73ffffffffffffffffffffffffffffffffffffffff161461119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a9d565b60405180910390fd5b670de0b6b3a76400006103e860056111b261110a565b6111bc9190614aec565b6111c69190614b75565b6111d09190614b75565b811015611212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120990614d0b565b60405180910390fd5b670de0b6b3a7640000816112269190614aec565b600d8190555050565b60195481565b6000611242848484612c10565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061128d612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490614d9d565b60405180910390fd5b61132185611319612a3d565b858403612a45565b60019150509392505050565b61dead81565b61133b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611359611c41565b73ffffffffffffffffffffffffffffffffffffffff16146113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690614a9d565b60405180910390fd5b60005b8383905081101561153c5760008484838181106113d2576113d1614dbd565b5b90506020020160208101906113e79190614977565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156114735750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156114cb57507f0000000000000000000000007ae87af36975444a17d2192c191a324d4f88b7aa73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156115285782601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061153490614dec565b9150506113b2565b50505050565b61154a612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611568611c41565b73ffffffffffffffffffffffffffffffffffffffff16146115be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b590614a9d565b60405180910390fd5b836014819055508260158190555081601681905550806017819055506017546016546015546014546115f09190614e35565b6115fa9190614e35565b6116049190614e35565b6013819055506028601354111561161a57600080fd5b50505050565b60006012905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116f161165c612a3d565b84846001600061166a612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ec9190614e35565b612a45565b6001905092915050565b7f0000000000000000000000007ae87af36975444a17d2192c191a324d4f88b7aa81565b600e60009054906101000a900460ff1681565b601c5481565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b60185481565b6117a2612a3d565b73ffffffffffffffffffffffffffffffffffffffff166117c0611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d90614a9d565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe1bb4a3e2b2b99353f84d73df9e136cfe17627ed07083a649101dfa6bde8459c60405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611939612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611957611c41565b73ffffffffffffffffffffffffffffffffffffffff16146119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490614a9d565b60405180910390fd5b6119b7600061399d565b565b60006119c3612a3d565b73ffffffffffffffffffffffffffffffffffffffff166119e1611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614a9d565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b611a61612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611a7f611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90614a9d565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d5481565b611b3e612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611b5c611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614a9d565b60405180910390fd5b600e60019054906101000a900460ff1615611c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf990614ed7565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550436011819055506001600e60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c73612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611c91611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90614a9d565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b611d0c612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611d2a611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7790614a9d565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060048054611e4f90614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7b90614c67565b8015611ec85780601f10611e9d57610100808354040283529160200191611ec8565b820191906000526020600020905b815481529060010190602001808311611eab57829003601f168201915b5050505050905090565b611eda612a3d565b73ffffffffffffffffffffffffffffffffffffffff16611ef8611c41565b73ffffffffffffffffffffffffffffffffffffffff1614611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4590614a9d565b60405180910390fd5b7f0000000000000000000000007ae87af36975444a17d2192c191a324d4f88b7aa73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614f69565b60405180910390fd5b611fe78282613a63565b5050565b60008060016000611ffa612a3d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90614ffb565b60405180910390fd5b6120cb6120c2612a3d565b85858403612a45565b600191505092915050565b60006120ea6120e3612a3d565b8484612c10565b6001905092915050565b60165481565b60236020528060005260406000206000915054906101000a900460ff1681565b600e60019054906101000a900460ff1681565b612135612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612153611c41565b73ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614a9d565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161224691906146ac565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b612286612a3d565b73ffffffffffffffffffffffffffffffffffffffff166122a4611c41565b73ffffffffffffffffffffffffffffffffffffffff16146122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f190614a9d565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b6123d5612a3d565b73ffffffffffffffffffffffffffffffffffffffff166123f3611c41565b73ffffffffffffffffffffffffffffffffffffffff1614612449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244090614a9d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f1be79b363311a081e3513abd6064d09dc657018011f7ea0d62ceff4e3094d0b260405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612513612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612531611c41565b73ffffffffffffffffffffffffffffffffffffffff1614612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e90614a9d565b60405180910390fd5b620186a0600161259561110a565b61259f9190614aec565b6125a99190614b75565b8210156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e29061508d565b60405180910390fd5b6103e860056125f861110a565b6126029190614aec565b61260c9190614b75565b82111561264e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126459061511f565b60405180910390fd5b81600c8190555060019050919050565b60145481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c5481565b60126020528060005260406000206000915054906101000a900460ff1681565b612765612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612783611c41565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614a9d565b60405180910390fd5b8360198190555082601a8190555081601b8190555080601c81905550601c54601b54601a5460195461280b9190614e35565b6128159190614e35565b61281f9190614e35565b6018819055506028601854111561283557600080fd5b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061286b612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612889611c41565b73ffffffffffffffffffffffffffffffffffffffff16146128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d690614a9d565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b601f5481565b60155481565b612915612a3d565b73ffffffffffffffffffffffffffffffffffffffff16612933611c41565b73ffffffffffffffffffffffffffffffffffffffff1614612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f0906151b1565b60405180910390fd5b612a028161399d565b50565b601a5481565b600d5481565b60205481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aac90615243565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c906152d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c039190614750565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce7906153f9565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7490615465565b60405180910390fd5b6000811415612d9757612d9283836000613b04565b613998565b600e60009054906101000a900460ff161561345a57612db4611c41565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e225750612df2611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e95575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eae5750600660149054906101000a900460ff16155b1561345957600e60019054906101000a900460ff16612fa857602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9e906154d1565b60405180910390fd5b5b601060009054906101000a900460ff161561317057612fc5611c41565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561304c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130a457507f0000000000000000000000007ae87af36975444a17d2192c191a324d4f88b7aa73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561316f5743600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061312a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312190615589565b60405180910390fd5b43600f60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132135750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba57600b5481111561325d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132549061561b565b60405180910390fd5b600d54613269836118e9565b826132749190614e35565b11156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615687565b60405180910390fd5b613458565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335d5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ac57600b548111156133a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339e90615719565b60405180910390fd5b613457565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345657600d54613409836118e9565b826134149190614e35565b1115613455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344c90615687565b60405180910390fd5b5b5b5b5b5b6000613465306118e9565b90506000600c54821015905080801561348a5750600e60029054906101000a900460ff165b80156134a35750600660149054906101000a900460ff16155b80156134f95750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561354f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135a55750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135e9576001600660146101000a81548160ff0219169083151502179055506135cd613d85565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061369f5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136a957600090505b6000811561398857602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370c57506000601854115b1561380c57613739606461372b6018548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601854601a548261374c9190614aec565b6137569190614b75565b601e60008282546137679190614e35565b92505081905550601854601b548261377f9190614aec565b6137899190614b75565b601f600082825461379a9190614e35565b92505081905550601854601954826137b29190614aec565b6137bc9190614b75565b601d60008282546137cd9190614e35565b92505081905550601854601c54826137e59190614aec565b6137ef9190614b75565b602060008282546138009190614e35565b92505081905550613964565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386757506000601354115b156139635761389460646138866013548861414690919063ffffffff16565b61415c90919063ffffffff16565b9050601354601554826138a79190614aec565b6138b19190614b75565b601e60008282546138c29190614e35565b92505081905550601354601654826138da9190614aec565b6138e49190614b75565b601f60008282546138f59190614e35565b925050819055506013546014548261390d9190614aec565b6139179190614b75565b601d60008282546139289190614e35565b92505081905550601354601754826139409190614aec565b61394a9190614b75565b6020600082825461395b9190614e35565b925050819055505b5b600081111561397957613978873083613b04565b5b80856139859190615739565b94505b613993878787613b04565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6b90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdb906153f9565b60405180910390fd5b613bef838383614172565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c6c906157df565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d089190614e35565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6c9190614750565b60405180910390a3613d7f848484614177565b50505050565b6000613d90306118e9565b90506000602054601f54601d54601e54613daa9190614e35565b613db49190614e35565b613dbe9190614e35565b9050600080831480613dd05750600082145b15613ddd57505050614144565b6014600c54613dec9190614aec565b831115613e05576014600c54613e029190614aec565b92505b6000600283601e5486613e189190614aec565b613e229190614b75565b613e2c9190614b75565b90506000613e43828661417c90919063ffffffff16565b90506000479050613e5382614192565b6000613e68824761417c90919063ffffffff16565b90506000613e9387613e85601d548561414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ebe88613eb0601f548661414690919063ffffffff16565b61415c90919063ffffffff16565b90506000613ee989613edb6020548761414690919063ffffffff16565b61415c90919063ffffffff16565b9050600081838587613efb9190615739565b613f059190615739565b613f0f9190615739565b90506000601e819055506000601d819055506000601f819055506000602081905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f7790615830565b60006040518083038185875af1925050503d8060008114613fb4576040519150601f19603f3d011682016040523d82523d6000602084013e613fb9565b606091505b505080995050600088118015613fcf5750600081115b1561401c57613fde88826143cf565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e5460405161401393929190615845565b60405180910390a15b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406290615830565b60006040518083038185875af1925050503d806000811461409f576040519150601f19603f3d011682016040523d82523d6000602084013e6140a4565b606091505b505080995050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516140f090615830565b60006040518083038185875af1925050503d806000811461412d576040519150601f19603f3d011682016040523d82523d6000602084013e614132565b606091505b50508099505050505050505050505050505b565b600081836141549190614aec565b905092915050565b6000818361416a9190614b75565b905092915050565b505050565b505050565b6000818361418a9190615739565b905092915050565b6000600267ffffffffffffffff8111156141af576141ae61587c565b5b6040519080825280602002602001820160405280156141dd5781602001602082028036833780820191505090505b50905030816000815181106141f5576141f4614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561429a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142be91906158c0565b816001815181106142d2576142d1614dbd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614337307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143999594939291906159e6565b600060405180830381600087803b1580156143b357600080fd5b505af11580156143c7573d6000803e3d6000fd5b505050505050565b6143fa307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a45565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448196959493929190615a40565b60606040518083038185885af115801561449f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c49190615ab6565b5050505050565b600080fd5b600080fd5b6000819050919050565b6144e8816144d5565b81146144f357600080fd5b50565b600081359050614505816144df565b92915050565b600060208284031215614521576145206144cb565b5b600061452f848285016144f6565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614572578082015181840152602081019050614557565b83811115614581576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a382614538565b6145ad8185614543565b93506145bd818560208601614554565b6145c681614587565b840191505092915050565b600060208201905081810360008301526145eb8184614598565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061461e826145f3565b9050919050565b61462e81614613565b811461463957600080fd5b50565b60008135905061464b81614625565b92915050565b60008060408385031215614668576146676144cb565b5b60006146768582860161463c565b9250506020614687858286016144f6565b9150509250929050565b60008115159050919050565b6146a681614691565b82525050565b60006020820190506146c1600083018461469d565b92915050565b6000819050919050565b60006146ec6146e76146e2846145f3565b6146c7565b6145f3565b9050919050565b60006146fe826146d1565b9050919050565b6000614710826146f3565b9050919050565b61472081614705565b82525050565b600060208201905061473b6000830184614717565b92915050565b61474a816144d5565b82525050565b60006020820190506147656000830184614741565b92915050565b600080600060608486031215614784576147836144cb565b5b60006147928682870161463c565b93505060206147a38682870161463c565b92505060406147b4868287016144f6565b9150509250925092565b6147c781614613565b82525050565b60006020820190506147e260008301846147be565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261480d5761480c6147e8565b5b8235905067ffffffffffffffff81111561482a576148296147ed565b5b602083019150836020820283011115614846576148456147f2565b5b9250929050565b61485681614691565b811461486157600080fd5b50565b6000813590506148738161484d565b92915050565b600080600060408486031215614892576148916144cb565b5b600084013567ffffffffffffffff8111156148b0576148af6144d0565b5b6148bc868287016147f7565b935093505060206148cf86828701614864565b9150509250925092565b600080600080608085870312156148f3576148f26144cb565b5b6000614901878288016144f6565b9450506020614912878288016144f6565b9350506040614923878288016144f6565b9250506060614934878288016144f6565b91505092959194509250565b600060ff82169050919050565b61495681614940565b82525050565b6000602082019050614971600083018461494d565b92915050565b60006020828403121561498d5761498c6144cb565b5b600061499b8482850161463c565b91505092915050565b600080604083850312156149bb576149ba6144cb565b5b60006149c98582860161463c565b92505060206149da85828601614864565b9150509250929050565b6000602082840312156149fa576149f96144cb565b5b6000614a0884828501614864565b91505092915050565b60008060408385031215614a2857614a276144cb565b5b6000614a368582860161463c565b9250506020614a478582860161463c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a87602083614543565b9150614a9282614a51565b602082019050919050565b60006020820190508181036000830152614ab681614a7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614af7826144d5565b9150614b02836144d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b3b57614b3a614abd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b80826144d5565b9150614b8b836144d5565b925082614b9b57614b9a614b46565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614c02602983614543565b9150614c0d82614ba6565b604082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cf5602483614543565b9150614d0082614c99565b604082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d87602883614543565b9150614d9282614d2b565b604082019050919050565b60006020820190508181036000830152614db681614d7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614df7826144d5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e2a57614e29614abd565b5b600182019050919050565b6000614e40826144d5565b9150614e4b836144d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8057614e7f614abd565b5b828201905092915050565b7f546f6b656e206c61756e63686564000000000000000000000000000000000000600082015250565b6000614ec1600e83614543565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f53603983614543565b9150614f5e82614ef7565b604082019050919050565b60006020820190508181036000830152614f8281614f46565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fe5602583614543565b9150614ff082614f89565b604082019050919050565b6000602082019050818103600083015261501481614fd8565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615077603583614543565b91506150828261501b565b604082019050919050565b600060208201905081810360008301526150a68161506a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615109603483614543565b9150615114826150ad565b604082019050919050565b60006020820190508181036000830152615138816150fc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061519b602683614543565b91506151a68261513f565b604082019050919050565b600060208201905081810360008301526151ca8161518e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061522d602483614543565b9150615238826151d1565b604082019050919050565b6000602082019050818103600083015261525c81615220565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006152bf602283614543565b91506152ca82615263565b604082019050919050565b600060208201905081810360008301526152ee816152b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615351602583614543565b915061535c826152f5565b604082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006153e3602383614543565b91506153ee82615387565b604082019050919050565b60006020820190508181036000830152615412816153d6565b9050919050565b7f536e6970657220626c6f636b6564000000000000000000000000000000000000600082015250565b600061544f600e83614543565b915061545a82615419565b602082019050919050565b6000602082019050818103600083015261547e81615442565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006154bb601683614543565b91506154c682615485565b602082019050919050565b600060208201905081810360008301526154ea816154ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615573604983614543565b915061557e826154f1565b606082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b6000615605602f83614543565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615671601383614543565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b6000615703603083614543565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b6000615744826144d5565b915061574f836144d5565b92508282101561576257615761614abd565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006157c9602683614543565b91506157d48261576d565b604082019050919050565b600060208201905081810360008301526157f8816157bc565b9050919050565b600081905092915050565b50565b600061581a6000836157ff565b91506158258261580a565b600082019050919050565b600061583b8261580d565b9150819050919050565b600060608201905061585a6000830186614741565b6158676020830185614741565b6158746040830184614741565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506158ba81614625565b92915050565b6000602082840312156158d6576158d56144cb565b5b60006158e4848285016158ab565b91505092915050565b6000819050919050565b600061591261590d615908846158ed565b6146c7565b6144d5565b9050919050565b615922816158f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61595d81614613565b82525050565b600061596f8383615954565b60208301905092915050565b6000602082019050919050565b600061599382615928565b61599d8185615933565b93506159a883615944565b8060005b838110156159d95781516159c08882615963565b97506159cb8361597b565b9250506001810190506159ac565b5085935050505092915050565b600060a0820190506159fb6000830188614741565b615a086020830187615919565b8181036040830152615a1a8186615988565b9050615a2960608301856147be565b615a366080830184614741565b9695505050505050565b600060c082019050615a5560008301896147be565b615a626020830188614741565b615a6f6040830187615919565b615a7c6060830186615919565b615a8960808301856147be565b615a9660a0830184614741565b979650505050505050565b600081519050615ab0816144df565b92915050565b600080600060608486031215615acf57615ace6144cb565b5b6000615add86828701615aa1565b9350506020615aee86828701615aa1565b9250506040615aff86828701615aa1565b915050925092509256fea26469706673582212207c2c3cd257d224c79bd3c853312cc164daeb686e4a34146f47df3b82b86a508464736f6c634300080a0033

Deployed Bytecode Sourcemap

15119:18158:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21369:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2816:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3730:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15196:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3137:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16388:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16504;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21642:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16317:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3907:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15299:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30906:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22265:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3036:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15359:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4407:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15254:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15726:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16428:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24733:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16242:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16282:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24325:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15806:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3253:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;938:103;;;;;;;;;;;;;:::i;:::-;;20477:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21900:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16469:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20224:201;;;;;;;;;;;;;:::i;:::-;;715:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22157:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24517:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2924:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23439:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4630:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3388:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16203:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16754:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15766:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23249:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15501:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15617:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24128:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15972:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23947:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20864:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16134:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15540:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16100:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3571:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16688:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15653:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16052:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22751:490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15469:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20659:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16544:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16166:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1049:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16350:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15693:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16586:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15577:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21369:265;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21508:4:::1;21500;21495:1;21479:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21478:26;;;;:::i;:::-;21477:35;;;;:::i;:::-;21467:6;:45;;21445:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;21619:6;21609;:17;;;;:::i;:::-;21592:14;:34;;;;21369:265:::0;:::o;2816:100::-;2870:13;2903:5;2896:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2816:100;:::o;3730:169::-;3813:4;3830:39;3839:12;:10;:12::i;:::-;3853:7;3862:6;3830:8;:39::i;:::-;3887:4;3880:11;;3730:169;;;;:::o;15196:51::-;;;:::o;3137:108::-;3198:7;3225:12;;3218:19;;3137:108;:::o;16388:33::-;;;;:::o;16504:::-;;;;:::o;21642:250::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21776:4:::1;21768;21763:1;21747:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21746:26;;;;:::i;:::-;21745:35;;;;:::i;:::-;21735:6;:45;;21713:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;21877:6;21867;:17;;;;:::i;:::-;21855:9;:29;;;;21642:250:::0;:::o;16317:26::-;;;;:::o;3907:492::-;4047:4;4064:36;4074:6;4082:9;4093:6;4064:9;:36::i;:::-;4113:24;4140:11;:19;4152:6;4140:19;;;;;;;;;;;;;;;:33;4160:12;:10;:12::i;:::-;4140:33;;;;;;;;;;;;;;;;4113:60;;4212:6;4192:16;:26;;4184:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4299:57;4308:6;4316:12;:10;:12::i;:::-;4349:6;4330:16;:25;4299:8;:57::i;:::-;4387:4;4380:11;;;3907:492;;;;;:::o;15299:53::-;15345:6;15299:53;:::o;30906:386::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31005:9:::1;31001:284;31021:8;;:15;;31019:1;:17;31001:284;;;31056:15;31074:8;;31083:1;31074:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;31056:29;;31122:4;31103:24;;:7;:24;;;;:67;;;;;31159:11;;;;;;;;;;;31148:22;;:7;:22;;;;31103:67;:121;;;;;31210:13;31191:33;;:7;:33;;;;31103:121;31100:173;;;31262:11;31243:7;:16;31251:7;31243:16;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;31100:173;31041:244;31037:3;;;;;:::i;:::-;;;;31001:284;;;;30906:386:::0;;;:::o;22265:478::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22464:8:::1;22451:10;:21;;;;22501:13;22483:15;:31;;;;22545:15;22525:17;:35;;;;22590:14;22571:16;:33;;;;22681:16;;22661:17;;22643:15;;22630:10;;:28;;;;:::i;:::-;:48;;;;:::i;:::-;:67;;;;:::i;:::-;22615:12;:82;;;;22732:2;22716:12;;:18;;22708:27;;;::::0;::::1;;22265:478:::0;;;;:::o;3036:93::-;3094:5;3119:2;3112:9;;3036:93;:::o;15359:71::-;;;;;;;;;;;;;:::o;4407:215::-;4495:4;4512:80;4521:12;:10;:12::i;:::-;4535:7;4581:10;4544:11;:25;4556:12;:10;:12::i;:::-;4544:25;;;;;;;;;;;;;;;:34;4570:7;4544:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4512:8;:80::i;:::-;4610:4;4603:11;;4407:215;;;;:::o;15254:38::-;;;:::o;15726:33::-;;;;;;;;;;;;;:::o;16428:32::-;;;;:::o;24733:126::-;24799:4;24823:19;:28;24843:7;24823:28;;;;;;;;;;;;;;;;;;;;;;;;;24816:35;;24733:126;;;:::o;16242:31::-;;;;:::o;16282:28::-;;;;:::o;24325:184::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24445:16:::1;;;;;;;;;;;24410:52;;24434:9;24410:52;;;;;;;;;;;;24492:9;24473:16;;:28;;;;;;;;;;;;;;;;;;24325:184:::0;:::o;15806:31::-;;;;;;;;;;;;;:::o;3253:127::-;3327:7;3354:9;:18;3364:7;3354:18;;;;;;;;;;;;;;;;3347:25;;3253:127;;;:::o;938:103::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1003:30:::1;1030:1;1003:18;:30::i;:::-;938:103::o:0;20477:121::-;20529:4;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20563:5:::1;20546:14;;:22;;;;;;;;;;;;;;;;;;20586:4;20579:11;;20477:121:::0;:::o;21900:161::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22049:4:::1;22013:25;:33;22039:6;22013:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;21900:161:::0;;:::o;16469:28::-;;;;:::o;20224:201::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20288:13:::1;;;;;;;;;;;20287:14;20279:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20347:4;20331:13;;:20;;;;;;;;;;;;;;;;;;20376:12;20362:11;:26;;;;20413:4;20399:11;;:18;;;;;;;;;;;;;;;;;;20224:201::o:0;715:87::-;761:7;788:6;;;;;;;;;;;781:13;;715:87;:::o;22157:100::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22242:7:::1;22228:11;;:21;;;;;;;;;;;;;;;;;;22157:100:::0;:::o;24517:208::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24654:15:::1;;;;;;;;;;;24611:59;;24634:18;24611:59;;;;;;;;;;;;24699:18;24681:15;;:36;;;;;;;;;;;;;;;;;;24517:208:::0;:::o;2924:104::-;2980:13;3013:7;3006:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2924:104;:::o;23439:304::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23583:13:::1;23575:21;;:4;:21;;;;23553:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;23694:41;23723:4;23729:5;23694:28;:41::i;:::-;23439:304:::0;;:::o;4630:413::-;4723:4;4740:24;4767:11;:25;4779:12;:10;:12::i;:::-;4767:25;;;;;;;;;;;;;;;:34;4793:7;4767:34;;;;;;;;;;;;;;;;4740:61;;4840:15;4820:16;:35;;4812:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4933:67;4942:12;:10;:12::i;:::-;4956:7;4984:15;4965:16;:34;4933:8;:67::i;:::-;5031:4;5024:11;;;4630:413;;;;:::o;3388:175::-;3474:4;3491:42;3501:12;:10;:12::i;:::-;3515:9;3526:6;3491:9;:42::i;:::-;3551:4;3544:11;;3388:175;;;;:::o;16203:32::-;;;;:::o;16754:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15766:33::-;;;;;;;;;;;;;:::o;23249:182::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23365:8:::1;23334:19;:28;23354:7;23334:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23405:7;23389:34;;;23414:8;23389:34;;;;;;:::i;:::-;;;;;;;;23249:182:::0;;:::o;15501:32::-;;;;;;;;;;;;;:::o;15617:29::-;;;;:::o;24128:189::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24251:17:::1;;;;;;;;;;;24215:54;;24240:9;24215:54;;;;;;;;;;;;24300:9;24280:17;;:29;;;;;;;;;;;;;;;;;;24128:189:::0;:::o;15972:39::-;;;;;;;;;;;;;:::o;23947:173::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24064:10:::1;;;;;;;;;;;24031:44;;24049:13;24031:44;;;;;;;;;;;;24099:13;24086:10;;:26;;;;;;;;;;;;;;;;;;23947:173:::0;:::o;20864:497::-;20972:4;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21051:6:::1;21046:1;21030:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21029:28;;;;:::i;:::-;21016:9;:41;;20994:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;21206:4;21201:1;21185:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21184:26;;;;:::i;:::-;21171:9;:39;;21149:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;21322:9;21301:18;:30;;;;21349:4;21342:11;;20864:497:::0;;;:::o;16134:25::-;;;;:::o;15540:30::-;;;;;;;;;;;;;:::o;16100:27::-;;;;:::o;3571:151::-;3660:7;3687:11;:18;3699:5;3687:18;;;;;;;;;;;;;;;:27;3706:7;3687:27;;;;;;;;;;;;;;;;3680:34;;3571:151;;;;:::o;16688:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;15653:33::-;;;;:::o;16052:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;22751:490::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22952:8:::1;22938:11;:22;;;;22990:13;22971:16;:32;;;;23035:15;23014:18;:36;;;;23081:14;23061:17;:34;;;;23176:17;;23155:18;;23136:16;;23122:11;;:30;;;;:::i;:::-;:51;;;;:::i;:::-;:71;;;;:::i;:::-;23106:13;:87;;;;23229:2;23212:13;;:19;;23204:28;;;::::0;::::1;;22751:490:::0;;;;:::o;15469:25::-;;;;;;;;;;;;;:::o;20659:135::-;20719:4;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20759:5:::1;20736:20;;:28;;;;;;;;;;;;;;;;;;20782:4;20775:11;;20659:135:::0;:::o;16544:35::-;;;;:::o;16166:30::-;;;;:::o;1049:201::-;861:12;:10;:12::i;:::-;850:23;;:7;:5;:7::i;:::-;:23;;;842:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1158:1:::1;1138:22;;:8;:22;;;;1130:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1214:28;1233:8;1214:18;:28::i;:::-;1049:201:::0;:::o;16350:31::-;;;;:::o;15693:24::-;;;;:::o;16586:34::-;;;;:::o;15577:31::-;;;;;;;;;;;;;:::o;261:98::-;314:7;341:10;334:17;;261:98;:::o;6798:380::-;6951:1;6934:19;;:5;:19;;;;6926:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7032:1;7013:21;;:7;:21;;;;7005:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7116:6;7086:11;:18;7098:5;7086:18;;;;;;;;;;;;;;;:27;7105:7;7086:27;;;;;;;;;;;;;;;:36;;;;7154:7;7138:32;;7147:5;7138:32;;;7163:6;7138:32;;;;;;:::i;:::-;;;;;;;;6798:380;;;:::o;24867:4905::-;25015:1;24999:18;;:4;:18;;;;24991:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25092:1;25078:16;;:2;:16;;;;25070:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25154:7;:13;25162:4;25154:13;;;;;;;;;;;;;;;;;;;;;;;;;25153:14;25145:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;25213:1;25203:6;:11;25199:93;;;25231:28;25247:4;25253:2;25257:1;25231:15;:28::i;:::-;25274:7;;25199:93;25308:14;;;;;;;;;;;25304:2445;;;25369:7;:5;:7::i;:::-;25361:15;;:4;:15;;;;:49;;;;;25403:7;:5;:7::i;:::-;25397:13;;:2;:13;;;;25361:49;:86;;;;;25445:1;25431:16;;:2;:16;;;;25361:86;:128;;;;;25482:6;25468:21;;:2;:21;;;;25361:128;:158;;;;;25511:8;;;;;;;;;;;25510:9;25361:158;25339:2399;;;25559:13;;;;;;;;;;;25554:223;;25631:19;:25;25651:4;25631:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25660:19;:23;25680:2;25660:23;;;;;;;;;;;;;;;;;;;;;;;;;25631:52;25597:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25554:223;25933:20;;;;;;;;;;;25929:641;;;26014:7;:5;:7::i;:::-;26008:13;;:2;:13;;;;:72;;;;;26064:15;26050:30;;:2;:30;;;;26008:72;:129;;;;;26123:13;26109:28;;:2;:28;;;;26008:129;25978:573;;;26301:12;26226:28;:39;26255:9;26226:39;;;;;;;;;;;;;;;;:87;26188:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;26515:12;26473:28;:39;26502:9;26473:39;;;;;;;;;;;;;;;:54;;;;25978:573;25929:641;26644:25;:31;26670:4;26644:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;26701:25;:29;26727:2;26701:29;;;;;;;;;;;;;;;;;;;;;;;;;26700:30;26644:86;26618:1105;;;26817:14;;26807:6;:24;;26773:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27013:9;;26996:13;27006:2;26996:9;:13::i;:::-;26987:6;:22;;;;:::i;:::-;:35;;26953:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26618:1105;;;27191:25;:29;27217:2;27191:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;27246:25;:31;27272:4;27246:31;;;;;;;;;;;;;;;;;;;;;;;;;27245:32;27191:86;27165:558;;;27364:14;;27354:6;:24;;27320:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27165:558;;;27509:25;:29;27535:2;27509:29;;;;;;;;;;;;;;;;;;;;;;;;;27504:219;;27623:9;;27606:13;27616:2;27606:9;:13::i;:::-;27597:6;:22;;;;:::i;:::-;:35;;27563:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27504:219;27165:558;26618:1105;25339:2399;25304:2445;27761:28;27792:24;27810:4;27792:9;:24::i;:::-;27761:55;;27829:12;27868:18;;27844:20;:42;;27829:57;;27917:7;:35;;;;;27941:11;;;;;;;;;;;27917:35;:61;;;;;27970:8;;;;;;;;;;;27969:9;27917:61;:110;;;;;27996:25;:31;28022:4;27996:31;;;;;;;;;;;;;;;;;;;;;;;;;27995:32;27917:110;:153;;;;;28045:19;:25;28065:4;28045:25;;;;;;;;;;;;;;;;;;;;;;;;;28044:26;27917:153;:194;;;;;28088:19;:23;28108:2;28088:23;;;;;;;;;;;;;;;;;;;;;;;;;28087:24;27917:194;27899:326;;;28149:4;28138:8;;:15;;;;;;;;;;;;;;;;;;28170:10;:8;:10::i;:::-;28208:5;28197:8;;:16;;;;;;;;;;;;;;;;;;27899:326;28237:12;28253:8;;;;;;;;;;;28252:9;28237:24;;28363:19;:25;28383:4;28363:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28392:19;:23;28412:2;28392:23;;;;;;;;;;;;;;;;;;;;;;;;;28363:52;28359:100;;;28442:5;28432:15;;28359:100;28471:12;28576:7;28572:1147;;;28628:25;:29;28654:2;28628:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28677:1;28661:13;;:17;28628:50;28624:946;;;28706:34;28736:3;28706:25;28717:13;;28706:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28699:41;;28809:13;;28789:16;;28782:4;:23;;;;:::i;:::-;28781:41;;;;:::i;:::-;28759:18;;:63;;;;;;;:::i;:::-;;;;;;;;28895:13;;28873:18;;28866:4;:25;;;;:::i;:::-;28865:43;;;;:::i;:::-;28841:20;;:67;;;;;;;:::i;:::-;;;;;;;;28967:13;;28952:11;;28945:4;:18;;;;:::i;:::-;28944:36;;;;:::i;:::-;28927:13;;:53;;;;;;;:::i;:::-;;;;;;;;29051:13;;29030:17;;29023:4;:24;;;;:::i;:::-;29022:42;;;;:::i;:::-;28999:19;;:65;;;;;;;:::i;:::-;;;;;;;;28624:946;;;29126:25;:31;29152:4;29126:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;29176:1;29161:12;;:16;29126:51;29122:448;;;29205:33;29234:3;29205:24;29216:12;;29205:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;29198:40;;29306:12;;29287:15;;29280:4;:22;;;;:::i;:::-;29279:39;;;;:::i;:::-;29257:18;;:61;;;;;;;:::i;:::-;;;;;;;;29390:12;;29369:17;;29362:4;:24;;;;:::i;:::-;29361:41;;;;:::i;:::-;29337:20;;:65;;;;;;;:::i;:::-;;;;;;;;29460:12;;29446:10;;29439:4;:17;;;;:::i;:::-;29438:34;;;;:::i;:::-;29421:13;;:51;;;;;;;:::i;:::-;;;;;;;;29542:12;;29522:16;;29515:4;:23;;;;:::i;:::-;29514:40;;;;:::i;:::-;29491:19;;:63;;;;;;;:::i;:::-;;;;;;;;29122:448;28624:946;29597:1;29590:4;:8;29586:91;;;29619:42;29635:4;29649;29656;29619:15;:42::i;:::-;29586:91;29703:4;29693:14;;;;;:::i;:::-;;;28572:1147;29731:33;29747:4;29753:2;29757:6;29731:15;:33::i;:::-;24980:4792;;;;24867:4905;;;;:::o;1258:191::-;1332:16;1351:6;;;;;;;;;;;1332:25;;1377:8;1368:6;;:17;;;;;;;;;;;;;;;;;;1432:8;1401:40;;1422:8;1401:40;;;;;;;;;;;;1321:128;1258:191;:::o;23751:188::-;23868:5;23834:25;:31;23860:4;23834:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23925:5;23891:40;;23919:4;23891:40;;;;;;;;;;;;23751:188;;:::o;5051:733::-;5209:1;5191:20;;:6;:20;;;;5183:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5293:1;5272:23;;:9;:23;;;;5264:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5348:47;5369:6;5377:9;5388:6;5348:20;:47::i;:::-;5408:21;5432:9;:17;5442:6;5432:17;;;;;;;;;;;;;;;;5408:41;;5485:6;5468:13;:23;;5460:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5606:6;5590:13;:22;5570:9;:17;5580:6;5570:17;;;;;;;;;;;;;;;:42;;;;5658:6;5634:9;:20;5644:9;5634:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5699:9;5682:35;;5691:6;5682:35;;;5710:6;5682:35;;;;;;:::i;:::-;;;;;;;;5730:46;5750:6;5758:9;5769:6;5730:19;:46::i;:::-;5172:612;5051:733;;;:::o;31300:1974::-;31339:23;31365:24;31383:4;31365:9;:24::i;:::-;31339:50;;31400:25;31527:19;;31491:20;;31462:13;;31428:18;;:47;;;;:::i;:::-;:83;;;;:::i;:::-;:118;;;;:::i;:::-;31400:146;;31557:12;31605:1;31586:15;:20;:46;;;;31631:1;31610:17;:22;31586:46;31582:85;;;31649:7;;;;;31582:85;31722:2;31701:18;;:23;;;;:::i;:::-;31683:15;:41;31679:115;;;31780:2;31759:18;;:23;;;;:::i;:::-;31741:41;;31679:115;31855:23;31942:1;31922:17;31900:18;;31882:15;:36;;;;:::i;:::-;31881:58;;;;:::i;:::-;:62;;;;:::i;:::-;31855:88;;31954:26;31983:36;32003:15;31983;:19;;:36;;;;:::i;:::-;31954:65;;32032:25;32060:21;32032:49;;32094:36;32111:18;32094:16;:36::i;:::-;32143:18;32164:44;32190:17;32164:21;:25;;:44;;;;:::i;:::-;32143:65;;32221:18;32242:52;32276:17;32242:29;32257:13;;32242:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;32221:73;;32305:25;32333:59;32374:17;32333:36;32348:20;;32333:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;32305:87;;32403:24;32430:58;32470:17;32430:35;32445:19;;32430:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;32403:85;;32501:23;32573:16;32553:17;32540:10;32527;:23;;;;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;32501:88;;32623:1;32602:18;:22;;;;32651:1;32635:13;:17;;;;32686:1;32663:20;:24;;;;32720:1;32698:19;:23;;;;32756:17;;;;;;;;;;;32748:31;;32787:17;32748:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32734:75;;;;;32844:1;32826:15;:19;:42;;;;;32867:1;32849:15;:19;32826:42;32822:278;;;32885:46;32898:15;32915;32885:12;:46::i;:::-;32951:137;32984:18;33021:15;33055:18;;32951:137;;;;;;;;:::i;:::-;;;;;;;;32822:278;33132:16;;;;;;;;;;;33124:30;;33162:16;33124:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33110:73;;;;;33216:10;;;;;;;;;;;33208:24;;33240:21;33208:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33194:72;;;;;31328:1946;;;;;;;;;;;31300:1974;:::o;8804:98::-;8862:7;8893:1;8889;:5;;;;:::i;:::-;8882:12;;8804:98;;;;:::o;8910:::-;8968:7;8999:1;8995;:5;;;;:::i;:::-;8988:12;;8910:98;;;;:::o;7186:125::-;;;;:::o;7319:124::-;;;;:::o;8698:98::-;8756:7;8787:1;8783;:5;;;;:::i;:::-;8776:12;;8698:98;;;;:::o;29780:589::-;29906:21;29944:1;29930:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29906:40;;29975:4;29957;29962:1;29957:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30001:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29991:4;29996:1;29991:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30036:62;30053:4;30068:15;30086:11;30036:8;:62::i;:::-;30137:15;:66;;;30218:11;30244:1;30288:4;30315;30335:15;30137:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29835:534;29780:589;:::o;30377:521::-;30525:62;30542:4;30557:15;30575:11;30525:8;:62::i;:::-;30630:15;:31;;;30669:9;30702:4;30722:11;30748:1;30791;30834:15;;;;;;;;;;;30864;30630:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30377:521;;:::o;88:117:1:-;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:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:307::-;1373:1;1383:113;1397:6;1394:1;1391:13;1383:113;;;1482:1;1477:3;1473:11;1467:18;1463:1;1458:3;1454:11;1447:39;1419:2;1416:1;1412:10;1407:15;;1383:113;;;1514:6;1511:1;1508:13;1505:101;;;1594:1;1585:6;1580:3;1576:16;1569:27;1505:101;1354:258;1305:307;;;:::o;1618:102::-;1659:6;1710:2;1706:7;1701:2;1694:5;1690:14;1686:28;1676:38;;1618:102;;;:::o;1726:364::-;1814:3;1842:39;1875:5;1842:39;:::i;:::-;1897:71;1961:6;1956:3;1897:71;:::i;:::-;1890:78;;1977:52;2022:6;2017:3;2010:4;2003:5;1999:16;1977:52;:::i;:::-;2054:29;2076:6;2054:29;:::i;:::-;2049:3;2045:39;2038:46;;1818:272;1726:364;;;;:::o;2096:313::-;2209:4;2247:2;2236:9;2232:18;2224:26;;2296:9;2290:4;2286:20;2282:1;2271:9;2267:17;2260:47;2324:78;2397:4;2388:6;2324:78;:::i;:::-;2316:86;;2096:313;;;;:::o;2415:126::-;2452:7;2492:42;2485:5;2481:54;2470:65;;2415:126;;;:::o;2547:96::-;2584:7;2613:24;2631:5;2613:24;:::i;:::-;2602:35;;2547:96;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:117::-;6245:1;6242;6235:12;6259:117;6368:1;6365;6358:12;6382:117;6491:1;6488;6481:12;6522:568;6595:8;6605:6;6655:3;6648:4;6640:6;6636:17;6632:27;6622:122;;6663:79;;:::i;:::-;6622:122;6776:6;6763:20;6753:30;;6806:18;6798:6;6795:30;6792:117;;;6828:79;;:::i;:::-;6792:117;6942:4;6934:6;6930:17;6918:29;;6996:3;6988:4;6980:6;6976:17;6966:8;6962:32;6959:41;6956:128;;;7003:79;;:::i;:::-;6956:128;6522:568;;;;;:::o;7096:116::-;7166:21;7181:5;7166:21;:::i;:::-;7159:5;7156:32;7146:60;;7202:1;7199;7192:12;7146:60;7096:116;:::o;7218:133::-;7261:5;7299:6;7286:20;7277:29;;7315:30;7339:5;7315:30;:::i;:::-;7218:133;;;;:::o;7357:698::-;7449:6;7457;7465;7514:2;7502:9;7493:7;7489:23;7485:32;7482:119;;;7520:79;;:::i;:::-;7482:119;7668:1;7657:9;7653:17;7640:31;7698:18;7690:6;7687:30;7684:117;;;7720:79;;:::i;:::-;7684:117;7833:80;7905:7;7896:6;7885:9;7881:22;7833:80;:::i;:::-;7815:98;;;;7611:312;7962:2;7988:50;8030:7;8021:6;8010:9;8006:22;7988:50;:::i;:::-;7978:60;;7933:115;7357:698;;;;;:::o;8061:765::-;8147:6;8155;8163;8171;8220:3;8208:9;8199:7;8195:23;8191:33;8188:120;;;8227:79;;:::i;:::-;8188:120;8347:1;8372:53;8417:7;8408:6;8397:9;8393:22;8372:53;:::i;:::-;8362:63;;8318:117;8474:2;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8445:118;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8730:2;8756:53;8801:7;8792:6;8781:9;8777:22;8756:53;:::i;:::-;8746:63;;8701:118;8061:765;;;;;;;:::o;8832:86::-;8867:7;8907:4;8900:5;8896:16;8885:27;;8832:86;;;:::o;8924:112::-;9007:22;9023:5;9007:22;:::i;:::-;9002:3;8995:35;8924:112;;:::o;9042:214::-;9131:4;9169:2;9158:9;9154:18;9146:26;;9182:67;9246:1;9235:9;9231:17;9222:6;9182:67;:::i;:::-;9042:214;;;;:::o;9262:329::-;9321:6;9370:2;9358:9;9349:7;9345:23;9341:32;9338:119;;;9376:79;;:::i;:::-;9338:119;9496:1;9521:53;9566:7;9557:6;9546:9;9542:22;9521:53;:::i;:::-;9511:63;;9467:117;9262:329;;;;:::o;9597:468::-;9662:6;9670;9719:2;9707:9;9698:7;9694:23;9690:32;9687:119;;;9725:79;;:::i;:::-;9687:119;9845:1;9870:53;9915:7;9906:6;9895:9;9891:22;9870:53;:::i;:::-;9860:63;;9816:117;9972:2;9998:50;10040:7;10031:6;10020:9;10016:22;9998:50;:::i;:::-;9988:60;;9943:115;9597:468;;;;;:::o;10071:323::-;10127:6;10176:2;10164:9;10155:7;10151:23;10147:32;10144:119;;;10182:79;;:::i;:::-;10144:119;10302:1;10327:50;10369:7;10360:6;10349:9;10345:22;10327:50;:::i;:::-;10317:60;;10273:114;10071:323;;;;:::o;10400:474::-;10468:6;10476;10525:2;10513:9;10504:7;10500:23;10496:32;10493:119;;;10531:79;;:::i;:::-;10493:119;10651:1;10676:53;10721:7;10712:6;10701:9;10697:22;10676:53;:::i;:::-;10666:63;;10622:117;10778:2;10804:53;10849:7;10840:6;10829:9;10825:22;10804:53;:::i;:::-;10794:63;;10749:118;10400:474;;;;;:::o;10880:182::-;11020:34;11016:1;11008:6;11004:14;10997:58;10880:182;:::o;11068:366::-;11210:3;11231:67;11295:2;11290:3;11231:67;:::i;:::-;11224:74;;11307:93;11396:3;11307:93;:::i;:::-;11425:2;11420:3;11416:12;11409:19;;11068:366;;;:::o;11440:419::-;11606:4;11644:2;11633:9;11629:18;11621:26;;11693:9;11687:4;11683:20;11679:1;11668:9;11664:17;11657:47;11721:131;11847:4;11721:131;:::i;:::-;11713:139;;11440:419;;;:::o;11865:180::-;11913:77;11910:1;11903:88;12010:4;12007:1;12000:15;12034:4;12031:1;12024:15;12051:348;12091:7;12114:20;12132:1;12114:20;:::i;:::-;12109:25;;12148:20;12166:1;12148:20;:::i;:::-;12143:25;;12336:1;12268:66;12264:74;12261:1;12258:81;12253:1;12246:9;12239:17;12235:105;12232:131;;;12343:18;;:::i;:::-;12232:131;12391:1;12388;12384:9;12373:20;;12051:348;;;;:::o;12405:180::-;12453:77;12450:1;12443:88;12550:4;12547:1;12540:15;12574:4;12571:1;12564:15;12591:185;12631:1;12648:20;12666:1;12648:20;:::i;:::-;12643:25;;12682:20;12700:1;12682:20;:::i;:::-;12677:25;;12721:1;12711:35;;12726:18;;:::i;:::-;12711:35;12768:1;12765;12761:9;12756:14;;12591:185;;;;:::o;12782:228::-;12922:34;12918:1;12910:6;12906:14;12899:58;12991:11;12986:2;12978:6;12974:15;12967:36;12782:228;:::o;13016:366::-;13158:3;13179:67;13243:2;13238:3;13179:67;:::i;:::-;13172:74;;13255:93;13344:3;13255:93;:::i;:::-;13373:2;13368:3;13364:12;13357:19;;13016:366;;;:::o;13388:419::-;13554:4;13592:2;13581:9;13577:18;13569:26;;13641:9;13635:4;13631:20;13627:1;13616:9;13612:17;13605:47;13669:131;13795:4;13669:131;:::i;:::-;13661:139;;13388:419;;;:::o;13813:180::-;13861:77;13858:1;13851:88;13958:4;13955:1;13948:15;13982:4;13979:1;13972:15;13999:320;14043:6;14080:1;14074:4;14070:12;14060:22;;14127:1;14121:4;14117:12;14148:18;14138:81;;14204:4;14196:6;14192:17;14182:27;;14138:81;14266:2;14258:6;14255:14;14235:18;14232:38;14229:84;;;14285:18;;:::i;:::-;14229:84;14050:269;13999:320;;;:::o;14325:223::-;14465:34;14461:1;14453:6;14449:14;14442:58;14534:6;14529:2;14521:6;14517:15;14510:31;14325:223;:::o;14554:366::-;14696:3;14717:67;14781:2;14776:3;14717:67;:::i;:::-;14710:74;;14793:93;14882:3;14793:93;:::i;:::-;14911:2;14906:3;14902:12;14895:19;;14554:366;;;:::o;14926:419::-;15092:4;15130:2;15119:9;15115:18;15107:26;;15179:9;15173:4;15169:20;15165:1;15154:9;15150:17;15143:47;15207:131;15333:4;15207:131;:::i;:::-;15199:139;;14926:419;;;:::o;15351:227::-;15491:34;15487:1;15479:6;15475:14;15468:58;15560:10;15555:2;15547:6;15543:15;15536:35;15351:227;:::o;15584:366::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:419::-;16122:4;16160:2;16149:9;16145:18;16137:26;;16209:9;16203:4;16199:20;16195:1;16184:9;16180:17;16173:47;16237:131;16363:4;16237:131;:::i;:::-;16229:139;;15956:419;;;:::o;16381:180::-;16429:77;16426:1;16419:88;16526:4;16523:1;16516:15;16550:4;16547:1;16540:15;16567:233;16606:3;16629:24;16647:5;16629:24;:::i;:::-;16620:33;;16675:66;16668:5;16665:77;16662:103;;;16745:18;;:::i;:::-;16662:103;16792:1;16785:5;16781:13;16774:20;;16567:233;;;:::o;16806:305::-;16846:3;16865:20;16883:1;16865:20;:::i;:::-;16860:25;;16899:20;16917:1;16899:20;:::i;:::-;16894:25;;17053:1;16985:66;16981:74;16978:1;16975:81;16972:107;;;17059:18;;:::i;:::-;16972:107;17103:1;17100;17096:9;17089:16;;16806:305;;;;:::o;17117:164::-;17257:16;17253:1;17245:6;17241:14;17234:40;17117:164;:::o;17287:366::-;17429:3;17450:67;17514:2;17509:3;17450:67;:::i;:::-;17443:74;;17526:93;17615:3;17526:93;:::i;:::-;17644:2;17639:3;17635:12;17628:19;;17287:366;;;:::o;17659:419::-;17825:4;17863:2;17852:9;17848:18;17840:26;;17912:9;17906:4;17902:20;17898:1;17887:9;17883:17;17876:47;17940:131;18066:4;17940:131;:::i;:::-;17932:139;;17659:419;;;:::o;18084:244::-;18224:34;18220:1;18212:6;18208:14;18201:58;18293:27;18288:2;18280:6;18276:15;18269:52;18084:244;:::o;18334:366::-;18476:3;18497:67;18561:2;18556:3;18497:67;:::i;:::-;18490:74;;18573:93;18662:3;18573:93;:::i;:::-;18691:2;18686:3;18682:12;18675:19;;18334:366;;;:::o;18706:419::-;18872:4;18910:2;18899:9;18895:18;18887:26;;18959:9;18953:4;18949:20;18945:1;18934:9;18930:17;18923:47;18987:131;19113:4;18987:131;:::i;:::-;18979:139;;18706:419;;;:::o;19131:224::-;19271:34;19267:1;19259:6;19255:14;19248:58;19340:7;19335:2;19327:6;19323:15;19316:32;19131:224;:::o;19361:366::-;19503:3;19524:67;19588:2;19583:3;19524:67;:::i;:::-;19517:74;;19600:93;19689:3;19600:93;:::i;:::-;19718:2;19713:3;19709:12;19702:19;;19361:366;;;:::o;19733:419::-;19899:4;19937:2;19926:9;19922:18;19914:26;;19986:9;19980:4;19976:20;19972:1;19961:9;19957:17;19950:47;20014:131;20140:4;20014:131;:::i;:::-;20006:139;;19733:419;;;:::o;20158:240::-;20298:34;20294:1;20286:6;20282:14;20275:58;20367:23;20362:2;20354:6;20350:15;20343:48;20158:240;:::o;20404:366::-;20546:3;20567:67;20631:2;20626:3;20567:67;:::i;:::-;20560:74;;20643:93;20732:3;20643:93;:::i;:::-;20761:2;20756:3;20752:12;20745:19;;20404:366;;;:::o;20776:419::-;20942:4;20980:2;20969:9;20965:18;20957:26;;21029:9;21023:4;21019:20;21015:1;21004:9;21000:17;20993:47;21057:131;21183:4;21057:131;:::i;:::-;21049:139;;20776:419;;;:::o;21201:239::-;21341:34;21337:1;21329:6;21325:14;21318:58;21410:22;21405:2;21397:6;21393:15;21386:47;21201:239;:::o;21446:366::-;21588:3;21609:67;21673:2;21668:3;21609:67;:::i;:::-;21602:74;;21685:93;21774:3;21685:93;:::i;:::-;21803:2;21798:3;21794:12;21787:19;;21446:366;;;:::o;21818:419::-;21984:4;22022:2;22011:9;22007:18;21999:26;;22071:9;22065:4;22061:20;22057:1;22046:9;22042:17;22035:47;22099:131;22225:4;22099:131;:::i;:::-;22091:139;;21818:419;;;:::o;22243:225::-;22383:34;22379:1;22371:6;22367:14;22360:58;22452:8;22447:2;22439:6;22435:15;22428:33;22243:225;:::o;22474:366::-;22616:3;22637:67;22701:2;22696:3;22637:67;:::i;:::-;22630:74;;22713:93;22802:3;22713:93;:::i;:::-;22831:2;22826:3;22822:12;22815:19;;22474:366;;;:::o;22846:419::-;23012:4;23050:2;23039:9;23035:18;23027:26;;23099:9;23093:4;23089:20;23085:1;23074:9;23070:17;23063:47;23127:131;23253:4;23127:131;:::i;:::-;23119:139;;22846:419;;;:::o;23271:223::-;23411:34;23407:1;23399:6;23395:14;23388:58;23480:6;23475:2;23467:6;23463:15;23456:31;23271:223;:::o;23500:366::-;23642:3;23663:67;23727:2;23722:3;23663:67;:::i;:::-;23656:74;;23739:93;23828:3;23739:93;:::i;:::-;23857:2;23852:3;23848:12;23841:19;;23500:366;;;:::o;23872:419::-;24038:4;24076:2;24065:9;24061:18;24053:26;;24125:9;24119:4;24115:20;24111:1;24100:9;24096:17;24089:47;24153:131;24279:4;24153:131;:::i;:::-;24145:139;;23872:419;;;:::o;24297:221::-;24437:34;24433:1;24425:6;24421:14;24414:58;24506:4;24501:2;24493:6;24489:15;24482:29;24297:221;:::o;24524:366::-;24666:3;24687:67;24751:2;24746:3;24687:67;:::i;:::-;24680:74;;24763:93;24852:3;24763:93;:::i;:::-;24881:2;24876:3;24872:12;24865:19;;24524:366;;;:::o;24896:419::-;25062:4;25100:2;25089:9;25085:18;25077:26;;25149:9;25143:4;25139:20;25135:1;25124:9;25120:17;25113:47;25177:131;25303:4;25177:131;:::i;:::-;25169:139;;24896:419;;;:::o;25321:224::-;25461:34;25457:1;25449:6;25445:14;25438:58;25530:7;25525:2;25517:6;25513:15;25506:32;25321:224;:::o;25551:366::-;25693:3;25714:67;25778:2;25773:3;25714:67;:::i;:::-;25707:74;;25790:93;25879:3;25790:93;:::i;:::-;25908:2;25903:3;25899:12;25892:19;;25551:366;;;:::o;25923:419::-;26089:4;26127:2;26116:9;26112:18;26104:26;;26176:9;26170:4;26166:20;26162:1;26151:9;26147:17;26140:47;26204:131;26330:4;26204:131;:::i;:::-;26196:139;;25923:419;;;:::o;26348:222::-;26488:34;26484:1;26476:6;26472:14;26465:58;26557:5;26552:2;26544:6;26540:15;26533:30;26348:222;:::o;26576:366::-;26718:3;26739:67;26803:2;26798:3;26739:67;:::i;:::-;26732:74;;26815:93;26904:3;26815:93;:::i;:::-;26933:2;26928:3;26924:12;26917:19;;26576:366;;;:::o;26948:419::-;27114:4;27152:2;27141:9;27137:18;27129:26;;27201:9;27195:4;27191:20;27187:1;27176:9;27172:17;27165:47;27229:131;27355:4;27229:131;:::i;:::-;27221:139;;26948:419;;;:::o;27373:164::-;27513:16;27509:1;27501:6;27497:14;27490:40;27373:164;:::o;27543:366::-;27685:3;27706:67;27770:2;27765:3;27706:67;:::i;:::-;27699:74;;27782:93;27871:3;27782:93;:::i;:::-;27900:2;27895:3;27891:12;27884:19;;27543:366;;;:::o;27915:419::-;28081:4;28119:2;28108:9;28104:18;28096:26;;28168:9;28162:4;28158:20;28154:1;28143:9;28139:17;28132:47;28196:131;28322:4;28196:131;:::i;:::-;28188:139;;27915:419;;;:::o;28340:172::-;28480:24;28476:1;28468:6;28464:14;28457:48;28340:172;:::o;28518:366::-;28660:3;28681:67;28745:2;28740:3;28681:67;:::i;:::-;28674:74;;28757:93;28846:3;28757:93;:::i;:::-;28875:2;28870:3;28866:12;28859:19;;28518:366;;;:::o;28890:419::-;29056:4;29094:2;29083:9;29079:18;29071:26;;29143:9;29137:4;29133:20;29129:1;29118:9;29114:17;29107:47;29171:131;29297:4;29171:131;:::i;:::-;29163:139;;28890:419;;;:::o;29315:297::-;29455:34;29451:1;29443:6;29439:14;29432:58;29524:34;29519:2;29511:6;29507:15;29500:59;29593:11;29588:2;29580:6;29576:15;29569:36;29315:297;:::o;29618:366::-;29760:3;29781:67;29845:2;29840:3;29781:67;:::i;:::-;29774:74;;29857:93;29946:3;29857:93;:::i;:::-;29975:2;29970:3;29966:12;29959:19;;29618:366;;;:::o;29990:419::-;30156:4;30194:2;30183:9;30179:18;30171:26;;30243:9;30237:4;30233:20;30229:1;30218:9;30214:17;30207:47;30271:131;30397:4;30271:131;:::i;:::-;30263:139;;29990:419;;;:::o;30415:234::-;30555:34;30551:1;30543:6;30539:14;30532:58;30624:17;30619:2;30611:6;30607:15;30600:42;30415:234;:::o;30655:366::-;30797:3;30818:67;30882:2;30877:3;30818:67;:::i;:::-;30811:74;;30894:93;30983:3;30894:93;:::i;:::-;31012:2;31007:3;31003:12;30996:19;;30655:366;;;:::o;31027:419::-;31193:4;31231:2;31220:9;31216:18;31208:26;;31280:9;31274:4;31270:20;31266:1;31255:9;31251:17;31244:47;31308:131;31434:4;31308:131;:::i;:::-;31300:139;;31027:419;;;:::o;31452:169::-;31592:21;31588:1;31580:6;31576:14;31569:45;31452:169;:::o;31627:366::-;31769:3;31790:67;31854:2;31849:3;31790:67;:::i;:::-;31783:74;;31866:93;31955:3;31866:93;:::i;:::-;31984:2;31979:3;31975:12;31968:19;;31627:366;;;:::o;31999:419::-;32165:4;32203:2;32192:9;32188:18;32180:26;;32252:9;32246:4;32242:20;32238:1;32227:9;32223:17;32216:47;32280:131;32406:4;32280:131;:::i;:::-;32272:139;;31999:419;;;:::o;32424:235::-;32564:34;32560:1;32552:6;32548:14;32541:58;32633:18;32628:2;32620:6;32616:15;32609:43;32424:235;:::o;32665:366::-;32807:3;32828:67;32892:2;32887:3;32828:67;:::i;:::-;32821:74;;32904:93;32993:3;32904:93;:::i;:::-;33022:2;33017:3;33013:12;33006:19;;32665:366;;;:::o;33037:419::-;33203:4;33241:2;33230:9;33226:18;33218:26;;33290:9;33284:4;33280:20;33276:1;33265:9;33261:17;33254:47;33318:131;33444:4;33318:131;:::i;:::-;33310:139;;33037:419;;;:::o;33462:191::-;33502:4;33522:20;33540:1;33522:20;:::i;:::-;33517:25;;33556:20;33574:1;33556:20;:::i;:::-;33551:25;;33595:1;33592;33589:8;33586:34;;;33600:18;;:::i;:::-;33586:34;33645:1;33642;33638:9;33630:17;;33462:191;;;;:::o;33659:225::-;33799:34;33795:1;33787:6;33783:14;33776:58;33868:8;33863:2;33855:6;33851:15;33844:33;33659:225;:::o;33890:366::-;34032:3;34053:67;34117:2;34112:3;34053:67;:::i;:::-;34046:74;;34129:93;34218:3;34129:93;:::i;:::-;34247:2;34242:3;34238:12;34231:19;;33890:366;;;:::o;34262:419::-;34428:4;34466:2;34455:9;34451:18;34443:26;;34515:9;34509:4;34505:20;34501:1;34490:9;34486:17;34479:47;34543:131;34669:4;34543:131;:::i;:::-;34535:139;;34262:419;;;:::o;34687:147::-;34788:11;34825:3;34810:18;;34687:147;;;;:::o;34840:114::-;;:::o;34960:398::-;35119:3;35140:83;35221:1;35216:3;35140:83;:::i;:::-;35133:90;;35232:93;35321:3;35232:93;:::i;:::-;35350:1;35345:3;35341:11;35334:18;;34960:398;;;:::o;35364:379::-;35548:3;35570:147;35713:3;35570:147;:::i;:::-;35563:154;;35734:3;35727:10;;35364:379;;;:::o;35749:442::-;35898:4;35936:2;35925:9;35921:18;35913:26;;35949:71;36017:1;36006:9;36002:17;35993:6;35949:71;:::i;:::-;36030:72;36098:2;36087:9;36083:18;36074:6;36030:72;:::i;:::-;36112;36180:2;36169:9;36165:18;36156:6;36112:72;:::i;:::-;35749:442;;;;;;:::o;36197:180::-;36245:77;36242:1;36235:88;36342:4;36339:1;36332:15;36366:4;36363:1;36356:15;36383:143;36440:5;36471:6;36465:13;36456:22;;36487:33;36514:5;36487:33;:::i;:::-;36383:143;;;;:::o;36532:351::-;36602:6;36651:2;36639:9;36630:7;36626:23;36622:32;36619:119;;;36657:79;;:::i;:::-;36619:119;36777:1;36802:64;36858:7;36849:6;36838:9;36834:22;36802:64;:::i;:::-;36792:74;;36748:128;36532:351;;;;:::o;36889:85::-;36934:7;36963:5;36952:16;;36889:85;;;:::o;36980:158::-;37038:9;37071:61;37089:42;37098:32;37124:5;37098:32;:::i;:::-;37089:42;:::i;:::-;37071:61;:::i;:::-;37058:74;;36980:158;;;:::o;37144:147::-;37239:45;37278:5;37239:45;:::i;:::-;37234:3;37227:58;37144:147;;:::o;37297:114::-;37364:6;37398:5;37392:12;37382:22;;37297:114;;;:::o;37417:184::-;37516:11;37550:6;37545:3;37538:19;37590:4;37585:3;37581:14;37566:29;;37417:184;;;;:::o;37607:132::-;37674:4;37697:3;37689:11;;37727:4;37722:3;37718:14;37710:22;;37607:132;;;:::o;37745:108::-;37822:24;37840:5;37822:24;:::i;:::-;37817:3;37810:37;37745:108;;:::o;37859:179::-;37928:10;37949:46;37991:3;37983:6;37949:46;:::i;:::-;38027:4;38022:3;38018:14;38004:28;;37859:179;;;;:::o;38044:113::-;38114:4;38146;38141:3;38137:14;38129:22;;38044:113;;;:::o;38193:732::-;38312:3;38341:54;38389:5;38341:54;:::i;:::-;38411:86;38490:6;38485:3;38411:86;:::i;:::-;38404:93;;38521:56;38571:5;38521:56;:::i;:::-;38600:7;38631:1;38616:284;38641:6;38638:1;38635:13;38616:284;;;38717:6;38711:13;38744:63;38803:3;38788:13;38744:63;:::i;:::-;38737:70;;38830:60;38883:6;38830:60;:::i;:::-;38820:70;;38676:224;38663:1;38660;38656:9;38651:14;;38616:284;;;38620:14;38916:3;38909:10;;38317:608;;;38193:732;;;;:::o;38931:831::-;39194:4;39232:3;39221:9;39217:19;39209:27;;39246:71;39314:1;39303:9;39299:17;39290:6;39246:71;:::i;:::-;39327:80;39403:2;39392:9;39388:18;39379:6;39327:80;:::i;:::-;39454:9;39448:4;39444:20;39439:2;39428:9;39424:18;39417:48;39482:108;39585:4;39576:6;39482:108;:::i;:::-;39474:116;;39600:72;39668:2;39657:9;39653:18;39644:6;39600:72;:::i;:::-;39682:73;39750:3;39739:9;39735:19;39726:6;39682:73;:::i;:::-;38931:831;;;;;;;;:::o;39768:807::-;40017:4;40055:3;40044:9;40040:19;40032:27;;40069:71;40137:1;40126:9;40122:17;40113:6;40069:71;:::i;:::-;40150:72;40218:2;40207:9;40203:18;40194:6;40150:72;:::i;:::-;40232:80;40308:2;40297:9;40293:18;40284:6;40232:80;:::i;:::-;40322;40398:2;40387:9;40383:18;40374:6;40322:80;:::i;:::-;40412:73;40480:3;40469:9;40465:19;40456:6;40412:73;:::i;:::-;40495;40563:3;40552:9;40548:19;40539:6;40495:73;:::i;:::-;39768:807;;;;;;;;;:::o;40581:143::-;40638:5;40669:6;40663:13;40654:22;;40685:33;40712:5;40685:33;:::i;:::-;40581:143;;;;:::o;40730:663::-;40818:6;40826;40834;40883:2;40871:9;40862:7;40858:23;40854:32;40851:119;;;40889:79;;:::i;:::-;40851:119;41009:1;41034:64;41090:7;41081:6;41070:9;41066:22;41034:64;:::i;:::-;41024:74;;40980:128;41147:2;41173:64;41229:7;41220:6;41209:9;41205:22;41173:64;:::i;:::-;41163:74;;41118:129;41286:2;41312:64;41368:7;41359:6;41348:9;41344:22;41312:64;:::i;:::-;41302:74;;41257:129;40730:663;;;;;:::o

Swarm Source

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