ETH Price: $3,684.20 (+3.22%)
Gas: 7.48 Gwei

Contract

0xfa9801298cBAdf02ef4b76AecE088Da3dCC1370c
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve185300642023-11-08 21:56:47387 days ago1699480607IN
0xfa980129...3dCC1370c
0 ETH0.0018263938.69893743
Approve185248802023-11-08 4:32:59388 days ago1699417979IN
0xfa980129...3dCC1370c
0 ETH0.0009871521.0395846
Approve185241282023-11-08 2:01:47388 days ago1699408907IN
0xfa980129...3dCC1370c
0 ETH0.00082817.54424683
Approve185223842023-11-07 20:11:47388 days ago1699387907IN
0xfa980129...3dCC1370c
0 ETH0.0016415734.78290203
Approve185223732023-11-07 20:09:35388 days ago1699387775IN
0xfa980129...3dCC1370c
0 ETH0.0015219332.24789889
Approve185218512023-11-07 18:24:59388 days ago1699381499IN
0xfa980129...3dCC1370c
0 ETH0.001613634.19014878
Approve185214692023-11-07 17:08:11388 days ago1699376891IN
0xfa980129...3dCC1370c
0 ETH0.0025504654.35897366
Approve185213542023-11-07 16:45:11388 days ago1699375511IN
0xfa980129...3dCC1370c
0 ETH0.0014408530.70931595
Approve185213412023-11-07 16:42:35388 days ago1699375355IN
0xfa980129...3dCC1370c
0 ETH0.001491531.7889224
Approve185212152023-11-07 16:17:23388 days ago1699373843IN
0xfa980129...3dCC1370c
0 ETH0.001625634.44438214
Approve185212102023-11-07 16:16:23388 days ago1699373783IN
0xfa980129...3dCC1370c
0 ETH0.0015485732.96312819
Approve185210882023-11-07 15:51:47388 days ago1699372307IN
0xfa980129...3dCC1370c
0 ETH0.0019691941.67174535
Approve185210862023-11-07 15:51:23388 days ago1699372283IN
0xfa980129...3dCC1370c
0 ETH0.0018097538.34639564
Approve185210412023-11-07 15:42:23388 days ago1699371743IN
0xfa980129...3dCC1370c
0 ETH0.0016916435.84378477
Approve185210342023-11-07 15:40:59388 days ago1699371659IN
0xfa980129...3dCC1370c
0 ETH0.0018029938.20302172
Approve185210262023-11-07 15:39:23388 days ago1699371563IN
0xfa980129...3dCC1370c
0 ETH0.0018509839.45069861
Update Sell Fees185209612023-11-07 15:26:23388 days ago1699370783IN
0xfa980129...3dCC1370c
0 ETH0.0011149737.7165505
Approve185209412023-11-07 15:22:23388 days ago1699370543IN
0xfa980129...3dCC1370c
0 ETH0.0020846144.11417566
Approve185209092023-11-07 15:15:59388 days ago1699370159IN
0xfa980129...3dCC1370c
0 ETH0.0014395630.46373268
Transfer185209022023-11-07 15:14:35388 days ago1699370075IN
0xfa980129...3dCC1370c
0 ETH0.0044090133.53905744
Approve185208952023-11-07 15:13:11388 days ago1699369991IN
0xfa980129...3dCC1370c
0 ETH0.001537632.53848441
Approve185208932023-11-07 15:12:47388 days ago1699369967IN
0xfa980129...3dCC1370c
0 ETH0.0015448732.73377433
Approve185208812023-11-07 15:10:23388 days ago1699369823IN
0xfa980129...3dCC1370c
0 ETH0.0018053538.20444879
Approve185208792023-11-07 15:09:59388 days ago1699369799IN
0xfa980129...3dCC1370c
0 ETH0.0024525151.91278956
Approve185208782023-11-07 15:09:47388 days ago1699369787IN
0xfa980129...3dCC1370c
0 ETH0.001649834.91278956
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
185209672023-11-07 15:27:35388 days ago1699370855
0xfa980129...3dCC1370c
0.01381585 ETH
185209672023-11-07 15:27:35388 days ago1699370855
0xfa980129...3dCC1370c
0.01381585 ETH
185209452023-11-07 15:23:11388 days ago1699370591
0xfa980129...3dCC1370c
0.01591602 ETH
185209452023-11-07 15:23:11388 days ago1699370591
0xfa980129...3dCC1370c
0.01591602 ETH
185209092023-11-07 15:15:59388 days ago1699370159
0xfa980129...3dCC1370c
0.01450712 ETH
185209092023-11-07 15:15:59388 days ago1699370159
0xfa980129...3dCC1370c
0.01450712 ETH
185209012023-11-07 15:14:23388 days ago1699370063
0xfa980129...3dCC1370c
0.02040001 ETH
185209012023-11-07 15:14:23388 days ago1699370063
0xfa980129...3dCC1370c
0.02040001 ETH
185208832023-11-07 15:10:47388 days ago1699369847
0xfa980129...3dCC1370c
0.01695094 ETH
185208832023-11-07 15:10:47388 days ago1699369847
0xfa980129...3dCC1370c
0.01695094 ETH
185208792023-11-07 15:09:59388 days ago1699369799
0xfa980129...3dCC1370c
0.01820199 ETH
185208792023-11-07 15:09:59388 days ago1699369799
0xfa980129...3dCC1370c
0.01820199 ETH
185208752023-11-07 15:09:11388 days ago1699369751
0xfa980129...3dCC1370c
0.0362696 ETH
185208752023-11-07 15:09:11388 days ago1699369751
0xfa980129...3dCC1370c
0.0362696 ETH
185208732023-11-07 15:08:47388 days ago1699369727
0xfa980129...3dCC1370c
0.0362696 ETH
185208732023-11-07 15:08:47388 days ago1699369727
0xfa980129...3dCC1370c
0.0362696 ETH
185208682023-11-07 15:07:47388 days ago1699369667
0xfa980129...3dCC1370c
0.02262308 ETH
185208682023-11-07 15:07:47388 days ago1699369667
0xfa980129...3dCC1370c
0.02262308 ETH
185208672023-11-07 15:07:35388 days ago1699369655
0xfa980129...3dCC1370c
0.02262308 ETH
185208672023-11-07 15:07:35388 days ago1699369655
0xfa980129...3dCC1370c
0.02262308 ETH
185208622023-11-07 15:06:35388 days ago1699369595
0xfa980129...3dCC1370c
0.02456896 ETH
185208622023-11-07 15:06:35388 days ago1699369595
0xfa980129...3dCC1370c
0.02456896 ETH
185208612023-11-07 15:06:23388 days ago1699369583
0xfa980129...3dCC1370c
0.02456896 ETH
185208612023-11-07 15:06:23388 days ago1699369583
0xfa980129...3dCC1370c
0.02456896 ETH
185208612023-11-07 15:06:23388 days ago1699369583
0xfa980129...3dCC1370c
0.02677727 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JOYBOY

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-27
*/

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    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");

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

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

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

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership(
        bool confirmRenounce
    ) external virtual onlyOwner {
        require(confirmRenounce, "Please confirm renounce!");
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function getAmountsOut(
        uint256 amountIn,
        address[] calldata path
    ) external view returns (uint256[] memory amounts);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);
}

interface IDexFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

