ETH Price: $3,427.65 (-1.88%)
Gas: 6 Gwei

Contract

0x5fdabDCf6Ea55FfA171a4495c1E7D578529569ae
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve173277992023-05-24 8:15:11420 days ago1684916111IN
0x5fdabDCf...8529569ae
0 ETH0.0016638735.23448967
Approve172319502023-05-10 19:04:35434 days ago1683745475IN
0x5fdabDCf...8529569ae
0 ETH0.00497119105.27064738
Approve171873602023-05-04 12:39:35440 days ago1683203975IN
0x5fdabDCf...8529569ae
0 ETH0.0021168577.30526476
Approve171873592023-05-04 12:39:11440 days ago1683203951IN
0x5fdabDCf...8529569ae
0 ETH0.0036491177.17614429
Approve171350692023-04-27 4:12:35448 days ago1682568755IN
0x5fdabDCf...8529569ae
0 ETH0.0018070938.21877326
Approve169638732023-04-02 20:49:47472 days ago1680468587IN
0x5fdabDCf...8529569ae
0 ETH0.0008035517.120587
Approve169638292023-04-02 20:40:59472 days ago1680468059IN
0x5fdabDCf...8529569ae
0 ETH0.0008327917.74354013
Approve168847682023-03-22 17:59:35483 days ago1679507975IN
0x5fdabDCf...8529569ae
0 ETH0.0020331643
Approve168515482023-03-18 2:01:59488 days ago1679104919IN
0x5fdabDCf...8529569ae
0 ETH0.0010247721.83401377
Approve168515462023-03-18 2:01:35488 days ago1679104895IN
0x5fdabDCf...8529569ae
0 ETH0.0010621322.49187078
Approve168211772023-03-13 19:34:47492 days ago1678736087IN
0x5fdabDCf...8529569ae
0 ETH0.001537732.56270327
Approve168210592023-03-13 19:10:47492 days ago1678734647IN
0x5fdabDCf...8529569ae
0 ETH0.0014921731.5583654
Approve167930832023-03-09 20:41:35496 days ago1678394495IN
0x5fdabDCf...8529569ae
0 ETH0.0021933346.38730081
Approve167822272023-03-08 8:02:59497 days ago1678262579IN
0x5fdabDCf...8529569ae
0 ETH0.0011068323.43838408
Approve167361752023-03-01 20:35:11504 days ago1677702911IN
0x5fdabDCf...8529569ae
0 ETH0.001455430.78074182
Approve167305462023-03-01 1:36:11505 days ago1677634571IN
0x5fdabDCf...8529569ae
0 ETH0.0011236523.76446029
Approve166797042023-02-21 21:59:47512 days ago1677016787IN
0x5fdabDCf...8529569ae
0 ETH0.0016184334.27215883
Approve166529872023-02-18 3:54:59516 days ago1676692499IN
0x5fdabDCf...8529569ae
0 ETH0.0010604522.45623954
Approve166422962023-02-16 15:50:35517 days ago1676562635IN
0x5fdabDCf...8529569ae
0 ETH0.0026286555.66468077
Approve166374552023-02-15 23:36:11518 days ago1676504171IN
0x5fdabDCf...8529569ae
0 ETH0.00190340.2471861
Approve166342222023-02-15 12:44:59518 days ago1676465099IN
0x5fdabDCf...8529569ae
0 ETH0.0016261734.43603486
Approve166314462023-02-15 3:25:35519 days ago1676431535IN
0x5fdabDCf...8529569ae
0 ETH0.0017721137.47891699
Approve166274052023-02-14 13:52:35519 days ago1676382755IN
0x5fdabDCf...8529569ae
0 ETH0.0015295732.34930973
Approve166273722023-02-14 13:45:59519 days ago1676382359IN
0x5fdabDCf...8529569ae
0 ETH0.0011545724.44949386
Approve166248092023-02-14 5:08:47520 days ago1676351327IN
0x5fdabDCf...8529569ae
0 ETH0.0007303715.46659274
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
173278022023-05-24 8:15:47420 days ago1684916147
0x5fdabDCf...8529569ae
0.00078503 ETH
173278022023-05-24 8:15:47420 days ago1684916147
0x5fdabDCf...8529569ae
0.00117755 ETH
173278022023-05-24 8:15:47420 days ago1684916147
0x5fdabDCf...8529569ae
0.00196259 ETH
171350702023-04-27 4:12:47448 days ago1682568767
0x5fdabDCf...8529569ae
0.00101657 ETH
171350702023-04-27 4:12:47448 days ago1682568767
0x5fdabDCf...8529569ae
0.00152486 ETH
171350702023-04-27 4:12:47448 days ago1682568767
0x5fdabDCf...8529569ae
0.00254144 ETH
169638772023-04-02 20:50:35472 days ago1680468635
0x5fdabDCf...8529569ae
0.00102963 ETH
169638772023-04-02 20:50:35472 days ago1680468635
0x5fdabDCf...8529569ae
0.00154445 ETH
169638772023-04-02 20:50:35472 days ago1680468635
0x5fdabDCf...8529569ae
0.00257408 ETH
169638412023-04-02 20:43:23472 days ago1680468203
0x5fdabDCf...8529569ae
0.00127751 ETH
169638412023-04-02 20:43:23472 days ago1680468203
0x5fdabDCf...8529569ae
0.00191627 ETH
169638412023-04-02 20:43:23472 days ago1680468203
0x5fdabDCf...8529569ae
0.00319379 ETH
169638362023-04-02 20:42:23472 days ago1680468143
0x5fdabDCf...8529569ae
0.00121884 ETH
169638362023-04-02 20:42:23472 days ago1680468143
0x5fdabDCf...8529569ae
0.00182826 ETH
169638362023-04-02 20:42:23472 days ago1680468143
0x5fdabDCf...8529569ae
0.00304711 ETH
168847752023-03-22 18:00:59483 days ago1679508059
0x5fdabDCf...8529569ae
0.00140513 ETH
168847752023-03-22 18:00:59483 days ago1679508059
0x5fdabDCf...8529569ae
0.00210769 ETH
168847752023-03-22 18:00:59483 days ago1679508059
0x5fdabDCf...8529569ae
0.00351283 ETH
168515522023-03-18 2:02:47488 days ago1679104967
0x5fdabDCf...8529569ae
0.00118006 ETH
168515522023-03-18 2:02:47488 days ago1679104967
0x5fdabDCf...8529569ae
0.00177009 ETH
168515522023-03-18 2:02:47488 days ago1679104967
0x5fdabDCf...8529569ae
0.00295015 ETH
168214142023-03-13 20:22:35492 days ago1678738955
0x5fdabDCf...8529569ae
0.00098671 ETH
168214142023-03-13 20:22:35492 days ago1678738955
0x5fdabDCf...8529569ae
0.00148007 ETH
168214142023-03-13 20:22:35492 days ago1678738955
0x5fdabDCf...8529569ae
0.00246679 ETH
168210612023-03-13 19:11:11492 days ago1678734671
0x5fdabDCf...8529569ae
0.00155834 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BUDDY

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-08
*/

// t.me/TheBuddyPortal

// Buddy is a friendly puppy that embodies determination and an unwavering spirit. 
// Despite the many challenges he may face, Buddy refuses to lose hope and 
// puts in all his effort to achieve his aspirations. 

// DISCLAIMER @ BOTTOM

// SPDX-License-Identifier: Unlicensed
pragma solidity 0.8.11;

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

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

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

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function factory() external view returns (address);
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    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 BUDDY is Context, IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _liquidityHolders;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public isExcludedFromMaxWalletRestrictions;

    mapping (address => bool) private _isSniper;

    bool private sameBlockActive = false;
    mapping (address => uint256) private lastTrade;   

    bool private isInitialized = false;
    
    mapping (address => uint256) firstBuy;
    
    uint256 private startingSupply;

    string private _name;
    string private _symbol;
//==========================
    // FEES
    struct taxes {
    uint buyFee;
    uint sellFee;
    uint transferFee;
    uint antiDumpLT;
    }

    taxes public Fees = taxes(
    {buyFee: 500, sellFee: 500, transferFee: 0, antiDumpLT: 500});
//==========================
    // Maxima

    struct Maxima {
    uint maxBuy;
    uint maxSell;
    uint maxTransfer;
    uint maxAntiDump;
    }

    Maxima public maxFees = Maxima(
    {maxBuy: 500, maxSell: 500, maxTransfer: 500, maxAntiDump: 500});
//==========================    
    //Proportions of Taxes
    struct feeProportions {
    uint liquidity;
    uint burn;
    uint operations;
    uint treasury;
    }

    feeProportions public Ratios = feeProportions(
    { liquidity: 0, burn: 0, operations: 300, treasury: 200});
//==========================
    // Anti-Dump
    struct jeetParameters {
    uint longTerm;
    bool enabled;
    }
    jeetParameters public terms = jeetParameters(
    {longTerm: 24 hours, enabled: false});
    // Anti-Dump
