ETH Price: $2,506.97 (-0.73%)

Contract

0x1a7728652BB5Bb42523389f2F06f5aa980f14017
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve199620722024-05-27 15:22:2396 days ago1716823343IN
0x1a772865...980f14017
0 ETH0.001987542.05384631
Approve189669842024-01-09 4:17:59235 days ago1704773879IN
0x1a772865...980f14017
0 ETH0.0018388538.90851923
Approve184355672023-10-26 16:25:59310 days ago1698337559IN
0x1a772865...980f14017
0 ETH0.0012733926.97816878
Approve184210822023-10-24 15:42:35312 days ago1698162155IN
0x1a772865...980f14017
0 ETH0.0034002471.94608456
Approve184207182023-10-24 14:29:11312 days ago1698157751IN
0x1a772865...980f14017
0 ETH0.0015155432.06752044
Approve178018522023-07-29 23:03:59399 days ago1690671839IN
0x1a772865...980f14017
0 ETH0.0012390526.39158836
Approve177168932023-07-18 1:37:47410 days ago1689644267IN
0x1a772865...980f14017
0 ETH0.0004465514.78618311
Approve176936662023-07-14 19:06:11414 days ago1689361571IN
0x1a772865...980f14017
0 ETH0.0016597635.16384374
Approve176892342023-07-14 4:08:47414 days ago1689307727IN
0x1a772865...980f14017
0 ETH0.0008568218.15270096
Approve176862362023-07-13 18:03:35415 days ago1689271415IN
0x1a772865...980f14017
0 ETH0.003510674.28122813
Approve176851932023-07-13 14:33:11415 days ago1689258791IN
0x1a772865...980f14017
0 ETH0.0011206223.74148407
Approve176851712023-07-13 14:28:47415 days ago1689258527IN
0x1a772865...980f14017
0 ETH0.0011715324.82019741
Approve176781912023-07-12 14:51:59416 days ago1689173519IN
0x1a772865...980f14017
0 ETH0.0015796533.64614453
Approve176702462023-07-11 12:03:23417 days ago1689077003IN
0x1a772865...980f14017
0 ETH0.0008073317.10425756
Approve176620102023-07-10 8:13:35418 days ago1688976815IN
0x1a772865...980f14017
0 ETH0.0005723512.19409843
Approve176470872023-07-08 5:51:47420 days ago1688795507IN
0x1a772865...980f14017
0 ETH0.0007602516.0862827
Approve176470742023-07-08 5:49:11420 days ago1688795351IN
0x1a772865...980f14017
0 ETH0.0006198513.13230538
Approve176441842023-07-07 20:05:59421 days ago1688760359IN
0x1a772865...980f14017
0 ETH0.002745758.48268076
Approve176433692023-07-07 17:20:59421 days ago1688750459IN
0x1a772865...980f14017
0 ETH0.0016682135.46
Approve176431962023-07-07 16:45:35421 days ago1688748335IN
0x1a772865...980f14017
0 ETH0.0022656948.00105429
Approve176429942023-07-07 16:04:23421 days ago1688745863IN
0x1a772865...980f14017
0 ETH0.0023562650.18777073
Approve176383482023-07-07 0:24:59422 days ago1688689499IN
0x1a772865...980f14017
0 ETH0.0015822533.52162595
Approve176355262023-07-06 14:54:47422 days ago1688655287IN
0x1a772865...980f14017
0 ETH0.0020094742.57278232
Approve176347912023-07-06 12:24:59422 days ago1688646299IN
0x1a772865...980f14017
0 ETH0.0011458124.2751864
Approve176337802023-07-06 9:00:35422 days ago1688634035IN
0x1a772865...980f14017
0 ETH0.0023094948.86692223
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Paytience

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-01
*/

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

