ETH Price: $2,397.25 (-0.29%)

Contract

0x374Ba688D8698Ea4b68a39E7D795fed9C4bdD322
 

Overview

ETH Balance

0.000000031263537288 ETH

Eth Value

Less Than $0.01 (@ $2,397.25/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve151378412022-07-14 1:41:06784 days ago1657762866IN
0x374Ba688...9C4bdD322
0 ETH0.000907819.47912186
Approve151377662022-07-14 1:25:38784 days ago1657761938IN
0x374Ba688...9C4bdD322
0 ETH0.0013139528.19401216
Approve151375052022-07-14 0:28:32784 days ago1657758512IN
0x374Ba688...9C4bdD322
0 ETH0.0022649148.59904871
Renounce Ownersh...151374622022-07-14 0:16:39784 days ago1657757799IN
0x374Ba688...9C4bdD322
0 ETH0.0014921755.80299593
Approve151374542022-07-14 0:13:46784 days ago1657757626IN
0x374Ba688...9C4bdD322
0 ETH0.0019251772.09316549
Approve151374482022-07-14 0:12:02784 days ago1657757522IN
0x374Ba688...9C4bdD322
0 ETH0.0042954192.1683795
Approve151374292022-07-14 0:09:08784 days ago1657757348IN
0x374Ba688...9C4bdD322
0 ETH0.00538992115.6537962
Approve151374292022-07-14 0:09:08784 days ago1657757348IN
0x374Ba688...9C4bdD322
0 ETH0.00538992115.6537962
Approve151373922022-07-14 0:01:18784 days ago1657756878IN
0x374Ba688...9C4bdD322
0 ETH0.0006105513.10093668
Approve151373892022-07-14 0:00:08784 days ago1657756808IN
0x374Ba688...9C4bdD322
0 ETH0.0006881914.76695355
Approve151373892022-07-14 0:00:08784 days ago1657756808IN
0x374Ba688...9C4bdD322
0 ETH0.0006881914.76695355
Approve151373892022-07-14 0:00:08784 days ago1657756808IN
0x374Ba688...9C4bdD322
0 ETH0.0006881914.76695355
Approve151373772022-07-13 23:58:39784 days ago1657756719IN
0x374Ba688...9C4bdD322
0 ETH0.0009582920.56260982
Approve151373772022-07-13 23:58:39784 days ago1657756719IN
0x374Ba688...9C4bdD322
0 ETH0.0009582920.56260982
Approve151373762022-07-13 23:58:37784 days ago1657756717IN
0x374Ba688...9C4bdD322
0 ETH0.0013981230
Approve151373762022-07-13 23:58:37784 days ago1657756717IN
0x374Ba688...9C4bdD322
0 ETH0.0014447231
Approve151373762022-07-13 23:58:37784 days ago1657756717IN
0x374Ba688...9C4bdD322
0 ETH0.0014913232
Approve151373762022-07-13 23:58:37784 days ago1657756717IN
0x374Ba688...9C4bdD322
0 ETH0.0015845334
Approve151373762022-07-13 23:58:37784 days ago1657756717IN
0x374Ba688...9C4bdD322
0 ETH0.0016777436
Approve151373662022-07-13 23:57:26784 days ago1657756646IN
0x374Ba688...9C4bdD322
0 ETH0.0007704916.53282608
Approve151373662022-07-13 23:57:26784 days ago1657756646IN
0x374Ba688...9C4bdD322
0 ETH0.0020971845
Approve151373662022-07-13 23:57:26784 days ago1657756646IN
0x374Ba688...9C4bdD322
0 ETH0.0020971845
Approve151373662022-07-13 23:57:26784 days ago1657756646IN
0x374Ba688...9C4bdD322
0 ETH0.0020971845
Approve151373662022-07-13 23:57:26784 days ago1657756646IN
0x374Ba688...9C4bdD322
0 ETH0.0020971845
Approve151373642022-07-13 23:57:08784 days ago1657756628IN
0x374Ba688...9C4bdD322
0 ETH0.0009234819.81561342
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
151692652022-07-18 22:26:58779 days ago1658183218
0x374Ba688...9C4bdD322
0.00324859 ETH
151692652022-07-18 22:26:58779 days ago1658183218
0x374Ba688...9C4bdD322
0.00081214 ETH
151692652022-07-18 22:26:58779 days ago1658183218
0x374Ba688...9C4bdD322
0.00324859 ETH
151692652022-07-18 22:26:58779 days ago1658183218
0x374Ba688...9C4bdD322
0.00000003 ETH
151692652022-07-18 22:26:58779 days ago1658183218
0x374Ba688...9C4bdD322
0.00040607 ETH
151692652022-07-18 22:26:58779 days ago1658183218
0x374Ba688...9C4bdD322
0.00771535 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00338158 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00084539 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00338158 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00000006 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00042269 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00803116 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00352285 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00088071 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00352285 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00000009 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00044035 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00836665 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00367362 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.0009184 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00367362 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00000013 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.0004592 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00872468 ETH
151402742022-07-14 10:37:43784 days ago1657795063
0x374Ba688...9C4bdD322
0.00383373 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SolarApes

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-13
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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 IFactoryV2 {
    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 IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    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);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
}

contract SolarApes is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    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 _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 constant private startingSupply =  1_000_000_000_000_000_000;

    string constant private _name = "Solar Apes";
    string constant private _symbol = "SAPES";
    uint8 constant private _decimals = 9;

    uint256 constant private _tTotal = startingSupply * 10**_decimals;
    uint256 constant private MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 reflection;
        uint16 liquidity;
        uint16 marketing;
        uint16 charity;
        uint16 development;
        uint16 totalSwap;
    }

    Fees public _taxRates = Fees({
        buyFee: 1300,
        sellFee: 1300,
        transferFee: 1300
    });

    Ratios public _ratios = Ratios({
        reflection: 300,
        liquidity: 100,
        marketing: 400,
        charity: 100,
        development: 400,
        totalSwap: 1000
    });

    uint256 constant public maxBuyTaxes = 1500;
    uint256 constant public maxSellTaxes = 1500;
    uint256 constant public maxTransferTaxes = 1500;
    uint256 constant public maxRoundtripTax = 2600;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable charity;
        address payable development;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x7a8286388eeF70CD264edeBA359C02f08f71D306),
        charity: payable(0xe13821BB872A81D099B0d1b758ce49A27AE7A077),
        development: payable(0xFB77Fa1268Ae204825AD5Da90813c3404B753c0b)
    });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent;
    
    uint256 private _maxTxAmount = (_tTotal * 1) / 100;
    uint256 private _maxWalletSize = (_tTotal * 2) / 100;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Caller =/= owner.");
        _;
    }

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

        _rOwned[msg.sender] = _rTotal;
        emit Transfer(address(0), msg.sender, _tTotal);

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }

        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

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

        finalizeTransfer(_owner, DEAD, (_tTotal * 45) / 100, false, false, true);
        finalizeTransfer(_owner, 0xD5A224a3d5286B697D0174005f9a4c963de6330A, _tTotal / 20, false, false, true);
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    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 (balanceOf(_owner) > 0) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

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

    function totalSupply() external pure override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external pure override returns (uint8) { if (_tTotal == 0) { revert(); } return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure 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) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

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

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

    function approveContractContingency() external onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

    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 setNewRouter(address newRouter) external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

    function setInitializer(address initializer) external onlyOwner {
        require(!tradingEnabled);
        require(initializer != address(this), "Can't be self.");
        antiSnipe = AntiSnipe(initializer);
    }

    function isExcludedFromLimits(address account) external view returns (bool) {
        return _isExcludedFromLimits[account];
    }

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

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

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

    function setExcludedFromProtection(address account, bool enabled) external onlyOwner {
        _isExcludedFromProtection[account] = enabled;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));
    }

