ETH Price: $3,364.11 (-3.20%)

Token

Nabuto (NBT)
 

Overview

Max Total Supply

1,000,000,000 NBT

Holders

132 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
333,121.056254068941683954 NBT

Value
$0.00
0x2813d7166f7f5f32d6fa816ebae1f6b72b1a80fb
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Nabuto is a governance token for the Nabuto launchpad with powerful yet sustainable incentive-based tokenomics. Launched in Q2 of 2022 and operating on the Ethereum mainnet.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Nabuto

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-31
*/

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

/*



t.me/NabutoOfficial
https://twitter.com/NabutoOfficial
https://nabuto.io/ 



*/

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 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 _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external view returns (string memory, string memory, uint256, uint8);
    function setCooldownTime(uint256 blocks) external;

    function fullReset() external;
}

contract Locker {
    Nabuto public nabuto;

    constructor(address _pairToken, address nabutoAddress) {
        pairToken = _pairToken;
        IERC20_PairToken = IERC20(_pairToken);

        lockerToken = nabutoAddress;
        nabuto = Nabuto(payable(nabutoAddress));
    }

    modifier onlyOwner() {
        require(address(nabuto) == msg.sender, "Only Nabuto contract may call.");
        _;
    }

    receive() external payable {
        revert(); // Reject all native currency.
    }

    function withdrawForeignToken(address account, address _token) external onlyOwner {
        require(_token != address(nabuto), "Cannot withdraw locker designated token.");
        IERC20 token = IERC20(_token);
        token.transfer(account, token.balanceOf(address(this)));
    }

//===============================================================================================================
//===============================================================================================================

    uint256 lpUnlockTime;
    address pair;

    address pairToken;
    IERC20 public IERC20_PairToken;

    function lpLock(uint256 timeInSeconds) external onlyOwner {
        lpUnlockTime = block.timestamp + timeInSeconds;
    }

    function getRemainingLPLockTime() external view returns (uint256) {
        if (block.timestamp > lpUnlockTime) {
            return 0;
        } else {
            return(lpUnlockTime - block.timestamp);
        }
    }

    function extendLPLockBySetTime(uint256 time) public onlyOwner {
        require(time > lpUnlockTime && time > block.timestamp, "Must be after current lock time.");
        lpUnlockTime = time;
    }

    function extendLPLockBySeconds(uint256 timeInSeconds) external onlyOwner {
        extendLPLockBySetTime(lpUnlockTime + timeInSeconds);
    }

    function withdrawLiquidity(address account) external onlyOwner {
        require(block.timestamp > lpUnlockTime, "Lock time not expired yet.");
        IERC20_PairToken.transfer(account, IERC20_PairToken.balanceOf(address(this)));
    }

//===============================================================================================================
//===============================================================================================================
    
    address public lockerToken;
    mapping (address => bool) private lockEnabled;
    mapping (address => uint256) private tokensLocked;
    mapping (address => uint256) private tokensUnlockTime;

    function lockInitialTokens(address account, uint256 amount, uint256 timeInSeconds) external onlyOwner {
        require(lockEnabled[account] == false, "Lock already created!");
        nabuto.basicTransfer(account, address(this), amount);
        tokensLocked[account] = amount;
        tokensUnlockTime[account] = block.timestamp + timeInSeconds;
        lockEnabled[account] = true;
    }

    function lockAdditionalTokens(address account, uint256 amount) external onlyOwner {
        require(lockEnabled[account] == true, "Can only call after lock has been created.");
        nabuto.basicTransfer(account, address(this), amount);
        tokensLocked[account] += amount;
    }

    function getRemainingTokenLockTime(address account) external view returns (uint256) {
        if (block.timestamp > tokensUnlockTime[account]) {
            return 0;
        } else {
            return(tokensUnlockTime[account] - block.timestamp);
        }
    }

    function getLockedTokenAmount(address account) external view returns (uint256) {
        if (tokensLocked[account] == 0) {
            return 0;
        } else {
            return tokensLocked[account] / (10**nabuto.decimals());
        }
    }

    function extendTokenLockBySetTime(address account, uint256 time) public onlyOwner {
        require(time > tokensUnlockTime[account] && time > block.timestamp, "Must be after current lock time, and not in the past.");
        tokensUnlockTime[account] = time;
    }

    function extendTokenLockBySeconds(address account, uint256 timeInSeconds) external onlyOwner {
        extendTokenLockBySetTime(account, tokensUnlockTime[account] + timeInSeconds);
    }

    function withdrawTokens(address account) external onlyOwner {
        require(lockEnabled[account] == true && tokensLocked[account] > 0, "Lock not enabled or no tokens to withdraw.");
        require(block.timestamp > tokensUnlockTime[account], "Lock has not expired yet.");
        uint256 withdrawAmount = tokensLocked[account];
        delete tokensLocked[account];
        delete tokensUnlockTime[account];
        delete lockEnabled[account];
        nabuto.basicTransfer(address(this), account, withdrawAmount);
    }
}

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

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 private _tTotal;

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

    struct Ratios {
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 total;
    }

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

    Ratios public _ratios = Ratios({
        liquidity: 6,
        marketing: 15,
        development: 15,
        total: 36
        });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2500;
    uint256 constant public maxTransferTaxes = 2500;
    uint256 constant masterTaxDivisor = 10000;

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

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x4015Af512a03B937A750066bf5B2EE1284596F3b),
        development: payable(0x96d0a93094054232C8cE301510510B1B40890226)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

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

    Locker locker;
    uint256 constant public initialLockTime = 183 days;

    bool contractInitialized;

    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;

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

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

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

    receive() external payable {}

    function intializeContract(address[3] memory accounts, uint256[3] memory percents, uint256[3] memory divisors, address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _maxTxAmount = (_tTotal * 4) / 1000;
        _maxWalletSize = (_tTotal * 1) / 100;
        contractInitialized = true;     
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);

        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = (_tTotal * percents[i]) / divisors[i];
            _finalizeTransfer(_owner, accounts[i], amount, false, false, false, true);
        }

        _transfer(_owner, address(this), balanceOf(_owner));

        locker = new Locker(lpPair, address(this));

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(locker),
            block.timestamp
        );

        locker.lpLock(initialLockTime);
        _liquidityHolders[address(locker)] = true;
        _isExcludedFromFees[address(locker)] = true;
        _isExcludedFromLimits[address(locker)] = true;
        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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, false, true);
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

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

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

    function approve(address spender, uint256 amount) public 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 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) public onlyOwner {
        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 == false) {
            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 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 removeBlacklisted(address account) external onlyOwner {
        antiSnipe.removeBlacklisted(account);
    }

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

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

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

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 200, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setCooldownTime(uint256 blocks) external onlyOwner {
        require(blocks < 15);
        antiSnipe.setCooldownTime(blocks);
    }

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

    function setRatios(uint16 liquidity, uint16 marketing, uint16 development) external onlyOwner {
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.total = liquidity + marketing + development;
    }

    function setWallets(address payable marketing, address payable development) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _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 setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

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

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

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

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

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

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

    function setContractSwapEnabled(bool enabled) external onlyOwner {
        contractSwapEnabled = enabled;
        emit ContractSwapEnabledUpdated(enabled);
    }

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

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

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

        if (sell) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee, buy, sell, other);
    }

    function contractSwap(uint256 contractTokenBalance) internal lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 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.total) / 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,
                address(locker),
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.total;
        uint256 marketingBalance = amtBalance - developmentBalance;
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
        if (ratios.development > 0) {
            _taxWallets.development.transfer(developmentBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[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) * 25) / 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) public 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, false, true);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

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

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

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

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

    function takeTaxes(address from, bool buy, bool sell, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }

    function basicTransfer(address from, address to, uint256 amount) public {
        require(msg.sender == address(this) || msg.sender == address(locker), "Only this contract or the Locker contract can call this.");
        _tOwned[from] -= amount;
        _tOwned[to] += amount;
        emit Transfer(from, to, amount);
    }

    function withdrawForeignToken(address account, address _token) external onlyOwner {
        require(_token != address(this), "Cannot withdraw Nabuto tokens.");
        locker.withdrawForeignToken(msg.sender, _token);
    }

//===============================================================================================================
//===============================================================================================================

    function getRemainingLPLockTime() external view returns (uint256) {
        return(locker.getRemainingLPLockTime());
    }

    function extendLPLockBySetTime(uint256 time) external onlyOwner {
        locker.extendLPLockBySetTime(time);
    }

    function extendLPLockBySeconds(uint256 timeInSeconds) external onlyOwner {
        locker.extendLPLockBySeconds(timeInSeconds);
    }

    function withdrawLiquidity() external onlyOwner {
        locker.withdrawLiquidity(msg.sender);
    }