/*
Telegram: https://t.me/PaytienceErc
Website: https://paytience.dev/
*/

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

    uint256 private _totalSupply;
    uint8 private _decimals; 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Paytience is ERC20, Ownable {
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public feeReceiver;

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

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

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingFee;

    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingFee;

	uint256 public liquidityTokens;
    uint256 public marketingTokens;

    uint8 private constant DECIMALS = 18;

    uint256 public nextBuyTime; 
    uint256 public buyInterval; 
    bool public buyIntervalEnabled = true; 
    bool private whitelistEnabled = true; 

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) private _isWhitelisted; 
    mapping(address => uint256) private _whitelistLimit; 

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor() ERC20("Paytience", "PAYTIENCE", DECIMALS) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        feeReceiver = address(0x9d20db5B52921Fa06e0CCFf3240b0cB148e2Ea19); 

        uint256 _buyLiquidityFee = 0;
        uint256 _buyMarketingFee = 0;

        uint256 _sellLiquidityFee = 0;
        uint256 _sellMarketingFee = 0;

        buyInterval = 60 minutes; 

        uint256 totalSupply = 1 * 1e9 * 10**DECIMALS;

        maxTransactionAmount = 1 * 1e7 * 10**DECIMALS;
        maxWallet = 1 * 1e7 * 10**DECIMALS;

        swapTokensAtAmount = (totalSupply * 10) / 10000; 

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

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

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

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

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

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

        _mint(msg.sender, totalSupply);
    }

    function minutesToNextBuy() external view returns(uint256) {
        return (nextBuyTime - block.timestamp) / (1 minutes);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrade() external onlyOwner {
        tradingActive = true;
    }

    function setFees(uint256 _buyLiquidityFee, uint256 _buyMarketingFee, uint256 _sellLiquidityFee, uint256 _sellMarketingFee) external onlyOwner {
        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;
        require(buyTotalFees + sellTotalFees < 30, "Total roundtrip must be less than 30");
    } 

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

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

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapBack(bool on) external onlyOwner {
        swapBack = on;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            doSwapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees / 100;
                liquidityTokens += (fees * sellLiquidityFee) / sellTotalFees;
                marketingTokens += (fees * sellMarketingFee) / sellTotalFees;                
            }
            // on buy
            else if (automatedMarketMakerPairs[from]) {
                if(buyIntervalEnabled) {
                    require(block.timestamp > nextBuyTime, "wait");
                    if(whitelistEnabled) {
                        if (to != address(this) && to != uniswapV2Pair && to != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) {
                            require(_isWhitelisted[to], "Whitelist phase");
                            _isWhitelisted[to] = false; 
                        }
                    }
                    
                    nextBuyTime = block.timestamp + buyInterval;
                    
                }
            } 

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

            // amount -= fees;
        }

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

    function swapTokens(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function doSwapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = liquidityTokens + marketingTokens;
        bool success;

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokens(amountToSwapForETH);

        uint256 ethBalance = address(this).balance - initialETHBalance;
	
        uint256 ethMarketing = ethBalance * marketingTokens / totalTokensToSwap;

        uint256 ethLiquidity = ethBalance - ethMarketing;

        liquidityTokens = 0;
        marketingTokens = 0;

        if (tokensForLiquidity > 0 && ethLiquidity > 0) {
            addLiquidity(tokensForLiquidity, ethLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethLiquidity,
                tokensForLiquidity
            );
        }
        //there will be no leftover eth in the contract 
        (success, ) = address(feeReceiver).call{value: address(this).balance}("");
    }

    function addToWhitelist(address[] memory addresses) external onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            _isWhitelisted[addresses[i]] = true;
        }
    }

    function removeFromWhitelist(address[] memory addresses) external onlyOwner {
        for (uint i = 0; i < addresses.length; i++) {
            _isWhitelisted[addresses[i]] = false;
        }
    }

    function setWhitelist(address[] memory listed, uint256[] memory limit, bool status_) external onlyOwner {
        for (uint i = 0; i < listed.length; i++) {
            _isWhitelisted[listed[i]] = status_;
            _whitelistLimit[listed[i]] = 1 * 1e9 * 1e18 / 10000 * limit[i]; 
        }
    }

    function setIntervalSettings(bool enabled, uint32 buyIntervalMinutes, bool _whitelistEnabled) external onlyOwner {
        buyInterval = buyIntervalMinutes * 1 minutes; 
        buyIntervalEnabled = enabled; 
        nextBuyTime = block.timestamp; 
        whitelistEnabled = _whitelistEnabled; 
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToWhitelist","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":"buyInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyIntervalEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"enableTrade","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":[],"name":"feeReceiver","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minutesToNextBuy","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":"nextBuyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint32","name":"buyIntervalMinutes","type":"uint32"},{"internalType":"bool","name":"_whitelistEnabled","type":"bool"}],"name":"setIntervalSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"listed","type":"address[]"},{"internalType":"uint256[]","name":"limit","type":"uint256[]"},{"internalType":"bool","name":"status_","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBack","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"on","type":"bool"}],"name":"updateSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001601660006101000a81548160ff0219169083151502179055506001601660016101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600981526020017f5061797469656e636500000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f5041595449454e43450000000000000000000000000000000000000000000000815250601282600490805190602001906200011f92919062000ad0565b5081600590805190602001906200013892919062000ad0565b5080600360006101000a81548160ff021916908360ff160217905550505050620001776200016b6200059060201b60201c565b6200059860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050739d20db5b52921fa06e0ccff3240b0cb148e2ea19600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600080600080610e1060158190555060006012600a62000206919062000d1a565b633b9aca0062000217919062000d6b565b90506012600a62000229919062000d1a565b6298968062000239919062000d6b565b6008819055506012600a6200024f919062000d1a565b629896806200025f919062000d6b565b600a81905550612710600a8262000277919062000d6b565b62000283919062000dfb565b6009819055506200029c8660016200065e60201b60201c565b8573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508573ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000342919062000e9d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308873ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d0919062000e9d565b6040518363ffffffff1660e01b8152600401620003ef92919062000ee0565b6020604051808303816000875af11580156200040f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000435919062000e9d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200047d60a05160016200065e60201b60201c565b6200049260a05160016200074860201b60201c565b84600d8190555083600e81905550600e54600d54620004b2919062000f0d565b600c819055508260108190555081601181905550601154601054620004d8919062000f0d565b600f8190555062000500620004f2620007e960201b60201c565b60016200081360201b60201c565b620005133060016200081360201b60201c565b6200052861dead60016200081360201b60201c565b6200054a6200053c620007e960201b60201c565b60016200065e60201b60201c565b6200055d3060016200065e60201b60201c565b6200057261dead60016200065e60201b60201c565b6200058433826200094d60201b60201c565b5050505050506200112c565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200066e6200059060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000694620007e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e49062000fcb565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008236200059060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000849620007e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008999062000fcb565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094191906200100a565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b79062001077565b60405180910390fd5b620009d46000838362000ac660201b60201c565b8060026000828254620009e8919062000f0d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a3f919062000f0d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aa69190620010aa565b60405180910390a362000ac26000838362000acb60201b60201c565b5050565b505050565b505050565b82805462000ade90620010f6565b90600052602060002090601f01602090048101928262000b02576000855562000b4e565b82601f1062000b1d57805160ff191683800117855562000b4e565b8280016001018555821562000b4e579182015b8281111562000b4d57825182559160200191906001019062000b30565b5b50905062000b5d919062000b61565b5090565b5b8082111562000b7c57600081600090555060010162000b62565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c0e5780860481111562000be65762000be562000b80565b5b600185161562000bf65780820291505b808102905062000c068562000baf565b945062000bc6565b94509492505050565b60008262000c29576001905062000cfc565b8162000c39576000905062000cfc565b816001811462000c52576002811462000c5d5762000c93565b600191505062000cfc565b60ff84111562000c725762000c7162000b80565b5b8360020a91508482111562000c8c5762000c8b62000b80565b5b5062000cfc565b5060208310610133831016604e8410600b841016171562000ccd5782820a90508381111562000cc75762000cc662000b80565b5b62000cfc565b62000cdc848484600162000bbc565b9250905081840481111562000cf65762000cf562000b80565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000d278262000d03565b915062000d348362000d0d565b925062000d637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c17565b905092915050565b600062000d788262000d03565b915062000d858362000d03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dc15762000dc062000b80565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e088262000d03565b915062000e158362000d03565b92508262000e285762000e2762000dcc565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e658262000e38565b9050919050565b62000e778162000e58565b811462000e8357600080fd5b50565b60008151905062000e978162000e6c565b92915050565b60006020828403121562000eb65762000eb562000e33565b5b600062000ec68482850162000e86565b91505092915050565b62000eda8162000e58565b82525050565b600060408201905062000ef7600083018562000ecf565b62000f06602083018462000ecf565b9392505050565b600062000f1a8262000d03565b915062000f278362000d03565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f5f5762000f5e62000b80565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fb360208362000f6a565b915062000fc08262000f7b565b602082019050919050565b6000602082019050818103600083015262000fe68162000fa4565b9050919050565b60008115159050919050565b620010048162000fed565b82525050565b600060208201905062001021600083018462000ff9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200105f601f8362000f6a565b91506200106c8262001027565b602082019050919050565b60006020820190508181036000830152620010928162001050565b9050919050565b620010a48162000d03565b82525050565b6000602082019050620010c1600083018462001099565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200110f57607f821691505b60208210811415620011265762001125620010c7565b5b50919050565b60805160a051614ed96200118360003960008181610f1c015281816119090152612c0b015260008181610d3301528181613453015281816135340152818161355b015281816135f7015261361e0152614ed96000f3fe6080604052600436106102cc5760003560e01c80637bce5a0411610175578063bbc0c742116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610b1e578063f2fde38b14610b49578063f637434214610b72578063f8b45b0514610b9d576102d3565b8063dd62ed3e14610a8b578063e2f4560514610ac8578063e9c3bbd314610af3576102d3565b8063bbc0c7421461097b578063bdd4b545146109a6578063c0246668146109cf578063c8c8ebe4146109f8578063d257b34f14610a23578063d85ba06314610a60576102d3565b806395d89b411161012e57806395d89b41146108455780639a7a23d614610870578063a457c2d714610899578063a9059cbb146108d6578063b3f0067414610913578063b62496f51461093e576102d3565b80637bce5a04146107455780637f649783146107705780638896d539146107995780638b27306d146107c45780638da5cb5b146107ef578063921369131461081a576102d3565b80634dc0e0f7116102345780636ac5eeee116101ed578063715018a6116101c7578063715018a6146106b157806371e65840146106c8578063751039fc146106f15780637571336a1461071c576102d3565b80636ac5eeee146106205780636fcba3771461064b57806370a0823114610674576102d3565b80634dc0e0f7146105105780634f98c2f2146105395780634fbee19314610564578063548db174146105a157806366c215f3146105ca5780636a486a8e146105f5576102d3565b806323b872dd1161028657806323b872dd146103ea578063313ce56714610427578063395093511461045257806349bd5a5e1461048f5780634a62bb65146104ba5780634b8ce602146104e5576102d3565b806299d386146102d857806306fdde03146102ef578063095ea7b31461031a57806310d5de53146103575780631694505e1461039457806318160ddd146103bf576102d3565b366102d357005b600080fd5b3480156102e457600080fd5b506102ed610bc8565b005b3480156102fb57600080fd5b50610304610c61565b6040516103119190613786565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613850565b610cf3565b60405161034e91906138ab565b60405180910390f35b34801561036357600080fd5b5061037e600480360381019061037991906138c6565b610d11565b60405161038b91906138ab565b60405180910390f35b3480156103a057600080fd5b506103a9610d31565b6040516103b69190613952565b60405180910390f35b3480156103cb57600080fd5b506103d4610d55565b6040516103e1919061397c565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190613997565b610d5f565b60405161041e91906138ab565b60405180910390f35b34801561043357600080fd5b5061043c610e57565b6040516104499190613a06565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190613850565b610e6e565b60405161048691906138ab565b60405180910390f35b34801561049b57600080fd5b506104a4610f1a565b6040516104b19190613a30565b60405180910390f35b3480156104c657600080fd5b506104cf610f3e565b6040516104dc91906138ab565b60405180910390f35b3480156104f157600080fd5b506104fa610f51565b604051610507919061397c565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613c82565b610f57565b005b34801561054557600080fd5b5061054e6110f6565b60405161055b919061397c565b60405180910390f35b34801561057057600080fd5b5061058b600480360381019061058691906138c6565b6110fc565b60405161059891906138ab565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190613d0d565b611152565b005b3480156105d657600080fd5b506105df611263565b6040516105ec91906138ab565b60405180910390f35b34801561060157600080fd5b5061060a611276565b604051610617919061397c565b60405180910390f35b34801561062c57600080fd5b5061063561127c565b60405161064291906138ab565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190613d56565b61128f565b005b34801561068057600080fd5b5061069b600480360381019061069691906138c6565b6113ab565b6040516106a8919061397c565b60405180910390f35b3480156106bd57600080fd5b506106c66113f3565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190613dbd565b61147b565b005b3480156106fd57600080fd5b50610706611514565b60405161071391906138ab565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190613dea565b6115b4565b005b34801561075157600080fd5b5061075a61168b565b604051610767919061397c565b60405180910390f35b34801561077c57600080fd5b5061079760048036038101906107929190613d0d565b611691565b005b3480156107a557600080fd5b506107ae6117a2565b6040516107bb919061397c565b60405180910390f35b3480156107d057600080fd5b506107d96117c3565b6040516107e6919061397c565b60405180910390f35b3480156107fb57600080fd5b506108046117c9565b6040516108119190613a30565b60405180910390f35b34801561082657600080fd5b5061082f6117f3565b60405161083c919061397c565b60405180910390f35b34801561085157600080fd5b5061085a6117f9565b6040516108679190613786565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190613dea565b61188b565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190613850565b6119a4565b6040516108cd91906138ab565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f89190613850565b611a8f565b60405161090a91906138ab565b60405180910390f35b34801561091f57600080fd5b50610928611aad565b6040516109359190613a30565b60405180910390f35b34801561094a57600080fd5b50610965600480360381019061096091906138c6565b611ad3565b60405161097291906138ab565b60405180910390f35b34801561098757600080fd5b50610990611af3565b60405161099d91906138ab565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190613e66565b611b06565b005b3480156109db57600080fd5b506109f660048036038101906109f19190613dea565b611bdb565b005b348015610a0457600080fd5b50610a0d611d00565b604051610a1a919061397c565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a459190613eb9565b611d06565b604051610a5791906138ab565b60405180910390f35b348015610a6c57600080fd5b50610a75611e5b565b604051610a82919061397c565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad9190613ee6565b611e61565b604051610abf919061397c565b60405180910390f35b348015610ad457600080fd5b50610add611ee8565b604051610aea919061397c565b60405180910390f35b348015610aff57600080fd5b50610b08611eee565b604051610b15919061397c565b60405180910390f35b348015610b2a57600080fd5b50610b33611ef4565b604051610b40919061397c565b60405180910390f35b348015610b5557600080fd5b50610b706004803603810190610b6b91906138c6565b611efa565b005b348015610b7e57600080fd5b50610b87611ff2565b604051610b94919061397c565b60405180910390f35b348015610ba957600080fd5b50610bb2611ff8565b604051610bbf919061397c565b60405180910390f35b610bd0611ffe565b73ffffffffffffffffffffffffffffffffffffffff16610bee6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90613f72565b60405180910390fd5b6001600b60016101000a81548160ff021916908315150217905550565b606060048054610c7090613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9c90613fc1565b8015610ce95780601f10610cbe57610100808354040283529160200191610ce9565b820191906000526020600020905b815481529060010190602001808311610ccc57829003601f168201915b5050505050905090565b6000610d07610d00611ffe565b8484612006565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610d6c8484846121d1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610db7611ffe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90614065565b60405180910390fd5b610e4b85610e43611ffe565b858403612006565b60019150509392505050565b6000600360009054906101000a900460ff16905090565b6000610f10610e7b611ffe565b848460016000610e89611ffe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0b91906140b4565b612006565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b60125481565b610f5f611ffe565b73ffffffffffffffffffffffffffffffffffffffff16610f7d6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613f72565b60405180910390fd5b60005b83518110156110f0578160196000868481518110610ff757610ff661410a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106110635761106261410a565b5b602002602001015169152d02c7e14af68000006110809190614139565b601a60008684815181106110975761109661410a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110e890614193565b915050610fd6565b50505050565b60145481565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61115a611ffe565b73ffffffffffffffffffffffffffffffffffffffff166111786117c9565b73ffffffffffffffffffffffffffffffffffffffff16146111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c590613f72565b60405180910390fd5b60005b815181101561125f576000601960008484815181106111f3576111f261410a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061125790614193565b9150506111d1565b5050565b601660009054906101000a900460ff1681565b600f5481565b600b60029054906101000a900460ff1681565b611297611ffe565b73ffffffffffffffffffffffffffffffffffffffff166112b56117c9565b73ffffffffffffffffffffffffffffffffffffffff161461130b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130290613f72565b60405180910390fd5b83600d8190555082600e81905550600e54600d5461132991906140b4565b600c81905550816010819055508060118190555060115460105461134d91906140b4565b600f81905550601e600f54600c5461136591906140b4565b106113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c9061424e565b60405180910390fd5b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113fb611ffe565b73ffffffffffffffffffffffffffffffffffffffff166114196117c9565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613f72565b60405180910390fd5b6114796000612dd3565b565b611483611ffe565b73ffffffffffffffffffffffffffffffffffffffff166114a16117c9565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613f72565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b600061151e611ffe565b73ffffffffffffffffffffffffffffffffffffffff1661153c6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990613f72565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115bc611ffe565b73ffffffffffffffffffffffffffffffffffffffff166115da6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613f72565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b611699611ffe565b73ffffffffffffffffffffffffffffffffffffffff166116b76117c9565b73ffffffffffffffffffffffffffffffffffffffff161461170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490613f72565b60405180910390fd5b60005b815181101561179e576001601960008484815181106117325761173161410a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061179690614193565b915050611710565b5050565b6000603c426014546117b4919061426e565b6117be91906142d1565b905090565b60135481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606005805461180890613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461183490613fc1565b80156118815780601f1061185657610100808354040283529160200191611881565b820191906000526020600020905b81548152906001019060200180831161186457829003601f168201915b5050505050905090565b611893611ffe565b73ffffffffffffffffffffffffffffffffffffffff166118b16117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613f72565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90614374565b60405180910390fd5b6119a08282612e99565b5050565b600080600160006119b3611ffe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790614406565b60405180910390fd5b611a84611a7b611ffe565b85858403612006565b600191505092915050565b6000611aa3611a9c611ffe565b84846121d1565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611b0e611ffe565b73ffffffffffffffffffffffffffffffffffffffff16611b2c6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990613f72565b60405180910390fd5b603c82611b8f9190614426565b63ffffffff1660158190555082601660006101000a81548160ff0219169083151502179055504260148190555080601660016101000a81548160ff021916908315150217905550505050565b611be3611ffe565b73ffffffffffffffffffffffffffffffffffffffff16611c016117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e90613f72565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cf491906138ab565b60405180910390a25050565b60085481565b6000611d10611ffe565b73ffffffffffffffffffffffffffffffffffffffff16611d2e6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90613f72565b60405180910390fd5b620186a06001611d92610d55565b611d9c9190614139565b611da691906142d1565b821015611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf906144d6565b60405180910390fd5b6103e86005611df5610d55565b611dff9190614139565b611e0991906142d1565b821115611e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4290614568565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60155481565b600d5481565b611f02611ffe565b73ffffffffffffffffffffffffffffffffffffffff16611f206117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613f72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd906145fa565b60405180910390fd5b611fef81612dd3565b50565b60105481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d9061468c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd9061471e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121c4919061397c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612241576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612238906147b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a890614842565b60405180910390fd5b60008114156122cb576122c683836000612f3a565b612dce565b600b60009054906101000a900460ff16156127d4576122e86117c9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561235657506123266117c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123c9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e25750600660149054906101000a900460ff16155b156127d357600b60019054906101000a900460ff166124dc57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061249c5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d2906148ae565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561257f5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612634576008548111156125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090614940565b60405180910390fd5b600a546125d5836113ab565b826125e091906140b4565b1115612621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612618906149ac565b60405180910390fd5b601660019054906101000a9050506127d2565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d75750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561272657600854811115612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614a3e565b60405180910390fd5b6127d1565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127d057600a54612783836113ab565b8261278e91906140b4565b11156127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c6906149ac565b60405180910390fd5b5b5b5b5b5b60006127df306113ab565b9050600060095482101590508080156128045750600b60029054906101000a900460ff165b801561281d5750600660149054906101000a900460ff16155b80156128735750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128c95750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561291f5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612963576001600660146101000a81548160ff0219169083151502179055506129476131bb565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a195750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2357600090505b60008115612dbe57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8657506000600f54115b15612b12576064600f5486612a9b9190614139565b612aa591906142d1565b9050600f5460105482612ab89190614139565b612ac291906142d1565b60126000828254612ad391906140b4565b92505081905550600f5460115482612aeb9190614139565b612af591906142d1565b60136000828254612b0691906140b4565b92505081905550612da8565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612da757601660009054906101000a900460ff1615612da6576014544211612bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb490614aaa565b60405180910390fd5b601660019054906101000a900460ff1615612d91573073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612c5a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca65750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15612d9057601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e90614b16565b60405180910390fd5b6000601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b60155442612d9f91906140b4565b6014819055505b5b5b6000811115612dbd57612dbc873083612f3a565b5b5b612dc9878787612f3a565b505050505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa1906147b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561301a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301190614842565b60405180910390fd5b6130258383836133aa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a290614ba8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461313e91906140b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131a2919061397c565b60405180910390a36131b58484846133af565b50505050565b60006131c6306113ab565b905060006013546012546131da91906140b4565b90506000808314806131ec5750600082145b156131f9575050506133a8565b60146009546132089190614139565b83111561322157601460095461321e9190614139565b92505b6000600283601254866132349190614139565b61323e91906142d1565b61324891906142d1565b905060008185613258919061426e565b90506000479050613268826133b4565b60008147613276919061426e565b9050600086601354836132899190614139565b61329391906142d1565b9050600081836132a3919061426e565b9050600060128190555060006013819055506000861180156132c55750600081115b15613310576132d486826135f1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828860405161330793929190614bc8565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161335690614c30565b60006040518083038185875af1925050503d8060008114613393576040519150601f19603f3d011682016040523d82523d6000602084013e613398565b606091505b5050809750505050505050505050505b565b505050565b505050565b6000600267ffffffffffffffff8111156133d1576133d0613a50565b5b6040519080825280602002602001820160405280156133ff5781602001602082028036833780820191505090505b50905030816000815181106134175761341661410a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e09190614c5a565b816001815181106134f4576134f361410a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613559307f000000000000000000000000000000000000000000000000000000000000000084612006565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135bb959493929190614d80565b600060405180830381600087803b1580156135d557600080fd5b505af11580156135e9573d6000803e3d6000fd5b505050505050565b61361c307f000000000000000000000000000000000000000000000000000000000000000084612006565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016136a396959493929190614dda565b60606040518083038185885af11580156136c1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136e69190614e50565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561372757808201518184015260208101905061370c565b83811115613736576000848401525b50505050565b6000601f19601f8301169050919050565b6000613758826136ed565b61376281856136f8565b9350613772818560208601613709565b61377b8161373c565b840191505092915050565b600060208201905081810360008301526137a0818461374d565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137e7826137bc565b9050919050565b6137f7816137dc565b811461380257600080fd5b50565b600081359050613814816137ee565b92915050565b6000819050919050565b61382d8161381a565b811461383857600080fd5b50565b60008135905061384a81613824565b92915050565b60008060408385031215613867576138666137b2565b5b600061387585828601613805565b92505060206138868582860161383b565b9150509250929050565b60008115159050919050565b6138a581613890565b82525050565b60006020820190506138c0600083018461389c565b92915050565b6000602082840312156138dc576138db6137b2565b5b60006138ea84828501613805565b91505092915050565b6000819050919050565b600061391861391361390e846137bc565b6138f3565b6137bc565b9050919050565b600061392a826138fd565b9050919050565b600061393c8261391f565b9050919050565b61394c81613931565b82525050565b60006020820190506139676000830184613943565b92915050565b6139768161381a565b82525050565b6000602082019050613991600083018461396d565b92915050565b6000806000606084860312156139b0576139af6137b2565b5b60006139be86828701613805565b93505060206139cf86828701613805565b92505060406139e08682870161383b565b9150509250925092565b600060ff82169050919050565b613a00816139ea565b82525050565b6000602082019050613a1b60008301846139f7565b92915050565b613a2a816137dc565b82525050565b6000602082019050613a456000830184613a21565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a888261373c565b810181811067ffffffffffffffff82111715613aa757613aa6613a50565b5b80604052505050565b6000613aba6137a8565b9050613ac68282613a7f565b919050565b600067ffffffffffffffff821115613ae657613ae5613a50565b5b602082029050602081019050919050565b600080fd5b6000613b0f613b0a84613acb565b613ab0565b90508083825260208201905060208402830185811115613b3257613b31613af7565b5b835b81811015613b5b5780613b478882613805565b845260208401935050602081019050613b34565b5050509392505050565b600082601f830112613b7a57613b79613a4b565b5b8135613b8a848260208601613afc565b91505092915050565b600067ffffffffffffffff821115613bae57613bad613a50565b5b602082029050602081019050919050565b6000613bd2613bcd84613b93565b613ab0565b90508083825260208201905060208402830185811115613bf557613bf4613af7565b5b835b81811015613c1e5780613c0a888261383b565b845260208401935050602081019050613bf7565b5050509392505050565b600082601f830112613c3d57613c3c613a4b565b5b8135613c4d848260208601613bbf565b91505092915050565b613c5f81613890565b8114613c6a57600080fd5b50565b600081359050613c7c81613c56565b92915050565b600080600060608486031215613c9b57613c9a6137b2565b5b600084013567ffffffffffffffff811115613cb957613cb86137b7565b5b613cc586828701613b65565b935050602084013567ffffffffffffffff811115613ce657613ce56137b7565b5b613cf286828701613c28565b9250506040613d0386828701613c6d565b9150509250925092565b600060208284031215613d2357613d226137b2565b5b600082013567ffffffffffffffff811115613d4157613d406137b7565b5b613d4d84828501613b65565b91505092915050565b60008060008060808587031215613d7057613d6f6137b2565b5b6000613d7e8782880161383b565b9450506020613d8f8782880161383b565b9350506040613da08782880161383b565b9250506060613db18782880161383b565b91505092959194509250565b600060208284031215613dd357613dd26137b2565b5b6000613de184828501613c6d565b91505092915050565b60008060408385031215613e0157613e006137b2565b5b6000613e0f85828601613805565b9250506020613e2085828601613c6d565b9150509250929050565b600063ffffffff82169050919050565b613e4381613e2a565b8114613e4e57600080fd5b50565b600081359050613e6081613e3a565b92915050565b600080600060608486031215613e7f57613e7e6137b2565b5b6000613e8d86828701613c6d565b9350506020613e9e86828701613e51565b9250506040613eaf86828701613c6d565b9150509250925092565b600060208284031215613ecf57613ece6137b2565b5b6000613edd8482850161383b565b91505092915050565b60008060408385031215613efd57613efc6137b2565b5b6000613f0b85828601613805565b9250506020613f1c85828601613805565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f5c6020836136f8565b9150613f6782613f26565b602082019050919050565b60006020820190508181036000830152613f8b81613f4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fd957607f821691505b60208210811415613fed57613fec613f92565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061404f6028836136f8565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140bf8261381a565b91506140ca8361381a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140ff576140fe614085565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006141448261381a565b915061414f8361381a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561418857614187614085565b5b828202905092915050565b600061419e8261381a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141d1576141d0614085565b5b600182019050919050565b7f546f74616c20726f756e6474726970206d757374206265206c6573732074686160008201527f6e20333000000000000000000000000000000000000000000000000000000000602082015250565b60006142386024836136f8565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b9050919050565b60006142798261381a565b91506142848361381a565b92508282101561429757614296614085565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142dc8261381a565b91506142e78361381a565b9250826142f7576142f66142a2565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061435e6039836136f8565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143f06025836136f8565b91506143fb82614394565b604082019050919050565b6000602082019050818103600083015261441f816143e3565b9050919050565b600061443182613e2a565b915061443c83613e2a565b92508163ffffffff048311821515161561445957614458614085565b5b828202905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144c06035836136f8565b91506144cb82614464565b604082019050919050565b600060208201905081810360008301526144ef816144b3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006145526034836136f8565b915061455d826144f6565b604082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145e46026836136f8565b91506145ef82614588565b604082019050919050565b60006020820190508181036000830152614613816145d7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146766024836136f8565b91506146818261461a565b604082019050919050565b600060208201905081810360008301526146a581614669565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147086022836136f8565b9150614713826146ac565b604082019050919050565b60006020820190508181036000830152614737816146fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061479a6025836136f8565b91506147a58261473e565b604082019050919050565b600060208201905081810360008301526147c98161478d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061482c6023836136f8565b9150614837826147d0565b604082019050919050565b6000602082019050818103600083015261485b8161481f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148986016836136f8565b91506148a382614862565b602082019050919050565b600060208201905081810360008301526148c78161488b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061492a6035836136f8565b9150614935826148ce565b604082019050919050565b600060208201905081810360008301526149598161491d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149966013836136f8565b91506149a182614960565b602082019050919050565b600060208201905081810360008301526149c581614989565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a286036836136f8565b9150614a33826149cc565b604082019050919050565b60006020820190508181036000830152614a5781614a1b565b9050919050565b7f7761697400000000000000000000000000000000000000000000000000000000600082015250565b6000614a946004836136f8565b9150614a9f82614a5e565b602082019050919050565b60006020820190508181036000830152614ac381614a87565b9050919050565b7f57686974656c6973742070686173650000000000000000000000000000000000600082015250565b6000614b00600f836136f8565b9150614b0b82614aca565b602082019050919050565b60006020820190508181036000830152614b2f81614af3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b926026836136f8565b9150614b9d82614b36565b604082019050919050565b60006020820190508181036000830152614bc181614b85565b9050919050565b6000606082019050614bdd600083018661396d565b614bea602083018561396d565b614bf7604083018461396d565b949350505050565b600081905092915050565b50565b6000614c1a600083614bff565b9150614c2582614c0a565b600082019050919050565b6000614c3b82614c0d565b9150819050919050565b600081519050614c54816137ee565b92915050565b600060208284031215614c7057614c6f6137b2565b5b6000614c7e84828501614c45565b91505092915050565b6000819050919050565b6000614cac614ca7614ca284614c87565b6138f3565b61381a565b9050919050565b614cbc81614c91565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614cf7816137dc565b82525050565b6000614d098383614cee565b60208301905092915050565b6000602082019050919050565b6000614d2d82614cc2565b614d378185614ccd565b9350614d4283614cde565b8060005b83811015614d73578151614d5a8882614cfd565b9750614d6583614d15565b925050600181019050614d46565b5085935050505092915050565b600060a082019050614d95600083018861396d565b614da26020830187614cb3565b8181036040830152614db48186614d22565b9050614dc36060830185613a21565b614dd0608083018461396d565b9695505050505050565b600060c082019050614def6000830189613a21565b614dfc602083018861396d565b614e096040830187614cb3565b614e166060830186614cb3565b614e236080830185613a21565b614e3060a083018461396d565b979650505050505050565b600081519050614e4a81613824565b92915050565b600080600060608486031215614e6957614e686137b2565b5b6000614e7786828701614e3b565b9350506020614e8886828701614e3b565b9250506040614e9986828701614e3b565b915050925092509256fea2646970667358221220612b770456b2962ecbb5c44b36315121ae2c03d9131eeba46fa741ccdc2e1de264736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102cc5760003560e01c80637bce5a0411610175578063bbc0c742116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610b1e578063f2fde38b14610b49578063f637434214610b72578063f8b45b0514610b9d576102d3565b8063dd62ed3e14610a8b578063e2f4560514610ac8578063e9c3bbd314610af3576102d3565b8063bbc0c7421461097b578063bdd4b545146109a6578063c0246668146109cf578063c8c8ebe4146109f8578063d257b34f14610a23578063d85ba06314610a60576102d3565b806395d89b411161012e57806395d89b41146108455780639a7a23d614610870578063a457c2d714610899578063a9059cbb146108d6578063b3f0067414610913578063b62496f51461093e576102d3565b80637bce5a04146107455780637f649783146107705780638896d539146107995780638b27306d146107c45780638da5cb5b146107ef578063921369131461081a576102d3565b80634dc0e0f7116102345780636ac5eeee116101ed578063715018a6116101c7578063715018a6146106b157806371e65840146106c8578063751039fc146106f15780637571336a1461071c576102d3565b80636ac5eeee146106205780636fcba3771461064b57806370a0823114610674576102d3565b80634dc0e0f7146105105780634f98c2f2146105395780634fbee19314610564578063548db174146105a157806366c215f3146105ca5780636a486a8e146105f5576102d3565b806323b872dd1161028657806323b872dd146103ea578063313ce56714610427578063395093511461045257806349bd5a5e1461048f5780634a62bb65146104ba5780634b8ce602146104e5576102d3565b806299d386146102d857806306fdde03146102ef578063095ea7b31461031a57806310d5de53146103575780631694505e1461039457806318160ddd146103bf576102d3565b366102d357005b600080fd5b3480156102e457600080fd5b506102ed610bc8565b005b3480156102fb57600080fd5b50610304610c61565b6040516103119190613786565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613850565b610cf3565b60405161034e91906138ab565b60405180910390f35b34801561036357600080fd5b5061037e600480360381019061037991906138c6565b610d11565b60405161038b91906138ab565b60405180910390f35b3480156103a057600080fd5b506103a9610d31565b6040516103b69190613952565b60405180910390f35b3480156103cb57600080fd5b506103d4610d55565b6040516103e1919061397c565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190613997565b610d5f565b60405161041e91906138ab565b60405180910390f35b34801561043357600080fd5b5061043c610e57565b6040516104499190613a06565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190613850565b610e6e565b60405161048691906138ab565b60405180910390f35b34801561049b57600080fd5b506104a4610f1a565b6040516104b19190613a30565b60405180910390f35b3480156104c657600080fd5b506104cf610f3e565b6040516104dc91906138ab565b60405180910390f35b3480156104f157600080fd5b506104fa610f51565b604051610507919061397c565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613c82565b610f57565b005b34801561054557600080fd5b5061054e6110f6565b60405161055b919061397c565b60405180910390f35b34801561057057600080fd5b5061058b600480360381019061058691906138c6565b6110fc565b60405161059891906138ab565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c39190613d0d565b611152565b005b3480156105d657600080fd5b506105df611263565b6040516105ec91906138ab565b60405180910390f35b34801561060157600080fd5b5061060a611276565b604051610617919061397c565b60405180910390f35b34801561062c57600080fd5b5061063561127c565b60405161064291906138ab565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190613d56565b61128f565b005b34801561068057600080fd5b5061069b600480360381019061069691906138c6565b6113ab565b6040516106a8919061397c565b60405180910390f35b3480156106bd57600080fd5b506106c66113f3565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190613dbd565b61147b565b005b3480156106fd57600080fd5b50610706611514565b60405161071391906138ab565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190613dea565b6115b4565b005b34801561075157600080fd5b5061075a61168b565b604051610767919061397c565b60405180910390f35b34801561077c57600080fd5b5061079760048036038101906107929190613d0d565b611691565b005b3480156107a557600080fd5b506107ae6117a2565b6040516107bb919061397c565b60405180910390f35b3480156107d057600080fd5b506107d96117c3565b6040516107e6919061397c565b60405180910390f35b3480156107fb57600080fd5b506108046117c9565b6040516108119190613a30565b60405180910390f35b34801561082657600080fd5b5061082f6117f3565b60405161083c919061397c565b60405180910390f35b34801561085157600080fd5b5061085a6117f9565b6040516108679190613786565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190613dea565b61188b565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190613850565b6119a4565b6040516108cd91906138ab565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f89190613850565b611a8f565b60405161090a91906138ab565b60405180910390f35b34801561091f57600080fd5b50610928611aad565b6040516109359190613a30565b60405180910390f35b34801561094a57600080fd5b50610965600480360381019061096091906138c6565b611ad3565b60405161097291906138ab565b60405180910390f35b34801561098757600080fd5b50610990611af3565b60405161099d91906138ab565b60405180910390f35b3480156109b257600080fd5b506109cd60048036038101906109c89190613e66565b611b06565b005b3480156109db57600080fd5b506109f660048036038101906109f19190613dea565b611bdb565b005b348015610a0457600080fd5b50610a0d611d00565b604051610a1a919061397c565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a459190613eb9565b611d06565b604051610a5791906138ab565b60405180910390f35b348015610a6c57600080fd5b50610a75611e5b565b604051610a82919061397c565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad9190613ee6565b611e61565b604051610abf919061397c565b60405180910390f35b348015610ad457600080fd5b50610add611ee8565b604051610aea919061397c565b60405180910390f35b348015610aff57600080fd5b50610b08611eee565b604051610b15919061397c565b60405180910390f35b348015610b2a57600080fd5b50610b33611ef4565b604051610b40919061397c565b60405180910390f35b348015610b5557600080fd5b50610b706004803603810190610b6b91906138c6565b611efa565b005b348015610b7e57600080fd5b50610b87611ff2565b604051610b94919061397c565b60405180910390f35b348015610ba957600080fd5b50610bb2611ff8565b604051610bbf919061397c565b60405180910390f35b610bd0611ffe565b73ffffffffffffffffffffffffffffffffffffffff16610bee6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90613f72565b60405180910390fd5b6001600b60016101000a81548160ff021916908315150217905550565b606060048054610c7090613fc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9c90613fc1565b8015610ce95780601f10610cbe57610100808354040283529160200191610ce9565b820191906000526020600020905b815481529060010190602001808311610ccc57829003601f168201915b5050505050905090565b6000610d07610d00611ffe565b8484612006565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610d6c8484846121d1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610db7611ffe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90614065565b60405180910390fd5b610e4b85610e43611ffe565b858403612006565b60019150509392505050565b6000600360009054906101000a900460ff16905090565b6000610f10610e7b611ffe565b848460016000610e89611ffe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f0b91906140b4565b612006565b6001905092915050565b7f0000000000000000000000008af88063bdd0cdd2ae1e666147bbebb676e4482c81565b600b60009054906101000a900460ff1681565b60125481565b610f5f611ffe565b73ffffffffffffffffffffffffffffffffffffffff16610f7d6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613f72565b60405180910390fd5b60005b83518110156110f0578160196000868481518110610ff757610ff661410a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106110635761106261410a565b5b602002602001015169152d02c7e14af68000006110809190614139565b601a60008684815181106110975761109661410a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080806110e890614193565b915050610fd6565b50505050565b60145481565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61115a611ffe565b73ffffffffffffffffffffffffffffffffffffffff166111786117c9565b73ffffffffffffffffffffffffffffffffffffffff16146111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c590613f72565b60405180910390fd5b60005b815181101561125f576000601960008484815181106111f3576111f261410a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061125790614193565b9150506111d1565b5050565b601660009054906101000a900460ff1681565b600f5481565b600b60029054906101000a900460ff1681565b611297611ffe565b73ffffffffffffffffffffffffffffffffffffffff166112b56117c9565b73ffffffffffffffffffffffffffffffffffffffff161461130b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130290613f72565b60405180910390fd5b83600d8190555082600e81905550600e54600d5461132991906140b4565b600c81905550816010819055508060118190555060115460105461134d91906140b4565b600f81905550601e600f54600c5461136591906140b4565b106113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c9061424e565b60405180910390fd5b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113fb611ffe565b73ffffffffffffffffffffffffffffffffffffffff166114196117c9565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613f72565b60405180910390fd5b6114796000612dd3565b565b611483611ffe565b73ffffffffffffffffffffffffffffffffffffffff166114a16117c9565b73ffffffffffffffffffffffffffffffffffffffff16146114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613f72565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b600061151e611ffe565b73ffffffffffffffffffffffffffffffffffffffff1661153c6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990613f72565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6115bc611ffe565b73ffffffffffffffffffffffffffffffffffffffff166115da6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613f72565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b611699611ffe565b73ffffffffffffffffffffffffffffffffffffffff166116b76117c9565b73ffffffffffffffffffffffffffffffffffffffff161461170d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170490613f72565b60405180910390fd5b60005b815181101561179e576001601960008484815181106117325761173161410a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061179690614193565b915050611710565b5050565b6000603c426014546117b4919061426e565b6117be91906142d1565b905090565b60135481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b60606005805461180890613fc1565b80601f016020809104026020016040519081016040528092919081815260200182805461183490613fc1565b80156118815780601f1061185657610100808354040283529160200191611881565b820191906000526020600020905b81548152906001019060200180831161186457829003601f168201915b5050505050905090565b611893611ffe565b73ffffffffffffffffffffffffffffffffffffffff166118b16117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613f72565b60405180910390fd5b7f0000000000000000000000008af88063bdd0cdd2ae1e666147bbebb676e4482c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90614374565b60405180910390fd5b6119a08282612e99565b5050565b600080600160006119b3611ffe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790614406565b60405180910390fd5b611a84611a7b611ffe565b85858403612006565b600191505092915050565b6000611aa3611a9c611ffe565b84846121d1565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611b0e611ffe565b73ffffffffffffffffffffffffffffffffffffffff16611b2c6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990613f72565b60405180910390fd5b603c82611b8f9190614426565b63ffffffff1660158190555082601660006101000a81548160ff0219169083151502179055504260148190555080601660016101000a81548160ff021916908315150217905550505050565b611be3611ffe565b73ffffffffffffffffffffffffffffffffffffffff16611c016117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e90613f72565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cf491906138ab565b60405180910390a25050565b60085481565b6000611d10611ffe565b73ffffffffffffffffffffffffffffffffffffffff16611d2e6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b90613f72565b60405180910390fd5b620186a06001611d92610d55565b611d9c9190614139565b611da691906142d1565b821015611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf906144d6565b60405180910390fd5b6103e86005611df5610d55565b611dff9190614139565b611e0991906142d1565b821115611e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4290614568565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60155481565b600d5481565b611f02611ffe565b73ffffffffffffffffffffffffffffffffffffffff16611f206117c9565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90613f72565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd906145fa565b60405180910390fd5b611fef81612dd3565b50565b60105481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d9061468c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd9061471e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121c4919061397c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612241576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612238906147b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a890614842565b60405180910390fd5b60008114156122cb576122c683836000612f3a565b612dce565b600b60009054906101000a900460ff16156127d4576122e86117c9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561235657506123266117c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123c9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123e25750600660149054906101000a900460ff16155b156127d357600b60019054906101000a900460ff166124dc57601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061249c5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d2906148ae565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561257f5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612634576008548111156125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090614940565b60405180910390fd5b600a546125d5836113ab565b826125e091906140b4565b1115612621576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612618906149ac565b60405180910390fd5b601660019054906101000a9050506127d2565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126d75750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561272657600854811115612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890614a3e565b60405180910390fd5b6127d1565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127d057600a54612783836113ab565b8261278e91906140b4565b11156127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c6906149ac565b60405180910390fd5b5b5b5b5b5b60006127df306113ab565b9050600060095482101590508080156128045750600b60029054906101000a900460ff165b801561281d5750600660149054906101000a900460ff16155b80156128735750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128c95750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561291f5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612963576001600660146101000a81548160ff0219169083151502179055506129476131bb565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a195750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a2357600090505b60008115612dbe57601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8657506000600f54115b15612b12576064600f5486612a9b9190614139565b612aa591906142d1565b9050600f5460105482612ab89190614139565b612ac291906142d1565b60126000828254612ad391906140b4565b92505081905550600f5460115482612aeb9190614139565b612af591906142d1565b60136000828254612b0691906140b4565b92505081905550612da8565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612da757601660009054906101000a900460ff1615612da6576014544211612bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb490614aaa565b60405180910390fd5b601660019054906101000a900460ff1615612d91573073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612c5a57507f0000000000000000000000008af88063bdd0cdd2ae1e666147bbebb676e4482c73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca65750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15612d9057601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2e90614b16565b60405180910390fd5b6000601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b60155442612d9f91906140b4565b6014819055505b5b5b6000811115612dbd57612dbc873083612f3a565b5b5b612dc9878787612f3a565b505050505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa1906147b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561301a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301190614842565b60405180910390fd5b6130258383836133aa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a290614ba8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461313e91906140b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131a2919061397c565b60405180910390a36131b58484846133af565b50505050565b60006131c6306113ab565b905060006013546012546131da91906140b4565b90506000808314806131ec5750600082145b156131f9575050506133a8565b60146009546132089190614139565b83111561322157601460095461321e9190614139565b92505b6000600283601254866132349190614139565b61323e91906142d1565b61324891906142d1565b905060008185613258919061426e565b90506000479050613268826133b4565b60008147613276919061426e565b9050600086601354836132899190614139565b61329391906142d1565b9050600081836132a3919061426e565b9050600060128190555060006013819055506000861180156132c55750600081115b15613310576132d486826135f1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185828860405161330793929190614bc8565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161335690614c30565b60006040518083038185875af1925050503d8060008114613393576040519150601f19603f3d011682016040523d82523d6000602084013e613398565b606091505b5050809750505050505050505050505b565b505050565b505050565b6000600267ffffffffffffffff8111156133d1576133d0613a50565b5b6040519080825280602002602001820160405280156133ff5781602001602082028036833780820191505090505b50905030816000815181106134175761341661410a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e09190614c5a565b816001815181106134f4576134f361410a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613559307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612006565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135bb959493929190614d80565b600060405180830381600087803b1580156135d557600080fd5b505af11580156135e9573d6000803e3d6000fd5b505050505050565b61361c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612006565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016136a396959493929190614dda565b60606040518083038185885af11580156136c1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136e69190614e50565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561372757808201518184015260208101905061370c565b83811115613736576000848401525b50505050565b6000601f19601f8301169050919050565b6000613758826136ed565b61376281856136f8565b9350613772818560208601613709565b61377b8161373c565b840191505092915050565b600060208201905081810360008301526137a0818461374d565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137e7826137bc565b9050919050565b6137f7816137dc565b811461380257600080fd5b50565b600081359050613814816137ee565b92915050565b6000819050919050565b61382d8161381a565b811461383857600080fd5b50565b60008135905061384a81613824565b92915050565b60008060408385031215613867576138666137b2565b5b600061387585828601613805565b92505060206138868582860161383b565b9150509250929050565b60008115159050919050565b6138a581613890565b82525050565b60006020820190506138c0600083018461389c565b92915050565b6000602082840312156138dc576138db6137b2565b5b60006138ea84828501613805565b91505092915050565b6000819050919050565b600061391861391361390e846137bc565b6138f3565b6137bc565b9050919050565b600061392a826138fd565b9050919050565b600061393c8261391f565b9050919050565b61394c81613931565b82525050565b60006020820190506139676000830184613943565b92915050565b6139768161381a565b82525050565b6000602082019050613991600083018461396d565b92915050565b6000806000606084860312156139b0576139af6137b2565b5b60006139be86828701613805565b93505060206139cf86828701613805565b92505060406139e08682870161383b565b9150509250925092565b600060ff82169050919050565b613a00816139ea565b82525050565b6000602082019050613a1b60008301846139f7565b92915050565b613a2a816137dc565b82525050565b6000602082019050613a456000830184613a21565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a888261373c565b810181811067ffffffffffffffff82111715613aa757613aa6613a50565b5b80604052505050565b6000613aba6137a8565b9050613ac68282613a7f565b919050565b600067ffffffffffffffff821115613ae657613ae5613a50565b5b602082029050602081019050919050565b600080fd5b6000613b0f613b0a84613acb565b613ab0565b90508083825260208201905060208402830185811115613b3257613b31613af7565b5b835b81811015613b5b5780613b478882613805565b845260208401935050602081019050613b34565b5050509392505050565b600082601f830112613b7a57613b79613a4b565b5b8135613b8a848260208601613afc565b91505092915050565b600067ffffffffffffffff821115613bae57613bad613a50565b5b602082029050602081019050919050565b6000613bd2613bcd84613b93565b613ab0565b90508083825260208201905060208402830185811115613bf557613bf4613af7565b5b835b81811015613c1e5780613c0a888261383b565b845260208401935050602081019050613bf7565b5050509392505050565b600082601f830112613c3d57613c3c613a4b565b5b8135613c4d848260208601613bbf565b91505092915050565b613c5f81613890565b8114613c6a57600080fd5b50565b600081359050613c7c81613c56565b92915050565b600080600060608486031215613c9b57613c9a6137b2565b5b600084013567ffffffffffffffff811115613cb957613cb86137b7565b5b613cc586828701613b65565b935050602084013567ffffffffffffffff811115613ce657613ce56137b7565b5b613cf286828701613c28565b9250506040613d0386828701613c6d565b9150509250925092565b600060208284031215613d2357613d226137b2565b5b600082013567ffffffffffffffff811115613d4157613d406137b7565b5b613d4d84828501613b65565b91505092915050565b60008060008060808587031215613d7057613d6f6137b2565b5b6000613d7e8782880161383b565b9450506020613d8f8782880161383b565b9350506040613da08782880161383b565b9250506060613db18782880161383b565b91505092959194509250565b600060208284031215613dd357613dd26137b2565b5b6000613de184828501613c6d565b91505092915050565b60008060408385031215613e0157613e006137b2565b5b6000613e0f85828601613805565b9250506020613e2085828601613c6d565b9150509250929050565b600063ffffffff82169050919050565b613e4381613e2a565b8114613e4e57600080fd5b50565b600081359050613e6081613e3a565b92915050565b600080600060608486031215613e7f57613e7e6137b2565b5b6000613e8d86828701613c6d565b9350506020613e9e86828701613e51565b9250506040613eaf86828701613c6d565b9150509250925092565b600060208284031215613ecf57613ece6137b2565b5b6000613edd8482850161383b565b91505092915050565b60008060408385031215613efd57613efc6137b2565b5b6000613f0b85828601613805565b9250506020613f1c85828601613805565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f5c6020836136f8565b9150613f6782613f26565b602082019050919050565b60006020820190508181036000830152613f8b81613f4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613fd957607f821691505b60208210811415613fed57613fec613f92565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061404f6028836136f8565b915061405a82613ff3565b604082019050919050565b6000602082019050818103600083015261407e81614042565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140bf8261381a565b91506140ca8361381a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140ff576140fe614085565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006141448261381a565b915061414f8361381a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561418857614187614085565b5b828202905092915050565b600061419e8261381a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141d1576141d0614085565b5b600182019050919050565b7f546f74616c20726f756e6474726970206d757374206265206c6573732074686160008201527f6e20333000000000000000000000000000000000000000000000000000000000602082015250565b60006142386024836136f8565b9150614243826141dc565b604082019050919050565b600060208201905081810360008301526142678161422b565b9050919050565b60006142798261381a565b91506142848361381a565b92508282101561429757614296614085565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142dc8261381a565b91506142e78361381a565b9250826142f7576142f66142a2565b5b828204905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061435e6039836136f8565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006143f06025836136f8565b91506143fb82614394565b604082019050919050565b6000602082019050818103600083015261441f816143e3565b9050919050565b600061443182613e2a565b915061443c83613e2a565b92508163ffffffff048311821515161561445957614458614085565b5b828202905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144c06035836136f8565b91506144cb82614464565b604082019050919050565b600060208201905081810360008301526144ef816144b3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006145526034836136f8565b915061455d826144f6565b604082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145e46026836136f8565b91506145ef82614588565b604082019050919050565b60006020820190508181036000830152614613816145d7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146766024836136f8565b91506146818261461a565b604082019050919050565b600060208201905081810360008301526146a581614669565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147086022836136f8565b9150614713826146ac565b604082019050919050565b60006020820190508181036000830152614737816146fb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061479a6025836136f8565b91506147a58261473e565b604082019050919050565b600060208201905081810360008301526147c98161478d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061482c6023836136f8565b9150614837826147d0565b604082019050919050565b6000602082019050818103600083015261485b8161481f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148986016836136f8565b91506148a382614862565b602082019050919050565b600060208201905081810360008301526148c78161488b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061492a6035836136f8565b9150614935826148ce565b604082019050919050565b600060208201905081810360008301526149598161491d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149966013836136f8565b91506149a182614960565b602082019050919050565b600060208201905081810360008301526149c581614989565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a286036836136f8565b9150614a33826149cc565b604082019050919050565b60006020820190508181036000830152614a5781614a1b565b9050919050565b7f7761697400000000000000000000000000000000000000000000000000000000600082015250565b6000614a946004836136f8565b9150614a9f82614a5e565b602082019050919050565b60006020820190508181036000830152614ac381614a87565b9050919050565b7f57686974656c6973742070686173650000000000000000000000000000000000600082015250565b6000614b00600f836136f8565b9150614b0b82614aca565b602082019050919050565b60006020820190508181036000830152614b2f81614af3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b926026836136f8565b9150614b9d82614b36565b604082019050919050565b60006020820190508181036000830152614bc181614b85565b9050919050565b6000606082019050614bdd600083018661396d565b614bea602083018561396d565b614bf7604083018461396d565b949350505050565b600081905092915050565b50565b6000614c1a600083614bff565b9150614c2582614c0a565b600082019050919050565b6000614c3b82614c0d565b9150819050919050565b600081519050614c54816137ee565b92915050565b600060208284031215614c7057614c6f6137b2565b5b6000614c7e84828501614c45565b91505092915050565b6000819050919050565b6000614cac614ca7614ca284614c87565b6138f3565b61381a565b9050919050565b614cbc81614c91565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614cf7816137dc565b82525050565b6000614d098383614cee565b60208301905092915050565b6000602082019050919050565b6000614d2d82614cc2565b614d378185614ccd565b9350614d4283614cde565b8060005b83811015614d73578151614d5a8882614cfd565b9750614d6583614d15565b925050600181019050614d46565b5085935050505092915050565b600060a082019050614d95600083018861396d565b614da26020830187614cb3565b8181036040830152614db48186614d22565b9050614dc36060830185613a21565b614dd0608083018461396d565b9695505050505050565b600060c082019050614def6000830189613a21565b614dfc602083018861396d565b614e096040830187614cb3565b614e166060830186614cb3565b614e236080830185613a21565b614e3060a083018461396d565b979650505050505050565b600081519050614e4a81613824565b92915050565b600080600060608486031215614e6957614e686137b2565b5b6000614e7786828701614e3b565b9350506020614e8886828701614e3b565b9250506040614e9986828701614e3b565b915050925092509256fea2646970667358221220612b770456b2962ecbb5c44b36315121ae2c03d9131eeba46fa741ccdc2e1de264736f6c634300080a0033