//================================================ BLACKLIST

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

    function isBlacklisted(address account) external view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock);
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 reflection, uint16 liquidity, uint16 marketing, uint16 charity, uint16 development) external onlyOwner {
        _ratios.reflection = reflection;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.charity = charity;
        _ratios.development = development;
        _ratios.totalSwap = liquidity + marketing + charity + development;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.totalSwap + _ratios.reflection <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setWallets(address payable marketing, address payable charity, address payable development) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.charity = payable(charity);
        _taxWallets.development = payable(development);
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 100), "Max Wallet amt must be above 1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getMaxTX() external view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() external view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 200, "Cannot set above 2%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this)
            && from != address(antiSnipe)
            && to != address(antiSnipe);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (buy || sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        } 
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.totalSwap == 0) {
            return;
        }

        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / ratios.totalSwap) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;
        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.totalSwap -= ratios.liquidity;
        bool success;
        uint256 charityBalance = (amtBalance * ratios.charity) / ratios.totalSwap;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;
        uint256 marketingBalance = amtBalance - (charityBalance + developmentBalance);
        if (ratios.marketing > 0) {
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.charity > 0) {
            (success,) = _taxWallets.charity.call{value: charityBalance, gas: 35000}("");
        }
        if (ratios.development > 0) {
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _isExcludedFromFees[from] = true;
            _hasLiqBeenAdded = true;
            if (address(antiSnipe) == address(0)){
                antiSnipe = AntiSnipe(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled) {
            require(!_isExcluded[account], "Account is already excluded.");
            if (_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            if (account != lpPair){
                _excluded.push(account);
            }
        } else if (!enabled) {
            require(_isExcluded[account], "Account is already included.");
            if (account == lpPair) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _tOwned[account] = 0;
                _isExcluded[account] = false;
            } else if (_excluded.length == 1) {
                _rOwned[account] = _tOwned[account] * _getRate();
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
            } else {
                for (uint256 i = 0; i < _excluded.length; i++) {
                    if (_excluded[i] == account) {
                        _excluded[i] = _excluded[_excluded.length - 1];
                        _rOwned[account] = _tOwned[account] * _getRate();
                        _tOwned[account] = 0;
                        _isExcluded[account] = false;
                        _excluded.pop();
                        break;
                    }
                }
            }
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tSwap;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;

        uint256 currentRate;
    }

    function finalizeTransfer(address from, address to, uint256 tAmount, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

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

        ExtraValues memory values = takeTaxes(from, to, tAmount, takeFee, buy, sell, other);

        _rOwned[from] -= values.rAmount;
        _rOwned[to] += values.rTransferAmount;

        if (_isExcluded[from]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        }
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.rFee > 0 || values.tFee > 0) {
            _rTotal -= values.rFee;
        }

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function takeTaxes(address from, address to, uint256 tAmount, bool takeFee, bool buy, bool sell, bool other) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        Ratios memory ratios = _ratios;
        values.currentRate = _getRate();

        values.rAmount = tAmount * values.currentRate;

        if (_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, tAmount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        if (takeFee) {
            uint256 currentFee;

            if (buy) {
                currentFee = _taxRates.buyFee;
            } else if (sell) {
                currentFee = _taxRates.sellFee;
            } else {
                currentFee = _taxRates.transferFee;
            }

            uint256 feeAmount = (tAmount * currentFee) / masterTaxDivisor;
            uint256 total = ratios.totalSwap + ratios.reflection;
            values.tFee = (feeAmount * ratios.reflection) / total;
            values.tSwap = feeAmount - values.tFee;
            values.tTransferAmount = tAmount - (values.tFee + values.tSwap);

            values.rFee = values.tFee * values.currentRate;
        } else {
            values.tTransferAmount = tAmount;
        }

        if (values.tSwap > 0) {
            _rOwned[address(this)] += values.tSwap * values.currentRate;
            if (_isExcluded[address(this)]) {
                _tOwned[address(this)] += values.tSwap;
            }
            emit Transfer(from, address(this), values.tSwap);
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tSwap * values.currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        uint256 rTotal = _rTotal;
        uint256 tTotal = _tTotal;
        uint256 rSupply = rTotal;
        uint256 tSupply = tTotal;
        if (_isExcluded[lpPair]) {
            uint256 rLPOwned = _rOwned[lpPair];
            uint256 tLPOwned = _tOwned[lpPair];
            if (rLPOwned > rSupply || tLPOwned > tSupply) return rTotal / tTotal;
            rSupply -= rLPOwned;
            tSupply -= tLPOwned;
        }
        if (_excluded.length > 0) {
            for (uint8 i = 0; i < _excluded.length; i++) {
                uint256 rOwned = _rOwned[_excluded[i]];
                uint256 tOwned = _tOwned[_excluded[i]];
                if (rOwned > rSupply || tOwned > tSupply) return rTotal / tTotal;
                rSupply = rSupply - rOwned;
                tSupply = tSupply - tOwned;
            }
        }
        if (rSupply < rTotal / tTotal) return rTotal / tTotal;
        return rSupply / tSupply;
    }
}

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":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"totalSwap","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"charity","type":"address"},{"internalType":"address payable","name":"development","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":[],"name":"approveContractContingency","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":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","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":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","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":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"initializer","type":"address"}],"name":"setInitializer","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":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"reflection","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"charity","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"}],"name":"setRatios","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":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"charity","type":"address"},{"internalType":"address payable","name":"development","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600455620000176009600a620013e5565b6200002b90670de0b6b3a7640000620013f6565b62000039906000196200142e565b620000479060001962001445565b600c556040805160608082018352610514808352602080840182905292840152600d805465ffffffffffff191665051405140514179055825160c08101845261012c8152606481840181905261019082860181905282840182905260808301526103e860a090920191909152600e80546001600160601b0319166b03e80190006401900064012c17905583519182018452737a8286388eef70cd264edeba359c02f08f71d30680835273e13821bb872a81d099b0d1b758ce49a27ae7a07793830184905273fb77fa1268ae204825ad5da90813c3404b753c0b92909401829052601180546001600160a01b0319908116909517905560128054851690931790925560138054909316179091556014805461ff00191690556200016c6009600a620013e5565b6200018090670de0b6b3a7640000620013f6565b6200018d906001620013f6565b6200019991906200145f565b6019556064620001ac6009600a620013e5565b620001c090670de0b6b3a7640000620013f6565b620001cd906002620013f6565b620001d991906200145f565b601a55601b805461ffff19169055600080546001600160a01b031916339081178255600c548183526001602052604083205590600080516020620065648339815191526200022a6009600a620013e5565b6200023e90670de0b6b3a7640000620013f6565b60405190815260200160405180910390a3466038036200028457600f80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000377565b46606103620002b957600f80546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000377565b4660011480620002c95750466004145b80620002d55750466003145b156200030757600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000377565b4661a86a036200033d57600f80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000377565b4660fa036200037257600f80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000377565b600080fd5b600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f1919062001476565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000453573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000479919062001476565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ec919062001476565b601080546001600160a01b0319166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554600f546200053b92918216911660001962000675565b600f54620005579030906001600160a01b031660001962000675565b600080546001600160a01b0390811682526008602090815260408084208054600160ff19918216811790925530865282862080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd09334299805482168317905585548516865260069093529084208054909216179055905462000623911661dead6064620005eb6009600a620013e5565b620005ff90670de0b6b3a7640000620013f6565b6200060c90602d620013f6565b6200061891906200145f565b600080600162000776565b506000546200066e906001600160a01b031673d5a224a3d5286b697d0174005f9a4c963de6330a60146200065a6009600a620013e5565b6200060c90670de0b6b3a7640000620013f6565b5062001548565b6001600160a01b038316620006c75760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620007155760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b6044820152606401620006be565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601b54600090610100900460ff16620008665762000795878762000a81565b601b54610100900460ff16158015620007b55750620007b5878762000bd0565b8015620007db57506001600160a01b03871660009081526007602052604090205460ff16155b80156200080157506001600160a01b03861660009081526007602052604090205460ff16155b80156200080c575081155b15620008665760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f604482015261371760f11b6064820152608401620006be565b6001600160a01b03871660009081526008602052604090205460019060ff1680620008a957506001600160a01b03871660009081526008602052604090205460ff165b15620008b3575060005b6000620008c6898989858a8a8a62000cf0565b60808101516001600160a01b038b16600090815260016020526040812080549394509192620008f790849062001445565b909155505060608101516001600160a01b038916600090815260016020526040812080549091906200092b908490620014a8565b90915550506001600160a01b0389166000908152600a602052604090205460ff161562000992576001600160a01b0389166000908152600260205260409020546200097890889062001445565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff1615620009f55780516001600160a01b038916600090815260026020526040902054620009db9190620014a8565b6001600160a01b0389166000908152600260205260409020555b60008160a00151118062000a0d575060008160200151115b1562000a31578060a00151600c600082825462000a2b919062001445565b90915550505b876001600160a01b0316896001600160a01b031660008051602062006564833981519152836000015160405162000a6a91815260200190565b60405180910390a350600198975050505050505050565b601b54610100900460ff161562000ae75760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401620006be565b62000af3828262000bd0565b15801562000b0e57506010546001600160a01b038281169116145b1562000bcc576001600160a01b038083166000908152600660209081526040808320805460ff1990811660019081179092556008909352922080549091169091179055601b805461ff00191661010017908190556201000090041662000b8857601b805462010000600160b01b0319163062010000021790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15b5050565b600080546001600160a01b0384811691161480159062000bfe57506000546001600160a01b03838116911614155b801562000c1657506000546001600160a01b03163214155b801562000c3c57506001600160a01b03821660009081526006602052604090205460ff16155b801562000c6257506001600160a01b03831660009081526006602052604090205460ff16155b801562000c7a57506001600160a01b03821661dead14155b801562000c8f57506001600160a01b03821615155b801562000ca557506001600160a01b0383163014155b801562000cc65750601b546001600160a01b03848116620100009092041614155b801562000ce75750601b546001600160a01b03838116620100009092041614155b90505b92915050565b62000d316040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b62000d726040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c081018252600e5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a082015262000de9620010ce565b60c0830181905262000dfc9089620013f6565b608083015262000e0d8a8a62000bd0565b1562000ead57601b5460405163ecd07a5360e01b81526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801562000e94575060408051601f3d908101601f1916820190925262000e9191810190620014c3565b60015b62000e9e57600080fd5b90508062000eab57600080fd5b505b861562000fb1576000861562000ecb5750600d5461ffff1662000ef7565b851562000ee65750600d5462010000900461ffff1662000ef7565b50600d54640100000000900461ffff165b600061271062000f08838c620013f6565b62000f1491906200145f565b9050600083600001518460a0015162000f2e9190620014e7565b845161ffff9182169250829162000f47911684620013f6565b62000f5391906200145f565b6020860181905262000f66908362001445565b60408601819052602086015162000f7e9190620014a8565b62000f8a908c62001445565b855260c0850151602086015162000fa29190620013f6565b60a08601525062000fb5915050565b8782525b60408201511562001084578160c00151826040015162000fd69190620013f6565b306000908152600160205260408120805490919062000ff7908490620014a8565b9091555050306000908152600a602052604090205460ff1615620010425760408083015130600090815260026020529182208054919290916200103c908490620014a8565b90915550505b306001600160a01b03168a6001600160a01b03166000805160206200656483398151915284604001516040516200107b91815260200190565b60405180910390a35b8160c0015182604001516200109a9190620013f6565b8260a00151620010ab9190620014a8565b8260800151620010bc919062001445565b60608301525098975050505050505050565b600c5460009081620010e36009600a620013e5565b620010f790670de0b6b3a7640000620013f6565b6010546001600160a01b03166000908152600a60205260409020549091508290829060ff161562001193576010546001600160a01b0316600090815260016020908152604080832054600290925290912054838211806200115757508281115b1562001174576200116985876200145f565b965050505050505090565b62001180828562001445565b93506200118e818462001445565b925050505b600b54156200129d5760005b600b5460ff821610156200129b57600060016000600b8460ff1681548110620011cc57620011cc62001510565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600b805491935060029183919060ff871690811062001214576200121462001510565b60009182526020808320909101546001600160a01b031683528201929092526040019020549050848211806200124957508381115b1562001267576200125b86886200145f565b97505050505050505090565b62001273828662001445565b945062001281818562001445565b935050508080620012929062001526565b9150506200119f565b505b620012a983856200145f565b821015620012c657620012bd83856200145f565b94505050505090565b620012bd81836200145f565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620013295781600019048211156200130d576200130d620012d2565b808516156200131b57918102915b93841c9390800290620012ed565b509250929050565b600082620013425750600162000cea565b81620013515750600062000cea565b81600181146200136a5760028114620013755762001395565b600191505062000cea565b60ff841115620013895762001389620012d2565b50506001821b62000cea565b5060208310610133831016604e8410600b8410161715620013ba575081810a62000cea565b620013c68383620012e8565b8060001904821115620013dd57620013dd620012d2565b029392505050565b600062000ce760ff84168362001331565b6000816000190483118215151615620014135762001413620012d2565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262001440576200144062001418565b500690565b6000828210156200145a576200145a620012d2565b500390565b60008262001471576200147162001418565b500490565b6000602082840312156200148957600080fd5b81516001600160a01b0381168114620014a157600080fd5b9392505050565b60008219821115620014be57620014be620012d2565b500190565b600060208284031215620014d657600080fd5b81518015158114620014a157600080fd5b600061ffff808316818516808303821115620015075762001507620012d2565b01949350505050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036200153f576200153f620012d2565b60010192915050565b61500c80620015586000396000f3fe6080604052600436106103a65760003560e01c80634fbee193116101e7578063a9059cbb1161010d578063ee5d9c2d116100a0578063fb78680d1161006f578063fb78680d14610bf9578063fdb78c0e14610c19578063fe575a8714610c38578063feadde9c14610c5857600080fd5b8063ee5d9c2d14610b4d578063eec2744e14610b62578063f08f43a214610b82578063f94aa1b414610ba257600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a2d578063cf84770614610a4d578063dd62ed3e14610ae7578063eafb5a3c14610b2d57600080fd5b8063a9059cbb146109f3578063b1b08f711461064e578063b3d514fb1461064e578063b7df8b3614610a1357600080fd5b8063715018a611610185578063893d20e811610154578063893d20e8146109655780638a63bd9b146109835780638a8c523c1461099857806395d89b41146109ad57600080fd5b8063715018a6146108d757806375cb1bd1146108ec57806380c581d11461090c57806388f820201461092c57600080fd5b80635c24b074116101c15780635c24b074146108495780635cce86cd146108695780636ebd0078146108a257806370a08231146108b757600080fd5b80634fbee193146107d157806350a8e0161461080a578063590ffdce1461082957600080fd5b806328577751116102cc57806333251a0b1161026a57806346ea7ac81161023957806346ea7ac8146107615780634ada218b146107775780634e718e48146107915780634fb2e45d146107b157600080fd5b806333251a0b146106e157806336fddb04146107015780633f3cf56c14610721578063452ed4f11461074157600080fd5b80632d838119116102a65780632d838119146106645780632e8fa82114610684578063313ce5671461069a57806332cde664146106c157600080fd5b806328577751146106235780632b112e49146106395780632b28fc7a1461064e57600080fd5b8063095ea7b31161034457806318160ddd1161031357806318160ddd146105ae57806323b872dd146105c357806326003957146105e35780632610eaca1461060357600080fd5b8063095ea7b3146105105780630dcbcf1c146105405780630fa604e41461057957806313e461921461058e57600080fd5b806305bbedb61161038057806305bbedb61461042b578063069d955f1461044b57806306fdde03146104a15780630758d924146104f057600080fd5b806303fd2a45146103b25780630445b667146103e5578063044df7261461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb60155481565b6040519081526020016103dc565b34801561041557600080fd5b50610429610424366004614755565b610c78565b005b34801561043757600080fd5b5061042961044636600461489b565b610d55565b34801561045757600080fd5b50600d5461047c9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103dc565b3480156104ad57600080fd5b5060408051808201909152600a81527f536f6c617220417065730000000000000000000000000000000000000000000060208201525b6040516103dc91906148e2565b3480156104fc57600080fd5b50600f546103c8906001600160a01b031681565b34801561051c57600080fd5b5061053061052b366004614937565b610df3565b60405190151581526020016103dc565b34801561054c57600080fd5b5061053061055b366004614963565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561058557600080fd5b506103fb610e0a565b34801561059a57600080fd5b506104296105a9366004614980565b610e2a565b3480156105ba57600080fd5b506103fb6112df565b3480156105cf57600080fd5b506105306105de36600461499e565b611329565b3480156105ef57600080fd5b506104296105fe3660046149df565b6113a1565b34801561060f57600080fd5b5061042961061e366004614a01565b6114fc565b34801561062f57600080fd5b506103fb60185481565b34801561064557600080fd5b506103fb61164e565b34801561065a57600080fd5b506103fb6105dc81565b34801561067057600080fd5b506103fb61067f366004614abc565b611697565b34801561069057600080fd5b506103fb60165481565b3480156106a657600080fd5b506106af61172e565b60405160ff90911681526020016103dc565b3480156106cd57600080fd5b506104296106dc366004614aec565b611760565b3480156106ed57600080fd5b506104296106fc366004614963565b6118fa565b34801561070d57600080fd5b5061042961071c366004614980565b6119ca565b34801561072d57600080fd5b5061042961073c3660046149df565b611a43565b34801561074d57600080fd5b506010546103c8906001600160a01b031681565b34801561076d57600080fd5b506103fb610a2881565b34801561078357600080fd5b50601b546105309060ff1681565b34801561079d57600080fd5b506104296107ac366004614abc565b611b9f565b3480156107bd57600080fd5b506104296107cc366004614963565b611c43565b3480156107dd57600080fd5b506105306107ec366004614963565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561081657600080fd5b50601b5461053090610100900460ff1681565b34801561083557600080fd5b50610429610844366004614980565b611e64565b34801561085557600080fd5b50610429610864366004614963565b611edd565b34801561087557600080fd5b50610530610884366004614963565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156108ae57600080fd5b506103fb611fd3565b3480156108c357600080fd5b506103fb6108d2366004614963565b611fee565b3480156108e357600080fd5b5061042961204d565b3480156108f857600080fd5b50610429610907366004614b2f565b61210c565b34801561091857600080fd5b50610429610927366004614980565b6121a6565b34801561093857600080fd5b50610530610947366004614963565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561097157600080fd5b506000546001600160a01b03166103c8565b34801561098f57600080fd5b50610530612362565b3480156109a457600080fd5b506104296123d1565b3480156109b957600080fd5b5060408051808201909152600581527f534150455300000000000000000000000000000000000000000000000000000060208201526104e3565b3480156109ff57600080fd5b50610530610a0e366004614937565b61261d565b348015610a1f57600080fd5b506017546105309060ff1681565b348015610a3957600080fd5b50610429610a48366004614755565b612634565b348015610a5957600080fd5b50600e54610aaa9061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103dc565b348015610af357600080fd5b506103fb610b02366004614b7a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b3957600080fd5b50610429610b48366004614963565b6126e1565b348015610b5957600080fd5b50610429612ae8565b348015610b6e57600080fd5b50610429610b7d366004614980565b612bcb565b348015610b8e57600080fd5b50610429610b9d366004614ba8565b612c73565b348015610bae57600080fd5b50601154601254601354610bcf926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103dc565b348015610c0557600080fd5b50610429610c14366004614c0d565b612ea5565b348015610c2557600080fd5b5060145461053090610100900460ff1681565b348015610c4457600080fd5b50610530610c53366004614963565b612fe0565b348015610c6457600080fd5b50610429610c73366004614980565b61306e565b6000546001600160a01b03163314610ccb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601b546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d3957600080fd5b505af1158015610d4d573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610da35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d1f9085908590600401614c83565b6000610e003384846130e7565b5060015b92915050565b6000610e186009600a614dba565b601a54610e259190614dc9565b905090565b6000546001600160a01b03163314610e785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b8015610fcd576001600160a01b0382166000908152600a602052604090205460ff1615610ee75760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cc2565b6001600160a01b03821660009081526001602052604090205415610f41576001600160a01b038216600090815260016020526040902054610f2790611697565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff1916600117905560105490911614610fc957600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80610fc9576001600160a01b0382166000908152600a602052604090205460ff1661103a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cc2565b6010546001600160a01b03908116908316036110b5576110586131f4565b6001600160a01b03831660009081526002602052604090205461107b9190614e04565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b54600103611164576110c76131f4565b6001600160a01b0383166000908152600260205260409020546110ea9190614e04565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b80548061113157611131614e23565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b600b548110156112da57826001600160a01b0316600b828154811061118e5761118e614e52565b6000918252602090912001546001600160a01b0316036112c857600b80546111b890600190614e81565b815481106111c8576111c8614e52565b600091825260209091200154600b80546001600160a01b0390921691839081106111f4576111f4614e52565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061122a6131f4565b6001600160a01b03841660009081526002602052604090205461124d9190614e04565b6001600160a01b03841660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b80548061129457611294614e23565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806112d281614e98565b915050611167565b505050565b60006112ed6009600a614dba565b6112ff90670de0b6b3a7640000614e04565b60000361130b57600080fd5b6113176009600a614dba565b610e2590670de0b6b3a7640000614e04565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461138e576001600160a01b038416600090815260056020908152604080832033845290915281208054849290611388908490614e81565b90915550505b6113998484846133d1565b949350505050565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b60646113fd6009600a614dba565b61140f90670de0b6b3a7640000614e04565b6114199190614dc9565b81836114276009600a614dba565b61143990670de0b6b3a7640000614e04565b6114439190614e04565b61144d9190614dc9565b10156114c15760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610cc2565b80826114cf6009600a614dba565b6114e190670de0b6b3a7640000614e04565b6114eb9190614e04565b6114f59190614dc9565b601a555050565b6000546001600160a01b0316331461154a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b805182511461159b5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cc2565b60005b82518160ff1610156112da57818160ff16815181106115bf576115bf614e52565b60200260200101516115d033611fee565b10156115db57600080fd5b61163b33848360ff16815181106115f4576115f4614e52565b60200260200101516009600a61160a9190614dba565b858560ff168151811061161f5761161f614e52565b60200260200101516116319190614e04565b6000806001613840565b508061164681614eb2565b91505061159e565b600061165a6000611fee565b61166561dead611fee565b61166f9190614ed1565b61167b6009600a614dba565b61168d90670de0b6b3a7640000614e04565b610e259190614e81565b6000600c548211156117115760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cc2565b600061171b6131f4565b90506117278184614dc9565b9392505050565b600061173c6009600a614dba565b61174e90670de0b6b3a7640000614e04565b60000361175a57600080fd5b50600990565b6000546001600160a01b031633146117ae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6105dc8361ffff16111580156117ca57506105dc8261ffff1611155b80156117dc57506105dc8161ffff1611155b6118285760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cc2565b610a286118358385614ee9565b61ffff1611156118875760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610cc2565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146119485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156119af57600080fd5b505af11580156119c3573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314611a185760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a915760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6103e8611aa06009600a614dba565b611ab290670de0b6b3a7640000614e04565b611abc9190614dc9565b8183611aca6009600a614dba565b611adc90670de0b6b3a7640000614e04565b611ae69190614e04565b611af09190614dc9565b1015611b645760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cc2565b8082611b726009600a614dba565b611b8490670de0b6b3a7640000614e04565b611b8e9190614e04565b611b989190614dc9565b6019555050565b6000546001600160a01b03163314611bed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b60c8811115611c3e5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610cc2565b601855565b6000546001600160a01b03163314611c915760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6001600160a01b038116611d0d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611dab5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc2565b60008054611dc4916001600160a01b0390911690611e64565b611dcf816001611e64565b60008054611de5906001600160a01b0316611fee565b1115611e0757600054611e05906001600160a01b03168261163182611fee565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611eb25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611f2b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b5460ff1615611f3b57600080fd5b306001600160a01b03821603611f935760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cc2565b601b80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611fe16009600a614dba565b601954610e259190614dc9565b6001600160a01b0381166000908152600a602052604081205460ff161561202b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e0490611697565b6000546001600160a01b0316331461209b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b600080546120b4916001600160a01b0390911690611e64565b6000805473ffffffffffffffffffffffffffffffffffffffff19811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b0316331461215a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601180546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601280549385169382169390931790925560138054919093169116179055565b6000546001600160a01b031633146121f45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b80612280576001600160a01b03828116600081815260036020526040808220805460ff19169055601b5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d3957600080fd5b600454156122e7576203f4806004544261229a9190614e81565b116122e75760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cc2565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601b5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d1f565b600080546001600160a01b031633146123b15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b600f546123cb9030906001600160a01b03166000196130e7565b50600190565b6000546001600160a01b0316331461241f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b5460ff16156124725760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cc2565b601b54610100900460ff166124c95760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cc2565b601b546201000090046001600160a01b031661250f57601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b546010546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561259a57600080fd5b505af19250505080156125ab575060015b50601b805460ff19166001179055601054612710906125d2906001600160a01b0316611fee565b6125dd90600a614e04565b6125e79190614dc9565b60155560105461271090612603906001600160a01b0316611fee565b61260e90601e614e04565b6126189190614dc9565b601655565b600061262a3384846133d1565b5060019392505050565b6000546001600160a01b031633146126825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6014805461ff001916610100841515908102919091179091556017805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b0316331461272f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b54610100900460ff16156127875760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610cc2565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f09190614f0f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561283d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128619190614f0f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156128c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e89190614f0f565b90506001600160a01b038116612a8657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295a9190614f0f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cb9190614f0f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a549190614f0f565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612aaf565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556112da9030906000196130e7565b6000546001600160a01b03163314612b365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b54610100900460ff1615612b8e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cc2565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612bc8573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612c195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d1f565b6000546001600160a01b03163314612cc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b600e805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000085831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1668010000000000000000918416919091021790558082612d9a8587614ee9565b612da49190614ee9565b612dae9190614ee9565b600e80547fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff166a010000000000000000000061ffff93841602179055600d54600091612e039162010000810482169116614ee9565b600e5461ffff91821692508291612e2d91808216916a010000000000000000000090910416614ee9565b61ffff161115610d4d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610cc2565b6000546001600160a01b03163314612ef35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b8284612f016009600a614dba565b612f1390670de0b6b3a7640000614e04565b612f1d9190614e04565b612f279190614dc9565b6015558082612f386009600a614dba565b612f4a90670de0b6b3a7640000614e04565b612f549190614e04565b612f5e9190614dc9565b60168190556015541115612fda5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610cc2565b50505050565b601b546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e049190614f2c565b6000546001600160a01b031633146130bc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03831661313d5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc2565b6001600160a01b0382166131935760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600c54600090816132076009600a614dba565b61321990670de0b6b3a7640000614e04565b6010546001600160a01b03166000908152600a60205260409020549091508290829060ff16156132ac576010546001600160a01b03166000908152600160209081526040808320546002909252909120548382118061327757508281115b15613291576132868587614dc9565b965050505050505090565b61329b8285614e81565b93506132a78184614e81565b925050505b600b54156133a35760005b600b5460ff821610156133a157600060016000600b8460ff16815481106132e0576132e0614e52565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600b805491935060029183919060ff871690811061332557613325614e52565b60009182526020808320909101546001600160a01b0316835282019290925260400190205490508482118061335957508381115b15613374576133688688614dc9565b97505050505050505090565b61337e8286614e81565b945061338a8185614e81565b93505050808061339990614eb2565b9150506132b7565b505b6133ad8385614dc9565b8210156133c7576133be8385614dc9565b94505050505090565b6133be8183614dc9565b60006001600160a01b03841661344f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cc2565b6001600160a01b0383166134cb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cc2565b600082116135415760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cc2565b6001600160a01b0384166000908152600360205260408120548190819060ff161561356f576001925061359d565b6001600160a01b03861660009081526003602052604090205460ff1615613599576001915061359d565b5060015b6135a78787613b59565b1561379757601b5460ff166135fe5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cc2565b82806136075750815b156136cb576001600160a01b03871660009081526009602052604090205460ff1615801561364e57506001600160a01b03861660009081526009602052604090205460ff16155b156136cb576019548511156136cb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cc2565b600f546001600160a01b038781169116148015906136e7575081155b15613797576001600160a01b03861660009081526009602052604090205460ff1661379757601a548561371988611fee565b6137239190614ed1565b11156137975760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cc2565b81156138275760145460ff1661382757601454610100900460ff16156138275760006137c230611fee565b905060155481106138255760165460175460ff161561380f5760185460105461271091906137f8906001600160a01b0316611fee565b6138029190614e04565b61380c9190614dc9565b90505b80821061381a578091505b61382382613c6c565b505b505b613835878787868686613840565b979650505050505050565b601b54600090610100900460ff166139405761385c8787614204565b601b54610100900460ff1615801561387957506138798787613b59565b801561389e57506001600160a01b03871660009081526007602052604090205460ff16155b80156138c357506001600160a01b03861660009081526007602052604090205460ff16155b80156138cd575081155b156139405760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610cc2565b6001600160a01b03871660009081526008602052604090205460019060ff168061398257506001600160a01b03871660009081526008602052604090205460ff165b1561398b575060005b600061399c898989858a8a8a614374565b60808101516001600160a01b038b166000908152600160205260408120805493945091926139cb908490614e81565b909155505060608101516001600160a01b038916600090815260016020526040812080549091906139fd908490614ed1565b90915550506001600160a01b0389166000908152600a602052604090205460ff1615613a61576001600160a01b038916600090815260026020526040902054613a47908890614e81565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff1615613ac15780516001600160a01b038916600090815260026020526040902054613aa79190614ed1565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613ad8575060008160200151115b15613af9578060a00151600c6000828254613af39190614e81565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613b4291815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590613b8657506000546001600160a01b03838116911614155b8015613b9d57506000546001600160a01b03163214155b8015613bc257506001600160a01b03821660009081526006602052604090205460ff16155b8015613be757506001600160a01b03831660009081526006602052604090205460ff16155b8015613bfe57506001600160a01b03821661dead14155b8015613c1257506001600160a01b03821615155b8015613c2757506001600160a01b0383163014155b8015613c475750601b546001600160a01b03848116620100009092041614155b8015611727575050601b546201000090046001600160a01b0390811691161415919050565b6014805460ff191660011790556040805160c081018252600e5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a08201819052600003613cf557506141f7565b306000908152600560209081526040808320600f546001600160a01b0316845290915290205460001914613d4e57306000908152600560209081526040808320600f546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff1685613d6f9190614e04565b613d799190614dc9565b613d839190614dc9565b90506000613d918285614e81565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613dcb57613dcb614e52565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e619190614f0f565b81600181518110613e7457613e74614e52565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613ed3908590600090869030904290600401614f49565b600060405180830381600087803b158015613eed57600080fd5b505af1158015613f01573d6000803e3d6000fd5b5047925060009150849050613f168684614e04565b613f209190614dc9565b9050841561401157600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613faf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613fd49190614f85565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61401b8183614e81565b915085602001518660a0018181516140339190614fb3565b61ffff90811690915260a088015160608901516000935083929182169161405b911686614e04565b6140659190614dc9565b905060008860a0015161ffff16896080015161ffff16866140869190614e04565b6140909190614dc9565b9050600061409e8284614ed1565b6140a89087614e81565b60408b015190915061ffff1615614116576011546040516001600160a01b03909116906188b89083906000818181858888f193505050503d806000811461410b576040519150601f19603f3d011682016040523d82523d6000602084013e614110565b606091505b50909450505b60608a015161ffff1615614181576012546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114614176576040519150601f19603f3d011682016040523d82523d6000602084013e61417b565b606091505b50909450505b60808a015161ffff16156141ec576013546040516001600160a01b03909116906188b89084906000818181858888f193505050503d80600081146141e1576040519150601f19603f3d011682016040523d82523d6000602084013e6141e6565b606091505b50909450505b505050505050505050505b506014805460ff19169055565b601b54610100900460ff16156142825760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cc2565b61428c8282613b59565b1580156142a657506010546001600160a01b038281169116145b15610fc9576001600160a01b038083166000908152600660209081526040808320805460ff1990811660019081179092556008909352922080549091169091179055601b805461ff00191661010017908190556201000090041661433457601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016126d5565b6143b46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6143f46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c081018252600e5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a08201526144696131f4565b60c0830181905261447a9089614e04565b60808301526144898a8a613b59565b1561453c57601b546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614525575060408051601f3d908101601f1916820190925261452291810190614f2c565b60015b61452e57600080fd5b90508061453a57600080fd5b505b861561462857600086156145575750600d5461ffff16614581565b85156145705750600d5462010000900461ffff16614581565b50600d54640100000000900461ffff165b6000612710614590838c614e04565b61459a9190614dc9565b9050600083600001518460a001516145b29190614ee9565b845161ffff918216925082916145c9911684614e04565b6145d39190614dc9565b602086018190526145e49083614e81565b6040860181905260208601516145fa9190614ed1565b614604908c614e81565b855260c0850151602086015161461a9190614e04565b60a08601525061462c915050565b8782525b604082015115614703578160c00151826040015161464a9190614e04565b3060009081526001602052604081208054909190614669908490614ed1565b9091555050306000908152600a602052604090205460ff16156146b15760408083015130600090815260026020529182208054919290916146ab908490614ed1565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604001516040516146fa91815260200190565b60405180910390a35b8160c0015182604001516147179190614e04565b8260a001516147269190614ed1565b82608001516147359190614e81565b60608301525098975050505050505050565b8015158114612bc857600080fd5b6000806040838503121561476857600080fd5b823561477381614747565b9150602083013561478381614747565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156147e6576147e661478e565b604052919050565b600067ffffffffffffffff8211156148085761480861478e565b5060051b60200190565b6001600160a01b0381168114612bc857600080fd5b600082601f83011261483857600080fd5b8135602061484d614848836147ee565b6147bd565b82815260059290921b8401810191818101908684111561486c57600080fd5b8286015b8481101561489057803561488381614812565b8352918301918301614870565b509695505050505050565b600080604083850312156148ae57600080fd5b823567ffffffffffffffff8111156148c557600080fd5b6148d185828601614827565b925050602083013561478381614747565b600060208083528351808285015260005b8181101561490f578581018301518582016040015282016148f3565b81811115614921576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561494a57600080fd5b823561495581614812565b946020939093013593505050565b60006020828403121561497557600080fd5b813561172781614812565b6000806040838503121561499357600080fd5b823561477381614812565b6000806000606084860312156149b357600080fd5b83356149be81614812565b925060208401356149ce81614812565b929592945050506040919091013590565b600080604083850312156149f257600080fd5b50508035926020909101359150565b60008060408385031215614a1457600080fd5b823567ffffffffffffffff80821115614a2c57600080fd5b614a3886838701614827565b9350602091508185013581811115614a4f57600080fd5b85019050601f81018613614a6257600080fd5b8035614a70614848826147ee565b81815260059190911b82018301908381019088831115614a8f57600080fd5b928401925b82841015614aad57833582529284019290840190614a94565b80955050505050509250929050565b600060208284031215614ace57600080fd5b5035919050565b803561ffff81168114614ae757600080fd5b919050565b600080600060608486031215614b0157600080fd5b614b0a84614ad5565b9250614b1860208501614ad5565b9150614b2660408501614ad5565b90509250925092565b600080600060608486031215614b4457600080fd5b8335614b4f81614812565b92506020840135614b5f81614812565b91506040840135614b6f81614812565b809150509250925092565b60008060408385031215614b8d57600080fd5b8235614b9881614812565b9150602083013561478381614812565b600080600080600060a08688031215614bc057600080fd5b614bc986614ad5565b9450614bd760208701614ad5565b9350614be560408701614ad5565b9250614bf360608701614ad5565b9150614c0160808701614ad5565b90509295509295909350565b60008060008060808587031215614c2357600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614c785781516001600160a01b031687529582019590820190600101614c53565b509495945050505050565b604081526000614c966040830185614c3f565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614d11578160001904821115614cf757614cf7614ca7565b80851615614d0457918102915b93841c9390800290614cdb565b509250929050565b600082614d2857506001610e04565b81614d3557506000610e04565b8160018114614d4b5760028114614d5557614d71565b6001915050610e04565b60ff841115614d6657614d66614ca7565b50506001821b610e04565b5060208310610133831016604e8410600b8410161715614d94575081810a610e04565b614d9e8383614cd6565b8060001904821115614db257614db2614ca7565b029392505050565b600061172760ff841683614d19565b600082614dff577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614e1e57614e1e614ca7565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015614e9357614e93614ca7565b500390565b60006000198203614eab57614eab614ca7565b5060010190565b600060ff821660ff8103614ec857614ec8614ca7565b60010192915050565b60008219821115614ee457614ee4614ca7565b500190565b600061ffff808316818516808303821115614f0657614f06614ca7565b01949350505050565b600060208284031215614f2157600080fd5b815161172781614812565b600060208284031215614f3e57600080fd5b815161172781614747565b85815284602082015260a060408201526000614f6860a0830186614c3f565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614f9a57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015614fce57614fce614ca7565b03939250505056fea2646970667358221220bafd8ab0f07280e5edecab67ddcba5846e5c63ada161ef885e05688c890dcf2a64736f6c634300080f0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80634fbee193116101e7578063a9059cbb1161010d578063ee5d9c2d116100a0578063fb78680d1161006f578063fb78680d14610bf9578063fdb78c0e14610c19578063fe575a8714610c38578063feadde9c14610c5857600080fd5b8063ee5d9c2d14610b4d578063eec2744e14610b62578063f08f43a214610b82578063f94aa1b414610ba257600080fd5b8063bfc2fc35116100dc578063bfc2fc3514610a2d578063cf84770614610a4d578063dd62ed3e14610ae7578063eafb5a3c14610b2d57600080fd5b8063a9059cbb146109f3578063b1b08f711461064e578063b3d514fb1461064e578063b7df8b3614610a1357600080fd5b8063715018a611610185578063893d20e811610154578063893d20e8146109655780638a63bd9b146109835780638a8c523c1461099857806395d89b41146109ad57600080fd5b8063715018a6146108d757806375cb1bd1146108ec57806380c581d11461090c57806388f820201461092c57600080fd5b80635c24b074116101c15780635c24b074146108495780635cce86cd146108695780636ebd0078146108a257806370a08231146108b757600080fd5b80634fbee193146107d157806350a8e0161461080a578063590ffdce1461082957600080fd5b806328577751116102cc57806333251a0b1161026a57806346ea7ac81161023957806346ea7ac8146107615780634ada218b146107775780634e718e48146107915780634fb2e45d146107b157600080fd5b806333251a0b146106e157806336fddb04146107015780633f3cf56c14610721578063452ed4f11461074157600080fd5b80632d838119116102a65780632d838119146106645780632e8fa82114610684578063313ce5671461069a57806332cde664146106c157600080fd5b806328577751146106235780632b112e49146106395780632b28fc7a1461064e57600080fd5b8063095ea7b31161034457806318160ddd1161031357806318160ddd146105ae57806323b872dd146105c357806326003957146105e35780632610eaca1461060357600080fd5b8063095ea7b3146105105780630dcbcf1c146105405780630fa604e41461057957806313e461921461058e57600080fd5b806305bbedb61161038057806305bbedb61461042b578063069d955f1461044b57806306fdde03146104a15780630758d924146104f057600080fd5b806303fd2a45146103b25780630445b667146103e5578063044df7261461040957600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f157600080fd5b506103fb60155481565b6040519081526020016103dc565b34801561041557600080fd5b50610429610424366004614755565b610c78565b005b34801561043757600080fd5b5061042961044636600461489b565b610d55565b34801561045757600080fd5b50600d5461047c9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103dc565b3480156104ad57600080fd5b5060408051808201909152600a81527f536f6c617220417065730000000000000000000000000000000000000000000060208201525b6040516103dc91906148e2565b3480156104fc57600080fd5b50600f546103c8906001600160a01b031681565b34801561051c57600080fd5b5061053061052b366004614937565b610df3565b60405190151581526020016103dc565b34801561054c57600080fd5b5061053061055b366004614963565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561058557600080fd5b506103fb610e0a565b34801561059a57600080fd5b506104296105a9366004614980565b610e2a565b3480156105ba57600080fd5b506103fb6112df565b3480156105cf57600080fd5b506105306105de36600461499e565b611329565b3480156105ef57600080fd5b506104296105fe3660046149df565b6113a1565b34801561060f57600080fd5b5061042961061e366004614a01565b6114fc565b34801561062f57600080fd5b506103fb60185481565b34801561064557600080fd5b506103fb61164e565b34801561065a57600080fd5b506103fb6105dc81565b34801561067057600080fd5b506103fb61067f366004614abc565b611697565b34801561069057600080fd5b506103fb60165481565b3480156106a657600080fd5b506106af61172e565b60405160ff90911681526020016103dc565b3480156106cd57600080fd5b506104296106dc366004614aec565b611760565b3480156106ed57600080fd5b506104296106fc366004614963565b6118fa565b34801561070d57600080fd5b5061042961071c366004614980565b6119ca565b34801561072d57600080fd5b5061042961073c3660046149df565b611a43565b34801561074d57600080fd5b506010546103c8906001600160a01b031681565b34801561076d57600080fd5b506103fb610a2881565b34801561078357600080fd5b50601b546105309060ff1681565b34801561079d57600080fd5b506104296107ac366004614abc565b611b9f565b3480156107bd57600080fd5b506104296107cc366004614963565b611c43565b3480156107dd57600080fd5b506105306107ec366004614963565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561081657600080fd5b50601b5461053090610100900460ff1681565b34801561083557600080fd5b50610429610844366004614980565b611e64565b34801561085557600080fd5b50610429610864366004614963565b611edd565b34801561087557600080fd5b50610530610884366004614963565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156108ae57600080fd5b506103fb611fd3565b3480156108c357600080fd5b506103fb6108d2366004614963565b611fee565b3480156108e357600080fd5b5061042961204d565b3480156108f857600080fd5b50610429610907366004614b2f565b61210c565b34801561091857600080fd5b50610429610927366004614980565b6121a6565b34801561093857600080fd5b50610530610947366004614963565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561097157600080fd5b506000546001600160a01b03166103c8565b34801561098f57600080fd5b50610530612362565b3480156109a457600080fd5b506104296123d1565b3480156109b957600080fd5b5060408051808201909152600581527f534150455300000000000000000000000000000000000000000000000000000060208201526104e3565b3480156109ff57600080fd5b50610530610a0e366004614937565b61261d565b348015610a1f57600080fd5b506017546105309060ff1681565b348015610a3957600080fd5b50610429610a48366004614755565b612634565b348015610a5957600080fd5b50600e54610aaa9061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016103dc565b348015610af357600080fd5b506103fb610b02366004614b7a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b3957600080fd5b50610429610b48366004614963565b6126e1565b348015610b5957600080fd5b50610429612ae8565b348015610b6e57600080fd5b50610429610b7d366004614980565b612bcb565b348015610b8e57600080fd5b50610429610b9d366004614ba8565b612c73565b348015610bae57600080fd5b50601154601254601354610bcf926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016103dc565b348015610c0557600080fd5b50610429610c14366004614c0d565b612ea5565b348015610c2557600080fd5b5060145461053090610100900460ff1681565b348015610c4457600080fd5b50610530610c53366004614963565b612fe0565b348015610c6457600080fd5b50610429610c73366004614980565b61306e565b6000546001600160a01b03163314610ccb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601b546040517fefbdbabd00000000000000000000000000000000000000000000000000000000815283151560048201528215156024820152620100009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610d3957600080fd5b505af1158015610d4d573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610da35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610d1f9085908590600401614c83565b6000610e003384846130e7565b5060015b92915050565b6000610e186009600a614dba565b601a54610e259190614dc9565b905090565b6000546001600160a01b03163314610e785760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b8015610fcd576001600160a01b0382166000908152600a602052604090205460ff1615610ee75760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cc2565b6001600160a01b03821660009081526001602052604090205415610f41576001600160a01b038216600090815260016020526040902054610f2790611697565b6001600160a01b0383166000908152600260205260409020555b6001600160a01b038083166000818152600a60205260409020805460ff1916600117905560105490911614610fc957600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db901805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555b5050565b80610fc9576001600160a01b0382166000908152600a602052604090205460ff1661103a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cc2565b6010546001600160a01b03908116908316036110b5576110586131f4565b6001600160a01b03831660009081526002602052604090205461107b9190614e04565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff191690555050565b600b54600103611164576110c76131f4565b6001600160a01b0383166000908152600260205260409020546110ea9190614e04565b6001600160a01b03831660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b80548061113157611131614e23565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff191690550190555050565b60005b600b548110156112da57826001600160a01b0316600b828154811061118e5761118e614e52565b6000918252602090912001546001600160a01b0316036112c857600b80546111b890600190614e81565b815481106111c8576111c8614e52565b600091825260209091200154600b80546001600160a01b0390921691839081106111f4576111f4614e52565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061122a6131f4565b6001600160a01b03841660009081526002602052604090205461124d9190614e04565b6001600160a01b03841660009081526001602090815260408083209390935560028152828220829055600a905220805460ff19169055600b80548061129457611294614e23565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055505050565b806112d281614e98565b915050611167565b505050565b60006112ed6009600a614dba565b6112ff90670de0b6b3a7640000614e04565b60000361130b57600080fd5b6113176009600a614dba565b610e2590670de0b6b3a7640000614e04565b6001600160a01b03831660009081526005602090815260408083203384529091528120546000191461138e576001600160a01b038416600090815260056020908152604080832033845290915281208054849290611388908490614e81565b90915550505b6113998484846133d1565b949350505050565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b60646113fd6009600a614dba565b61140f90670de0b6b3a7640000614e04565b6114199190614dc9565b81836114276009600a614dba565b61143990670de0b6b3a7640000614e04565b6114439190614e04565b61144d9190614dc9565b10156114c15760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610cc2565b80826114cf6009600a614dba565b6114e190670de0b6b3a7640000614e04565b6114eb9190614e04565b6114f59190614dc9565b601a555050565b6000546001600160a01b0316331461154a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b805182511461159b5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610cc2565b60005b82518160ff1610156112da57818160ff16815181106115bf576115bf614e52565b60200260200101516115d033611fee565b10156115db57600080fd5b61163b33848360ff16815181106115f4576115f4614e52565b60200260200101516009600a61160a9190614dba565b858560ff168151811061161f5761161f614e52565b60200260200101516116319190614e04565b6000806001613840565b508061164681614eb2565b91505061159e565b600061165a6000611fee565b61166561dead611fee565b61166f9190614ed1565b61167b6009600a614dba565b61168d90670de0b6b3a7640000614e04565b610e259190614e81565b6000600c548211156117115760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610cc2565b600061171b6131f4565b90506117278184614dc9565b9392505050565b600061173c6009600a614dba565b61174e90670de0b6b3a7640000614e04565b60000361175a57600080fd5b50600990565b6000546001600160a01b031633146117ae5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6105dc8361ffff16111580156117ca57506105dc8261ffff1611155b80156117dc57506105dc8161ffff1611155b6118285760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610cc2565b610a286118358385614ee9565b61ffff1611156118875760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610cc2565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146119485760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401600060405180830381600087803b1580156119af57600080fd5b505af11580156119c3573d6000803e3d6000fd5b5050505050565b6000546001600160a01b03163314611a185760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a915760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6103e8611aa06009600a614dba565b611ab290670de0b6b3a7640000614e04565b611abc9190614dc9565b8183611aca6009600a614dba565b611adc90670de0b6b3a7640000614e04565b611ae69190614e04565b611af09190614dc9565b1015611b645760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cc2565b8082611b726009600a614dba565b611b8490670de0b6b3a7640000614e04565b611b8e9190614e04565b611b989190614dc9565b6019555050565b6000546001600160a01b03163314611bed5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b60c8811115611c3e5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610cc2565b601855565b6000546001600160a01b03163314611c915760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6001600160a01b038116611d0d5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611dab5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610cc2565b60008054611dc4916001600160a01b0390911690611e64565b611dcf816001611e64565b60008054611de5906001600160a01b0316611fee565b1115611e0757600054611e05906001600160a01b03168261163182611fee565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611eb25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611f2b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b5460ff1615611f3b57600080fd5b306001600160a01b03821603611f935760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610cc2565b601b80546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000611fe16009600a614dba565b601954610e259190614dc9565b6001600160a01b0381166000908152600a602052604081205460ff161561202b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e0490611697565b6000546001600160a01b0316331461209b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b600080546120b4916001600160a01b0390911690611e64565b6000805473ffffffffffffffffffffffffffffffffffffffff19811682556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b0316331461215a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601180546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601280549385169382169390931790925560138054919093169116179055565b6000546001600160a01b031633146121f45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b80612280576001600160a01b03828116600081815260036020526040808220805460ff19169055601b5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401600060405180830381600087803b158015610d3957600080fd5b600454156122e7576203f4806004544261229a9190614e81565b116122e75760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610cc2565b6001600160a01b0382811660008181526003602052604090819020805460ff19166001908117909155426004908155601b5492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610d1f565b600080546001600160a01b031633146123b15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b600f546123cb9030906001600160a01b03166000196130e7565b50600190565b6000546001600160a01b0316331461241f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b5460ff16156124725760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cc2565b601b54610100900460ff166124c95760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610cc2565b601b546201000090046001600160a01b031661250f57601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601b546010546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260096064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561259a57600080fd5b505af19250505080156125ab575060015b50601b805460ff19166001179055601054612710906125d2906001600160a01b0316611fee565b6125dd90600a614e04565b6125e79190614dc9565b60155560105461271090612603906001600160a01b0316611fee565b61260e90601e614e04565b6126189190614dc9565b601655565b600061262a3384846133d1565b5060019392505050565b6000546001600160a01b031633146126825760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6014805461ff001916610100841515908102919091179091556017805460ff19168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020015b60405180910390a15050565b6000546001600160a01b0316331461272f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b54610100900460ff16156127875760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610cc2565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f09190614f0f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561283d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128619190614f0f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156128c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e89190614f0f565b90506001600160a01b038116612a8657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295a9190614f0f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cb9190614f0f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a549190614f0f565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612aaf565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556112da9030906000196130e7565b6000546001600160a01b03163314612b365760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b54610100900460ff1615612b8e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610cc2565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612bc8573d6000803e3d6000fd5b50565b6000546001600160a01b03163314612c195760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b601b546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610d1f565b6000546001600160a01b03163314612cc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b600e805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000085831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff1668010000000000000000918416919091021790558082612d9a8587614ee9565b612da49190614ee9565b612dae9190614ee9565b600e80547fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff166a010000000000000000000061ffff93841602179055600d54600091612e039162010000810482169116614ee9565b600e5461ffff91821692508291612e2d91808216916a010000000000000000000090910416614ee9565b61ffff161115610d4d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610cc2565b6000546001600160a01b03163314612ef35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b8284612f016009600a614dba565b612f1390670de0b6b3a7640000614e04565b612f1d9190614e04565b612f279190614dc9565b6015558082612f386009600a614dba565b612f4a90670de0b6b3a7640000614e04565b612f549190614e04565b612f5e9190614dc9565b60168190556015541115612fda5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610cc2565b50505050565b601b546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa15801561304a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e049190614f2c565b6000546001600160a01b031633146130bc5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610cc2565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03831661313d5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc2565b6001600160a01b0382166131935760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610cc2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600c54600090816132076009600a614dba565b61321990670de0b6b3a7640000614e04565b6010546001600160a01b03166000908152600a60205260409020549091508290829060ff16156132ac576010546001600160a01b03166000908152600160209081526040808320546002909252909120548382118061327757508281115b15613291576132868587614dc9565b965050505050505090565b61329b8285614e81565b93506132a78184614e81565b925050505b600b54156133a35760005b600b5460ff821610156133a157600060016000600b8460ff16815481106132e0576132e0614e52565b60009182526020808320909101546001600160a01b03168352820192909252604001812054600b805491935060029183919060ff871690811061332557613325614e52565b60009182526020808320909101546001600160a01b0316835282019290925260400190205490508482118061335957508381115b15613374576133688688614dc9565b97505050505050505090565b61337e8286614e81565b945061338a8185614e81565b93505050808061339990614eb2565b9150506132b7565b505b6133ad8385614dc9565b8210156133c7576133be8385614dc9565b94505050505090565b6133be8183614dc9565b60006001600160a01b03841661344f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cc2565b6001600160a01b0383166134cb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cc2565b600082116135415760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610cc2565b6001600160a01b0384166000908152600360205260408120548190819060ff161561356f576001925061359d565b6001600160a01b03861660009081526003602052604090205460ff1615613599576001915061359d565b5060015b6135a78787613b59565b1561379757601b5460ff166135fe5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cc2565b82806136075750815b156136cb576001600160a01b03871660009081526009602052604090205460ff1615801561364e57506001600160a01b03861660009081526009602052604090205460ff16155b156136cb576019548511156136cb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610cc2565b600f546001600160a01b038781169116148015906136e7575081155b15613797576001600160a01b03861660009081526009602052604090205460ff1661379757601a548561371988611fee565b6137239190614ed1565b11156137975760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610cc2565b81156138275760145460ff1661382757601454610100900460ff16156138275760006137c230611fee565b905060155481106138255760165460175460ff161561380f5760185460105461271091906137f8906001600160a01b0316611fee565b6138029190614e04565b61380c9190614dc9565b90505b80821061381a578091505b61382382613c6c565b505b505b613835878787868686613840565b979650505050505050565b601b54600090610100900460ff166139405761385c8787614204565b601b54610100900460ff1615801561387957506138798787613b59565b801561389e57506001600160a01b03871660009081526007602052604090205460ff16155b80156138c357506001600160a01b03861660009081526007602052604090205460ff16155b80156138cd575081155b156139405760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610cc2565b6001600160a01b03871660009081526008602052604090205460019060ff168061398257506001600160a01b03871660009081526008602052604090205460ff165b1561398b575060005b600061399c898989858a8a8a614374565b60808101516001600160a01b038b166000908152600160205260408120805493945091926139cb908490614e81565b909155505060608101516001600160a01b038916600090815260016020526040812080549091906139fd908490614ed1565b90915550506001600160a01b0389166000908152600a602052604090205460ff1615613a61576001600160a01b038916600090815260026020526040902054613a47908890614e81565b6001600160a01b038a166000908152600260205260409020555b6001600160a01b0388166000908152600a602052604090205460ff1615613ac15780516001600160a01b038916600090815260026020526040902054613aa79190614ed1565b6001600160a01b0389166000908152600260205260409020555b60008160a001511180613ad8575060008160200151115b15613af9578060a00151600c6000828254613af39190614e81565b90915550505b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360000151604051613b4291815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590613b8657506000546001600160a01b03838116911614155b8015613b9d57506000546001600160a01b03163214155b8015613bc257506001600160a01b03821660009081526006602052604090205460ff16155b8015613be757506001600160a01b03831660009081526006602052604090205460ff16155b8015613bfe57506001600160a01b03821661dead14155b8015613c1257506001600160a01b03821615155b8015613c2757506001600160a01b0383163014155b8015613c475750601b546001600160a01b03848116620100009092041614155b8015611727575050601b546201000090046001600160a01b0390811691161415919050565b6014805460ff191660011790556040805160c081018252600e5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a08201819052600003613cf557506141f7565b306000908152600560209081526040808320600f546001600160a01b0316845290915290205460001914613d4e57306000908152600560209081526040808320600f546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff1685613d6f9190614e04565b613d799190614dc9565b613d839190614dc9565b90506000613d918285614e81565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613dcb57613dcb614e52565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e619190614f0f565b81600181518110613e7457613e74614e52565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613ed3908590600090869030904290600401614f49565b600060405180830381600087803b158015613eed57600080fd5b505af1158015613f01573d6000803e3d6000fd5b5047925060009150849050613f168684614e04565b613f209190614dc9565b9050841561401157600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613faf573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613fd49190614f85565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61401b8183614e81565b915085602001518660a0018181516140339190614fb3565b61ffff90811690915260a088015160608901516000935083929182169161405b911686614e04565b6140659190614dc9565b905060008860a0015161ffff16896080015161ffff16866140869190614e04565b6140909190614dc9565b9050600061409e8284614ed1565b6140a89087614e81565b60408b015190915061ffff1615614116576011546040516001600160a01b03909116906188b89083906000818181858888f193505050503d806000811461410b576040519150601f19603f3d011682016040523d82523d6000602084013e614110565b606091505b50909450505b60608a015161ffff1615614181576012546040516001600160a01b03909116906188b89085906000818181858888f193505050503d8060008114614176576040519150601f19603f3d011682016040523d82523d6000602084013e61417b565b606091505b50909450505b60808a015161ffff16156141ec576013546040516001600160a01b03909116906188b89084906000818181858888f193505050503d80600081146141e1576040519150601f19603f3d011682016040523d82523d6000602084013e6141e6565b606091505b50909450505b505050505050505050505b506014805460ff19169055565b601b54610100900460ff16156142825760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610cc2565b61428c8282613b59565b1580156142a657506010546001600160a01b038281169116145b15610fc9576001600160a01b038083166000908152600660209081526040808320805460ff1990811660019081179092556008909352922080549091169091179055601b805461ff00191661010017908190556201000090041661433457601b80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906020016126d5565b6143b46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6143f46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805160c081018252600e5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a08201526144696131f4565b60c0830181905261447a9089614e04565b60808301526144898a8a613b59565b1561453c57601b546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b81166024830152604482018b9052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015614525575060408051601f3d908101601f1916820190925261452291810190614f2c565b60015b61452e57600080fd5b90508061453a57600080fd5b505b861561462857600086156145575750600d5461ffff16614581565b85156145705750600d5462010000900461ffff16614581565b50600d54640100000000900461ffff165b6000612710614590838c614e04565b61459a9190614dc9565b9050600083600001518460a001516145b29190614ee9565b845161ffff918216925082916145c9911684614e04565b6145d39190614dc9565b602086018190526145e49083614e81565b6040860181905260208601516145fa9190614ed1565b614604908c614e81565b855260c0850151602086015161461a9190614e04565b60a08601525061462c915050565b8782525b604082015115614703578160c00151826040015161464a9190614e04565b3060009081526001602052604081208054909190614669908490614ed1565b9091555050306000908152600a602052604090205460ff16156146b15760408083015130600090815260026020529182208054919290916146ab908490614ed1565b90915550505b306001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604001516040516146fa91815260200190565b60405180910390a35b8160c0015182604001516147179190614e04565b8260a001516147269190614ed1565b82608001516147359190614e81565b60608301525098975050505050505050565b8015158114612bc857600080fd5b6000806040838503121561476857600080fd5b823561477381614747565b9150602083013561478381614747565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156147e6576147e661478e565b604052919050565b600067ffffffffffffffff8211156148085761480861478e565b5060051b60200190565b6001600160a01b0381168114612bc857600080fd5b600082601f83011261483857600080fd5b8135602061484d614848836147ee565b6147bd565b82815260059290921b8401810191818101908684111561486c57600080fd5b8286015b8481101561489057803561488381614812565b8352918301918301614870565b509695505050505050565b600080604083850312156148ae57600080fd5b823567ffffffffffffffff8111156148c557600080fd5b6148d185828601614827565b925050602083013561478381614747565b600060208083528351808285015260005b8181101561490f578581018301518582016040015282016148f3565b81811115614921576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561494a57600080fd5b823561495581614812565b946020939093013593505050565b60006020828403121561497557600080fd5b813561172781614812565b6000806040838503121561499357600080fd5b823561477381614812565b6000806000606084860312156149b357600080fd5b83356149be81614812565b925060208401356149ce81614812565b929592945050506040919091013590565b600080604083850312156149f257600080fd5b50508035926020909101359150565b60008060408385031215614a1457600080fd5b823567ffffffffffffffff80821115614a2c57600080fd5b614a3886838701614827565b9350602091508185013581811115614a4f57600080fd5b85019050601f81018613614a6257600080fd5b8035614a70614848826147ee565b81815260059190911b82018301908381019088831115614a8f57600080fd5b928401925b82841015614aad57833582529284019290840190614a94565b80955050505050509250929050565b600060208284031215614ace57600080fd5b5035919050565b803561ffff81168114614ae757600080fd5b919050565b600080600060608486031215614b0157600080fd5b614b0a84614ad5565b9250614b1860208501614ad5565b9150614b2660408501614ad5565b90509250925092565b600080600060608486031215614b4457600080fd5b8335614b4f81614812565b92506020840135614b5f81614812565b91506040840135614b6f81614812565b809150509250925092565b60008060408385031215614b8d57600080fd5b8235614b9881614812565b9150602083013561478381614812565b600080600080600060a08688031215614bc057600080fd5b614bc986614ad5565b9450614bd760208701614ad5565b9350614be560408701614ad5565b9250614bf360608701614ad5565b9150614c0160808701614ad5565b90509295509295909350565b60008060008060808587031215614c2357600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614c785781516001600160a01b031687529582019590820190600101614c53565b509495945050505050565b604081526000614c966040830185614c3f565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115614d11578160001904821115614cf757614cf7614ca7565b80851615614d0457918102915b93841c9390800290614cdb565b509250929050565b600082614d2857506001610e04565b81614d3557506000610e04565b8160018114614d4b5760028114614d5557614d71565b6001915050610e04565b60ff841115614d6657614d66614ca7565b50506001821b610e04565b5060208310610133831016604e8410600b8410161715614d94575081810a610e04565b614d9e8383614cd6565b8060001904821115614db257614db2614ca7565b029392505050565b600061172760ff841683614d19565b600082614dff577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614e1e57614e1e614ca7565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082821015614e9357614e93614ca7565b500390565b60006000198203614eab57614eab614ca7565b5060010190565b600060ff821660ff8103614ec857614ec8614ca7565b60010192915050565b60008219821115614ee457614ee4614ca7565b500190565b600061ffff808316818516808303821115614f0657614f06614ca7565b01949350505050565b600060208284031215614f2157600080fd5b815161172781614812565b600060208284031215614f3e57600080fd5b815161172781614747565b85815284602082015260a060408201526000614f6860a0830186614c3f565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215614f9a57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015614fce57614fce614ca7565b03939250505056fea2646970667358221220bafd8ab0f07280e5edecab67ddcba5846e5c63ada161ef885e05688c890dcf2a64736f6c634300080f0033