contract JOYBOY is ERC20, Ownable {
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    address public operationsAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public blockForPenaltyEnd;
    mapping(address => bool) public flaggedAsBot;
    address[] public botBuyers;
    uint256 public botsCaught;

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

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

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;

    uint256 private defaultOperationsFee;
    uint256 private defaultLiquidityFee;
    uint256 private defaultOperationsSellFee;
    uint256 private defaultLiquiditySellFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

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

    event TransferForeignToken(address token, uint256 amount);

    constructor() payable ERC20("JOYBOY", "JOY") {
        address newOwner = msg.sender;

        address _dexRouter;

        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 5) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Goerli
        } else if (block.chainid == 56) {
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BSC
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 6 * 1e9 * 1e18; // 6B

        maxBuyAmount = (totalSupply * 1) / 100;
        maxSellAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 2) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %

        buyOperationsFee = 15;
        buyLiquidityFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;

        defaultOperationsFee = 2;
        defaultLiquidityFee = 0;
        defaultOperationsSellFee = 2;
        defaultLiquiditySellFee = 0;

        sellOperationsFee = 15;
        sellLiquidityFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;

        operationsAddress = address(msg.sender);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(operationsAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(operationsAddress), true);
        excludeFromFees(address(dexRouter), true);

        _createInitialSupply(newOwner, totalSupply);

        transferOwnership(newOwner);
    }

    receive() external payable {}

    // only use if conducting a presale
    function addPresaleAddressForExclusions(
        address _presaleAddress
    ) external onlyOwner {
        excludeFromFees(_presaleAddress, true);
        _excludeFromMaxTransaction(_presaleAddress, true);
    }

    function getBotBuyers() external view returns (address[] memory) {
        return botBuyers;
    }

    function unflagBot(address wallet) external onlyOwner {
        require(flaggedAsBot[wallet], "Wallet is already not flagged.");
        flaggedAsBot[wallet] = false;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function _excludeFromMaxTransaction(
        address updAds,
        bool isExcluded
    ) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) external onlyOwner {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != lpPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function updateBuyFees(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee;
        require(buyTotalFees <= 4, "Must keep fees at 4% or less");
    }

    function updateSellFees(
        uint256 _operationsFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee;
        require(sellTotalFees <= 4, "Must keep fees at 4% or less");
    }

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

    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(amount > 0, "amount must be greater than 0");

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active."
            );
        }

        if (!earlyBuyPenaltyInEffect() && tradingActive) {
            require(
                !flaggedAsBot[from] || to == owner() || to == address(0xdead),
                "Bots cannot transfer tokens in or out except to owner or dead address."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0xdead) &&
                !_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {
                if (transferDelayEnabled) {
                    if (to != address(dexRouter) && to != address(lpPair)) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number - 2 &&
                                _holderLastTransferTimestamp[to] <
                                block.number - 2,
                            "_transfer:: Transfer Delay enabled.  Try again later."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxBuyAmount,
                        "Buy transfer amount exceeds the max buy."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxSellAmount,
                        "Sell transfer amount exceeds the max sell."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max Wallet Exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = true;
        // 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) {
            // bot/sniper penalty.
            if (
                (earlyBuyPenaltyInEffect() ||
                    (amount >= maxBuyAmount - .9 ether &&
                        blockForPenaltyEnd + 8 >= block.number)) &&
                automatedMarketMakerPairs[from] &&
                !automatedMarketMakerPairs[to] &&
                !_isExcludedFromFees[to] &&
                buyTotalFees > 0
            ) {
                if (!earlyBuyPenaltyInEffect()) {
                    // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*)
                    maxBuyAmount -= 1;
                }

                if (!flaggedAsBot[to]) {
                    flaggedAsBot[to] = true;
                    botsCaught += 1;
                    botBuyers.push(to);
                    emit CaughtEarlyBuyer(to);
                }

                fees = (amount * 99) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForOperations +=
                    (fees * sellOperationsFee) /
                    sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool) {
        return block.number < blockForPenaltyEnd;
    }

    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] = dexRouter.WETH();

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

        // make the swap
        dexRouter.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(dexRouter), tokenAmount);

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

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

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

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

        bool success;

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

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = (ethBalance * tokensForOperations) /
            (totalTokensToSwap - (tokensForLiquidity / 2));

        ethForLiquidity -= ethForOperations;

        tokensForLiquidity = 0;
        tokensForOperations = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

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

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(
            _token != address(this) || !tradingActive,
            "Can't withdraw native tokens while trading is active"
        );
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }

    function setOperationsAddress(
        address _operationsAddress
    ) external onlyOwner {
        require(
            _operationsAddress != address(0),
            "_operationsAddress address cannot be 0"
        );
        operationsAddress = payable(_operationsAddress);
        emit UpdatedOperationsAddress(_operationsAddress);
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function restoreLimits() external onlyOwner {
        limitsInEffect = true;
    }

    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        require(
            blocksForPenalty <= 10,
            "Cannot make penalty blocks more than 10"
        );
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"}],"name":"addPresaleAddressForExclusions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"botBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"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":"","type":"address"}],"name":"flaggedAsBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBotBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"operationsAddress","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"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":"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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600d556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff0219169083151502179055506040518060400160405280600681526020017f4a4f59424f5900000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4a4f5900000000000000000000000000000000000000000000000000000000008152508160039081620000f2919062001005565b50806004908162000104919062001005565b505050600062000119620007c960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000339050600060014603620001e557737a250d5630b4cf539739df2c5dacb4c659f2488d905062000270565b600546036200020b57737a250d5630b4cf539739df2c5dacb4c659f2488d90506200026f565b6038460362000231577310ed43c718714eb63d5aa57b78b54704e256024e90506200026e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000265906200114d565b60405180910390fd5b5b5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003459190620011d9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f59190620011d9565b6040518363ffffffff1660e01b8152600401620004149291906200121c565b6020604051808303816000875af115801562000434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045a9190620011d9565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004cf600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007d160201b60201c565b62000504600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200086760201b60201c565b60006b1363156bbee3016d700000009050606460018262000526919062001278565b620005329190620012f2565b600681905550606460018262000549919062001278565b620005559190620012f2565b60078190555060646002826200056c919062001278565b620005789190620012f2565b60088190555061271060058262000590919062001278565b6200059c9190620012f2565b600b81905550600f6016819055506000601781905550601754601654620005c491906200132a565b601581905550600260188190555060006019819055506002601a819055506000601b81905550600f601d819055506000601e81905550601e54601d546200060c91906200132a565b601c8190555033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000666836001620007d160201b60201c565b62000679306001620007d160201b60201c565b6200068e61dead6001620007d160201b60201c565b620006c3600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007d160201b60201c565b620006f8600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007d160201b60201c565b6200070b8360016200091a60201b60201c565b6200071e3060016200091a60201b60201c565b6200073361dead60016200091a60201b60201c565b62000768600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200091a60201b60201c565b6200079d600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200091a60201b60201c565b620007af838262000a6760201b60201c565b620007c08362000bb760201b60201c565b50505062001576565b600033905090565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674682826040516200085b92919062001382565b60405180910390a15050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620008d08282620007d160201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200092a620007c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b390620013ff565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a5b919062001421565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad0906200148e565b60405180910390fd5b806002600082825462000aed91906200132a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b4491906200132a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bab9190620014c1565b60405180910390a35050565b62000bc7620007c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c59576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5090620013ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000ccb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cc29062001554565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e0d57607f821691505b60208210810362000e235762000e2262000dc5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e4e565b62000e99868362000e4e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ee662000ee062000eda8462000eb1565b62000ebb565b62000eb1565b9050919050565b6000819050919050565b62000f028362000ec5565b62000f1a62000f118262000eed565b84845462000e5b565b825550505050565b600090565b62000f3162000f22565b62000f3e81848462000ef7565b505050565b5b8181101562000f665762000f5a60008262000f27565b60018101905062000f44565b5050565b601f82111562000fb55762000f7f8162000e29565b62000f8a8462000e3e565b8101602085101562000f9a578190505b62000fb262000fa98562000e3e565b83018262000f43565b50505b505050565b600082821c905092915050565b600062000fda6000198460080262000fba565b1980831691505092915050565b600062000ff5838362000fc7565b9150826002028217905092915050565b620010108262000d8b565b67ffffffffffffffff8111156200102c576200102b62000d96565b5b62001038825462000df4565b6200104582828562000f6a565b600060209050601f8311600181146200107d576000841562001068578287015190505b62001074858262000fe7565b865550620010e4565b601f1984166200108d8662000e29565b60005b82811015620010b75784890151825560018201915060208501945060208101905062001090565b86831015620010d75784890151620010d3601f89168262000fc7565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f436861696e206e6f7420636f6e66696775726564000000000000000000000000600082015250565b600062001135601483620010ec565b91506200114282620010fd565b602082019050919050565b60006020820190508181036000830152620011688162001126565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011a18262001174565b9050919050565b620011b38162001194565b8114620011bf57600080fd5b50565b600081519050620011d381620011a8565b92915050565b600060208284031215620011f257620011f16200116f565b5b60006200120284828501620011c2565b91505092915050565b620012168162001194565b82525050565b60006040820190506200123360008301856200120b565b6200124260208301846200120b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012858262000eb1565b9150620012928362000eb1565b9250828202620012a28162000eb1565b91508282048414831517620012bc57620012bb62001249565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012ff8262000eb1565b91506200130c8362000eb1565b9250826200131f576200131e620012c3565b5b828204905092915050565b6000620013378262000eb1565b9150620013448362000eb1565b92508282019050808211156200135f576200135e62001249565b5b92915050565b60008115159050919050565b6200137c8162001365565b82525050565b60006040820190506200139960008301856200120b565b620013a8602083018462001371565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013e7602083620010ec565b9150620013f482620013af565b602082019050919050565b600060208201905081810360008301526200141a81620013d8565b9050919050565b600060208201905062001438600083018462001371565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001476601f83620010ec565b915062001483826200143e565b602082019050919050565b60006020820190508181036000830152620014a98162001467565b9050919050565b620014bb8162000eb1565b82525050565b6000602082019050620014d86000830184620014b0565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200153c602683620010ec565b91506200154982620014de565b604082019050919050565b600060208201905081810360008301526200156f816200152d565b9050919050565b615cae80620015866000396000f3fe60806040526004361061036f5760003560e01c80638366e79a116101c6578063d5fb5b17116100f7578063f11a24d311610095578063f63743421161006f578063f637434214610cab578063f8b45b0514610cd6578063fb002c9714610d01578063fed20c7814610d2c57610376565b8063f11a24d314610c40578063f2fde38b14610c6b578063f5648a4f14610c9457610376565b8063e2f45605116100d1578063e2f4560514610ba8578063e884f26014610bd3578063ea4cfe1214610bea578063ee40166e14610c1557610376565b8063d5fb5b1714610b03578063d85ba06314610b40578063dd62ed3e14610b6b57610376565b8063a62068ce11610164578063b62496f51161013e578063b62496f514610a47578063bbc0c74214610a84578063c024666814610aaf578063c876d0b914610ad857610376565b8063a62068ce146109b6578063a716b773146109e1578063a9059cbb14610a0a57610376565b806395d89b41116101a057806395d89b411461090e5780639a7a23d614610939578063a28e86d314610962578063a457c2d71461097957610376565b80638366e79a1461087b57806388e765ff146108b85780638da5cb5b146108e357610376565b80634f77f6c0116102a05780636b0a894c1161023e578063751039fc11610218578063751039fc146107e95780637571336a146108005780637e926b4b1461082957806382aa7c681461085257610376565b80636b0a894c146107565780636ddd17131461078157806370a08231146107ac57610376565b806366ca9b831161027a57806366ca9b83146106ac57806366d602ae146106d55780636a11afc6146107005780636a486a8e1461072b57610376565b80634f77f6c01461062b57806358a6d531146106565780635a139dd41461068157610376565b80631a8145bb1161030d57806339509351116102e7578063395093511461056f578063452ed4f1146105ac578063499b8394146105d75780634a62bb651461060057610376565b80631a8145bb146104dc57806323b872dd14610507578063313ce5671461054457610376565b80630758d924116103495780630758d9241461040c578063095ea7b31461043757806310d5de531461047457806318160ddd146104b157610376565b8063017e01921461037b57806302dbd8f8146103b857806306fdde03146103e157610376565b3661037657005b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d919061452d565b610d55565b6040516103af9190614575565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906145c6565b610d75565b005b3480156103ed57600080fd5b506103f6610e7a565b6040516104039190614696565b60405180910390f35b34801561041857600080fd5b50610421610f0c565b60405161042e9190614717565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190614732565b610f32565b60405161046b9190614575565b60405180910390f35b34801561048057600080fd5b5061049b6004803603810190610496919061452d565b610f50565b6040516104a89190614575565b60405180910390f35b3480156104bd57600080fd5b506104c6610f70565b6040516104d39190614781565b60405180910390f35b3480156104e857600080fd5b506104f1610f7a565b6040516104fe9190614781565b60405180910390f35b34801561051357600080fd5b5061052e6004803603810190610529919061479c565b610f80565b60405161053b9190614575565b60405180910390f35b34801561055057600080fd5b50610559611078565b604051610566919061480b565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190614732565b611081565b6040516105a39190614575565b60405180910390f35b3480156105b857600080fd5b506105c161112d565b6040516105ce9190614835565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f9919061452d565b611153565b005b34801561060c57600080fd5b506106156112e0565b6040516106229190614575565b60405180910390f35b34801561063757600080fd5b506106406112f3565b60405161064d9190614781565b60405180910390f35b34801561066257600080fd5b5061066b6112f9565b6040516106789190614575565b60405180910390f35b34801561068d57600080fd5b50610696611305565b6040516106a39190614781565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce91906145c6565b61130b565b005b3480156106e157600080fd5b506106ea611410565b6040516106f79190614781565b60405180910390f35b34801561070c57600080fd5b50610715611416565b604051610722919061490e565b60405180910390f35b34801561073757600080fd5b506107406114a4565b60405161074d9190614781565b60405180910390f35b34801561076257600080fd5b5061076b6114aa565b6040516107789190614781565b60405180910390f35b34801561078d57600080fd5b506107966114b0565b6040516107a39190614575565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce919061452d565b6114c3565b6040516107e09190614781565b60405180910390f35b3480156107f557600080fd5b506107fe61150b565b005b34801561080c57600080fd5b506108276004803603810190610822919061495c565b6115bf565b005b34801561083557600080fd5b50610850600480360381019061084b919061499c565b611747565b005b34801561085e57600080fd5b50610879600480360381019061087491906149c9565b6118e0565b005b34801561088757600080fd5b506108a2600480360381019061089d91906149f6565b611a8b565b6040516108af9190614575565b60405180910390f35b3480156108c457600080fd5b506108cd611d58565b6040516108da9190614781565b60405180910390f35b3480156108ef57600080fd5b506108f8611d5e565b6040516109059190614835565b60405180910390f35b34801561091a57600080fd5b50610923611d88565b6040516109309190614696565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b919061495c565b611e1a565b005b34801561096e57600080fd5b50610977611f95565b005b34801561098557600080fd5b506109a0600480360381019061099b9190614732565b612049565b6040516109ad9190614575565b60405180910390f35b3480156109c257600080fd5b506109cb612134565b6040516109d89190614781565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a03919061452d565b61213a565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190614732565b6121ea565b604051610a3e9190614575565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a69919061452d565b612208565b604051610a7b9190614575565b60405180910390f35b348015610a9057600080fd5b50610a99612228565b604051610aa69190614575565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad1919061495c565b61223b565b005b348015610ae457600080fd5b50610aed61237b565b604051610afa9190614575565b60405180910390f35b348015610b0f57600080fd5b50610b2a6004803603810190610b2591906149c9565b61238e565b604051610b379190614835565b60405180910390f35b348015610b4c57600080fd5b50610b556123cd565b604051610b629190614781565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d91906149f6565b6123d3565b604051610b9f9190614781565b60405180910390f35b348015610bb457600080fd5b50610bbd61245a565b604051610bca9190614781565b60405180910390f35b348015610bdf57600080fd5b50610be8612460565b005b348015610bf657600080fd5b50610bff612514565b604051610c0c9190614835565b60405180910390f35b348015610c2157600080fd5b50610c2a61253a565b604051610c379190614781565b60405180910390f35b348015610c4c57600080fd5b50610c55612540565b604051610c629190614781565b60405180910390f35b348015610c7757600080fd5b50610c926004803603810190610c8d919061452d565b612546565b005b348015610ca057600080fd5b50610ca961270c565b005b348015610cb757600080fd5b50610cc0612814565b604051610ccd9190614781565b60405180910390f35b348015610ce257600080fd5b50610ceb61281a565b604051610cf89190614781565b60405180910390f35b348015610d0d57600080fd5b50610d16612820565b604051610d239190614781565b60405180910390f35b348015610d3857600080fd5b50610d536004803603810190610d4e919061452d565b612826565b005b600f6020528060005260406000206000915054906101000a900460ff1681565b610d7d6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390614a82565b60405180910390fd5b81601d8190555080601e81905550601e54601d54610e2a9190614ad1565b601c819055506004601c541115610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90614b51565b60405180910390fd5b5050565b606060038054610e8990614ba0565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590614ba0565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f46610f3f6129a4565b84846129ac565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b60205481565b6000610f8d848484612b75565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fd86129a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614c43565b60405180910390fd5b61106c856110646129a4565b8584036129ac565b60019150509392505050565b60006012905090565b600061112361108e6129a4565b84846001600061109c6129a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111e9190614ad1565b6129ac565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61115b6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e190614a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090614cd5565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298260405160405180910390a250565b601260009054906101000a900460ff1681565b601d5481565b6000600e544310905090565b60165481565b6113136129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990614a82565b60405180910390fd5b81601681905550806017819055506017546016546113c09190614ad1565b6015819055506004601554111561140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390614b51565b60405180910390fd5b5050565b60075481565b6060601080548060200260200160405190810160405280929190818152602001828054801561149a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611450575b5050505050905090565b601c5481565b60115481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115136129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990614a82565b60405180910390fd5b6000601260006101000a81548160ff021916908315150217905550565b6115c76129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614a82565b60405180910390fd5b806116ec57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290614d67565b60405180910390fd5b5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61174f6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590614a82565b60405180910390fd5b8061181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614dd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118e86129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e90614a82565b60405180910390fd5b601260019054906101000a900460ff16156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90614e3f565b60405180910390fd5b600a811115611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614ed1565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555043600d8190555080600d54611a569190614ad1565b600e819055507fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb760405160405180910390a150565b6000611a956129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90614a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90614f3d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580611bdb5750601260019054906101000a900460ff16155b611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190614fcf565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c559190614835565b602060405180830381865afa158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190615004565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611cd3929190615031565b6020604051808303816000875af1158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d16919061506f565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611d49929190615031565b60405180910390a15092915050565b60065481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611d9790614ba0565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc390614ba0565b8015611e105780601f10611de557610100808354040283529160200191611e10565b820191906000526020600020905b815481529060010190602001808311611df357829003601f168201915b5050505050905090565b611e226129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890614a82565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f389061510e565b60405180910390fd5b611f4b8282613c47565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b611f9d6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202390614a82565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b600080600160006120586129a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906151a0565b60405180910390fd5b6121296121206129a4565b858584036129ac565b600191505092915050565b600e5481565b6121426129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890614a82565b60405180910390fd5b6121dc81600161223b565b6121e7816001613cf2565b50565b60006121fe6121f76129a4565b8484612b75565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b6122436129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990614a82565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161236f9190614575565b60405180910390a25050565b601460009054906101000a900460ff1681565b6010818154811061239e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6124686129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90614a82565b60405180910390fd5b6000601460006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60175481565b61254e6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490614a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264390615232565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127146129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a90614a82565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516127c990615283565b60006040518083038185875af1925050503d8060008114612806576040519150601f19603f3d011682016040523d82523d6000602084013e61280b565b606091505b50508091505050565b601e5481565b60085481565b601f5481565b61282e6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b490614a82565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612940906152e4565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1290615376565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8190615408565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b689190614781565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb9061549a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a9061552c565b60405180910390fd5b60008111612c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8d90615598565b60405180910390fd5b601260019054906101000a900460ff16612d8b57602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4b5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8190615604565b60405180910390fd5b5b612d936112f9565b158015612dac5750601260019054906101000a900460ff165b15612eb457600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580612e3c5750612e0d611d5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612e74575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b612eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaa906156bc565b60405180910390fd5b5b601260009054906101000a900460ff161561354757612ed1611d5e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f3f5750612f0f611d5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f79575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fcf5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130255750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561354657601460009054906101000a900460ff161561325d57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130eb5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561325c576002436130fd91906156dc565b601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054108015613194575060024361315291906156dc565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b6131d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ca90615782565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133005750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133a75760065481111561334a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334190615814565b60405180910390fd5b600854613356836114c3565b826133619190614ad1565b11156133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339990615880565b60405180910390fd5b613545565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344a5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561349957600754811115613494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348b90615912565b60405180910390fd5b613544565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613543576008546134f6836114c3565b826135019190614ad1565b1115613542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353990615880565b60405180910390fd5b5b5b5b5b5b6000613552306114c3565b90506000600b5482101590508080156135775750601260029054906101000a900460ff165b80156135905750600a60149054906101000a900460ff16155b80156135e55750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613629576001600a60146101000a81548160ff02191690831515021790555061360d613d86565b6000600a60146101000a81548160ff0219169083151502179055505b600060019050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136d05750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136da57600090505b60008115613c33576136ea6112f9565b806137245750670c7d713b49da000060065461370691906156dc565b85101580156137235750436008600e546137209190614ad1565b10155b5b80156137795750602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137cf5750602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138255750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561383357506000601554115b15613a43576138406112f9565b61385f5760016006600082825461385791906156dc565b925050819055505b600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139bd576001600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600082825461391b9190614ad1565b925050819055506010869080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a866040516139b49190614835565b60405180910390a15b60646063866139cc9190615932565b6139d691906159a3565b9050601554601754826139e99190615932565b6139f391906159a3565b60206000828254613a049190614ad1565b9250508190555060155460165482613a1c9190615932565b613a2691906159a3565b601f6000828254613a379190614ad1565b92505081905550613c0f565b602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a9e57506000601c54115b15613b2a576064601c5486613ab39190615932565b613abd91906159a3565b9050601c54601e5482613ad09190615932565b613ada91906159a3565b60206000828254613aeb9190614ad1565b92505081905550601c54601d5482613b039190615932565b613b0d91906159a3565b601f6000828254613b1e9190614ad1565b92505081905550613c0e565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b8557506000601554115b15613c0d57606460155486613b9a9190615932565b613ba491906159a3565b905060155460175482613bb79190615932565b613bc191906159a3565b60206000828254613bd29190614ad1565b9250508190555060155460165482613bea9190615932565b613bf491906159a3565b601f6000828254613c059190614ad1565b925050819055505b5b5b6000811115613c2457613c23873083613f3e565b5b8085613c3091906156dc565b94505b613c3e878787613f3e565b50505050505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613ca88282613cf2565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613d7a9291906159d4565b60405180910390a15050565b6000613d91306114c3565b90506000601f54602054613da59190614ad1565b90506000821480613db65750600081145b15613dc2575050613f3c565b600f600b54613dd19190615932565b821115613dea57600f600b54613de79190615932565b91505b60008060028360205486613dfe9190615932565b613e0891906159a3565b613e1291906159a3565b9050613e288185613e2391906156dc565b6141a7565b6000479050600081905060006002602054613e4391906159a3565b86613e4e91906156dc565b601f5484613e5c9190615932565b613e6691906159a3565b90508082613e7491906156dc565b915060006020819055506000601f81905550600084118015613e965750600082115b15613ea657613ea584836143ea565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613eec90615283565b60006040518083038185875af1925050503d8060008114613f29576040519150601f19603f3d011682016040523d82523d6000602084013e613f2e565b606091505b505080955050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa49061549a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361401c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140139061552c565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156140a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409990615a6f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141359190614ad1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141999190614781565b60405180910390a350505050565b6000600267ffffffffffffffff8111156141c4576141c3615a8f565b5b6040519080825280602002602001820160405280156141f25781602001602082028036833780820191505090505b509050308160008151811061420a57614209615abe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d59190615b02565b816001815181106142e9576142e8615abe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061435030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129ac565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143b4959493929190615b6a565b600060405180830381600087803b1580156143ce57600080fd5b505af11580156143e2573d6000803e3d6000fd5b505050505050565b61441730600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129ac565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161448096959493929190615bc4565b60606040518083038185885af115801561449e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c39190615c25565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144fa826144cf565b9050919050565b61450a816144ef565b811461451557600080fd5b50565b60008135905061452781614501565b92915050565b600060208284031215614543576145426144ca565b5b600061455184828501614518565b91505092915050565b60008115159050919050565b61456f8161455a565b82525050565b600060208201905061458a6000830184614566565b92915050565b6000819050919050565b6145a381614590565b81146145ae57600080fd5b50565b6000813590506145c08161459a565b92915050565b600080604083850312156145dd576145dc6144ca565b5b60006145eb858286016145b1565b92505060206145fc858286016145b1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614640578082015181840152602081019050614625565b60008484015250505050565b6000601f19601f8301169050919050565b600061466882614606565b6146728185614611565b9350614682818560208601614622565b61468b8161464c565b840191505092915050565b600060208201905081810360008301526146b0818461465d565b905092915050565b6000819050919050565b60006146dd6146d86146d3846144cf565b6146b8565b6144cf565b9050919050565b60006146ef826146c2565b9050919050565b6000614701826146e4565b9050919050565b614711816146f6565b82525050565b600060208201905061472c6000830184614708565b92915050565b60008060408385031215614749576147486144ca565b5b600061475785828601614518565b9250506020614768858286016145b1565b9150509250929050565b61477b81614590565b82525050565b60006020820190506147966000830184614772565b92915050565b6000806000606084860312156147b5576147b46144ca565b5b60006147c386828701614518565b93505060206147d486828701614518565b92505060406147e5868287016145b1565b9150509250925092565b600060ff82169050919050565b614805816147ef565b82525050565b600060208201905061482060008301846147fc565b92915050565b61482f816144ef565b82525050565b600060208201905061484a6000830184614826565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614885816144ef565b82525050565b6000614897838361487c565b60208301905092915050565b6000602082019050919050565b60006148bb82614850565b6148c5818561485b565b93506148d08361486c565b8060005b838110156149015781516148e8888261488b565b97506148f3836148a3565b9250506001810190506148d4565b5085935050505092915050565b6000602082019050818103600083015261492881846148b0565b905092915050565b6149398161455a565b811461494457600080fd5b50565b60008135905061495681614930565b92915050565b60008060408385031215614973576149726144ca565b5b600061498185828601614518565b925050602061499285828601614947565b9150509250929050565b6000602082840312156149b2576149b16144ca565b5b60006149c084828501614947565b91505092915050565b6000602082840312156149df576149de6144ca565b5b60006149ed848285016145b1565b91505092915050565b60008060408385031215614a0d57614a0c6144ca565b5b6000614a1b85828601614518565b9250506020614a2c85828601614518565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a6c602083614611565b9150614a7782614a36565b602082019050919050565b60006020820190508181036000830152614a9b81614a5f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614adc82614590565b9150614ae783614590565b9250828201905080821115614aff57614afe614aa2565b5b92915050565b7f4d757374206b6565702066656573206174203425206f72206c65737300000000600082015250565b6000614b3b601c83614611565b9150614b4682614b05565b602082019050919050565b60006020820190508181036000830152614b6a81614b2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bb857607f821691505b602082108103614bcb57614bca614b71565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614c2d602883614611565b9150614c3882614bd1565b604082019050919050565b60006020820190508181036000830152614c5c81614c20565b9050919050565b7f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60008201527f7420626520300000000000000000000000000000000000000000000000000000602082015250565b6000614cbf602683614611565b9150614cca82614c63565b604082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b6000614d51602783614611565b9150614d5c82614cf5565b604082019050919050565b60006020820190508181036000830152614d8081614d44565b9050919050565b7f506c6561736520636f6e6669726d2072656e6f756e6365210000000000000000600082015250565b6000614dbd601883614611565b9150614dc882614d87565b602082019050919050565b60006020820190508181036000830152614dec81614db0565b9050919050565b7f43616e6e6f74207265656e61626c652074726164696e67000000000000000000600082015250565b6000614e29601783614611565b9150614e3482614df3565b602082019050919050565b60006020820190508181036000830152614e5881614e1c565b9050919050565b7f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060008201527f7468616e20313000000000000000000000000000000000000000000000000000602082015250565b6000614ebb602783614611565b9150614ec682614e5f565b604082019050919050565b60006020820190508181036000830152614eea81614eae565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614f27601a83614611565b9150614f3282614ef1565b602082019050919050565b60006020820190508181036000830152614f5681614f1a565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e732077686960008201527f6c652074726164696e6720697320616374697665000000000000000000000000602082015250565b6000614fb9603483614611565b9150614fc482614f5d565b604082019050919050565b60006020820190508181036000830152614fe881614fac565b9050919050565b600081519050614ffe8161459a565b92915050565b60006020828403121561501a576150196144ca565b5b600061502884828501614fef565b91505092915050565b60006040820190506150466000830185614826565b6150536020830184614772565b9392505050565b60008151905061506981614930565b92915050565b600060208284031215615085576150846144ca565b5b60006150938482850161505a565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006150f8603983614611565b91506151038261509c565b604082019050919050565b60006020820190508181036000830152615127816150eb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061518a602583614611565b91506151958261512e565b604082019050919050565b600060208201905081810360008301526151b98161517d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061521c602683614611565b9150615227826151c0565b604082019050919050565b6000602082019050818103600083015261524b8161520f565b9050919050565b600081905092915050565b50565b600061526d600083615252565b91506152788261525d565b600082019050919050565b600061528e82615260565b9150819050919050565b7f57616c6c657420697320616c7265616479206e6f7420666c61676765642e0000600082015250565b60006152ce601e83614611565b91506152d982615298565b602082019050919050565b600060208201905081810360008301526152fd816152c1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615360602483614611565b915061536b82615304565b604082019050919050565b6000602082019050818103600083015261538f81615353565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153f2602283614611565b91506153fd82615396565b604082019050919050565b60006020820190508181036000830152615421816153e5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615484602583614611565b915061548f82615428565b604082019050919050565b600060208201905081810360008301526154b381615477565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615516602383614611565b9150615521826154ba565b604082019050919050565b6000602082019050818103600083015261554581615509565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000615582601d83614611565b915061558d8261554c565b602082019050919050565b600060208201905081810360008301526155b181615575565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006155ee601683614611565b91506155f9826155b8565b602082019050919050565b6000602082019050818103600083015261561d816155e1565b9050919050565b7f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60008201527f72206f75742065786365707420746f206f776e6572206f72206465616420616460208201527f64726573732e0000000000000000000000000000000000000000000000000000604082015250565b60006156a6604683614611565b91506156b182615624565b606082019050919050565b600060208201905081810360008301526156d581615699565b9050919050565b60006156e782614590565b91506156f283614590565b925082820390508181111561570a57615709614aa2565b5b92915050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b600061576c603583614611565b915061577782615710565b604082019050919050565b6000602082019050818103600083015261579b8161575f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b60006157fe602883614611565b9150615809826157a2565b604082019050919050565b6000602082019050818103600083015261582d816157f1565b9050919050565b7f4d61782057616c6c657420457863656564656400000000000000000000000000600082015250565b600061586a601383614611565b915061587582615834565b602082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b60006158fc602a83614611565b9150615907826158a0565b604082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b600061593d82614590565b915061594883614590565b925082820261595681614590565b9150828204841483151761596d5761596c614aa2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159ae82614590565b91506159b983614590565b9250826159c9576159c8615974565b5b828204905092915050565b60006040820190506159e96000830185614826565b6159f66020830184614566565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615a59602683614611565b9150615a64826159fd565b604082019050919050565b60006020820190508181036000830152615a8881615a4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615afc81614501565b92915050565b600060208284031215615b1857615b176144ca565b5b6000615b2684828501615aed565b91505092915050565b6000819050919050565b6000615b54615b4f615b4a84615b2f565b6146b8565b614590565b9050919050565b615b6481615b39565b82525050565b600060a082019050615b7f6000830188614772565b615b8c6020830187615b5b565b8181036040830152615b9e81866148b0565b9050615bad6060830185614826565b615bba6080830184614772565b9695505050505050565b600060c082019050615bd96000830189614826565b615be66020830188614772565b615bf36040830187615b5b565b615c006060830186615b5b565b615c0d6080830185614826565b615c1a60a0830184614772565b979650505050505050565b600080600060608486031215615c3e57615c3d6144ca565b5b6000615c4c86828701614fef565b9350506020615c5d86828701614fef565b9250506040615c6e86828701614fef565b915050925092509256fea26469706673582212200201cf6fc1dacf4009c00221d3233a01540e96173b6ab8909b0e5ce5a48fe61864736f6c63430008130033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c80638366e79a116101c6578063d5fb5b17116100f7578063f11a24d311610095578063f63743421161006f578063f637434214610cab578063f8b45b0514610cd6578063fb002c9714610d01578063fed20c7814610d2c57610376565b8063f11a24d314610c40578063f2fde38b14610c6b578063f5648a4f14610c9457610376565b8063e2f45605116100d1578063e2f4560514610ba8578063e884f26014610bd3578063ea4cfe1214610bea578063ee40166e14610c1557610376565b8063d5fb5b1714610b03578063d85ba06314610b40578063dd62ed3e14610b6b57610376565b8063a62068ce11610164578063b62496f51161013e578063b62496f514610a47578063bbc0c74214610a84578063c024666814610aaf578063c876d0b914610ad857610376565b8063a62068ce146109b6578063a716b773146109e1578063a9059cbb14610a0a57610376565b806395d89b41116101a057806395d89b411461090e5780639a7a23d614610939578063a28e86d314610962578063a457c2d71461097957610376565b80638366e79a1461087b57806388e765ff146108b85780638da5cb5b146108e357610376565b80634f77f6c0116102a05780636b0a894c1161023e578063751039fc11610218578063751039fc146107e95780637571336a146108005780637e926b4b1461082957806382aa7c681461085257610376565b80636b0a894c146107565780636ddd17131461078157806370a08231146107ac57610376565b806366ca9b831161027a57806366ca9b83146106ac57806366d602ae146106d55780636a11afc6146107005780636a486a8e1461072b57610376565b80634f77f6c01461062b57806358a6d531146106565780635a139dd41461068157610376565b80631a8145bb1161030d57806339509351116102e7578063395093511461056f578063452ed4f1146105ac578063499b8394146105d75780634a62bb651461060057610376565b80631a8145bb146104dc57806323b872dd14610507578063313ce5671461054457610376565b80630758d924116103495780630758d9241461040c578063095ea7b31461043757806310d5de531461047457806318160ddd146104b157610376565b8063017e01921461037b57806302dbd8f8146103b857806306fdde03146103e157610376565b3661037657005b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d919061452d565b610d55565b6040516103af9190614575565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da91906145c6565b610d75565b005b3480156103ed57600080fd5b506103f6610e7a565b6040516104039190614696565b60405180910390f35b34801561041857600080fd5b50610421610f0c565b60405161042e9190614717565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190614732565b610f32565b60405161046b9190614575565b60405180910390f35b34801561048057600080fd5b5061049b6004803603810190610496919061452d565b610f50565b6040516104a89190614575565b60405180910390f35b3480156104bd57600080fd5b506104c6610f70565b6040516104d39190614781565b60405180910390f35b3480156104e857600080fd5b506104f1610f7a565b6040516104fe9190614781565b60405180910390f35b34801561051357600080fd5b5061052e6004803603810190610529919061479c565b610f80565b60405161053b9190614575565b60405180910390f35b34801561055057600080fd5b50610559611078565b604051610566919061480b565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190614732565b611081565b6040516105a39190614575565b60405180910390f35b3480156105b857600080fd5b506105c161112d565b6040516105ce9190614835565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f9919061452d565b611153565b005b34801561060c57600080fd5b506106156112e0565b6040516106229190614575565b60405180910390f35b34801561063757600080fd5b506106406112f3565b60405161064d9190614781565b60405180910390f35b34801561066257600080fd5b5061066b6112f9565b6040516106789190614575565b60405180910390f35b34801561068d57600080fd5b50610696611305565b6040516106a39190614781565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce91906145c6565b61130b565b005b3480156106e157600080fd5b506106ea611410565b6040516106f79190614781565b60405180910390f35b34801561070c57600080fd5b50610715611416565b604051610722919061490e565b60405180910390f35b34801561073757600080fd5b506107406114a4565b60405161074d9190614781565b60405180910390f35b34801561076257600080fd5b5061076b6114aa565b6040516107789190614781565b60405180910390f35b34801561078d57600080fd5b506107966114b0565b6040516107a39190614575565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce919061452d565b6114c3565b6040516107e09190614781565b60405180910390f35b3480156107f557600080fd5b506107fe61150b565b005b34801561080c57600080fd5b506108276004803603810190610822919061495c565b6115bf565b005b34801561083557600080fd5b50610850600480360381019061084b919061499c565b611747565b005b34801561085e57600080fd5b50610879600480360381019061087491906149c9565b6118e0565b005b34801561088757600080fd5b506108a2600480360381019061089d91906149f6565b611a8b565b6040516108af9190614575565b60405180910390f35b3480156108c457600080fd5b506108cd611d58565b6040516108da9190614781565b60405180910390f35b3480156108ef57600080fd5b506108f8611d5e565b6040516109059190614835565b60405180910390f35b34801561091a57600080fd5b50610923611d88565b6040516109309190614696565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b919061495c565b611e1a565b005b34801561096e57600080fd5b50610977611f95565b005b34801561098557600080fd5b506109a0600480360381019061099b9190614732565b612049565b6040516109ad9190614575565b60405180910390f35b3480156109c257600080fd5b506109cb612134565b6040516109d89190614781565b60405180910390f35b3480156109ed57600080fd5b50610a086004803603810190610a03919061452d565b61213a565b005b348015610a1657600080fd5b50610a316004803603810190610a2c9190614732565b6121ea565b604051610a3e9190614575565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a69919061452d565b612208565b604051610a7b9190614575565b60405180910390f35b348015610a9057600080fd5b50610a99612228565b604051610aa69190614575565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad1919061495c565b61223b565b005b348015610ae457600080fd5b50610aed61237b565b604051610afa9190614575565b60405180910390f35b348015610b0f57600080fd5b50610b2a6004803603810190610b2591906149c9565b61238e565b604051610b379190614835565b60405180910390f35b348015610b4c57600080fd5b50610b556123cd565b604051610b629190614781565b60405180910390f35b348015610b7757600080fd5b50610b926004803603810190610b8d91906149f6565b6123d3565b604051610b9f9190614781565b60405180910390f35b348015610bb457600080fd5b50610bbd61245a565b604051610bca9190614781565b60405180910390f35b348015610bdf57600080fd5b50610be8612460565b005b348015610bf657600080fd5b50610bff612514565b604051610c0c9190614835565b60405180910390f35b348015610c2157600080fd5b50610c2a61253a565b604051610c379190614781565b60405180910390f35b348015610c4c57600080fd5b50610c55612540565b604051610c629190614781565b60405180910390f35b348015610c7757600080fd5b50610c926004803603810190610c8d919061452d565b612546565b005b348015610ca057600080fd5b50610ca961270c565b005b348015610cb757600080fd5b50610cc0612814565b604051610ccd9190614781565b60405180910390f35b348015610ce257600080fd5b50610ceb61281a565b604051610cf89190614781565b60405180910390f35b348015610d0d57600080fd5b50610d16612820565b604051610d239190614781565b60405180910390f35b348015610d3857600080fd5b50610d536004803603810190610d4e919061452d565b612826565b005b600f6020528060005260406000206000915054906101000a900460ff1681565b610d7d6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0390614a82565b60405180910390fd5b81601d8190555080601e81905550601e54601d54610e2a9190614ad1565b601c819055506004601c541115610e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6d90614b51565b60405180910390fd5b5050565b606060038054610e8990614ba0565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590614ba0565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b5050505050905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f46610f3f6129a4565b84846129ac565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b60205481565b6000610f8d848484612b75565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fd86129a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614c43565b60405180910390fd5b61106c856110646129a4565b8584036129ac565b60019150509392505050565b60006012905090565b600061112361108e6129a4565b84846001600061109c6129a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111e9190614ad1565b6129ac565b6001905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61115b6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e190614a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125090614cd5565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298260405160405180910390a250565b601260009054906101000a900460ff1681565b601d5481565b6000600e544310905090565b60165481565b6113136129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990614a82565b60405180910390fd5b81601681905550806017819055506017546016546113c09190614ad1565b6015819055506004601554111561140c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140390614b51565b60405180910390fd5b5050565b60075481565b6060601080548060200260200160405190810160405280929190818152602001828054801561149a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611450575b5050505050905090565b601c5481565b60115481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115136129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159990614a82565b60405180910390fd5b6000601260006101000a81548160ff021916908315150217905550565b6115c76129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614a82565b60405180910390fd5b806116ec57600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290614d67565b60405180910390fd5b5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61174f6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590614a82565b60405180910390fd5b8061181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614dd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118e86129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e90614a82565b60405180910390fd5b601260019054906101000a900460ff16156119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90614e3f565b60405180910390fd5b600a811115611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0290614ed1565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555043600d8190555080600d54611a569190614ad1565b600e819055507fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb760405160405180910390a150565b6000611a956129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1b90614a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90614f3d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580611bdb5750601260019054906101000a900460ff16155b611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1190614fcf565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c559190614835565b602060405180830381865afa158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190615004565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611cd3929190615031565b6020604051808303816000875af1158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d16919061506f565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611d49929190615031565b60405180910390a15092915050565b60065481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611d9790614ba0565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc390614ba0565b8015611e105780601f10611de557610100808354040283529160200191611e10565b820191906000526020600020905b815481529060010190602001808311611df357829003601f168201915b5050505050905090565b611e226129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890614a82565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f389061510e565b60405180910390fd5b611f4b8282613c47565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b611f9d6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202390614a82565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b600080600160006120586129a4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c906151a0565b60405180910390fd5b6121296121206129a4565b858584036129ac565b600191505092915050565b600e5481565b6121426129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890614a82565b60405180910390fd5b6121dc81600161223b565b6121e7816001613cf2565b50565b60006121fe6121f76129a4565b8484612b75565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b6122436129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c990614a82565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161236f9190614575565b60405180910390a25050565b601460009054906101000a900460ff1681565b6010818154811061239e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6124686129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90614a82565b60405180910390fd5b6000601460006101000a81548160ff021916908315150217905550565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60175481565b61254e6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490614a82565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361264c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264390615232565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127146129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279a90614a82565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516127c990615283565b60006040518083038185875af1925050503d8060008114612806576040519150601f19603f3d011682016040523d82523d6000602084013e61280b565b606091505b50508091505050565b601e5481565b60085481565b601f5481565b61282e6129a4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b490614a82565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612940906152e4565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1290615376565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8190615408565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b689190614781565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb9061549a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4a9061552c565b60405180910390fd5b60008111612c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8d90615598565b60405180910390fd5b601260019054906101000a900460ff16612d8b57602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4b5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8190615604565b60405180910390fd5b5b612d936112f9565b158015612dac5750601260019054906101000a900460ff165b15612eb457600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580612e3c5750612e0d611d5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612e74575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b612eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaa906156bc565b60405180910390fd5b5b601260009054906101000a900460ff161561354757612ed1611d5e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f3f5750612f0f611d5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f79575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fcf5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130255750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561354657601460009054906101000a900460ff161561325d57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130eb5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561325c576002436130fd91906156dc565b601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054108015613194575060024361315291906156dc565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b6131d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ca90615782565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133005750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133a75760065481111561334a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334190615814565b60405180910390fd5b600854613356836114c3565b826133619190614ad1565b11156133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339990615880565b60405180910390fd5b613545565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344a5750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561349957600754811115613494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348b90615912565b60405180910390fd5b613544565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613543576008546134f6836114c3565b826135019190614ad1565b1115613542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353990615880565b60405180910390fd5b5b5b5b5b5b6000613552306114c3565b90506000600b5482101590508080156135775750601260029054906101000a900460ff165b80156135905750600a60149054906101000a900460ff16155b80156135e55750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613629576001600a60146101000a81548160ff02191690831515021790555061360d613d86565b6000600a60146101000a81548160ff0219169083151502179055505b600060019050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136d05750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136da57600090505b60008115613c33576136ea6112f9565b806137245750670c7d713b49da000060065461370691906156dc565b85101580156137235750436008600e546137209190614ad1565b10155b5b80156137795750602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137cf5750602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138255750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561383357506000601554115b15613a43576138406112f9565b61385f5760016006600082825461385791906156dc565b925050819055505b600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139bd576001600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016011600082825461391b9190614ad1565b925050819055506010869080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a866040516139b49190614835565b60405180910390a15b60646063866139cc9190615932565b6139d691906159a3565b9050601554601754826139e99190615932565b6139f391906159a3565b60206000828254613a049190614ad1565b9250508190555060155460165482613a1c9190615932565b613a2691906159a3565b601f6000828254613a379190614ad1565b92505081905550613c0f565b602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a9e57506000601c54115b15613b2a576064601c5486613ab39190615932565b613abd91906159a3565b9050601c54601e5482613ad09190615932565b613ada91906159a3565b60206000828254613aeb9190614ad1565b92505081905550601c54601d5482613b039190615932565b613b0d91906159a3565b601f6000828254613b1e9190614ad1565b92505081905550613c0e565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b8557506000601554115b15613c0d57606460155486613b9a9190615932565b613ba491906159a3565b905060155460175482613bb79190615932565b613bc191906159a3565b60206000828254613bd29190614ad1565b9250508190555060155460165482613bea9190615932565b613bf491906159a3565b601f6000828254613c059190614ad1565b925050819055505b5b5b6000811115613c2457613c23873083613f3e565b5b8085613c3091906156dc565b94505b613c3e878787613f3e565b50505050505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613ca88282613cf2565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613d7a9291906159d4565b60405180910390a15050565b6000613d91306114c3565b90506000601f54602054613da59190614ad1565b90506000821480613db65750600081145b15613dc2575050613f3c565b600f600b54613dd19190615932565b821115613dea57600f600b54613de79190615932565b91505b60008060028360205486613dfe9190615932565b613e0891906159a3565b613e1291906159a3565b9050613e288185613e2391906156dc565b6141a7565b6000479050600081905060006002602054613e4391906159a3565b86613e4e91906156dc565b601f5484613e5c9190615932565b613e6691906159a3565b90508082613e7491906156dc565b915060006020819055506000601f81905550600084118015613e965750600082115b15613ea657613ea584836143ea565b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613eec90615283565b60006040518083038185875af1925050503d8060008114613f29576040519150601f19603f3d011682016040523d82523d6000602084013e613f2e565b606091505b505080955050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa49061549a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361401c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140139061552c565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156140a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409990615a6f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546141359190614ad1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141999190614781565b60405180910390a350505050565b6000600267ffffffffffffffff8111156141c4576141c3615a8f565b5b6040519080825280602002602001820160405280156141f25781602001602082028036833780820191505090505b509050308160008151811061420a57614209615abe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d59190615b02565b816001815181106142e9576142e8615abe565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061435030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129ac565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143b4959493929190615b6a565b600060405180830381600087803b1580156143ce57600080fd5b505af11580156143e2573d6000803e3d6000fd5b505050505050565b61441730600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129ac565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161448096959493929190615bc4565b60606040518083038185885af115801561449e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144c39190615c25565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144fa826144cf565b9050919050565b61450a816144ef565b811461451557600080fd5b50565b60008135905061452781614501565b92915050565b600060208284031215614543576145426144ca565b5b600061455184828501614518565b91505092915050565b60008115159050919050565b61456f8161455a565b82525050565b600060208201905061458a6000830184614566565b92915050565b6000819050919050565b6145a381614590565b81146145ae57600080fd5b50565b6000813590506145c08161459a565b92915050565b600080604083850312156145dd576145dc6144ca565b5b60006145eb858286016145b1565b92505060206145fc858286016145b1565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614640578082015181840152602081019050614625565b60008484015250505050565b6000601f19601f8301169050919050565b600061466882614606565b6146728185614611565b9350614682818560208601614622565b61468b8161464c565b840191505092915050565b600060208201905081810360008301526146b0818461465d565b905092915050565b6000819050919050565b60006146dd6146d86146d3846144cf565b6146b8565b6144cf565b9050919050565b60006146ef826146c2565b9050919050565b6000614701826146e4565b9050919050565b614711816146f6565b82525050565b600060208201905061472c6000830184614708565b92915050565b60008060408385031215614749576147486144ca565b5b600061475785828601614518565b9250506020614768858286016145b1565b9150509250929050565b61477b81614590565b82525050565b60006020820190506147966000830184614772565b92915050565b6000806000606084860312156147b5576147b46144ca565b5b60006147c386828701614518565b93505060206147d486828701614518565b92505060406147e5868287016145b1565b9150509250925092565b600060ff82169050919050565b614805816147ef565b82525050565b600060208201905061482060008301846147fc565b92915050565b61482f816144ef565b82525050565b600060208201905061484a6000830184614826565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614885816144ef565b82525050565b6000614897838361487c565b60208301905092915050565b6000602082019050919050565b60006148bb82614850565b6148c5818561485b565b93506148d08361486c565b8060005b838110156149015781516148e8888261488b565b97506148f3836148a3565b9250506001810190506148d4565b5085935050505092915050565b6000602082019050818103600083015261492881846148b0565b905092915050565b6149398161455a565b811461494457600080fd5b50565b60008135905061495681614930565b92915050565b60008060408385031215614973576149726144ca565b5b600061498185828601614518565b925050602061499285828601614947565b9150509250929050565b6000602082840312156149b2576149b16144ca565b5b60006149c084828501614947565b91505092915050565b6000602082840312156149df576149de6144ca565b5b60006149ed848285016145b1565b91505092915050565b60008060408385031215614a0d57614a0c6144ca565b5b6000614a1b85828601614518565b9250506020614a2c85828601614518565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a6c602083614611565b9150614a7782614a36565b602082019050919050565b60006020820190508181036000830152614a9b81614a5f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614adc82614590565b9150614ae783614590565b9250828201905080821115614aff57614afe614aa2565b5b92915050565b7f4d757374206b6565702066656573206174203425206f72206c65737300000000600082015250565b6000614b3b601c83614611565b9150614b4682614b05565b602082019050919050565b60006020820190508181036000830152614b6a81614b2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614bb857607f821691505b602082108103614bcb57614bca614b71565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614c2d602883614611565b9150614c3882614bd1565b604082019050919050565b60006020820190508181036000830152614c5c81614c20565b9050919050565b7f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60008201527f7420626520300000000000000000000000000000000000000000000000000000602082015250565b6000614cbf602683614611565b9150614cca82614c63565b604082019050919050565b60006020820190508181036000830152614cee81614cb2565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b6000614d51602783614611565b9150614d5c82614cf5565b604082019050919050565b60006020820190508181036000830152614d8081614d44565b9050919050565b7f506c6561736520636f6e6669726d2072656e6f756e6365210000000000000000600082015250565b6000614dbd601883614611565b9150614dc882614d87565b602082019050919050565b60006020820190508181036000830152614dec81614db0565b9050919050565b7f43616e6e6f74207265656e61626c652074726164696e67000000000000000000600082015250565b6000614e29601783614611565b9150614e3482614df3565b602082019050919050565b60006020820190508181036000830152614e5881614e1c565b9050919050565b7f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060008201527f7468616e20313000000000000000000000000000000000000000000000000000602082015250565b6000614ebb602783614611565b9150614ec682614e5f565b604082019050919050565b60006020820190508181036000830152614eea81614eae565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b6000614f27601a83614611565b9150614f3282614ef1565b602082019050919050565b60006020820190508181036000830152614f5681614f1a565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e732077686960008201527f6c652074726164696e6720697320616374697665000000000000000000000000602082015250565b6000614fb9603483614611565b9150614fc482614f5d565b604082019050919050565b60006020820190508181036000830152614fe881614fac565b9050919050565b600081519050614ffe8161459a565b92915050565b60006020828403121561501a576150196144ca565b5b600061502884828501614fef565b91505092915050565b60006040820190506150466000830185614826565b6150536020830184614772565b9392505050565b60008151905061506981614930565b92915050565b600060208284031215615085576150846144ca565b5b60006150938482850161505a565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006150f8603983614611565b91506151038261509c565b604082019050919050565b60006020820190508181036000830152615127816150eb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061518a602583614611565b91506151958261512e565b604082019050919050565b600060208201905081810360008301526151b98161517d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061521c602683614611565b9150615227826151c0565b604082019050919050565b6000602082019050818103600083015261524b8161520f565b9050919050565b600081905092915050565b50565b600061526d600083615252565b91506152788261525d565b600082019050919050565b600061528e82615260565b9150819050919050565b7f57616c6c657420697320616c7265616479206e6f7420666c61676765642e0000600082015250565b60006152ce601e83614611565b91506152d982615298565b602082019050919050565b600060208201905081810360008301526152fd816152c1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615360602483614611565b915061536b82615304565b604082019050919050565b6000602082019050818103600083015261538f81615353565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153f2602283614611565b91506153fd82615396565b604082019050919050565b60006020820190508181036000830152615421816153e5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615484602583614611565b915061548f82615428565b604082019050919050565b600060208201905081810360008301526154b381615477565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615516602383614611565b9150615521826154ba565b604082019050919050565b6000602082019050818103600083015261554581615509565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000615582601d83614611565b915061558d8261554c565b602082019050919050565b600060208201905081810360008301526155b181615575565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006155ee601683614611565b91506155f9826155b8565b602082019050919050565b6000602082019050818103600083015261561d816155e1565b9050919050565b7f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60008201527f72206f75742065786365707420746f206f776e6572206f72206465616420616460208201527f64726573732e0000000000000000000000000000000000000000000000000000604082015250565b60006156a6604683614611565b91506156b182615624565b606082019050919050565b600060208201905081810360008301526156d581615699565b9050919050565b60006156e782614590565b91506156f283614590565b925082820390508181111561570a57615709614aa2565b5b92915050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b600061576c603583614611565b915061577782615710565b604082019050919050565b6000602082019050818103600083015261579b8161575f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b60006157fe602883614611565b9150615809826157a2565b604082019050919050565b6000602082019050818103600083015261582d816157f1565b9050919050565b7f4d61782057616c6c657420457863656564656400000000000000000000000000600082015250565b600061586a601383614611565b915061587582615834565b602082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61782073656c6c2e00000000000000000000000000000000000000000000602082015250565b60006158fc602a83614611565b9150615907826158a0565b604082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b600061593d82614590565b915061594883614590565b925082820261595681614590565b9150828204841483151761596d5761596c614aa2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159ae82614590565b91506159b983614590565b9250826159c9576159c8615974565b5b828204905092915050565b60006040820190506159e96000830185614826565b6159f66020830184614566565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615a59602683614611565b9150615a64826159fd565b604082019050919050565b60006020820190508181036000830152615a8881615a4c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615afc81614501565b92915050565b600060208284031215615b1857615b176144ca565b5b6000615b2684828501615aed565b91505092915050565b6000819050919050565b6000615b54615b4f615b4a84615b2f565b6146b8565b614590565b9050919050565b615b6481615b39565b82525050565b600060a082019050615b7f6000830188614772565b615b8c6020830187615b5b565b8181036040830152615b9e81866148b0565b9050615bad6060830185614826565b615bba6080830184614772565b9695505050505050565b600060c082019050615bd96000830189614826565b615be66020830188614772565b615bf36040830187615b5b565b615c006060830186615b5b565b615c0d6080830185614826565b615c1a60a0830184614772565b979650505050505050565b600080600060608486031215615c3e57615c3d6144ca565b5b6000615c4c86828701614fef565b9350506020615c5d86828701614fef565b9250506040615c6e86828701614fef565b915050925092509256fea26469706673582212200201cf6fc1dacf4009c00221d3233a01540e96173b6ab8909b0e5ce5a48fe61864736f6c63430008130033

Deployed Bytecode Sourcemap

10512:17371:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10912:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17181:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4028:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10655:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5008:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11816:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4349:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11715:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5210:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4248:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5747:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10689:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26874:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11030:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11595:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23549:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11303:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16836:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10587:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15195:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11560:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10996:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11110:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4465:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27232:84;;;;;;;;;;;;;:::i;:::-;;15885:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8456:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27416:464;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26051:560;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10553:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8242:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4136:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16229:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27324:84;;;;;;;;;;;;;:::i;:::-;;6045:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10872:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14970:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4616:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11886:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11070:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17533:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11221:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10963:26;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11269:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4824:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10747:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15539:98;;;;;;;;;;;;;:::i;:::-;;10787:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10828:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11341:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8713:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26681:185;;;;;;;;;;;;;:::i;:::-;;11634:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10622:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11674:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15303:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10912:44;;;;;;;;;;;;;;;;;;;;;;:::o;17181:344::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17327:14:::1;17307:17;:34;;;;17371:13;17352:16;:32;;;;17431:16;;17411:17;;:36;;;;:::i;:::-;17395:13;:52;;;;17483:1;17466:13;;:18;;17458:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;17181:344:::0;;:::o;4028:100::-;4082:13;4115:5;4108:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4028:100;:::o;10655:27::-;;;;;;;;;;;;;:::o;5008:194::-;5116:4;5133:39;5142:12;:10;:12::i;:::-;5156:7;5165:6;5133:8;:39::i;:::-;5190:4;5183:11;;5008:194;;;;:::o;11816:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;4349:108::-;4410:7;4437:12;;4430:19;;4349:108;:::o;11715:33::-;;;;:::o;5210:529::-;5350:4;5367:36;5377:6;5385:9;5396:6;5367:9;:36::i;:::-;5416:24;5443:11;:19;5455:6;5443:19;;;;;;;;;;;;;;;:33;5463:12;:10;:12::i;:::-;5443:33;;;;;;;;;;;;;;;;5416:60;;5529:6;5509:16;:26;;5487:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:57;5648:6;5656:12;:10;:12::i;:::-;5689:6;5670:16;:25;5639:8;:57::i;:::-;5727:4;5720:11;;;5210:529;;;;;:::o;4248:93::-;4306:5;4331:2;4324:9;;4248:93;:::o;5747:290::-;5860:4;5877:130;5900:12;:10;:12::i;:::-;5927:7;5986:10;5949:11;:25;5961:12;:10;:12::i;:::-;5949:25;;;;;;;;;;;;;;;:34;5975:7;5949:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5877:8;:130::i;:::-;6025:4;6018:11;;5747:290;;;;:::o;10689:21::-;;;;;;;;;;;;;:::o;26874:350::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27030:1:::1;27000:32;;:18;:32;;::::0;26978:120:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27137:18;27109:17;;:47;;;;;;;;;;;;;;;;;;27197:18;27172:44;;;;;;;;;;;;26874:350:::0;:::o;11030:33::-;;;;;;;;;;;;;:::o;11595:32::-;;;;:::o;23549:121::-;23605:4;23644:18;;23629:12;:33;23622:40;;23549:121;:::o;11303:31::-;;;;:::o;16836:337::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16980:14:::1;16961:16;:33;;;;17023:13;17005:15;:31;;;;17081:15;;17062:16;;:34;;;;:::i;:::-;17047:12;:49;;;;17131:1;17115:12;;:17;;17107:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;16836:337:::0;;:::o;10587:28::-;;;;:::o;15195:100::-;15242:16;15278:9;15271:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15195:100;:::o;11560:28::-;;;;:::o;10996:25::-;;;;:::o;11110:31::-;;;;;;;;;;;;;:::o;4465:143::-;4555:7;4582:9;:18;4592:7;4582:18;;;;;;;;;;;;;;;;4575:25;;4465:143;;;:::o;27232:84::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27303:5:::1;27286:14;;:22;;;;;;;;;;;;;;;;;;27232:84::o:0;15885:336::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16007:4:::1;16002:155;;16064:6;;;;;;;;;;;16054:16;;:6;:16;;::::0;16028:117:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16002:155;16209:4;16167:31;:39;16199:6;16167:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;15885:336:::0;;:::o;8456:249::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8567:15:::1;8559:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;8664:1;8627:40;;8648:6;;;;;;;;;;;8627:40;;;;;;;;;;;;8695:1;8678:6;;:19;;;;;;;;;;;;;;;;;;8456:249:::0;:::o;27416:464::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27504:13:::1;;;;;;;;;;;27503:14;27495:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;27598:2;27578:16;:22;;27556:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27694:4;27678:13;;:20;;;;;;;;;;;;;;;;;;27723:4;27709:11;;:18;;;;;;;;;;;;;;;;;;27759:12;27738:18;:33;;;;27824:16;27803:18;;:37;;;;:::i;:::-;27782:18;:58;;;;27856:16;;;;;;;;;;27416:464:::0;:::o;26051:560::-;26163:10;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26212:1:::1;26194:20;;:6;:20;;::::0;26186:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26296:4;26278:23;;:6;:23;;;;:41;;;;26306:13;;;;;;;;;;;26305:14;26278:41;26256:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;26410:24;26444:6;26437:24;;;26470:4;26437:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26410:66;;26502:6;26495:23;;;26519:3;26524:16;26495:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26487:54;;26557:46;26578:6;26586:16;26557:46;;;;;;;:::i;:::-;;;;;;;;26175:436;26051:560:::0;;;;:::o;10553:27::-;;;;:::o;8242:79::-;8280:7;8307:6;;;;;;;;;;;8300:13;;8242:79;:::o;4136:104::-;4192:13;4225:7;4218:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4136:104;:::o;16229:355::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16377:6:::1;;;;;;;;;;;16369:14;;:4;:14;;::::0;16347:121:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16479:41;16508:4;16514:5;16479:28;:41::i;:::-;16570:5;16536:40;;16564:4;16536:40;;;;;;;;;;;;16229:355:::0;;:::o;27324:84::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27396:4:::1;27379:14;;:21;;;;;;;;;;;;;;;;;;27324:84::o:0;6045:475::-;6163:4;6180:24;6207:11;:25;6219:12;:10;:12::i;:::-;6207:25;;;;;;;;;;;;;;;:34;6233:7;6207:34;;;;;;;;;;;;;;;;6180:61;;6294:15;6274:16;:35;;6252:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;6410:67;6419:12;:10;:12::i;:::-;6433:7;6461:15;6442:16;:34;6410:8;:67::i;:::-;6508:4;6501:11;;;6045:475;;;;:::o;10872:33::-;;;;:::o;14970:217::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15081:38:::1;15097:15;15114:4;15081:15;:38::i;:::-;15130:49;15157:15;15174:4;15130:26;:49::i;:::-;14970:217:::0;:::o;4616:200::-;4727:4;4744:42;4754:12;:10;:12::i;:::-;4768:9;4779:6;4744:9;:42::i;:::-;4804:4;4797:11;;4616:200;;;;:::o;11886:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;11070:33::-;;;;;;;;;;;;;:::o;17533:182::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17649:8:::1;17618:19;:28;17638:7;17618:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17689:7;17673:34;;;17698:8;17673:34;;;;;;:::i;:::-;;;;;;;;17533:182:::0;;:::o;11221:39::-;;;;;;;;;;;;;:::o;10963:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11269:27::-;;;;:::o;4824:176::-;4938:7;4965:11;:18;4977:5;4965:18;;;;;;;;;;;;;;;:27;4984:7;4965:27;;;;;;;;;;;;;;;;4958:34;;4824:176;;;;:::o;10747:33::-;;;;:::o;15539:98::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15624:5:::1;15601:20;;:28;;;;;;;;;;;;;;;;;;15539:98::o:0;10787:32::-;;;;;;;;;;;;;:::o;10828:37::-;;;;:::o;11341:30::-;;;;:::o;8713:281::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8836:1:::1;8816:22;;:8;:22;;::::0;8794:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8949:8;8920:38;;8941:6;;;;;;;;;;;8920:38;;;;;;;;;;;;8978:8;8969:6;;:17;;;;;;;;;;;;;;;;;;8713:281:::0;:::o;26681:185::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26739:12:::1;26784:10;26776:24;;26808:21;26776:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26762:96;;;;;26728:138;26681:185::o:0;11634:31::-;;;;:::o;10622:24::-;;;;:::o;11674:34::-;;;;:::o;15303:175::-;8379:12;:10;:12::i;:::-;8369:22;;:6;;;;;;;;;;;:22;;;8361:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15376:12:::1;:20;15389:6;15376:20;;;;;;;;;;;;;;;;;;;;;;;;;15368:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;15465:5;15442:12;:20;15455:6;15442:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;15303:175:::0;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;7511:380::-;7664:1;7647:19;;:5;:19;;;7639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7745:1;7726:21;;:7;:21;;;7718:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7829:6;7799:11;:18;7811:5;7799:18;;;;;;;;;;;;;;;:27;7818:7;7799:27;;;;;;;;;;;;;;;:36;;;;7867:7;7851:32;;7860:5;7851:32;;;7876:6;7851:32;;;;;;:::i;:::-;;;;;;;;7511:380;;;:::o;17723:5818::-;17871:1;17855:18;;:4;:18;;;17847:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17948:1;17934:16;;:2;:16;;;17926:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18018:1;18009:6;:10;18001:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;18071:13;;;;;;;;;;;18066:183;;18127:19;:25;18147:4;18127:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;18156:19;:23;18176:2;18156:23;;;;;;;;;;;;;;;;;;;;;;;;;18127:52;18101:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;18066:183;18266:25;:23;:25::i;:::-;18265:26;:43;;;;;18295:13;;;;;;;;;;;18265:43;18261:269;;;18352:12;:18;18365:4;18352:18;;;;;;;;;;;;;;;;;;;;;;;;;18351:19;:36;;;;18380:7;:5;:7::i;:::-;18374:13;;:2;:13;;;18351:36;:61;;;;18405:6;18391:21;;:2;:21;;;18351:61;18325:193;;;;;;;;;;;;:::i;:::-;;;;;;;;;18261:269;18546:14;;;;;;;;;;;18542:2148;;;18607:7;:5;:7::i;:::-;18599:15;;:4;:15;;;;:49;;;;;18641:7;:5;:7::i;:::-;18635:13;;:2;:13;;;;18599:49;:91;;;;;18683:6;18669:21;;:2;:21;;;;18599:91;:138;;;;;18712:19;:25;18732:4;18712:25;;;;;;;;;;;;;;;;;;;;;;;;;18711:26;18599:138;:183;;;;;18759:19;:23;18779:2;18759:23;;;;;;;;;;;;;;;;;;;;;;;;;18758:24;18599:183;18577:2102;;;18821:20;;;;;;;;;;;18817:692;;;18884:9;;;;;;;;;;;18870:24;;:2;:24;;;;:49;;;;;18912:6;;;;;;;;;;;18898:21;;:2;:21;;;;18870:49;18866:624;;;19076:1;19061:12;:16;;;;:::i;:::-;18986:28;:39;19015:9;18986:39;;;;;;;;;;;;;;;;:91;:212;;;;;19197:1;19182:12;:16;;;;:::i;:::-;19114:28;:32;19143:2;19114:32;;;;;;;;;;;;;;;;:84;18986:212;18948:363;;;;;;;;;;;;:::i;:::-;;;;;;;;;19380:12;19338:28;:39;19367:9;19338:39;;;;;;;;;;;;;;;:54;;;;19454:12;19419:28;:32;19448:2;19419:32;;;;;;;;;;;;;;;:47;;;;18866:624;18817:692;19583:25;:31;19609:4;19583:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;19640:31;:35;19672:2;19640:35;;;;;;;;;;;;;;;;;;;;;;;;;19639:36;19583:92;19557:1107;;;19762:12;;19752:6;:22;;19718:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;19949:9;;19932:13;19942:2;19932:9;:13::i;:::-;19923:6;:22;;;;:::i;:::-;:35;;19889:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;19557:1107;;;20127:25;:29;20153:2;20127:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;20182:31;:37;20214:4;20182:37;;;;;;;;;;;;;;;;;;;;;;;;;20181:38;20127:92;20101:563;;;20306:13;;20296:6;:23;;20262:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;20101:563;;;20444:31;:35;20476:2;20444:35;;;;;;;;;;;;;;;;;;;;;;;;;20439:225;;20564:9;;20547:13;20557:2;20547:9;:13::i;:::-;20538:6;:22;;;;:::i;:::-;:35;;20504:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20439:225;20101:563;19557:1107;18577:2102;18542:2148;20702:28;20733:24;20751:4;20733:9;:24::i;:::-;20702:55;;20770:12;20809:18;;20785:20;:42;;20770:57;;20858:7;:22;;;;;20869:11;;;;;;;;;;;20858:22;:35;;;;;20885:8;;;;;;;;;;;20884:9;20858:35;:68;;;;;20897:25;:29;20923:2;20897:29;;;;;;;;;;;;;;;;;;;;;;;;;20858:68;20840:196;;;20964:4;20953:8;;:15;;;;;;;;;;;;;;;;;;20983:10;:8;:10::i;:::-;21019:5;21008:8;;:16;;;;;;;;;;;;;;;;;;20840:196;21048:12;21063:4;21048:19;;21167;:25;21187:4;21167:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21196:19;:23;21216:2;21196:23;;;;;;;;;;;;;;;;;;;;;;;;;21167:52;21163:100;;;21246:5;21236:15;;21163:100;21275:12;21380:7;21376:2112;;;21463:25;:23;:25::i;:::-;:152;;;;21539:8;21524:12;;:23;;;;:::i;:::-;21514:6;:33;;:100;;;;;21602:12;21597:1;21576:18;;:22;;;;:::i;:::-;:38;;21514:100;21463:152;21462:206;;;;;21637:25;:31;21663:4;21637:31;;;;;;;;;;;;;;;;;;;;;;;;;21462:206;:257;;;;;21690:25;:29;21716:2;21690:29;;;;;;;;;;;;;;;;;;;;;;;;;21689:30;21462:257;:302;;;;;21741:19;:23;21761:2;21741:23;;;;;;;;;;;;;;;;;;;;;;;;;21740:24;21462:302;:339;;;;;21800:1;21785:12;;:16;21462:339;21440:1899;;;21841:25;:23;:25::i;:::-;21836:332;;22147:1;22131:12;;:17;;;;;;;:::i;:::-;;;;;;;;21836:332;22193:12;:16;22206:2;22193:16;;;;;;;;;;;;;;;;;;;;;;;;;22188:216;;22253:4;22234:12;:16;22247:2;22234:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;22294:1;22280:10;;:15;;;;;;;:::i;:::-;;;;;;;;22318:9;22333:2;22318:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22364:20;22381:2;22364:20;;;;;;:::i;:::-;;;;;;;;22188:216;22447:3;22441:2;22432:6;:11;;;;:::i;:::-;22431:19;;;;:::i;:::-;22424:26;;22518:12;;22499:15;;22492:4;:22;;;;:::i;:::-;22491:39;;;;:::i;:::-;22469:18;;:61;;;;;;;:::i;:::-;;;;;;;;22600:12;;22580:16;;22573:4;:23;;;;:::i;:::-;22572:40;;;;:::i;:::-;22549:19;;:63;;;;;;;:::i;:::-;;;;;;;;21440:1899;;;22675:25;:29;22701:2;22675:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;22724:1;22708:13;;:17;22675:50;22671:668;;;22780:3;22763:13;;22754:6;:22;;;;:::i;:::-;22753:30;;;;:::i;:::-;22746:37;;22852:13;;22832:16;;22825:4;:23;;;;:::i;:::-;22824:41;;;;:::i;:::-;22802:18;;:63;;;;;;;:::i;:::-;;;;;;;;22978:13;;22936:17;;22929:4;:24;;;;:::i;:::-;22928:63;;;;:::i;:::-;22884:19;;:107;;;;;;;:::i;:::-;;;;;;;;22671:668;;;23053:25;:31;23079:4;23053:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;23103:1;23088:12;;:16;23053:51;23049:290;;;23158:3;23142:12;;23133:6;:21;;;;:::i;:::-;23132:29;;;;:::i;:::-;23125:36;;23229:12;;23210:15;;23203:4;:22;;;;:::i;:::-;23202:39;;;;:::i;:::-;23180:18;;:61;;;;;;;:::i;:::-;;;;;;;;23311:12;;23291:16;;23284:4;:23;;;;:::i;:::-;23283:40;;;;:::i;:::-;23260:19;;:63;;;;;;;:::i;:::-;;;;;;;;23049:290;22671:668;21440:1899;23366:1;23359:4;:8;23355:91;;;23388:42;23404:4;23418;23425;23388:15;:42::i;:::-;23355:91;23472:4;23462:14;;;;;:::i;:::-;;;21376:2112;23500:33;23516:4;23522:2;23526:6;23500:15;:33::i;:::-;17836:5705;;;;17723:5818;;;:::o;16592:236::-;16709:5;16675:25;:31;16701:4;16675:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16725;16752:4;16758:5;16725:26;:39::i;:::-;16814:5;16780:40;;16808:4;16780:40;;;;;;;;;;;;16592:236;;:::o;15645:232::-;15800:10;15758:31;:39;15790:6;15758:39;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;15826:43;15850:6;15858:10;15826:43;;;;;;;:::i;:::-;;;;;;;;15645:232;;:::o;24774:1269::-;24813:23;24839:24;24857:4;24839:9;:24::i;:::-;24813:50;;24874:25;24923:19;;24902:18;;:40;;;;:::i;:::-;24874:68;;24978:1;24959:15;:20;:46;;;;25004:1;24983:17;:22;24959:46;24955:85;;;25022:7;;;;24955:85;25095:2;25074:18;;:23;;;;:::i;:::-;25056:15;:41;25052:115;;;25153:2;25132:18;;:23;;;;:::i;:::-;25114:41;;25052:115;25179:12;25253:23;25366:1;25333:17;25298:18;;25280:15;:36;;;;:::i;:::-;25279:71;;;;:::i;:::-;:88;;;;:::i;:::-;25253:114;;25380:51;25415:15;25397;:33;;;;:::i;:::-;25380:16;:51::i;:::-;25444:18;25465:21;25444:42;;25497:23;25523:10;25497:36;;25546:24;25666:1;25645:18;;:22;;;;:::i;:::-;25624:17;:44;;;;:::i;:::-;25587:19;;25574:10;:32;;;;:::i;:::-;25573:96;;;;:::i;:::-;25546:123;;25701:16;25682:35;;;;;:::i;:::-;;;25751:1;25730:18;:22;;;;25785:1;25763:19;:23;;;;25821:1;25803:15;:19;:42;;;;;25844:1;25826:15;:19;25803:42;25799:121;;;25862:46;25875:15;25892;25862:12;:46::i;:::-;25799:121;25954:17;;;;;;;;;;;25946:31;;25999:21;25946:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25932:103;;;;;24802:1241;;;;;;;24774:1269;:::o;6528:651::-;6686:1;6668:20;;:6;:20;;;6660:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6770:1;6749:23;;:9;:23;;;6741:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6825:21;6849:9;:17;6859:6;6849:17;;;;;;;;;;;;;;;;6825:41;;6916:6;6899:13;:23;;6877:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7060:6;7044:13;:22;7024:9;:17;7034:6;7024:17;;;;;;;;;;;;;;;:42;;;;7112:6;7088:9;:20;7098:9;7088:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7153:9;7136:35;;7145:6;7136:35;;;7164:6;7136:35;;;;;;:::i;:::-;;;;;;;;6649:530;6528:651;;;:::o;23678:571::-;23804:21;23842:1;23828:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23804:40;;23873:4;23855;23860:1;23855:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23899:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23889:4;23894:1;23889:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;23928:56;23945:4;23960:9;;;;;;;;;;;23972:11;23928:8;:56::i;:::-;24023:9;;;;;;;;;;;:60;;;24098:11;24124:1;24168:4;24195;24215:15;24023:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23733:516;23678:571;:::o;24257:509::-;24405:56;24422:4;24437:9;;;;;;;;;;;24449:11;24405:8;:56::i;:::-;24504:9;;;;;;;;;;;:25;;;24537:9;24570:4;24590:11;24616:1;24659;24710:6;24732:15;24504:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24257:509;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:77::-;1640:7;1669:5;1658:16;;1603:77;;;:::o;1686:122::-;1759:24;1777:5;1759:24;:::i;:::-;1752:5;1749:35;1739:63;;1798:1;1795;1788:12;1739:63;1686:122;:::o;1814:139::-;1860:5;1898:6;1885:20;1876:29;;1914:33;1941:5;1914:33;:::i;:::-;1814:139;;;;:::o;1959:474::-;2027:6;2035;2084:2;2072:9;2063:7;2059:23;2055:32;2052:119;;;2090:79;;:::i;:::-;2052:119;2210:1;2235:53;2280:7;2271:6;2260:9;2256:22;2235:53;:::i;:::-;2225:63;;2181:117;2337:2;2363:53;2408:7;2399:6;2388:9;2384:22;2363:53;:::i;:::-;2353:63;;2308:118;1959:474;;;;;:::o;2439:99::-;2491:6;2525:5;2519:12;2509:22;;2439:99;;;:::o;2544:169::-;2628:11;2662:6;2657:3;2650:19;2702:4;2697:3;2693:14;2678:29;;2544:169;;;;:::o;2719:246::-;2800:1;2810:113;2824:6;2821:1;2818:13;2810:113;;;2909:1;2904:3;2900:11;2894:18;2890:1;2885:3;2881:11;2874:39;2846:2;2843:1;2839:10;2834:15;;2810:113;;;2957:1;2948:6;2943:3;2939:16;2932:27;2781:184;2719:246;;;:::o;2971:102::-;3012:6;3063:2;3059:7;3054:2;3047:5;3043:14;3039:28;3029:38;;2971:102;;;:::o;3079:377::-;3167:3;3195:39;3228:5;3195:39;:::i;:::-;3250:71;3314:6;3309:3;3250:71;:::i;:::-;3243:78;;3330:65;3388:6;3383:3;3376:4;3369:5;3365:16;3330:65;:::i;:::-;3420:29;3442:6;3420:29;:::i;:::-;3415:3;3411:39;3404:46;;3171:285;3079:377;;;;:::o;3462:313::-;3575:4;3613:2;3602:9;3598:18;3590:26;;3662:9;3656:4;3652:20;3648:1;3637:9;3633:17;3626:47;3690:78;3763:4;3754:6;3690:78;:::i;:::-;3682:86;;3462:313;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:144::-;4195:9;4228:37;4259:5;4228:37;:::i;:::-;4215:50;;4127:144;;;:::o;4277:167::-;4382:55;4431:5;4382:55;:::i;:::-;4377:3;4370:68;4277:167;;:::o;4450:258::-;4561:4;4599:2;4588:9;4584:18;4576:26;;4612:89;4698:1;4687:9;4683:17;4674:6;4612:89;:::i;:::-;4450:258;;;;:::o;4714:474::-;4782:6;4790;4839:2;4827:9;4818:7;4814:23;4810:32;4807:119;;;4845:79;;:::i;:::-;4807:119;4965:1;4990:53;5035:7;5026:6;5015:9;5011:22;4990:53;:::i;:::-;4980:63;;4936:117;5092:2;5118:53;5163:7;5154:6;5143:9;5139:22;5118:53;:::i;:::-;5108:63;;5063:118;4714:474;;;;;:::o;5194:118::-;5281:24;5299:5;5281:24;:::i;:::-;5276:3;5269:37;5194:118;;:::o;5318:222::-;5411:4;5449:2;5438:9;5434:18;5426:26;;5462:71;5530:1;5519:9;5515:17;5506:6;5462:71;:::i;:::-;5318:222;;;;:::o;5546:619::-;5623:6;5631;5639;5688:2;5676:9;5667:7;5663:23;5659:32;5656:119;;;5694:79;;:::i;:::-;5656:119;5814:1;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5785:117;5941:2;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5912:118;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;5546:619;;;;;:::o;6171:86::-;6206:7;6246:4;6239:5;6235:16;6224:27;;6171:86;;;:::o;6263:112::-;6346:22;6362:5;6346:22;:::i;:::-;6341:3;6334:35;6263:112;;:::o;6381:214::-;6470:4;6508:2;6497:9;6493:18;6485:26;;6521:67;6585:1;6574:9;6570:17;6561:6;6521:67;:::i;:::-;6381:214;;;;:::o;6601:118::-;6688:24;6706:5;6688:24;:::i;:::-;6683:3;6676:37;6601:118;;:::o;6725:222::-;6818:4;6856:2;6845:9;6841:18;6833:26;;6869:71;6937:1;6926:9;6922:17;6913:6;6869:71;:::i;:::-;6725:222;;;;:::o;6953:114::-;7020:6;7054:5;7048:12;7038:22;;6953:114;;;:::o;7073:184::-;7172:11;7206:6;7201:3;7194:19;7246:4;7241:3;7237:14;7222:29;;7073:184;;;;:::o;7263:132::-;7330:4;7353:3;7345:11;;7383:4;7378:3;7374:14;7366:22;;7263:132;;;:::o;7401:108::-;7478:24;7496:5;7478:24;:::i;:::-;7473:3;7466:37;7401:108;;:::o;7515:179::-;7584:10;7605:46;7647:3;7639:6;7605:46;:::i;:::-;7683:4;7678:3;7674:14;7660:28;;7515:179;;;;:::o;7700:113::-;7770:4;7802;7797:3;7793:14;7785:22;;7700:113;;;:::o;7849:732::-;7968:3;7997:54;8045:5;7997:54;:::i;:::-;8067:86;8146:6;8141:3;8067:86;:::i;:::-;8060:93;;8177:56;8227:5;8177:56;:::i;:::-;8256:7;8287:1;8272:284;8297:6;8294:1;8291:13;8272:284;;;8373:6;8367:13;8400:63;8459:3;8444:13;8400:63;:::i;:::-;8393:70;;8486:60;8539:6;8486:60;:::i;:::-;8476:70;;8332:224;8319:1;8316;8312:9;8307:14;;8272:284;;;8276:14;8572:3;8565:10;;7973:608;;;7849:732;;;;:::o;8587:373::-;8730:4;8768:2;8757:9;8753:18;8745:26;;8817:9;8811:4;8807:20;8803:1;8792:9;8788:17;8781:47;8845:108;8948:4;8939:6;8845:108;:::i;:::-;8837:116;;8587:373;;;;:::o;8966:116::-;9036:21;9051:5;9036:21;:::i;:::-;9029:5;9026:32;9016:60;;9072:1;9069;9062:12;9016:60;8966:116;:::o;9088:133::-;9131:5;9169:6;9156:20;9147:29;;9185:30;9209:5;9185:30;:::i;:::-;9088:133;;;;:::o;9227:468::-;9292:6;9300;9349:2;9337:9;9328:7;9324:23;9320:32;9317:119;;;9355:79;;:::i;:::-;9317:119;9475:1;9500:53;9545:7;9536:6;9525:9;9521:22;9500:53;:::i;:::-;9490:63;;9446:117;9602:2;9628:50;9670:7;9661:6;9650:9;9646:22;9628:50;:::i;:::-;9618:60;;9573:115;9227:468;;;;;:::o;9701:323::-;9757:6;9806:2;9794:9;9785:7;9781:23;9777:32;9774:119;;;9812:79;;:::i;:::-;9774:119;9932:1;9957:50;9999:7;9990:6;9979:9;9975:22;9957:50;:::i;:::-;9947:60;;9903:114;9701:323;;;;:::o;10030:329::-;10089:6;10138:2;10126:9;10117:7;10113:23;10109:32;10106:119;;;10144:79;;:::i;:::-;10106:119;10264:1;10289:53;10334:7;10325:6;10314:9;10310:22;10289:53;:::i;:::-;10279:63;;10235:117;10030:329;;;;:::o;10365:474::-;10433:6;10441;10490:2;10478:9;10469:7;10465:23;10461:32;10458:119;;;10496:79;;:::i;:::-;10458:119;10616:1;10641:53;10686:7;10677:6;10666:9;10662:22;10641:53;:::i;:::-;10631:63;;10587:117;10743:2;10769:53;10814:7;10805:6;10794:9;10790:22;10769:53;:::i;:::-;10759:63;;10714:118;10365:474;;;;;:::o;10845:182::-;10985:34;10981:1;10973:6;10969:14;10962:58;10845:182;:::o;11033:366::-;11175:3;11196:67;11260:2;11255:3;11196:67;:::i;:::-;11189:74;;11272:93;11361:3;11272:93;:::i;:::-;11390:2;11385:3;11381:12;11374:19;;11033:366;;;:::o;11405:419::-;11571:4;11609:2;11598:9;11594:18;11586:26;;11658:9;11652:4;11648:20;11644:1;11633:9;11629:17;11622:47;11686:131;11812:4;11686:131;:::i;:::-;11678:139;;11405:419;;;:::o;11830:180::-;11878:77;11875:1;11868:88;11975:4;11972:1;11965:15;11999:4;11996:1;11989:15;12016:191;12056:3;12075:20;12093:1;12075:20;:::i;:::-;12070:25;;12109:20;12127:1;12109:20;:::i;:::-;12104:25;;12152:1;12149;12145:9;12138:16;;12173:3;12170:1;12167:10;12164:36;;;12180:18;;:::i;:::-;12164:36;12016:191;;;;:::o;12213:178::-;12353:30;12349:1;12341:6;12337:14;12330:54;12213:178;:::o;12397:366::-;12539:3;12560:67;12624:2;12619:3;12560:67;:::i;:::-;12553:74;;12636:93;12725:3;12636:93;:::i;:::-;12754:2;12749:3;12745:12;12738:19;;12397:366;;;:::o;12769:419::-;12935:4;12973:2;12962:9;12958:18;12950:26;;13022:9;13016:4;13012:20;13008:1;12997:9;12993:17;12986:47;13050:131;13176:4;13050:131;:::i;:::-;13042:139;;12769:419;;;:::o;13194:180::-;13242:77;13239:1;13232:88;13339:4;13336:1;13329:15;13363:4;13360:1;13353:15;13380:320;13424:6;13461:1;13455:4;13451:12;13441:22;;13508:1;13502:4;13498:12;13529:18;13519:81;;13585:4;13577:6;13573:17;13563:27;;13519:81;13647:2;13639:6;13636:14;13616:18;13613:38;13610:84;;13666:18;;:::i;:::-;13610:84;13431:269;13380:320;;;:::o;13706:227::-;13846:34;13842:1;13834:6;13830:14;13823:58;13915:10;13910:2;13902:6;13898:15;13891:35;13706:227;:::o;13939:366::-;14081:3;14102:67;14166:2;14161:3;14102:67;:::i;:::-;14095:74;;14178:93;14267:3;14178:93;:::i;:::-;14296:2;14291:3;14287:12;14280:19;;13939:366;;;:::o;14311:419::-;14477:4;14515:2;14504:9;14500:18;14492:26;;14564:9;14558:4;14554:20;14550:1;14539:9;14535:17;14528:47;14592:131;14718:4;14592:131;:::i;:::-;14584:139;;14311:419;;;:::o;14736:225::-;14876:34;14872:1;14864:6;14860:14;14853:58;14945:8;14940:2;14932:6;14928:15;14921:33;14736:225;:::o;14967:366::-;15109:3;15130:67;15194:2;15189:3;15130:67;:::i;:::-;15123:74;;15206:93;15295:3;15206:93;:::i;:::-;15324:2;15319:3;15315:12;15308:19;;14967:366;;;:::o;15339:419::-;15505:4;15543:2;15532:9;15528:18;15520:26;;15592:9;15586:4;15582:20;15578:1;15567:9;15563:17;15556:47;15620:131;15746:4;15620:131;:::i;:::-;15612:139;;15339:419;;;:::o;15764:226::-;15904:34;15900:1;15892:6;15888:14;15881:58;15973:9;15968:2;15960:6;15956:15;15949:34;15764:226;:::o;15996:366::-;16138:3;16159:67;16223:2;16218:3;16159:67;:::i;:::-;16152:74;;16235:93;16324:3;16235:93;:::i;:::-;16353:2;16348:3;16344:12;16337:19;;15996:366;;;:::o;16368:419::-;16534:4;16572:2;16561:9;16557:18;16549:26;;16621:9;16615:4;16611:20;16607:1;16596:9;16592:17;16585:47;16649:131;16775:4;16649:131;:::i;:::-;16641:139;;16368:419;;;:::o;16793:174::-;16933:26;16929:1;16921:6;16917:14;16910:50;16793:174;:::o;16973:366::-;17115:3;17136:67;17200:2;17195:3;17136:67;:::i;:::-;17129:74;;17212:93;17301:3;17212:93;:::i;:::-;17330:2;17325:3;17321:12;17314:19;;16973:366;;;:::o;17345:419::-;17511:4;17549:2;17538:9;17534:18;17526:26;;17598:9;17592:4;17588:20;17584:1;17573:9;17569:17;17562:47;17626:131;17752:4;17626:131;:::i;:::-;17618:139;;17345:419;;;:::o;17770:173::-;17910:25;17906:1;17898:6;17894:14;17887:49;17770:173;:::o;17949:366::-;18091:3;18112:67;18176:2;18171:3;18112:67;:::i;:::-;18105:74;;18188:93;18277:3;18188:93;:::i;:::-;18306:2;18301:3;18297:12;18290:19;;17949:366;;;:::o;18321:419::-;18487:4;18525:2;18514:9;18510:18;18502:26;;18574:9;18568:4;18564:20;18560:1;18549:9;18545:17;18538:47;18602:131;18728:4;18602:131;:::i;:::-;18594:139;;18321:419;;;:::o;18746:226::-;18886:34;18882:1;18874:6;18870:14;18863:58;18955:9;18950:2;18942:6;18938:15;18931:34;18746:226;:::o;18978:366::-;19120:3;19141:67;19205:2;19200:3;19141:67;:::i;:::-;19134:74;;19217:93;19306:3;19217:93;:::i;:::-;19335:2;19330:3;19326:12;19319:19;;18978:366;;;:::o;19350:419::-;19516:4;19554:2;19543:9;19539:18;19531:26;;19603:9;19597:4;19593:20;19589:1;19578:9;19574:17;19567:47;19631:131;19757:4;19631:131;:::i;:::-;19623:139;;19350:419;;;:::o;19775:176::-;19915:28;19911:1;19903:6;19899:14;19892:52;19775:176;:::o;19957:366::-;20099:3;20120:67;20184:2;20179:3;20120:67;:::i;:::-;20113:74;;20196:93;20285:3;20196:93;:::i;:::-;20314:2;20309:3;20305:12;20298:19;;19957:366;;;:::o;20329:419::-;20495:4;20533:2;20522:9;20518:18;20510:26;;20582:9;20576:4;20572:20;20568:1;20557:9;20553:17;20546:47;20610:131;20736:4;20610:131;:::i;:::-;20602:139;;20329:419;;;:::o;20754:239::-;20894:34;20890:1;20882:6;20878:14;20871:58;20963:22;20958:2;20950:6;20946:15;20939:47;20754:239;:::o;20999:366::-;21141:3;21162:67;21226:2;21221:3;21162:67;:::i;:::-;21155:74;;21238:93;21327:3;21238:93;:::i;:::-;21356:2;21351:3;21347:12;21340:19;;20999:366;;;:::o;21371:419::-;21537:4;21575:2;21564:9;21560:18;21552:26;;21624:9;21618:4;21614:20;21610:1;21599:9;21595:17;21588:47;21652:131;21778:4;21652:131;:::i;:::-;21644:139;;21371:419;;;:::o;21796:143::-;21853:5;21884:6;21878:13;21869:22;;21900:33;21927:5;21900:33;:::i;:::-;21796:143;;;;:::o;21945:351::-;22015:6;22064:2;22052:9;22043:7;22039:23;22035:32;22032:119;;;22070:79;;:::i;:::-;22032:119;22190:1;22215:64;22271:7;22262:6;22251:9;22247:22;22215:64;:::i;:::-;22205:74;;22161:128;21945:351;;;;:::o;22302:332::-;22423:4;22461:2;22450:9;22446:18;22438:26;;22474:71;22542:1;22531:9;22527:17;22518:6;22474:71;:::i;:::-;22555:72;22623:2;22612:9;22608:18;22599:6;22555:72;:::i;:::-;22302:332;;;;;:::o;22640:137::-;22694:5;22725:6;22719:13;22710:22;;22741:30;22765:5;22741:30;:::i;:::-;22640:137;;;;:::o;22783:345::-;22850:6;22899:2;22887:9;22878:7;22874:23;22870:32;22867:119;;;22905:79;;:::i;:::-;22867:119;23025:1;23050:61;23103:7;23094:6;23083:9;23079:22;23050:61;:::i;:::-;23040:71;;22996:125;22783:345;;;;:::o;23134:244::-;23274:34;23270:1;23262:6;23258:14;23251:58;23343:27;23338:2;23330:6;23326:15;23319:52;23134:244;:::o;23384:366::-;23526:3;23547:67;23611:2;23606:3;23547:67;:::i;:::-;23540:74;;23623:93;23712:3;23623:93;:::i;:::-;23741:2;23736:3;23732:12;23725:19;;23384:366;;;:::o;23756:419::-;23922:4;23960:2;23949:9;23945:18;23937:26;;24009:9;24003:4;23999:20;23995:1;23984:9;23980:17;23973:47;24037:131;24163:4;24037:131;:::i;:::-;24029:139;;23756:419;;;:::o;24181:224::-;24321:34;24317:1;24309:6;24305:14;24298:58;24390:7;24385:2;24377:6;24373:15;24366:32;24181:224;:::o;24411:366::-;24553:3;24574:67;24638:2;24633:3;24574:67;:::i;:::-;24567:74;;24650:93;24739:3;24650:93;:::i;:::-;24768:2;24763:3;24759:12;24752:19;;24411:366;;;:::o;24783:419::-;24949:4;24987:2;24976:9;24972:18;24964:26;;25036:9;25030:4;25026:20;25022:1;25011:9;25007:17;25000:47;25064:131;25190:4;25064:131;:::i;:::-;25056:139;;24783:419;;;:::o;25208:225::-;25348:34;25344:1;25336:6;25332:14;25325:58;25417:8;25412:2;25404:6;25400:15;25393:33;25208:225;:::o;25439:366::-;25581:3;25602:67;25666:2;25661:3;25602:67;:::i;:::-;25595:74;;25678:93;25767:3;25678:93;:::i;:::-;25796:2;25791:3;25787:12;25780:19;;25439:366;;;:::o;25811:419::-;25977:4;26015:2;26004:9;26000:18;25992:26;;26064:9;26058:4;26054:20;26050:1;26039:9;26035:17;26028:47;26092:131;26218:4;26092:131;:::i;:::-;26084:139;;25811:419;;;:::o;26236:147::-;26337:11;26374:3;26359:18;;26236:147;;;;:::o;26389:114::-;;:::o;26509:398::-;26668:3;26689:83;26770:1;26765:3;26689:83;:::i;:::-;26682:90;;26781:93;26870:3;26781:93;:::i;:::-;26899:1;26894:3;26890:11;26883:18;;26509:398;;;:::o;26913:379::-;27097:3;27119:147;27262:3;27119:147;:::i;:::-;27112:154;;27283:3;27276:10;;26913:379;;;:::o;27298:180::-;27438:32;27434:1;27426:6;27422:14;27415:56;27298:180;:::o;27484:366::-;27626:3;27647:67;27711:2;27706:3;27647:67;:::i;:::-;27640:74;;27723:93;27812:3;27723:93;:::i;:::-;27841:2;27836:3;27832:12;27825:19;;27484:366;;;:::o;27856:419::-;28022:4;28060:2;28049:9;28045:18;28037:26;;28109:9;28103:4;28099:20;28095:1;28084:9;28080:17;28073:47;28137:131;28263:4;28137:131;:::i;:::-;28129:139;;27856:419;;;:::o;28281:223::-;28421:34;28417:1;28409:6;28405:14;28398:58;28490:6;28485:2;28477:6;28473:15;28466:31;28281:223;:::o;28510:366::-;28652:3;28673:67;28737:2;28732:3;28673:67;:::i;:::-;28666:74;;28749:93;28838:3;28749:93;:::i;:::-;28867:2;28862:3;28858:12;28851:19;;28510:366;;;:::o;28882:419::-;29048:4;29086:2;29075:9;29071:18;29063:26;;29135:9;29129:4;29125:20;29121:1;29110:9;29106:17;29099:47;29163:131;29289:4;29163:131;:::i;:::-;29155:139;;28882:419;;;:::o;29307:221::-;29447:34;29443:1;29435:6;29431:14;29424:58;29516:4;29511:2;29503:6;29499:15;29492:29;29307:221;:::o;29534:366::-;29676:3;29697:67;29761:2;29756:3;29697:67;:::i;:::-;29690:74;;29773:93;29862:3;29773:93;:::i;:::-;29891:2;29886:3;29882:12;29875:19;;29534:366;;;:::o;29906:419::-;30072:4;30110:2;30099:9;30095:18;30087:26;;30159:9;30153:4;30149:20;30145:1;30134:9;30130:17;30123:47;30187:131;30313:4;30187:131;:::i;:::-;30179:139;;29906:419;;;:::o;30331:224::-;30471:34;30467:1;30459:6;30455:14;30448:58;30540:7;30535:2;30527:6;30523:15;30516:32;30331:224;:::o;30561:366::-;30703:3;30724:67;30788:2;30783:3;30724:67;:::i;:::-;30717:74;;30800:93;30889:3;30800:93;:::i;:::-;30918:2;30913:3;30909:12;30902:19;;30561:366;;;:::o;30933:419::-;31099:4;31137:2;31126:9;31122:18;31114:26;;31186:9;31180:4;31176:20;31172:1;31161:9;31157:17;31150:47;31214:131;31340:4;31214:131;:::i;:::-;31206:139;;30933:419;;;:::o;31358:222::-;31498:34;31494:1;31486:6;31482:14;31475:58;31567:5;31562:2;31554:6;31550:15;31543:30;31358:222;:::o;31586:366::-;31728:3;31749:67;31813:2;31808:3;31749:67;:::i;:::-;31742:74;;31825:93;31914:3;31825:93;:::i;:::-;31943:2;31938:3;31934:12;31927:19;;31586:366;;;:::o;31958:419::-;32124:4;32162:2;32151:9;32147:18;32139:26;;32211:9;32205:4;32201:20;32197:1;32186:9;32182:17;32175:47;32239:131;32365:4;32239:131;:::i;:::-;32231:139;;31958:419;;;:::o;32383:179::-;32523:31;32519:1;32511:6;32507:14;32500:55;32383:179;:::o;32568:366::-;32710:3;32731:67;32795:2;32790:3;32731:67;:::i;:::-;32724:74;;32807:93;32896:3;32807:93;:::i;:::-;32925:2;32920:3;32916:12;32909:19;;32568:366;;;:::o;32940:419::-;33106:4;33144:2;33133:9;33129:18;33121:26;;33193:9;33187:4;33183:20;33179:1;33168:9;33164:17;33157:47;33221:131;33347:4;33221:131;:::i;:::-;33213:139;;32940:419;;;:::o;33365:172::-;33505:24;33501:1;33493:6;33489:14;33482:48;33365:172;:::o;33543:366::-;33685:3;33706:67;33770:2;33765:3;33706:67;:::i;:::-;33699:74;;33782:93;33871:3;33782:93;:::i;:::-;33900:2;33895:3;33891:12;33884:19;;33543:366;;;:::o;33915:419::-;34081:4;34119:2;34108:9;34104:18;34096:26;;34168:9;34162:4;34158:20;34154:1;34143:9;34139:17;34132:47;34196:131;34322:4;34196:131;:::i;:::-;34188:139;;33915:419;;;:::o;34340:294::-;34480:34;34476:1;34468:6;34464:14;34457:58;34549:34;34544:2;34536:6;34532:15;34525:59;34618:8;34613:2;34605:6;34601:15;34594:33;34340:294;:::o;34640:366::-;34782:3;34803:67;34867:2;34862:3;34803:67;:::i;:::-;34796:74;;34879:93;34968:3;34879:93;:::i;:::-;34997:2;34992:3;34988:12;34981:19;;34640:366;;;:::o;35012:419::-;35178:4;35216:2;35205:9;35201:18;35193:26;;35265:9;35259:4;35255:20;35251:1;35240:9;35236:17;35229:47;35293:131;35419:4;35293:131;:::i;:::-;35285:139;;35012:419;;;:::o;35437:194::-;35477:4;35497:20;35515:1;35497:20;:::i;:::-;35492:25;;35531:20;35549:1;35531:20;:::i;:::-;35526:25;;35575:1;35572;35568:9;35560:17;;35599:1;35593:4;35590:11;35587:37;;;35604:18;;:::i;:::-;35587:37;35437:194;;;;:::o;35637:240::-;35777:34;35773:1;35765:6;35761:14;35754:58;35846:23;35841:2;35833:6;35829:15;35822:48;35637:240;:::o;35883:366::-;36025:3;36046:67;36110:2;36105:3;36046:67;:::i;:::-;36039:74;;36122:93;36211:3;36122:93;:::i;:::-;36240:2;36235:3;36231:12;36224:19;;35883:366;;;:::o;36255:419::-;36421:4;36459:2;36448:9;36444:18;36436:26;;36508:9;36502:4;36498:20;36494:1;36483:9;36479:17;36472:47;36536:131;36662:4;36536:131;:::i;:::-;36528:139;;36255:419;;;:::o;36680:227::-;36820:34;36816:1;36808:6;36804:14;36797:58;36889:10;36884:2;36876:6;36872:15;36865:35;36680:227;:::o;36913:366::-;37055:3;37076:67;37140:2;37135:3;37076:67;:::i;:::-;37069:74;;37152:93;37241:3;37152:93;:::i;:::-;37270:2;37265:3;37261:12;37254:19;;36913:366;;;:::o;37285:419::-;37451:4;37489:2;37478:9;37474:18;37466:26;;37538:9;37532:4;37528:20;37524:1;37513:9;37509:17;37502:47;37566:131;37692:4;37566:131;:::i;:::-;37558:139;;37285:419;;;:::o;37710:169::-;37850:21;37846:1;37838:6;37834:14;37827:45;37710:169;:::o;37885:366::-;38027:3;38048:67;38112:2;38107:3;38048:67;:::i;:::-;38041:74;;38124:93;38213:3;38124:93;:::i;:::-;38242:2;38237:3;38233:12;38226:19;;37885:366;;;:::o;38257:419::-;38423:4;38461:2;38450:9;38446:18;38438:26;;38510:9;38504:4;38500:20;38496:1;38485:9;38481:17;38474:47;38538:131;38664:4;38538:131;:::i;:::-;38530:139;;38257:419;;;:::o;38682:229::-;38822:34;38818:1;38810:6;38806:14;38799:58;38891:12;38886:2;38878:6;38874:15;38867:37;38682:229;:::o;38917:366::-;39059:3;39080:67;39144:2;39139:3;39080:67;:::i;:::-;39073:74;;39156:93;39245:3;39156:93;:::i;:::-;39274:2;39269:3;39265:12;39258:19;;38917:366;;;:::o;39289:419::-;39455:4;39493:2;39482:9;39478:18;39470:26;;39542:9;39536:4;39532:20;39528:1;39517:9;39513:17;39506:47;39570:131;39696:4;39570:131;:::i;:::-;39562:139;;39289:419;;;:::o;39714:410::-;39754:7;39777:20;39795:1;39777:20;:::i;:::-;39772:25;;39811:20;39829:1;39811:20;:::i;:::-;39806:25;;39866:1;39863;39859:9;39888:30;39906:11;39888:30;:::i;:::-;39877:41;;40067:1;40058:7;40054:15;40051:1;40048:22;40028:1;40021:9;40001:83;39978:139;;40097:18;;:::i;:::-;39978:139;39762:362;39714:410;;;;:::o;40130:180::-;40178:77;40175:1;40168:88;40275:4;40272:1;40265:15;40299:4;40296:1;40289:15;40316:185;40356:1;40373:20;40391:1;40373:20;:::i;:::-;40368:25;;40407:20;40425:1;40407:20;:::i;:::-;40402:25;;40446:1;40436:35;;40451:18;;:::i;:::-;40436:35;40493:1;40490;40486:9;40481:14;;40316:185;;;;:::o;40507:320::-;40622:4;40660:2;40649:9;40645:18;40637:26;;40673:71;40741:1;40730:9;40726:17;40717:6;40673:71;:::i;:::-;40754:66;40816:2;40805:9;40801:18;40792:6;40754:66;:::i;:::-;40507:320;;;;;:::o;40833:225::-;40973:34;40969:1;40961:6;40957:14;40950:58;41042:8;41037:2;41029:6;41025:15;41018:33;40833:225;:::o;41064:366::-;41206:3;41227:67;41291:2;41286:3;41227:67;:::i;:::-;41220:74;;41303:93;41392:3;41303:93;:::i;:::-;41421:2;41416:3;41412:12;41405:19;;41064:366;;;:::o;41436:419::-;41602:4;41640:2;41629:9;41625:18;41617:26;;41689:9;41683:4;41679:20;41675:1;41664:9;41660:17;41653:47;41717:131;41843:4;41717:131;:::i;:::-;41709:139;;41436:419;;;:::o;41861:180::-;41909:77;41906:1;41899:88;42006:4;42003:1;41996:15;42030:4;42027:1;42020:15;42047:180;42095:77;42092:1;42085:88;42192:4;42189:1;42182:15;42216:4;42213:1;42206:15;42233:143;42290:5;42321:6;42315:13;42306:22;;42337:33;42364:5;42337:33;:::i;:::-;42233:143;;;;:::o;42382:351::-;42452:6;42501:2;42489:9;42480:7;42476:23;42472:32;42469:119;;;42507:79;;:::i;:::-;42469:119;42627:1;42652:64;42708:7;42699:6;42688:9;42684:22;42652:64;:::i;:::-;42642:74;;42598:128;42382:351;;;;:::o;42739:85::-;42784:7;42813:5;42802:16;;42739:85;;;:::o;42830:158::-;42888:9;42921:61;42939:42;42948:32;42974:5;42948:32;:::i;:::-;42939:42;:::i;:::-;42921:61;:::i;:::-;42908:74;;42830:158;;;:::o;42994:147::-;43089:45;43128:5;43089:45;:::i;:::-;43084:3;43077:58;42994:147;;:::o;43147:831::-;43410:4;43448:3;43437:9;43433:19;43425:27;;43462:71;43530:1;43519:9;43515:17;43506:6;43462:71;:::i;:::-;43543:80;43619:2;43608:9;43604:18;43595:6;43543:80;:::i;:::-;43670:9;43664:4;43660:20;43655:2;43644:9;43640:18;43633:48;43698:108;43801:4;43792:6;43698:108;:::i;:::-;43690:116;;43816:72;43884:2;43873:9;43869:18;43860:6;43816:72;:::i;:::-;43898:73;43966:3;43955:9;43951:19;43942:6;43898:73;:::i;:::-;43147:831;;;;;;;;:::o;43984:807::-;44233:4;44271:3;44260:9;44256:19;44248:27;;44285:71;44353:1;44342:9;44338:17;44329:6;44285:71;:::i;:::-;44366:72;44434:2;44423:9;44419:18;44410:6;44366:72;:::i;:::-;44448:80;44524:2;44513:9;44509:18;44500:6;44448:80;:::i;:::-;44538;44614:2;44603:9;44599:18;44590:6;44538:80;:::i;:::-;44628:73;44696:3;44685:9;44681:19;44672:6;44628:73;:::i;:::-;44711;44779:3;44768:9;44764:19;44755:6;44711:73;:::i;:::-;43984:807;;;;;;;;;:::o;44797:663::-;44885:6;44893;44901;44950:2;44938:9;44929:7;44925:23;44921:32;44918:119;;;44956:79;;:::i;:::-;44918:119;45076:1;45101:64;45157:7;45148:6;45137:9;45133:22;45101:64;:::i;:::-;45091:74;;45047:128;45214:2;45240:64;45296:7;45287:6;45276:9;45272:22;45240:64;:::i;:::-;45230:74;;45185:129;45353:2;45379:64;45435:7;45426:6;45415:9;45411:22;45379:64;:::i;:::-;45369:74;;45324:129;44797:663;;;;;:::o

Swarm Source

ipfs://0201cf6fc1dacf4009c00221d3233a01540e96173b6ab8909b0e5ce5a48fe618

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.