Deployed Bytecode Sourcemap

12367:14019:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16097:81;;;;;;;;;;;;;:::i;:::-;;2721:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3642:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13425:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12411:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3049:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3819:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2941:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4319:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12469:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12696:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13033:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25764:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13154:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18495:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25555:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13222:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12923:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12776;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16186:550;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3165:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;850:103;;;;;;;;;;;;;:::i;:::-;;17705:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16745:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17442:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12884:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25352:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15876:130;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13070:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;627:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12996:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2829:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17987:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4542:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3300:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12546:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13760:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12736:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26075:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17797:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12581:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16936:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12813:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3483:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12623:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13188:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12847:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;961:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12958:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12663:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16097:81;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16166:4:::1;16150:13;;:20;;;;;;;;;;;;;;;;;;16097:81::o:0;2721:100::-;2775:13;2808:5;2801:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2721:100;:::o;3642:169::-;3725:4;3742:39;3751:12;:10;:12::i;:::-;3765:7;3774:6;3742:8;:39::i;:::-;3799:4;3792:11;;3642:169;;;;:::o;13425:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12411:51::-;;;:::o;3049:108::-;3110:7;3137:12;;3130:19;;3049:108;:::o;3819:492::-;3959:4;3976:36;3986:6;3994:9;4005:6;3976:9;:36::i;:::-;4025:24;4052:11;:19;4064:6;4052:19;;;;;;;;;;;;;;;:33;4072:12;:10;:12::i;:::-;4052:33;;;;;;;;;;;;;;;;4025:60;;4124:6;4104:16;:26;;4096:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4211:57;4220:6;4228:12;:10;:12::i;:::-;4261:6;4242:16;:25;4211:8;:57::i;:::-;4299:4;4292:11;;;3819:492;;;;;:::o;2941:100::-;2999:5;3024:9;;;;;;;;;;;3017:16;;2941:100;:::o;4319:215::-;4407:4;4424:80;4433:12;:10;:12::i;:::-;4447:7;4493:10;4456:11;:25;4468:12;:10;:12::i;:::-;4456:25;;;;;;;;;;;;;;;:34;4482:7;4456:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4424:8;:80::i;:::-;4522:4;4515:11;;4319:215;;;;:::o;12469:38::-;;;:::o;12696:33::-;;;;;;;;;;;;;:::o;13033:30::-;;;;:::o;25764:303::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25884:6:::1;25879:181;25900:6;:13;25896:1;:17;25879:181;;;25963:7;25935:14;:25;25950:6;25957:1;25950:9;;;;;;;;:::i;:::-;;;;;;;;25935:25;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;26039:5;26045:1;26039:8;;;;;;;;:::i;:::-;;;;;;;;26014:22;:33;;;;:::i;:::-;25985:15;:26;26001:6;26008:1;26001:9;;;;;;;;:::i;:::-;;;;;;;;25985:26;;;;;;;;;;;;;;;:62;;;;25915:3;;;;;:::i;:::-;;;;25879:181;;;;25764:303:::0;;;:::o;13154:26::-;;;;:::o;18495:126::-;18561:4;18585:19;:28;18605:7;18585:28;;;;;;;;;;;;;;;;;;;;;;;;;18578:35;;18495:126;;;:::o;25555:201::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25647:6:::1;25642:107;25663:9;:16;25659:1;:20;25642:107;;;25732:5;25701:14;:28;25716:9;25726:1;25716:12;;;;;;;;:::i;:::-;;;;;;;;25701:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;25681:3;;;;;:::i;:::-;;;;25642:107;;;;25555:201:::0;:::o;13222:37::-;;;;;;;;;;;;;:::o;12923:28::-;;;;:::o;12776:::-;;;;;;;;;;;;;:::o;16186:550::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16357:16:::1;16339:15;:34;;;;16402:16;16384:15;:34;;;;16462:15;;16444;;:33;;;;:::i;:::-;16429:12;:48;;;;16509:17;16490:16;:36;;;;16556:17;16537:16;:36;;;;16619:16;;16600;;:35;;;;:::i;:::-;16584:13;:51;;;;16685:2;16669:13;;16654:12;;:28;;;;:::i;:::-;:33;16646:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;16186:550:::0;;;;:::o;3165:127::-;3239:7;3266:9;:18;3276:7;3266:18;;;;;;;;;;;;;;;;3259:25;;3165:127;;;:::o;850:103::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;915:30:::1;942:1;915:18;:30::i;:::-;850:103::o:0;17705:84::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17779:2:::1;17768:8;;:13;;;;;;;;;;;;;;;;;;17705:84:::0;:::o;16745:121::-;16797:4;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16831:5:::1;16814:14;;:22;;;;;;;;;;;;;;;;;;16854:4;16847:11;;16745:121:::0;:::o;17442:167::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17597:4:::1;17555:31;:39;17587:6;17555:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;17442:167:::0;;:::o;12884:30::-;;;;:::o;25352:195::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25439:6:::1;25434:106;25455:9;:16;25451:1;:20;25434:106;;;25524:4;25493:14;:28;25508:9;25518:1;25508:12;;;;;;;;:::i;:::-;;;;;;;;25493:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25473:3;;;;;:::i;:::-;;;;25434:106;;;;25352:195:::0;:::o;15876:130::-;15926:7;15988:9;15968:15;15954:11;;:29;;;;:::i;:::-;15953:45;;;;:::i;:::-;15946:52;;15876:130;:::o;13070:30::-;;;;:::o;627:87::-;673:7;700:6;;;;;;;;;;;693:13;;627:87;:::o;12996:31::-;;;;:::o;2829:104::-;2885:13;2918:7;2911:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2829:104;:::o;17987:304::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18131:13:::1;18123:21;;:4;:21;;;;18101:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;18242:41;18271:4;18277:5;18242:28;:41::i;:::-;17987:304:::0;;:::o;4542:413::-;4635:4;4652:24;4679:11;:25;4691:12;:10;:12::i;:::-;4679:25;;;;;;;;;;;;;;;:34;4705:7;4679:34;;;;;;;;;;;;;;;;4652:61;;4752:15;4732:16;:35;;4724:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4845:67;4854:12;:10;:12::i;:::-;4868:7;4896:15;4877:16;:34;4845:8;:67::i;:::-;4943:4;4936:11;;;4542:413;;;;:::o;3300:175::-;3386:4;3403:42;3413:12;:10;:12::i;:::-;3427:9;3438:6;3403:9;:42::i;:::-;3463:4;3456:11;;3300:175;;;;:::o;12546:26::-;;;;;;;;;;;;;:::o;13760:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;12736:33::-;;;;;;;;;;;;;:::o;26075:306::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26234:9:::1;26213:18;:30;;;;:::i;:::-;26199:44;;:11;:44;;;;26276:7;26255:18;;:28;;;;;;;;;;;;;;;;;;26309:15;26295:11;:29;;;;26355:17;26336:16;;:36;;;;;;;;;;;;;;;;;;26075:306:::0;;;:::o;17797:182::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17913:8:::1;17882:19;:28;17902:7;17882:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17953:7;17937:34;;;17962:8;17937:34;;;;;;:::i;:::-;;;;;;;;17797:182:::0;;:::o;12581:35::-;;;;:::o;16936:497::-;17044:4;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17123:6:::1;17118:1;17102:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17101:28;;;;:::i;:::-;17088:9;:41;;17066:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;17278:4;17273:1;17257:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17256:26;;;;:::i;:::-;17243:9;:39;;17221:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;17394:9;17373:18;:30;;;;17421:4;17414:11;;16936:497:::0;;;:::o;12813:27::-;;;;:::o;3483:151::-;3572:7;3599:11;:18;3611:5;3599:18;;;;;;;;;;;;;;;:27;3618:7;3599:27;;;;;;;;;;;;;;;;3592:34;;3483:151;;;;:::o;12623:33::-;;;;:::o;13188:26::-;;;;:::o;12847:30::-;;;;:::o;961:201::-;773:12;:10;:12::i;:::-;762:23;;:7;:5;:7::i;:::-;:23;;;754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1070:1:::1;1050:22;;:8;:22;;;;1042:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1126:28;1145:8;1126:18;:28::i;:::-;961:201:::0;:::o;12958:31::-;;;;:::o;12663:24::-;;;;:::o;173:98::-;226:7;253:10;246:17;;173:98;:::o;6710:380::-;6863:1;6846:19;;:5;:19;;;;6838:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6944:1;6925:21;;:7;:21;;;;6917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7028:6;6998:11;:18;7010:5;6998:18;;;;;;;;;;;;;;;:27;7017:7;6998:27;;;;;;;;;;;;;;;:36;;;;7066:7;7050:32;;7059:5;7050:32;;;7075:6;7050:32;;;;;;:::i;:::-;;;;;;;;6710:380;;;:::o;18629:4217::-;18777:1;18761:18;;:4;:18;;;;18753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18854:1;18840:16;;:2;:16;;;;18832:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18923:1;18913:6;:11;18909:93;;;18941:28;18957:4;18963:2;18967:1;18941:15;:28::i;:::-;18984:7;;18909:93;19018:14;;;;;;;;;;;19014:1761;;;19079:7;:5;:7::i;:::-;19071:15;;:4;:15;;;;:49;;;;;19113:7;:5;:7::i;:::-;19107:13;;:2;:13;;;;19071:49;:86;;;;;19155:1;19141:16;;:2;:16;;;;19071:86;:128;;;;;19192:6;19178:21;;:2;:21;;;;19071:128;:158;;;;;19221:8;;;;;;;;;;;19220:9;19071:158;19049:1715;;;19269:13;;;;;;;;;;;19264:223;;19341:19;:25;19361:4;19341:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;19370:19;:23;19390:2;19370:23;;;;;;;;;;;;;;;;;;;;;;;;;19341:52;19307:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;19264:223;19561:25;:31;19587:4;19561:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;19618:31;:35;19650:2;19618:35;;;;;;;;;;;;;;;;;;;;;;;;;19617:36;19561:92;19535:1214;;;19740:20;;19730:6;:30;;19696:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;19948:9;;19931:13;19941:2;19931:9;:13::i;:::-;19922:6;:22;;;;:::i;:::-;:35;;19888:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20054:16;;;;;;;;;;19535:1214;;;20193:25;:29;20219:2;20193:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;20248:31;:37;20280:4;20248:37;;;;;;;;;;;;;;;;;;;;;;;;;20247:38;20193:92;20167:582;;;20372:20;;20362:6;:30;;20328:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;20167:582;;;20529:31;:35;20561:2;20529:35;;;;;;;;;;;;;;;;;;;;;;;;;20524:225;;20649:9;;20632:13;20642:2;20632:9;:13::i;:::-;20623:6;:22;;;;:::i;:::-;:35;;20589:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;20524:225;20167:582;19535:1214;19049:1715;19014:1761;20787:28;20818:24;20836:4;20818:9;:24::i;:::-;20787:55;;20855:12;20894:18;;20870:20;:42;;20855:57;;20943:7;:32;;;;;20967:8;;;;;;;;;;;20943:32;:58;;;;;20993:8;;;;;;;;;;;20992:9;20943:58;:107;;;;;21019:25;:31;21045:4;21019:31;;;;;;;;;;;;;;;;;;;;;;;;;21018:32;20943:107;:150;;;;;21068:19;:25;21088:4;21068:25;;;;;;;;;;;;;;;;;;;;;;;;;21067:26;20943:150;:191;;;;;21111:19;:23;21131:2;21111:23;;;;;;;;;;;;;;;;;;;;;;;;;21110:24;20943:191;20925:325;;;21172:4;21161:8;;:15;;;;;;;;;;;;;;;;;;21193:12;:10;:12::i;:::-;21233:5;21222:8;;:16;;;;;;;;;;;;;;;;;;20925:325;21262:12;21278:8;;;;;;;;;;;21277:9;21262:24;;21388:19;:25;21408:4;21388:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21417:19;:23;21437:2;21417:23;;;;;;;;;;;;;;;;;;;;;;;;;21388:52;21384:100;;;21467:5;21457:15;;21384:100;21496:12;21601:7;21597:1196;;;21653:25;:29;21679:2;21653:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;21702:1;21686:13;;:17;21653:50;21649:991;;;21756:3;21740:13;;21731:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;21724:35;;21825:13;;21805:16;;21798:4;:23;;;;:::i;:::-;21797:41;;;;:::i;:::-;21778:15;;:60;;;;;;;:::i;:::-;;;;;;;;21904:13;;21884:16;;21877:4;:23;;;;:::i;:::-;21876:41;;;;:::i;:::-;21857:15;;:60;;;;;;;:::i;:::-;;;;;;;;21649:991;;;21995:25;:31;22021:4;21995:31;;;;;;;;;;;;;;;;;;;;;;;;;21991:649;;;22050:18;;;;;;;;;;;22047:578;;;22119:11;;22101:15;:29;22093:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22165:16;;;;;;;;;;;22162:334;;;22228:4;22214:19;;:2;:19;;;;:42;;;;;22243:13;22237:19;;:2;:19;;;;22214:42;:94;;;;;22266:42;22260:48;;:2;:48;;;;22214:94;22210:263;;;22349:14;:18;22364:2;22349:18;;;;;;;;;;;;;;;;;;;;;;;;;22341:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22439:5;22418:14;:18;22433:2;22418:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;22210:263;22162:334;22572:11;;22554:15;:29;;;;:::i;:::-;22540:11;:43;;;;22047:578;21991:649;21649:991;22668:1;22661:4;:8;22657:91;;;22690:42;22706:4;22720;22727;22690:15;:42::i;:::-;22657:91;21597:1196;22805:33;22821:4;22827:2;22831:6;22805:15;:33::i;:::-;18742:4104;;;;18629:4217;;;;:::o;1168:191::-;1242:16;1261:6;;;;;;;;;;;1242:25;;1287:8;1278:6;;:17;;;;;;;;;;;;;;;;;;1342:8;1311:40;;1332:8;1311:40;;;;;;;;;;;;1231:128;1168:191;:::o;18299:188::-;18416:5;18382:25;:31;18408:4;18382:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18473:5;18439:40;;18467:4;18439:40;;;;;;;;;;;;18299:188;;:::o;4963:733::-;5121:1;5103:20;;:6;:20;;;;5095:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5205:1;5184:23;;:9;:23;;;;5176:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5260:47;5281:6;5289:9;5300:6;5260:20;:47::i;:::-;5320:21;5344:9;:17;5354:6;5344:17;;;;;;;;;;;;;;;;5320:41;;5397:6;5380:13;:23;;5372:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5518:6;5502:13;:22;5482:9;:17;5492:6;5482:17;;;;;;;;;;;;;;;:42;;;;5570:6;5546:9;:20;5556:9;5546:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5611:9;5594:35;;5603:6;5594:35;;;5622:6;5594:35;;;;;;:::i;:::-;;;;;;;;5642:46;5662:6;5670:9;5681:6;5642:19;:46::i;:::-;5084:612;4963:733;;;:::o;23883:1461::-;23924:23;23950:24;23968:4;23950:9;:24::i;:::-;23924:50;;23985:25;24031:15;;24013;;:33;;;;:::i;:::-;23985:61;;24057:12;24105:1;24086:15;:20;:46;;;;24131:1;24110:17;:22;24086:46;24082:85;;;24149:7;;;;;24082:85;24222:2;24201:18;;:23;;;;:::i;:::-;24183:15;:41;24179:115;;;24280:2;24259:18;;:23;;;;:::i;:::-;24241:41;;24179:115;24355:26;24442:1;24422:17;24403:15;;24385;:33;;;;:::i;:::-;24384:55;;;;:::i;:::-;:59;;;;:::i;:::-;24355:88;;24454:26;24501:18;24483:15;:36;;;;:::i;:::-;24454:65;;24532:25;24560:21;24532:49;;24594:30;24605:18;24594:10;:30::i;:::-;24637:18;24682:17;24658:21;:41;;;;:::i;:::-;24637:62;;24713:20;24767:17;24749:15;;24736:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;24713:71;;24797:20;24833:12;24820:10;:25;;;;:::i;:::-;24797:48;;24876:1;24858:15;:19;;;;24906:1;24888:15;:19;;;;24945:1;24924:18;:22;:42;;;;;24965:1;24950:12;:16;24924:42;24920:275;;;24983:46;24996:18;25016:12;24983;:46::i;:::-;25049:134;25082:18;25119:12;25150:18;25049:134;;;;;;;;:::i;:::-;;;;;;;;24920:275;25285:11;;;;;;;;;;;25277:25;;25310:21;25277:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25263:73;;;;;23913:1431;;;;;;;;;23883:1461;:::o;7098:125::-;;;;:::o;7231:124::-;;;;:::o;22854:496::-;22914:21;22952:1;22938:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22914:40;;22983:4;22965;22970:1;22965:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23009:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22999:4;23004:1;22999:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;23044:62;23061:4;23076:15;23094:11;23044:8;:62::i;:::-;23145:15;:66;;;23226:11;23252:1;23269:4;23296;23316:15;23145:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22903:447;22854:496;:::o;23358:517::-;23506:62;23523:4;23538:15;23556:11;23506:8;:62::i;:::-;23611:15;:31;;;23650:9;23683:4;23703:11;23729:1;23772;23815:11;;;;;;;;;;;23841:15;23611:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23358:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:118::-;6301:24;6319:5;6301:24;:::i;:::-;6296:3;6289:37;6214:118;;:::o;6338:222::-;6431:4;6469:2;6458:9;6454:18;6446:26;;6482:71;6550:1;6539:9;6535:17;6526:6;6482:71;:::i;:::-;6338:222;;;;:::o;6566:117::-;6675:1;6672;6665:12;6689:180;6737:77;6734:1;6727:88;6834:4;6831:1;6824:15;6858:4;6855:1;6848:15;6875:281;6958:27;6980:4;6958:27;:::i;:::-;6950:6;6946:40;7088:6;7076:10;7073:22;7052:18;7040:10;7037:34;7034:62;7031:88;;;7099:18;;:::i;:::-;7031:88;7139:10;7135:2;7128:22;6918:238;6875:281;;:::o;7162:129::-;7196:6;7223:20;;:::i;:::-;7213:30;;7252:33;7280:4;7272:6;7252:33;:::i;:::-;7162:129;;;:::o;7297:311::-;7374:4;7464:18;7456:6;7453:30;7450:56;;;7486:18;;:::i;:::-;7450:56;7536:4;7528:6;7524:17;7516:25;;7596:4;7590;7586:15;7578:23;;7297:311;;;:::o;7614:117::-;7723:1;7720;7713:12;7754:710;7850:5;7875:81;7891:64;7948:6;7891:64;:::i;:::-;7875:81;:::i;:::-;7866:90;;7976:5;8005:6;7998:5;7991:21;8039:4;8032:5;8028:16;8021:23;;8092:4;8084:6;8080:17;8072:6;8068:30;8121:3;8113:6;8110:15;8107:122;;;8140:79;;:::i;:::-;8107:122;8255:6;8238:220;8272:6;8267:3;8264:15;8238:220;;;8347:3;8376:37;8409:3;8397:10;8376:37;:::i;:::-;8371:3;8364:50;8443:4;8438:3;8434:14;8427:21;;8314:144;8298:4;8293:3;8289:14;8282:21;;8238:220;;;8242:21;7856:608;;7754:710;;;;;:::o;8487:370::-;8558:5;8607:3;8600:4;8592:6;8588:17;8584:27;8574:122;;8615:79;;:::i;:::-;8574:122;8732:6;8719:20;8757:94;8847:3;8839:6;8832:4;8824:6;8820:17;8757:94;:::i;:::-;8748:103;;8564:293;8487:370;;;;:::o;8863:311::-;8940:4;9030:18;9022:6;9019:30;9016:56;;;9052:18;;:::i;:::-;9016:56;9102:4;9094:6;9090:17;9082:25;;9162:4;9156;9152:15;9144:23;;8863:311;;;:::o;9197:710::-;9293:5;9318:81;9334:64;9391:6;9334:64;:::i;:::-;9318:81;:::i;:::-;9309:90;;9419:5;9448:6;9441:5;9434:21;9482:4;9475:5;9471:16;9464:23;;9535:4;9527:6;9523:17;9515:6;9511:30;9564:3;9556:6;9553:15;9550:122;;;9583:79;;:::i;:::-;9550:122;9698:6;9681:220;9715:6;9710:3;9707:15;9681:220;;;9790:3;9819:37;9852:3;9840:10;9819:37;:::i;:::-;9814:3;9807:50;9886:4;9881:3;9877:14;9870:21;;9757:144;9741:4;9736:3;9732:14;9725:21;;9681:220;;;9685:21;9299:608;;9197:710;;;;;:::o;9930:370::-;10001:5;10050:3;10043:4;10035:6;10031:17;10027:27;10017:122;;10058:79;;:::i;:::-;10017:122;10175:6;10162:20;10200:94;10290:3;10282:6;10275:4;10267:6;10263:17;10200:94;:::i;:::-;10191:103;;10007:293;9930:370;;;;:::o;10306:116::-;10376:21;10391:5;10376:21;:::i;:::-;10369:5;10366:32;10356:60;;10412:1;10409;10402:12;10356:60;10306:116;:::o;10428:133::-;10471:5;10509:6;10496:20;10487:29;;10525:30;10549:5;10525:30;:::i;:::-;10428:133;;;;:::o;10567:1033::-;10691:6;10699;10707;10756:2;10744:9;10735:7;10731:23;10727:32;10724:119;;;10762:79;;:::i;:::-;10724:119;10910:1;10899:9;10895:17;10882:31;10940:18;10932:6;10929:30;10926:117;;;10962:79;;:::i;:::-;10926:117;11067:78;11137:7;11128:6;11117:9;11113:22;11067:78;:::i;:::-;11057:88;;10853:302;11222:2;11211:9;11207:18;11194:32;11253:18;11245:6;11242:30;11239:117;;;11275:79;;:::i;:::-;11239:117;11380:78;11450:7;11441:6;11430:9;11426:22;11380:78;:::i;:::-;11370:88;;11165:303;11507:2;11533:50;11575:7;11566:6;11555:9;11551:22;11533:50;:::i;:::-;11523:60;;11478:115;10567:1033;;;;;:::o;11606:539::-;11690:6;11739:2;11727:9;11718:7;11714:23;11710:32;11707:119;;;11745:79;;:::i;:::-;11707:119;11893:1;11882:9;11878:17;11865:31;11923:18;11915:6;11912:30;11909:117;;;11945:79;;:::i;:::-;11909:117;12050:78;12120:7;12111:6;12100:9;12096:22;12050:78;:::i;:::-;12040:88;;11836:302;11606:539;;;;:::o;12151:765::-;12237:6;12245;12253;12261;12310:3;12298:9;12289:7;12285:23;12281:33;12278:120;;;12317:79;;:::i;:::-;12278:120;12437:1;12462:53;12507:7;12498:6;12487:9;12483:22;12462:53;:::i;:::-;12452:63;;12408:117;12564:2;12590:53;12635:7;12626:6;12615:9;12611:22;12590:53;:::i;:::-;12580:63;;12535:118;12692:2;12718:53;12763:7;12754:6;12743:9;12739:22;12718:53;:::i;:::-;12708:63;;12663:118;12820:2;12846:53;12891:7;12882:6;12871:9;12867:22;12846:53;:::i;:::-;12836:63;;12791:118;12151:765;;;;;;;:::o;12922:323::-;12978:6;13027:2;13015:9;13006:7;13002:23;12998:32;12995:119;;;13033:79;;:::i;:::-;12995:119;13153:1;13178:50;13220:7;13211:6;13200:9;13196:22;13178:50;:::i;:::-;13168:60;;13124:114;12922:323;;;;:::o;13251:468::-;13316:6;13324;13373:2;13361:9;13352:7;13348:23;13344:32;13341:119;;;13379:79;;:::i;:::-;13341:119;13499:1;13524:53;13569:7;13560:6;13549:9;13545:22;13524:53;:::i;:::-;13514:63;;13470:117;13626:2;13652:50;13694:7;13685:6;13674:9;13670:22;13652:50;:::i;:::-;13642:60;;13597:115;13251:468;;;;;:::o;13725:93::-;13761:7;13801:10;13794:5;13790:22;13779:33;;13725:93;;;:::o;13824:120::-;13896:23;13913:5;13896:23;:::i;:::-;13889:5;13886:34;13876:62;;13934:1;13931;13924:12;13876:62;13824:120;:::o;13950:137::-;13995:5;14033:6;14020:20;14011:29;;14049:32;14075:5;14049:32;:::i;:::-;13950:137;;;;:::o;14093:605::-;14163:6;14171;14179;14228:2;14216:9;14207:7;14203:23;14199:32;14196:119;;;14234:79;;:::i;:::-;14196:119;14354:1;14379:50;14421:7;14412:6;14401:9;14397:22;14379:50;:::i;:::-;14369:60;;14325:114;14478:2;14504:52;14548:7;14539:6;14528:9;14524:22;14504:52;:::i;:::-;14494:62;;14449:117;14605:2;14631:50;14673:7;14664:6;14653:9;14649:22;14631:50;:::i;:::-;14621:60;;14576:115;14093:605;;;;;:::o;14704:329::-;14763:6;14812:2;14800:9;14791:7;14787:23;14783:32;14780:119;;;14818:79;;:::i;:::-;14780:119;14938:1;14963:53;15008:7;14999:6;14988:9;14984:22;14963:53;:::i;:::-;14953:63;;14909:117;14704:329;;;;:::o;15039:474::-;15107:6;15115;15164:2;15152:9;15143:7;15139:23;15135:32;15132:119;;;15170:79;;:::i;:::-;15132:119;15290:1;15315:53;15360:7;15351:6;15340:9;15336:22;15315:53;:::i;:::-;15305:63;;15261:117;15417:2;15443:53;15488:7;15479:6;15468:9;15464:22;15443:53;:::i;:::-;15433:63;;15388:118;15039:474;;;;;:::o;15519:182::-;15659:34;15655:1;15647:6;15643:14;15636:58;15519:182;:::o;15707:366::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15707:366;;;:::o;16079:419::-;16245:4;16283:2;16272:9;16268:18;16260:26;;16332:9;16326:4;16322:20;16318:1;16307:9;16303:17;16296:47;16360:131;16486:4;16360:131;:::i;:::-;16352:139;;16079:419;;;:::o;16504:180::-;16552:77;16549:1;16542:88;16649:4;16646:1;16639:15;16673:4;16670:1;16663:15;16690:320;16734:6;16771:1;16765:4;16761:12;16751:22;;16818:1;16812:4;16808:12;16839:18;16829:81;;16895:4;16887:6;16883:17;16873:27;;16829:81;16957:2;16949:6;16946:14;16926:18;16923:38;16920:84;;;16976:18;;:::i;:::-;16920:84;16741:269;16690:320;;;:::o;17016:227::-;17156:34;17152:1;17144:6;17140:14;17133:58;17225:10;17220:2;17212:6;17208:15;17201:35;17016:227;:::o;17249:366::-;17391:3;17412:67;17476:2;17471:3;17412:67;:::i;:::-;17405:74;;17488:93;17577:3;17488:93;:::i;:::-;17606:2;17601:3;17597:12;17590:19;;17249:366;;;:::o;17621:419::-;17787:4;17825:2;17814:9;17810:18;17802:26;;17874:9;17868:4;17864:20;17860:1;17849:9;17845:17;17838:47;17902:131;18028:4;17902:131;:::i;:::-;17894:139;;17621:419;;;:::o;18046:180::-;18094:77;18091:1;18084:88;18191:4;18188:1;18181:15;18215:4;18212:1;18205:15;18232:305;18272:3;18291:20;18309:1;18291:20;:::i;:::-;18286:25;;18325:20;18343:1;18325:20;:::i;:::-;18320:25;;18479:1;18411:66;18407:74;18404:1;18401:81;18398:107;;;18485:18;;:::i;:::-;18398:107;18529:1;18526;18522:9;18515:16;;18232:305;;;;:::o;18543:180::-;18591:77;18588:1;18581:88;18688:4;18685:1;18678:15;18712:4;18709:1;18702:15;18729:348;18769:7;18792:20;18810:1;18792:20;:::i;:::-;18787:25;;18826:20;18844:1;18826:20;:::i;:::-;18821:25;;19014:1;18946:66;18942:74;18939:1;18936:81;18931:1;18924:9;18917:17;18913:105;18910:131;;;19021:18;;:::i;:::-;18910:131;19069:1;19066;19062:9;19051:20;;18729:348;;;;:::o;19083:233::-;19122:3;19145:24;19163:5;19145:24;:::i;:::-;19136:33;;19191:66;19184:5;19181:77;19178:103;;;19261:18;;:::i;:::-;19178:103;19308:1;19301:5;19297:13;19290:20;;19083:233;;;:::o;19322:223::-;19462:34;19458:1;19450:6;19446:14;19439:58;19531:6;19526:2;19518:6;19514:15;19507:31;19322:223;:::o;19551:366::-;19693:3;19714:67;19778:2;19773:3;19714:67;:::i;:::-;19707:74;;19790:93;19879:3;19790:93;:::i;:::-;19908:2;19903:3;19899:12;19892:19;;19551:366;;;:::o;19923:419::-;20089:4;20127:2;20116:9;20112:18;20104:26;;20176:9;20170:4;20166:20;20162:1;20151:9;20147:17;20140:47;20204:131;20330:4;20204:131;:::i;:::-;20196:139;;19923:419;;;:::o;20348:191::-;20388:4;20408:20;20426:1;20408:20;:::i;:::-;20403:25;;20442:20;20460:1;20442:20;:::i;:::-;20437:25;;20481:1;20478;20475:8;20472:34;;;20486:18;;:::i;:::-;20472:34;20531:1;20528;20524:9;20516:17;;20348:191;;;;:::o;20545:180::-;20593:77;20590:1;20583:88;20690:4;20687:1;20680:15;20714:4;20711:1;20704:15;20731:185;20771:1;20788:20;20806:1;20788:20;:::i;:::-;20783:25;;20822:20;20840:1;20822:20;:::i;:::-;20817:25;;20861:1;20851:35;;20866:18;;:::i;:::-;20851:35;20908:1;20905;20901:9;20896:14;;20731:185;;;;:::o;20922:244::-;21062:34;21058:1;21050:6;21046:14;21039:58;21131:27;21126:2;21118:6;21114:15;21107:52;20922:244;:::o;21172:366::-;21314:3;21335:67;21399:2;21394:3;21335:67;:::i;:::-;21328:74;;21411:93;21500:3;21411:93;:::i;:::-;21529:2;21524:3;21520:12;21513:19;;21172:366;;;:::o;21544:419::-;21710:4;21748:2;21737:9;21733:18;21725:26;;21797:9;21791:4;21787:20;21783:1;21772:9;21768:17;21761:47;21825:131;21951:4;21825:131;:::i;:::-;21817:139;;21544:419;;;:::o;21969:224::-;22109:34;22105:1;22097:6;22093:14;22086:58;22178:7;22173:2;22165:6;22161:15;22154:32;21969:224;:::o;22199:366::-;22341:3;22362:67;22426:2;22421:3;22362:67;:::i;:::-;22355:74;;22438:93;22527:3;22438:93;:::i;:::-;22556:2;22551:3;22547:12;22540:19;;22199:366;;;:::o;22571:419::-;22737:4;22775:2;22764:9;22760:18;22752:26;;22824:9;22818:4;22814:20;22810:1;22799:9;22795:17;22788:47;22852:131;22978:4;22852:131;:::i;:::-;22844:139;;22571:419;;;:::o;22996:289::-;23035:7;23058:19;23075:1;23058:19;:::i;:::-;23053:24;;23091:19;23108:1;23091:19;:::i;:::-;23086:24;;23222:1;23210:10;23206:18;23203:1;23200:25;23195:1;23188:9;23181:17;23177:49;23174:75;;;23229:18;;:::i;:::-;23174:75;23277:1;23274;23270:9;23259:20;;22996:289;;;;:::o;23291:240::-;23431:34;23427:1;23419:6;23415:14;23408:58;23500:23;23495:2;23487:6;23483:15;23476:48;23291:240;:::o;23537:366::-;23679:3;23700:67;23764:2;23759:3;23700:67;:::i;:::-;23693:74;;23776:93;23865:3;23776:93;:::i;:::-;23894:2;23889:3;23885:12;23878:19;;23537:366;;;:::o;23909:419::-;24075:4;24113:2;24102:9;24098:18;24090:26;;24162:9;24156:4;24152:20;24148:1;24137:9;24133:17;24126:47;24190:131;24316:4;24190:131;:::i;:::-;24182:139;;23909:419;;;:::o;24334:239::-;24474:34;24470:1;24462:6;24458:14;24451:58;24543:22;24538:2;24530:6;24526:15;24519:47;24334:239;:::o;24579:366::-;24721:3;24742:67;24806:2;24801:3;24742:67;:::i;:::-;24735:74;;24818:93;24907:3;24818:93;:::i;:::-;24936:2;24931:3;24927:12;24920:19;;24579:366;;;:::o;24951:419::-;25117:4;25155:2;25144:9;25140:18;25132:26;;25204:9;25198:4;25194:20;25190:1;25179:9;25175:17;25168:47;25232:131;25358:4;25232:131;:::i;:::-;25224:139;;24951:419;;;:::o;25376:225::-;25516:34;25512:1;25504:6;25500:14;25493:58;25585:8;25580:2;25572:6;25568:15;25561:33;25376:225;:::o;25607:366::-;25749:3;25770:67;25834:2;25829:3;25770:67;:::i;:::-;25763:74;;25846:93;25935:3;25846:93;:::i;:::-;25964:2;25959:3;25955:12;25948:19;;25607:366;;;:::o;25979:419::-;26145:4;26183:2;26172:9;26168:18;26160:26;;26232:9;26226:4;26222:20;26218:1;26207:9;26203:17;26196:47;26260:131;26386:4;26260:131;:::i;:::-;26252:139;;25979:419;;;:::o;26404:223::-;26544:34;26540:1;26532:6;26528:14;26521:58;26613:6;26608:2;26600:6;26596:15;26589:31;26404:223;:::o;26633:366::-;26775:3;26796:67;26860:2;26855:3;26796:67;:::i;:::-;26789:74;;26872:93;26961:3;26872:93;:::i;:::-;26990:2;26985:3;26981:12;26974:19;;26633:366;;;:::o;27005:419::-;27171:4;27209:2;27198:9;27194:18;27186:26;;27258:9;27252:4;27248:20;27244:1;27233:9;27229:17;27222:47;27286:131;27412:4;27286:131;:::i;:::-;27278:139;;27005:419;;;:::o;27430:221::-;27570:34;27566:1;27558:6;27554:14;27547:58;27639:4;27634:2;27626:6;27622:15;27615:29;27430:221;:::o;27657:366::-;27799:3;27820:67;27884:2;27879:3;27820:67;:::i;:::-;27813:74;;27896:93;27985:3;27896:93;:::i;:::-;28014:2;28009:3;28005:12;27998:19;;27657:366;;;:::o;28029:419::-;28195:4;28233:2;28222:9;28218:18;28210:26;;28282:9;28276:4;28272:20;28268:1;28257:9;28253:17;28246:47;28310:131;28436:4;28310:131;:::i;:::-;28302:139;;28029:419;;;:::o;28454:224::-;28594:34;28590:1;28582:6;28578:14;28571:58;28663:7;28658:2;28650:6;28646:15;28639:32;28454:224;:::o;28684:366::-;28826:3;28847:67;28911:2;28906:3;28847:67;:::i;:::-;28840:74;;28923:93;29012:3;28923:93;:::i;:::-;29041:2;29036:3;29032:12;29025:19;;28684:366;;;:::o;29056:419::-;29222:4;29260:2;29249:9;29245:18;29237:26;;29309:9;29303:4;29299:20;29295:1;29284:9;29280:17;29273:47;29337:131;29463:4;29337:131;:::i;:::-;29329:139;;29056:419;;;:::o;29481:222::-;29621:34;29617:1;29609:6;29605:14;29598:58;29690:5;29685:2;29677:6;29673:15;29666:30;29481:222;:::o;29709:366::-;29851:3;29872:67;29936:2;29931:3;29872:67;:::i;:::-;29865:74;;29948:93;30037:3;29948:93;:::i;:::-;30066:2;30061:3;30057:12;30050:19;;29709:366;;;:::o;30081:419::-;30247:4;30285:2;30274:9;30270:18;30262:26;;30334:9;30328:4;30324:20;30320:1;30309:9;30305:17;30298:47;30362:131;30488:4;30362:131;:::i;:::-;30354:139;;30081:419;;;:::o;30506:172::-;30646:24;30642:1;30634:6;30630:14;30623:48;30506:172;:::o;30684:366::-;30826:3;30847:67;30911:2;30906:3;30847:67;:::i;:::-;30840:74;;30923:93;31012:3;30923:93;:::i;:::-;31041:2;31036:3;31032:12;31025:19;;30684:366;;;:::o;31056:419::-;31222:4;31260:2;31249:9;31245:18;31237:26;;31309:9;31303:4;31299:20;31295:1;31284:9;31280:17;31273:47;31337:131;31463:4;31337:131;:::i;:::-;31329:139;;31056:419;;;:::o;31481:240::-;31621:34;31617:1;31609:6;31605:14;31598:58;31690:23;31685:2;31677:6;31673:15;31666:48;31481:240;:::o;31727:366::-;31869:3;31890:67;31954:2;31949:3;31890:67;:::i;:::-;31883:74;;31966:93;32055:3;31966:93;:::i;:::-;32084:2;32079:3;32075:12;32068:19;;31727:366;;;:::o;32099:419::-;32265:4;32303:2;32292:9;32288:18;32280:26;;32352:9;32346:4;32342:20;32338:1;32327:9;32323:17;32316:47;32380:131;32506:4;32380:131;:::i;:::-;32372:139;;32099:419;;;:::o;32524:169::-;32664:21;32660:1;32652:6;32648:14;32641:45;32524:169;:::o;32699:366::-;32841:3;32862:67;32926:2;32921:3;32862:67;:::i;:::-;32855:74;;32938:93;33027:3;32938:93;:::i;:::-;33056:2;33051:3;33047:12;33040:19;;32699:366;;;:::o;33071:419::-;33237:4;33275:2;33264:9;33260:18;33252:26;;33324:9;33318:4;33314:20;33310:1;33299:9;33295:17;33288:47;33352:131;33478:4;33352:131;:::i;:::-;33344:139;;33071:419;;;:::o;33496:241::-;33636:34;33632:1;33624:6;33620:14;33613:58;33705:24;33700:2;33692:6;33688:15;33681:49;33496:241;:::o;33743:366::-;33885:3;33906:67;33970:2;33965:3;33906:67;:::i;:::-;33899:74;;33982:93;34071:3;33982:93;:::i;:::-;34100:2;34095:3;34091:12;34084:19;;33743:366;;;:::o;34115:419::-;34281:4;34319:2;34308:9;34304:18;34296:26;;34368:9;34362:4;34358:20;34354:1;34343:9;34339:17;34332:47;34396:131;34522:4;34396:131;:::i;:::-;34388:139;;34115:419;;;:::o;34540:154::-;34680:6;34676:1;34668:6;34664:14;34657:30;34540:154;:::o;34700:365::-;34842:3;34863:66;34927:1;34922:3;34863:66;:::i;:::-;34856:73;;34938:93;35027:3;34938:93;:::i;:::-;35056:2;35051:3;35047:12;35040:19;;34700:365;;;:::o;35071:419::-;35237:4;35275:2;35264:9;35260:18;35252:26;;35324:9;35318:4;35314:20;35310:1;35299:9;35295:17;35288:47;35352:131;35478:4;35352:131;:::i;:::-;35344:139;;35071:419;;;:::o;35496:165::-;35636:17;35632:1;35624:6;35620:14;35613:41;35496:165;:::o;35667:366::-;35809:3;35830:67;35894:2;35889:3;35830:67;:::i;:::-;35823:74;;35906:93;35995:3;35906:93;:::i;:::-;36024:2;36019:3;36015:12;36008:19;;35667:366;;;:::o;36039:419::-;36205:4;36243:2;36232:9;36228:18;36220:26;;36292:9;36286:4;36282:20;36278:1;36267:9;36263:17;36256:47;36320:131;36446:4;36320:131;:::i;:::-;36312:139;;36039:419;;;:::o;36464:225::-;36604:34;36600:1;36592:6;36588:14;36581:58;36673:8;36668:2;36660:6;36656:15;36649:33;36464:225;:::o;36695:366::-;36837:3;36858:67;36922:2;36917:3;36858:67;:::i;:::-;36851:74;;36934:93;37023:3;36934:93;:::i;:::-;37052:2;37047:3;37043:12;37036:19;;36695:366;;;:::o;37067:419::-;37233:4;37271:2;37260:9;37256:18;37248:26;;37320:9;37314:4;37310:20;37306:1;37295:9;37291:17;37284:47;37348:131;37474:4;37348:131;:::i;:::-;37340:139;;37067:419;;;:::o;37492:442::-;37641:4;37679:2;37668:9;37664:18;37656:26;;37692:71;37760:1;37749:9;37745:17;37736:6;37692:71;:::i;:::-;37773:72;37841:2;37830:9;37826:18;37817:6;37773:72;:::i;:::-;37855;37923:2;37912:9;37908:18;37899:6;37855:72;:::i;:::-;37492:442;;;;;;:::o;37940:147::-;38041:11;38078:3;38063:18;;37940:147;;;;:::o;38093:114::-;;:::o;38213:398::-;38372:3;38393:83;38474:1;38469:3;38393:83;:::i;:::-;38386:90;;38485:93;38574:3;38485:93;:::i;:::-;38603:1;38598:3;38594:11;38587:18;;38213:398;;;:::o;38617:379::-;38801:3;38823:147;38966:3;38823:147;:::i;:::-;38816:154;;38987:3;38980:10;;38617:379;;;:::o;39002:143::-;39059:5;39090:6;39084:13;39075:22;;39106:33;39133:5;39106:33;:::i;:::-;39002:143;;;;:::o;39151:351::-;39221:6;39270:2;39258:9;39249:7;39245:23;39241:32;39238:119;;;39276:79;;:::i;:::-;39238:119;39396:1;39421:64;39477:7;39468:6;39457:9;39453:22;39421:64;:::i;:::-;39411:74;;39367:128;39151:351;;;;:::o;39508:85::-;39553:7;39582:5;39571:16;;39508:85;;;:::o;39599:158::-;39657:9;39690:61;39708:42;39717:32;39743:5;39717:32;:::i;:::-;39708:42;:::i;:::-;39690:61;:::i;:::-;39677:74;;39599:158;;;:::o;39763:147::-;39858:45;39897:5;39858:45;:::i;:::-;39853:3;39846:58;39763:147;;:::o;39916:114::-;39983:6;40017:5;40011:12;40001:22;;39916:114;;;:::o;40036:184::-;40135:11;40169:6;40164:3;40157:19;40209:4;40204:3;40200:14;40185:29;;40036:184;;;;:::o;40226:132::-;40293:4;40316:3;40308:11;;40346:4;40341:3;40337:14;40329:22;;40226:132;;;:::o;40364:108::-;40441:24;40459:5;40441:24;:::i;:::-;40436:3;40429:37;40364:108;;:::o;40478:179::-;40547:10;40568:46;40610:3;40602:6;40568:46;:::i;:::-;40646:4;40641:3;40637:14;40623:28;;40478:179;;;;:::o;40663:113::-;40733:4;40765;40760:3;40756:14;40748:22;;40663:113;;;:::o;40812:732::-;40931:3;40960:54;41008:5;40960:54;:::i;:::-;41030:86;41109:6;41104:3;41030:86;:::i;:::-;41023:93;;41140:56;41190:5;41140:56;:::i;:::-;41219:7;41250:1;41235:284;41260:6;41257:1;41254:13;41235:284;;;41336:6;41330:13;41363:63;41422:3;41407:13;41363:63;:::i;:::-;41356:70;;41449:60;41502:6;41449:60;:::i;:::-;41439:70;;41295:224;41282:1;41279;41275:9;41270:14;;41235:284;;;41239:14;41535:3;41528:10;;40936:608;;;40812:732;;;;:::o;41550:831::-;41813:4;41851:3;41840:9;41836:19;41828:27;;41865:71;41933:1;41922:9;41918:17;41909:6;41865:71;:::i;:::-;41946:80;42022:2;42011:9;42007:18;41998:6;41946:80;:::i;:::-;42073:9;42067:4;42063:20;42058:2;42047:9;42043:18;42036:48;42101:108;42204:4;42195:6;42101:108;:::i;:::-;42093:116;;42219:72;42287:2;42276:9;42272:18;42263:6;42219:72;:::i;:::-;42301:73;42369:3;42358:9;42354:19;42345:6;42301:73;:::i;:::-;41550:831;;;;;;;;:::o;42387:807::-;42636:4;42674:3;42663:9;42659:19;42651:27;;42688:71;42756:1;42745:9;42741:17;42732:6;42688:71;:::i;:::-;42769:72;42837:2;42826:9;42822:18;42813:6;42769:72;:::i;:::-;42851:80;42927:2;42916:9;42912:18;42903:6;42851:80;:::i;:::-;42941;43017:2;43006:9;43002:18;42993:6;42941:80;:::i;:::-;43031:73;43099:3;43088:9;43084:19;43075:6;43031:73;:::i;:::-;43114;43182:3;43171:9;43167:19;43158:6;43114:73;:::i;:::-;42387:807;;;;;;;;;:::o;43200:143::-;43257:5;43288:6;43282:13;43273:22;;43304:33;43331:5;43304:33;:::i;:::-;43200:143;;;;:::o;43349:663::-;43437:6;43445;43453;43502:2;43490:9;43481:7;43477:23;43473:32;43470:119;;;43508:79;;:::i;:::-;43470:119;43628:1;43653:64;43709:7;43700:6;43689:9;43685:22;43653:64;:::i;:::-;43643:74;;43599:128;43766:2;43792:64;43848:7;43839:6;43828:9;43824:22;43792:64;:::i;:::-;43782:74;;43737:129;43905:2;43931:64;43987:7;43978:6;43967:9;43963:22;43931:64;:::i;:::-;43921:74;;43876:129;43349:663;;;;;:::o

Swarm Source

ipfs://612b770456b2962ecbb5c44b36315121ae2c03d9131eeba46fa741ccdc2e1de2

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  ]

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.