Deployed Bytecode Sourcemap

4192:27600:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6254:73;;;;;;;;;;;;6285:42;6254:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6254:73:0;;;;;;;;6825:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;6825:28:0;245:177:1;16098:151:0;;;;;;;;;;-1:-1:-1;16098:151:0;;;;;:::i;:::-;;:::i;:::-;;15667:172;;;;;;;;;;-1:-1:-1;15667:172:0;;;;;:::i;:::-;;:::i;5616:112::-;;;;;;;;;;-1:-1:-1;5616:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;3236:6:1;3269:15;;;3251:34;;3321:15;;;3316:2;3301:18;;3294:43;3373:15;;3353:18;;;3346:43;;;;3214:2;3199:18;5616:112:0;3030:365:1;11410:80:0;;;;;;;;;;-1:-1:-1;11482:5:0;;;;;;;;;;;;;;;;;11410:80;;;;;;;:::i;6193:26::-;;;;;;;;;;-1:-1:-1;6193:26:0;;;;-1:-1:-1;;;;;6193:26:0;;;12101:161;;;;;;;;;;-1:-1:-1;12101:161:0;;;;;:::i;:::-;;:::i;:::-;;;4794:14:1;;4787:22;4769:41;;4757:2;4742:18;12101:161:0;4629:187:1;14707:140:0;;;;;;;;;;-1:-1:-1;14707:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;14805:34:0;14781:4;14805:34;;;:25;:34;;;;;;;;;14707:140;18309:114;;;;;;;;;;;;;:::i;25707:1522::-;;;;;;;;;;-1:-1:-1;25707:1522:0;;;;;:::i;:::-;;:::i;11081:115::-;;;;;;;;;;;;;:::i;12771:306::-;;;;;;;;;;-1:-1:-1;12771:306:0;;;;;:::i;:::-;;:::i;17921:264::-;;;;;;;;;;-1:-1:-1;17921:264:0;;;;;:::i;:::-;;:::i;25161:410::-;;;;;;;;;;-1:-1:-1;25161:410:0;;;;;:::i;:::-;;:::i;6933:28::-;;;;;;;;;;;;;;;;15301:141;;;;;;;;;;;;;:::i;5937:42::-;;;;;;;;;;;;5975:4;5937:42;;27237:250;;;;;;;;;;-1:-1:-1;27237:250:0;;;;;:::i;:::-;;:::i;6860:25::-;;;;;;;;;;;;;;;;11202:112;;;;;;;;;;;;;:::i;:::-;;;7674:4:1;7662:17;;;7644:36;;7632:2;7617:18;11202:112:0;7502:184:1;16257:488:0;;;;;;;;;;-1:-1:-1;16257:488:0;;;;;:::i;:::-;;:::i;15982:108::-;;;;;;;;;;-1:-1:-1;15982:108:0;;;;;:::i;:::-;;:::i;14855:140::-;;;;;;;;;;-1:-1:-1;14855:140:0;;;;;:::i;:::-;;:::i;17644:269::-;;;;;;;;;;-1:-1:-1;17644:269:0;;;;;:::i;:::-;;:::i;6226:21::-;;;;;;;;;;-1:-1:-1;6226:21:0;;;;-1:-1:-1;;;;;6226:21:0;;;6090:46;;;;;;;;;;;;6132:4;6090:46;;7092:34;;;;;;;;;;-1:-1:-1;7092:34:0;;;;;;;;18812:215;;;;;;;;;;-1:-1:-1;18812:215:0;;;;;:::i;:::-;;:::i;9841:654::-;;;;;;;;;;-1:-1:-1;9841:654:0;;;;;:::i;:::-;;:::i;14572:127::-;;;;;;;;;;-1:-1:-1;14572:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;14663:28:0;14639:4;14663:28;;;:19;:28;;;;;;;;;14572:127;7133:36;;;;;;;;;;-1:-1:-1;7133:36:0;;;;;;;;;;;15003:134;;;;;;;;;;-1:-1:-1;15003:134:0;;;;;:::i;:::-;;:::i;14206:218::-;;;;;;;;;;-1:-1:-1;14206:218:0;;;;;:::i;:::-;;:::i;14432:132::-;;;;;;;;;;-1:-1:-1;14432:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;14526:30:0;14502:4;14526:30;;;:21;:30;;;;;;;;;14432:132;18193:108;;;;;;;;;;;;;:::i;11722:198::-;;;;;;;;;;-1:-1:-1;11722:198:0;;;;;:::i;:::-;;:::i;10503:225::-;;;;;;;;;;;;;:::i;17349:287::-;;;;;;;;;;-1:-1:-1;17349:287:0;;;;;:::i;:::-;;:::i;13706:492::-;;;;;;;;;;-1:-1:-1;13706:492:0;;;;;:::i;:::-;;:::i;25579:120::-;;;;;;;;;;-1:-1:-1;25579:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;25671:20:0;25647:4;25671:20;;;:11;:20;;;;;;;;;25579:120;11496:79;;;;;;;;;;-1:-1:-1;11548:7:0;11566:6;-1:-1:-1;;;;;11566:6:0;11496:79;;12588:175;;;;;;;;;;;;;:::i;24418:545::-;;;;;;;;;;;;;:::i;11320:84::-;;;;;;;;;;-1:-1:-1;11394:7:0;;;;;;;;;;;;;;;;;11320:84;;11928:165;;;;;;;;;;-1:-1:-1;11928:165:0;;;;;:::i;:::-;;:::i;6892:34::-;;;;;;;;;;-1:-1:-1;6892:34:0;;;;;;;;19035:263;;;;;;;;;;-1:-1:-1;19035:263:0;;;;;:::i;:::-;;:::i;5737:191::-;;;;;;;;;;-1:-1:-1;5737:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9031:6:1;9064:15;;;9046:34;;9116:15;;;9111:2;9096:18;;9089:43;9168:15;;;9148:18;;;9141:43;;;;9220:15;;;9215:2;9200:18;;9193:43;9273:15;;9267:3;9252:19;;9245:44;9326:15;;;9320:3;9305:19;;9298:44;9008:3;8993:19;5737:191:0;8746:602:1;11581:133:0;;;;;;;;;;-1:-1:-1;11581:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;11683:19:0;;;11665:7;11683:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;11581:133;13085:613;;;;;;;;;;-1:-1:-1;13085:613:0;;;;;:::i;:::-;;:::i;24971:182::-;;;;;;;;;;;;;:::i;15514:145::-;;;;;;;;;;-1:-1:-1;15514:145:0;;;;;:::i;:::-;;:::i;16753:588::-;;;;;;;;;;-1:-1:-1;16753:588:0;;;;;:::i;:::-;;:::i;6478:270::-;;;;;;;;;;-1:-1:-1;6478:270:0;;;;;;;;-1:-1:-1;;;;;6478:270:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10554:15:1;;;10536:34;;10606:15;;;10601:2;10586:18;;10579:43;10658:15;;10638:18;;;10631:43;;;;10463:2;10448:18;6478:270:0;10225:455:1;18431:373:0;;;;;;;;;;-1:-1:-1;18431:373:0;;;;;:::i;:::-;;:::i;6779:39::-;;;;;;;;;;-1:-1:-1;6779:39:0;;;;;;;;;;;15847:127;;;;;;;;;;-1:-1:-1;15847:127:0;;;;;:::i;:::-;;:::i;15145:148::-;;;;;;;;;;-1:-1:-1;15145:148:0;;;;;:::i;:::-;;:::i;16098:151::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;;;;;;;;;16193:9:::1;::::0;:48:::1;::::0;;;;11608:14:1;;11601:22;16193:48:0::1;::::0;::::1;11583:41:1::0;11667:14;;11660:22;11640:18;;;11633:50;16193:9:0;;;::::1;-1:-1:-1::0;;;;;16193:9:0::1;::::0;:24:::1;::::0;11556:18:1;;16193:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16098:151:::0;;:::o;15667:172::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;15775:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;15775:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;15813:8;;15823:7;;15775:56:::1;;;:::i;12101:161::-:0;12178:4;12195:37;12204:10;12216:7;12225:6;12195:8;:37::i;:::-;-1:-1:-1;12250:4:0;12101:161;;;;;:::o;18309:114::-;18356:7;18401:13;5128:1;18401:2;:13;:::i;:::-;18383:14;;:32;;;;:::i;:::-;18376:39;;18309:114;:::o;25707:1522::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;25801:7:::1;25797:1425;;;-1:-1:-1::0;;;;;25834:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25833:21;25825:62;;;::::0;-1:-1:-1;;;25825:62:0;;14703:2:1;25825:62:0::1;::::0;::::1;14685:21:1::0;14742:2;14722:18;;;14715:30;14781;14761:18;;;14754:58;14829:18;;25825:62:0::1;14501:352:1::0;25825:62:0::1;-1:-1:-1::0;;;;;25906:16:0;::::1;25925:1;25906:16:::0;;;:7:::1;:16;::::0;;;;;:20;25902:117:::1;;-1:-1:-1::0;;;;;25986:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25966:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25947:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25902:117:::1;-1:-1:-1::0;;;;;26033:20:0;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26033:27:0::1;26056:4;26033:27;::::0;;26090:6:::1;::::0;;;::::1;26079:17;26075:80;;26116:9;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;26116:23:0;;;;;::::1;::::0;;-1:-1:-1;;26116:23:0::1;-1:-1:-1::0;;;;;26116:23:0;::::1;;::::0;;26075:80:::1;25707:1522:::0;;:::o;25797:1425::-:1;26177:7;26172:1050;;-1:-1:-1::0;;;;;26209:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26201:61;;;::::0;-1:-1:-1;;;26201:61:0;;15060:2:1;26201:61:0::1;::::0;::::1;15042:21:1::0;15099:2;15079:18;;;15072:30;15138;15118:18;;;15111:58;15186:18;;26201:61:0::1;14858:352:1::0;26201:61:0::1;26292:6;::::0;-1:-1:-1;;;;;26292:6:0;;::::1;26281:17:::0;;::::1;::::0;26277:934:::1;;26357:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;26338:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;26319:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;26386:7:::1;:16:::0;;;;;:20;;;26425:11:::1;:20:::0;;;:28;;-1:-1:-1;;26425:28:0::1;::::0;;25707:1522;;:::o;26277:934::-:1;26479:9;:16:::0;26499:1:::1;26479:21:::0;26475:736:::1;;26559:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;26540:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;26521:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;26588:7:::1;:16:::0;;;;;:20;;;26627:11:::1;:20:::0;;;:28;;-1:-1:-1;;26627:28:0::1;::::0;;26674:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26674:15:0;;;;;-1:-1:-1;;26674:15:0::1;::::0;;;;;25707:1522;;:::o;26475:736::-:1;26735:9;26730:466;26754:9;:16:::0;26750:20;::::1;26730:466;;;26820:7;-1:-1:-1::0;;;;;26804:23:0::1;:9;26814:1;26804:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26804:12:0::1;:23:::0;26800:377:::1;;26871:9;26881:16:::0;;:20:::1;::::0;26900:1:::1;::::0;26881:20:::1;:::i;:::-;26871:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;26856:9:::1;:12:::0;;-1:-1:-1;;;;;26871:31:0;;::::1;::::0;26866:1;;26856:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;26856:46:0::1;;;;;-1:-1:-1::0;;;;;26856:46:0::1;;;;;;26967:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;26948:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:29:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;26929:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:48;;;;27004:7:::1;:16:::0;;;;;:20;;;27051:11:::1;:20:::0;;;:28;;-1:-1:-1;;27051:28:0::1;::::0;;27106:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27106:15:0;;;;;-1:-1:-1;;27106:15:0::1;::::0;;;;;26730:466:::1;25707:1522:::0;;:::o;26800:377::-:1;26772:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26730:466;;;;25707:1522:::0;;:::o;11081:115::-;11136:7;5190:13;5128:1;5190:2;:13;:::i;:::-;5173:30;;4960:25;5173:30;:::i;:::-;11162:1;11151:12;11147:31;;11167:8;;;11147:31;5190:13;5128:1;5190:2;:13;:::i;:::-;5173:30;;4960:25;5173:30;:::i;12771:306::-;-1:-1:-1;;;;;12892:19:0;;12871:4;12892:19;;;:11;:19;;;;;;;;12912:10;12892:31;;;;;;;;-1:-1:-1;;12892:52:0;12888:126;;-1:-1:-1;;;;;12961:19:0;;;;;;:11;:19;;;;;;;;12981:10;12961:31;;;;;;;:41;;12996:6;;12961:19;:41;;12996:6;;12961:41;:::i;:::-;;;;-1:-1:-1;;12888:126:0;13033:36;13043:6;13051:9;13062:6;13033:9;:36::i;:::-;13026:43;12771:306;-1:-1:-1;;;;12771:306:0:o;17921:264::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;18063:3:::1;5190:13;5128:1;5190:2;:13;:::i;:::-;5173:30;::::0;4960:25:::1;5173:30;:::i;:::-;18053:13;;;;:::i;:::-;18041:7:::0;18030;5190:13:::1;5128:1;5190:2;:13;:::i;:::-;5173:30;::::0;4960:25:::1;5173:30;:::i;:::-;18020:17;;;;:::i;:::-;18019:29;;;;:::i;:::-;:48;;18011:109;;;::::0;-1:-1:-1;;;18011:109:0;;16358:2:1;18011:109:0::1;::::0;::::1;16340:21:1::0;16397:2;16377:18;;;16370:30;16436:34;16416:18;;;16409:62;16507:18;16487;;;16480:46;16543:19;;18011:109:0::1;16156:412:1::0;18011:109:0::1;18170:7:::0;18159;5190:13:::1;5128:1;5190:2;:13;:::i;:::-;5173:30;::::0;4960:25:::1;5173:30;:::i;:::-;18149:17;;;;:::i;:::-;18148:29;;;;:::i;:::-;18131:14;:46:::0;-1:-1:-1;;17921:264:0:o;25161:410::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;25296:7:::1;:14;25277:8;:15;:33;25269:67;;;::::0;-1:-1:-1;;;25269:67:0;;16775:2:1;25269:67:0::1;::::0;::::1;16757:21:1::0;16814:2;16794:18;;;16787:30;16853:23;16833:18;;;16826:51;16894:18;;25269:67:0::1;16573:345:1::0;25269:67:0::1;25352:7;25347:217;25369:8;:15;25365:1;:19;;;25347:217;;;25439:7;25447:1;25439:10;;;;;;;;;;:::i;:::-;;;;;;;25414:21;25424:10;25414:9;:21::i;:::-;:35;;25406:44;;;::::0;::::1;;25465:87;25482:10;25494:8;25503:1;25494:11;;;;;;;;;;:::i;:::-;;;;;;;5128:1;25518:2;:13;;;;:::i;:::-;25507:7;25515:1;25507:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;25533:5;25540::::0;25547:4:::1;25465:16;:87::i;:::-;-1:-1:-1::0;25386:3:0;::::1;::::0;::::1;:::i;:::-;;;;25347:217;;15301:141:::0;15354:7;15411:21;15429:1;15411:9;:21::i;:::-;15393:15;6285:42;15393:9;:15::i;:::-;:39;;;;:::i;:::-;5190:13;5128:1;5190:2;:13;:::i;:::-;5173:30;;4960:25;5173:30;:::i;:::-;15382:51;;;;:::i;27237:250::-;27303:7;27342;;27331;:18;;27323:73;;;;-1:-1:-1;;;27323:73:0;;17438:2:1;27323:73:0;;;17420:21:1;17477:2;17457:18;;;17450:30;17516:34;17496:18;;;17489:62;17587:12;17567:18;;;17560:40;17617:19;;27323:73:0;17236:406:1;27323:73:0;27407:19;27430:10;:8;:10::i;:::-;27407:33;-1:-1:-1;27458:21:0;27407:33;27458:7;:21;:::i;:::-;27451:28;27237:250;-1:-1:-1;;;27237:250:0:o;11202:112::-;11254:5;5190:13;5128:1;5190:2;:13;:::i;:::-;5173:30;;4960:25;5173:30;:::i;:::-;11278:1;11267:12;11263:31;;11283:8;;;11263:31;-1:-1:-1;5128:1:0;;11202:112::o;16257:488::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;5975:4:::1;16364:6;:21;;;;:65;;;;;6025:4;16406:7;:23;;;;16364:65;:117;;;;;6079:4;16450:11;:31;;;;16364:117;16356:170;;;::::0;-1:-1:-1;;;16356:170:0;;17849:2:1;16356:170:0::1;::::0;::::1;17831:21:1::0;17888:2;17868:18;;;17861:30;17927:25;17907:18;;;17900:53;17970:18;;16356:170:0::1;17647:347:1::0;16356:170:0::1;6132:4;16545:16;16554:7:::0;16545:6;:16:::1;:::i;:::-;:35;;;;16537:80;;;::::0;-1:-1:-1;;;16537:80:0;;18430:2:1;16537:80:0::1;::::0;::::1;18412:21:1::0;;;18449:18;;;18442:30;18508:34;18488:18;;;18481:62;18560:18;;16537:80:0::1;18228:356:1::0;16537:80:0::1;16628:9;:25:::0;;::::1;::::0;;::::1;16664:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;16702:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;16257:488::o;15982:108::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;16051:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;16051:31:0::1;::::0;::::1;160:74:1::0;16051:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;16051:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15982:108:::0;:::o;14855:140::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;-1:-1:-1;;;;;14947:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;14947:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14855:140::o;17644:269::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;17785:4:::1;5190:13;5128:1;5190:2;:13;:::i;:::-;5173:30;::::0;4960:25:::1;5173:30;:::i;:::-;17775:14;;;;:::i;:::-;17763:7:::0;17752;5190:13:::1;5128:1;5190:2;:13;:::i;:::-;5173:30;::::0;4960:25:::1;5173:30;:::i;:::-;17742:17;;;;:::i;:::-;17741:29;;;;:::i;:::-;:49;;17733:117;;;::::0;-1:-1:-1;;;17733:117:0;;18791:2:1;17733:117:0::1;::::0;::::1;18773:21:1::0;18830:2;18810:18;;;18803:30;18869:34;18849:18;;;18842:62;18940:25;18920:18;;;18913:53;18983:19;;17733:117:0::1;18589:419:1::0;17733:117:0::1;17898:7:::0;17887;5190:13:::1;5128:1;5190:2;:13;:::i;:::-;5173:30;::::0;4960:25:::1;5173:30;:::i;:::-;17877:17;;;;:::i;:::-;17876:29;;;;:::i;:::-;17861:12;:44:::0;-1:-1:-1;;17644:269:0:o;18812:215::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;18942:3:::1;18916:22;:29;;18908:62;;;::::0;-1:-1:-1;;;18908:62:0;;19215:2:1;18908:62:0::1;::::0;::::1;19197:21:1::0;19254:2;19234:18;;;19227:30;19293:22;19273:18;;;19266:50;19333:18;;18908:62:0::1;19013:344:1::0;18908:62:0::1;18981:13;:38:::0;18812:215::o;9841:654::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;-1:-1:-1;;;;;9920:22:0;::::1;9912:96;;;::::0;-1:-1:-1;;;9912:96:0;;19564:2:1;9912:96:0::1;::::0;::::1;19546:21:1::0;19603:2;19583:18;;;19576:30;19642:34;19622:18;;;19615:62;19713:31;19693:18;;;19686:59;19762:19;;9912:96:0::1;19362:425:1::0;9912:96:0::1;10027:16:::0;-1:-1:-1;;;;;10027:16:0;::::1;::::0;10019:90:::1;;;::::0;-1:-1:-1;;;10019:90:0;;19564:2:1;10019:90:0::1;::::0;::::1;19546:21:1::0;19603:2;19583:18;;;19576:30;19642:34;19622:18;;;19615:62;19713:31;19693:18;;;19686:59;19762:19;;10019:90:0::1;19362:425:1::0;10019:90:0::1;10140:6;::::0;;10120:34:::1;::::0;-1:-1:-1;;;;;10140:6:0;;::::1;::::0;10120:19:::1;:34::i;:::-;10165:35;10185:8;10195:4;10165:19;:35::i;:::-;10245:1;10235:6:::0;;10225:17:::1;::::0;-1:-1:-1;;;;;10235:6:0::1;10225:9;:17::i;:::-;:21;10221:127;;;10280:6;::::0;10263:73:::1;::::0;-1:-1:-1;;;;;10280:6:0::1;10288:8:::0;10298:17:::1;10280:6:::0;10298:9:::1;:17::i;10263:73::-;;10221:127;10368:16;10387:6:::0;;-1:-1:-1;;;;;10404:17:0;;::::1;-1:-1:-1::0;;10404:17:0;::::1;::::0;::::1;::::0;;10437:40:::1;::::0;10387:6;;;::::1;::::0;;;10437:40:::1;::::0;10368:16;10437:40:::1;9901:594;9841:654:::0;:::o;15003:134::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;-1:-1:-1;;;;;15091:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;15091:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15003:134::o;14206:218::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;14290:14:::1;::::0;::::1;;14289:15;14281:24;;;::::0;::::1;;14347:4;-1:-1:-1::0;;;;;14324:28:0;::::1;::::0;14316:55:::1;;;::::0;-1:-1:-1;;;14316:55:0;;19994:2:1;14316:55:0::1;::::0;::::1;19976:21:1::0;20033:2;20013:18;;;20006:30;20072:16;20052:18;;;20045:44;20106:18;;14316:55:0::1;19792:338:1::0;14316:55:0::1;14382:9;:34:::0;;-1:-1:-1;;;;;14382:34:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;14206:218::o;18193:108::-;18236:7;18279:13;5128:1;18279:2;:13;:::i;:::-;18263:12;;:30;;;;:::i;11722:198::-;-1:-1:-1;;;;;11812:20:0;;11788:7;11812:20;;;:11;:20;;;;;;;;11808:49;;;-1:-1:-1;;;;;;11841:16:0;;;;;:7;:16;;;;;;;11722:198::o;11808:49::-;-1:-1:-1;;;;;11895:16:0;;;;;;:7;:16;;;;;;11875:37;;:19;:37::i;10503:225::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;10582:6:::1;::::0;;10562:34:::1;::::0;-1:-1:-1;;;;;10582:6:0;;::::1;::::0;10562:19:::1;:34::i;:::-;10607:16;10626:6:::0;;-1:-1:-1;;10643:19:0;::::1;::::0;;10678:42:::1;::::0;-1:-1:-1;;;;;10626:6:0;;::::1;::::0;10607:16;10626:6;;10678:42:::1;::::0;10607:16;;10678:42:::1;10551:177;10503:225::o:0;17349:287::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;17480:11:::1;:42:::0;;-1:-1:-1;;;;;17480:42:0;;::::1;-1:-1:-1::0;;17480:42:0;;::::1;;::::0;;;17533:19;:38;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;17582:23;:46;;;;;::::1;::::0;::::1;;::::0;;17349:287::o;13706:492::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;13788:7:::1;13783:408;;-1:-1:-1::0;;;;;13812:13:0;;::::1;13828:5;13812:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;13812:21:0::1;::::0;;13848:9:::1;::::0;:32;;;;;::::1;::::0;::::1;20303:74:1::0;;;;20393:18;;;20386:50;;;;13848:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20276:18:1;;13848:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;13783:408;13917:17;::::0;:22;13913:136:::1;;14006:6;13986:17;;13968:15;:35;;;;:::i;:::-;:44;13960:73;;;::::0;-1:-1:-1;;;13960:73:0;;20649:2:1;13960:73:0::1;::::0;::::1;20631:21:1::0;20688:2;20668:18;;;20661:30;20727:18;20707;;;20700:46;20763:18;;13960:73:0::1;20447:340:1::0;13960:73:0::1;-1:-1:-1::0;;;;;14063:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;14063:20:0::1;14079:4;14063:20:::0;;::::1;::::0;;;14118:15:::1;14098:17;:35:::0;;;14148:9:::1;::::0;:31;;;;;;;::::1;20303:74:1::0;;;;20393:18;;;20386:50;14148:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;20276:18:1;;14148:31:0::1;20135:307:1::0;12588:175:0;12654:4;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;12703:9:::1;::::0;12671:62:::1;::::0;12688:4:::1;::::0;-1:-1:-1;;;;;12703:9:0::1;-1:-1:-1::0;;12671:8:0::1;:62::i;:::-;-1:-1:-1::0;12751:4:0::1;12588:175:::0;:::o;24418:545::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;24480:14:::1;::::0;::::1;;24479:15;24471:52;;;::::0;-1:-1:-1;;;24471:52:0;;20994:2:1;24471:52:0::1;::::0;::::1;20976:21:1::0;21033:2;21013:18;;;21006:30;21072:26;21052:18;;;21045:54;21116:18;;24471:52:0::1;20792:348:1::0;24471:52:0::1;24542:16;::::0;::::1;::::0;::::1;;;24534:53;;;::::0;-1:-1:-1;;;24534:53:0;;21347:2:1;24534:53:0::1;::::0;::::1;21329:21:1::0;21386:2;21366:18;;;21359:30;21425:26;21405:18;;;21398:54;21469:18;;24534:53:0::1;21145:348:1::0;24534:53:0::1;24610:9;::::0;;;::::1;-1:-1:-1::0;;;;;24610:9:0::1;24598:100;;24650:9;:36:::0;;;::::1;24680:4;24650:36:::0;::::1;;::::0;;24598:100:::1;24712:9;::::0;24732:6:::1;::::0;24712:85:::1;::::0;;;;-1:-1:-1;;;;;24732:6:0;;::::1;24712:85;::::0;::::1;21721:74:1::0;21843:10;24747:12:0::1;21831:23:1::0;21811:18;;;21804:51;21903:18;24769:15:0::1;21891:31:1::0;21871:18;;;21864:59;5128:1:0::1;21939:18:1::0;;;21932:45;24712:9:0;;;::::1;;::::0;:19:::1;::::0;21693::1;;24712:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24708:101:::0;24819:14:::1;:21:::0;;-1:-1:-1;;24819:21:0::1;24836:4;24819:21;::::0;;24878:6:::1;::::0;24894:5:::1;::::0;24868:17:::1;::::0;-1:-1:-1;;;;;24878:6:0::1;24868:9;:17::i;:::-;:22;::::0;24888:2:::1;24868:22;:::i;:::-;24867:32;;;;:::i;:::-;24851:13;:48:::0;24934:6:::1;::::0;24950:5:::1;::::0;24924:17:::1;::::0;-1:-1:-1;;;;;24934:6:0::1;24924:9;:17::i;:::-;:22;::::0;24944:2:::1;24924:22;:::i;:::-;24923:32;;;;:::i;:::-;24910:10;:45:::0;24418:545::o;11928:165::-;12006:4;12023:40;12033:10;12045:9;12056:6;12023:9;:40::i;:::-;-1:-1:-1;12081:4:0;;11928:165;-1:-1:-1;;;11928:165:0:o;19035:263::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;19144:19:::1;:33:::0;;-1:-1:-1;;19144:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;19188:22:::1;:47:::0;;-1:-1:-1;;19188:47:0::1;::::0;::::1;;;::::0;;19251:39:::1;::::0;4769:41:1;;;19251:39:0::1;::::0;4757:2:1;4742:18;19251:39:0::1;;;;;;;;19035:263:::0;;:::o;13085:613::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;13165:16:::1;::::0;::::1;::::0;::::1;;;13164:17;13156:60;;;::::0;-1:-1:-1;;;13156:60:0;;22190:2:1;13156:60:0::1;::::0;::::1;22172:21:1::0;22229:2;22209:18;;;22202:30;22268:32;22248:18;;;22241:60;22318:18;;13156:60:0::1;21988:354:1::0;13156:60:0::1;13227:20;13260:9;13227:43;;13281:16;13311:10;-1:-1:-1::0;;;;;13311:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13300:40:0::1;;13349:4;13356:10;-1:-1:-1::0;;;;;13356:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13300:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22856:15:1;;;13300:74:0::1;::::0;::::1;22838:34:1::0;22908:15;;22888:18;;;22881:43;22750:18;;13300:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13281:93:::0;-1:-1:-1;;;;;;13389:22:0;::::1;13385:200;;13448:10;-1:-1:-1::0;;;;;13448:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13437:43:0::1;;13489:4;13496:10;-1:-1:-1::0;;;;;13496:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13437:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;22856:15:1;;;13437:77:0::1;::::0;::::1;22838:34:1::0;22908:15;;22888:18;;;22881:43;22750:18;;13437:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13428:6;:86:::0;;-1:-1:-1;;13428:86:0::1;-1:-1:-1::0;;;;;13428:86:0;;;::::1;::::0;;;::::1;::::0;;13385:200:::1;;;13556:6;:17:::0;;-1:-1:-1;;13556:17:0::1;-1:-1:-1::0;;;;;13556:17:0;::::1;;::::0;;13385:200:::1;13595:9;:22:::0;;-1:-1:-1;;13595:22:0::1;-1:-1:-1::0;;;;;13595:22:0;::::1;::::0;;::::1;::::0;;;13628:62:::1;::::0;13645:4:::1;::::0;-1:-1:-1;;13628:8:0::1;:62::i;24971:182::-:0;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;25038:16:::1;::::0;::::1;::::0;::::1;;;25037:17;25029:58;;;::::0;-1:-1:-1;;;25029:58:0;;23137:2:1;25029:58:0::1;::::0;::::1;23119:21:1::0;23176:2;23156:18;;;23149:30;23215;23195:18;;;23188:58;23263:18;;25029:58:0::1;22935:352:1::0;25029:58:0::1;25106:6;::::0;;25098:47:::1;::::0;-1:-1:-1;;;;;25106:6:0;;::::1;::::0;25123:21:::1;25098:47:::0;::::1;;;::::0;25123:21;;25098:47;25106:6;25098:47;25123:21;25106:6;25098:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24971:182::o:0;15514:145::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;15604:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;20321:55:1;;;15604:47:0::1;::::0;::::1;20303:74:1::0;20420:14;;20413:22;20393:18;;;20386:50;15604:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;20276:18:1;;15604:47:0::1;20135:307:1::0;16753:588:0;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;16893:7:::1;:31:::0;;::::1;::::0;;::::1;16935:29:::0;;;;;;;;;;;::::1;;;17015:25:::0;;16975:29;;;::::1;;17015:25:::0;;;;;;::::1;;;17051:33:::0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;17015:25;17115:21:::1;16975:29:::0;16935;17115:21:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;17095:7;:65:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;17206:9:::1;:17:::0;-1:-1:-1;;17187:36:0::1;::::0;17206:17;;::::1;::::0;::::1;::::0;17187:16:::1;:36;:::i;:::-;17262:7;:18:::0;17171:52:::1;::::0;;::::1;::::0;-1:-1:-1;17171:52:0;;17242:38:::1;::::0;17262:18;;::::1;::::0;17242:17;;;::::1;;:38;:::i;:::-;:47;;;;17234:99;;;::::0;-1:-1:-1;;;17234:99:0;;23494:2:1;17234:99:0::1;::::0;::::1;23476:21:1::0;23533:2;23513:18;;;23506:30;23572:34;23552:18;;;23545:62;23643:9;23623:18;;;23616:37;23670:19;;17234:99:0::1;23292:403:1::0;18431:373:0;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;18631:16;18611;5190:13:::1;5128:1;5190:2;:13;:::i;:::-;5173:30;::::0;4960:25:::1;5173:30;:::i;:::-;18601:26;;;;:::i;:::-;18600:47;;;;:::i;:::-;18584:13;:63:::0;18699:13;18682;5190::::1;5128:1;5190:2;:13;:::i;:::-;5173:30;::::0;4960:25:::1;5173:30;:::i;:::-;18672:23;;;;:::i;:::-;18671:41;;;;:::i;:::-;18658:10;:54:::0;;;18731:13:::1;::::0;:27:::1;;18723:73;;;::::0;-1:-1:-1;;;18723:73:0;;23902:2:1;18723:73:0::1;::::0;::::1;23884:21:1::0;23941:2;23921:18;;;23914:30;23980:34;23960:18;;;23953:62;24051:3;24031:18;;;24024:31;24072:19;;18723:73:0::1;23700:397:1::0;18723:73:0::1;18431:373:::0;;;;:::o;15847:127::-;15934:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;15934:32:0;;;160:74:1;15910:4:0;;15934:9;;;;;:23;;133:18:1;;15934:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15145:148::-;7561:6;;-1:-1:-1;;;;;7561:6:0;7571:10;7561:20;7553:50;;;;-1:-1:-1;;;7553:50:0;;11277:2:1;7553:50:0;;;11259:21:1;11316:2;11296:18;;;11289:30;-1:-1:-1;;;11335:18:1;;;11328:47;11392:18;;7553:50:0;11075:341:1;7553:50:0;-1:-1:-1;;;;;15241:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;15241:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15145:148::o;12270:310::-;-1:-1:-1;;;;;12365:20:0;;12357:52;;;;-1:-1:-1;;;12357:52:0;;24554:2:1;12357:52:0;;;24536:21:1;24593:2;24573:18;;;24566:30;24632:21;24612:18;;;24605:49;24671:18;;12357:52:0;24352:343:1;12357:52:0;-1:-1:-1;;;;;12428:21:0;;12420:53;;;;-1:-1:-1;;;12420:53:0;;24554:2:1;12420:53:0;;;24536:21:1;24593:2;24573:18;;;24566:30;24632:21;24612:18;;;24605:49;24671:18;;12420:53:0;24352:343:1;12420:53:0;-1:-1:-1;;;;;12486:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12539:33;;391:25:1;;;12539:33:0;;364:18:1;12539:33:0;;;;;;;12270:310;;;:::o;30785:1004::-;30864:7;;30827;;;5190:13;5128:1;5190:2;:13;:::i;:::-;5173:30;;4960:25;5173:30;:::i;:::-;31003:6;;-1:-1:-1;;;;;31003:6:0;30917:15;30991:19;;;:11;:19;;;;;;30882:24;;-1:-1:-1;30935:6:0;;30882:24;;30991:19;;30987:286;;;31054:6;;-1:-1:-1;;;;;31054:6:0;31027:16;31046:15;;;:7;:15;;;;;;;;;31095:7;:15;;;;;;;31129:18;;;;:40;;;31162:7;31151:8;:18;31129:40;31125:68;;;31178:15;31187:6;31178;:15;:::i;:::-;31171:22;;;;;;;;30785:1004;:::o;31125:68::-;31208:19;31219:8;31208:19;;:::i;:::-;;-1:-1:-1;31242:19:0;31253:8;31242:19;;:::i;:::-;;;31012:261;;30987:286;31287:9;:16;:20;31283:400;;31329:7;31324:348;31346:9;:16;31342:20;;;;31324:348;;;31388:14;31405:7;:21;31413:9;31423:1;31413:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31413:12:0;31405:21;;;;;;;;;;;;;31470:9;:12;;31405:21;;-1:-1:-1;31462:7:0;;31413:12;;31470:9;:12;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31470:12:0;31462:21;;;;;;;;;;;;;;-1:-1:-1;31506:16:0;;;;:36;;;31535:7;31526:6;:16;31506:36;31502:64;;;31551:15;31560:6;31551;:15;:::i;:::-;31544:22;;;;;;;;;30785:1004;:::o;31502:64::-;31595:16;31605:6;31595:7;:16;:::i;:::-;31585:26;-1:-1:-1;31640:16:0;31650:6;31640:7;:16;:::i;:::-;31630:26;;31369:303;;31364:3;;;;;:::i;:::-;;;;31324:348;;;;31283:400;31707:15;31716:6;31707;:15;:::i;:::-;31697:7;:25;31693:53;;;31731:15;31740:6;31731;:15;:::i;:::-;31724:22;;;;;;30785:1004;:::o;31693:53::-;31764:17;31774:7;31764;:17;:::i;19756:1947::-;19835:4;-1:-1:-1;;;;;19860:18:0;;19852:68;;;;-1:-1:-1;;;19852:68:0;;24902:2:1;19852:68:0;;;24884:21:1;24941:2;24921:18;;;24914:30;24980:34;24960:18;;;24953:62;25051:7;25031:18;;;25024:35;25076:19;;19852:68:0;24700:401:1;19852:68:0;-1:-1:-1;;;;;19939:16:0;;19931:64;;;;-1:-1:-1;;;19931:64:0;;25308:2:1;19931:64:0;;;25290:21:1;25347:2;25327:18;;;25320:30;25386:34;25366:18;;;25359:62;25457:5;25437:18;;;25430:33;25480:19;;19931:64:0;25106:399:1;19931:64:0;20023:1;20014:6;:10;20006:64;;;;-1:-1:-1;;;20006:64:0;;25712:2:1;20006:64:0;;;25694:21:1;25751:2;25731:18;;;25724:30;25790:34;25770:18;;;25763:62;25861:11;25841:18;;;25834:39;25890:19;;20006:64:0;25510:405:1;20006:64:0;-1:-1:-1;;;;;20169:13:0;;20081:8;20169:13;;;:7;:13;;;;;;20081:8;;;;20169:13;;20165:162;;;20205:4;20199:10;;20165:162;;;-1:-1:-1;;;;;20231:11:0;;;;;;:7;:11;;;;;;;;20227:100;;;20266:4;20259:11;;20227:100;;;-1:-1:-1;20311:4:0;20227:100;20341:20;20352:4;20358:2;20341:10;:20::i;:::-;20337:644;;;20382:14;;;;20378:89;;20417:34;;-1:-1:-1;;;20417:34:0;;26122:2:1;20417:34:0;;;26104:21:1;26161:2;26141:18;;;26134:30;26200:26;26180:18;;;26173:54;26244:18;;20417:34:0;25920:348:1;20378:89:0;20485:3;:11;;;;20492:4;20485:11;20481:232;;;-1:-1:-1;;;;;20521:27:0;;;;;;:21;:27;;;;;;;;20520:28;:58;;;;-1:-1:-1;;;;;;20553:25:0;;;;;;:21;:25;;;;;;;;20552:26;20520:58;20516:182;;;20621:12;;20611:6;:22;;20603:75;;;;-1:-1:-1;;;20603:75:0;;26475:2:1;20603:75:0;;;26457:21:1;26514:2;26494:18;;;26487:30;26553:34;26533:18;;;26526:62;26624:10;26604:18;;;26597:38;26652:19;;20603:75:0;26273:404:1;20603:75:0;20745:9;;-1:-1:-1;;;;;20731:24:0;;;20745:9;;20731:24;;;;:33;;;20760:4;20759:5;20731:33;20727:243;;;-1:-1:-1;;;;;20790:25:0;;;;;;:21;:25;;;;;;;;20785:170;;20874:14;;20864:6;20848:13;20858:2;20848:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;20840:95;;;;-1:-1:-1;;;20840:95:0;;26884:2:1;20840:95:0;;;26866:21:1;26923:2;26903:18;;;26896:30;26962:34;26942:18;;;26935:62;27033:12;27013:18;;;27006:40;27063:19;;20840:95:0;26682:406:1;20840:95:0;20997:4;20993:632;;;21023:6;;;;21018:596;;21054:19;;;;;;;21050:549;;;21098:28;21129:24;21147:4;21129:9;:24::i;:::-;21098:55;;21204:13;;21180:20;:37;21176:404;;21264:10;;21305:22;;;;21301:97;;;21362:13;;21352:6;;6179:5;;21362:13;21342:17;;-1:-1:-1;;;;;21352:6:0;21342:9;:17::i;:::-;:33;;;;:::i;:::-;21341:54;;;;:::i;:::-;21331:64;;21301:97;21452:7;21428:20;:31;21424:72;;21486:7;21463:30;;21424:72;21522:34;21535:20;21522:12;:34::i;:::-;21219:361;21176:404;21075:524;21050:549;21643:52;21660:4;21666:2;21670:6;21678:3;21683:4;21689:5;21643:16;:52::i;:::-;21636:59;19756:1947;-1:-1:-1;;;;;;;19756:1947:0:o;27728:1163::-;27870:16;;27848:4;;27870:16;;;;;27865:298;;27903:28;27922:4;27928:2;27903:18;:28::i;:::-;27951:16;;;;;;;27950:17;:41;;;;;27971:20;27982:4;27988:2;27971:10;:20::i;:::-;27950:77;;;;-1:-1:-1;;;;;;27996:31:0;;;;;;:25;:31;;;;;;;;27995:32;27950:77;:111;;;;-1:-1:-1;;;;;;28032:29:0;;;;;;:25;:29;;;;;;;;28031:30;27950:111;:121;;;;;28066:5;28065:6;27950:121;27946:206;;;28092:44;;-1:-1:-1;;;28092:44:0;;27295:2:1;28092:44:0;;;27277:21:1;27334:2;27314:18;;;27307:30;27373:34;27353:18;;;27346:62;27444:4;27424:18;;;27417:32;27466:19;;28092:44:0;27093:398:1;27946:206:0;-1:-1:-1;;;;;28209:25:0;;28175:12;28209:25;;;:19;:25;;;;;;28190:4;;28209:25;;;:52;;-1:-1:-1;;;;;;28238:23:0;;;;;;:19;:23;;;;;;;;28209:52;28205:99;;;-1:-1:-1;28287:5:0;28205:99;28316:25;28344:55;28354:4;28360:2;28364:7;28373;28382:3;28387:4;28393:5;28344:9;:55::i;:::-;28429:14;;;;-1:-1:-1;;;;;28412:13:0;;;;;;:7;:13;;;;;:31;;28316:83;;-1:-1:-1;28429:14:0;;28412:31;;28429:14;;28412:31;:::i;:::-;;;;-1:-1:-1;;28469:22:0;;;;-1:-1:-1;;;;;28454:11:0;;;;;;:7;:11;;;;;:37;;:11;;;:37;;28469:22;;28454:37;:::i;:::-;;;;-1:-1:-1;;;;;;;28508:17:0;;;;;;:11;:17;;;;;;;;28504:89;;;-1:-1:-1;;;;;28558:13:0;;;;;;:7;:13;;;;;;:23;;28574:7;;28558:23;:::i;:::-;-1:-1:-1;;;;;28542:13:0;;;;;;:7;:13;;;;;:39;28504:89;-1:-1:-1;;;;;28607:15:0;;;;;;:11;:15;;;;;;;;28603:98;;;28667:22;;-1:-1:-1;;;;;28653:11:0;;28667:22;28653:11;;;:7;:11;;;;;;:36;;28667:22;28653:36;:::i;:::-;-1:-1:-1;;;;;28639:11:0;;;;;;:7;:11;;;;;:50;28603:98;28731:1;28717:6;:11;;;:15;:34;;;;28750:1;28736:6;:11;;;:15;28717:34;28713:89;;;28779:6;:11;;;28768:7;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;28713:89:0;28834:2;-1:-1:-1;;;;;28819:42:0;28828:4;-1:-1:-1;;;;;28819:42:0;;28838:6;:22;;;28819:42;;;;391:25:1;;379:2;364:18;;245:177;28819:42:0;;;;;;;;-1:-1:-1;28879:4:0;;27728:1163;-1:-1:-1;;;;;;;;27728:1163:0:o;19306:442::-;19375:4;19407:6;;-1:-1:-1;;;;;19399:14:0;;;19407:6;;19399:14;;;;:43;;-1:-1:-1;19436:6:0;;-1:-1:-1;;;;;19430:12:0;;;19436:6;;19430:12;;19399:43;:79;;;;-1:-1:-1;19472:6:0;;-1:-1:-1;;;;;19472:6:0;19459:9;:19;;19399:79;:118;;;;-1:-1:-1;;;;;;19496:21:0;;;;;;:17;:21;;;;;;;;19495:22;19399:118;:159;;;;-1:-1:-1;;;;;;19535:23:0;;;;;;:17;:23;;;;;;;;19534:24;19399:159;:186;;;;-1:-1:-1;;;;;;19575:10:0;;6285:42;19575:10;;19399:186;:219;;;;-1:-1:-1;;;;;;19602:16:0;;;;19399:219;:257;;;;-1:-1:-1;;;;;;19635:21:0;;19651:4;19635:21;;19399:257;:300;;;;-1:-1:-1;19689:9:0;;-1:-1:-1;;;;;19673:26:0;;;19689:9;;;;;19673:26;;19399:300;:341;;;;-1:-1:-1;;19730:9:0;;;;;-1:-1:-1;;;;;19730:9:0;;;19716:24;;;;;19392:348;-1:-1:-1;19306:442:0:o;21711:2134::-;7455:6;:13;;-1:-1:-1;;7455:13:0;7464:4;7455:13;;;21795:30:::1;::::0;;::::1;::::0;::::1;::::0;;21818:7:::1;21795:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;7455:6;21840:21;21836:60:::1;;21878:7;;;21836:60;21932:4;21912:26;::::0;;;:11:::1;:26;::::0;;;;;;;21947:9:::1;::::0;-1:-1:-1;;;;;21947:9:0::1;21912:46:::0;;;;;;;;-1:-1:-1;;21912:67:0::1;21908:166;;22016:4;21996:26;::::0;;;:11:::1;:26;::::0;;;;;;;22031:9:::1;::::0;-1:-1:-1;;;;;22031:9:0::1;21996:46:::0;;;;;;;-1:-1:-1;;21996:66:0;;21908:166:::1;22086:17;22171:1;22151:6;:16;;;22107:60;;22131:6;:16;;;22108:39;;:20;:39;;;;:::i;:::-;22107:60;;;;:::i;:::-;22106:66;;;;:::i;:::-;22086:86:::0;-1:-1:-1;22183:15:0::1;22201:32;22086:86:::0;22201:20;:32:::1;:::i;:::-;22278:16;::::0;;22292:1:::1;22278:16:::0;;;;;::::1;::::0;;22183:50;;-1:-1:-1;22254:21:0::1;::::0;22278:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22278:16:0::1;22254:40;;22323:4;22305;22310:1;22305:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22305:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22349:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;22305:7;;22349:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22339:4;22344:1;22339:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22339:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;22378:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;22453:7;;22378:9:::1;::::0;22491:4;;22518::::1;::::0;22538:15:::1;::::0;22378:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;22598:21:0::1;::::0;-1:-1:-1;22577:18:0::1;::::0;-1:-1:-1;22684:7:0;;-1:-1:-1;22658:22:0::1;22671:9:::0;22598:21;22658:22:::1;:::i;:::-;22657:34;;;;:::i;:::-;22630:61:::0;-1:-1:-1;22708:13:0;;22704:328:::1;;22738:9;::::0;:222:::1;::::0;;;;22815:4:::1;22738:222;::::0;::::1;28470:34:1::0;28520:18;;;28513:34;;;22738:9:0::1;28563:18:1::0;;;28556:34;;;28606:18;;;28599:34;6285:42:0::1;28649:19:1::0;;;28642:44;22930:15:0::1;28702:19:1::0;;;28695:35;-1:-1:-1;;;;;22738:9:0;;::::1;::::0;:25:::1;::::0;22771:16;;28381:19:1;;22738:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22980:40:0::1;::::0;;29226:25:1;;;29282:2;29267:18;;29260:34;;;22980:40:0::1;::::0;-1:-1:-1;29199:18:1;22980:40:0::1;;;;;;;22704:328;23044:30;23058:16:::0;23044:30;::::1;:::i;:::-;;;23105:6;:16;;;23085:6;:16;;:36;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;23212:16:::1;::::0;::::1;::::0;23194:14:::1;::::0;::::1;::::0;23132:12:::1;::::0;-1:-1:-1;23132:12:0;;23180:48;;::::1;::::0;23181:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;23180:48;;;;:::i;:::-;23155:73;;23239:26;23304:6;:16;;;23268:52;;23282:6;:18;;;23269:31;;:10;:31;;;;:::i;:::-;23268:52;;;;:::i;:::-;23239:81:::0;-1:-1:-1;23331:24:0::1;23372:35;23239:81:::0;23372:14;:35:::1;:::i;:::-;23358:50;::::0;:10;:50:::1;:::i;:::-;23423:16;::::0;::::1;::::0;23331:77;;-1:-1:-1;23423:20:0::1;;::::0;23419:133:::1;;23473:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;23473:21:0;;::::1;::::0;23530:5:::1;::::0;23507:16;;23473:67:::1;::::0;;;23507:16;23473:21;23530:5;23473:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23460:80:0;;-1:-1:-1;;23419:133:0::1;23566:14;::::0;::::1;::::0;:18:::1;;::::0;23562:127:::1;;23614:19:::0;;:63:::1;::::0;-1:-1:-1;;;;;23614:19:0;;::::1;::::0;23667:5:::1;::::0;23646:14;;23614:63:::1;::::0;;;23646:14;23614:19;23667:5;23614:63:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23601:76:0;;-1:-1:-1;;23562:127:0::1;23703:18;::::0;::::1;::::0;:22:::1;;::::0;23699:139:::1;;23755:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;23755:23:0;;::::1;::::0;23816:5:::1;::::0;23791:18;;23755:71:::1;::::0;;;23791:18;23755:23;23816:5;23755:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23742:84:0;;-1:-1:-1;;23699:139:0::1;21784:2061;;;;;;;;;;7479:1;-1:-1:-1::0;7491:6:0;:14;;-1:-1:-1;;7491:14:0;;;21711:2134::o;23853:557::-;23936:16;;;;;;;23935:17;23927:65;;;;-1:-1:-1;;;23927:65:0;;29939:2:1;23927:65:0;;;29921:21:1;29978:2;29958:18;;;29951:30;30017:34;29997:18;;;29990:62;30088:5;30068:18;;;30061:33;30111:19;;23927:65:0;29737:399:1;23927:65:0;24008:20;24019:4;24025:2;24008:10;:20::i;:::-;24007:21;:37;;;;-1:-1:-1;24038:6:0;;-1:-1:-1;;;;;24032:12:0;;;24038:6;;24032:12;24007:37;24003:400;;;-1:-1:-1;;;;;24061:23:0;;;;;;;:17;:23;;;;;;;;:30;;-1:-1:-1;;24061:30:0;;;24087:4;24061:30;;;;;;24106:19;:25;;;;;:32;;;;;;;;;;24153:16;:23;;-1:-1:-1;;24153:23:0;24061:30;24153:23;;;;;24203:9;;;;24191:108;;24247:9;:36;;;;24277:4;24247:36;;;;;24191:108;24313:19;:26;;-1:-1:-1;;24313:26:0;;;;;24359:32;;-1:-1:-1;4769:41:1;;24359:32:0;;4757:2:1;4742:18;24359:32:0;4629:187:1;28899:1878:0;29026:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29026:18:0;29057:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29057:25:0;29093:30;;;;;;;;29116:7;29093:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29155:10;:8;:10::i;:::-;29134:18;;;:31;;;29195:28;;:7;:28;:::i;:::-;29178:14;;;:45;29240:20;29251:4;29257:2;29240:10;:20::i;:::-;29236:315;;;29308:9;;:38;;;;;-1:-1:-1;;;;;30422:15:1;;;29308:38:0;;;30404:34:1;30474:15;;;30454:18;;;30447:43;30506:18;;;30499:34;;;29277:12:0;;29308:9;;;;;:19;;30316:18:1;;29308:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;29308:38:0;;;;;;;;-1:-1:-1;;29308:38:0;;;;;;;;;;;;:::i;:::-;;;29304:164;;29444:8;;;29304:164;29397:5;-1:-1:-1;29488:7:0;29484:56;;29516:8;;;29484:56;29262:289;29236:315;29567:7;29563:775;;;29591:18;29630:3;29626:229;;;-1:-1:-1;29667:9:0;:16;;;29626:229;;;29709:4;29705:150;;;-1:-1:-1;29747:9:0;:17;;;;;;29705:150;;;-1:-1:-1;29818:9:0;:21;;;;;;29705:150;29871:17;6179:5;29892:20;29902:10;29892:7;:20;:::i;:::-;29891:41;;;;:::i;:::-;29871:61;;29947:13;29982:6;:17;;;29963:6;:16;;;:36;;;;:::i;:::-;30041:17;;29947:52;;;;;-1:-1:-1;29947:52:0;;30029:29;;;:9;:29;:::i;:::-;30028:39;;;;:::i;:::-;30014:11;;;:53;;;30097:23;;:9;:23;:::i;:::-;30082:12;;;:38;;;30171:11;;;;:26;;30082:38;30171:26;:::i;:::-;30160:38;;:7;:38;:::i;:::-;30135:63;;30243:18;;;;30229:11;;;;:32;;30243:18;30229:32;:::i;:::-;30215:11;;;:46;-1:-1:-1;29563:775:0;;-1:-1:-1;;29563:775:0;;30294:32;;;29563:775;30354:12;;;;:16;30350:290;;30428:6;:18;;;30413:6;:12;;;:33;;;;:::i;:::-;30403:4;30387:22;;;;:7;:22;;;;;:59;;:22;;;:59;;;;;:::i;:::-;;;;-1:-1:-1;;30485:4:0;30465:26;;;;:11;:26;;;;;;;;30461:105;;;30538:12;;;;;30528:4;30512:22;;;;:7;:22;;;;;:38;;30538:12;;30512:22;;:38;;30538:12;;30512:38;:::i;:::-;;;;-1:-1:-1;;30461:105:0;30608:4;-1:-1:-1;;;;;30585:43:0;30594:4;-1:-1:-1;;;;;30585:43:0;;30615:6;:12;;;30585:43;;;;391:25:1;;379:2;364:18;;245:177;30585:43:0;;;;;;;;30350:290;30725:6;:18;;;30710:6;:12;;;:33;;;;:::i;:::-;30695:6;:11;;;:49;;;;:::i;:::-;30677:6;:14;;;:68;;;;:::i;:::-;30652:22;;;:93;-1:-1:-1;30652:22:0;28899:1878;-1:-1:-1;;;;;;;;28899:1878:0:o;427:118:1:-;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;931:184::-;983:77;980:1;973:88;1080:4;1077:1;1070:15;1104:4;1101:1;1094:15;1120:334;1191:2;1185:9;1247:2;1237:13;;-1:-1:-1;;1233:86:1;1221:99;;1350:18;1335:34;;1371:22;;;1332:62;1329:88;;;1397:18;;:::i;:::-;1433:2;1426:22;1120:334;;-1:-1:-1;1120:334:1:o;1459:183::-;1519:4;1552:18;1544:6;1541:30;1538:56;;;1574:18;;:::i;:::-;-1:-1:-1;1619:1:1;1615:14;1631:4;1611:25;;1459:183::o;1647:154::-;-1:-1:-1;;;;;1726:5:1;1722:54;1715:5;1712:65;1702:93;;1791:1;1788;1781:12;1806:737;1860:5;1913:3;1906:4;1898:6;1894:17;1890:27;1880:55;;1931:1;1928;1921:12;1880:55;1967:6;1954:20;1993:4;2017:60;2033:43;2073:2;2033:43;:::i;:::-;2017:60;:::i;:::-;2111:15;;;2197:1;2193:10;;;;2181:23;;2177:32;;;2142:12;;;;2221:15;;;2218:35;;;2249:1;2246;2239:12;2218:35;2285:2;2277:6;2273:15;2297:217;2313:6;2308:3;2305:15;2297:217;;;2393:3;2380:17;2410:31;2435:5;2410:31;:::i;:::-;2454:18;;2492:12;;;;2330;;2297:217;;;-1:-1:-1;2532:5:1;1806:737;-1:-1:-1;;;;;;1806:737:1:o;2548:477::-;2638:6;2646;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2755:9;2742:23;2788:18;2780:6;2777:30;2774:50;;;2820:1;2817;2810:12;2774:50;2843:61;2896:7;2887:6;2876:9;2872:22;2843:61;:::i;:::-;2833:71;;;2954:2;2943:9;2939:18;2926:32;2967:28;2989:5;2967:28;:::i;3400:656::-;3512:4;3541:2;3570;3559:9;3552:21;3602:6;3596:13;3645:6;3640:2;3629:9;3625:18;3618:34;3670:1;3680:140;3694:6;3691:1;3688:13;3680:140;;;3789:14;;;3785:23;;3779:30;3755:17;;;3774:2;3751:26;3744:66;3709:10;;3680:140;;;3838:6;3835:1;3832:13;3829:91;;;3908:1;3903:2;3894:6;3883:9;3879:22;3875:31;3868:42;3829:91;-1:-1:-1;3972:2:1;3960:15;-1:-1:-1;;3956:88:1;3941:104;;;;4047:2;3937:113;;3400:656;-1:-1:-1;;;3400:656:1:o;4309:315::-;4377:6;4385;4438:2;4426:9;4417:7;4413:23;4409:32;4406:52;;;4454:1;4451;4444:12;4406:52;4493:9;4480:23;4512:31;4537:5;4512:31;:::i;:::-;4562:5;4614:2;4599:18;;;;4586:32;;-1:-1:-1;;;4309:315:1:o;4821:247::-;4880:6;4933:2;4921:9;4912:7;4908:23;4904:32;4901:52;;;4949:1;4946;4939:12;4901:52;4988:9;4975:23;5007:31;5032:5;5007:31;:::i;5073:382::-;5138:6;5146;5199:2;5187:9;5178:7;5174:23;5170:32;5167:52;;;5215:1;5212;5205:12;5167:52;5254:9;5241:23;5273:31;5298:5;5273:31;:::i;5460:456::-;5537:6;5545;5553;5606:2;5594:9;5585:7;5581:23;5577:32;5574:52;;;5622:1;5619;5612:12;5574:52;5661:9;5648:23;5680:31;5705:5;5680:31;:::i;:::-;5730:5;-1:-1:-1;5787:2:1;5772:18;;5759:32;5800:33;5759:32;5800:33;:::i;:::-;5460:456;;5852:7;;-1:-1:-1;;;5906:2:1;5891:18;;;;5878:32;;5460:456::o;5921:248::-;5989:6;5997;6050:2;6038:9;6029:7;6025:23;6021:32;6018:52;;;6066:1;6063;6056:12;6018:52;-1:-1:-1;;6089:23:1;;;6159:2;6144:18;;;6131:32;;-1:-1:-1;5921:248:1:o;6174:1138::-;6292:6;6300;6353:2;6341:9;6332:7;6328:23;6324:32;6321:52;;;6369:1;6366;6359:12;6321:52;6409:9;6396:23;6438:18;6479:2;6471:6;6468:14;6465:34;;;6495:1;6492;6485:12;6465:34;6518:61;6571:7;6562:6;6551:9;6547:22;6518:61;:::i;:::-;6508:71;;6598:2;6588:12;;6653:2;6642:9;6638:18;6625:32;6682:2;6672:8;6669:16;6666:36;;;6698:1;6695;6688:12;6666:36;6721:24;;;-1:-1:-1;6776:4:1;6768:13;;6764:27;-1:-1:-1;6754:55:1;;6805:1;6802;6795:12;6754:55;6841:2;6828:16;6864:60;6880:43;6920:2;6880:43;:::i;6864:60::-;6958:15;;;7040:1;7036:10;;;;7028:19;;7024:28;;;6989:12;;;;7064:19;;;7061:39;;;7096:1;7093;7086:12;7061:39;7120:11;;;;7140:142;7156:6;7151:3;7148:15;7140:142;;;7222:17;;7210:30;;7173:12;;;;7260;;;;7140:142;;;7301:5;7291:15;;;;;;;6174:1138;;;;;:::o;7317:180::-;7376:6;7429:2;7417:9;7408:7;7404:23;7400:32;7397:52;;;7445:1;7442;7435:12;7397:52;-1:-1:-1;7468:23:1;;7317:180;-1:-1:-1;7317:180:1:o;7691:159::-;7758:20;;7818:6;7807:18;;7797:29;;7787:57;;7840:1;7837;7830:12;7787:57;7691:159;;;:::o;7855:328::-;7929:6;7937;7945;7998:2;7986:9;7977:7;7973:23;7969:32;7966:52;;;8014:1;8011;8004:12;7966:52;8037:28;8055:9;8037:28;:::i;:::-;8027:38;;8084:37;8117:2;8106:9;8102:18;8084:37;:::i;:::-;8074:47;;8140:37;8173:2;8162:9;8158:18;8140:37;:::i;:::-;8130:47;;7855:328;;;;;:::o;8188:553::-;8289:6;8297;8305;8358:2;8346:9;8337:7;8333:23;8329:32;8326:52;;;8374:1;8371;8364:12;8326:52;8413:9;8400:23;8432:31;8457:5;8432:31;:::i;:::-;8482:5;-1:-1:-1;8539:2:1;8524:18;;8511:32;8552:33;8511:32;8552:33;:::i;:::-;8604:7;-1:-1:-1;8663:2:1;8648:18;;8635:32;8676:33;8635:32;8676:33;:::i;:::-;8728:7;8718:17;;;8188:553;;;;;:::o;9353:388::-;9421:6;9429;9482:2;9470:9;9461:7;9457:23;9453:32;9450:52;;;9498:1;9495;9488:12;9450:52;9537:9;9524:23;9556:31;9581:5;9556:31;:::i;:::-;9606:5;-1:-1:-1;9663:2:1;9648:18;;9635:32;9676:33;9635:32;9676:33;:::i;9746:474::-;9836:6;9844;9852;9860;9868;9921:3;9909:9;9900:7;9896:23;9892:33;9889:53;;;9938:1;9935;9928:12;9889:53;9961:28;9979:9;9961:28;:::i;:::-;9951:38;;10008:37;10041:2;10030:9;10026:18;10008:37;:::i;:::-;9998:47;;10064:37;10097:2;10086:9;10082:18;10064:37;:::i;:::-;10054:47;;10120:37;10153:2;10142:9;10138:18;10120:37;:::i;:::-;10110:47;;10176:38;10209:3;10198:9;10194:19;10176:38;:::i;:::-;10166:48;;9746:474;;;;;;;;:::o;10685:385::-;10771:6;10779;10787;10795;10848:3;10836:9;10827:7;10823:23;10819:33;10816:53;;;10865:1;10862;10855:12;10816:53;-1:-1:-1;;10888:23:1;;;10958:2;10943:18;;10930:32;;-1:-1:-1;11009:2:1;10994:18;;10981:32;;11060:2;11045:18;11032:32;;-1:-1:-1;10685:385:1;-1:-1:-1;10685:385:1:o;11694:484::-;11747:3;11785:5;11779:12;11812:6;11807:3;11800:19;11838:4;11867:2;11862:3;11858:12;11851:19;;11904:2;11897:5;11893:14;11925:1;11935:218;11949:6;11946:1;11943:13;11935:218;;;12014:13;;-1:-1:-1;;;;;12010:62:1;11998:75;;12093:12;;;;12128:15;;;;11971:1;11964:9;11935:218;;;-1:-1:-1;12169:3:1;;11694:484;-1:-1:-1;;;;;11694:484:1:o;12183:342::-;12384:2;12373:9;12366:21;12347:4;12404:56;12456:2;12445:9;12441:18;12433:6;12404:56;:::i;:::-;12396:64;;12510:6;12503:14;12496:22;12491:2;12480:9;12476:18;12469:50;12183:342;;;;;:::o;12530:184::-;12582:77;12579:1;12572:88;12679:4;12676:1;12669:15;12703:4;12700:1;12693:15;12719:482;12808:1;12851:5;12808:1;12865:330;12886:7;12876:8;12873:21;12865:330;;;13005:4;-1:-1:-1;;12933:77:1;12927:4;12924:87;12921:113;;;13014:18;;:::i;:::-;13064:7;13054:8;13050:22;13047:55;;;13084:16;;;;13047:55;13163:22;;;;13123:15;;;;12865:330;;;12869:3;12719:482;;;;;:::o;13206:866::-;13255:5;13285:8;13275:80;;-1:-1:-1;13326:1:1;13340:5;;13275:80;13374:4;13364:76;;-1:-1:-1;13411:1:1;13425:5;;13364:76;13456:4;13474:1;13469:59;;;;13542:1;13537:130;;;;13449:218;;13469:59;13499:1;13490:10;;13513:5;;;13537:130;13574:3;13564:8;13561:17;13558:43;;;13581:18;;:::i;:::-;-1:-1:-1;;13637:1:1;13623:16;;13652:5;;13449:218;;13751:2;13741:8;13738:16;13732:3;13726:4;13723:13;13719:36;13713:2;13703:8;13700:16;13695:2;13689:4;13686:12;13682:35;13679:77;13676:159;;;-1:-1:-1;13788:19:1;;;13820:5;;13676:159;13867:34;13892:8;13886:4;13867:34;:::i;:::-;13997:6;-1:-1:-1;;13925:79:1;13916:7;13913:92;13910:118;;;14008:18;;:::i;:::-;14046:20;;13206:866;-1:-1:-1;;;13206:866:1:o;14077:140::-;14135:5;14164:47;14205:4;14195:8;14191:19;14185:4;14164:47;:::i;14222:274::-;14262:1;14288;14278:189;;14323:77;14320:1;14313:88;14424:4;14421:1;14414:15;14452:4;14449:1;14442:15;14278:189;-1:-1:-1;14481:9:1;;14222:274::o;15215:228::-;15255:7;15381:1;-1:-1:-1;;15309:74:1;15306:1;15303:81;15298:1;15291:9;15284:17;15280:105;15277:131;;;15388:18;;:::i;:::-;-1:-1:-1;15428:9:1;;15215:228::o;15448:184::-;15500:77;15497:1;15490:88;15597:4;15594:1;15587:15;15621:4;15618:1;15611:15;15637:184;15689:77;15686:1;15679:88;15786:4;15783:1;15776:15;15810:4;15807:1;15800:15;15826:125;15866:4;15894:1;15891;15888:8;15885:34;;;15899:18;;:::i;:::-;-1:-1:-1;15936:9:1;;15826:125::o;15956:195::-;15995:3;-1:-1:-1;;16019:5:1;16016:77;16013:103;;16096:18;;:::i;:::-;-1:-1:-1;16143:1:1;16132:13;;15956:195::o;16923:175::-;16960:3;17004:4;16997:5;16993:16;17033:4;17024:7;17021:17;17018:43;;17041:18;;:::i;:::-;17090:1;17077:15;;16923:175;-1:-1:-1;;16923:175:1:o;17103:128::-;17143:3;17174:1;17170:6;17167:1;17164:13;17161:39;;;17180:18;;:::i;:::-;-1:-1:-1;17216:9:1;;17103:128::o;17999:224::-;18038:3;18066:6;18099:2;18096:1;18092:10;18129:2;18126:1;18122:10;18160:3;18156:2;18152:12;18147:3;18144:21;18141:47;;;18168:18;;:::i;:::-;18204:13;;17999:224;-1:-1:-1;;;;17999:224:1:o;22347:251::-;22417:6;22470:2;22458:9;22449:7;22445:23;22441:32;22438:52;;;22486:1;22483;22476:12;22438:52;22518:9;22512:16;22537:31;22562:5;22537:31;:::i;24102:245::-;24169:6;24222:2;24210:9;24201:7;24197:23;24193:32;24190:52;;;24238:1;24235;24228:12;24190:52;24270:9;24264:16;24289:28;24311:5;24289:28;:::i;27496:605::-;27795:6;27784:9;27777:25;27838:6;27833:2;27822:9;27818:18;27811:34;27881:3;27876:2;27865:9;27861:18;27854:31;27758:4;27902:57;27954:3;27943:9;27939:19;27931:6;27902:57;:::i;:::-;-1:-1:-1;;;;;27995:55:1;;;;27990:2;27975:18;;27968:83;-1:-1:-1;28082:3:1;28067:19;28060:35;27894:65;27496:605;-1:-1:-1;;;27496:605:1:o;28741:306::-;28829:6;28837;28845;28898:2;28886:9;28877:7;28873:23;28869:32;28866:52;;;28914:1;28911;28904:12;28866:52;28943:9;28937:16;28927:26;;28993:2;28982:9;28978:18;28972:25;28962:35;;29037:2;29026:9;29022:18;29016:25;29006:35;;28741:306;;;;;:::o;29305:217::-;29344:4;29373:6;29429:10;;;;29399;;29451:12;;;29448:38;;;29466:18;;:::i;:::-;29503:13;;29305:217;-1:-1:-1;;;29305:217:1:o

Swarm Source

ipfs://bafd8ab0f07280e5edecab67ddcba5846e5c63ada161ef885e05688c890dcf2a

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.