//==========================
    uint256 private constant masterTaxDivisor = 10000;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
 
    uint256 private _tTotal = startingSupply * 10**_decimals;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNICORN ROUTER 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
    // PANCAKE ROUTER 0x10ED43C718714eb63d5aA57B78B54704E256024E


    address constant private _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD; // Receives tokens, deflates supply, increases price floor.
    
    address payable public _operationsWallet = payable(0x8cbfDc8f5beAA46383ED309c34568fdd3521ef26);
    address payable public _treasuryWallet = payable(0x44132b38e8a1D4B94D86c380B0F16EAE9db47d7b);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private maxTxPercent;
    uint256 private maxTxDivisor;
    uint256 private _maxTxAmount;
    
    uint256 private maxWalletPercent;
    uint256 private maxWalletDivisor;
    uint256 private _maxWalletSize;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    
    uint256 private _liqAddStatus = 0;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private _initialLiquidityAmount = 0; // make constant
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller != owner.");
        _;
    }
    
    constructor () payable {
        _owner = msg.sender;
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if (_operationsWallet == payable(_owner))
            _operationsWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFees(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
    
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    function totalSupply() external view override returns (uint256) { return _tTotal; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function approveMax(address spender) public returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function getFirstBuy(address account) public view returns (uint256) {
        return firstBuy[account];
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setNewRouter(address newRouter) public onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 1 weeks, "One week cooldown.");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
        }
    }


    function intializeContract() external onlyOwner {
        require(!isInitialized, "Contract already initialized.");
        require(_liqAddStatus == 0);
        
        _name = "Buddy Finance";
        _symbol = "BUDDY";

        startingSupply = 100_000_000_000;
        _decimals = 9;
        _tTotal = startingSupply * 10**_decimals;

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;

        maxTxPercent = 2; 
        maxTxDivisor = 100;
        _maxTxAmount = (_tTotal * maxTxPercent) / maxTxDivisor;
        
        maxWalletPercent = 2; 
        maxWalletDivisor = 100;
        _maxWalletSize = (_tTotal * maxWalletPercent) / maxWalletDivisor;
        
        swapThreshold = (_tTotal * 5) / 10_000;
        swapAmount = (_tTotal * 5) / 1_000;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;


        approve(_routerAddress, type(uint256).max);
        approve(owner(), type(uint256).max);


        isInitialized = true;
        _tOwned[owner()] = _tTotal;
        _approve(owner(), _routerAddress, _tTotal);
        emit Transfer(address(0), owner(), _tTotal);
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }


    function excludeFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = true;
    }

    function revokeExcludedFromWalletRestrictions(address excludedAddress) public onlyOwner{
        isExcludedFromMaxWalletRestrictions[excludedAddress] = false;
    }

    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function isProtected(uint256 rInitializer) external onlyOwner {
        require (_liqAddStatus == 0, "Error.");

        _liqAddStatus = rInitializer;
        snipeBlockAmt = 0;
    }

    // function setRatios(uint _liquidity, uint _operations, uint _treasury, uint _burn) external onlyOwner {
    //     require ( (_liquidity+_operations+_treasury+_burn) == 1000, "!(1K)");
    //     Ratios.liquidity = _liquidity;
    //     Ratios.operations = _operations;
    //     Ratios.treasury = _treasury;
    //     Ratios.burn = _burn;}

    // function antiDumpParameters(bool _enabled, uint _longTerm) external onlyOwner {
    //     require(_longTerm <= 24);
    //     terms.longTerm = _longTerm * 1 hours;
    //     terms.enabled = _enabled;}

    // function setTaxes(uint _buyFee, uint _sellFee, uint _transferFee, uint _antiDumpLT) external onlyOwner {
    //     require(_buyFee <= maxFees.maxBuy
    //             && _sellFee <= maxFees.maxSell
    //             && _transferFee <= maxFees.maxTransfer
    //             && _antiDumpLT <= maxFees.maxAntiDump,
    //             "Cannot exceed maximums.");
    //      Fees.buyFee = _buyFee;
    //      Fees.sellFee = _sellFee;
    //      Fees.transferFee = _transferFee;
    //      Fees.antiDumpLT= _antiDumpLT;

    // }

    // function setMaxTxPercent(uint percent, uint divisor) external onlyOwner {
    //     uint256 check = (_tTotal * percent) / divisor;
    //     require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
    //     _maxTxAmount = check;
    // }

    // function setMaxWalletSize(uint percent, uint divisor) external onlyOwner {
    //     uint256 check = (_tTotal * percent) / divisor;
    //     require(check >= (_tTotal / 300), "Must be above 0.33~% of total supply.");
    //     _maxWalletSize = check;

    // }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setWallets(address payable operationsWallet, address payable treasuryWallet) external onlyOwner {
        _operationsWallet = payable(operationsWallet);
        _treasuryWallet = payable(treasuryWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: Zero address.");
        require(to != address(0), "ERC20: Zero address.");
        require(amount > 0, "Must >0.");
        if(_hasLimits(from, to)) {
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                    } 
                else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                    }
            }
            if(!(isExcludedFromMaxWalletRestrictions[from] || isExcludedFromMaxWalletRestrictions[to])) {
                if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Exceeds the maxTxAmount.");
                }
                if(to != _routerAddress && !lpPairs[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                }

            }
            
        }

        if (_tOwned[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

        bool takeFee = true;
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        if (Ratios.liquidity + Ratios.operations + Ratios.treasury == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.operations + Ratios.treasury) ) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;
        swapTokensForEth(toSwapForEth);

        uint256 currentBalance = address(this).balance;
        uint256 liquidityBalance = ((currentBalance * Ratios.liquidity) / (Ratios.liquidity + Ratios.operations + Ratios.treasury) ) / 2;

        if (toLiquify > 0) {
            addLiquidity(toLiquify, liquidityBalance);
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            bool _operationFundsPaid = true;
            bool _treasuryPaid = true;
            uint _ethForOperations = (((currentBalance - liquidityBalance) * Ratios.operations) / (Ratios.operations + Ratios.treasury));
        
            (_operationFundsPaid,) = payable(_operationsWallet).call{value: _ethForOperations}("");
            (_treasuryPaid,) = payable(_treasuryWallet).call{value: address(this).balance}(""); 
           

        }
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            DEAD,
            block.timestamp
        );
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            if (snipeBlockAmt != 0) {
                _liqAddBlock = block.number;
            } else {
                _liqAddBlock = block.number;
            }

            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (sniperProtection){
            if (isSniper(from) || isSniper(to)) {
                revert("Sniper rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniper[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount; //A
        _tOwned[to] += amountReceived;

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;

        if (to == lpPair) {
            if (terms.enabled){
                if (firstBuy[from] + terms.longTerm > block.timestamp) {currentFee = Fees.antiDumpLT;}

                else {currentFee = Fees.sellFee;}
            }
            else {currentFee=Fees.sellFee;}
            } 

        else if (from == lpPair) {currentFee = Fees.buyFee;} 

        else {currentFee = Fees.transferFee;}

        uint256 burnAmt = (amount * currentFee * Ratios.burn) / (Ratios.burn + Ratios.liquidity + Ratios.operations + Ratios.treasury ) / masterTaxDivisor;
        uint256 feeAmount = (amount * currentFee / masterTaxDivisor) - burnAmt;
        _tOwned[DEAD] += burnAmt;
        _tOwned[address(this)] += (feeAmount);
        emit Transfer(from, DEAD, burnAmt);
        emit Transfer(from, address(this), feeAmount);
        return amount - feeAmount - burnAmt;
    }
}

// Disclaimer: By buying cryptocurrency, you are agreeing that you are responsible for the results of your investments. 
// In general, crypto is a very volatile space and should be navigated with caution.

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Fees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"},{"internalType":"uint256","name":"antiDumpLT","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ratios","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"operations","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operationsWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"excludeFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFirstBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWalletRestrictions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rInitializer","type":"uint256"}],"name":"isProtected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFees","outputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxTransfer","type":"uint256"},{"internalType":"uint256","name":"maxAntiDump","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"excludedAddress","type":"address"}],"name":"revokeExcludedFromWalletRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"operationsWallet","type":"address"},{"internalType":"address payable","name":"treasuryWallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"terms","outputs":[{"internalType":"uint256","name":"longTerm","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006003556000600960006101000a81548160ff0219169083151502179055506000600b60006101000a81548160ff02191690831515021790555060405180608001604052806101f481526020016101f48152602001600081526020016101f4815250601060008201518160000155602082015181600101556040820151816002015560608201518160030155505060405180608001604052806101f481526020016101f481526020016101f481526020016101f481525060146000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280600081526020016000815260200161012c815260200160c88152506018600082015181600001556020820151816001015560408201518160020155606082015181600301555050604051806040016040528062015180815260200160001515815250601c6000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055505050601e60009054906101000a900460ff16600a620001a19190620004ac565b600d54620001b09190620004fd565b601f55738cbfdc8f5beaa46383ed309c34568fdd3521ef26602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507344132b38e8a1d4b94d86c380b0f16eae9db47d7b602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602460156101000a81548160ff0219169083151502179055506001602d60006101000a81548160ff0219169083151502179055506000602d60016101000a81548160ff0219169083151502179055506000602e556000602f556000603055600060315560006032556000603355336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620003a05780860481111562000378576200037762000312565b5b6001851615620003885780820291505b8081029050620003988562000341565b945062000358565b94509492505050565b600082620003bb57600190506200048e565b81620003cb57600090506200048e565b8160018114620003e45760028114620003ef5762000425565b60019150506200048e565b60ff84111562000404576200040362000312565b5b8360020a9150848211156200041e576200041d62000312565b5b506200048e565b5060208310610133831016604e8410600b84101617156200045f5782820a90508381111562000459576200045862000312565b5b6200048e565b6200046e84848460016200034e565b9250905081840481111562000488576200048762000312565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620004b98262000495565b9150620004c6836200049f565b9250620004f57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620003a9565b905092915050565b60006200050a8262000495565b9150620005178362000495565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000553576200055262000312565b5b828202905092915050565b615a3f806200056e6000396000f3fe6080604052600436106102555760003560e01c80637ed57c8b11610139578063b5f7bfa2116100b6578063d50256251161007a578063d502562514610901578063dd62ed3e1461092d578063e79d41601461096a578063e83e34b114610995578063eafb5a3c146109c3578063fb78680d146109ec5761025c565b8063b5f7bfa21461082f578063bc1323e81461085d578063c49b9a8014610886578063ce8b79c9146108af578063d3f6a157146108d85761025c565b80638da5cb5b116100fd5780638da5cb5b1461072257806395d89b411461074d578063a13ce2c614610778578063a457c2d7146107b5578063a9059cbb146107f25761025c565b80637ed57c8b1461065157806380c581d11461066857806381c6f11b14610691578063893d20e8146106ba5780638c7321ad146106e55761025c565b80633aaa36e6116101d25780634fbee193116101965780634fbee1931461052f57806350a8e0161461056c578063571ac8b014610597578063590ffdce146105d457806370a08231146105fd578063715018a61461063a5761025c565b80633aaa36e6146104575780633da8780614610485578063452ed4f1146104b05780634a74bb02146104db5780634fb2e45d146105065761025c565b806318160ddd1161021957806318160ddd1461035c57806323b872dd14610387578063269d1faa146103c4578063313ce567146103ef578063395093511461041a5761025c565b806303fd2a451461026157806306fdde031461028c5780630758d924146102b7578063095ea7b3146102e25780630f3a325f1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a15565b604051610283919061478d565b60405180910390f35b34801561029857600080fd5b506102a1610a1b565b6040516102ae9190614841565b60405180910390f35b3480156102c357600080fd5b506102cc610aad565b6040516102d991906148c2565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190614944565b610ad3565b604051610316919061499f565b60405180910390f35b34801561032b57600080fd5b50610346600480360381019061034191906149ba565b610af1565b604051610353919061499f565b60405180910390f35b34801561036857600080fd5b50610371610b47565b60405161037e91906149f6565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190614a11565b610b51565b6040516103bb919061499f565b60405180910390f35b3480156103d057600080fd5b506103d9610c9e565b6040516103e69190614a85565b60405180910390f35b3480156103fb57600080fd5b50610404610cc4565b6040516104119190614abc565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190614944565b610cdb565b60405161044e919061499f565b60405180910390f35b34801561046357600080fd5b5061046c610d87565b60405161047c9493929190614ad7565b60405180910390f35b34801561049157600080fd5b5061049a610da5565b6040516104a79190614a85565b60405180910390f35b3480156104bc57600080fd5b506104c5610dcb565b6040516104d2919061478d565b60405180910390f35b3480156104e757600080fd5b506104f0610df1565b6040516104fd919061499f565b60405180910390f35b34801561051257600080fd5b5061052d600480360381019061052891906149ba565b610e04565b005b34801561053b57600080fd5b50610556600480360381019061055191906149ba565b611275565b604051610563919061499f565b60405180910390f35b34801561057857600080fd5b506105816112cb565b60405161058e919061499f565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906149ba565b6112de565b6040516105cb919061499f565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190614b48565b611311565b005b34801561060957600080fd5b50610624600480360381019061061f91906149ba565b611401565b60405161063191906149f6565b60405180910390f35b34801561064657600080fd5b5061064f61144a565b005b34801561065d57600080fd5b506106666115c8565b005b34801561067457600080fd5b5061068f600480360381019061068a9190614b48565b611ea7565b005b34801561069d57600080fd5b506106b860048036038101906106b39190614b88565b612067565b005b3480156106c657600080fd5b506106cf612153565b6040516106dc919061478d565b60405180910390f35b3480156106f157600080fd5b5061070c600480360381019061070791906149ba565b612162565b604051610719919061499f565b60405180910390f35b34801561072e57600080fd5b50610737612182565b604051610744919061478d565b60405180910390f35b34801561075957600080fd5b506107626121ab565b60405161076f9190614841565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a91906149ba565b61223d565b6040516107ac91906149f6565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614944565b612286565b6040516107e9919061499f565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190614944565b612332565b604051610826919061499f565b60405180910390f35b34801561083b57600080fd5b50610844612351565b6040516108549493929190614ad7565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f91906149ba565b61236f565b005b34801561089257600080fd5b506108ad60048036038101906108a89190614bb5565b61245f565b005b3480156108bb57600080fd5b506108d660048036038101906108d191906149ba565b612548565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190614c0e565b612638565b005b34801561090d57600080fd5b50610916612753565b604051610924929190614c4e565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f9190614c77565b612772565b60405161096191906149f6565b60405180910390f35b34801561097657600080fd5b5061097f6127f9565b60405161098c91906149f6565b60405180910390f35b3480156109a157600080fd5b506109aa6127ff565b6040516109ba9493929190614ad7565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e591906149ba565b61281d565b005b3480156109f857600080fd5b50610a136004803603810190610a0e9190614cb7565b612c6f565b005b61dead81565b6060600e8054610a2a90614d4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690614d4d565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ae7610ae0612d48565b8484612d50565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601f54905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610c8a5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c829190614dae565b925050819055505b610c95848484612f1b565b90509392505050565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e60009054906101000a900460ff16905090565b6000610d7d610ce8612d48565b848460046000610cf6612d48565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d789190614de2565b612d50565b6001905092915050565b60108060000154908060010154908060020154908060030154905084565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602460159054906101000a900460ff1681565b610e0c612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090614e84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090614f16565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190614f16565b60405180910390fd5b610fa560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611311565b610fb0816001611311565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110685780602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61109160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611401565b600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061115d60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611401565b11156111b8576111b660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826111b160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611401565b612f1b565b505b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602d60019054906101000a900460ff1681565b600061130a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ad3565b9050919050565b611319612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90614e84565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611452612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d690614e84565b60405180910390fd5b61150a60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611311565b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b6115d0612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490614e84565b60405180910390fd5b600b60009054906101000a900460ff16156116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614f82565b60405180910390fd5b6000602e54146116bc57600080fd5b6040518060400160405280600d81526020017f42756464792046696e616e636500000000000000000000000000000000000000815250600e90805190602001906117079291906146a9565b506040518060400160405280600581526020017f4255444459000000000000000000000000000000000000000000000000000000815250600f90805190602001906117539291906146a9565b5064174876e800600d819055506009601e60006101000a81548160ff021916908360ff160217905550601e60009054906101000a900460ff16600a61179891906150d5565b600d546117a59190615120565b601f81905550737a250d5630b4cf539739df2c5dacb4c659f2488d602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611891919061518f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193d919061518f565b306040518363ffffffff1660e01b815260040161195b9291906151bc565b6020604051808303816000875af115801561197a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199e919061518f565b602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160026000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026025819055506064602681905550602654602554601f54611b3e9190615120565b611b489190615214565b60278190555060026028819055506064602981905550602954602854601f54611b719190615120565b611b7b9190615214565b602a819055506127106005601f54611b939190615120565b611b9d9190615214565b602b819055506103e86005601f54611bb59190615120565b611bbf9190615214565b602c81905550600160066000611bd3612182565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000611ce4612182565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d73737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ad3565b50611da5611d7f612182565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ad3565b506001600b60006101000a81548160ff021916908315150217905550601f5460016000611dd0612182565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e36611e19612182565b737a250d5630b4cf539739df2c5dacb4c659f2488d601f54612d50565b611e3e612182565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601f54604051611e9d91906149f6565b60405180910390a3565b611eaf612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390614e84565b60405180910390fd5b600015158115151415611fa6576000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612063565b6000600354146120035762093a8060035442611fc29190614dae565b11612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990615291565b60405180910390fd5b5b6001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550426003819055505b5050565b61206f612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390614e84565b60405180910390fd5b6000602e5414612141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612138906152fd565b60405180910390fd5b80602e81905550600060328190555050565b600061215d612182565b905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f80546121ba90614d4d565b80601f01602080910402602001604051908101604052809291908181526020018280546121e690614d4d565b80156122335780601f1061220857610100808354040283529160200191612233565b820191906000526020600020905b81548152906001019060200180831161221657829003601f168201915b5050505050905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000612328612293612d48565b8484600460006122a1612d48565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123239190614dae565b612d50565b6001905092915050565b600061234661233f612d48565b8484612f1b565b506001905092915050565b60188060000154908060010154908060020154908060030154905084565b612377612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb90614e84565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612467612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614e84565b60405180910390fd5b80602460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161253d919061499f565b60405180910390a150565b612550612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490614e84565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612640612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614e84565b60405180910390fd5b81602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601c8060000154908060010160009054906101000a900460ff16905082565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60335481565b60148060000154908060010154908060020154908060030154905084565b612825612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a990614e84565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612904573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612928919061518f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b3919061518f565b6040518363ffffffff1660e01b81526004016129d09291906151bc565b602060405180830381865afa1580156129ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a11919061518f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612be7578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab7919061518f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b42919061518f565b6040518363ffffffff1660e01b8152600401612b5f9291906151bc565b6020604051808303816000875af1158015612b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba2919061518f565b602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612c29565b80602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612c77612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614e84565b60405180910390fd5b8284601f54612d139190615120565b612d1d9190615214565b602b819055508082601f54612d329190615120565b612d3c9190615214565b602c8190555050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db790615369565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2790615369565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f0e91906149f6565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f83906153d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff3906153d5565b60405180910390fd5b6000821161303f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303690615441565b60405180910390fd5b613049848461366d565b1561346757600960009054906101000a900460ff16156131dc57600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561314a5743600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561310157600080fd5b43600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131db565b43600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561319657600080fd5b43600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061327d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61346657600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133225750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561336d5760275482111561336c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613363906154ad565b60405180910390fd5b5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156134075750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561346557602a548261341985611401565b6134239190614de2565b1115613464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345b90615519565b60405180910390fd5b5b5b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156134f45742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600060019050600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061359b5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a557600090505b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561365757602460149054906101000a900460ff161580156136205750602460159054906101000a900460ff165b1561365657600061363030611401565b9050602b54811061365457602c54811061364a57602c5490505b61365381613844565b5b505b5b61366385858584613b44565b9150509392505050565b6000613677612182565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156136e557506136b5612182565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561373b5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137915750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137cb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138045750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561383c57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001602460146101000a81548160ff021916908315150217905550600060186003015460186002015460186000015461387d9190614de2565b6138879190614de2565b141561389257613b26565b600060026018600301546018600201546018600001546138b29190614de2565b6138bc9190614de2565b601860000154846138cd9190615120565b6138d79190615214565b6138e19190615214565b9050600081836138f19190614dae565b90506138fc81613ea7565b6000479050600060026018600301546018600201546018600001546139219190614de2565b61392b9190614de2565b6018600001548461393c9190615120565b6139469190615214565b6139509190615214565b905060008411156139a15761396584826140bd565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828660405161399893929190615539565b60405180910390a15b600084866139af9190614dae565b1115613b215760006001905060006001905060006018600301546018600201546139d99190614de2565b60186002015485876139eb9190614dae565b6139f59190615120565b6139ff9190615214565b9050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a47906155a1565b60006040518083038185875af1925050503d8060008114613a84576040519150601f19603f3d011682016040523d82523d6000602084013e613a89565b606091505b505080935050602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ad5906155a1565b60006040518083038185875af1925050503d8060008114613b12576040519150601f19603f3d011682016040523d82523d6000602084013e613b17565b606091505b5050809250505050505b505050505b6000602460146101000a81548160ff02191690831515021790555050565b6000602d60009054906101000a900460ff1615613d6e57613b6485610af1565b80613b745750613b7384610af1565b5b15613bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bab90615602565b60405180910390fd5b602d60019054906101000a900460ff16613c3a57613bd28585614170565b602d60019054906101000a900460ff16158015613bf55750613bf4858561366d565b5b15613c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2c90615694565b60405180910390fd5b613d6d565b6000602f54118015613c955750600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613ca75750613ca6858561366d565b5b15613d6c57603254602f5443613cbd9190614dae565b1015613d6b576001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060336000815480929190613d2e906156b4565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e584604051613d62919061478d565b60405180910390a15b5b5b5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613dbd9190614dae565b92505081905550600082613dd15783613ddd565b613ddc868686614319565b5b905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e2e9190614de2565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e9291906149f6565b60405180910390a36001915050949350505050565b6000600267ffffffffffffffff811115613ec457613ec36156fd565b5b604051908082528060200260200182016040528015613ef25781602001602082028036833780820191505090505b5090503081600081518110613f0a57613f0961572c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fd5919061518f565b81600181518110613fe957613fe861572c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614087959493929190615854565b600060405180830381600087803b1580156140a157600080fd5b505af11580156140b5573d6000803e3d6000fd5b505050505050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614126969594939291906158ae565b60606040518083038185885af1158015614144573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141699190615924565b5050505050565b602d60019054906101000a900460ff16156141c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b7906159e9565b60405180910390fd5b6141ca828261366d565b1580156142245750602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156143155760006032541461423f5743602f81905550614247565b43602f819055505b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602d60016101000a81548160ff021916908315150217905550426030819055506001602460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159600160405161430c919061499f565b60405180910390a15b5050565b600080602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561440a57601c60010160009054906101000a900460ff16156143fc5742601c60000154600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143db9190614de2565b11156143ee5760106003015490506143f7565b60106001015490505b614405565b60106001015490505b614477565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561446d576010600001549050614476565b60106002015490505b5b600061271060186003015460186002015460186000015460186001015461449e9190614de2565b6144a89190614de2565b6144b29190614de2565b60186001015484876144c49190615120565b6144ce9190615120565b6144d89190615214565b6144e29190615214565b905060008161271084876144f69190615120565b6145009190615214565b61450a9190614dae565b9050816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461455d9190614de2565b9250508190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546145b39190614de2565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161461991906149f6565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161467e91906149f6565b60405180910390a38181866146939190614dae565b61469d9190614dae565b93505050509392505050565b8280546146b590614d4d565b90600052602060002090601f0160209004810192826146d7576000855561471e565b82601f106146f057805160ff191683800117855561471e565b8280016001018555821561471e579182015b8281111561471d578251825591602001919060010190614702565b5b50905061472b919061472f565b5090565b5b80821115614748576000816000905550600101614730565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147778261474c565b9050919050565b6147878161476c565b82525050565b60006020820190506147a2600083018461477e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147e25780820151818401526020810190506147c7565b838111156147f1576000848401525b50505050565b6000601f19601f8301169050919050565b6000614813826147a8565b61481d81856147b3565b935061482d8185602086016147c4565b614836816147f7565b840191505092915050565b6000602082019050818103600083015261485b8184614808565b905092915050565b6000819050919050565b600061488861488361487e8461474c565b614863565b61474c565b9050919050565b600061489a8261486d565b9050919050565b60006148ac8261488f565b9050919050565b6148bc816148a1565b82525050565b60006020820190506148d760008301846148b3565b92915050565b600080fd5b6148eb8161476c565b81146148f657600080fd5b50565b600081359050614908816148e2565b92915050565b6000819050919050565b6149218161490e565b811461492c57600080fd5b50565b60008135905061493e81614918565b92915050565b6000806040838503121561495b5761495a6148dd565b5b6000614969858286016148f9565b925050602061497a8582860161492f565b9150509250929050565b60008115159050919050565b61499981614984565b82525050565b60006020820190506149b46000830184614990565b92915050565b6000602082840312156149d0576149cf6148dd565b5b60006149de848285016148f9565b91505092915050565b6149f08161490e565b82525050565b6000602082019050614a0b60008301846149e7565b92915050565b600080600060608486031215614a2a57614a296148dd565b5b6000614a38868287016148f9565b9350506020614a49868287016148f9565b9250506040614a5a8682870161492f565b9150509250925092565b6000614a6f8261474c565b9050919050565b614a7f81614a64565b82525050565b6000602082019050614a9a6000830184614a76565b92915050565b600060ff82169050919050565b614ab681614aa0565b82525050565b6000602082019050614ad16000830184614aad565b92915050565b6000608082019050614aec60008301876149e7565b614af960208301866149e7565b614b0660408301856149e7565b614b1360608301846149e7565b95945050505050565b614b2581614984565b8114614b3057600080fd5b50565b600081359050614b4281614b1c565b92915050565b60008060408385031215614b5f57614b5e6148dd565b5b6000614b6d858286016148f9565b9250506020614b7e85828601614b33565b9150509250929050565b600060208284031215614b9e57614b9d6148dd565b5b6000614bac8482850161492f565b91505092915050565b600060208284031215614bcb57614bca6148dd565b5b6000614bd984828501614b33565b91505092915050565b614beb81614a64565b8114614bf657600080fd5b50565b600081359050614c0881614be2565b92915050565b60008060408385031215614c2557614c246148dd565b5b6000614c3385828601614bf9565b9250506020614c4485828601614bf9565b9150509250929050565b6000604082019050614c6360008301856149e7565b614c706020830184614990565b9392505050565b60008060408385031215614c8e57614c8d6148dd565b5b6000614c9c858286016148f9565b9250506020614cad858286016148f9565b9150509250929050565b60008060008060808587031215614cd157614cd06148dd565b5b6000614cdf8782880161492f565b9450506020614cf08782880161492f565b9350506040614d018782880161492f565b9250506060614d128782880161492f565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d6557607f821691505b60208210811415614d7957614d78614d1e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db98261490e565b9150614dc48361490e565b925082821015614dd757614dd6614d7f565b5b828203905092915050565b6000614ded8261490e565b9150614df88361490e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e2d57614e2c614d7f565b5b828201905092915050565b7f43616c6c657220213d206f776e65722e00000000000000000000000000000000600082015250565b6000614e6e6010836147b3565b9150614e7982614e38565b602082019050919050565b60006020820190508181036000830152614e9d81614e61565b9050919050565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660008201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b6000614f00603d836147b3565b9150614f0b82614ea4565b604082019050919050565b60006020820190508181036000830152614f2f81614ef3565b9050919050565b7f436f6e747261637420616c726561647920696e697469616c697a65642e000000600082015250565b6000614f6c601d836147b3565b9150614f7782614f36565b602082019050919050565b60006020820190508181036000830152614f9b81614f5f565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614ff957808604811115614fd557614fd4614d7f565b5b6001851615614fe45780820291505b8081029050614ff285614fa2565b9450614fb9565b94509492505050565b60008261501257600190506150ce565b8161502057600090506150ce565b816001811461503657600281146150405761506f565b60019150506150ce565b60ff84111561505257615051614d7f565b5b8360020a91508482111561506957615068614d7f565b5b506150ce565b5060208310610133831016604e8410600b84101617156150a45782820a90508381111561509f5761509e614d7f565b5b6150ce565b6150b18484846001614faf565b925090508184048111156150c8576150c7614d7f565b5b81810290505b9392505050565b60006150e08261490e565b91506150eb83614aa0565b92506151187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615002565b905092915050565b600061512b8261490e565b91506151368361490e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561516f5761516e614d7f565b5b828202905092915050565b600081519050615189816148e2565b92915050565b6000602082840312156151a5576151a46148dd565b5b60006151b38482850161517a565b91505092915050565b60006040820190506151d1600083018561477e565b6151de602083018461477e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061521f8261490e565b915061522a8361490e565b92508261523a576152396151e5565b5b828204905092915050565b7f4f6e65207765656b20636f6f6c646f776e2e0000000000000000000000000000600082015250565b600061527b6012836147b3565b915061528682615245565b602082019050919050565b600060208201905081810360008301526152aa8161526e565b9050919050565b7f4572726f722e0000000000000000000000000000000000000000000000000000600082015250565b60006152e76006836147b3565b91506152f2826152b1565b602082019050919050565b60006020820190508181036000830152615316816152da565b9050919050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b60006153536013836147b3565b915061535e8261531d565b602082019050919050565b6000602082019050818103600083015261538281615346565b9050919050565b7f45524332303a205a65726f20616464726573732e000000000000000000000000600082015250565b60006153bf6014836147b3565b91506153ca82615389565b602082019050919050565b600060208201905081810360008301526153ee816153b2565b9050919050565b7f4d757374203e302e000000000000000000000000000000000000000000000000600082015250565b600061542b6008836147b3565b9150615436826153f5565b602082019050919050565b6000602082019050818103600083015261545a8161541e565b9050919050565b7f4578636565647320746865206d61785478416d6f756e742e0000000000000000600082015250565b60006154976018836147b3565b91506154a282615461565b602082019050919050565b600060208201905081810360008301526154c68161548a565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000615503601a836147b3565b915061550e826154cd565b602082019050919050565b60006020820190508181036000830152615532816154f6565b9050919050565b600060608201905061554e60008301866149e7565b61555b60208301856149e7565b61556860408301846149e7565b949350505050565b600081905092915050565b50565b600061558b600083615570565b91506155968261557b565b600082019050919050565b60006155ac8261557e565b9150819050919050565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b60006155ec6010836147b3565b91506155f7826155b6565b602082019050919050565b6000602082019050818103600083015261561b816155df565b9050919050565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b600061567e6025836147b3565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b60006156bf8261490e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156f2576156f1614d7f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061578061577b6157768461575b565b614863565b61490e565b9050919050565b61579081615765565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157cb8161476c565b82525050565b60006157dd83836157c2565b60208301905092915050565b6000602082019050919050565b600061580182615796565b61580b81856157a1565b9350615816836157b2565b8060005b8381101561584757815161582e88826157d1565b9750615839836157e9565b92505060018101905061581a565b5085935050505092915050565b600060a08201905061586960008301886149e7565b6158766020830187615787565b818103604083015261588881866157f6565b9050615897606083018561477e565b6158a460808301846149e7565b9695505050505050565b600060c0820190506158c3600083018961477e565b6158d060208301886149e7565b6158dd6040830187615787565b6158ea6060830186615787565b6158f7608083018561477e565b61590460a08301846149e7565b979650505050505050565b60008151905061591e81614918565b92915050565b60008060006060848603121561593d5761593c6148dd565b5b600061594b8682870161590f565b935050602061595c8682870161590f565b925050604061596d8682870161590f565b9150509250925092565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b60006159d36023836147b3565b91506159de82615977565b604082019050919050565b60006020820190508181036000830152615a02816159c6565b905091905056fea2646970667358221220cb6d0c5147acbcca190de5af1243b65d225bcb2f935ea2c517bfa57bd33acb1b64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80637ed57c8b11610139578063b5f7bfa2116100b6578063d50256251161007a578063d502562514610901578063dd62ed3e1461092d578063e79d41601461096a578063e83e34b114610995578063eafb5a3c146109c3578063fb78680d146109ec5761025c565b8063b5f7bfa21461082f578063bc1323e81461085d578063c49b9a8014610886578063ce8b79c9146108af578063d3f6a157146108d85761025c565b80638da5cb5b116100fd5780638da5cb5b1461072257806395d89b411461074d578063a13ce2c614610778578063a457c2d7146107b5578063a9059cbb146107f25761025c565b80637ed57c8b1461065157806380c581d11461066857806381c6f11b14610691578063893d20e8146106ba5780638c7321ad146106e55761025c565b80633aaa36e6116101d25780634fbee193116101965780634fbee1931461052f57806350a8e0161461056c578063571ac8b014610597578063590ffdce146105d457806370a08231146105fd578063715018a61461063a5761025c565b80633aaa36e6146104575780633da8780614610485578063452ed4f1146104b05780634a74bb02146104db5780634fb2e45d146105065761025c565b806318160ddd1161021957806318160ddd1461035c57806323b872dd14610387578063269d1faa146103c4578063313ce567146103ef578063395093511461041a5761025c565b806303fd2a451461026157806306fdde031461028c5780630758d924146102b7578063095ea7b3146102e25780630f3a325f1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a15565b604051610283919061478d565b60405180910390f35b34801561029857600080fd5b506102a1610a1b565b6040516102ae9190614841565b60405180910390f35b3480156102c357600080fd5b506102cc610aad565b6040516102d991906148c2565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190614944565b610ad3565b604051610316919061499f565b60405180910390f35b34801561032b57600080fd5b50610346600480360381019061034191906149ba565b610af1565b604051610353919061499f565b60405180910390f35b34801561036857600080fd5b50610371610b47565b60405161037e91906149f6565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a99190614a11565b610b51565b6040516103bb919061499f565b60405180910390f35b3480156103d057600080fd5b506103d9610c9e565b6040516103e69190614a85565b60405180910390f35b3480156103fb57600080fd5b50610404610cc4565b6040516104119190614abc565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190614944565b610cdb565b60405161044e919061499f565b60405180910390f35b34801561046357600080fd5b5061046c610d87565b60405161047c9493929190614ad7565b60405180910390f35b34801561049157600080fd5b5061049a610da5565b6040516104a79190614a85565b60405180910390f35b3480156104bc57600080fd5b506104c5610dcb565b6040516104d2919061478d565b60405180910390f35b3480156104e757600080fd5b506104f0610df1565b6040516104fd919061499f565b60405180910390f35b34801561051257600080fd5b5061052d600480360381019061052891906149ba565b610e04565b005b34801561053b57600080fd5b50610556600480360381019061055191906149ba565b611275565b604051610563919061499f565b60405180910390f35b34801561057857600080fd5b506105816112cb565b60405161058e919061499f565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b991906149ba565b6112de565b6040516105cb919061499f565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190614b48565b611311565b005b34801561060957600080fd5b50610624600480360381019061061f91906149ba565b611401565b60405161063191906149f6565b60405180910390f35b34801561064657600080fd5b5061064f61144a565b005b34801561065d57600080fd5b506106666115c8565b005b34801561067457600080fd5b5061068f600480360381019061068a9190614b48565b611ea7565b005b34801561069d57600080fd5b506106b860048036038101906106b39190614b88565b612067565b005b3480156106c657600080fd5b506106cf612153565b6040516106dc919061478d565b60405180910390f35b3480156106f157600080fd5b5061070c600480360381019061070791906149ba565b612162565b604051610719919061499f565b60405180910390f35b34801561072e57600080fd5b50610737612182565b604051610744919061478d565b60405180910390f35b34801561075957600080fd5b506107626121ab565b60405161076f9190614841565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a91906149ba565b61223d565b6040516107ac91906149f6565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190614944565b612286565b6040516107e9919061499f565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190614944565b612332565b604051610826919061499f565b60405180910390f35b34801561083b57600080fd5b50610844612351565b6040516108549493929190614ad7565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f91906149ba565b61236f565b005b34801561089257600080fd5b506108ad60048036038101906108a89190614bb5565b61245f565b005b3480156108bb57600080fd5b506108d660048036038101906108d191906149ba565b612548565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190614c0e565b612638565b005b34801561090d57600080fd5b50610916612753565b604051610924929190614c4e565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f9190614c77565b612772565b60405161096191906149f6565b60405180910390f35b34801561097657600080fd5b5061097f6127f9565b60405161098c91906149f6565b60405180910390f35b3480156109a157600080fd5b506109aa6127ff565b6040516109ba9493929190614ad7565b60405180910390f35b3480156109cf57600080fd5b506109ea60048036038101906109e591906149ba565b61281d565b005b3480156109f857600080fd5b50610a136004803603810190610a0e9190614cb7565b612c6f565b005b61dead81565b6060600e8054610a2a90614d4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690614d4d565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ae7610ae0612d48565b8484612d50565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601f54905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610c8a5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c829190614dae565b925050819055505b610c95848484612f1b565b90509392505050565b602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601e60009054906101000a900460ff16905090565b6000610d7d610ce8612d48565b848460046000610cf6612d48565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d789190614de2565b612d50565b6001905092915050565b60108060000154908060010154908060020154908060030154905084565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602460159054906101000a900460ff1681565b610e0c612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090614e84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090614f16565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190614f16565b60405180910390fd5b610fa560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611311565b610fb0816001611311565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110685780602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b61109160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611401565b600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061115d60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611401565b11156111b8576111b660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826111b160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611401565b612f1b565b505b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b602d60019054906101000a900460ff1681565b600061130a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ad3565b9050919050565b611319612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90614e84565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611452612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d690614e84565b60405180910390fd5b61150a60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000611311565b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b6115d0612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490614e84565b60405180910390fd5b600b60009054906101000a900460ff16156116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614f82565b60405180910390fd5b6000602e54146116bc57600080fd5b6040518060400160405280600d81526020017f42756464792046696e616e636500000000000000000000000000000000000000815250600e90805190602001906117079291906146a9565b506040518060400160405280600581526020017f4255444459000000000000000000000000000000000000000000000000000000815250600f90805190602001906117539291906146a9565b5064174876e800600d819055506009601e60006101000a81548160ff021916908360ff160217905550601e60009054906101000a900460ff16600a61179891906150d5565b600d546117a59190615120565b601f81905550737a250d5630b4cf539739df2c5dacb4c659f2488d602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611891919061518f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193d919061518f565b306040518363ffffffff1660e01b815260040161195b9291906151bc565b6020604051808303816000875af115801561197a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199e919061518f565b602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160026000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026025819055506064602681905550602654602554601f54611b3e9190615120565b611b489190615214565b60278190555060026028819055506064602981905550602954602854601f54611b719190615120565b611b7b9190615214565b602a819055506127106005601f54611b939190615120565b611b9d9190615214565b602b819055506103e86005601f54611bb59190615120565b611bbf9190615214565b602c81905550600160066000611bd3612182565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000611ce4612182565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d73737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ad3565b50611da5611d7f612182565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ad3565b506001600b60006101000a81548160ff021916908315150217905550601f5460016000611dd0612182565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e36611e19612182565b737a250d5630b4cf539739df2c5dacb4c659f2488d601f54612d50565b611e3e612182565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601f54604051611e9d91906149f6565b60405180910390a3565b611eaf612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3390614e84565b60405180910390fd5b600015158115151415611fa6576000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612063565b6000600354146120035762093a8060035442611fc29190614dae565b11612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990615291565b60405180910390fd5b5b6001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550426003819055505b5050565b61206f612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390614e84565b60405180910390fd5b6000602e5414612141576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612138906152fd565b60405180910390fd5b80602e81905550600060328190555050565b600061215d612182565b905090565b60076020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f80546121ba90614d4d565b80601f01602080910402602001604051908101604052809291908181526020018280546121e690614d4d565b80156122335780601f1061220857610100808354040283529160200191612233565b820191906000526020600020905b81548152906001019060200180831161221657829003601f168201915b5050505050905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000612328612293612d48565b8484600460006122a1612d48565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123239190614dae565b612d50565b6001905092915050565b600061234661233f612d48565b8484612f1b565b506001905092915050565b60188060000154908060010154908060020154908060030154905084565b612377612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb90614e84565b60405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612467612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614e84565b60405180910390fd5b80602460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161253d919061499f565b60405180910390a150565b612550612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d490614e84565b60405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612640612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614e84565b60405180910390fd5b81602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601c8060000154908060010160009054906101000a900460ff16905082565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60335481565b60148060000154908060010154908060020154908060030154905084565b612825612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a990614e84565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612904573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612928919061518f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b3919061518f565b6040518363ffffffff1660e01b81526004016129d09291906151bc565b602060405180830381865afa1580156129ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a11919061518f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612be7578173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab7919061518f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b42919061518f565b6040518363ffffffff1660e01b8152600401612b5f9291906151bc565b6020604051808303816000875af1158015612b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba2919061518f565b602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612c29565b80602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b81602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b612c77612d48565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfb90614e84565b60405180910390fd5b8284601f54612d139190615120565b612d1d9190615214565b602b819055508082601f54612d329190615120565b612d3c9190615214565b602c8190555050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db790615369565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2790615369565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f0e91906149f6565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f83906153d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff3906153d5565b60405180910390fd5b6000821161303f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303690615441565b60405180910390fd5b613049848461366d565b1561346757600960009054906101000a900460ff16156131dc57600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561314a5743600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561310157600080fd5b43600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131db565b43600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561319657600080fd5b43600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061327d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61346657600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133225750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561336d5760275482111561336c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613363906154ad565b60405180910390fd5b5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156134075750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561346557602a548261341985611401565b6134239190614de2565b1115613464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345b90615519565b60405180910390fd5b5b5b5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156134f45742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600060019050600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061359b5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a557600090505b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561365757602460149054906101000a900460ff161580156136205750602460159054906101000a900460ff165b1561365657600061363030611401565b9050602b54811061365457602c54811061364a57602c5490505b61365381613844565b5b505b5b61366385858584613b44565b9150509392505050565b6000613677612182565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156136e557506136b5612182565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561373b5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137915750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137cb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138045750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561383c57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b905092915050565b6001602460146101000a81548160ff021916908315150217905550600060186003015460186002015460186000015461387d9190614de2565b6138879190614de2565b141561389257613b26565b600060026018600301546018600201546018600001546138b29190614de2565b6138bc9190614de2565b601860000154846138cd9190615120565b6138d79190615214565b6138e19190615214565b9050600081836138f19190614dae565b90506138fc81613ea7565b6000479050600060026018600301546018600201546018600001546139219190614de2565b61392b9190614de2565b6018600001548461393c9190615120565b6139469190615214565b6139509190615214565b905060008411156139a15761396584826140bd565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828660405161399893929190615539565b60405180910390a15b600084866139af9190614dae565b1115613b215760006001905060006001905060006018600301546018600201546139d99190614de2565b60186002015485876139eb9190614dae565b6139f59190615120565b6139ff9190615214565b9050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613a47906155a1565b60006040518083038185875af1925050503d8060008114613a84576040519150601f19603f3d011682016040523d82523d6000602084013e613a89565b606091505b505080935050602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ad5906155a1565b60006040518083038185875af1925050503d8060008114613b12576040519150601f19603f3d011682016040523d82523d6000602084013e613b17565b606091505b5050809250505050505b505050505b6000602460146101000a81548160ff02191690831515021790555050565b6000602d60009054906101000a900460ff1615613d6e57613b6485610af1565b80613b745750613b7384610af1565b5b15613bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bab90615602565b60405180910390fd5b602d60019054906101000a900460ff16613c3a57613bd28585614170565b602d60019054906101000a900460ff16158015613bf55750613bf4858561366d565b5b15613c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2c90615694565b60405180910390fd5b613d6d565b6000602f54118015613c955750600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613ca75750613ca6858561366d565b5b15613d6c57603254602f5443613cbd9190614dae565b1015613d6b576001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060336000815480929190613d2e906156b4565b91905055507f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e584604051613d62919061478d565b60405180910390a15b5b5b5b82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613dbd9190614dae565b92505081905550600082613dd15783613ddd565b613ddc868686614319565b5b905080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e2e9190614de2565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e9291906149f6565b60405180910390a36001915050949350505050565b6000600267ffffffffffffffff811115613ec457613ec36156fd565b5b604051908082528060200260200182016040528015613ef25781602001602082028036833780820191505090505b5090503081600081518110613f0a57613f0961572c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fd5919061518f565b81600181518110613fe957613fe861572c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614087959493929190615854565b600060405180830381600087803b1580156140a157600080fd5b505af11580156140b5573d6000803e3d6000fd5b505050505050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614126969594939291906158ae565b60606040518083038185885af1158015614144573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141699190615924565b5050505050565b602d60019054906101000a900460ff16156141c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b7906159e9565b60405180910390fd5b6141ca828261366d565b1580156142245750602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156143155760006032541461423f5743602f81905550614247565b43602f819055505b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602d60016101000a81548160ff021916908315150217905550426030819055506001602460156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159600160405161430c919061499f565b60405180910390a15b5050565b600080602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561440a57601c60010160009054906101000a900460ff16156143fc5742601c60000154600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143db9190614de2565b11156143ee5760106003015490506143f7565b60106001015490505b614405565b60106001015490505b614477565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561446d576010600001549050614476565b60106002015490505b5b600061271060186003015460186002015460186000015460186001015461449e9190614de2565b6144a89190614de2565b6144b29190614de2565b60186001015484876144c49190615120565b6144ce9190615120565b6144d89190615214565b6144e29190615214565b905060008161271084876144f69190615120565b6145009190615214565b61450a9190614dae565b9050816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461455d9190614de2565b9250508190555080600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546145b39190614de2565b9250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161461991906149f6565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161467e91906149f6565b60405180910390a38181866146939190614dae565b61469d9190614dae565b93505050509392505050565b8280546146b590614d4d565b90600052602060002090601f0160209004810192826146d7576000855561471e565b82601f106146f057805160ff191683800117855561471e565b8280016001018555821561471e579182015b8281111561471d578251825591602001919060010190614702565b5b50905061472b919061472f565b5090565b5b80821115614748576000816000905550600101614730565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147778261474c565b9050919050565b6147878161476c565b82525050565b60006020820190506147a2600083018461477e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147e25780820151818401526020810190506147c7565b838111156147f1576000848401525b50505050565b6000601f19601f8301169050919050565b6000614813826147a8565b61481d81856147b3565b935061482d8185602086016147c4565b614836816147f7565b840191505092915050565b6000602082019050818103600083015261485b8184614808565b905092915050565b6000819050919050565b600061488861488361487e8461474c565b614863565b61474c565b9050919050565b600061489a8261486d565b9050919050565b60006148ac8261488f565b9050919050565b6148bc816148a1565b82525050565b60006020820190506148d760008301846148b3565b92915050565b600080fd5b6148eb8161476c565b81146148f657600080fd5b50565b600081359050614908816148e2565b92915050565b6000819050919050565b6149218161490e565b811461492c57600080fd5b50565b60008135905061493e81614918565b92915050565b6000806040838503121561495b5761495a6148dd565b5b6000614969858286016148f9565b925050602061497a8582860161492f565b9150509250929050565b60008115159050919050565b61499981614984565b82525050565b60006020820190506149b46000830184614990565b92915050565b6000602082840312156149d0576149cf6148dd565b5b60006149de848285016148f9565b91505092915050565b6149f08161490e565b82525050565b6000602082019050614a0b60008301846149e7565b92915050565b600080600060608486031215614a2a57614a296148dd565b5b6000614a38868287016148f9565b9350506020614a49868287016148f9565b9250506040614a5a8682870161492f565b9150509250925092565b6000614a6f8261474c565b9050919050565b614a7f81614a64565b82525050565b6000602082019050614a9a6000830184614a76565b92915050565b600060ff82169050919050565b614ab681614aa0565b82525050565b6000602082019050614ad16000830184614aad565b92915050565b6000608082019050614aec60008301876149e7565b614af960208301866149e7565b614b0660408301856149e7565b614b1360608301846149e7565b95945050505050565b614b2581614984565b8114614b3057600080fd5b50565b600081359050614b4281614b1c565b92915050565b60008060408385031215614b5f57614b5e6148dd565b5b6000614b6d858286016148f9565b9250506020614b7e85828601614b33565b9150509250929050565b600060208284031215614b9e57614b9d6148dd565b5b6000614bac8482850161492f565b91505092915050565b600060208284031215614bcb57614bca6148dd565b5b6000614bd984828501614b33565b91505092915050565b614beb81614a64565b8114614bf657600080fd5b50565b600081359050614c0881614be2565b92915050565b60008060408385031215614c2557614c246148dd565b5b6000614c3385828601614bf9565b9250506020614c4485828601614bf9565b9150509250929050565b6000604082019050614c6360008301856149e7565b614c706020830184614990565b9392505050565b60008060408385031215614c8e57614c8d6148dd565b5b6000614c9c858286016148f9565b9250506020614cad858286016148f9565b9150509250929050565b60008060008060808587031215614cd157614cd06148dd565b5b6000614cdf8782880161492f565b9450506020614cf08782880161492f565b9350506040614d018782880161492f565b9250506060614d128782880161492f565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d6557607f821691505b60208210811415614d7957614d78614d1e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db98261490e565b9150614dc48361490e565b925082821015614dd757614dd6614d7f565b5b828203905092915050565b6000614ded8261490e565b9150614df88361490e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e2d57614e2c614d7f565b5b828201905092915050565b7f43616c6c657220213d206f776e65722e00000000000000000000000000000000600082015250565b6000614e6e6010836147b3565b9150614e7982614e38565b602082019050919050565b60006020820190508181036000830152614e9d81614e61565b9050919050565b7f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660008201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000602082015250565b6000614f00603d836147b3565b9150614f0b82614ea4565b604082019050919050565b60006020820190508181036000830152614f2f81614ef3565b9050919050565b7f436f6e747261637420616c726561647920696e697469616c697a65642e000000600082015250565b6000614f6c601d836147b3565b9150614f7782614f36565b602082019050919050565b60006020820190508181036000830152614f9b81614f5f565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115614ff957808604811115614fd557614fd4614d7f565b5b6001851615614fe45780820291505b8081029050614ff285614fa2565b9450614fb9565b94509492505050565b60008261501257600190506150ce565b8161502057600090506150ce565b816001811461503657600281146150405761506f565b60019150506150ce565b60ff84111561505257615051614d7f565b5b8360020a91508482111561506957615068614d7f565b5b506150ce565b5060208310610133831016604e8410600b84101617156150a45782820a90508381111561509f5761509e614d7f565b5b6150ce565b6150b18484846001614faf565b925090508184048111156150c8576150c7614d7f565b5b81810290505b9392505050565b60006150e08261490e565b91506150eb83614aa0565b92506151187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615002565b905092915050565b600061512b8261490e565b91506151368361490e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561516f5761516e614d7f565b5b828202905092915050565b600081519050615189816148e2565b92915050565b6000602082840312156151a5576151a46148dd565b5b60006151b38482850161517a565b91505092915050565b60006040820190506151d1600083018561477e565b6151de602083018461477e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061521f8261490e565b915061522a8361490e565b92508261523a576152396151e5565b5b828204905092915050565b7f4f6e65207765656b20636f6f6c646f776e2e0000000000000000000000000000600082015250565b600061527b6012836147b3565b915061528682615245565b602082019050919050565b600060208201905081810360008301526152aa8161526e565b9050919050565b7f4572726f722e0000000000000000000000000000000000000000000000000000600082015250565b60006152e76006836147b3565b91506152f2826152b1565b602082019050919050565b60006020820190508181036000830152615316816152da565b9050919050565b7f45524332303a205a65726f204164647265737300000000000000000000000000600082015250565b60006153536013836147b3565b915061535e8261531d565b602082019050919050565b6000602082019050818103600083015261538281615346565b9050919050565b7f45524332303a205a65726f20616464726573732e000000000000000000000000600082015250565b60006153bf6014836147b3565b91506153ca82615389565b602082019050919050565b600060208201905081810360008301526153ee816153b2565b9050919050565b7f4d757374203e302e000000000000000000000000000000000000000000000000600082015250565b600061542b6008836147b3565b9150615436826153f5565b602082019050919050565b6000602082019050818103600083015261545a8161541e565b9050919050565b7f4578636565647320746865206d61785478416d6f756e742e0000000000000000600082015250565b60006154976018836147b3565b91506154a282615461565b602082019050919050565b600060208201905081810360008301526154c68161548a565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000615503601a836147b3565b915061550e826154cd565b602082019050919050565b60006020820190508181036000830152615532816154f6565b9050919050565b600060608201905061554e60008301866149e7565b61555b60208301856149e7565b61556860408301846149e7565b949350505050565b600081905092915050565b50565b600061558b600083615570565b91506155968261557b565b600082019050919050565b60006155ac8261557e565b9150819050919050565b7f536e697065722072656a65637465642e00000000000000000000000000000000600082015250565b60006155ec6010836147b3565b91506155f7826155b6565b602082019050919050565b6000602082019050818103600083015261561b816155df565b9050919050565b7f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060008201527f74696d652e000000000000000000000000000000000000000000000000000000602082015250565b600061567e6025836147b3565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b60006156bf8261490e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156f2576156f1614d7f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061578061577b6157768461575b565b614863565b61490e565b9050919050565b61579081615765565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157cb8161476c565b82525050565b60006157dd83836157c2565b60208301905092915050565b6000602082019050919050565b600061580182615796565b61580b81856157a1565b9350615816836157b2565b8060005b8381101561584757815161582e88826157d1565b9750615839836157e9565b92505060018101905061581a565b5085935050505092915050565b600060a08201905061586960008301886149e7565b6158766020830187615787565b818103604083015261588881866157f6565b9050615897606083018561477e565b6158a460808301846149e7565b9695505050505050565b600060c0820190506158c3600083018961477e565b6158d060208301886149e7565b6158dd6040830187615787565b6158ea6060830186615787565b6158f7608083018561477e565b61590460a08301846149e7565b979650505050505050565b60008151905061591e81614918565b92915050565b60008060006060848603121561593d5761593c6148dd565b5b600061594b8682870161590f565b935050602061595c8682870161590f565b925050604061596d8682870161590f565b9150509250925092565b7f4c697175696469747920616c726561647920616464656420616e64206d61726b60008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b60006159d36023836147b3565b91506159de82615977565b604082019050919050565b60006020820190508181036000830152615a02816159c6565b905091905056fea2646970667358221220cb6d0c5147acbcca190de5af1243b65d225bcb2f935ea2c517bfa57bd33acb1b64736f6c634300080b0033

Deployed Bytecode Sourcemap

3908:21559:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6417:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10469:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6112:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11082:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15614:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10204:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11815:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6664:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10293:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12129:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4947:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;6563:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6154:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6797:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8879:763;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12585:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7193:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11568:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15130:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10782:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9650:195;;;;;;;;;;;;;:::i;:::-;;13651:1471;;;;;;;;;;;;;:::i;:::-;;13231:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15728:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10555:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4371:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8792:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10379:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11696:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12352:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10907:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5494:109;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15440:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18133:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15274:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17904:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5733:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;10641:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7467:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5207:101;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;12722:501;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17607:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6417:73;6448:42;6417:73;:::o;10469:80::-;10517:13;10541:5;10534:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10469:80;:::o;6112:35::-;;;;;;;;;;;;;:::o;11082:161::-;11157:4;11174:39;11183:12;:10;:12::i;:::-;11197:7;11206:6;11174:8;:39::i;:::-;11231:4;11224:11;;11082:161;;;;:::o;15614:106::-;15670:4;15694:9;:18;15704:7;15694:18;;;;;;;;;;;;;;;;;;;;;;;;;15687:25;;15614:106;;;:::o;10204:83::-;10259:7;10277;;10270:14;;10204:83;:::o;11815:306::-;11915:4;11971:17;11936:11;:19;11948:6;11936:19;;;;;;;;;;;;;;;:31;11956:10;11936:31;;;;;;;;;;;;;;;;:52;11932:126;;12040:6;12005:11;:19;12017:6;12005:19;;;;;;;;;;;;;;;:31;12025:10;12005:31;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;11932:126;12077:36;12087:6;12095:9;12106:6;12077:9;:36::i;:::-;12070:43;;11815:306;;;;;:::o;6664:92::-;;;;;;;;;;;;;:::o;10293:80::-;10345:5;10361:9;;;;;;;;;;;10354:16;;10293:80;:::o;12129:215::-;12217:4;12234:80;12243:12;:10;:12::i;:::-;12257:7;12303:10;12266:11;:25;12278:12;:10;:12::i;:::-;12266:25;;;;;;;;;;;;;;;:34;12292:7;12266:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12234:8;:80::i;:::-;12332:4;12325:11;;12129:215;;;;:::o;4947:93::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;6563:94::-;;;;;;;;;;;;;:::o;6154:21::-;;;;;;;;;;;;;:::o;6797:41::-;;;;;;;;;;;;;:::o;8879:763::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;8980:1:::1;8960:22;;:8;:22;;;;8952:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;6448:42;9067:16;;:8;:16;;;;9059:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;9160:34;9180:6;::::0;::::1;;;;;;;;9188:5;9160:19;:34::i;:::-;9205:35;9225:8;9235:4;9205:19;:35::i;:::-;9294:6;::::0;::::1;;;;;;;;9265:36;;:17;;;;;;;;;;;:36;;;9261:92;;;9344:8;9316:17;;:37;;;;;;;;;;;;;;;;;;9261:92;9406:17;9416:6;::::0;::::1;;;;;;;;9406:9;:17::i;:::-;9374:11;:19;9386:6:::0;::::1;;;;;;;;;;9374:19;;;;;;;;;;;;;;;:29;9394:8;9374:29;;;;;;;;;;;;;;;:49;;;;9457:1;9437:17;9447:6;::::0;::::1;;;;;;;;9437:9;:17::i;:::-;:21;9434:99;;;9475:46;9485:6;::::0;::::1;;;;;;;;9493:8;9503:17;9513:6;::::0;::::1;;;;;;;;9503:9;:17::i;:::-;9475:9;:46::i;:::-;;9434:99;9562:8;9553:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;9615:8;9586:38;;9607:6;::::0;::::1;;;;;;;;9586:38;;;;;;;;;;;;8879:763:::0;:::o;12585:125::-;12650:4;12674:19;:28;12694:7;12674:28;;;;;;;;;;;;;;;;;;;;;;;;;12667:35;;12585:125;;;:::o;7193:36::-;;;;;;;;;;;;;:::o;11568:120::-;11621:4;11645:35;11653:7;11662:17;11645:7;:35::i;:::-;11638:42;;11568:120;;;:::o;15130:134::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;15249:7:::1;15218:19;:28;15238:7;15218:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;15130:134:::0;;:::o;10782:117::-;10848:7;10875;:16;10883:7;10875:16;;;;;;;;;;;;;;;;10868:23;;10782:117;;;:::o;9650:195::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;9717:34:::1;9737:6;::::0;::::1;;;;;;;;9745:5;9717:19;:34::i;:::-;9779:1;9762:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9834:1;9797:40;;9818:6;::::0;::::1;;;;;;;;9797:40;;;;;;;;;;;;9650:195::o:0;13651:1471::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;13719:13:::1;;;;;;;;;;;13718:14;13710:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;13802:1;13785:13;;:18;13777:27;;;::::0;::::1;;13825:23;;;;;;;;;;;;;;;;::::0;:5:::1;:23;;;;;;;;;;;;:::i;:::-;;13859:17;;;;;;;;;;;;;;;;::::0;:7:::1;:17;;;;;;;;;;;;:::i;:::-;;13906:15;13889:14;:32;;;;13944:1;13932:9;;:13;;;;;;;;;;;;;;;;;;13987:9;;;;;;;;;;;13983:2;:13;;;;:::i;:::-;13966:14;;:30;;;;:::i;:::-;13956:7;:40;;;;6362:42;14009:9;;:46;;;;;;;;;;;;;;;;;;14093:9;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14075:49;;;14125:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14151:4;14075:82;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14066:6;;:91;;;;;;;;;;;;;;;;;;14186:4;14168:7;:15;14176:6;;;;;;;;;;;14168:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;14250:17;14201:11;:26;14221:4;14201:26;;;;;;;;;;;;;;;:46;14236:9;;;;;;;;;;;14201:46;;;;;;;;;;;;;;;:66;;;;14295:1;14280:12;:16;;;;14323:3;14308:12;:18;;;;14379:12;;14363;;14353:7;;:22;;;;:::i;:::-;14352:39;;;;:::i;:::-;14337:12;:54;;;;14431:1;14412:16;:20;;;;14463:3;14444:16;:22;;;;14525:16;;14505;;14495:7;;:26;;;;:::i;:::-;14494:47;;;;:::i;:::-;14477:14;:64;;;;14594:6;14589:1;14579:7;;:11;;;;:::i;:::-;14578:22;;;;:::i;:::-;14562:13;:38;;;;14640:5;14635:1;14625:7;;:11;;;;:::i;:::-;14624:21;;;;:::i;:::-;14611:10;:34;;;;14689:4;14658:19;:28;14678:7;:5;:7::i;:::-;14658:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;14741:4;14704:19;:34;14732:4;14704:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;14784:4;14756:19;:25;6448:42;14756:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;14828:4;14799:17;:26;14817:7;:5;:7::i;:::-;14799:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;14847:42;6362;14871:17;14847:7;:42::i;:::-;;14900:35;14908:7;:5;:7::i;:::-;14917:17;14900:7;:35::i;:::-;;14966:4;14950:13;;:20;;;;;;;;;;;;;;;;;;15000:7;;14981;:16;14989:7;:5;:7::i;:::-;14981:16;;;;;;;;;;;;;;;:26;;;;15018:42;15027:7;:5;:7::i;:::-;6362:42;15052:7;;15018:8;:42::i;:::-;15097:7;:5;:7::i;:::-;15076:38;;15093:1;15076:38;;;15106:7;;15076:38;;;;;;:::i;:::-;;;;;;;;13651:1471::o:0;13231:410::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;13323:5:::1;13312:16;;:7;:16;;;13308:326;;;13361:5;13345:7;:13;13353:4;13345:13;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;13308:326;;;13424:1;13403:17;;:22;13399:139;;13492:7;13472:17;;13454:15;:35;;;;:::i;:::-;:45;13446:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;13399:139;13568:4;13552:7;:13;13560:4;13552:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;13607:15;13587:17;:35;;;;13308:326;13231:410:::0;;:::o;15728:188::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;15827:1:::1;15810:13;;:18;15801:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15868:12;15852:13;:28;;;;15907:1;15891:13;:17;;;;15728:188:::0;:::o;10555:80::-;10607:7;10625;:5;:7::i;:::-;10618:14;;10555:80;:::o;4371:68::-;;;;;;;;;;;;;;;;;;;;;;:::o;8792:79::-;8830:7;8857:6;;;;;;;;;;;8850:13;;8792:79;:::o;10379:84::-;10429:13;10453:7;10446:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10379:84;:::o;11696:111::-;11755:7;11782:8;:17;11791:7;11782:17;;;;;;;;;;;;;;;;11775:24;;11696:111;;;:::o;12352:225::-;12445:4;12462:85;12471:12;:10;:12::i;:::-;12485:7;12531:15;12494:11;:25;12506:12;:10;:12::i;:::-;12494:25;;;;;;;;;;;;;;;:34;12520:7;12494:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;12462:8;:85::i;:::-;12565:4;12558:11;;12352:225;;;;:::o;10907:167::-;10985:4;11002:42;11012:12;:10;:12::i;:::-;11026:9;11037:6;11002:9;:42::i;:::-;;11062:4;11055:11;;10907:167;;;;:::o;5494:109::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;15440:166::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;15593:5:::1;15538:35;:52;15574:15;15538:52;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;15440:166:::0;:::o;18133:171::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;18234:8:::1;18210:21;;:32;;;;;;;;;;;;;;;;;;18258:38;18287:8;18258:38;;;;;;:::i;:::-;;;;;;;;18133:171:::0;:::o;15274:158::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;15420:4:::1;15365:35;:52;15401:15;15365:52;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;15274:158:::0;:::o;17904:221::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;18048:16:::1;18020:17;;:45;;;;;;;;;;;;;;;;;;18102:14;18076:15;;:41;;;;;;;;;;;;;;;;;;17904:221:::0;;:::o;5733:88::-;;;;;;;;;;;;;;;;;;;;;;;:::o;10641:133::-;10725:7;10743:11;:19;10755:6;10743:19;;;;;;;;;;;;;;;:28;10763:7;10743:28;;;;;;;;;;;;;;;;10736:35;;10641:133;;;;:::o;7467:32::-;;;;:::o;5207:101::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;12722:501::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;12793:29:::1;12844:9;12793:61;;12865:16;12902:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12884:47;;;12940:4;12947:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12884:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12865:100;;13000:1;12980:22;;:8;:22;;;12976:207;;;13046:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13028:50;;;13087:4;13094:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13028:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13019:6;;:93;;;;;;;;;;;;;;;;;;12976:207;;;13163:8;13154:6;;:17;;;;;;;;;;;;;;;;;;12976:207;13205:10;13193:9;;:22;;;;;;;;;;;;;;;;;;12782:441;;12722:501:::0;:::o;17607:289::-;8076:12;:10;:12::i;:::-;8066:22;;:6;;;;;;;;;;:22;;;8058:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;17807:16:::1;17787;17777:7;;:26;;;;:::i;:::-;17776:47;;;;:::i;:::-;17760:13;:63;;;;17875:13;17858;17848:7;;:23;;;;:::i;:::-;17847:41;;;;:::i;:::-;17834:10;:54;;;;17607:289:::0;;;;:::o;372:107::-;417:15;460:10;445:26;;372:107;:::o;11251:309::-;11363:1;11345:20;;:6;:20;;;;11337:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;11427:1;11408:21;;:7;:21;;;;11400:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;11497:6;11466:11;:19;11478:6;11466:19;;;;;;;;;;;;;;;:28;11486:7;11466:28;;;;;;;;;;;;;;;:37;;;;11536:7;11519:33;;11528:6;11519:33;;;11545:6;11519:33;;;;;;:::i;:::-;;;;;;;;11251:309;;;:::o;18643:1921::-;18722:4;18763:1;18747:18;;:4;:18;;;;18739:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;18823:1;18809:16;;:2;:16;;;;18801:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18878:1;18869:6;:10;18861:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;18906:20;18917:4;18923:2;18906:10;:20::i;:::-;18903:891;;;18947:15;;;;;;;;;;;18943:373;;;18987:7;:13;18995:4;18987:13;;;;;;;;;;;;;;;;;;;;;;;;;18983:318;;;19049:12;19032:9;:13;19042:2;19032:13;;;;;;;;;;;;;;;;:29;;19024:38;;;;;;19101:12;19085:9;:13;19095:2;19085:13;;;;;;;;;;;;;;;:28;;;;18983:318;;;19211:12;19192:9;:15;19202:4;19192:15;;;;;;;;;;;;;;;;:31;;19184:40;;;;;;19265:12;19247:9;:15;19257:4;19247:15;;;;;;;;;;;;;;;:30;;;;18983:318;18943:373;19335:35;:41;19371:4;19335:41;;;;;;;;;;;;;;;;;;;;;;;;;:84;;;;19380:35;:39;19416:2;19380:39;;;;;;;;;;;;;;;;;;;;;;;;;19335:84;19330:439;;19444:7;:13;19452:4;19444:13;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;19461:7;:11;19469:2;19461:11;;;;;;;;;;;;;;;;;;;;;;;;;19444:28;19441:130;;;19510:12;;19500:6;:22;;19492:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;19441:130;6362:42;19592:20;;:2;:20;;;;:36;;;;;19617:7;:11;19625:2;19617:11;;;;;;;;;;;;;;;;;;;;;;;;;19616:12;19592:36;19589:163;;;19687:14;;19677:6;19661:13;19671:2;19661:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;19653:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19589:163;19330:439;18903:891;19825:1;19810:7;:11;19818:2;19810:11;;;;;;;;;;;;;;;;:16;19806:79;;;19858:15;19843:8;:12;19852:2;19843:12;;;;;;;;;;;;;;;:30;;;;19806:79;19897:12;19912:4;19897:19;;19930;:25;19950:4;19930:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;19959:19;:23;19979:2;19959:23;;;;;;;;;;;;;;;;;;;;;;;;;19930:52;19927:98;;;20008:5;19998:15;;19927:98;20041:7;:11;20049:2;20041:11;;;;;;;;;;;;;;;;;;;;;;;;;20037:457;;;20074:16;;;;;;;;;;;20073:17;:59;;;;;20111:21;;;;;;;;;;;20073:59;20069:408;;;20167:28;20198:24;20216:4;20198:9;:24::i;:::-;20167:55;;20269:13;;20245:20;:37;20241:221;;20334:10;;20310:20;:34;20307:77;;20371:10;;20348:33;;20307:77;20406:36;20421:20;20406:14;:36::i;:::-;20241:221;20148:329;20069:408;20037:457;20512:44;20530:4;20536:2;20540:6;20548:7;20512:17;:44::i;:::-;20505:51;;;18643:1921;;;;;:::o;18312:323::-;18380:4;18412:7;:5;:7::i;:::-;18404:15;;:4;:15;;;;:45;;;;;18442:7;:5;:7::i;:::-;18436:13;;:2;:13;;;;18404:45;:84;;;;;18467:17;:21;18485:2;18467:21;;;;;;;;;;;;;;;;;;;;;;;;;18466:22;18404:84;:125;;;;;18506:17;:23;18524:4;18506:23;;;;;;;;;;;;;;;;;;;;;;;;;18505:24;18404:125;:152;;;;;6448:42;18546:10;;:2;:10;;;;18404:152;:185;;;;;18587:1;18573:16;;:2;:16;;;;18404:185;:223;;;;;18622:4;18606:21;;:4;:21;;;;18404:223;18397:230;;18312:323;;;;:::o;20572:1308::-;7959:4;7940:16;;:23;;;;;;;;;;;;;;;;;;20719:1:::1;20700:6;:15;;;20680:6;:17;;;20661:6;:16;;;:36;;;;:::i;:::-;:54;;;;:::i;:::-;:59;20657:85;;;20735:7;;20657:85;20752:17;20878:1;20857:6;:15;;;20837:6;:17;;;20818:6;:16;;;:36;;;;:::i;:::-;:54;;;;:::i;:::-;20797:6;:16;;;20774:20;:39;;;;:::i;:::-;20773:100;;;;:::i;:::-;20772:107;;;;:::i;:::-;20752:127;;20892:20;20938:9;20915:20;:32;;;;:::i;:::-;20892:55;;20958:30;20975:12;20958:16;:30::i;:::-;21001:22;21026:21;21001:46;;21058:24;21185:1;21164:6;:15;;;21144:6;:17;;;21125:6;:16;;;:36;;;;:::i;:::-;:54;;;;:::i;:::-;21104:6;:16;;;21087:14;:33;;;;:::i;:::-;21086:94;;;;:::i;:::-;21085:101;;;;:::i;:::-;21058:128;;21215:1;21203:9;:13;21199:161;;;21233:41;21246:9;21257:16;21233:12;:41::i;:::-;21294:54;21309:9;21320:16;21338:9;21294:54;;;;;;;;:::i;:::-;;;;;;;;21199:161;21409:1;21397:9;21374:20;:32;;;;:::i;:::-;:36;21370:503;;;21427:24;21454:4;21427:31;;21473:18;21494:4;21473:25;;21513:22;21620:6;:15;;;21600:6;:17;;;:35;;;;:::i;:::-;21578:6;:17;;;21558:16;21541:14;:33;;;;:::i;:::-;21540:55;;;;:::i;:::-;21539:97;;;;:::i;:::-;21513:124;;21695:17;;;;;;;;;;;21687:31;;21726:17;21687:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21662:86;;;;;21790:15;;;;;;;;;;;21782:29;;21819:21;21782:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21763:82;;;;;21412:461;;;21370:503;20646:1234;;;;7974:1;8005:5:::0;7986:16;;:24;;;;;;;;;;;;;;;;;;20572:1308;:::o;23269:1181::-;23369:4;23390:16;;;;;;;;;;;23386:819;;;23426:14;23435:4;23426:8;:14::i;:::-;:30;;;;23444:12;23453:2;23444:8;:12::i;:::-;23426:30;23422:97;;;23477:26;;;;;;;;;;:::i;:::-;;;;;;;;23422:97;23540:16;;;;;;;;;;;23535:659;;23577:28;23596:4;23602:2;23577:18;:28::i;:::-;23629:16;;;;;;;;;;;23628:17;:41;;;;;23649:20;23660:4;23666:2;23649:10;:20::i;:::-;23628:41;23624:137;;;23694:47;;;;;;;;;;:::i;:::-;;;;;;;;23624:137;23535:659;;;23820:1;23805:12;;:16;:55;;;;;23847:7;:13;23855:4;23847:13;;;;;;;;;;;;;;;;;;;;;;;;;23805:55;:101;;;;;23886:20;23897:4;23903:2;23886:10;:20::i;:::-;23805:101;23801:378;;;23983:13;;23968:12;;23953;:27;;;;:::i;:::-;:43;23949:211;;;24041:4;24025:9;:13;24035:2;24025:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;24072:13;;:16;;;;;;;;;:::i;:::-;;;;;;24120;24133:2;24120:16;;;;;;:::i;:::-;;;;;;;;23949:211;23801:378;23535:659;23386:819;24234:6;24217:7;:13;24225:4;24217:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;24251:22;24277:7;24276:48;;24318:6;24276:48;;;24288:27;24298:4;24304:2;24308:6;24288:9;:27::i;:::-;24276:48;24251:73;;24354:14;24339:7;:11;24347:2;24339:11;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;24401:2;24386:34;;24395:4;24386:34;;;24405:14;24386:34;;;;;;:::i;:::-;;;;;;;;24438:4;24431:11;;;23269:1181;;;;;;:::o;21888:417::-;21955:21;21993:1;21979:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21955:40;;22024:4;22006;22011:1;22006:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22050:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22040:4;22045:1;22040:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;22079:9;;;;;;;;;;;:60;;;22154:11;22180:1;22224:4;22251;22271:15;22079:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21944:361;21888:417;:::o;22313:332::-;22394:9;;;;;;;;;;;:25;;;22427:9;22460:4;22480:11;22506:1;22549;6448:42;22611:15;22394:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22313:332;;:::o;22653:608::-;22735:16;;;;;;;;;;;22734:17;22726:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22807:20;22818:4;22824:2;22807:10;:20::i;:::-;22806:21;:37;;;;;22837:6;;;;;;;;;;;22831:12;;:2;:12;;;22806:37;22802:452;;;22881:1;22864:13;;:18;22860:154;;22918:12;22903;:27;;;;22860:154;;;22986:12;22971;:27;;;;22860:154;23056:4;23030:17;:23;23048:4;23030:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;23094:4;23075:16;;:23;;;;;;;;;;;;;;;;;;23128:15;23113:12;:30;;;;23184:4;23160:21;;:28;;;;;;;;;;;;;;;;;;23208:34;23237:4;23208:34;;;;;;:::i;:::-;;;;;;;;22802:452;22653:608;;:::o;24458:1006::-;24537:7;24557:18;24598:6;;;;;;;;;;;24592:12;;:2;:12;;;24588:399;;;24625:5;:13;;;;;;;;;;;;24621:236;;;24696:15;24679:5;:14;;;24662:8;:14;24671:4;24662:14;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;:49;24658:139;;;24727:4;:15;;;24714:28;;24658:139;;;24783:4;:12;;;24770:25;;24658:139;24621:236;;;24843:4;:12;;;24832:23;;24621:236;24588:399;;;24902:6;;;;;;;;;;;24894:14;;:4;:14;;;24890:97;;;24924:4;:11;;;24911:24;;24890:97;;;24969:4;:16;;;24956:29;;24890:97;24588:399;24999:15;5920:5;25109:6;:15;;;25089:6;:17;;;25070:6;:16;;;25056:6;:11;;;:30;;;;:::i;:::-;:50;;;;:::i;:::-;:68;;;;:::i;:::-;25040:6;:11;;;25027:10;25018:6;:19;;;;:::i;:::-;:33;;;;:::i;:::-;25017:109;;;;:::i;:::-;:128;;;;:::i;:::-;24999:146;;25156:17;25219:7;5920:5;25186:10;25177:6;:19;;;;:::i;:::-;:38;;;;:::i;:::-;25176:50;;;;:::i;:::-;25156:70;;25254:7;25237;:13;6448:42;25237:13;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;25299:9;25272:7;:22;25288:4;25272:22;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;6448:42;25325:29;;25334:4;25325:29;;;25346:7;25325:29;;;;;;:::i;:::-;;;;;;;;25393:4;25370:40;;25379:4;25370:40;;;25400:9;25370:40;;;;;;:::i;:::-;;;;;;;;25449:7;25437:9;25428:6;:18;;;;:::i;:::-;:28;;;;:::i;:::-;25421:35;;;;;24458:1006;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;1983:60::-;2011:3;2032:5;2025:12;;1983:60;;;:::o;2049:142::-;2099:9;2132:53;2150:34;2159:24;2177:5;2159:24;:::i;:::-;2150:34;:::i;:::-;2132:53;:::i;:::-;2119:66;;2049:142;;;:::o;2197:126::-;2247:9;2280:37;2311:5;2280:37;:::i;:::-;2267:50;;2197:126;;;:::o;2329:152::-;2405:9;2438:37;2469:5;2438:37;:::i;:::-;2425:50;;2329:152;;;:::o;2487:183::-;2600:63;2657:5;2600:63;:::i;:::-;2595:3;2588:76;2487:183;;:::o;2676:274::-;2795:4;2833:2;2822:9;2818:18;2810:26;;2846:97;2940:1;2929:9;2925:17;2916:6;2846:97;:::i;:::-;2676:274;;;;:::o;3037:117::-;3146:1;3143;3136:12;3283:122;3356:24;3374:5;3356:24;:::i;:::-;3349:5;3346:35;3336:63;;3395:1;3392;3385:12;3336:63;3283:122;:::o;3411:139::-;3457:5;3495:6;3482:20;3473:29;;3511:33;3538:5;3511:33;:::i;:::-;3411:139;;;;:::o;3556:77::-;3593:7;3622:5;3611:16;;3556:77;;;:::o;3639:122::-;3712:24;3730:5;3712:24;:::i;:::-;3705:5;3702:35;3692:63;;3751:1;3748;3741:12;3692:63;3639:122;:::o;3767:139::-;3813:5;3851:6;3838:20;3829:29;;3867:33;3894:5;3867:33;:::i;:::-;3767:139;;;;:::o;3912:474::-;3980:6;3988;4037:2;4025:9;4016:7;4012:23;4008:32;4005:119;;;4043:79;;:::i;:::-;4005:119;4163:1;4188:53;4233:7;4224:6;4213:9;4209:22;4188:53;:::i;:::-;4178:63;;4134:117;4290:2;4316:53;4361:7;4352:6;4341:9;4337:22;4316:53;:::i;:::-;4306:63;;4261:118;3912:474;;;;;:::o;4392:90::-;4426:7;4469:5;4462:13;4455:21;4444:32;;4392:90;;;:::o;4488:109::-;4569:21;4584:5;4569:21;:::i;:::-;4564:3;4557:34;4488:109;;:::o;4603:210::-;4690:4;4728:2;4717:9;4713:18;4705:26;;4741:65;4803:1;4792:9;4788:17;4779:6;4741:65;:::i;:::-;4603:210;;;;:::o;4819:329::-;4878:6;4927:2;4915:9;4906:7;4902:23;4898:32;4895:119;;;4933:79;;:::i;:::-;4895:119;5053:1;5078:53;5123:7;5114:6;5103:9;5099:22;5078:53;:::i;:::-;5068:63;;5024:117;4819:329;;;;:::o;5154:118::-;5241:24;5259:5;5241:24;:::i;:::-;5236:3;5229:37;5154:118;;:::o;5278:222::-;5371:4;5409:2;5398:9;5394:18;5386:26;;5422:71;5490:1;5479:9;5475:17;5466:6;5422:71;:::i;:::-;5278:222;;;;:::o;5506:619::-;5583:6;5591;5599;5648:2;5636:9;5627:7;5623:23;5619:32;5616:119;;;5654:79;;:::i;:::-;5616:119;5774:1;5799:53;5844:7;5835:6;5824:9;5820:22;5799:53;:::i;:::-;5789:63;;5745:117;5901:2;5927:53;5972:7;5963:6;5952:9;5948:22;5927:53;:::i;:::-;5917:63;;5872:118;6029:2;6055:53;6100:7;6091:6;6080:9;6076:22;6055:53;:::i;:::-;6045:63;;6000:118;5506:619;;;;;:::o;6131:104::-;6176:7;6205:24;6223:5;6205:24;:::i;:::-;6194:35;;6131:104;;;:::o;6241:142::-;6344:32;6370:5;6344:32;:::i;:::-;6339:3;6332:45;6241:142;;:::o;6389:254::-;6498:4;6536:2;6525:9;6521:18;6513:26;;6549:87;6633:1;6622:9;6618:17;6609:6;6549:87;:::i;:::-;6389:254;;;;:::o;6649:86::-;6684:7;6724:4;6717:5;6713:16;6702:27;;6649:86;;;:::o;6741:112::-;6824:22;6840:5;6824:22;:::i;:::-;6819:3;6812:35;6741:112;;:::o;6859:214::-;6948:4;6986:2;6975:9;6971:18;6963:26;;6999:67;7063:1;7052:9;7048:17;7039:6;6999:67;:::i;:::-;6859:214;;;;:::o;7079:553::-;7256:4;7294:3;7283:9;7279:19;7271:27;;7308:71;7376:1;7365:9;7361:17;7352:6;7308:71;:::i;:::-;7389:72;7457:2;7446:9;7442:18;7433:6;7389:72;:::i;:::-;7471;7539:2;7528:9;7524:18;7515:6;7471:72;:::i;:::-;7553;7621:2;7610:9;7606:18;7597:6;7553:72;:::i;:::-;7079:553;;;;;;;:::o;7638:116::-;7708:21;7723:5;7708:21;:::i;:::-;7701:5;7698:32;7688:60;;7744:1;7741;7734:12;7688:60;7638:116;:::o;7760:133::-;7803:5;7841:6;7828:20;7819:29;;7857:30;7881:5;7857:30;:::i;:::-;7760:133;;;;:::o;7899:468::-;7964:6;7972;8021:2;8009:9;8000:7;7996:23;7992:32;7989:119;;;8027:79;;:::i;:::-;7989:119;8147:1;8172:53;8217:7;8208:6;8197:9;8193:22;8172:53;:::i;:::-;8162:63;;8118:117;8274:2;8300:50;8342:7;8333:6;8322:9;8318:22;8300:50;:::i;:::-;8290:60;;8245:115;7899:468;;;;;:::o;8373:329::-;8432:6;8481:2;8469:9;8460:7;8456:23;8452:32;8449:119;;;8487:79;;:::i;:::-;8449:119;8607:1;8632:53;8677:7;8668:6;8657:9;8653:22;8632:53;:::i;:::-;8622:63;;8578:117;8373:329;;;;:::o;8708:323::-;8764:6;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:50;9006:7;8997:6;8986:9;8982:22;8964:50;:::i;:::-;8954:60;;8910:114;8708:323;;;;:::o;9037:138::-;9118:32;9144:5;9118:32;:::i;:::-;9111:5;9108:43;9098:71;;9165:1;9162;9155:12;9098:71;9037:138;:::o;9181:155::-;9235:5;9273:6;9260:20;9251:29;;9289:41;9324:5;9289:41;:::i;:::-;9181:155;;;;:::o;9342:506::-;9426:6;9434;9483:2;9471:9;9462:7;9458:23;9454:32;9451:119;;;9489:79;;:::i;:::-;9451:119;9609:1;9634:61;9687:7;9678:6;9667:9;9663:22;9634:61;:::i;:::-;9624:71;;9580:125;9744:2;9770:61;9823:7;9814:6;9803:9;9799:22;9770:61;:::i;:::-;9760:71;;9715:126;9342:506;;;;;:::o;9854:320::-;9969:4;10007:2;9996:9;9992:18;9984:26;;10020:71;10088:1;10077:9;10073:17;10064:6;10020:71;:::i;:::-;10101:66;10163:2;10152:9;10148:18;10139:6;10101:66;:::i;:::-;9854:320;;;;;:::o;10180:474::-;10248:6;10256;10305:2;10293:9;10284:7;10280:23;10276:32;10273:119;;;10311:79;;:::i;:::-;10273:119;10431:1;10456:53;10501:7;10492:6;10481:9;10477:22;10456:53;:::i;:::-;10446:63;;10402:117;10558:2;10584:53;10629:7;10620:6;10609:9;10605:22;10584:53;:::i;:::-;10574:63;;10529:118;10180:474;;;;;:::o;10660:765::-;10746:6;10754;10762;10770;10819:3;10807:9;10798:7;10794:23;10790:33;10787:120;;;10826:79;;:::i;:::-;10787:120;10946:1;10971:53;11016:7;11007:6;10996:9;10992:22;10971:53;:::i;:::-;10961:63;;10917:117;11073:2;11099:53;11144:7;11135:6;11124:9;11120:22;11099:53;:::i;:::-;11089:63;;11044:118;11201:2;11227:53;11272:7;11263:6;11252:9;11248:22;11227:53;:::i;:::-;11217:63;;11172:118;11329:2;11355:53;11400:7;11391:6;11380:9;11376:22;11355:53;:::i;:::-;11345:63;;11300:118;10660:765;;;;;;;:::o;11431:180::-;11479:77;11476:1;11469:88;11576:4;11573:1;11566:15;11600:4;11597:1;11590:15;11617:320;11661:6;11698:1;11692:4;11688:12;11678:22;;11745:1;11739:4;11735:12;11766:18;11756:81;;11822:4;11814:6;11810:17;11800:27;;11756:81;11884:2;11876:6;11873:14;11853:18;11850:38;11847:84;;;11903:18;;:::i;:::-;11847:84;11668:269;11617:320;;;:::o;11943:180::-;11991:77;11988:1;11981:88;12088:4;12085:1;12078:15;12112:4;12109:1;12102:15;12129:191;12169:4;12189:20;12207:1;12189:20;:::i;:::-;12184:25;;12223:20;12241:1;12223:20;:::i;:::-;12218:25;;12262:1;12259;12256:8;12253:34;;;12267:18;;:::i;:::-;12253:34;12312:1;12309;12305:9;12297:17;;12129:191;;;;:::o;12326:305::-;12366:3;12385:20;12403:1;12385:20;:::i;:::-;12380:25;;12419:20;12437:1;12419:20;:::i;:::-;12414:25;;12573:1;12505:66;12501:74;12498:1;12495:81;12492:107;;;12579:18;;:::i;:::-;12492:107;12623:1;12620;12616:9;12609:16;;12326:305;;;;:::o;12637:166::-;12777:18;12773:1;12765:6;12761:14;12754:42;12637:166;:::o;12809:366::-;12951:3;12972:67;13036:2;13031:3;12972:67;:::i;:::-;12965:74;;13048:93;13137:3;13048:93;:::i;:::-;13166:2;13161:3;13157:12;13150:19;;12809:366;;;:::o;13181:419::-;13347:4;13385:2;13374:9;13370:18;13362:26;;13434:9;13428:4;13424:20;13420:1;13409:9;13405:17;13398:47;13462:131;13588:4;13462:131;:::i;:::-;13454:139;;13181:419;;;:::o;13606:248::-;13746:34;13742:1;13734:6;13730:14;13723:58;13815:31;13810:2;13802:6;13798:15;13791:56;13606:248;:::o;13860:366::-;14002:3;14023:67;14087:2;14082:3;14023:67;:::i;:::-;14016:74;;14099:93;14188:3;14099:93;:::i;:::-;14217:2;14212:3;14208:12;14201:19;;13860:366;;;:::o;14232:419::-;14398:4;14436:2;14425:9;14421:18;14413:26;;14485:9;14479:4;14475:20;14471:1;14460:9;14456:17;14449:47;14513:131;14639:4;14513:131;:::i;:::-;14505:139;;14232:419;;;:::o;14657:179::-;14797:31;14793:1;14785:6;14781:14;14774:55;14657:179;:::o;14842:366::-;14984:3;15005:67;15069:2;15064:3;15005:67;:::i;:::-;14998:74;;15081:93;15170:3;15081:93;:::i;:::-;15199:2;15194:3;15190:12;15183:19;;14842:366;;;:::o;15214:419::-;15380:4;15418:2;15407:9;15403:18;15395:26;;15467:9;15461:4;15457:20;15453:1;15442:9;15438:17;15431:47;15495:131;15621:4;15495:131;:::i;:::-;15487:139;;15214:419;;;:::o;15639:102::-;15681:8;15728:5;15725:1;15721:13;15700:34;;15639:102;;;:::o;15747:848::-;15808:5;15815:4;15839:6;15830:15;;15863:5;15854:14;;15877:712;15898:1;15888:8;15885:15;15877:712;;;15993:4;15988:3;15984:14;15978:4;15975:24;15972:50;;;16002:18;;:::i;:::-;15972:50;16052:1;16042:8;16038:16;16035:451;;;16467:4;16460:5;16456:16;16447:25;;16035:451;16517:4;16511;16507:15;16499:23;;16547:32;16570:8;16547:32;:::i;:::-;16535:44;;15877:712;;;15747:848;;;;;;;:::o;16601:1073::-;16655:5;16846:8;16836:40;;16867:1;16858:10;;16869:5;;16836:40;16895:4;16885:36;;16912:1;16903:10;;16914:5;;16885:36;16981:4;17029:1;17024:27;;;;17065:1;17060:191;;;;16974:277;;17024:27;17042:1;17033:10;;17044:5;;;17060:191;17105:3;17095:8;17092:17;17089:43;;;17112:18;;:::i;:::-;17089:43;17161:8;17158:1;17154:16;17145:25;;17196:3;17189:5;17186:14;17183:40;;;17203:18;;:::i;:::-;17183:40;17236:5;;;16974:277;;17360:2;17350:8;17347:16;17341:3;17335:4;17332:13;17328:36;17310:2;17300:8;17297:16;17292:2;17286:4;17283:12;17279:35;17263:111;17260:246;;;17416:8;17410:4;17406:19;17397:28;;17451:3;17444:5;17441:14;17438:40;;;17458:18;;:::i;:::-;17438:40;17491:5;;17260:246;17531:42;17569:3;17559:8;17553:4;17550:1;17531:42;:::i;:::-;17516:57;;;;17605:4;17600:3;17596:14;17589:5;17586:25;17583:51;;;17614:18;;:::i;:::-;17583:51;17663:4;17656:5;17652:16;17643:25;;16601:1073;;;;;;:::o;17680:281::-;17738:5;17762:23;17780:4;17762:23;:::i;:::-;17754:31;;17806:25;17822:8;17806:25;:::i;:::-;17794:37;;17850:104;17887:66;17877:8;17871:4;17850:104;:::i;:::-;17841:113;;17680:281;;;;:::o;17967:348::-;18007:7;18030:20;18048:1;18030:20;:::i;:::-;18025:25;;18064:20;18082:1;18064:20;:::i;:::-;18059:25;;18252:1;18184:66;18180:74;18177:1;18174:81;18169:1;18162:9;18155:17;18151:105;18148:131;;;18259:18;;:::i;:::-;18148:131;18307:1;18304;18300:9;18289:20;;17967:348;;;;:::o;18321:143::-;18378:5;18409:6;18403:13;18394:22;;18425:33;18452:5;18425:33;:::i;:::-;18321:143;;;;:::o;18470:351::-;18540:6;18589:2;18577:9;18568:7;18564:23;18560:32;18557:119;;;18595:79;;:::i;:::-;18557:119;18715:1;18740:64;18796:7;18787:6;18776:9;18772:22;18740:64;:::i;:::-;18730:74;;18686:128;18470:351;;;;:::o;18827:332::-;18948:4;18986:2;18975:9;18971:18;18963:26;;18999:71;19067:1;19056:9;19052:17;19043:6;18999:71;:::i;:::-;19080:72;19148:2;19137:9;19133:18;19124:6;19080:72;:::i;:::-;18827:332;;;;;:::o;19165:180::-;19213:77;19210:1;19203:88;19310:4;19307:1;19300:15;19334:4;19331:1;19324:15;19351:185;19391:1;19408:20;19426:1;19408:20;:::i;:::-;19403:25;;19442:20;19460:1;19442:20;:::i;:::-;19437:25;;19481:1;19471:35;;19486:18;;:::i;:::-;19471:35;19528:1;19525;19521:9;19516:14;;19351:185;;;;:::o;19542:168::-;19682:20;19678:1;19670:6;19666:14;19659:44;19542:168;:::o;19716:366::-;19858:3;19879:67;19943:2;19938:3;19879:67;:::i;:::-;19872:74;;19955:93;20044:3;19955:93;:::i;:::-;20073:2;20068:3;20064:12;20057:19;;19716:366;;;:::o;20088:419::-;20254:4;20292:2;20281:9;20277:18;20269:26;;20341:9;20335:4;20331:20;20327:1;20316:9;20312:17;20305:47;20369:131;20495:4;20369:131;:::i;:::-;20361:139;;20088:419;;;:::o;20513:156::-;20653:8;20649:1;20641:6;20637:14;20630:32;20513:156;:::o;20675:365::-;20817:3;20838:66;20902:1;20897:3;20838:66;:::i;:::-;20831:73;;20913:93;21002:3;20913:93;:::i;:::-;21031:2;21026:3;21022:12;21015:19;;20675:365;;;:::o;21046:419::-;21212:4;21250:2;21239:9;21235:18;21227:26;;21299:9;21293:4;21289:20;21285:1;21274:9;21270:17;21263:47;21327:131;21453:4;21327:131;:::i;:::-;21319:139;;21046:419;;;:::o;21471:169::-;21611:21;21607:1;21599:6;21595:14;21588:45;21471:169;:::o;21646:366::-;21788:3;21809:67;21873:2;21868:3;21809:67;:::i;:::-;21802:74;;21885:93;21974:3;21885:93;:::i;:::-;22003:2;21998:3;21994:12;21987:19;;21646:366;;;:::o;22018:419::-;22184:4;22222:2;22211:9;22207:18;22199:26;;22271:9;22265:4;22261:20;22257:1;22246:9;22242:17;22235:47;22299:131;22425:4;22299:131;:::i;:::-;22291:139;;22018:419;;;:::o;22443:170::-;22583:22;22579:1;22571:6;22567:14;22560:46;22443:170;:::o;22619:366::-;22761:3;22782:67;22846:2;22841:3;22782:67;:::i;:::-;22775:74;;22858:93;22947:3;22858:93;:::i;:::-;22976:2;22971:3;22967:12;22960:19;;22619:366;;;:::o;22991:419::-;23157:4;23195:2;23184:9;23180:18;23172:26;;23244:9;23238:4;23234:20;23230:1;23219:9;23215:17;23208:47;23272:131;23398:4;23272:131;:::i;:::-;23264:139;;22991:419;;;:::o;23416:158::-;23556:10;23552:1;23544:6;23540:14;23533:34;23416:158;:::o;23580:365::-;23722:3;23743:66;23807:1;23802:3;23743:66;:::i;:::-;23736:73;;23818:93;23907:3;23818:93;:::i;:::-;23936:2;23931:3;23927:12;23920:19;;23580:365;;;:::o;23951:419::-;24117:4;24155:2;24144:9;24140:18;24132:26;;24204:9;24198:4;24194:20;24190:1;24179:9;24175:17;24168:47;24232:131;24358:4;24232:131;:::i;:::-;24224:139;;23951:419;;;:::o;24376:174::-;24516:26;24512:1;24504:6;24500:14;24493:50;24376:174;:::o;24556:366::-;24698:3;24719:67;24783:2;24778:3;24719:67;:::i;:::-;24712:74;;24795:93;24884:3;24795:93;:::i;:::-;24913:2;24908:3;24904:12;24897:19;;24556:366;;;:::o;24928:419::-;25094:4;25132:2;25121:9;25117:18;25109:26;;25181:9;25175:4;25171:20;25167:1;25156:9;25152:17;25145:47;25209:131;25335:4;25209:131;:::i;:::-;25201:139;;24928:419;;;:::o;25353:176::-;25493:28;25489:1;25481:6;25477:14;25470:52;25353:176;:::o;25535:366::-;25677:3;25698:67;25762:2;25757:3;25698:67;:::i;:::-;25691:74;;25774:93;25863:3;25774:93;:::i;:::-;25892:2;25887:3;25883:12;25876:19;;25535:366;;;:::o;25907:419::-;26073:4;26111:2;26100:9;26096:18;26088:26;;26160:9;26154:4;26150:20;26146:1;26135:9;26131:17;26124:47;26188:131;26314:4;26188:131;:::i;:::-;26180:139;;25907:419;;;:::o;26332:442::-;26481:4;26519:2;26508:9;26504:18;26496:26;;26532:71;26600:1;26589:9;26585:17;26576:6;26532:71;:::i;:::-;26613:72;26681:2;26670:9;26666:18;26657:6;26613:72;:::i;:::-;26695;26763:2;26752:9;26748:18;26739:6;26695:72;:::i;:::-;26332:442;;;;;;:::o;26780:147::-;26881:11;26918:3;26903:18;;26780:147;;;;:::o;26933:114::-;;:::o;27053:398::-;27212:3;27233:83;27314:1;27309:3;27233:83;:::i;:::-;27226:90;;27325:93;27414:3;27325:93;:::i;:::-;27443:1;27438:3;27434:11;27427:18;;27053:398;;;:::o;27457:379::-;27641:3;27663:147;27806:3;27663:147;:::i;:::-;27656:154;;27827:3;27820:10;;27457:379;;;:::o;27842:166::-;27982:18;27978:1;27970:6;27966:14;27959:42;27842:166;:::o;28014:366::-;28156:3;28177:67;28241:2;28236:3;28177:67;:::i;:::-;28170:74;;28253:93;28342:3;28253:93;:::i;:::-;28371:2;28366:3;28362:12;28355:19;;28014:366;;;:::o;28386:419::-;28552:4;28590:2;28579:9;28575:18;28567:26;;28639:9;28633:4;28629:20;28625:1;28614:9;28610:17;28603:47;28667:131;28793:4;28667:131;:::i;:::-;28659:139;;28386:419;;;:::o;28811:224::-;28951:34;28947:1;28939:6;28935:14;28928:58;29020:7;29015:2;29007:6;29003:15;28996:32;28811:224;:::o;29041:366::-;29183:3;29204:67;29268:2;29263:3;29204:67;:::i;:::-;29197:74;;29280:93;29369:3;29280:93;:::i;:::-;29398:2;29393:3;29389:12;29382:19;;29041:366;;;:::o;29413:419::-;29579:4;29617:2;29606:9;29602:18;29594:26;;29666:9;29660:4;29656:20;29652:1;29641:9;29637:17;29630:47;29694:131;29820:4;29694:131;:::i;:::-;29686:139;;29413:419;;;:::o;29838:233::-;29877:3;29900:24;29918:5;29900:24;:::i;:::-;29891:33;;29946:66;29939:5;29936:77;29933:103;;;30016:18;;:::i;:::-;29933:103;30063:1;30056:5;30052:13;30045:20;;29838:233;;;:::o;30077:180::-;30125:77;30122:1;30115:88;30222:4;30219:1;30212:15;30246:4;30243:1;30236:15;30263:180;30311:77;30308:1;30301:88;30408:4;30405:1;30398:15;30432:4;30429:1;30422:15;30449:85;30494:7;30523:5;30512:16;;30449:85;;;:::o;30540:158::-;30598:9;30631:61;30649:42;30658:32;30684:5;30658:32;:::i;:::-;30649:42;:::i;:::-;30631:61;:::i;:::-;30618:74;;30540:158;;;:::o;30704:147::-;30799:45;30838:5;30799:45;:::i;:::-;30794:3;30787:58;30704:147;;:::o;30857:114::-;30924:6;30958:5;30952:12;30942:22;;30857:114;;;:::o;30977:184::-;31076:11;31110:6;31105:3;31098:19;31150:4;31145:3;31141:14;31126:29;;30977:184;;;;:::o;31167:132::-;31234:4;31257:3;31249:11;;31287:4;31282:3;31278:14;31270:22;;31167:132;;;:::o;31305:108::-;31382:24;31400:5;31382:24;:::i;:::-;31377:3;31370:37;31305:108;;:::o;31419:179::-;31488:10;31509:46;31551:3;31543:6;31509:46;:::i;:::-;31587:4;31582:3;31578:14;31564:28;;31419:179;;;;:::o;31604:113::-;31674:4;31706;31701:3;31697:14;31689:22;;31604:113;;;:::o;31753:732::-;31872:3;31901:54;31949:5;31901:54;:::i;:::-;31971:86;32050:6;32045:3;31971:86;:::i;:::-;31964:93;;32081:56;32131:5;32081:56;:::i;:::-;32160:7;32191:1;32176:284;32201:6;32198:1;32195:13;32176:284;;;32277:6;32271:13;32304:63;32363:3;32348:13;32304:63;:::i;:::-;32297:70;;32390:60;32443:6;32390:60;:::i;:::-;32380:70;;32236:224;32223:1;32220;32216:9;32211:14;;32176:284;;;32180:14;32476:3;32469:10;;31877:608;;;31753:732;;;;:::o;32491:831::-;32754:4;32792:3;32781:9;32777:19;32769:27;;32806:71;32874:1;32863:9;32859:17;32850:6;32806:71;:::i;:::-;32887:80;32963:2;32952:9;32948:18;32939:6;32887:80;:::i;:::-;33014:9;33008:4;33004:20;32999:2;32988:9;32984:18;32977:48;33042:108;33145:4;33136:6;33042:108;:::i;:::-;33034:116;;33160:72;33228:2;33217:9;33213:18;33204:6;33160:72;:::i;:::-;33242:73;33310:3;33299:9;33295:19;33286:6;33242:73;:::i;:::-;32491:831;;;;;;;;:::o;33328:807::-;33577:4;33615:3;33604:9;33600:19;33592:27;;33629:71;33697:1;33686:9;33682:17;33673:6;33629:71;:::i;:::-;33710:72;33778:2;33767:9;33763:18;33754:6;33710:72;:::i;:::-;33792:80;33868:2;33857:9;33853:18;33844:6;33792:80;:::i;:::-;33882;33958:2;33947:9;33943:18;33934:6;33882:80;:::i;:::-;33972:73;34040:3;34029:9;34025:19;34016:6;33972:73;:::i;:::-;34055;34123:3;34112:9;34108:19;34099:6;34055:73;:::i;:::-;33328:807;;;;;;;;;:::o;34141:143::-;34198:5;34229:6;34223:13;34214:22;;34245:33;34272:5;34245:33;:::i;:::-;34141:143;;;;:::o;34290:663::-;34378:6;34386;34394;34443:2;34431:9;34422:7;34418:23;34414:32;34411:119;;;34449:79;;:::i;:::-;34411:119;34569:1;34594:64;34650:7;34641:6;34630:9;34626:22;34594:64;:::i;:::-;34584:74;;34540:128;34707:2;34733:64;34789:7;34780:6;34769:9;34765:22;34733:64;:::i;:::-;34723:74;;34678:129;34846:2;34872:64;34928:7;34919:6;34908:9;34904:22;34872:64;:::i;:::-;34862:74;;34817:129;34290:663;;;;;:::o;34959:222::-;35099:34;35095:1;35087:6;35083:14;35076:58;35168:5;35163:2;35155:6;35151:15;35144:30;34959:222;:::o;35187:366::-;35329:3;35350:67;35414:2;35409:3;35350:67;:::i;:::-;35343:74;;35426:93;35515:3;35426:93;:::i;:::-;35544:2;35539:3;35535:12;35528:19;;35187:366;;;:::o;35559:419::-;35725:4;35763:2;35752:9;35748:18;35740:26;;35812:9;35806:4;35802:20;35798:1;35787:9;35783:17;35776:47;35840:131;35966:4;35840:131;:::i;:::-;35832:139;;35559:419;;;:::o

Swarm Source

ipfs://cb6d0c5147acbcca190de5af1243b65d225bcb2f935ea2c517bfa57bd33acb1b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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