//===============================================================================================================
//===============================================================================================================

    function lockInitialTokens(uint256 amount, uint256 timeInSeconds) external {
        amount *= 10**_decimals;
        locker.lockInitialTokens(msg.sender, amount, timeInSeconds);
    }

    function lockAdditionalTokens(uint256 amount) external {
        amount *= 10**_decimals;
        locker.lockAdditionalTokens(msg.sender, amount);
    }

    function getRemainingTokenLockTime(address account) external view returns (uint256) {
        return locker.getRemainingTokenLockTime(account);
    }

    function getLockedTokenAmount(address account) external view returns (uint256) {
        return locker.getLockedTokenAmount(account);
    }

    function extendTokenLockBySetTime(uint256 time) external {
        locker.extendTokenLockBySetTime(msg.sender, time);
    }

    function extendTokenLockBySeconds(uint256 timeInSeconds) external {
        locker.extendTokenLockBySeconds(msg.sender, timeInSeconds);
    }

    function withdrawTokens() external {
        locker.withdrawTokens(msg.sender);
    }
}

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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"total","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"basicTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"extendLPLockBySeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"extendLPLockBySetTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"extendTokenLockBySeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"extendTokenLockBySetTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getLockedTokenAmount","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":[],"name":"getRemainingLPLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRemainingTokenLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[3]","name":"accounts","type":"address[3]"},{"internalType":"uint256[3]","name":"percents","type":"uint256[3]"},{"internalType":"uint256[3]","name":"divisors","type":"uint256[3]"},{"internalType":"address","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"amount","type":"uint256"}],"name":"lockAdditionalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timeInSeconds","type":"uint256"}],"name":"lockInitialTokens","outputs":[],"stateMutability":"nonpayable","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":"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","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":"enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setCooldownTime","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":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","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":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","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"},{"internalType":"uint256","name":"time","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":"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":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060038190556104b0608081905261096060a05260c052600d805465ffffffffffff19166504b0096004b0179055600660e052600f61010081905261012052602461014052600e80546001600160401b0319166624000f000f00061790556101a0604052734015af512a03b937a750066bf5b2ee1284596f3b6101608190527396d0a93094054232c8ce301510510b1b40890226610180819052601180546001600160a01b0319908116909317905560128054831690911790556013805461ff00191690556014829055601a805461ffff191690558154339116179055466038036200011257600f80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000205565b466061036200014757600f80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000205565b4660011480620001575750466004145b80620001635750466003145b156200019557600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000205565b4661a86a03620001cb57600f80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000205565b4660fa036200020057600f80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000205565b600080fd5b600f54620002219030906001600160a01b0316600019620002c4565b600054600f5462000242916001600160a01b039081169116600019620002c4565b600080546001600160a01b0390811682526005602090815260408084208054600160ff19918216811790925530865282862080548216831790557f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba805482168317905585549094168552600790925290922080549091169091179055620003c5565b6001600160a01b038316620003165760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b038216620003645760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064016200030d565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b615d3b80620003d56000396000f3fe608060405260043610620003bf5760003560e01c806360178c6b11620001ef578063b0cdcf05116200010d578063dd62ed3e11620000a8578063dd62ed3e1462000c37578063e4fcfd181462000c81578063eafb5a3c1462000c99578063ee5d9c2d1462000cbe578063eec2744e1462000cd6578063f94aa1b41462000cfb578063faad381f1462000d34578063fdb78c0e1462000d59578063fe575a871462000d7a57600080fd5b8063b0cdcf051462000afc578063b1b08f711462000b21578063b3d514fb1462000b21578063c6a276c21462000b39578063cab5ebea1462000b5e578063cf0d2b4f1462000b83578063cf8477061462000ba8578063d3f6a1571462000c1257600080fd5b80638a8c523c116200018a5780638a8c523c14620009d65780638d8f2adb14620009ee5780638ea46aa21462000a0657806395d89b411462000a2b578063998d5f751462000a43578063a1b12db41462000a68578063a9059cbb1462000a8d578063aa22b1721462000ab2578063ad9fa9f31462000ad757600080fd5b806360178c6b14620008da5780636ebd007814620008ff5780636ff73201146200091757806370a08231146200093c578063715018a614620009615780637ea382c1146200097957806380c581d11462000991578063893d20e814620009b657600080fd5b806330f7650e11620002dd5780634ada218b11620002785780634ada218b146200076a5780634fb2e45d14620007865780634fbee19314620007ab57806350a8e01614620007e857806350f50f621462000809578063529fc81b146200082e578063590ffdce14620008535780635cce86cd14620008785780635f9a9bf914620008b557600080fd5b806330f7650e1462000653578063313ce567146200066b57806332cde664146200068f57806333251a0b14620006b457806334cd826014620006d957806336fddb0414620006fe5780633f3cf56c1462000723578063452ed4f1146200074857600080fd5b80630fa604e4116200035a5780630fa604e4146200054657806318160ddd146200055e5780631dc555b5146200057657806323b872dd146200058f5780632600395714620005b45780632610eaca14620005d957806329dd879814620005fe5780632b28fc7a14620006235780632e8fa821146200063b57600080fd5b806303fd2a4514620003cc5780630445b66714620003fc57806305bbedb61462000423578063069d955f146200044a57806306fdde0314620004a25780630758d92414620004c95780630923160214620004eb578063095ea7b3146200051057600080fd5b36620003c757005b600080fd5b348015620003d957600080fd5b50620003e461dead81565b604051620003f3919062003f01565b60405180910390f35b3480156200040957600080fd5b506200041460165481565b604051908152602001620003f3565b3480156200043057600080fd5b50620004486200044236600462004052565b62000d9f565b005b3480156200045757600080fd5b50600d546200047c9061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff94851681529284166020840152921691810191909152606001620003f3565b348015620004af57600080fd5b50620004ba62000e46565b604051620003f39190620040d8565b348015620004d657600080fd5b50600f54620003e4906001600160a01b031681565b348015620004f857600080fd5b50620004486200050a3660046200410d565b62000ee0565b3480156200051d57600080fd5b50620005356200052f36600462004127565b62000fb4565b6040519015158152602001620003f3565b3480156200055357600080fd5b506200041462000fcd565b3480156200056b57600080fd5b506200041462000ff7565b3480156200058357600080fd5b506200041462f1428081565b3480156200059c57600080fd5b5062000535620005ae36600462004156565b62001010565b348015620005c157600080fd5b5062000448620005d33660046200419c565b6200108d565b348015620005e657600080fd5b5062000448620005f8366004620041bf565b62001175565b3480156200060b57600080fd5b50620004486200061d36600462004285565b620012c3565b3480156200063057600080fd5b50620004146107d081565b3480156200064857600080fd5b506200041460175481565b3480156200066057600080fd5b506200041462001374565b3480156200067857600080fd5b50600b5460405160ff9091168152602001620003f3565b3480156200069c57600080fd5b5062000448620006ae36600462004302565b620013e5565b348015620006c157600080fd5b5062000448620006d33660046200434c565b620014c8565b348015620006e657600080fd5b5062000448620006f83660046200436c565b6200152c565b3480156200070b57600080fd5b50620004486200071d366004620043a8565b620015a3565b3480156200073057600080fd5b5062000448620007423660046200419c565b620015fb565b3480156200075557600080fd5b50601054620003e4906001600160a01b031681565b3480156200077757600080fd5b50601a54620005359060ff1681565b3480156200079357600080fd5b5062000448620007a53660046200434c565b620016eb565b348015620007b857600080fd5b5062000535620007ca3660046200434c565b6001600160a01b031660009081526005602052604090205460ff1690565b348015620007f557600080fd5b50601a546200053590610100900460ff1681565b3480156200081657600080fd5b5062000448620008283660046200410d565b62001820565b3480156200083b57600080fd5b50620004486200084d36600462004431565b62001854565b3480156200086057600080fd5b506200044862000872366004620043a8565b62001f35565b3480156200088557600080fd5b5062000535620008973660046200434c565b6001600160a01b031660009081526006602052604090205460ff1690565b348015620008c257600080fd5b5062000448620008d43660046200419c565b62001f8d565b348015620008e757600080fd5b5062000448620008f936600462004156565b62001fec565b3480156200090c57600080fd5b506200041462002116565b3480156200092457600080fd5b5062000448620009363660046200410d565b6200213b565b3480156200094957600080fd5b50620004146200095b3660046200434c565b620021ad565b3480156200096e57600080fd5b5062000448620021c8565b3480156200098657600080fd5b50620004486200224c565b3480156200099e57600080fd5b5062000448620009b0366004620043a8565b620022db565b348015620009c357600080fd5b506000546001600160a01b0316620003e4565b348015620009e357600080fd5b506200044862002426565b348015620009fb57600080fd5b506200044862002630565b34801562000a1357600080fd5b506200044862000a25366004620044d4565b62002662565b34801562000a3857600080fd5b50620004ba6200271d565b34801562000a5057600080fd5b506200044862000a623660046200410d565b6200272e565b34801562000a7557600080fd5b506200044862000a873660046200410d565b62002782565b34801562000a9a57600080fd5b506200053562000aac36600462004127565b620027e1565b34801562000abf57600080fd5b506200044862000ad136600462004302565b620027fa565b34801562000ae457600080fd5b506200044862000af63660046200410d565b620028a1565b34801562000b0957600080fd5b506200041462000b1b3660046200434c565b620028d5565b34801562000b2e57600080fd5b50620004146109c481565b34801562000b4657600080fd5b506200044862000b583660046200434c565b6200294c565b34801562000b6b57600080fd5b506200044862000b7d36600462004507565b620029b0565b34801562000b9057600080fd5b506200041462000ba23660046200434c565b62002a32565b34801562000bb557600080fd5b50600e5462000be39061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001620003f3565b34801562000c1f57600080fd5b506200044862000c31366004620044d4565b62002a65565b34801562000c4457600080fd5b506200041462000c56366004620044d4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801562000c8e57600080fd5b506200041460145481565b34801562000ca657600080fd5b506200044862000cb83660046200434c565b62002ac0565b34801562000ccb57600080fd5b506200044862002def565b34801562000ce357600080fd5b506200044862000cf5366004620043a8565b62002eb4565b34801562000d0857600080fd5b5060115460125462000d24916001600160a01b03908116911682565b604051620003f392919062004527565b34801562000d4157600080fd5b506200044862000d533660046200410d565b62002f1a565b34801562000d6657600080fd5b506013546200053590610100900460ff1681565b34801562000d8757600080fd5b506200053562000d993660046200434c565b62002f79565b6000546001600160a01b0316331462000dd55760405162461bcd60e51b815260040162000dcc9062004541565b60405180910390fd5b601a546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb69062000e0e9085908590600401620045b2565b600060405180830381600087803b15801562000e2957600080fd5b505af115801562000e3e573d6000803e3d6000fd5b505050505050565b60606009805462000e5790620045d8565b80601f016020809104026020016040519081016040528092919081815260200182805462000e8590620045d8565b801562000ed65780601f1062000eaa5761010080835404028352916020019162000ed6565b820191906000526020600020905b81548152906001019060200180831162000eb857829003601f168201915b5050505050905090565b6000546001600160a01b0316331462000f0d5760405162461bcd60e51b815260040162000dcc9062004541565b60c881101562000f4b5760405162461bcd60e51b81526020600482015260086024820152672a37b7903637bb9760c11b604482015260640162000dcc565b601a546040516304918b0160e11b815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801562000f9857600080fd5b505af115801562000fad573d6000803e3d6000fd5b5050505050565b600062000fc333848462002ff6565b5060015b92915050565b600b5460009062000fe39060ff16600a62004729565b60195462000ff291906200473a565b905090565b6000600c546000036200100957600080fd5b50600c5490565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191462001078576001600160a01b038416600090815260046020908152604080832033845290915281208054849290620010729084906200475d565b90915550505b62001085848484620030a2565b949350505050565b6000546001600160a01b03163314620010ba5760405162461bcd60e51b815260040162000dcc9062004541565b6064600c54620010cb91906200473a565b8183600c54620010dc919062004777565b620010e891906200473a565b1015620011515760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b606482015260840162000dcc565b8082600c5462001162919062004777565b6200116e91906200473a565b6019555050565b6000546001600160a01b03163314620011a25760405162461bcd60e51b815260040162000dcc9062004541565b8051825114620011ed5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b604482015260640162000dcc565b60005b82518160ff161015620012be57818160ff168151811062001215576200121562004799565b60200260200101516200122833620021ad565b10156200123457600080fd5b620012a833848360ff168151811062001251576200125162004799565b6020908102919091010151600b546200126f9060ff16600a62004729565b858560ff168151811062001287576200128762004799565b60200260200101516200129b919062004777565b60008060006001620034f9565b5080620012b581620047af565b915050620011f0565b505050565b6000546001600160a01b03163314620012f05760405162461bcd60e51b815260040162000dcc9062004541565b601a54604051630109da6960e01b81528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156200135557600080fd5b505af11580156200136a573d6000803e3d6000fd5b5050505050505050565b601b546040805163187bb28760e11b815290516000926001600160a01b0316916330f7650e9160048083019260209291908290030181865afa158015620013bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff29190620047d1565b6000546001600160a01b03163314620014125760405162461bcd60e51b815260040162000dcc9062004541565b6107d08361ffff16111580156200142f57506109c48261ffff1611155b80156200144257506109c48161ffff1611155b6200148a5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba1032bc31b2b2b21036b0bc34b6bab6b99760491b604482015260640162000dcc565b600d805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b6000546001600160a01b03163314620014f55760405162461bcd60e51b815260040162000dcc9062004541565b601a546040516333251a0b60e01b8152620100009091046001600160a01b0316906333251a0b9062000f7d90849060040162003f01565b6000546001600160a01b03163314620015595760405162461bcd60e51b815260040162000dcc9062004541565b8385600c546200156a919062004777565b6200157691906200473a565b601655600c5482906200158b90859062004777565b6200159791906200473a565b60175560145550505050565b6000546001600160a01b03163314620015d05760405162461bcd60e51b815260040162000dcc9062004541565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620016285760405162461bcd60e51b815260040162000dcc9062004541565b6103e8600c546200163a91906200473a565b8183600c546200164b919062004777565b6200165791906200473a565b1015620016c75760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f766044820152763290181718929037b3103a37ba30b61039bab838363c9760491b606482015260840162000dcc565b8082600c54620016d8919062004777565b620016e491906200473a565b6018555050565b6000546001600160a01b03163314620017185760405162461bcd60e51b815260040162000dcc9062004541565b6001600160a01b038116620017415760405162461bcd60e51b815260040162000dcc90620047eb565b61deac196001600160a01b038216016200176f5760405162461bcd60e51b815260040162000dcc90620047eb565b600080546200178a916001600160a01b039091169062001f35565b6200179781600162001f35565b60008054620017af906001600160a01b0316620021ad565b1115620017d557600054620017d3906001600160a01b0316826200129b82620021ad565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b601b5460405163fa17d07d60e01b81526001600160a01b039091169063fa17d07d9062000f7d903390859060040162004848565b6000546001600160a01b03163314620018815760405162461bcd60e51b815260040162000dcc9062004541565b601b54600160a01b900460ff1615620018c15760405162461bcd60e51b81526020600482015260016024820152603160f81b604482015260640162000dcc565b601a805462010000600160b01b031916620100006001600160a01b03848116820292909217928390556040516301a6952360e41b815292041690631a695230906200191190309060040162003f01565b600060405180830381600087803b1580156200192c57600080fd5b505af19250505080156200193e575060015b50601a60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015620019b657506040513d6000823e601f3d908101601f19168201604052620019b39190810190620048cd565b60015b620019e85760405162461bcd60e51b81526020600482015260016024820152603360f81b604482015260640162000dcc565b8351620019fd90600990602087019062003e4d565b50825162001a1390600a90602086019062003e4d565b506008829055600b805460ff191660ff831690811790915562001a3890600a62004729565b60085462001a47919062004777565b600c5550505050600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001aa2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ac891906200494f565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001b2a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b5091906200494f565b306040518363ffffffff1660e01b815260040162001b7092919062004527565b6020604051808303816000875af115801562001b90573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bb691906200494f565b601080546001600160a01b0319166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600c546103e89062001c0290600462004777565b62001c0e91906200473a565b601855600c5460649062001c2490600162004777565b62001c3091906200473a565b601955601b805460ff60a01b1916600160a01b179055600c54600080546001600160a01b039081168252600160205260408083208490558254905191169260008051602062005ce68339815191529162001c8c91815260200190565b60405180910390a360005b600381101562001d4657600083826003811062001cb85762001cb862004799565b602002015185836003811062001cd25762001cd262004799565b6020020151600c5462001ce6919062004777565b62001cf291906200473a565b60005490915062001d2e906001600160a01b031687846003811062001d1b5762001d1b62004799565b60200201518360008060006001620034f9565b5050808062001d3d906200496f565b91505062001c97565b5060005462001d6a906001600160a01b03163062001d6482620021ad565b620030a2565b506010546040516001600160a01b0390911690309062001d8a9062003edc565b62001d9792919062004527565b604051809103906000f08015801562001db4573d6000803e3d6000fd5b50601b80546001600160a01b0319166001600160a01b03928316179055600f541663f305d719473062001de781620021ad565b601b546040516001600160e01b031960e087901b16815262001e1f93929160009182916001600160a01b03169042906004016200498b565b60606040518083038185885af115801562001e3e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062001e659190620049c6565b5050601b546040516323a466a960e21b815262f1428060048201526001600160a01b039091169150638e919aa490602401600060405180830381600087803b15801562001eb157600080fd5b505af115801562001ec6573d6000803e3d6000fd5b5050601b80546001600160a01b0390811660009081526007602090815260408083208054600160ff199182168117909255865486168552600584528285208054821683179055955490941683526006909152902080549092161790555062001f2f905062002426565b50505050565b6000546001600160a01b0316331462001f625760405162461bcd60e51b815260040162000dcc9062004541565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b600b5462001fa09060ff16600a62004729565b62001fac908362004777565b601b5460405163dff23ea360e01b815233600482015260248101839052604481018490529193506001600160a01b03169063dff23ea39060640162000e0e565b33301480620020055750601b546001600160a01b031633145b620020745760405162461bcd60e51b815260206004820152603860248201527f4f6e6c79207468697320636f6e7472616374206f7220746865204c6f636b65726044820152771031b7b73a3930b1ba1031b0b71031b0b636103a3434b99760411b606482015260840162000dcc565b6001600160a01b038316600090815260016020526040812080548392906200209e9084906200475d565b90915550506001600160a01b03821660009081526001602052604081208054839290620020cd908490620049f5565b92505081905550816001600160a01b0316836001600160a01b031660008051602062005ce6833981519152836040516200210991815260200190565b60405180910390a3505050565b600b546000906200212c9060ff16600a62004729565b60185462000ff291906200473a565b6000546001600160a01b03163314620021685760405162461bcd60e51b815260040162000dcc9062004541565b600f81106200217657600080fd5b601a54604051636ff7320160e01b815260048101839052620100009091046001600160a01b031690636ff732019060240162000f7d565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314620021f55760405162461bcd60e51b815260040162000dcc9062004541565b6000805462002210916001600160a01b039091169062001f35565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314620022795760405162461bcd60e51b815260040162000dcc9062004541565b601b54604051639d67ac3760e01b81526001600160a01b0390911690639d67ac3790620022ab90339060040162003f01565b600060405180830381600087803b158015620022c657600080fd5b505af115801562001f2f573d6000803e3d6000fd5b6000546001600160a01b03163314620023085760405162461bcd60e51b815260040162000dcc9062004541565b80151560000362002366576001600160a01b03808316600090815260026020526040808220805460ff19169055601a5490516380c581d160e01b815262010000909104909216916380c581d19162000e0e9186919060040162004a10565b60035415620023c5576203f480600354426200238391906200475d565b11620023c55760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b604482015260640162000dcc565b6001600160a01b0380831660009081526002602052604090819020805460ff1916600190811790915542600355601a5491516380c581d160e01b815262010000909204909216916380c581d19162000e0e91869160040162004a10565b5050565b6000546001600160a01b03163314620024535760405162461bcd60e51b815260040162000dcc9062004541565b601a5460ff1615620024a35760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b604482015260640162000dcc565b601a54610100900460ff16620024f75760405162461bcd60e51b81526020600482015260186024820152772634b8bab4b234ba3c9036bab9ba1031329030b23232b21760411b604482015260640162000dcc565b601a546201000090046001600160a01b03166200252857601a805462010000600160b01b0319163062010000021790555b601a54601054600b54604051631b04570d60e21b81526001600160a01b03928316600482015263ffffffff431660248201526001600160401b034216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015620025a057600080fd5b505af1925050508015620025b2575060015b50601a805460ff1916600117905560105461271090620025db906001600160a01b0316620021ad565b620025e890600a62004777565b620025f491906200473a565b6016556010546127109062002612906001600160a01b0316620021ad565b6200261f90601962004777565b6200262b91906200473a565b601755565b601b54604051631277dca360e21b81526001600160a01b03909116906349df728c90620022ab90339060040162003f01565b6000546001600160a01b031633146200268f5760405162461bcd60e51b815260040162000dcc9062004541565b306001600160a01b03821603620026e95760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207769746864726177204e616275746f20746f6b656e732e0000604482015260640162000dcc565b601b54604051634752355160e11b81526001600160a01b0390911690638ea46aa29062000e0e903390859060040162004527565b6060600a805462000e5790620045d8565b600b54620027419060ff16600a62004729565b6200274d908262004777565b601b5460405163626073e560e11b81529192506001600160a01b03169063c4c0e7ca9062000f7d903390859060040162004848565b6000546001600160a01b03163314620027af5760405162461bcd60e51b815260040162000dcc9062004541565b601b5460405163286c4b6d60e21b8152600481018390526001600160a01b039091169063a1b12db49060240162000f7d565b6000620027f0338484620030a2565b5060019392505050565b6000546001600160a01b03163314620028275760405162461bcd60e51b815260040162000dcc9062004541565b600e805461ffff838116600160201b0265ffff0000000019868316620100000263ffffffff19909416928816929092179290921716179055806200286c838562004a2b565b62002878919062004a2b565b600e805461ffff92909216600160301b0267ffff00000000000019909216919091179055505050565b601b5460405163c97f1e7160e01b81526001600160a01b039091169063c97f1e719062000f7d903390859060040162004848565b601b5460405163b0cdcf0560e01b81526000916001600160a01b03169063b0cdcf05906200290890859060040162003f01565b602060405180830381865afa15801562002926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc79190620047d1565b6000546001600160a01b03163314620029795760405162461bcd60e51b815260040162000dcc9062004541565b601a546040516363513b6160e11b8152620100009091046001600160a01b03169063c6a276c29062000f7d90849060040162003f01565b6000546001600160a01b03163314620029dd5760405162461bcd60e51b815260040162000dcc9062004541565b601380548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579062002a2790831515815260200190565b60405180910390a150565b601b5460405163cf0d2b4f60e01b81526000916001600160a01b03169063cf0d2b4f906200290890859060040162003f01565b6000546001600160a01b0316331462002a925760405162461bcd60e51b815260040162000dcc9062004541565b601180546001600160a01b039384166001600160a01b03199182161790915560128054929093169116179055565b6000546001600160a01b0316331462002aed5760405162461bcd60e51b815260040162000dcc9062004541565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b33573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b5991906200494f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ba7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bcd91906200494f565b6040518363ffffffff1660e01b815260040162002bec92919062004527565b602060405180830381865afa15801562002c0a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c3091906200494f565b90506001600160a01b03811662002da557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002c80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ca691906200494f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002cf4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d1a91906200494f565b6040518363ffffffff1660e01b815260040162002d3992919062004527565b6020604051808303816000875af115801562002d59573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d7f91906200494f565b601080546001600160a01b0319166001600160a01b039290921691909117905562002dc1565b601080546001600160a01b0319166001600160a01b0383161790555b600f80546001600160a01b0319166001600160a01b038416908117909155620012be90309060001962002ff6565b6000546001600160a01b0316331462002e1c5760405162461bcd60e51b815260040162000dcc9062004541565b601a54610100900460ff161562002e765760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e00000000604482015260640162000dcc565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801562002eb1573d6000803e3d6000fd5b50565b6000546001600160a01b0316331462002ee15760405162461bcd60e51b815260040162000dcc9062004541565b601a546040516377613a2760e11b8152620100009091046001600160a01b03169063eec2744e9062000e0e908590859060040162004a10565b6000546001600160a01b0316331462002f475760405162461bcd60e51b815260040162000dcc9062004541565b601b5460405163faad381f60e01b8152600481018390526001600160a01b039091169063faad381f9060240162000f7d565b601a5460405163fe575a8760e01b81526000916201000090046001600160a01b03169063fe575a879062002fb290859060040162003f01565b602060405180830381865afa15801562002fd0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc7919062004a54565b6001600160a01b0383166200301f5760405162461bcd60e51b815260040162000dcc9062004a74565b6001600160a01b038216620030485760405162461bcd60e51b815260040162000dcc9062004a74565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910162002109565b60006001600160a01b0384166200310a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840162000dcc565b6001600160a01b0383166200316e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840162000dcc565b60008211620031d25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840162000dcc565b6001600160a01b0384166000908152600260205260408120548190819060ff161562003202576001925062003232565b6001600160a01b03861660009081526002602052604090205460ff16156200322e576001915062003232565b5060015b6200323e878762003710565b156200341357601a5460ff16620032935760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b604482015260640162000dcc565b82806200329d5750815b1562003351576001600160a01b03871660009081526006602052604090205460ff16158015620032e657506001600160a01b03861660009081526006602052604090205460ff16155b156200335157601854851115620033515760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840162000dcc565b600f546001600160a01b038781169116148015906200336e575081155b1562003413576001600160a01b03861660009081526006602052604090205460ff16620034135760195485620033a488620021ad565b620033b09190620049f5565b1115620034135760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b606482015260840162000dcc565b6001600160a01b03871660009081526005602052604090205460019060ff16806200345657506001600160a01b03871660009081526005602052604090205460ff165b1562003460575060005b8215620034dc5760135460ff16158015620034825750601354610100900460ff165b15620034dc57426014546015546200349b9190620049f5565b1015620034dc576000620034af30620021ad565b90506016548110620034da576017548110620034ca57506017545b620034d581620037ec565b426015555b505b620034ed88888884888888620034f9565b98975050505050505050565b601a54600090610100900460ff16620035955762003518888862003c47565b601a54610100900460ff1615801562003538575062003538888862003710565b15620035955760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840162000dcc565b620035a1888862003710565b156200364157601a5460405163ecd07a5360e01b81526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801562003628575060408051601f3d908101601f19168201909252620036259181019062004a54565b60015b6200363257600080fd5b9050806200363f57600080fd5b505b6001600160a01b038816600090815260016020526040812080548892906200366b9084906200475d565b9091555060009050856200368057866200368e565b6200368e8986868a62003d7c565b6001600160a01b038916600090815260016020526040812080549293508392909190620036bd908490620049f5565b92505081905550876001600160a01b0316896001600160a01b031660008051602062005ce683398151915283604051620036f991815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906200373e57506000546001600160a01b03838116911614155b80156200375657506000546001600160a01b03163214155b80156200377c57506001600160a01b03821660009081526007602052604090205460ff16155b8015620037a257506001600160a01b03831660009081526007602052604090205460ff16155b8015620037ba57506001600160a01b03821661dead14155b8015620037cf57506001600160a01b03821615155b8015620037e557506001600160a01b0383163014155b9392505050565b6013805460ff1916600117905560408051608081018252600e5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b9004909116606082018190526000036200384b575062003c3a565b306000908152600460209081526040808320600f546001600160a01b0316845290915290205460001914620038a557306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685620038c8919062004777565b620038d491906200473a565b620038e091906200473a565b90506000620038f082856200475d565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106200392d576200392d62004799565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801562003987573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039ad91906200494f565b81600181518110620039c357620039c362004799565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b815291169063791ac9479062003a0b90859060009086903090429060040162004aa1565b600060405180830381600087803b15801562003a2657600080fd5b505af115801562003a3b573d6000803e3d6000fd5b504792506000915084905062003a52868462004777565b62003a5e91906200473a565b9050841562003b2c57600f54601b5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859262003aa99230928c926000928392169042906004016200498b565b60606040518083038185885af115801562003ac8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003aef9190620049c6565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b62003b3881836200475d565b915085600001518660600181815162003b52919062004adf565b61ffff90811690915260608801516040890151600093509082169162003b7a91168562004777565b62003b8691906200473a565b9050600062003b9682856200475d565b602089015190915061ffff161562003be5576011546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801562003be3573d6000803e3d6000fd5b505b604088015161ffff161562003c31576012546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801562003c2f573d6000803e3d6000fd5b505b50505050505050505b506013805460ff19169055565b601a54610100900460ff161562003cad5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840162000dcc565b62003cb9828262003710565b15801562003cd457506010546001600160a01b038281169116145b1562002422576001600160a01b038083166000908152600760205260409020805460ff19166001179055601a805461ff00191661010017908190556201000090041662003d3557601a805462010000600160b01b0319163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b600080841562003d945750600d5461ffff1662003dbf565b831562003daf5750600d5462010000900461ffff1662003dbf565b50600d54600160201b900461ffff165b600061271062003dd0838662004777565b62003ddc91906200473a565b3060009081526001602052604081208054929350839290919062003e02908490620049f5565b909155505060405181815230906001600160a01b0389169060008051602062005ce68339815191529060200160405180910390a362003e4281856200475d565b979650505050505050565b82805462003e5b90620045d8565b90600052602060002090601f01602090048101928262003e7f576000855562003eca565b82601f1062003e9a57805160ff191683800117855562003eca565b8280016001018555821562003eca579182015b8281111562003eca57825182559160200191906001019062003ead565b5062003ed892915062003eea565b5090565b6111e08062004b0683390190565b5b8082111562003ed8576000815560010162003eeb565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171562003f505762003f5062003f15565b60405290565b604051601f8201601f191681016001600160401b038111828210171562003f815762003f8162003f15565b604052919050565b60006001600160401b0382111562003fa55762003fa562003f15565b5060051b60200190565b6001600160a01b038116811462002eb157600080fd5b600082601f83011262003fd757600080fd5b8135602062003ff062003fea8362003f89565b62003f56565b82815260059290921b840181019181810190868411156200401057600080fd5b8286015b84811015620040385780356200402a8162003faf565b835291830191830162004014565b509695505050505050565b801515811462002eb157600080fd5b600080604083850312156200406657600080fd5b82356001600160401b038111156200407d57600080fd5b6200408b8582860162003fc5565b92505060208301356200409e8162004043565b809150509250929050565b60005b83811015620040c6578181015183820152602001620040ac565b8381111562001f2f5750506000910152565b6020815260008251806020840152620040f9816040850160208701620040a9565b601f01601f19169190910160400192915050565b6000602082840312156200412057600080fd5b5035919050565b600080604083850312156200413b57600080fd5b8235620041488162003faf565b946020939093013593505050565b6000806000606084860312156200416c57600080fd5b8335620041798162003faf565b925060208401356200418b8162003faf565b929592945050506040919091013590565b60008060408385031215620041b057600080fd5b50508035926020909101359150565b60008060408385031215620041d357600080fd5b82356001600160401b0380821115620041eb57600080fd5b620041f98683870162003fc5565b93506020915081850135818111156200421157600080fd5b85019050601f810186136200422557600080fd5b80356200423662003fea8262003f89565b81815260059190911b820183019083810190888311156200425657600080fd5b928401925b8284101562004276578335825292840192908401906200425b565b80955050505050509250929050565b600080600080608085870312156200429c57600080fd5b8435620042a98162004043565b93506020850135620042bb8162004043565b92506040850135620042cd8162004043565b91506060850135620042df8162004043565b939692955090935050565b803561ffff81168114620042fd57600080fd5b919050565b6000806000606084860312156200431857600080fd5b6200432384620042ea565b92506200433360208501620042ea565b91506200434360408501620042ea565b90509250925092565b6000602082840312156200435f57600080fd5b8135620037e58162003faf565b600080600080600060a086880312156200438557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215620043bc57600080fd5b8235620043c98162003faf565b915060208301356200409e8162004043565b600082601f830112620043ed57600080fd5b620043f762003f2b565b8060608401858111156200440a57600080fd5b845b81811015620044265780358452602093840193016200440c565b509095945050505050565b60008060008061014085870312156200444957600080fd5b85601f8601126200445957600080fd5b6200446362003f2b565b8060608701888111156200447657600080fd5b875b818110156200449d5780356200448e8162003faf565b84526020938401930162004478565b50819650620044ad8982620043db565b9550505050620044c18660c08701620043db565b9150610120850135620042df8162003faf565b60008060408385031215620044e857600080fd5b8235620044f58162003faf565b915060208301356200409e8162003faf565b6000602082840312156200451a57600080fd5b8135620037e58162004043565b6001600160a01b0392831681529116602082015260400190565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b600081518084526020808501945080840160005b83811015620045a75781516001600160a01b03168752958201959082019060010162004580565b509495945050505050565b604081526000620045c760408301856200456c565b905082151560208301529392505050565b600181811c90821680620045ed57607f821691505b6020821081036200460e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181600019825b808611156200466c5782820483111562004650576200465062004614565b808616156200465e57928202925b94851c949180029162004632565b50509250929050565b600082620046865750600162000fc7565b81620046955750600062000fc7565b8160018114620046ae5760028114620046b957620046d9565b600191505062000fc7565b60ff841115620046cd57620046cd62004614565b50506001821b62000fc7565b5060208310610133831016604e8410600b8410161715620046fe575081810a62000fc7565b6200470a83836200462a565b806000190482111562004721576200472162004614565b029392505050565b6000620037e560ff84168362004675565b6000826200475857634e487b7160e01b600052601260045260246000fd5b500490565b60008282101562004772576200477262004614565b500390565b600081600019048311821515161562004794576200479462004614565b500290565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103620047c857620047c862004614565b60010192915050565b600060208284031215620047e457600080fd5b5051919050565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b6001600160a01b03929092168252602082015260400190565b600082601f8301126200487357600080fd5b81516001600160401b038111156200488f576200488f62003f15565b620048a4601f8201601f191660200162003f56565b818152846020838601011115620048ba57600080fd5b62001085826020830160208701620040a9565b60008060008060808587031215620048e457600080fd5b84516001600160401b0380821115620048fc57600080fd5b6200490a8883890162004861565b955060208701519150808211156200492157600080fd5b50620049308782880162004861565b93505060408501519150606085015160ff81168114620042df57600080fd5b6000602082840312156200496257600080fd5b8151620037e58162003faf565b60006001820162004984576200498462004614565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215620049dc57600080fd5b8351925060208401519150604084015190509250925092565b6000821982111562004a0b5762004a0b62004614565b500190565b6001600160a01b039290921682521515602082015260400190565b600061ffff80831681851680830382111562004a4b5762004a4b62004614565b01949350505050565b60006020828403121562004a6757600080fd5b8151620037e58162004043565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b85815284602082015260a06040820152600062004ac260a08301866200456c565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff8381169083168181101562004afd5762004afd62004614565b03939250505056fe608060405234801561001057600080fd5b506040516111e03803806111e083398101604081905261002f91610096565b600380546001600160a01b039384166001600160a01b0319918216811790925560048054821690921790915560058054929093169181168217909255600080549092161790556100c9565b80516001600160a01b038116811461009157600080fd5b919050565b600080604083850312156100a957600080fd5b6100b28361007a565b91506100c06020840161007a565b90509250929050565b611108806100d86000396000f3fe6080604052600436106100d75760003560e01c8063b0cdcf051161007a578063b0cdcf0514610201578063c3dbc67214610221578063c4c0e7ca14610241578063c97f1e7114610261578063cf0d2b4f14610281578063dff23ea3146102a1578063fa17d07d146102c1578063faad381f146102e157600080fd5b8063048a6a5c146100e657806330f7650e1461011c57806349df728c1461013f5780634e6537a0146101615780638e919aa4146101815780638ea46aa2146101a15780639d67ac37146101c1578063a1b12db4146101e157600080fd5b366100e157600080fd5b600080fd5b3480156100f257600080fd5b50600554610106906001600160a01b031681565b6040516101139190610dc9565b60405180910390f35b34801561012857600080fd5b50610131610301565b604051908152602001610113565b34801561014b57600080fd5b5061015f61015a366004610df4565b610326565b005b34801561016d57600080fd5b50600454610106906001600160a01b031681565b34801561018d57600080fd5b5061015f61019c366004610e16565b6104fe565b3480156101ad57600080fd5b5061015f6101bc366004610e2f565b610538565b3480156101cd57600080fd5b5061015f6101dc366004610df4565b6106bf565b3480156101ed57600080fd5b5061015f6101fc366004610e16565b610827565b34801561020d57600080fd5b5061013161021c366004610df4565b610865565b34801561022d57600080fd5b50600054610106906001600160a01b031681565b34801561024d57600080fd5b5061015f61025c366004610e62565b6108bc565b34801561026d57600080fd5b5061015f61027c366004610e62565b6109fd565b34801561028d57600080fd5b5061013161029c366004610df4565b610ad3565b3480156102ad57600080fd5b5061015f6102bc366004610e8c565b610b9d565b3480156102cd57600080fd5b5061015f6102dc366004610e62565b610cea565b3480156102ed57600080fd5b5061015f6102fc366004610e16565b610d3e565b60006001544211156103135750600090565b426001546103219190610ed5565b905090565b6000546001600160a01b031633146103595760405162461bcd60e51b815260040161035090610eec565b60405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff161515600114801561039d57506001600160a01b03811660009081526007602052604090205415155b6103fc5760405162461bcd60e51b815260206004820152602a60248201527f4c6f636b206e6f7420656e61626c6564206f72206e6f20746f6b656e7320746f604482015269103bb4ba34323930bb9760b11b6064820152608401610350565b6001600160a01b038116600090815260086020526040902054421161045f5760405162461bcd60e51b81526020600482015260196024820152782637b1b5903430b9903737ba1032bc3834b932b2103cb2ba1760391b6044820152606401610350565b6001600160a01b038082166000908152600760209081526040808320805490849055600883528184208490556006909252808320805460ff19169055915491516360178c6b60e01b8152909291909116906360178c6b906104c890309086908690600401610f23565b600060405180830381600087803b1580156104e257600080fd5b505af11580156104f6573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146105285760405162461bcd60e51b815260040161035090610eec565b6105328142610f47565b60015550565b6000546001600160a01b031633146105625760405162461bcd60e51b815260040161035090610eec565b6000546001600160a01b03908116908216036105d15760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f74207769746864726177206c6f636b65722064657369676e61746560448201526732103a37b5b2b71760c11b6064820152608401610350565b6040516370a0823160e01b815281906001600160a01b0382169063a9059cbb90859083906370a0823190610609903090600401610dc9565b602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190610f5f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b99190610f78565b50505050565b6000546001600160a01b031633146106e95760405162461bcd60e51b815260040161035090610eec565b600154421161073a5760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b2074696d65206e6f742065787069726564207965742e0000000000006044820152606401610350565b600480546040516370a0823160e01b81526001600160a01b039091169163a9059cbb91849184916370a082319161077391309101610dc9565b602060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b49190610f5f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108239190610f78565b5050565b6000546001600160a01b031633146108515760405162461bcd60e51b815260040161035090610eec565b610862816001546102fc9190610f47565b50565b6001600160a01b03811660009081526008602052604081205442111561088d57506000919050565b6001600160a01b0382166000908152600860205260409020546108b1904290610ed5565b92915050565b919050565b6000546001600160a01b031633146108e65760405162461bcd60e51b815260040161035090610eec565b6001600160a01b03821660009081526006602052604090205460ff1615156001146109665760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792063616c6c206166746572206c6f636b2068617320626565604482015269371031b932b0ba32b21760b11b6064820152608401610350565b6000546040516360178c6b60e01b81526001600160a01b03909116906360178c6b9061099a90859030908690600401610f23565b600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b505050506001600160a01b038216600090815260076020526040812080548392906109f4908490610f47565b90915550505050565b6000546001600160a01b03163314610a275760405162461bcd60e51b815260040161035090610eec565b6001600160a01b03821660009081526008602052604090205481118015610a4d57504281115b610ab75760405162461bcd60e51b815260206004820152603560248201527f4d7573742062652061667465722063757272656e74206c6f636b2074696d652c6044820152741030b732103737ba1034b7103a3432903830b9ba1760591b6064820152608401610350565b6001600160a01b03909116600090815260086020526040902055565b6001600160a01b0381166000908152600760205260408120548103610afa57506000919050565b60008054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6f9190610f9a565b610b7a90600a6110a1565b6001600160a01b0383166000908152600760205260409020546108b191906110b0565b6000546001600160a01b03163314610bc75760405162461bcd60e51b815260040161035090610eec565b6001600160a01b03831660009081526006602052604090205460ff1615610c285760405162461bcd60e51b81526020600482015260156024820152744c6f636b20616c726561647920637265617465642160581b6044820152606401610350565b6000546040516360178c6b60e01b81526001600160a01b03909116906360178c6b90610c5c90869030908790600401610f23565b600060405180830381600087803b158015610c7657600080fd5b505af1158015610c8a573d6000803e3d6000fd5b5050506001600160a01b038416600090815260076020526040902083905550610cb38142610f47565b6001600160a01b039093166000908152600860209081526040808320959095556006905292909220805460ff191660011790555050565b6000546001600160a01b03163314610d145760405162461bcd60e51b815260040161035090610eec565b6001600160a01b03821660009081526008602052604090205461082390839061027c908490610f47565b6000546001600160a01b03163314610d685760405162461bcd60e51b815260040161035090610eec565b60015481118015610d7857504281115b610dc45760405162461bcd60e51b815260206004820181905260248201527f4d7573742062652061667465722063757272656e74206c6f636b2074696d652e6044820152606401610350565b600155565b6001600160a01b0391909116815260200190565b80356001600160a01b03811681146108b757600080fd5b600060208284031215610e0657600080fd5b610e0f82610ddd565b9392505050565b600060208284031215610e2857600080fd5b5035919050565b60008060408385031215610e4257600080fd5b610e4b83610ddd565b9150610e5960208401610ddd565b90509250929050565b60008060408385031215610e7557600080fd5b610e7e83610ddd565b946020939093013593505050565b600080600060608486031215610ea157600080fd5b610eaa84610ddd565b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015610ee757610ee7610ebf565b500390565b6020808252601e908201527f4f6e6c79204e616275746f20636f6e7472616374206d61792063616c6c2e0000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008219821115610f5a57610f5a610ebf565b500190565b600060208284031215610f7157600080fd5b5051919050565b600060208284031215610f8a57600080fd5b81518015158114610e0f57600080fd5b600060208284031215610fac57600080fd5b815160ff81168114610e0f57600080fd5b600181815b80851115610ff8578160001904821115610fde57610fde610ebf565b80851615610feb57918102915b93841c9390800290610fc2565b509250929050565b60008261100f575060016108b1565b8161101c575060006108b1565b8160018114611032576002811461103c57611058565b60019150506108b1565b60ff84111561104d5761104d610ebf565b50506001821b6108b1565b5060208310610133831016604e8410600b841016171561107b575081810a6108b1565b6110858383610fbd565b806000190482111561109957611099610ebf565b029392505050565b6000610e0f60ff841683611000565b6000826110cd57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212205cd1b330430bc95331d0c397d93cb922e36fab3501dfc581f3192652ea19d23e64736f6c634300080d0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204c20b59ad915fcf1d880854d1182a35161b962fbbeda7087666bb0a0c0d3212e64736f6c634300080d0033

Deployed Bytecode

0x608060405260043610620003bf5760003560e01c806360178c6b11620001ef578063b0cdcf05116200010d578063dd62ed3e11620000a8578063dd62ed3e1462000c37578063e4fcfd181462000c81578063eafb5a3c1462000c99578063ee5d9c2d1462000cbe578063eec2744e1462000cd6578063f94aa1b41462000cfb578063faad381f1462000d34578063fdb78c0e1462000d59578063fe575a871462000d7a57600080fd5b8063b0cdcf051462000afc578063b1b08f711462000b21578063b3d514fb1462000b21578063c6a276c21462000b39578063cab5ebea1462000b5e578063cf0d2b4f1462000b83578063cf8477061462000ba8578063d3f6a1571462000c1257600080fd5b80638a8c523c116200018a5780638a8c523c14620009d65780638d8f2adb14620009ee5780638ea46aa21462000a0657806395d89b411462000a2b578063998d5f751462000a43578063a1b12db41462000a68578063a9059cbb1462000a8d578063aa22b1721462000ab2578063ad9fa9f31462000ad757600080fd5b806360178c6b14620008da5780636ebd007814620008ff5780636ff73201146200091757806370a08231146200093c578063715018a614620009615780637ea382c1146200097957806380c581d11462000991578063893d20e814620009b657600080fd5b806330f7650e11620002dd5780634ada218b11620002785780634ada218b146200076a5780634fb2e45d14620007865780634fbee19314620007ab57806350a8e01614620007e857806350f50f621462000809578063529fc81b146200082e578063590ffdce14620008535780635cce86cd14620008785780635f9a9bf914620008b557600080fd5b806330f7650e1462000653578063313ce567146200066b57806332cde664146200068f57806333251a0b14620006b457806334cd826014620006d957806336fddb0414620006fe5780633f3cf56c1462000723578063452ed4f1146200074857600080fd5b80630fa604e4116200035a5780630fa604e4146200054657806318160ddd146200055e5780631dc555b5146200057657806323b872dd146200058f5780632600395714620005b45780632610eaca14620005d957806329dd879814620005fe5780632b28fc7a14620006235780632e8fa821146200063b57600080fd5b806303fd2a4514620003cc5780630445b66714620003fc57806305bbedb61462000423578063069d955f146200044a57806306fdde0314620004a25780630758d92414620004c95780630923160214620004eb578063095ea7b3146200051057600080fd5b36620003c757005b600080fd5b348015620003d957600080fd5b50620003e461dead81565b604051620003f3919062003f01565b60405180910390f35b3480156200040957600080fd5b506200041460165481565b604051908152602001620003f3565b3480156200043057600080fd5b50620004486200044236600462004052565b62000d9f565b005b3480156200045757600080fd5b50600d546200047c9061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff94851681529284166020840152921691810191909152606001620003f3565b348015620004af57600080fd5b50620004ba62000e46565b604051620003f39190620040d8565b348015620004d657600080fd5b50600f54620003e4906001600160a01b031681565b348015620004f857600080fd5b50620004486200050a3660046200410d565b62000ee0565b3480156200051d57600080fd5b50620005356200052f36600462004127565b62000fb4565b6040519015158152602001620003f3565b3480156200055357600080fd5b506200041462000fcd565b3480156200056b57600080fd5b506200041462000ff7565b3480156200058357600080fd5b506200041462f1428081565b3480156200059c57600080fd5b5062000535620005ae36600462004156565b62001010565b348015620005c157600080fd5b5062000448620005d33660046200419c565b6200108d565b348015620005e657600080fd5b5062000448620005f8366004620041bf565b62001175565b3480156200060b57600080fd5b50620004486200061d36600462004285565b620012c3565b3480156200063057600080fd5b50620004146107d081565b3480156200064857600080fd5b506200041460175481565b3480156200066057600080fd5b506200041462001374565b3480156200067857600080fd5b50600b5460405160ff9091168152602001620003f3565b3480156200069c57600080fd5b5062000448620006ae36600462004302565b620013e5565b348015620006c157600080fd5b5062000448620006d33660046200434c565b620014c8565b348015620006e657600080fd5b5062000448620006f83660046200436c565b6200152c565b3480156200070b57600080fd5b50620004486200071d366004620043a8565b620015a3565b3480156200073057600080fd5b5062000448620007423660046200419c565b620015fb565b3480156200075557600080fd5b50601054620003e4906001600160a01b031681565b3480156200077757600080fd5b50601a54620005359060ff1681565b3480156200079357600080fd5b5062000448620007a53660046200434c565b620016eb565b348015620007b857600080fd5b5062000535620007ca3660046200434c565b6001600160a01b031660009081526005602052604090205460ff1690565b348015620007f557600080fd5b50601a546200053590610100900460ff1681565b3480156200081657600080fd5b5062000448620008283660046200410d565b62001820565b3480156200083b57600080fd5b50620004486200084d36600462004431565b62001854565b3480156200086057600080fd5b506200044862000872366004620043a8565b62001f35565b3480156200088557600080fd5b5062000535620008973660046200434c565b6001600160a01b031660009081526006602052604090205460ff1690565b348015620008c257600080fd5b5062000448620008d43660046200419c565b62001f8d565b348015620008e757600080fd5b5062000448620008f936600462004156565b62001fec565b3480156200090c57600080fd5b506200041462002116565b3480156200092457600080fd5b5062000448620009363660046200410d565b6200213b565b3480156200094957600080fd5b50620004146200095b3660046200434c565b620021ad565b3480156200096e57600080fd5b5062000448620021c8565b3480156200098657600080fd5b50620004486200224c565b3480156200099e57600080fd5b5062000448620009b0366004620043a8565b620022db565b348015620009c357600080fd5b506000546001600160a01b0316620003e4565b348015620009e357600080fd5b506200044862002426565b348015620009fb57600080fd5b506200044862002630565b34801562000a1357600080fd5b506200044862000a25366004620044d4565b62002662565b34801562000a3857600080fd5b50620004ba6200271d565b34801562000a5057600080fd5b506200044862000a623660046200410d565b6200272e565b34801562000a7557600080fd5b506200044862000a873660046200410d565b62002782565b34801562000a9a57600080fd5b506200053562000aac36600462004127565b620027e1565b34801562000abf57600080fd5b506200044862000ad136600462004302565b620027fa565b34801562000ae457600080fd5b506200044862000af63660046200410d565b620028a1565b34801562000b0957600080fd5b506200041462000b1b3660046200434c565b620028d5565b34801562000b2e57600080fd5b50620004146109c481565b34801562000b4657600080fd5b506200044862000b583660046200434c565b6200294c565b34801562000b6b57600080fd5b506200044862000b7d36600462004507565b620029b0565b34801562000b9057600080fd5b506200041462000ba23660046200434c565b62002a32565b34801562000bb557600080fd5b50600e5462000be39061ffff80821691620100008104821691600160201b8204811691600160301b90041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001620003f3565b34801562000c1f57600080fd5b506200044862000c31366004620044d4565b62002a65565b34801562000c4457600080fd5b506200041462000c56366004620044d4565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801562000c8e57600080fd5b506200041460145481565b34801562000ca657600080fd5b506200044862000cb83660046200434c565b62002ac0565b34801562000ccb57600080fd5b506200044862002def565b34801562000ce357600080fd5b506200044862000cf5366004620043a8565b62002eb4565b34801562000d0857600080fd5b5060115460125462000d24916001600160a01b03908116911682565b604051620003f392919062004527565b34801562000d4157600080fd5b506200044862000d533660046200410d565b62002f1a565b34801562000d6657600080fd5b506013546200053590610100900460ff1681565b34801562000d8757600080fd5b506200053562000d993660046200434c565b62002f79565b6000546001600160a01b0316331462000dd55760405162461bcd60e51b815260040162000dcc9062004541565b60405180910390fd5b601a546040516302ddf6db60e11b8152620100009091046001600160a01b0316906305bbedb69062000e0e9085908590600401620045b2565b600060405180830381600087803b15801562000e2957600080fd5b505af115801562000e3e573d6000803e3d6000fd5b505050505050565b60606009805462000e5790620045d8565b80601f016020809104026020016040519081016040528092919081815260200182805462000e8590620045d8565b801562000ed65780601f1062000eaa5761010080835404028352916020019162000ed6565b820191906000526020600020905b81548152906001019060200180831162000eb857829003601f168201915b5050505050905090565b6000546001600160a01b0316331462000f0d5760405162461bcd60e51b815260040162000dcc9062004541565b60c881101562000f4b5760405162461bcd60e51b81526020600482015260086024820152672a37b7903637bb9760c11b604482015260640162000dcc565b601a546040516304918b0160e11b815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801562000f9857600080fd5b505af115801562000fad573d6000803e3d6000fd5b5050505050565b600062000fc333848462002ff6565b5060015b92915050565b600b5460009062000fe39060ff16600a62004729565b60195462000ff291906200473a565b905090565b6000600c546000036200100957600080fd5b50600c5490565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191462001078576001600160a01b038416600090815260046020908152604080832033845290915281208054849290620010729084906200475d565b90915550505b62001085848484620030a2565b949350505050565b6000546001600160a01b03163314620010ba5760405162461bcd60e51b815260040162000dcc9062004541565b6064600c54620010cb91906200473a565b8183600c54620010dc919062004777565b620010e891906200473a565b1015620011515760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201526f37b3103a37ba30b61039bab838363c9760811b606482015260840162000dcc565b8082600c5462001162919062004777565b6200116e91906200473a565b6019555050565b6000546001600160a01b03163314620011a25760405162461bcd60e51b815260040162000dcc9062004541565b8051825114620011ed5760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b604482015260640162000dcc565b60005b82518160ff161015620012be57818160ff168151811062001215576200121562004799565b60200260200101516200122833620021ad565b10156200123457600080fd5b620012a833848360ff168151811062001251576200125162004799565b6020908102919091010151600b546200126f9060ff16600a62004729565b858560ff168151811062001287576200128762004799565b60200260200101516200129b919062004777565b60008060006001620034f9565b5080620012b581620047af565b915050620011f0565b505050565b6000546001600160a01b03163314620012f05760405162461bcd60e51b815260040162000dcc9062004541565b601a54604051630109da6960e01b81528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156200135557600080fd5b505af11580156200136a573d6000803e3d6000fd5b5050505050505050565b601b546040805163187bb28760e11b815290516000926001600160a01b0316916330f7650e9160048083019260209291908290030181865afa158015620013bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff29190620047d1565b6000546001600160a01b03163314620014125760405162461bcd60e51b815260040162000dcc9062004541565b6107d08361ffff16111580156200142f57506109c48261ffff1611155b80156200144257506109c48161ffff1611155b6200148a5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba1032bc31b2b2b21036b0bc34b6bab6b99760491b604482015260640162000dcc565b600d805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff000000001916600160201b9190931602919091179055565b6000546001600160a01b03163314620014f55760405162461bcd60e51b815260040162000dcc9062004541565b601a546040516333251a0b60e01b8152620100009091046001600160a01b0316906333251a0b9062000f7d90849060040162003f01565b6000546001600160a01b03163314620015595760405162461bcd60e51b815260040162000dcc9062004541565b8385600c546200156a919062004777565b6200157691906200473a565b601655600c5482906200158b90859062004777565b6200159791906200473a565b60175560145550505050565b6000546001600160a01b03163314620015d05760405162461bcd60e51b815260040162000dcc9062004541565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314620016285760405162461bcd60e51b815260040162000dcc9062004541565b6103e8600c546200163a91906200473a565b8183600c546200164b919062004777565b6200165791906200473a565b1015620016c75760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f766044820152763290181718929037b3103a37ba30b61039bab838363c9760491b606482015260840162000dcc565b8082600c54620016d8919062004777565b620016e491906200473a565b6018555050565b6000546001600160a01b03163314620017185760405162461bcd60e51b815260040162000dcc9062004541565b6001600160a01b038116620017415760405162461bcd60e51b815260040162000dcc90620047eb565b61deac196001600160a01b038216016200176f5760405162461bcd60e51b815260040162000dcc90620047eb565b600080546200178a916001600160a01b039091169062001f35565b6200179781600162001f35565b60008054620017af906001600160a01b0316620021ad565b1115620017d557600054620017d3906001600160a01b0316826200129b82620021ad565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b601b5460405163fa17d07d60e01b81526001600160a01b039091169063fa17d07d9062000f7d903390859060040162004848565b6000546001600160a01b03163314620018815760405162461bcd60e51b815260040162000dcc9062004541565b601b54600160a01b900460ff1615620018c15760405162461bcd60e51b81526020600482015260016024820152603160f81b604482015260640162000dcc565b601a805462010000600160b01b031916620100006001600160a01b03848116820292909217928390556040516301a6952360e41b815292041690631a695230906200191190309060040162003f01565b600060405180830381600087803b1580156200192c57600080fd5b505af19250505080156200193e575060015b50601a60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015620019b657506040513d6000823e601f3d908101601f19168201604052620019b39190810190620048cd565b60015b620019e85760405162461bcd60e51b81526020600482015260016024820152603360f81b604482015260640162000dcc565b8351620019fd90600990602087019062003e4d565b50825162001a1390600a90602086019062003e4d565b506008829055600b805460ff191660ff831690811790915562001a3890600a62004729565b60085462001a47919062004777565b600c5550505050600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001aa2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ac891906200494f565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001b2a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b5091906200494f565b306040518363ffffffff1660e01b815260040162001b7092919062004527565b6020604051808303816000875af115801562001b90573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bb691906200494f565b601080546001600160a01b0319166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600c546103e89062001c0290600462004777565b62001c0e91906200473a565b601855600c5460649062001c2490600162004777565b62001c3091906200473a565b601955601b805460ff60a01b1916600160a01b179055600c54600080546001600160a01b039081168252600160205260408083208490558254905191169260008051602062005ce68339815191529162001c8c91815260200190565b60405180910390a360005b600381101562001d4657600083826003811062001cb85762001cb862004799565b602002015185836003811062001cd25762001cd262004799565b6020020151600c5462001ce6919062004777565b62001cf291906200473a565b60005490915062001d2e906001600160a01b031687846003811062001d1b5762001d1b62004799565b60200201518360008060006001620034f9565b5050808062001d3d906200496f565b91505062001c97565b5060005462001d6a906001600160a01b03163062001d6482620021ad565b620030a2565b506010546040516001600160a01b0390911690309062001d8a9062003edc565b62001d9792919062004527565b604051809103906000f08015801562001db4573d6000803e3d6000fd5b50601b80546001600160a01b0319166001600160a01b03928316179055600f541663f305d719473062001de781620021ad565b601b546040516001600160e01b031960e087901b16815262001e1f93929160009182916001600160a01b03169042906004016200498b565b60606040518083038185885af115801562001e3e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062001e659190620049c6565b5050601b546040516323a466a960e21b815262f1428060048201526001600160a01b039091169150638e919aa490602401600060405180830381600087803b15801562001eb157600080fd5b505af115801562001ec6573d6000803e3d6000fd5b5050601b80546001600160a01b0390811660009081526007602090815260408083208054600160ff199182168117909255865486168552600584528285208054821683179055955490941683526006909152902080549092161790555062001f2f905062002426565b50505050565b6000546001600160a01b0316331462001f625760405162461bcd60e51b815260040162000dcc9062004541565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b600b5462001fa09060ff16600a62004729565b62001fac908362004777565b601b5460405163dff23ea360e01b815233600482015260248101839052604481018490529193506001600160a01b03169063dff23ea39060640162000e0e565b33301480620020055750601b546001600160a01b031633145b620020745760405162461bcd60e51b815260206004820152603860248201527f4f6e6c79207468697320636f6e7472616374206f7220746865204c6f636b65726044820152771031b7b73a3930b1ba1031b0b71031b0b636103a3434b99760411b606482015260840162000dcc565b6001600160a01b038316600090815260016020526040812080548392906200209e9084906200475d565b90915550506001600160a01b03821660009081526001602052604081208054839290620020cd908490620049f5565b92505081905550816001600160a01b0316836001600160a01b031660008051602062005ce6833981519152836040516200210991815260200190565b60405180910390a3505050565b600b546000906200212c9060ff16600a62004729565b60185462000ff291906200473a565b6000546001600160a01b03163314620021685760405162461bcd60e51b815260040162000dcc9062004541565b600f81106200217657600080fd5b601a54604051636ff7320160e01b815260048101839052620100009091046001600160a01b031690636ff732019060240162000f7d565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314620021f55760405162461bcd60e51b815260040162000dcc9062004541565b6000805462002210916001600160a01b039091169062001f35565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314620022795760405162461bcd60e51b815260040162000dcc9062004541565b601b54604051639d67ac3760e01b81526001600160a01b0390911690639d67ac3790620022ab90339060040162003f01565b600060405180830381600087803b158015620022c657600080fd5b505af115801562001f2f573d6000803e3d6000fd5b6000546001600160a01b03163314620023085760405162461bcd60e51b815260040162000dcc9062004541565b80151560000362002366576001600160a01b03808316600090815260026020526040808220805460ff19169055601a5490516380c581d160e01b815262010000909104909216916380c581d19162000e0e9186919060040162004a10565b60035415620023c5576203f480600354426200238391906200475d565b11620023c55760405162461bcd60e51b815260206004820152601060248201526f332044617920636f6f6c646f776e2e2160801b604482015260640162000dcc565b6001600160a01b0380831660009081526002602052604090819020805460ff1916600190811790915542600355601a5491516380c581d160e01b815262010000909204909216916380c581d19162000e0e91869160040162004a10565b5050565b6000546001600160a01b03163314620024535760405162461bcd60e51b815260040162000dcc9062004541565b601a5460ff1615620024a35760405162461bcd60e51b815260206004820152601860248201527754726164696e6720616c726561647920656e61626c65642160401b604482015260640162000dcc565b601a54610100900460ff16620024f75760405162461bcd60e51b81526020600482015260186024820152772634b8bab4b234ba3c9036bab9ba1031329030b23232b21760411b604482015260640162000dcc565b601a546201000090046001600160a01b03166200252857601a805462010000600160b01b0319163062010000021790555b601a54601054600b54604051631b04570d60e21b81526001600160a01b03928316600482015263ffffffff431660248201526001600160401b034216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b158015620025a057600080fd5b505af1925050508015620025b2575060015b50601a805460ff1916600117905560105461271090620025db906001600160a01b0316620021ad565b620025e890600a62004777565b620025f491906200473a565b6016556010546127109062002612906001600160a01b0316620021ad565b6200261f90601962004777565b6200262b91906200473a565b601755565b601b54604051631277dca360e21b81526001600160a01b03909116906349df728c90620022ab90339060040162003f01565b6000546001600160a01b031633146200268f5760405162461bcd60e51b815260040162000dcc9062004541565b306001600160a01b03821603620026e95760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207769746864726177204e616275746f20746f6b656e732e0000604482015260640162000dcc565b601b54604051634752355160e11b81526001600160a01b0390911690638ea46aa29062000e0e903390859060040162004527565b6060600a805462000e5790620045d8565b600b54620027419060ff16600a62004729565b6200274d908262004777565b601b5460405163626073e560e11b81529192506001600160a01b03169063c4c0e7ca9062000f7d903390859060040162004848565b6000546001600160a01b03163314620027af5760405162461bcd60e51b815260040162000dcc9062004541565b601b5460405163286c4b6d60e21b8152600481018390526001600160a01b039091169063a1b12db49060240162000f7d565b6000620027f0338484620030a2565b5060019392505050565b6000546001600160a01b03163314620028275760405162461bcd60e51b815260040162000dcc9062004541565b600e805461ffff838116600160201b0265ffff0000000019868316620100000263ffffffff19909416928816929092179290921716179055806200286c838562004a2b565b62002878919062004a2b565b600e805461ffff92909216600160301b0267ffff00000000000019909216919091179055505050565b601b5460405163c97f1e7160e01b81526001600160a01b039091169063c97f1e719062000f7d903390859060040162004848565b601b5460405163b0cdcf0560e01b81526000916001600160a01b03169063b0cdcf05906200290890859060040162003f01565b602060405180830381865afa15801562002926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc79190620047d1565b6000546001600160a01b03163314620029795760405162461bcd60e51b815260040162000dcc9062004541565b601a546040516363513b6160e11b8152620100009091046001600160a01b03169063c6a276c29062000f7d90849060040162003f01565b6000546001600160a01b03163314620029dd5760405162461bcd60e51b815260040162000dcc9062004541565b601380548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579062002a2790831515815260200190565b60405180910390a150565b601b5460405163cf0d2b4f60e01b81526000916001600160a01b03169063cf0d2b4f906200290890859060040162003f01565b6000546001600160a01b0316331462002a925760405162461bcd60e51b815260040162000dcc9062004541565b601180546001600160a01b039384166001600160a01b03199182161790915560128054929093169116179055565b6000546001600160a01b0316331462002aed5760405162461bcd60e51b815260040162000dcc9062004541565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b33573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b5991906200494f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ba7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bcd91906200494f565b6040518363ffffffff1660e01b815260040162002bec92919062004527565b602060405180830381865afa15801562002c0a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c3091906200494f565b90506001600160a01b03811662002da557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002c80573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ca691906200494f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002cf4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d1a91906200494f565b6040518363ffffffff1660e01b815260040162002d3992919062004527565b6020604051808303816000875af115801562002d59573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d7f91906200494f565b601080546001600160a01b0319166001600160a01b039290921691909117905562002dc1565b601080546001600160a01b0319166001600160a01b0383161790555b600f80546001600160a01b0319166001600160a01b038416908117909155620012be90309060001962002ff6565b6000546001600160a01b0316331462002e1c5760405162461bcd60e51b815260040162000dcc9062004541565b601a54610100900460ff161562002e765760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e00000000604482015260640162000dcc565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801562002eb1573d6000803e3d6000fd5b50565b6000546001600160a01b0316331462002ee15760405162461bcd60e51b815260040162000dcc9062004541565b601a546040516377613a2760e11b8152620100009091046001600160a01b03169063eec2744e9062000e0e908590859060040162004a10565b6000546001600160a01b0316331462002f475760405162461bcd60e51b815260040162000dcc9062004541565b601b5460405163faad381f60e01b8152600481018390526001600160a01b039091169063faad381f9060240162000f7d565b601a5460405163fe575a8760e01b81526000916201000090046001600160a01b03169063fe575a879062002fb290859060040162003f01565b602060405180830381865afa15801562002fd0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fc7919062004a54565b6001600160a01b0383166200301f5760405162461bcd60e51b815260040162000dcc9062004a74565b6001600160a01b038216620030485760405162461bcd60e51b815260040162000dcc9062004a74565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910162002109565b60006001600160a01b0384166200310a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840162000dcc565b6001600160a01b0383166200316e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840162000dcc565b60008211620031d25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840162000dcc565b6001600160a01b0384166000908152600260205260408120548190819060ff161562003202576001925062003232565b6001600160a01b03861660009081526002602052604090205460ff16156200322e576001915062003232565b5060015b6200323e878762003710565b156200341357601a5460ff16620032935760405162461bcd60e51b815260206004820152601860248201527754726164696e67206e6f742079657420656e61626c65642160401b604482015260640162000dcc565b82806200329d5750815b1562003351576001600160a01b03871660009081526006602052604090205460ff16158015620032e657506001600160a01b03861660009081526006602052604090205460ff16155b156200335157601854851115620033515760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840162000dcc565b600f546001600160a01b038781169116148015906200336e575081155b1562003413576001600160a01b03861660009081526006602052604090205460ff16620034135760195485620033a488620021ad565b620033b09190620049f5565b1115620034135760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b606482015260840162000dcc565b6001600160a01b03871660009081526005602052604090205460019060ff16806200345657506001600160a01b03871660009081526005602052604090205460ff165b1562003460575060005b8215620034dc5760135460ff16158015620034825750601354610100900460ff165b15620034dc57426014546015546200349b9190620049f5565b1015620034dc576000620034af30620021ad565b90506016548110620034da576017548110620034ca57506017545b620034d581620037ec565b426015555b505b620034ed88888884888888620034f9565b98975050505050505050565b601a54600090610100900460ff16620035955762003518888862003c47565b601a54610100900460ff1615801562003538575062003538888862003710565b15620035955760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840162000dcc565b620035a1888862003710565b156200364157601a5460405163ecd07a5360e01b81526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af192505050801562003628575060408051601f3d908101601f19168201909252620036259181019062004a54565b60015b6200363257600080fd5b9050806200363f57600080fd5b505b6001600160a01b038816600090815260016020526040812080548892906200366b9084906200475d565b9091555060009050856200368057866200368e565b6200368e8986868a62003d7c565b6001600160a01b038916600090815260016020526040812080549293508392909190620036bd908490620049f5565b92505081905550876001600160a01b0316896001600160a01b031660008051602062005ce683398151915283604051620036f991815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b038481169116148015906200373e57506000546001600160a01b03838116911614155b80156200375657506000546001600160a01b03163214155b80156200377c57506001600160a01b03821660009081526007602052604090205460ff16155b8015620037a257506001600160a01b03831660009081526007602052604090205460ff16155b8015620037ba57506001600160a01b03821661dead14155b8015620037cf57506001600160a01b03821615155b8015620037e557506001600160a01b0383163014155b9392505050565b6013805460ff1916600117905560408051608081018252600e5461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b9004909116606082018190526000036200384b575062003c3a565b306000908152600460209081526040808320600f546001600160a01b0316845290915290205460001914620038a557306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685620038c8919062004777565b620038d491906200473a565b620038e091906200473a565b90506000620038f082856200475d565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106200392d576200392d62004799565b6001600160a01b03928316602091820292909201810191909152600f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801562003987573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039ad91906200494f565b81600181518110620039c357620039c362004799565b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b815291169063791ac9479062003a0b90859060009086903090429060040162004aa1565b600060405180830381600087803b15801562003a2657600080fd5b505af115801562003a3b573d6000803e3d6000fd5b504792506000915084905062003a52868462004777565b62003a5e91906200473a565b9050841562003b2c57600f54601b5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859262003aa99230928c926000928392169042906004016200498b565b60606040518083038185885af115801562003ac8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003aef9190620049c6565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b62003b3881836200475d565b915085600001518660600181815162003b52919062004adf565b61ffff90811690915260608801516040890151600093509082169162003b7a91168562004777565b62003b8691906200473a565b9050600062003b9682856200475d565b602089015190915061ffff161562003be5576011546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801562003be3573d6000803e3d6000fd5b505b604088015161ffff161562003c31576012546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801562003c2f573d6000803e3d6000fd5b505b50505050505050505b506013805460ff19169055565b601a54610100900460ff161562003cad5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840162000dcc565b62003cb9828262003710565b15801562003cd457506010546001600160a01b038281169116145b1562002422576001600160a01b038083166000908152600760205260409020805460ff19166001179055601a805461ff00191661010017908190556201000090041662003d3557601a805462010000600160b01b0319163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b600080841562003d945750600d5461ffff1662003dbf565b831562003daf5750600d5462010000900461ffff1662003dbf565b50600d54600160201b900461ffff165b600061271062003dd0838662004777565b62003ddc91906200473a565b3060009081526001602052604081208054929350839290919062003e02908490620049f5565b909155505060405181815230906001600160a01b0389169060008051602062005ce68339815191529060200160405180910390a362003e4281856200475d565b979650505050505050565b82805462003e5b90620045d8565b90600052602060002090601f01602090048101928262003e7f576000855562003eca565b82601f1062003e9a57805160ff191683800117855562003eca565b8280016001018555821562003eca579182015b8281111562003eca57825182559160200191906001019062003ead565b5062003ed892915062003eea565b5090565b6111e08062004b0683390190565b5b8082111562003ed8576000815560010162003eeb565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171562003f505762003f5062003f15565b60405290565b604051601f8201601f191681016001600160401b038111828210171562003f815762003f8162003f15565b604052919050565b60006001600160401b0382111562003fa55762003fa562003f15565b5060051b60200190565b6001600160a01b038116811462002eb157600080fd5b600082601f83011262003fd757600080fd5b8135602062003ff062003fea8362003f89565b62003f56565b82815260059290921b840181019181810190868411156200401057600080fd5b8286015b84811015620040385780356200402a8162003faf565b835291830191830162004014565b509695505050505050565b801515811462002eb157600080fd5b600080604083850312156200406657600080fd5b82356001600160401b038111156200407d57600080fd5b6200408b8582860162003fc5565b92505060208301356200409e8162004043565b809150509250929050565b60005b83811015620040c6578181015183820152602001620040ac565b8381111562001f2f5750506000910152565b6020815260008251806020840152620040f9816040850160208701620040a9565b601f01601f19169190910160400192915050565b6000602082840312156200412057600080fd5b5035919050565b600080604083850312156200413b57600080fd5b8235620041488162003faf565b946020939093013593505050565b6000806000606084860312156200416c57600080fd5b8335620041798162003faf565b925060208401356200418b8162003faf565b929592945050506040919091013590565b60008060408385031215620041b057600080fd5b50508035926020909101359150565b60008060408385031215620041d357600080fd5b82356001600160401b0380821115620041eb57600080fd5b620041f98683870162003fc5565b93506020915081850135818111156200421157600080fd5b85019050601f810186136200422557600080fd5b80356200423662003fea8262003f89565b81815260059190911b820183019083810190888311156200425657600080fd5b928401925b8284101562004276578335825292840192908401906200425b565b80955050505050509250929050565b600080600080608085870312156200429c57600080fd5b8435620042a98162004043565b93506020850135620042bb8162004043565b92506040850135620042cd8162004043565b91506060850135620042df8162004043565b939692955090935050565b803561ffff81168114620042fd57600080fd5b919050565b6000806000606084860312156200431857600080fd5b6200432384620042ea565b92506200433360208501620042ea565b91506200434360408501620042ea565b90509250925092565b6000602082840312156200435f57600080fd5b8135620037e58162003faf565b600080600080600060a086880312156200438557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215620043bc57600080fd5b8235620043c98162003faf565b915060208301356200409e8162004043565b600082601f830112620043ed57600080fd5b620043f762003f2b565b8060608401858111156200440a57600080fd5b845b81811015620044265780358452602093840193016200440c565b509095945050505050565b60008060008061014085870312156200444957600080fd5b85601f8601126200445957600080fd5b6200446362003f2b565b8060608701888111156200447657600080fd5b875b818110156200449d5780356200448e8162003faf565b84526020938401930162004478565b50819650620044ad8982620043db565b9550505050620044c18660c08701620043db565b9150610120850135620042df8162003faf565b60008060408385031215620044e857600080fd5b8235620044f58162003faf565b915060208301356200409e8162003faf565b6000602082840312156200451a57600080fd5b8135620037e58162004043565b6001600160a01b0392831681529116602082015260400190565b60208082526011908201527021b0b63632b9101e979e9037bbb732b91760791b604082015260600190565b600081518084526020808501945080840160005b83811015620045a75781516001600160a01b03168752958201959082019060010162004580565b509495945050505050565b604081526000620045c760408301856200456c565b905082151560208301529392505050565b600181811c90821680620045ed57607f821691505b6020821081036200460e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181600019825b808611156200466c5782820483111562004650576200465062004614565b808616156200465e57928202925b94851c949180029162004632565b50509250929050565b600082620046865750600162000fc7565b81620046955750600062000fc7565b8160018114620046ae5760028114620046b957620046d9565b600191505062000fc7565b60ff841115620046cd57620046cd62004614565b50506001821b62000fc7565b5060208310610133831016604e8410600b8410161715620046fe575081810a62000fc7565b6200470a83836200462a565b806000190482111562004721576200472162004614565b029392505050565b6000620037e560ff84168362004675565b6000826200475857634e487b7160e01b600052601260045260246000fd5b500490565b60008282101562004772576200477262004614565b500390565b600081600019048311821515161562004794576200479462004614565b500290565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103620047c857620047c862004614565b60010192915050565b600060208284031215620047e457600080fd5b5051919050565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b6001600160a01b03929092168252602082015260400190565b600082601f8301126200487357600080fd5b81516001600160401b038111156200488f576200488f62003f15565b620048a4601f8201601f191660200162003f56565b818152846020838601011115620048ba57600080fd5b62001085826020830160208701620040a9565b60008060008060808587031215620048e457600080fd5b84516001600160401b0380821115620048fc57600080fd5b6200490a8883890162004861565b955060208701519150808211156200492157600080fd5b50620049308782880162004861565b93505060408501519150606085015160ff81168114620042df57600080fd5b6000602082840312156200496257600080fd5b8151620037e58162003faf565b60006001820162004984576200498462004614565b5060010190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215620049dc57600080fd5b8351925060208401519150604084015190509250925092565b6000821982111562004a0b5762004a0b62004614565b500190565b6001600160a01b039290921682521515602082015260400190565b600061ffff80831681851680830382111562004a4b5762004a4b62004614565b01949350505050565b60006020828403121562004a6757600080fd5b8151620037e58162004043565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b85815284602082015260a06040820152600062004ac260a08301866200456c565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff8381169083168181101562004afd5762004afd62004614565b03939250505056fe608060405234801561001057600080fd5b506040516111e03803806111e083398101604081905261002f91610096565b600380546001600160a01b039384166001600160a01b0319918216811790925560048054821690921790915560058054929093169181168217909255600080549092161790556100c9565b80516001600160a01b038116811461009157600080fd5b919050565b600080604083850312156100a957600080fd5b6100b28361007a565b91506100c06020840161007a565b90509250929050565b611108806100d86000396000f3fe6080604052600436106100d75760003560e01c8063b0cdcf051161007a578063b0cdcf0514610201578063c3dbc67214610221578063c4c0e7ca14610241578063c97f1e7114610261578063cf0d2b4f14610281578063dff23ea3146102a1578063fa17d07d146102c1578063faad381f146102e157600080fd5b8063048a6a5c146100e657806330f7650e1461011c57806349df728c1461013f5780634e6537a0146101615780638e919aa4146101815780638ea46aa2146101a15780639d67ac37146101c1578063a1b12db4146101e157600080fd5b366100e157600080fd5b600080fd5b3480156100f257600080fd5b50600554610106906001600160a01b031681565b6040516101139190610dc9565b60405180910390f35b34801561012857600080fd5b50610131610301565b604051908152602001610113565b34801561014b57600080fd5b5061015f61015a366004610df4565b610326565b005b34801561016d57600080fd5b50600454610106906001600160a01b031681565b34801561018d57600080fd5b5061015f61019c366004610e16565b6104fe565b3480156101ad57600080fd5b5061015f6101bc366004610e2f565b610538565b3480156101cd57600080fd5b5061015f6101dc366004610df4565b6106bf565b3480156101ed57600080fd5b5061015f6101fc366004610e16565b610827565b34801561020d57600080fd5b5061013161021c366004610df4565b610865565b34801561022d57600080fd5b50600054610106906001600160a01b031681565b34801561024d57600080fd5b5061015f61025c366004610e62565b6108bc565b34801561026d57600080fd5b5061015f61027c366004610e62565b6109fd565b34801561028d57600080fd5b5061013161029c366004610df4565b610ad3565b3480156102ad57600080fd5b5061015f6102bc366004610e8c565b610b9d565b3480156102cd57600080fd5b5061015f6102dc366004610e62565b610cea565b3480156102ed57600080fd5b5061015f6102fc366004610e16565b610d3e565b60006001544211156103135750600090565b426001546103219190610ed5565b905090565b6000546001600160a01b031633146103595760405162461bcd60e51b815260040161035090610eec565b60405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff161515600114801561039d57506001600160a01b03811660009081526007602052604090205415155b6103fc5760405162461bcd60e51b815260206004820152602a60248201527f4c6f636b206e6f7420656e61626c6564206f72206e6f20746f6b656e7320746f604482015269103bb4ba34323930bb9760b11b6064820152608401610350565b6001600160a01b038116600090815260086020526040902054421161045f5760405162461bcd60e51b81526020600482015260196024820152782637b1b5903430b9903737ba1032bc3834b932b2103cb2ba1760391b6044820152606401610350565b6001600160a01b038082166000908152600760209081526040808320805490849055600883528184208490556006909252808320805460ff19169055915491516360178c6b60e01b8152909291909116906360178c6b906104c890309086908690600401610f23565b600060405180830381600087803b1580156104e257600080fd5b505af11580156104f6573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146105285760405162461bcd60e51b815260040161035090610eec565b6105328142610f47565b60015550565b6000546001600160a01b031633146105625760405162461bcd60e51b815260040161035090610eec565b6000546001600160a01b03908116908216036105d15760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f74207769746864726177206c6f636b65722064657369676e61746560448201526732103a37b5b2b71760c11b6064820152608401610350565b6040516370a0823160e01b815281906001600160a01b0382169063a9059cbb90859083906370a0823190610609903090600401610dc9565b602060405180830381865afa158015610626573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064a9190610f5f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b99190610f78565b50505050565b6000546001600160a01b031633146106e95760405162461bcd60e51b815260040161035090610eec565b600154421161073a5760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b2074696d65206e6f742065787069726564207965742e0000000000006044820152606401610350565b600480546040516370a0823160e01b81526001600160a01b039091169163a9059cbb91849184916370a082319161077391309101610dc9565b602060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b49190610f5f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156107ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108239190610f78565b5050565b6000546001600160a01b031633146108515760405162461bcd60e51b815260040161035090610eec565b610862816001546102fc9190610f47565b50565b6001600160a01b03811660009081526008602052604081205442111561088d57506000919050565b6001600160a01b0382166000908152600860205260409020546108b1904290610ed5565b92915050565b919050565b6000546001600160a01b031633146108e65760405162461bcd60e51b815260040161035090610eec565b6001600160a01b03821660009081526006602052604090205460ff1615156001146109665760405162461bcd60e51b815260206004820152602a60248201527f43616e206f6e6c792063616c6c206166746572206c6f636b2068617320626565604482015269371031b932b0ba32b21760b11b6064820152608401610350565b6000546040516360178c6b60e01b81526001600160a01b03909116906360178c6b9061099a90859030908690600401610f23565b600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b505050506001600160a01b038216600090815260076020526040812080548392906109f4908490610f47565b90915550505050565b6000546001600160a01b03163314610a275760405162461bcd60e51b815260040161035090610eec565b6001600160a01b03821660009081526008602052604090205481118015610a4d57504281115b610ab75760405162461bcd60e51b815260206004820152603560248201527f4d7573742062652061667465722063757272656e74206c6f636b2074696d652c6044820152741030b732103737ba1034b7103a3432903830b9ba1760591b6064820152608401610350565b6001600160a01b03909116600090815260086020526040902055565b6001600160a01b0381166000908152600760205260408120548103610afa57506000919050565b60008054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6f9190610f9a565b610b7a90600a6110a1565b6001600160a01b0383166000908152600760205260409020546108b191906110b0565b6000546001600160a01b03163314610bc75760405162461bcd60e51b815260040161035090610eec565b6001600160a01b03831660009081526006602052604090205460ff1615610c285760405162461bcd60e51b81526020600482015260156024820152744c6f636b20616c726561647920637265617465642160581b6044820152606401610350565b6000546040516360178c6b60e01b81526001600160a01b03909116906360178c6b90610c5c90869030908790600401610f23565b600060405180830381600087803b158015610c7657600080fd5b505af1158015610c8a573d6000803e3d6000fd5b5050506001600160a01b038416600090815260076020526040902083905550610cb38142610f47565b6001600160a01b039093166000908152600860209081526040808320959095556006905292909220805460ff191660011790555050565b6000546001600160a01b03163314610d145760405162461bcd60e51b815260040161035090610eec565b6001600160a01b03821660009081526008602052604090205461082390839061027c908490610f47565b6000546001600160a01b03163314610d685760405162461bcd60e51b815260040161035090610eec565b60015481118015610d7857504281115b610dc45760405162461bcd60e51b815260206004820181905260248201527f4d7573742062652061667465722063757272656e74206c6f636b2074696d652e6044820152606401610350565b600155565b6001600160a01b0391909116815260200190565b80356001600160a01b03811681146108b757600080fd5b600060208284031215610e0657600080fd5b610e0f82610ddd565b9392505050565b600060208284031215610e2857600080fd5b5035919050565b60008060408385031215610e4257600080fd5b610e4b83610ddd565b9150610e5960208401610ddd565b90509250929050565b60008060408385031215610e7557600080fd5b610e7e83610ddd565b946020939093013593505050565b600080600060608486031215610ea157600080fd5b610eaa84610ddd565b95602085013595506040909401359392505050565b634e487b7160e01b600052601160045260246000fd5b600082821015610ee757610ee7610ebf565b500390565b6020808252601e908201527f4f6e6c79204e616275746f20636f6e7472616374206d61792063616c6c2e0000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008219821115610f5a57610f5a610ebf565b500190565b600060208284031215610f7157600080fd5b5051919050565b600060208284031215610f8a57600080fd5b81518015158114610e0f57600080fd5b600060208284031215610fac57600080fd5b815160ff81168114610e0f57600080fd5b600181815b80851115610ff8578160001904821115610fde57610fde610ebf565b80851615610feb57918102915b93841c9390800290610fc2565b509250929050565b60008261100f575060016108b1565b8161101c575060006108b1565b8160018114611032576002811461103c57611058565b60019150506108b1565b60ff84111561104d5761104d610ebf565b50506001821b6108b1565b5060208310610133831016604e8410600b841016171561107b575081810a6108b1565b6110858383610fbd565b806000190482111561109957611099610ebf565b029392505050565b6000610e0f60ff841683611000565b6000826110cd57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212205cd1b330430bc95331d0c397d93cb922e36fab3501dfc581f3192652ea19d23e64736f6c634300080d0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204c20b59ad915fcf1d880854d1182a35161b962fbbeda7087666bb0a0c0d3212e64736f6c634300080d0033

Deployed Bytecode Sourcemap

9269:24448:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10724:73;;;;;;;;;;;;10755:42;10724:73;;;;;;;;;:::i;:::-;;;;;;;;11276:28;;;;;;;;;;;;;;;;;;;368:25:1;;;356:2;341:18;11276:28:0;222:177:1;19831:172:0;;;;;;;;;;-1:-1:-1;19831:172:0;;;;;:::i;:::-;;:::i;:::-;;10190:116;;;;;;;;;;-1:-1:-1;10190:116:0;;;;;;;;;;;;;;;-1:-1:-1;;;10190:116:0;;;;;;;;;;3251:6:1;3284:15;;;3266:34;;3336:15;;;3331:2;3316:18;;3309:43;3388:15;;3368:18;;;3361:43;;;;3229:2;3214:18;10190:116:0;3045:365:1;17213:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10663:26::-;;;;;;;;;;-1:-1:-1;10663:26:0;;;;-1:-1:-1;;;;;10663:26:0;;;20589:150;;;;;;;;;;-1:-1:-1;20589:150:0;;;;;:::i;:::-;;:::i;17823:159::-;;;;;;;;;;-1:-1:-1;17823:159:0;;;;;:::i;:::-;;:::i;:::-;;;4961:14:1;;4954:22;4936:41;;4924:2;4909:18;17823:159:0;4796:187:1;23044:112:0;;;;;;;;;;;;;:::i;16916:115::-;;;;;;;;;;;;;:::i;11555:50::-;;;;;;;;;;;;11597:8;11555:50;;18308:306;;;;;;;;;;-1:-1:-1;18308:306:0;;;;;:::i;:::-;;:::i;22097:264::-;;;;;;;;;;-1:-1:-1;22097:264:0;;;;;:::i;:::-;;:::i;29185:416::-;;;;;;;;;;-1:-1:-1;29185:416:0;;;;;:::i;:::-;;:::i;20386:195::-;;;;;;;;;;-1:-1:-1;20386:195:0;;;;;:::i;:::-;;:::i;10460:42::-;;;;;;;;;;;;10498:4;10460:42;;11311:25;;;;;;;;;;;;;;;;31934:124;;;;;;;;;;;;;:::i;17037:80::-;;;;;;;;;;-1:-1:-1;17105:9:0;;17037:80;;17105:9;;;;7639:36:1;;7627:2;7612:18;17037:80:0;7497:184:1;20898:397:0;;;;;;;;;;-1:-1:-1;20898:397:0;;;;;:::i;:::-;;:::i;20270:108::-;;;;;;;;;;-1:-1:-1;20270:108:0;;;;;:::i;:::-;;:::i;23164:338::-;;;;;;;;;;-1:-1:-1;23164:338:0;;;;;:::i;:::-;;:::i;22369:140::-;;;;;;;;;;-1:-1:-1;22369:140:0;;;;;:::i;:::-;;:::i;21820:269::-;;;;;;;;;;-1:-1:-1;21820:269:0;;;;;:::i;:::-;;:::i;10696:21::-;;;;;;;;;;-1:-1:-1;10696:21:0;;;;-1:-1:-1;;;;;10696:21:0;;;11423:34;;;;;;;;;;-1:-1:-1;11423:34:0;;;;;;;;15739:623;;;;;;;;;;-1:-1:-1;15739:623:0;;;;;:::i;:::-;;:::i;22655:125::-;;;;;;;;;;-1:-1:-1;22655:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;22744:28:0;22720:4;22744:28;;;:19;:28;;;;;;;;;22655:125;11464:36;;;;;;;;;;-1:-1:-1;11464:36:0;;;;;;;;;;;33476:143;;;;;;;;;;-1:-1:-1;33476:143:0;;;;;:::i;:::-;;:::i;13246:1941::-;;;;;;;;;;-1:-1:-1;13246:1941:0;;;;;:::i;:::-;;:::i;22788:134::-;;;;;;;;;;-1:-1:-1;22788:134:0;;;;;:::i;:::-;;:::i;22517:130::-;;;;;;;;;;-1:-1:-1;22517:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;22609:30:0;22585:4;22609:30;;;:21;:30;;;;;;;;;22517:130;32677:187;;;;;;;;;;-1:-1:-1;32677:187:0;;;;;:::i;:::-;;:::i;31133:328::-;;;;;;;;;;-1:-1:-1;31133:328:0;;;;;:::i;:::-;;:::i;22930:106::-;;;;;;;;;;;;;:::i;20747:143::-;;;;;;;;;;-1:-1:-1;20747:143:0;;;;;:::i;:::-;;:::i;17525:117::-;;;;;;;;;;-1:-1:-1;17525:117:0;;;;;:::i;:::-;;:::i;16370:193::-;;;;;;;;;;;;;:::i;32334:103::-;;;;;;;;;;;;;:::i;19170:500::-;;;;;;;;;;-1:-1:-1;19170:500:0;;;;;:::i;:::-;;:::i;17299:79::-;;;;;;;;;;-1:-1:-1;17351:7:0;17369:6;-1:-1:-1;;;;;17369:6:0;17299:79;;28443:544;;;;;;;;;;;;;:::i;33627:87::-;;;;;;;;;;;;;:::i;31469:225::-;;;;;;;;;;-1:-1:-1;31469:225:0;;;;;:::i;:::-;;:::i;17123:84::-;;;;;;;;;;;;;:::i;32872:155::-;;;;;;;;;;-1:-1:-1;32872:155:0;;;;;:::i;:::-;;:::i;32191:135::-;;;;;;;;;;-1:-1:-1;32191:135:0;;;;;:::i;:::-;;:::i;17650:165::-;;;;;;;;;;-1:-1:-1;17650:165:0;;;;;:::i;:::-;;:::i;21303:288::-;;;;;;;;;;-1:-1:-1;21303:288:0;;;;;:::i;:::-;;:::i;33343:125::-;;;;;;;;;;-1:-1:-1;33343:125:0;;;;;:::i;:::-;;:::i;33035:151::-;;;;;;;;;;-1:-1:-1;33035:151:0;;;;;:::i;:::-;;:::i;10559:47::-;;;;;;;;;;;;10602:4;10559:47;;20011:118;;;;;;;;;;-1:-1:-1;20011:118:0;;;;;:::i;:::-;;:::i;23510:164::-;;;;;;;;;;-1:-1:-1;23510:164:0;;;;;:::i;:::-;;:::i;33194:141::-;;;;;;;;;;-1:-1:-1;33194:141:0;;;;;:::i;:::-;;:::i;10315:136::-;;;;;;;;;;-1:-1:-1;10315:136:0;;;;;;;;;;;;;;;-1:-1:-1;;;10315:136:0;;;;;-1:-1:-1;;;10315:136:0;;;;;;;;;11674:6:1;11707:15;;;11689:34;;11759:15;;;11754:2;11739:18;;11732:43;11811:15;;;11791:18;;;11784:43;;;;11863:15;;;11858:2;11843:18;;11836:43;11651:3;11636:19;10315:136:0;11441:444:1;21599:213:0;;;;;;;;;;-1:-1:-1;21599:213:0;;;;;:::i;:::-;;:::i;17384:133::-;;;;;;;;;;-1:-1:-1;17384:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17486:19:0;;;17468:7;17486:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17384:133;11194:44;;;;;;;;;;;;;;;;18622:540;;;;;;;;;;-1:-1:-1;18622:540:0;;;;;:::i;:::-;;:::i;28995:182::-;;;;;;;;;;;;;:::i;19678:145::-;;;;;;;;;;-1:-1:-1;19678:145:0;;;;;:::i;:::-;;:::i;10914:203::-;;;;;;;;;;-1:-1:-1;10914:203:0;;;;;;-1:-1:-1;;;;;10914:203:0;;;;;;;;;;;;;;;:::i;32066:117::-;;;;;;;;;;-1:-1:-1;32066:117:0;;;;;:::i;:::-;;:::i;11148:39::-;;;;;;;;;;-1:-1:-1;11148:39:0;;;;;;;;;;;20137:125;;;;;;;;;;-1:-1:-1;20137:125:0;;;;;:::i;:::-;;:::i;19831:172::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;;;;;;;;;19939:9:::1;::::0;:56:::1;::::0;-1:-1:-1;;;19939:56:0;;:9;;;::::1;-1:-1:-1::0;;;;;19939:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;19977:8;;19987:7;;19939:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19831:172:::0;;:::o;17213:80::-;17261:13;17285:5;17278:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17213:80;:::o;20589:150::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;20673:3:::1;20666;:10;;20658:31;;;::::0;-1:-1:-1;;;20658:31:0;;14386:2:1;20658:31:0::1;::::0;::::1;14368:21:1::0;14425:1;14405:18;;;14398:29;-1:-1:-1;;;14443:18:1;;;14436:38;14491:18;;20658:31:0::1;14184:331:1::0;20658:31:0::1;20700:9;::::0;:31:::1;::::0;-1:-1:-1;;;20700:31:0;;::::1;::::0;::::1;368:25:1::0;;;20700:9:0;;;::::1;-1:-1:-1::0;;;;;20700:9:0::1;::::0;:26:::1;::::0;341:18:1;;20700:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20589:150:::0;:::o;17823:159::-;17898:4;17915:37;17924:10;17936:7;17945:6;17915:8;:37::i;:::-;-1:-1:-1;17970:4:0;17823:159;;;;;:::o;23044:112::-;23138:9;;23089:7;;23134:13;;23138:9;;23134:2;:13;:::i;:::-;23116:14;;:32;;;;:::i;:::-;23109:39;;23044:112;:::o;16916:115::-;16971:7;16986;;16997:1;16986:12;16982:31;;17002:8;;;16982:31;-1:-1:-1;17021:7:0;;;16916:115::o;18308:306::-;-1:-1:-1;;;;;18429:19:0;;18408:4;18429:19;;;:11;:19;;;;;;;;18449:10;18429:31;;;;;;;;-1:-1:-1;;18429:52:0;18425:126;;-1:-1:-1;;;;;18498:19:0;;;;;;:11;:19;;;;;;;;18518:10;18498:31;;;;;;;:41;;18533:6;;18498:19;:41;;18533:6;;18498:41;:::i;:::-;;;;-1:-1:-1;;18425:126:0;18570:36;18580:6;18588:9;18599:6;18570:9;:36::i;:::-;18563:43;18308:306;-1:-1:-1;;;;18308:306:0:o;22097:264::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;22239:3:::1;22229:7;;:13;;;;:::i;:::-;22217:7;22206;22196;;:17;;;;:::i;:::-;22195:29;;;;:::i;:::-;:48;;22187:109;;;::::0;-1:-1:-1;;;22187:109:0;;16785:2:1;22187:109:0::1;::::0;::::1;16767:21:1::0;16824:2;16804:18;;;16797:30;16863:34;16843:18;;;16836:62;-1:-1:-1;;;16914:18:1;;;16907:46;16970:19;;22187:109:0::1;16583:412:1::0;22187:109:0::1;22346:7;22335;22325;;:17;;;;:::i;:::-;22324:29;;;;:::i;:::-;22307:14;:46:::0;-1:-1:-1;;22097:264:0:o;29185:416::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;29318:7:::1;:14;29299:8;:15;:33;29291:67;;;::::0;-1:-1:-1;;;29291:67:0;;17202:2:1;29291:67:0::1;::::0;::::1;17184:21:1::0;17241:2;17221:18;;;17214:30;-1:-1:-1;;;17260:18:1;;;17253:51;17321:18;;29291:67:0::1;17000:345:1::0;29291:67:0::1;29374:7;29369:225;29391:8;:15;29387:1;:19;;;29369:225;;;29461:7;29469:1;29461:10;;;;;;;;;;:::i;:::-;;;;;;;29436:21;29446:10;29436:9;:21::i;:::-;:35;;29428:44;;;::::0;::::1;;29487:95;29505:10;29517:8;29526:1;29517:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;29545:9:::1;::::0;29541:13:::1;::::0;29545:9:::1;;29541:2;:13;:::i;:::-;29530:7;29538:1;29530:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;29556:5;29563::::0;29570::::1;29577:4;29487:17;:95::i;:::-;-1:-1:-1::0;29408:3:0;::::1;::::0;::::1;:::i;:::-;;;;29369:225;;;;29185:416:::0;;:::o;20386:195::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;20508:9:::1;::::0;:65:::1;::::0;-1:-1:-1;;;20508:65:0;;17894:14:1;;17887:22;20508:65:0::1;::::0;::::1;17869:41:1::0;17953:14;;17946:22;17926:18;;;17919:50;18012:14;;18005:22;17985:18;;;17978:50;18071:14;;18064:22;18044:18;;;18037:50;20508:9:0;;;::::1;-1:-1:-1::0;;;;;20508:9:0::1;::::0;:24:::1;::::0;17841:19:1;;20508:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20386:195:::0;;;;:::o;31934:124::-;32018:6;;:31;;;-1:-1:-1;;;32018:31:0;;;;31991:7;;-1:-1:-1;;;;;32018:6:0;;:29;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20898:397::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;10498:4:::1;21005:6;:21;;;;:65;;;;;10548:4;21047:7;:23;;;;21005:65;:117;;;;;10602:4;21091:11;:31;;;;21005:117;20997:170;;;::::0;-1:-1:-1;;;20997:170:0;;18489:2:1;20997:170:0::1;::::0;::::1;18471:21:1::0;18528:2;18508:18;;;18501:30;-1:-1:-1;;;18547:18:1;;;18540:53;18610:18;;20997:170:0::1;18287:347:1::0;20997:170:0::1;21178:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21214:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;21252:35:0::1;-1:-1:-1::0;;;21252:35:0;;;::::1;;::::0;;;::::1;::::0;;20898:397::o;20270:108::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;20339:9:::1;::::0;:31:::1;::::0;-1:-1:-1;;;20339:31:0;;:9;;;::::1;-1:-1:-1::0;;;;;20339:9:0::1;::::0;:22:::1;::::0;:31:::1;::::0;20362:7;;20339:31:::1;;;:::i;23164:338::-:0;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;23378:16:::1;23358;23348:7;;:26;;;;:::i;:::-;23347:47;;;;:::i;:::-;23331:13;:63:::0;23419:7:::1;::::0;23446:13;;23419:23:::1;::::0;23429:13;;23419:23:::1;:::i;:::-;23418:41;;;;:::i;:::-;23405:10;:54:::0;23470:17:::1;:24:::0;-1:-1:-1;;;;23164:338:0:o;22369:140::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22461:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;22461:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22369:140::o;21820:269::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;21961:4:::1;21951:7;;:14;;;;:::i;:::-;21939:7;21928;21918;;:17;;;;:::i;:::-;21917:29;;;;:::i;:::-;:49;;21909:117;;;::::0;-1:-1:-1;;;21909:117:0;;18841:2:1;21909:117:0::1;::::0;::::1;18823:21:1::0;18880:2;18860:18;;;18853:30;18919:34;18899:18;;;18892:62;-1:-1:-1;;;18970:18:1;;;18963:53;19033:19;;21909:117:0::1;18639:419:1::0;21909:117:0::1;22074:7;22063;22053;;:17;;;;:::i;:::-;22052:29;;;;:::i;:::-;22037:12;:44:::0;-1:-1:-1;;21820:269:0:o;15739:623::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15818:22:0;::::1;15810:96;;;;-1:-1:-1::0;;;15810:96:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;;15925:16:0;::::1;::::0;15917:90:::1;;;;-1:-1:-1::0;;;15917:90:0::1;;;;;;;:::i;:::-;16038:6;::::0;;16018:34:::1;::::0;-1:-1:-1;;;;;16038:6:0;;::::1;::::0;16018:19:::1;:34::i;:::-;16063:35;16083:8;16093:4;16063:19;:35::i;:::-;16142:1;16132:6:::0;;16122:17:::1;::::0;-1:-1:-1;;;;;16132:6:0::1;16122:9;:17::i;:::-;:21;16119:134;;;16178:6;::::0;16160:81:::1;::::0;-1:-1:-1;;;;;16178:6:0::1;16186:8:::0;16196:17:::1;16178:6:::0;16196:9:::1;:17::i;16160:81::-;;16119:134;16273:6;:17:::0;;-1:-1:-1;;;;;;16273:17:0::1;-1:-1:-1::0;;;;;16273:17:0;::::1;::::0;;::::1;::::0;;16306:38:::1;::::0;16273:17;;;;16306:38:::1;::::0;16273:6;16306:38:::1;15739:623:::0;:::o;33476:143::-;33553:6;;:58;;-1:-1:-1;;;33553:58:0;;-1:-1:-1;;;;;33553:6:0;;;;:31;;:58;;33585:10;;33597:13;;33553:58;;;:::i;13246:1941::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;13416:19:::1;::::0;-1:-1:-1;;;13416:19:0;::::1;;;13415:20;13407:34;;;::::0;-1:-1:-1;;;13407:34:0;;19974:2:1;13407:34:0::1;::::0;::::1;19956:21:1::0;20013:1;19993:18;;;19986:29;-1:-1:-1;;;20031:18:1;;;20024:31;20072:18;;13407:34:0::1;19772:324:1::0;13407:34:0::1;13452:9;:33:::0;;-1:-1:-1;;;;;;13452:33:0::1;::::0;-1:-1:-1;;;;;13452:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;13500::::1;::::0;-1:-1:-1;;;13500:33:0;;:9;::::1;;::::0;:18:::1;::::0;:33:::1;::::0;13527:4:::1;::::0;13500:33:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;13496:49:::0;13559:9:::1;;;;;;;;;-1:-1:-1::0;;;;;13559:9:0::1;-1:-1:-1::0;;;;;13559:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;13559:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;13555:406;;13938:11;::::0;-1:-1:-1;;;13938:11:0;;21584:2:1;13938:11:0::1;::::0;::::1;21566:21:1::0;21623:1;21603:18;;;21596:29;-1:-1:-1;;;21641:18:1;;;21634:31;21682:18;;13938:11:0::1;21382:324:1::0;13555:406:0::1;13709:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13740:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13775:14:0::1;:35:::0;;;13825:9:::1;:24:::0;;-1:-1:-1;;13825:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;13891:13:::1;::::0;:2:::1;:13;:::i;:::-;13874:14;;:30;;;;:::i;:::-;13864:7;:40:::0;-1:-1:-1;;;;13991:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;13991:9:0::1;-1:-1:-1::0;;;;;13991:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13980:42:0::1;;14023:9;;;;;;;;;-1:-1:-1::0;;;;;14023:9:0::1;-1:-1:-1::0;;;;;14023:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14049:4;13980:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13971:6;:84:::0;;-1:-1:-1;;;;;;13971:84:0::1;-1:-1:-1::0;;;;;13971:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;14066:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;14066:22:0::1;-1:-1:-1::0;14066:22:0::1;::::0;;14115:7:::1;::::0;14130:4:::1;::::0;14115:11:::1;::::0;14125:1:::1;14115:11;:::i;:::-;14114:20;;;;:::i;:::-;14099:12;:35:::0;14163:7:::1;::::0;14178:3:::1;::::0;14163:11:::1;::::0;14173:1:::1;14163:11;:::i;:::-;14162:19;;;;:::i;:::-;14145:14;:36:::0;14192:19:::1;:26:::0;;-1:-1:-1;;;;14192:26:0::1;-1:-1:-1::0;;;14192:26:0::1;::::0;;14252:7:::1;::::0;14192:26;14242:6;;-1:-1:-1;;;;;14242:6:0;;::::1;14234:15:::0;;14214:4:::1;14234:15;::::0;;;;;:25;;;14296:6;;14275:37;;14296:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;14275:37:0;::::1;::::0;368:25:1;;356:2;341:18;;222:177;14275:37:0::1;;;;;;;;14329:9;14325:213;14348:15;14344:1;:19;14325:213;;;14384:14;14427:8;14436:1;14427:11;;;;;;;:::i;:::-;;;;;14412:8;14421:1;14412:11;;;;;;;:::i;:::-;;;;;14402:7;;:21;;;;:::i;:::-;14401:37;;;;:::i;:::-;14471:6;::::0;14384:54;;-1:-1:-1;14453:73:0::1;::::0;-1:-1:-1;;;;;14471:6:0::1;14479:8:::0;14488:1;14479:11:::1;::::0;::::1;;;;;:::i;:::-;;;;;14492:6;14500:5;14507::::0;14514::::1;14521:4;14453:17;:73::i;:::-;;14369:169;14365:3;;;;;:::i;:::-;;;;14325:213;;;-1:-1:-1::0;14560:6:0::1;::::0;14550:51:::1;::::0;-1:-1:-1;;;;;14560:6:0::1;14576:4;14583:17;14560:6:::0;14583:9:::1;:17::i;:::-;14550:9;:51::i;:::-;-1:-1:-1::0;14634:6:0::1;::::0;14623:33:::1;::::0;-1:-1:-1;;;;;14634:6:0;;::::1;::::0;14650:4:::1;::::0;14623:33:::1;::::0;::::1;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;14614:6:0::1;:42:::0;;-1:-1:-1;;;;;;14614:42:0::1;-1:-1:-1::0;;;;;14614:42:0;;::::1;;::::0;;14669:9:::1;::::0;::::1;:25;14702:21;14747:4;14767:24;14747:4:::0;14767:9:::1;:24::i;:::-;14900:6;::::0;14669:279:::1;::::0;-1:-1:-1;;;;;;14669:279:0::1;::::0;;;;;;::::1;::::0;;;14806:1:::1;::::0;;;-1:-1:-1;;;;;14900:6:0::1;::::0;14922:15:::1;::::0;14669:279:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;14961:6:0::1;::::0;:30:::1;::::0;-1:-1:-1;;;14961:30:0;;11597:8:::1;14961:30;::::0;::::1;368:25:1::0;-1:-1:-1;;;;;14961:6:0;;::::1;::::0;-1:-1:-1;14961:13:0::1;::::0;341:18:1;;14961:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15028:6:0::1;::::0;;-1:-1:-1;;;;;15028:6:0;;::::1;15002:34;::::0;;;:17:::1;:34;::::0;;;;;;;:41;;15039:4:::1;-1:-1:-1::0;;15002:41:0;;::::1;::::0;::::1;::::0;;;15082:6;;;::::1;15054:36:::0;;:19:::1;:36:::0;;;;;:43;;;::::1;::::0;::::1;::::0;;15138:6;;;;::::1;15108:38:::0;;:21:::1;:38:::0;;;;;:45;;;;::::1;;::::0;;-1:-1:-1;15164:15:0::1;::::0;-1:-1:-1;15164:13:0::1;:15::i;:::-;13246:1941:::0;;;;:::o;22788:134::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22876:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;22876:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22788:134::o;32677:187::-;32777:9;;32773:13;;32777:9;;32773:2;:13;:::i;:::-;32763:23;;;;:::i;:::-;32797:6;;:59;;-1:-1:-1;;;32797:59:0;;32822:10;32797:59;;;23541:51:1;23608:18;;;23601:34;;;23651:18;;;23644:34;;;32763:23:0;;-1:-1:-1;;;;;;32797:6:0;;:24;;23514:18:1;;32797:59:0;23339:345:1;31133:328:0;31224:10;31246:4;31224:27;;:60;;-1:-1:-1;31277:6:0;;-1:-1:-1;;;;;31277:6:0;31255:10;:29;31224:60;31216:129;;;;-1:-1:-1;;;31216:129:0;;23891:2:1;31216:129:0;;;23873:21:1;23930:2;23910:18;;;23903:30;23969:34;23949:18;;;23942:62;-1:-1:-1;;;24020:18:1;;;24013:54;24084:19;;31216:129:0;23689:420:1;31216:129:0;-1:-1:-1;;;;;31356:13:0;;;;;;:7;:13;;;;;:23;;31373:6;;31356:13;:23;;31373:6;;31356:23;:::i;:::-;;;;-1:-1:-1;;;;;;;31390:11:0;;;;;;:7;:11;;;;;:21;;31405:6;;31390:11;:21;;31405:6;;31390:21;:::i;:::-;;;;;;;;31442:2;-1:-1:-1;;;;;31427:26:0;31436:4;-1:-1:-1;;;;;31427:26:0;-1:-1:-1;;;;;;;;;;;31446:6:0;31427:26;;;;368:25:1;;356:2;341:18;;222:177;31427:26:0;;;;;;;;31133:328;;;:::o;22930:106::-;23018:9;;22971:7;;23014:13;;23018:9;;23014:2;:13;:::i;:::-;22998:12;;:30;;;;:::i;20747:143::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;20835:2:::1;20826:6;:11;20818:20;;;::::0;::::1;;20849:9;::::0;:33:::1;::::0;-1:-1:-1;;;20849:33:0;;::::1;::::0;::::1;368:25:1::0;;;20849:9:0;;;::::1;-1:-1:-1::0;;;;;20849:9:0::1;::::0;:25:::1;::::0;341:18:1;;20849:33:0::1;222:177:1::0;17525:117:0;-1:-1:-1;;;;;17618:16:0;17591:7;17618:16;;;:7;:16;;;;;;;17525:117::o;16370:193::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;16455:6:::1;::::0;;16435:34:::1;::::0;-1:-1:-1;;;;;16455:6:0;;::::1;::::0;16435:19:::1;:34::i;:::-;16497:1;16480:19:::0;;-1:-1:-1;;;;;;16480:19:0::1;::::0;;16515:40:::1;::::0;16497:1;;16515:40:::1;::::0;16497:1;;16515:40:::1;16370:193::o:0;32334:103::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;32393:6:::1;::::0;:36:::1;::::0;-1:-1:-1;;;32393:36:0;;-1:-1:-1;;;;;32393:6:0;;::::1;::::0;:24:::1;::::0;:36:::1;::::0;32418:10:::1;::::0;32393:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;19170:500:::0;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;19251:16;::::1;;19262:5;19251:16:::0;19247:416:::1;;-1:-1:-1::0;;;;;19284:13:0;;::::1;19300:5;19284:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;19284:21:0::1;::::0;;19320:9:::1;::::0;:32;;-1:-1:-1;;;19320:32:0;;:9;;;::::1;::::0;;::::1;::::0;:19:::1;::::0;:32:::1;::::0;19292:4;;19300:5;19320:32:::1;;;:::i;19247:416::-;19389:17;::::0;:22;19385:136:::1;;19478:6;19458:17;;19440:15;:35;;;;:::i;:::-;:44;19432:73;;;::::0;-1:-1:-1;;;19432:73:0;;24738:2:1;19432:73:0::1;::::0;::::1;24720:21:1::0;24777:2;24757:18;;;24750:30;-1:-1:-1;;;24796:18:1;;;24789:46;24852:18;;19432:73:0::1;24536:340:1::0;19432:73:0::1;-1:-1:-1::0;;;;;19535:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;19535:20:0::1;19551:4;19535:20:::0;;::::1;::::0;;;19590:15:::1;19570:17;:35:::0;19620:9:::1;::::0;:31;;-1:-1:-1;;;19620:31:0;;:9;;;::::1;::::0;;::::1;::::0;:19:::1;::::0;:31:::1;::::0;19543:4;;19620:31:::1;;;:::i;19247:416::-;19170:500:::0;;:::o;28443:544::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;28505:14:::1;::::0;::::1;;28504:15;28496:52;;;::::0;-1:-1:-1;;;28496:52:0;;25083:2:1;28496:52:0::1;::::0;::::1;25065:21:1::0;25122:2;25102:18;;;25095:30;-1:-1:-1;;;25141:18:1;;;25134:54;25205:18;;28496:52:0::1;24881:348:1::0;28496:52:0::1;28567:16;::::0;::::1;::::0;::::1;;;28559:53;;;::::0;-1:-1:-1;;;28559:53:0;;25436:2:1;28559:53:0::1;::::0;::::1;25418:21:1::0;25475:2;25455:18;;;25448:30;-1:-1:-1;;;25494:18:1;;;25487:54;25558:18;;28559:53:0::1;25234:348:1::0;28559:53:0::1;28634:9;::::0;;;::::1;-1:-1:-1::0;;;;;28634:9:0::1;28623:99;;28674:9;:36:::0;;-1:-1:-1;;;;;;28674:36:0::1;28704:4;28674:36:::0;::::1;;::::0;;28623:99:::1;28736:9;::::0;28756:6:::1;::::0;28811:9:::1;::::0;28736:85:::1;::::0;-1:-1:-1;;;28736:85:0;;-1:-1:-1;;;;;28756:6:0;;::::1;28736:85;::::0;::::1;25810:51:1::0;25909:10;28771:12:0::1;25897:23:1::0;25877:18;;;25870:51;-1:-1:-1;;;;;28793:15:0::1;25957:31:1::0;25937:18;;;25930:59;28811:9:0::1;::::0;;::::1;26005:18:1::0;;;25998:45;28736:9:0;;;::::1;;::::0;:19:::1;::::0;25782::1;;28736:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;28732:101:::0;28843:14:::1;:21:::0;;-1:-1:-1;;28843:21:0::1;28860:4;28843:21;::::0;;28902:6:::1;::::0;28918:5:::1;::::0;28892:17:::1;::::0;-1:-1:-1;;;;;28902:6:0::1;28892:9;:17::i;:::-;:22;::::0;28912:2:::1;28892:22;:::i;:::-;28891:32;;;;:::i;:::-;28875:13;:48:::0;28958:6:::1;::::0;28974:5:::1;::::0;28948:17:::1;::::0;-1:-1:-1;;;;;28958:6:0::1;28948:9;:17::i;:::-;:22;::::0;28968:2:::1;28948:22;:::i;:::-;28947:32;;;;:::i;:::-;28934:10;:45:::0;28443:544::o;33627:87::-;33673:6;;:33;;-1:-1:-1;;;33673:33:0;;-1:-1:-1;;;;;33673:6:0;;;;:21;;:33;;33695:10;;33673:33;;;:::i;31469:225::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;31588:4:::1;-1:-1:-1::0;;;;;31570:23:0;::::1;::::0;31562:66:::1;;;::::0;-1:-1:-1;;;31562:66:0;;26256:2:1;31562:66:0::1;::::0;::::1;26238:21:1::0;26295:2;26275:18;;;26268:30;26334:32;26314:18;;;26307:60;26384:18;;31562:66:0::1;26054:354:1::0;31562:66:0::1;31639:6;::::0;:47:::1;::::0;-1:-1:-1;;;31639:47:0;;-1:-1:-1;;;;;31639:6:0;;::::1;::::0;:27:::1;::::0;:47:::1;::::0;31667:10:::1;::::0;31679:6;;31639:47:::1;;;:::i;17123:84::-:0;17173:13;17197:7;17190:14;;;;;:::i;32872:155::-;32952:9;;32948:13;;32952:9;;32948:2;:13;:::i;:::-;32938:23;;;;:::i;:::-;32972:6;;:47;;-1:-1:-1;;;32972:47:0;;32938:23;;-1:-1:-1;;;;;;32972:6:0;;:27;;:47;;33000:10;;32938:23;;32972:47;;;:::i;32191:135::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;32275:6:::1;::::0;:43:::1;::::0;-1:-1:-1;;;32275:43:0;;::::1;::::0;::::1;368:25:1::0;;;-1:-1:-1;;;;;32275:6:0;;::::1;::::0;:28:::1;::::0;341:18:1;;32275:43:0::1;222:177:1::0;17650:165:0;17728:4;17745:40;17755:10;17767:9;17778:6;17745:9;:40::i;:::-;-1:-1:-1;17803:4:0;;17650:165;-1:-1:-1;;;17650:165:0:o;21303:288::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;21408:7:::1;:29:::0;;::::1;21488:33:::0;;::::1;-1:-1:-1::0;;;21488:33:0::1;-1:-1:-1::0;;21448:29:0;;::::1;::::0;::::1;-1:-1:-1::0;;21448:29:0;;;21408;;::::1;21448::::0;;;;;;;::::1;21488:33;;::::0;;21510:11;21548:21:::1;21468:9:::0;21428;21548:21:::1;:::i;:::-;:35;;;;:::i;:::-;21532:7;:51:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;21532:51:0::1;-1:-1:-1::0;;21532:51:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;21303:288:0:o;33343:125::-;33411:6;;:49;;-1:-1:-1;;;33411:49:0;;-1:-1:-1;;;;;33411:6:0;;;;:31;;:49;;33443:10;;33455:4;;33411:49;;;:::i;33035:151::-;33137:6;;:41;;-1:-1:-1;;;33137:41:0;;33110:7;;-1:-1:-1;;;;;33137:6:0;;:32;;:41;;33170:7;;33137:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20011:118::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;20085:9:::1;::::0;:36:::1;::::0;-1:-1:-1;;;20085:36:0;;:9;;;::::1;-1:-1:-1::0;;;;;20085:9:0::1;::::0;:27:::1;::::0;:36:::1;::::0;20113:7;;20085:36:::1;;;:::i;23510:164::-:0;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;23586:19:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;23586:29:0;;::::1;;::::0;;23631:35:::1;::::0;::::1;::::0;::::1;::::0;23608:7;4961:14:1;4954:22;4936:41;;4924:2;4909:18;;4796:187;23631:35:0::1;;;;;;;;23510:164:::0;:::o;33194:141::-;33291:6;;:36;;-1:-1:-1;;;33291:36:0;;33264:7;;-1:-1:-1;;;;;33291:6:0;;:27;;:36;;33319:7;;33291:36;;;:::i;21599:213::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;21705:11:::1;:42:::0;;-1:-1:-1;;;;;21705:42:0;;::::1;-1:-1:-1::0;;;;;;21705:42:0;;::::1;;::::0;;;21758:23;:46;;;;;::::1;::::0;::::1;;::::0;;21599:213::o;18622:540::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;18691:20:::1;18724:9;18691:43;;18745:16;18775:10;-1:-1:-1::0;;;;;18775:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18764:40:0::1;;18813:4;18820:10;-1:-1:-1::0;;;;;18820:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18764:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18745:93:::0;-1:-1:-1;;;;;;18853:22:0;::::1;18849:200;;18912:10;-1:-1:-1::0;;;;;18912:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18901:43:0::1;;18953:4;18960:10;-1:-1:-1::0;;;;;18960:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18901:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18892:6;:86:::0;;-1:-1:-1;;;;;;18892:86:0::1;-1:-1:-1::0;;;;;18892:86:0;;;::::1;::::0;;;::::1;::::0;;18849:200:::1;;;19020:6;:17:::0;;-1:-1:-1;;;;;;19020:17:0::1;-1:-1:-1::0;;;;;19020:17:0;::::1;;::::0;;18849:200:::1;19059:9;:22:::0;;-1:-1:-1;;;;;;19059:22:0::1;-1:-1:-1::0;;;;;19059:22:0;::::1;::::0;;::::1;::::0;;;19092:62:::1;::::0;19109:4:::1;::::0;-1:-1:-1;;19092:8:0::1;:62::i;28995:182::-:0;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;29062:16:::1;::::0;::::1;::::0;::::1;;;29061:17;29053:58;;;::::0;-1:-1:-1;;;29053:58:0;;26844:2:1;29053:58:0::1;::::0;::::1;26826:21:1::0;26883:2;26863:18;;;26856:30;26922;26902:18;;;26895:58;26970:18;;29053:58:0::1;26642:352:1::0;29053:58:0::1;29130:6;::::0;;29122:47:::1;::::0;-1:-1:-1;;;;;29130:6:0;;::::1;::::0;29147:21:::1;29122:47:::0;::::1;;;::::0;29147:21;;29122:47;29130:6;29122:47;29147:21;29130:6;29122:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28995:182::o:0;19678:145::-;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;19768:9:::1;::::0;:47:::1;::::0;-1:-1:-1;;;19768:47:0;;:9;;;::::1;-1:-1:-1::0;;;;;19768:9:0::1;::::0;:29:::1;::::0;:47:::1;::::0;19798:7;;19807;;19768:47:::1;;;:::i;32066:117::-:0;12004:6;;-1:-1:-1;;;;;12004:6:0;12014:10;12004:20;11996:50;;;;-1:-1:-1;;;11996:50:0;;;;;;;:::i;:::-;32141:6:::1;::::0;:34:::1;::::0;-1:-1:-1;;;32141:34:0;;::::1;::::0;::::1;368:25:1::0;;;-1:-1:-1;;;;;32141:6:0;;::::1;::::0;:28:::1;::::0;341:18:1;;32141:34:0::1;222:177:1::0;20137:125:0;20222:9;;:32;;-1:-1:-1;;;20222:32:0;;20198:4;;20222:9;;;-1:-1:-1;;;;;20222:9:0;;:23;;:32;;20246:7;;20222:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17990:310::-;-1:-1:-1;;;;;18085:20:0;;18077:52;;;;-1:-1:-1;;;18077:52:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18148:21:0;;18140:53;;;;-1:-1:-1;;;18140:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18206:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;18259:33;;368:25:1;;;18259:33:0;;341:18:1;18259:33:0;222:177:1;24048:2061:0;24127:4;-1:-1:-1;;;;;24152:18:0;;24144:68;;;;-1:-1:-1;;;24144:68:0;;27799:2:1;24144:68:0;;;27781:21:1;27838:2;27818:18;;;27811:30;27877:34;27857:18;;;27850:62;-1:-1:-1;;;27928:18:1;;;27921:35;27973:19;;24144:68:0;27597:401:1;24144:68:0;-1:-1:-1;;;;;24231:16:0;;24223:64;;;;-1:-1:-1;;;24223:64:0;;28205:2:1;24223:64:0;;;28187:21:1;28244:2;28224:18;;;28217:30;28283:34;28263:18;;;28256:62;-1:-1:-1;;;28334:18:1;;;28327:33;28377:19;;24223:64:0;28003:399:1;24223:64:0;24315:1;24306:6;:10;24298:64;;;;-1:-1:-1;;;24298:64:0;;28609:2:1;24298:64:0;;;28591:21:1;28648:2;28628:18;;;28621:30;28687:34;28667:18;;;28660:62;-1:-1:-1;;;28738:18:1;;;28731:39;28787:19;;24298:64:0;28407:405:1;24298:64:0;-1:-1:-1;;;;;24461:13:0;;24373:8;24461:13;;;:7;:13;;;;;;24373:8;;;;24461:13;;24457:162;;;24497:4;24491:10;;24457:162;;;-1:-1:-1;;;;;24523:11:0;;;;;;:7;:11;;;;;;;;24519:100;;;24558:4;24551:11;;24519:100;;;-1:-1:-1;24603:4:0;24519:100;24632:20;24643:4;24649:2;24632:10;:20::i;:::-;24629:641;;;24673:14;;;;24669:89;;24708:34;;-1:-1:-1;;;24708:34:0;;29019:2:1;24708:34:0;;;29001:21:1;29058:2;29038:18;;;29031:30;-1:-1:-1;;;29077:18:1;;;29070:54;29141:18;;24708:34:0;28817:348:1;24669:89:0;24775:3;:11;;;;24782:4;24775:11;24772:231;;;-1:-1:-1;;;;;24811:27:0;;;;;;:21;:27;;;;;;;;24810:28;:58;;;;-1:-1:-1;;;;;;24843:25:0;;;;;;:21;:25;;;;;;;;24842:26;24810:58;24806:182;;;24911:12;;24901:6;:22;;24893:75;;;;-1:-1:-1;;;24893:75:0;;29372:2:1;24893:75:0;;;29354:21:1;29411:2;29391:18;;;29384:30;29450:34;29430:18;;;29423:62;-1:-1:-1;;;29501:18:1;;;29494:38;29549:19;;24893:75:0;29170:404:1;24893:75:0;25034:9;;-1:-1:-1;;;;;25020:24:0;;;25034:9;;25020:24;;;;:33;;;25049:4;25048:5;25020:33;25017:242;;;-1:-1:-1;;;;;25079:25:0;;;;;;:21;:25;;;;;;;;25074:170;;25163:14;;25153:6;25137:13;25147:2;25137:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;25129:95;;;;-1:-1:-1;;;25129:95:0;;29781:2:1;25129:95:0;;;29763:21:1;29820:2;29800:18;;;29793:30;29859:34;29839:18;;;29832:62;-1:-1:-1;;;29910:18:1;;;29903:40;29960:19;;25129:95:0;29579:406:1;25129:95:0;-1:-1:-1;;;;;25315:25:0;;25282:12;25315:25;;;:19;:25;;;;;;25297:4;;25315:25;;;:52;;-1:-1:-1;;;;;;25344:23:0;;;;;;:19;:23;;;;;;;;25315:52;25312:98;;;-1:-1:-1;25393:5:0;25312:98;25426:4;25422:599;;;25452:6;;;;25451:7;:47;;;;-1:-1:-1;25479:19:0;;;;;;;25451:47;25447:557;;;25568:15;25548:17;;25537:8;;:28;;;;:::i;:::-;:46;25533:456;;;25608:28;25639:24;25657:4;25639:9;:24::i;:::-;25608:55;;25714:13;;25690:20;:37;25686:284;;25783:10;;25759:20;:34;25756:77;;-1:-1:-1;25820:10:0;;25756:77;25859:34;25872:20;25859:12;:34::i;:::-;25931:15;25920:8;:26;25686:284;25585:404;25533:456;26039:62;26057:4;26063:2;26067:6;26075:7;26084:3;26089:4;26095:5;26039:17;:62::i;:::-;26032:69;24048:2061;-1:-1:-1;;;;;;;;24048:2061:0:o;29609:946::-;29765:16;;29743:4;;29765:16;;;;;29760:221;;29798:28;29817:4;29823:2;29798:18;:28::i;:::-;29846:16;;;;;;;29845:17;:41;;;;;29866:20;29877:4;29883:2;29866:10;:20::i;:::-;29841:129;;;29907:47;;-1:-1:-1;;;29907:47:0;;30192:2:1;29907:47:0;;;30174:21:1;30231:2;30211:18;;;30204:30;30270:34;30250:18;;;30243:62;-1:-1:-1;;;30321:18:1;;;30314:35;30366:19;;29907:47:0;29990:401:1;29841:129:0;29997:20;30008:4;30014:2;29997:10;:20::i;:::-;29993:314;;;30065:9;;:37;;-1:-1:-1;;;30065:37:0;;-1:-1:-1;;;;;30654:15:1;;;30065:37:0;;;30636:34:1;30706:15;;;30686:18;;;30679:43;30738:18;;;30731:34;;;30034:12:0;;30065:9;;;;;:19;;30571:18:1;;30065:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;30065:37:0;;;;;;;;-1:-1:-1;;30065:37:0;;;;;;;;;;;;:::i;:::-;;;30061:163;;30200:8;;;30061:163;30153:5;-1:-1:-1;30244:7:0;30240:56;;30272:8;;;30240:56;30019:288;29993:314;-1:-1:-1;;;;;30319:13:0;;;;;;:7;:13;;;;;:23;;30336:6;;30319:13;:23;;30336:6;;30319:23;:::i;:::-;;;;-1:-1:-1;30353:22:0;;-1:-1:-1;30379:7:0;30378:55;;30427:6;30378:55;;;30390:34;30400:4;30406:3;30411:4;30417:6;30390:9;:34::i;:::-;-1:-1:-1;;;;;30444:11:0;;;;;;:7;:11;;;;;:29;;30353:80;;-1:-1:-1;30353:80:0;;30444:11;;;:29;;30353:80;;30444:29;:::i;:::-;;;;;;;;30506:2;-1:-1:-1;;;;;30491:34:0;30500:4;-1:-1:-1;;;;;30491:34:0;-1:-1:-1;;;;;;;;;;;30510:14:0;30491:34;;;;368:25:1;;356:2;341:18;;222:177;30491:34:0;;;;;;;;-1:-1:-1;30543:4:0;;29609:946;-1:-1:-1;;;;;;;;29609:946:0:o;23682:358::-;23751:4;23783:6;;-1:-1:-1;;;;;23775:14:0;;;23783:6;;23775:14;;;;:43;;-1:-1:-1;23812:6:0;;-1:-1:-1;;;;;23806:12:0;;;23812:6;;23806:12;;23775:43;:79;;;;-1:-1:-1;23848:6:0;;-1:-1:-1;;;;;23848:6:0;23835:9;:19;;23775:79;:118;;;;-1:-1:-1;;;;;;23872:21:0;;;;;;:17;:21;;;;;;;;23871:22;23775:118;:159;;;;-1:-1:-1;;;;;;23911:23:0;;;;;;:17;:23;;;;;;;;23910:24;23775:159;:186;;;;-1:-1:-1;;;;;;23951:10:0;;10755:42;23951:10;;23775:186;:219;;;;-1:-1:-1;;;;;;23978:16:0;;;;23775:219;:257;;;;-1:-1:-1;;;;;;24011:21:0;;24027:4;24011:21;;23775:257;23768:264;23682:358;-1:-1:-1;;;23682:358:0:o;26117:1801::-;11898:6;:13;;-1:-1:-1;;11898:13:0;11907:4;11898:13;;;26201:30:::1;::::0;;::::1;::::0;::::1;::::0;;26224:7:::1;26201:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;26201:30:0;::::1;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;26201:30:0;::::1;::::0;;::::1;::::0;;;;;;11898:6;26246:17;26242:56:::1;;26280:7;;;26242:56;26333:4;26313:26;::::0;;;:11:::1;:26;::::0;;;;;;;26348:9:::1;::::0;-1:-1:-1;;;;;26348:9:0::1;26313:46:::0;;;;;;;;-1:-1:-1;;26313:67:0::1;26310:165;;26417:4;26397:26;::::0;;;:11:::1;:26;::::0;;;;;;;26432:9:::1;::::0;-1:-1:-1;;;;;26432:9:0::1;26397:46:::0;;;;;;;-1:-1:-1;;26397:66:0;;26310:165:::1;26487:17;26568:1;26552:6;:12;;;26508:56;;26532:6;:16;;;26509:39;;:20;:39;;;;:::i;:::-;26508:56;;;;:::i;:::-;26507:62;;;;:::i;:::-;26487:82:::0;-1:-1:-1;26580:15:0::1;26598:32;26487:82:::0;26598:20;:32:::1;:::i;:::-;26675:16;::::0;;26689:1:::1;26675:16:::0;;;;;::::1;::::0;;26580:50;;-1:-1:-1;26651:21:0::1;::::0;26675:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26675:16:0::1;26651:40;;26720:4;26702;26707:1;26702:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26702:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;26746:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;26746:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26702:7;;26746:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26736:4;26741:1;26736:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26736:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;26775:9:::1;::::0;:186:::1;::::0;-1:-1:-1;;;26775:186:0;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;26850:7;;26775:9:::1;::::0;26888:4;;26915::::1;::::0;26935:15:::1;::::0;26775:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;26995:21:0::1;::::0;-1:-1:-1;26974:18:0::1;::::0;-1:-1:-1;27081:7:0;;-1:-1:-1;27055:22:0::1;27068:9:::0;26995:21;27055:22:::1;:::i;:::-;27054:34;;;;:::i;:::-;27027:61:::0;-1:-1:-1;27105:13:0;;27101:339:::1;;27135:9;::::0;27312:6:::1;::::0;27135:233:::1;::::0;-1:-1:-1;;;27135:233:0;;-1:-1:-1;;;;;27135:9:0;;::::1;::::0;:25:::1;::::0;27168:16;;27135:233:::1;::::0;27212:4:::1;::::0;27236:9;;27135::::1;::::0;;;27312:6:::1;::::0;27338:15:::1;::::0;27135:233:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27388:40:0::1;::::0;;31537:25:1;;;31593:2;31578:18;;31571:34;;;27388:40:0::1;::::0;-1:-1:-1;31510:18:1;27388:40:0::1;;;;;;;27101:339;27452:30;27466:16:::0;27452:30;::::1;:::i;:::-;;;27509:6;:16;;;27493:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;27601:12:::1;::::0;::::1;::::0;27579:18:::1;::::0;::::1;::::0;27536:26:::1;::::0;-1:-1:-1;27565:48:0;;::::1;::::0;27566:31:::1;::::0;::::1;:10:::0;:31:::1;:::i;:::-;27565:48;;;;:::i;:::-;27536:77:::0;-1:-1:-1;27624:24:0::1;27651:31;27536:77:::0;27651:10;:31:::1;:::i;:::-;27697:16;::::0;::::1;::::0;27624:58;;-1:-1:-1;27697:20:0::1;;::::0;27693:101:::1;;27734:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;27734:21:0;;::::1;::::0;:48;::::1;;;::::0;27765:16;;27734:21:::1;:48:::0;:21;:48;27765:16;27734:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27693:101;27808:18;::::0;::::1;::::0;:22:::1;;::::0;27804:107:::1;;27847:23:::0;;:52:::1;::::0;-1:-1:-1;;;;;27847:23:0;;::::1;::::0;:52;::::1;;;::::0;27880:18;;27847:23:::1;:52:::0;:23;:52;27880:18;27847:23;:52;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27804:107;26190:1728;;;;;;;;11922:1;-1:-1:-1::0;11934:6:0;:14;;-1:-1:-1;;11934:14:0;;;26117:1801::o;27926:509::-;28009:16;;;;;;;28008:17;28000:65;;;;-1:-1:-1;;;28000:65:0;;32040:2:1;28000:65:0;;;32022:21:1;32079:2;32059:18;;;32052:30;32118:34;32098:18;;;32091:62;-1:-1:-1;;;32169:18:1;;;32162:33;32212:19;;28000:65:0;31838:399:1;28000:65:0;28081:20;28092:4;28098:2;28081:10;:20::i;:::-;28080:21;:37;;;;-1:-1:-1;28111:6:0;;-1:-1:-1;;;;;28105:12:0;;;28111:6;;28105:12;28080:37;28076:352;;;-1:-1:-1;;;;;28134:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;28134:30:0;28160:4;28134:30;;;28179:16;:23;;-1:-1:-1;;28179:23:0;28134:30;28179:23;;;;;28228:9;;;;28217:107;;28272:9;:36;;-1:-1:-1;;;;;;28272:36:0;28302:4;28272:36;;;;;28217:107;28338:19;:26;;-1:-1:-1;;28338:26:0;;;;;28384:32;;-1:-1:-1;4936:41:1;;28384:32:0;;4924:2:1;4909:18;28384:32:0;;;;;;;27926:509;;:::o;30563:562::-;30651:7;30671:18;30704:3;30700:205;;;-1:-1:-1;30737:9:0;:16;;;30700:205;;;30775:4;30771:134;;;-1:-1:-1;30809:9:0;:17;;;;;;30771:134;;;-1:-1:-1;30872:9:0;:21;-1:-1:-1;;;30872:21:0;;;;30771:134;30917:17;10649:5;30937:19;30946:10;30937:6;:19;:::i;:::-;:38;;;;:::i;:::-;31004:4;30988:22;;;;:7;:22;;;;;:35;;30917:58;;-1:-1:-1;30917:58:0;;30988:22;;;:35;;30917:58;;30988:35;:::i;:::-;;;;-1:-1:-1;;31039:40:0;;368:25:1;;;31062:4:0;;-1:-1:-1;;;;;31039:40:0;;;-1:-1:-1;;;;;;;;;;;31039:40:0;356:2:1;341:18;31039:40:0;;;;;;;31099:18;31108:9;31099:6;:18;:::i;:::-;31092:25;30563:562;-1:-1:-1;;;;;;;30563:562:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:203:1;-1:-1:-1;;;;;178:32:1;;;;160:51;;148:2;133:18;;14:203::o;404:127::-;465:10;460:3;456:20;453:1;446:31;496:4;493:1;486:15;520:4;517:1;510:15;536:274;608:2;602:9;658:2;638:38;;-1:-1:-1;;;;;691:34:1;;727:22;;;688:62;685:88;;;753:18;;:::i;:::-;789:2;782:22;536:274;:::o;1094:275::-;1165:2;1159:9;1230:2;1211:13;;-1:-1:-1;;1207:27:1;1195:40;;-1:-1:-1;;;;;1250:34:1;;1286:22;;;1247:62;1244:88;;;1312:18;;:::i;:::-;1348:2;1341:22;1094:275;;-1:-1:-1;1094:275:1:o;1374:183::-;1434:4;-1:-1:-1;;;;;1459:6:1;1456:30;1453:56;;;1489:18;;:::i;:::-;-1:-1:-1;1534:1:1;1530:14;1546:4;1526:25;;1374:183::o;1562:131::-;-1:-1:-1;;;;;1637:31:1;;1627:42;;1617:70;;1683:1;1680;1673:12;1698:737;1752:5;1805:3;1798:4;1790:6;1786:17;1782:27;1772:55;;1823:1;1820;1813:12;1772:55;1859:6;1846:20;1885:4;1909:60;1925:43;1965:2;1925:43;:::i;:::-;1909:60;:::i;:::-;2003:15;;;2089:1;2085:10;;;;2073:23;;2069:32;;;2034:12;;;;2113:15;;;2110:35;;;2141:1;2138;2131:12;2110:35;2177:2;2169:6;2165:15;2189:217;2205:6;2200:3;2197:15;2189:217;;;2285:3;2272:17;2302:31;2327:5;2302:31;:::i;:::-;2346:18;;2384:12;;;;2222;;2189:217;;;-1:-1:-1;2424:5:1;1698:737;-1:-1:-1;;;;;;1698:737:1:o;2440:118::-;2526:5;2519:13;2512:21;2505:5;2502:32;2492:60;;2548:1;2545;2538:12;2563:477;2653:6;2661;2714:2;2702:9;2693:7;2689:23;2685:32;2682:52;;;2730:1;2727;2720:12;2682:52;2770:9;2757:23;-1:-1:-1;;;;;2795:6:1;2792:30;2789:50;;;2835:1;2832;2825:12;2789:50;2858:61;2911:7;2902:6;2891:9;2887:22;2858:61;:::i;:::-;2848:71;;;2969:2;2958:9;2954:18;2941:32;2982:28;3004:5;2982:28;:::i;:::-;3029:5;3019:15;;;2563:477;;;;;:::o;3415:258::-;3487:1;3497:113;3511:6;3508:1;3505:13;3497:113;;;3587:11;;;3581:18;3568:11;;;3561:39;3533:2;3526:10;3497:113;;;3628:6;3625:1;3622:13;3619:48;;;-1:-1:-1;;3663:1:1;3645:16;;3638:27;3415:258::o;3678:383::-;3827:2;3816:9;3809:21;3790:4;3859:6;3853:13;3902:6;3897:2;3886:9;3882:18;3875:34;3918:66;3977:6;3972:2;3961:9;3957:18;3952:2;3944:6;3940:15;3918:66;:::i;:::-;4045:2;4024:15;-1:-1:-1;;4020:29:1;4005:45;;;;4052:2;4001:54;;3678:383;-1:-1:-1;;3678:383:1:o;4291:180::-;4350:6;4403:2;4391:9;4382:7;4378:23;4374:32;4371:52;;;4419:1;4416;4409:12;4371:52;-1:-1:-1;4442:23:1;;4291:180;-1:-1:-1;4291:180:1:o;4476:315::-;4544:6;4552;4605:2;4593:9;4584:7;4580:23;4576:32;4573:52;;;4621:1;4618;4611:12;4573:52;4660:9;4647:23;4679:31;4704:5;4679:31;:::i;:::-;4729:5;4781:2;4766:18;;;;4753:32;;-1:-1:-1;;;4476:315:1:o;4988:456::-;5065:6;5073;5081;5134:2;5122:9;5113:7;5109:23;5105:32;5102:52;;;5150:1;5147;5140:12;5102:52;5189:9;5176:23;5208:31;5233:5;5208:31;:::i;:::-;5258:5;-1:-1:-1;5315:2:1;5300:18;;5287:32;5328:33;5287:32;5328:33;:::i;:::-;4988:456;;5380:7;;-1:-1:-1;;;5434:2:1;5419:18;;;;5406:32;;4988:456::o;5449:248::-;5517:6;5525;5578:2;5566:9;5557:7;5553:23;5549:32;5546:52;;;5594:1;5591;5584:12;5546:52;-1:-1:-1;;5617:23:1;;;5687:2;5672:18;;;5659:32;;-1:-1:-1;5449:248:1:o;5702:1138::-;5820:6;5828;5881:2;5869:9;5860:7;5856:23;5852:32;5849:52;;;5897:1;5894;5887:12;5849:52;5937:9;5924:23;-1:-1:-1;;;;;6007:2:1;5999:6;5996:14;5993:34;;;6023:1;6020;6013:12;5993:34;6046:61;6099:7;6090:6;6079:9;6075:22;6046:61;:::i;:::-;6036:71;;6126:2;6116:12;;6181:2;6170:9;6166:18;6153:32;6210:2;6200:8;6197:16;6194:36;;;6226:1;6223;6216:12;6194:36;6249:24;;;-1:-1:-1;6304:4:1;6296:13;;6292:27;-1:-1:-1;6282:55:1;;6333:1;6330;6323:12;6282:55;6369:2;6356:16;6392:60;6408:43;6448:2;6408:43;:::i;6392:60::-;6486:15;;;6568:1;6564:10;;;;6556:19;;6552:28;;;6517:12;;;;6592:19;;;6589:39;;;6624:1;6621;6614:12;6589:39;6648:11;;;;6668:142;6684:6;6679:3;6676:15;6668:142;;;6750:17;;6738:30;;6701:12;;;;6788;;;;6668:142;;;6829:5;6819:15;;;;;;;5702:1138;;;;;:::o;6845:647::-;6919:6;6927;6935;6943;6996:3;6984:9;6975:7;6971:23;6967:33;6964:53;;;7013:1;7010;7003:12;6964:53;7052:9;7039:23;7071:28;7093:5;7071:28;:::i;:::-;7118:5;-1:-1:-1;7175:2:1;7160:18;;7147:32;7188:30;7147:32;7188:30;:::i;:::-;7237:7;-1:-1:-1;7296:2:1;7281:18;;7268:32;7309:30;7268:32;7309:30;:::i;:::-;7358:7;-1:-1:-1;7417:2:1;7402:18;;7389:32;7430:30;7389:32;7430:30;:::i;:::-;6845:647;;;;-1:-1:-1;6845:647:1;;-1:-1:-1;;6845:647:1:o;7686:159::-;7753:20;;7813:6;7802:18;;7792:29;;7782:57;;7835:1;7832;7825:12;7782:57;7686:159;;;:::o;7850:328::-;7924:6;7932;7940;7993:2;7981:9;7972:7;7968:23;7964:32;7961:52;;;8009:1;8006;7999:12;7961:52;8032:28;8050:9;8032:28;:::i;:::-;8022:38;;8079:37;8112:2;8101:9;8097:18;8079:37;:::i;:::-;8069:47;;8135:37;8168:2;8157:9;8153:18;8135:37;:::i;:::-;8125:47;;7850:328;;;;;:::o;8183:247::-;8242:6;8295:2;8283:9;8274:7;8270:23;8266:32;8263:52;;;8311:1;8308;8301:12;8263:52;8350:9;8337:23;8369:31;8394:5;8369:31;:::i;8435:454::-;8530:6;8538;8546;8554;8562;8615:3;8603:9;8594:7;8590:23;8586:33;8583:53;;;8632:1;8629;8622:12;8583:53;-1:-1:-1;;8655:23:1;;;8725:2;8710:18;;8697:32;;-1:-1:-1;8776:2:1;8761:18;;8748:32;;8827:2;8812:18;;8799:32;;-1:-1:-1;8878:3:1;8863:19;8850:33;;-1:-1:-1;8435:454:1;-1:-1:-1;8435:454:1:o;8894:382::-;8959:6;8967;9020:2;9008:9;8999:7;8995:23;8991:32;8988:52;;;9036:1;9033;9026:12;8988:52;9075:9;9062:23;9094:31;9119:5;9094:31;:::i;:::-;9144:5;-1:-1:-1;9201:2:1;9186:18;;9173:32;9214:30;9173:32;9214:30;:::i;9281:484::-;9331:5;9384:3;9377:4;9369:6;9365:17;9361:27;9351:55;;9402:1;9399;9392:12;9351:55;9426:22;;:::i;:::-;9470:3;9508:2;9500:6;9496:15;9534:3;9526:6;9523:15;9520:35;;;9551:1;9548;9541:12;9520:35;9575:6;9590:146;9606:6;9601:3;9598:15;9590:146;;;9674:17;;9662:30;;9721:4;9712:14;;;;9623;9590:146;;;-1:-1:-1;9754:5:1;;9281:484;-1:-1:-1;;;;;9281:484:1:o;9770:1027::-;9925:6;9933;9941;9949;10002:3;9990:9;9981:7;9977:23;9973:33;9970:53;;;10019:1;10016;10009:12;9970:53;10068:7;10061:4;10050:9;10046:20;10042:34;10032:62;;10090:1;10087;10080:12;10032:62;10114:22;;:::i;:::-;10158:3;10199:2;10188:9;10184:18;10225:7;10217:6;10214:19;10211:39;;;10246:1;10243;10236:12;10211:39;10270:9;10288:221;10304:6;10299:3;10296:15;10288:221;;;10386:3;10373:17;10403:31;10428:5;10403:31;:::i;:::-;10447:18;;10494:4;10485:14;;;;10321;10288:221;;;10292:3;10528:5;10518:15;;10552:41;10585:7;10577:6;10552:41;:::i;:::-;10542:51;;;;;10612:54;10658:7;10652:3;10641:9;10637:19;10612:54;:::i;:::-;10602:64;;10718:3;10707:9;10703:19;10690:33;10732;10757:7;10732:33;:::i;10802:388::-;10870:6;10878;10931:2;10919:9;10910:7;10906:23;10902:32;10899:52;;;10947:1;10944;10937:12;10899:52;10986:9;10973:23;11005:31;11030:5;11005:31;:::i;:::-;11055:5;-1:-1:-1;11112:2:1;11097:18;;11084:32;11125:33;11084:32;11125:33;:::i;11195:241::-;11251:6;11304:2;11292:9;11283:7;11279:23;11275:32;11272:52;;;11320:1;11317;11310:12;11272:52;11359:9;11346:23;11378:28;11400:5;11378:28;:::i;12299:336::-;-1:-1:-1;;;;;12561:15:1;;;12543:34;;12613:15;;12608:2;12593:18;;12586:43;12493:2;12478:18;;12299:336::o;12640:341::-;12842:2;12824:21;;;12881:2;12861:18;;;12854:30;-1:-1:-1;;;12915:2:1;12900:18;;12893:47;12972:2;12957:18;;12640:341::o;12986:461::-;13039:3;13077:5;13071:12;13104:6;13099:3;13092:19;13130:4;13159:2;13154:3;13150:12;13143:19;;13196:2;13189:5;13185:14;13217:1;13227:195;13241:6;13238:1;13235:13;13227:195;;;13306:13;;-1:-1:-1;;;;;13302:39:1;13290:52;;13362:12;;;;13397:15;;;;13338:1;13256:9;13227:195;;;-1:-1:-1;13438:3:1;;12986:461;-1:-1:-1;;;;;12986:461:1:o;13452:342::-;13653:2;13642:9;13635:21;13616:4;13673:56;13725:2;13714:9;13710:18;13702:6;13673:56;:::i;:::-;13665:64;;13779:6;13772:14;13765:22;13760:2;13749:9;13745:18;13738:50;13452:342;;;;;:::o;13799:380::-;13878:1;13874:12;;;;13921;;;13942:61;;13996:4;13988:6;13984:17;13974:27;;13942:61;14049:2;14041:6;14038:14;14018:18;14015:38;14012:161;;14095:10;14090:3;14086:20;14083:1;14076:31;14130:4;14127:1;14120:15;14158:4;14155:1;14148:15;14012:161;;13799:380;;;:::o;14520:127::-;14581:10;14576:3;14572:20;14569:1;14562:31;14612:4;14609:1;14602:15;14636:4;14633:1;14626:15;14652:445;14767:1;14810:5;-1:-1:-1;;14767:1:1;14824:267;14845:7;14835:8;14832:21;14824:267;;;14901:4;14896:3;14892:14;14886:4;14883:24;14880:50;;;14910:18;;:::i;:::-;14960:7;14950:8;14946:22;14943:55;;;14980:16;;;;14943:55;15059:22;;;;15019:15;;;;14824:267;;;14828:3;;14652:445;;;;;:::o;15102:806::-;15151:5;15181:8;15171:80;;-1:-1:-1;15222:1:1;15236:5;;15171:80;15270:4;15260:76;;-1:-1:-1;15307:1:1;15321:5;;15260:76;15352:4;15370:1;15365:59;;;;15438:1;15433:130;;;;15345:218;;15365:59;15395:1;15386:10;;15409:5;;;15433:130;15470:3;15460:8;15457:17;15454:43;;;15477:18;;:::i;:::-;-1:-1:-1;;15533:1:1;15519:16;;15548:5;;15345:218;;15647:2;15637:8;15634:16;15628:3;15622:4;15619:13;15615:36;15609:2;15599:8;15596:16;15591:2;15585:4;15582:12;15578:35;15575:77;15572:159;;;-1:-1:-1;15684:19:1;;;15716:5;;15572:159;15763:34;15788:8;15782:4;15763:34;:::i;:::-;15833:6;15829:1;15825:6;15821:19;15812:7;15809:32;15806:58;;;15844:18;;:::i;:::-;15882:20;;15102:806;-1:-1:-1;;;15102:806:1:o;15913:140::-;15971:5;16000:47;16041:4;16031:8;16027:19;16021:4;16000:47;:::i;16058:217::-;16098:1;16124;16114:132;;16168:10;16163:3;16159:20;16156:1;16149:31;16203:4;16200:1;16193:15;16231:4;16228:1;16221:15;16114:132;-1:-1:-1;16260:9:1;;16058:217::o;16280:125::-;16320:4;16348:1;16345;16342:8;16339:34;;;16353:18;;:::i;:::-;-1:-1:-1;16390:9:1;;16280:125::o;16410:168::-;16450:7;16516:1;16512;16508:6;16504:14;16501:1;16498:21;16493:1;16486:9;16479:17;16475:45;16472:71;;;16523:18;;:::i;:::-;-1:-1:-1;16563:9:1;;16410:168::o;17350:127::-;17411:10;17406:3;17402:20;17399:1;17392:31;17442:4;17439:1;17432:15;17466:4;17463:1;17456:15;17482:175;17519:3;17563:4;17556:5;17552:16;17592:4;17583:7;17580:17;17577:43;;17600:18;;:::i;:::-;17649:1;17636:15;;17482:175;-1:-1:-1;;17482:175:1:o;18098:184::-;18168:6;18221:2;18209:9;18200:7;18196:23;18192:32;18189:52;;;18237:1;18234;18227:12;18189:52;-1:-1:-1;18260:16:1;;18098:184;-1:-1:-1;18098:184:1:o;19063:425::-;19265:2;19247:21;;;19304:2;19284:18;;;19277:30;19343:34;19338:2;19323:18;;19316:62;19414:31;19409:2;19394:18;;19387:59;19478:3;19463:19;;19063:425::o;19493:274::-;-1:-1:-1;;;;;19685:32:1;;;;19667:51;;19749:2;19734:18;;19727:34;19655:2;19640:18;;19493:274::o;20101:497::-;20155:5;20208:3;20201:4;20193:6;20189:17;20185:27;20175:55;;20226:1;20223;20216:12;20175:55;20255:6;20249:13;-1:-1:-1;;;;;20277:2:1;20274:26;20271:52;;;20303:18;;:::i;:::-;20347:55;20390:2;20371:13;;-1:-1:-1;;20367:27:1;20396:4;20363:38;20347:55;:::i;:::-;20427:2;20418:7;20411:19;20473:3;20466:4;20461:2;20453:6;20449:15;20445:26;20442:35;20439:55;;;20490:1;20487;20480:12;20439:55;20503:64;20564:2;20557:4;20548:7;20544:18;20537:4;20529:6;20525:17;20503:64;:::i;20603:774::-;20718:6;20726;20734;20742;20795:3;20783:9;20774:7;20770:23;20766:33;20763:53;;;20812:1;20809;20802:12;20763:53;20845:9;20839:16;-1:-1:-1;;;;;20915:2:1;20907:6;20904:14;20901:34;;;20931:1;20928;20921:12;20901:34;20954:61;21007:7;20998:6;20987:9;20983:22;20954:61;:::i;:::-;20944:71;;21061:2;21050:9;21046:18;21040:25;21024:41;;21090:2;21080:8;21077:16;21074:36;;;21106:1;21103;21096:12;21074:36;;21129:63;21184:7;21173:8;21162:9;21158:24;21129:63;:::i;:::-;21119:73;;;21232:2;21221:9;21217:18;21211:25;21201:35;;21279:2;21268:9;21264:18;21258:25;21323:4;21316:5;21312:16;21305:5;21302:27;21292:55;;21343:1;21340;21333:12;21711:251;21781:6;21834:2;21822:9;21813:7;21809:23;21805:32;21802:52;;;21850:1;21847;21840:12;21802:52;21882:9;21876:16;21901:31;21926:5;21901:31;:::i;22276:135::-;22315:3;22336:17;;;22333:43;;22356:18;;:::i;:::-;-1:-1:-1;22403:1:1;22392:13;;22276:135::o;22416:607::-;-1:-1:-1;;;;;22775:15:1;;;22757:34;;22822:2;22807:18;;22800:34;;;;22865:2;22850:18;;22843:34;;;;22908:2;22893:18;;22886:34;;;;22957:15;;;22951:3;22936:19;;22929:44;22737:3;22989:19;;22982:35;;;;22706:3;22691:19;;22416:607::o;23028:306::-;23116:6;23124;23132;23185:2;23173:9;23164:7;23160:23;23156:32;23153:52;;;23201:1;23198;23191:12;23153:52;23230:9;23224:16;23214:26;;23280:2;23269:9;23265:18;23259:25;23249:35;;23324:2;23313:9;23309:18;23303:25;23293:35;;23028:306;;;;;:::o;24114:128::-;24154:3;24185:1;24181:6;24178:1;24175:13;24172:39;;;24191:18;;:::i;:::-;-1:-1:-1;24227:9:1;;24114:128::o;24247:284::-;-1:-1:-1;;;;;24433:32:1;;;;24415:51;;24509:14;24502:22;24497:2;24482:18;;24475:50;24403:2;24388:18;;24247:284::o;26413:224::-;26452:3;26480:6;26513:2;26510:1;26506:10;26543:2;26540:1;26536:10;26574:3;26570:2;26566:12;26561:3;26558:21;26555:47;;;26582:18;;:::i;:::-;26618:13;;26413:224;-1:-1:-1;;;;26413:224:1:o;26999:245::-;27066:6;27119:2;27107:9;27098:7;27094:23;27090:32;27087:52;;;27135:1;27132;27125:12;27087:52;27167:9;27161:16;27186:28;27208:5;27186:28;:::i;27249:343::-;27451:2;27433:21;;;27490:2;27470:18;;;27463:30;-1:-1:-1;;;27524:2:1;27509:18;;27502:49;27583:2;27568:18;;27249:343::o;30776:582::-;31075:6;31064:9;31057:25;31118:6;31113:2;31102:9;31098:18;31091:34;31161:3;31156:2;31145:9;31141:18;31134:31;31038:4;31182:57;31234:3;31223:9;31219:19;31211:6;31182:57;:::i;:::-;-1:-1:-1;;;;;31275:32:1;;;;31270:2;31255:18;;31248:60;-1:-1:-1;31339:3:1;31324:19;31317:35;31174:65;30776:582;-1:-1:-1;;;30776:582:1:o;31616:217::-;31655:4;31684:6;31740:10;;;;31710;;31762:12;;;31759:38;;;31777:18;;:::i;:::-;31814:13;;31616:217;-1:-1:-1;;;31616:217:1:o

Swarm Source

ipfs://4c20b59ad915fcf1d880854d1182a35161b962fbbeda7087666bb0a0c0d3212e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.