ETH Price: $2,400.12 (-0.22%)

Token

Mysterious DeFi ($MDeFi)
 

Overview

Max Total Supply

100,000,000,000 $MDeFi

Holders

73

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MysteriousDeFi

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function 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;
}

interface Cashier {
    function setRewardsProperties(uint256 _minPeriod, uint256 _minReflection) external;
    function tally(address shareholder, uint256 amount) external;
    function load() external payable;
    function cashout(uint256 gas) external;
    function giveMeWelfarePlease(address hobo) external;
    function getTotalDistributed() external view returns(uint256);
    function getShareholderInfo(address shareholder) external view returns(string memory, string memory, string memory, string memory);
    function getShareholderRealized(address shareholder) external view returns (uint256);
    function getPendingRewards(address shareholder) external view returns (uint256);
    function initialize() external;
}

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

    mapping (address => uint256) _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcludedFromDividends;
    mapping (address => bool) private _liquidityHolders;

    uint256 constant private startingSupply = 100_000_000_000;

    string constant private _name = "Mysterious DeFi";
    string constant private _symbol = "$MDeFi";
    uint8 constant private _decimals = 18;

    uint256 constant private _tTotal = startingSupply * (10 ** _decimals);

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

    struct Ratios {
        uint16 rewards;
        uint16 team;
        uint16 marketing;
        uint16 total;
    }

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

    Ratios public _ratios = Ratios({
        rewards: 300,
        team: 600,
        marketing: 300,
        total: 1200
        });

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

    IRouter02 public dexRouter;
    address public lpPair;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant private ZERO = 0x0000000000000000000000000000000000000000;

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

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x8d569B4ad099b71372fF7B921Aea3679d0851f4D),
        team: payable(0xf134febe5b1e450a42640b8bE7DB02dFFA6acC9E)
        });

    uint256 private _maxTxAmount = (_tTotal * 1) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 1) / 100;

    Cashier reflector;
    uint256 reflectorGas = 300000;

    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 0 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public processReflect = false;

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

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountBNB, uint256 amount);

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

        _tOwned[_owner] = _tTotal;
        emit Transfer(ZERO, _owner, _tTotal);
        emit OwnershipTransferred(address(0), _owner);

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

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

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

        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromDividends[_owner] = true;
        _isExcludedFromDividends[lpPair] = true;
        _isExcludedFromDividends[address(this)] = true;
        _isExcludedFromDividends[DEAD] = true;
        _isExcludedFromDividends[ZERO] = true;
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // 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.");
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        _isExcludedFromFees[newOwner] = true;
        _isExcludedFromDividends[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 {
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

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

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

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

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transfer(msg.sender, recipient, 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, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function setInitializers(address aInitializer, address cInitializer) external onlyOwner {
        require(!tradingEnabled);
        require(cInitializer != address(this) && aInitializer != address(this) && cInitializer != aInitializer);
        reflector = Cashier(cInitializer);
        antiSnipe = AntiSnipe(aInitializer);
    }

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

    function isExcludedFromDividends(address account) external view returns(bool) {
        return _isExcludedFromDividends[account];
    }

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

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

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

    function setDividendExcluded(address holder, bool enabled) public onlyOwner {
        require(holder != address(this) && holder != lpPair);
        _isExcludedFromDividends[holder] = enabled;
        if (enabled) {
            reflector.tally(holder, 0);
        } else {
            reflector.tally(holder, _tOwned[holder]);
        }
    }

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

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

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

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

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
        for(uint256 i = 0; i < accounts.length; i++){
            setDividendExcluded(accounts[i], enabled);
        }
    }

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

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

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

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

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

    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 {}
        try reflector.initialize() {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 5) / 10000;
        swapAmount = (balanceOf(lpPair) * 1) / 1000;
    }

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

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

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


    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 / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

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

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

    function setContractSwapSettings(bool _enabled, bool processReflectEnabled) external onlyOwner {
        contractSwapEnabled = _enabled;
        processReflect = processReflectEnabled;
    }

    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 setRewardsProperties(uint256 _minPeriod, uint256 _minReflection, uint256 minReflectionMultiplier) external onlyOwner {
        _minReflection = _minReflection * 10**minReflectionMultiplier;
        reflector.setRewardsProperties(_minPeriod, _minReflection);
    }

    function setReflectorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        reflectorGas = gas;
    }

    function giveMeWelfarePlease() external {
        reflector.giveMeWelfarePlease(msg.sender);
    }

    function getTotalReflected() external view returns (uint256) {
        return reflector.getTotalDistributed();
    }

    function getUserInfo(address shareholder) external view returns (string memory, string memory, string memory, string memory) {
        return reflector.getShareholderInfo(shareholder);
    }

    function getUserRealizedGains(address shareholder) external view returns (uint256) {
        return reflector.getShareholderRealized(shareholder);
    }

    function getUserUnpaidEarnings(address shareholder) external view returns (uint256) {
        return reflector.getPendingRewards(shareholder);
    }

    function _hasLimits(address from, address to) private 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 _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) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

        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 = amount;
        if (takeFee) {
            amountReceived = takeTaxes(from, amount, buy, sell, other);
        }
        _tOwned[to] += amountReceived;

        processTokenReflect(from, to);

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

    function processTokenReflect(address from, address to) internal {
        if (!_isExcludedFromDividends[from]) {
            try reflector.tally(from, _tOwned[from]) {} catch {}
        }
        if (!_isExcludedFromDividends[to]) {
            try reflector.tally(to, _tOwned[to]) {} catch {}
        }
        if (processReflect) {
            try reflector.cashout(reflectorGas) {} catch {}
        }
    }

    function _basicTransfer(address from, address to, uint256 amount) internal returns (bool) {
        _tOwned[from] -= amount;
        _tOwned[to] += amount;
        emit Transfer(from, to, amount);
        return true;
    }

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

        if (currentFee == 0) {
            return amount;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

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

        return amount - feeAmount;
    }

    function contractSwap(uint256 contractTokenBalance) internal swapping {
        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;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        uint256 amtBalance = address(this).balance;
        uint256 rewardsBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 teamBalance = (amtBalance * ratios.team) / ratios.total;
        uint256 marketingBalance = amtBalance - (rewardsBalance + teamBalance);

        if (ratios.rewards > 0) {
            try reflector.load{value: rewardsBalance}() {} catch {}
        }

        if(ratios.marketing > 0){
            _taxWallets.marketing.transfer(marketingBalance);
        }
        if(ratios.team > 0){
            _taxWallets.team.transfer(teamBalance);
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        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));
            }
            if(address(reflector) ==  address(0)) {
                reflector = Cashier(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

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

    function manualDeposit() external onlyOwner {
        try reflector.load{value: address(this).balance}() {} catch {}
    }
}

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":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","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":"rewards","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"marketing","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":"team","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"getTotalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserRealizedGains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveMeWelfarePlease","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":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDeposit","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[],"name":"processReflect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"internalType":"bool","name":"processReflectEnabled","type":"bool"}],"name":"setContractSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDividendExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aInitializer","type":"address"},{"internalType":"address","name":"cInitializer","type":"address"}],"name":"setInitializers","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":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setReflectorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minReflection","type":"uint256"},{"internalType":"uint256","name":"minReflectionMultiplier","type":"uint256"}],"name":"setRewardsProperties","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":"team","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6000600381905560808190526104b060a081905260c091909152600a805465ffffffffffff19166304b0000017815561012c60e0819052610258610100526101205261014091909152600b80546704b0012c0258012c6001600160401b03199091161790556101a0604052738d569b4ad099b71372ff7b921aea3679d0851f4d61016081905273f134febe5b1e450a42640b8be7db02dffa6acc9e610180819052600e80546001600160a01b03199081169093179055600f80549092161790556103e890620000d19060129062000871565b620000e29064174876e80062000889565b620000ef90600162000889565b620000fb9190620008ab565b60105560646200010e6012600a62000871565b6200011f9064174876e80062000889565b6200012c90600162000889565b620001389190620008ab565b601155620493e06013556014805461ff0019169055600060158190556019805462ffffff1916905580546001600160a01b031916331790556200017e6012600a62000871565b6200018f9064174876e80062000889565b600080546001600160a01b039081168252600160205260408220929092558054909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001e26012600a62000871565b620001f39064174876e80062000889565b60405190815260200160405180910390a3600080546040516001600160a01b0390911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3466038036200027257600c80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000359565b46606103620002a757600c80546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000359565b4660011480620002b75750466004145b15620002e957600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000359565b4661a86a036200031f57600c80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000359565b4660fa036200035457600c80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000359565b600080fd5b600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d39190620008ce565b6001600160a01b031663c9c65396600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045b9190620008ce565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ce9190620008ce565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600c546200051d92918216911660001962000630565b600c54620005399030906001600160a01b031660001962000630565b600080546001600160a01b0390811682526006602090815260408084208054600160ff1991821681179092553080875283872080548316841790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805483168417905586548616875260089094528286208054821683179055600d5490941685528185208054851682179055918452832080548316821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548316821790559180527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c780549091169091179055620008f9565b6001600160a01b038316620006985760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200068f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007b35781600019048211156200079757620007976200075c565b80851615620007a557918102915b93841c939080029062000777565b509250929050565b600082620007cc575060016200086b565b81620007db575060006200086b565b8160018114620007f45760028114620007ff576200081f565b60019150506200086b565b60ff8411156200081357620008136200075c565b50506001821b6200086b565b5060208310610133831016604e8410600b841016171562000844575081810a6200086b565b62000850838362000772565b80600019048211156200086757620008676200075c565b0290505b92915050565b60006200088260ff841683620007bb565b9392505050565b6000816000190483118215151615620008a657620008a66200075c565b500290565b600082620008c957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008e157600080fd5b81516001600160a01b03811681146200088257600080fd5b614c7580620009096000396000f3fe6080604052600436106103e25760003560e01c80636ab86dc11161020d578063b421626c11610128578063e4fcfd18116100bb578063f7c245ea1161008a578063fdb78c0e1161006f578063fdb78c0e14610cc1578063fe575a8714610ce0578063feadde9c14610d0057600080fd5b8063f7c245ea14610c65578063f94aa1b414610c7a57600080fd5b8063e4fcfd1814610bf5578063eafb5a3c14610c0b578063eec2744e14610c2b578063efe7dc9014610c4b57600080fd5b8063d0b1449d116100f7578063d0b1449d14610b4f578063d3f6a15714610b6f578063dd62ed3e14610b8f578063dea528a114610bd557600080fd5b8063b421626c14610a6b578063c6a276c214610a8b578063c705c56914610aab578063cf84770614610ae457600080fd5b80638a8c523c116101a0578063aa22b1721161016f578063aa22b17214610a2b578063ab5cb5a614610a4b578063b1b08f711461065f578063b3d514fb1461065f57600080fd5b80638a8c523c1461099b57806395d89b41146109b05780639dc67615146109f6578063a9059cbb14610a0b57600080fd5b8063715018a6116101dc578063715018a61461093357806380c581d114610948578063893d20e8146109685780638a63bd9b1461098657600080fd5b80636ab86dc1146108b35780636b639a25146108c85780636ebd0078146108e857806370a08231146108fd57600080fd5b80632e8fa821116102fd5780634ada218b11610290578063590ffdce1161025f578063590ffdce1461080a5780635cce86cd1461082a5780636372c68f146108635780636386c1c71461088357600080fd5b80634ada218b146107725780634fb2e45d146107915780634fbee193146107b157806350a8e016146107ea57600080fd5b806334cd8260116102cc57806334cd8260146106f257806336fddb04146107125780633f3cf56c14610732578063452ed4f11461075257600080fd5b80632e8fa82114610675578063313ce5671461068b57806332cde664146106b257806333251a0b146106d257600080fd5b80630dcbcf1c1161037557806323b872dd1161034457806323b872dd146105ff578063260039571461061f5780632610eaca1461063f5780632b28fc7a1461065f57600080fd5b80630dcbcf1c1461057c5780630fa604e4146105b557806318160ddd146105ca578063218950bc146105df57600080fd5b8063069d955f116103b1578063069d955f1461048757806306fdde03146104dd5780630758d9241461052c578063095ea7b31461054c57600080fd5b806303fd2a45146103ee5780630445b66714610421578063044df7261461044557806305bbedb61461046757600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042d57600080fd5b5061043760175481565b604051908152602001610418565b34801561045157600080fd5b50610465610460366004614315565b610d20565b005b34801561047357600080fd5b5061046561048236600461445b565b610e0a565b34801561049357600080fd5b50600a546104b89061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610418565b3480156104e957600080fd5b5060408051808201909152600f81527f4d7973746572696f75732044654669000000000000000000000000000000000060208201525b60405161041891906144fa565b34801561053857600080fd5b50600c54610404906001600160a01b031681565b34801561055857600080fd5b5061056c61056736600461450d565b610f2d565b6040519015158152602001610418565b34801561058857600080fd5b5061056c610597366004614539565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105c157600080fd5b50610437610f9a565b3480156105d657600080fd5b50610437610fba565b3480156105eb57600080fd5b506104656105fa366004614556565b610ffe565b34801561060b57600080fd5b5061056c61061a366004614584565b611117565b34801561062b57600080fd5b5061046561063a3660046145c5565b61118f565b34801561064b57600080fd5b5061046561065a3660046145e7565b6112ee565b34801561066b57600080fd5b506104376107d081565b34801561068157600080fd5b5061043760185481565b34801561069757600080fd5b506106a0611464565b60405160ff9091168152602001610418565b3480156106be57600080fd5b506104656106cd3660046146b9565b611493565b3480156106de57600080fd5b506104656106ed366004614539565b611597565b3480156106fe57600080fd5b5061046561070d3660046146fc565b611675565b34801561071e57600080fd5b5061046561072d366004614737565b611740565b34801561073e57600080fd5b5061046561074d3660046145c5565b6117c5565b34801561075e57600080fd5b50600d54610404906001600160a01b031681565b34801561077e57600080fd5b5060195461056c90610100900460ff1681565b34801561079d57600080fd5b506104656107ac366004614539565b611924565b3480156107bd57600080fd5b5061056c6107cc366004614539565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107f657600080fd5b5060195461056c9062010000900460ff1681565b34801561081657600080fd5b50610465610825366004614737565b611b8b565b34801561083657600080fd5b5061056c610845366004614539565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561086f57600080fd5b5061043761087e366004614539565b611c10565b34801561088f57600080fd5b506108a361089e366004614539565b611c99565b6040516104189493929190614755565b3480156108bf57600080fd5b50610465611d3a565b3480156108d457600080fd5b506104656108e3366004614737565b611df9565b3480156108f457600080fd5b50610437611f68565b34801561090957600080fd5b50610437610918366004614539565b6001600160a01b031660009081526001602052604090205490565b34801561093f57600080fd5b50610465611f83565b34801561095457600080fd5b50610465610963366004614737565b612061565b34801561097457600080fd5b506000546001600160a01b0316610404565b34801561099257600080fd5b5061056c61221a565b3480156109a757600080fd5b50610465612295565b3480156109bc57600080fd5b5060408051808201909152600681527f244d446546690000000000000000000000000000000000000000000000000000602082015261051f565b348015610a0257600080fd5b50610465612566565b348015610a1757600080fd5b5061056c610a2636600461450d565b6125de565b348015610a3757600080fd5b50610465610a463660046146b9565b6125f2565b348015610a5757600080fd5b50610437610a66366004614539565b6127aa565b348015610a7757600080fd5b50610465610a863660046147ad565b6127f6565b348015610a9757600080fd5b50610465610aa6366004614539565b6128e9565b348015610ab757600080fd5b5061056c610ac6366004614539565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610af057600080fd5b50600b54610b219061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610418565b348015610b5b57600080fd5b50610465610b6a3660046147d9565b612996565b348015610b7b57600080fd5b50610465610b8a366004614556565b612a04565b348015610b9b57600080fd5b50610437610baa366004614556565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610be157600080fd5b50610465610bf0366004614315565b612a99565b348015610c0157600080fd5b5061043760155481565b348015610c1757600080fd5b50610465610c26366004614539565b612b20565b348015610c3757600080fd5b50610465610c46366004614737565b612edb565b348015610c5757600080fd5b5060195461056c9060ff1681565b348015610c7157600080fd5b50610437612fc7565b348015610c8657600080fd5b50600e54600f54610ca1916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610418565b348015610ccd57600080fd5b5060145461056c90610100900460ff1681565b348015610cec57600080fd5b5061056c610cfb366004614539565b61304e565b348015610d0c57600080fd5b50610465610d1b366004614737565b6130dd565b6000546001600160a01b03163314610d7f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6019546040517fefbdbabd0000000000000000000000000000000000000000000000000000000081528315156004820152821515602482015263010000009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6019546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610eb59085908590600401614836565b600060405180830381600087803b158015610ecf57600080fd5b505af1158015610ee3573d6000803e3d6000fd5b5050505060005b8251811015610f2857610f16838281518110610f0857610f0861485a565b602002602001015183611df9565b80610f20816148b8565b915050610eea565b505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f889086815260200190565b60405180910390a35060015b92915050565b6000610fa86012600a6149b6565b601154610fb591906149c5565b905090565b6000610fc86012600a6149b6565b610fd79064174876e800614a00565b600003610fe357600080fd5b610fef6012600a6149b6565b610fb59064174876e800614a00565b6000546001600160a01b031633146110585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b601954610100900460ff161561106d57600080fd5b6001600160a01b038116301480159061108f57506001600160a01b0382163014155b80156110ad5750816001600160a01b0316816001600160a01b031614155b6110b657600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191461117c576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611176908490614a1f565b90915550505b611187848484613162565b949350505050565b6000546001600160a01b031633146111e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6103e86111f86012600a6149b6565b6112079064174876e800614a00565b61121191906149c5565b818361121f6012600a6149b6565b61122e9064174876e800614a00565b6112389190614a00565b61124291906149c5565b10156112b65760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d76565b80826112c46012600a6149b6565b6112d39064174876e800614a00565b6112dd9190614a00565b6112e791906149c5565b6011555050565b6000546001600160a01b031633146113485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b80518251146113995760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d76565b60005b82518160ff161015610f2857818160ff16815181106113bd576113bd61485a565b60200260200101516113e4336001600160a01b031660009081526001602052604090205490565b10156113ef57600080fd5b61145133848360ff16815181106114085761140861485a565b60200260200101516012600a61141e91906149b6565b858560ff16815181106114335761143361485a565b60200260200101516114459190614a00565b6000806000600161361c565b508061145c81614a36565b91505061139c565b60006114726012600a6149b6565b6114819064174876e800614a00565b60000361148d57600080fd5b50601290565b6000546001600160a01b031633146114ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6107d08361ffff161115801561150957506107d08261ffff1611155b801561151b57506107d08161ffff1611155b61152457600080fd5b600a805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b906024015b600060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b83856116dd6012600a6149b6565b6116ec9064174876e800614a00565b6116f69190614a00565b61170091906149c5565b60175581836117116012600a6149b6565b6117209064174876e800614a00565b61172a9190614a00565b61173491906149c5565b60185560155550505050565b6000546001600160a01b0316331461179a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461181f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6103e861182e6012600a6149b6565b61183d9064174876e800614a00565b61184791906149c5565b81836118556012600a6149b6565b6118649064174876e800614a00565b61186e9190614a00565b61187891906149c5565b10156118ec5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d76565b80826118fa6012600a6149b6565b6119099064174876e800614a00565b6119139190614a00565b61191d91906149c5565b6010555050565b6000546001600160a01b0316331461197e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b0381166119fa5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d76565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611a985760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d76565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611b3357600080546001600160a01b03168082526001602052604090912054611b3191908390611445565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611be55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6012546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa158015611c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190614a55565b6012546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa158015611d03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2b9190810190614ad2565b93509350935093509193509193565b6000546001600160a01b03163314611d945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611de457600080fd5b505af193505050508015611df6575060015b50565b6000546001600160a01b03163314611e535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b0382163014801590611e7a5750600d546001600160a01b03838116911614155b611e8357600080fd5b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611f02576012546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610dd4565b6012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401610dd4565b5050565b6000611f766012600a6149b6565b601054610fb591906149c5565b6000546001600160a01b03163314611fdd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b600080546001600160a01b039081168252600660209081526040808420805460ff199081169091558454909316845260089091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146120bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b801515600003612138576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401610dd4565b6003541561219f576203f480600354426121529190614a1f565b1161219f5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610d76565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401610dd4565b600080546001600160a01b031633146122755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b600c5461228f9030906001600160a01b03166000196138b5565b50600190565b6000546001600160a01b031633146122ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b601954610100900460ff16156123475760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d76565b60195462010000900460ff1661239f5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d76565b601954630100000090046001600160a01b03166123e757601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526012606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561247357600080fd5b505af1925050508015612484575060015b50601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124d557600080fd5b505af19250505080156124e6575060015b506019805461ff001916610100179055600d546001600160a01b031660009081526001602052604090205461271090612520906005614a00565b61252a91906149c5565b601755600d546001600160a01b03166000908152600160205260409020546103e890612557906001614a00565b61256191906149c5565b601855565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b1580156125c457600080fd5b505af11580156125d8573d6000803e3d6000fd5b50505050565b60006125eb338484613162565b9392505050565b6000546001600160a01b0316331461264c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b600b805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806126c48385614b7f565b6126ce9190614b7f565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff93841602179055600a5460009161271f9162010000810482169116614b7f565b600b5461ffff918216925066010000000000009004168110156125d85760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610d76565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611c58565b6000546001600160a01b031633146128505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b61285b81600a614ba5565b6128659083614a00565b6012546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b1580156128cc57600080fd5b505af11580156128e0573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146129435760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6019546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611640565b6000546001600160a01b031633146129f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b620b71b081106129ff57600080fd5b601355565b6000546001600160a01b03163314612a5e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b600e80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600f8054929093169116179055565b6000546001600160a01b03163314612af35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6014805461ff00191661010093151593909302929092179091556019805460ff1916911515919091179055565b6000546001600160a01b03163314612b7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be39190614bb1565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c549190614bb1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdb9190614bb1565b90506001600160a01b038116612e7957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4d9190614bb1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190614bb1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e479190614bb1565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612ea2565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f289030906000196138b5565b6000546001600160a01b03163314612f355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6019546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b158015612fa557600080fd5b505af1158015612fb9573d6000803e3d6000fd5b50505050611f648282611df9565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa15801561302a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190614a55565b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa1580156130b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190614bce565b6000546001600160a01b031633146131375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b60006001600160a01b0384166131e05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b03831661325c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d76565b600082116132d25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613300576001925061332e565b6001600160a01b03861660009081526002602052604090205460ff161561332a576001915061332e565b5060015b6133388787613a0d565b1561354357601954610100900460ff166133945760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d76565b828061339d5750815b15613461576001600160a01b03871660009081526007602052604090205460ff161580156133e457506001600160a01b03861660009081526007602052604090205460ff16155b15613461576010548511156134615760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d76565b600c546001600160a01b0387811691161480159061347d575081155b15613543576001600160a01b03861660009081526007602052604090205460ff1661354357601154856134c5886001600160a01b031660009081526001602052604090205490565b6134cf9190614beb565b11156135435760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b03871660009081526006602052604090205460019060ff168061358557506001600160a01b03871660009081526006602052604090205460ff165b1561358e575060005b82156136015760145460ff161580156135ae5750601454610100900460ff165b1561360157426015546016546135c49190614beb565b1015613601573060009081526001602052604090205460175481106135ff5760185481106135f157506018545b6135fa81613ade565b426016555b505b6136108888888488888861361c565b98975050505050505050565b60195460009062010000900460ff1661371e576136398888613e8c565b60195462010000900460ff1615801561365757506136578888613a0d565b801561367c57506001600160a01b03881660009081526005602052604090205460ff16155b80156136a157506001600160a01b03871660009081526005602052604090205460ff16155b80156136ab575081155b1561371e5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610d76565b6137288888613a0d565b156137dc576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015289811660248301526044820189905260009263010000009004169063ecd07a53906064016020604051808303816000875af19250505080156137c5575060408051601f3d908101601f191682019092526137c291810190614bce565b60015b6137ce57600080fd5b9050806137da57600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290613804908490614a1f565b9091555086905085156138215761381e898887878761403b565b90505b6001600160a01b03881660009081526001602052604081208054839290613849908490614beb565b9091555061385990508989614126565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161389e91815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b0383166139305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b0382166139ac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613a3a57506000546001600160a01b03838116911614155b8015613a5157506000546001600160a01b03163214155b8015613a7657506001600160a01b03821660009081526009602052604090205460ff16155b8015613a9b57506001600160a01b03831660009081526009602052604090205460ff16155b8015613ab257506001600160a01b03821661dead14155b8015613ac657506001600160a01b03821615155b80156125eb575050506001600160a01b031630141590565b6014805460ff1916600117905560408051608081018252600b5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613b3f5750613e7f565b306000908152600460209081526040808320600c546001600160a01b0316845290915290205460001914613b9857306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613bcd57613bcd61485a565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c639190614bb1565b81600181518110613c7657613c7661485a565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613cd5908690600090869030904290600401614c03565b600060405180830381600087803b158015613cef57600080fd5b505af1158015613d03573d6000803e3d6000fd5b5050506060830151835147925060009161ffff90811691613d25911684614a00565b613d2f91906149c5565b90506000846060015161ffff16856020015161ffff1684613d509190614a00565b613d5a91906149c5565b90506000613d688284614beb565b613d729085614a1f565b865190915061ffff1615613de457601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613dd057600080fd5b505af193505050508015613de2575060015b505b604086015161ffff1615613e2e57600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613e2c573d6000803e3d6000fd5b505b602086015161ffff1615613e7857600f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613e76573d6000803e3d6000fd5b505b5050505050505b506014805460ff19169055565b60195462010000900460ff1615613f0b5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d76565b613f158282613a0d565b158015613f2f5750600d546001600160a01b038281169116145b15611f64576001600160a01b038083166000908152600960205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017908190556301000000900416613fc457601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b0316613ff4576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156140515750600a5461ffff1661407b565b831561406a5750600a5462010000900461ffff1661407b565b50600a54640100000000900461ffff165b8060000361408c578591505061411d565b600061271061409b8389614a00565b6140a591906149c5565b306000908152600160205260408120805492935083929091906140c9908490614beb565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36141188188614a1f565b925050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff166141d0576012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156141bd57600080fd5b505af19250505080156141ce575060015b505b6001600160a01b03811660009081526008602052604090205460ff1661427a576012546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561426757600080fd5b505af1925050508015614278575060015b505b60195460ff1615611f64576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916142d39160040190815260200190565b600060405180830381600087803b1580156142ed57600080fd5b505af19250505080156142fe575060015b15611f64575050565b8015158114611df657600080fd5b6000806040838503121561432857600080fd5b823561433381614307565b9150602083013561434381614307565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156143a6576143a661434e565b604052919050565b600067ffffffffffffffff8211156143c8576143c861434e565b5060051b60200190565b6001600160a01b0381168114611df657600080fd5b600082601f8301126143f857600080fd5b8135602061440d614408836143ae565b61437d565b82815260059290921b8401810191818101908684111561442c57600080fd5b8286015b84811015614450578035614443816143d2565b8352918301918301614430565b509695505050505050565b6000806040838503121561446e57600080fd5b823567ffffffffffffffff81111561448557600080fd5b614491858286016143e7565b925050602083013561434381614307565b60005b838110156144bd5781810151838201526020016144a5565b838111156125d85750506000910152565b600081518084526144e68160208601602086016144a2565b601f01601f19169290920160200192915050565b6020815260006125eb60208301846144ce565b6000806040838503121561452057600080fd5b823561452b816143d2565b946020939093013593505050565b60006020828403121561454b57600080fd5b81356125eb816143d2565b6000806040838503121561456957600080fd5b8235614574816143d2565b91506020830135614343816143d2565b60008060006060848603121561459957600080fd5b83356145a4816143d2565b925060208401356145b4816143d2565b929592945050506040919091013590565b600080604083850312156145d857600080fd5b50508035926020909101359150565b600080604083850312156145fa57600080fd5b823567ffffffffffffffff8082111561461257600080fd5b61461e868387016143e7565b935060209150818501358181111561463557600080fd5b85019050601f8101861361464857600080fd5b8035614656614408826143ae565b81815260059190911b8201830190838101908883111561467557600080fd5b928401925b828410156146935783358252928401929084019061467a565b80955050505050509250929050565b803561ffff811681146146b457600080fd5b919050565b6000806000606084860312156146ce57600080fd5b6146d7846146a2565b92506146e5602085016146a2565b91506146f3604085016146a2565b90509250925092565b600080600080600060a0868803121561471457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561474a57600080fd5b8235614333816143d2565b60808152600061476860808301876144ce565b828103602084015261477a81876144ce565b9050828103604084015261478e81866144ce565b905082810360608401526147a281856144ce565b979650505050505050565b6000806000606084860312156147c257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156147eb57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561482b5781516001600160a01b031687529582019590820190600101614806565b509495945050505050565b60408152600061484960408301856147f2565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060001982036148cb576148cb614889565b5060010190565b600181815b8085111561490d5781600019048211156148f3576148f3614889565b8085161561490057918102915b93841c93908002906148d7565b509250929050565b60008261492457506001610f94565b8161493157506000610f94565b816001811461494757600281146149515761496d565b6001915050610f94565b60ff84111561496257614962614889565b50506001821b610f94565b5060208310610133831016604e8410600b8410161715614990575081810a610f94565b61499a83836148d2565b80600019048211156149ae576149ae614889565b029392505050565b60006125eb60ff841683614915565b6000826149fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614a1a57614a1a614889565b500290565b600082821015614a3157614a31614889565b500390565b600060ff821660ff8103614a4c57614a4c614889565b60010192915050565b600060208284031215614a6757600080fd5b5051919050565b600082601f830112614a7f57600080fd5b815167ffffffffffffffff811115614a9957614a9961434e565b614aac6020601f19601f8401160161437d565b818152846020838601011115614ac157600080fd5b6111878260208301602087016144a2565b60008060008060808587031215614ae857600080fd5b845167ffffffffffffffff80821115614b0057600080fd5b614b0c88838901614a6e565b95506020870151915080821115614b2257600080fd5b614b2e88838901614a6e565b94506040870151915080821115614b4457600080fd5b614b5088838901614a6e565b93506060870151915080821115614b6657600080fd5b50614b7387828801614a6e565b91505092959194509250565b600061ffff808316818516808303821115614b9c57614b9c614889565b01949350505050565b60006125eb8383614915565b600060208284031215614bc357600080fd5b81516125eb816143d2565b600060208284031215614be057600080fd5b81516125eb81614307565b60008219821115614bfe57614bfe614889565b500190565b85815284602082015260a060408201526000614c2260a08301866147f2565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220b1214af707302c39f7af5bed656874ff79dcb1f2242af61408bb5e3a8839003364736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103e25760003560e01c80636ab86dc11161020d578063b421626c11610128578063e4fcfd18116100bb578063f7c245ea1161008a578063fdb78c0e1161006f578063fdb78c0e14610cc1578063fe575a8714610ce0578063feadde9c14610d0057600080fd5b8063f7c245ea14610c65578063f94aa1b414610c7a57600080fd5b8063e4fcfd1814610bf5578063eafb5a3c14610c0b578063eec2744e14610c2b578063efe7dc9014610c4b57600080fd5b8063d0b1449d116100f7578063d0b1449d14610b4f578063d3f6a15714610b6f578063dd62ed3e14610b8f578063dea528a114610bd557600080fd5b8063b421626c14610a6b578063c6a276c214610a8b578063c705c56914610aab578063cf84770614610ae457600080fd5b80638a8c523c116101a0578063aa22b1721161016f578063aa22b17214610a2b578063ab5cb5a614610a4b578063b1b08f711461065f578063b3d514fb1461065f57600080fd5b80638a8c523c1461099b57806395d89b41146109b05780639dc67615146109f6578063a9059cbb14610a0b57600080fd5b8063715018a6116101dc578063715018a61461093357806380c581d114610948578063893d20e8146109685780638a63bd9b1461098657600080fd5b80636ab86dc1146108b35780636b639a25146108c85780636ebd0078146108e857806370a08231146108fd57600080fd5b80632e8fa821116102fd5780634ada218b11610290578063590ffdce1161025f578063590ffdce1461080a5780635cce86cd1461082a5780636372c68f146108635780636386c1c71461088357600080fd5b80634ada218b146107725780634fb2e45d146107915780634fbee193146107b157806350a8e016146107ea57600080fd5b806334cd8260116102cc57806334cd8260146106f257806336fddb04146107125780633f3cf56c14610732578063452ed4f11461075257600080fd5b80632e8fa82114610675578063313ce5671461068b57806332cde664146106b257806333251a0b146106d257600080fd5b80630dcbcf1c1161037557806323b872dd1161034457806323b872dd146105ff578063260039571461061f5780632610eaca1461063f5780632b28fc7a1461065f57600080fd5b80630dcbcf1c1461057c5780630fa604e4146105b557806318160ddd146105ca578063218950bc146105df57600080fd5b8063069d955f116103b1578063069d955f1461048757806306fdde03146104dd5780630758d9241461052c578063095ea7b31461054c57600080fd5b806303fd2a45146103ee5780630445b66714610421578063044df7261461044557806305bbedb61461046757600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561042d57600080fd5b5061043760175481565b604051908152602001610418565b34801561045157600080fd5b50610465610460366004614315565b610d20565b005b34801561047357600080fd5b5061046561048236600461445b565b610e0a565b34801561049357600080fd5b50600a546104b89061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610418565b3480156104e957600080fd5b5060408051808201909152600f81527f4d7973746572696f75732044654669000000000000000000000000000000000060208201525b60405161041891906144fa565b34801561053857600080fd5b50600c54610404906001600160a01b031681565b34801561055857600080fd5b5061056c61056736600461450d565b610f2d565b6040519015158152602001610418565b34801561058857600080fd5b5061056c610597366004614539565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156105c157600080fd5b50610437610f9a565b3480156105d657600080fd5b50610437610fba565b3480156105eb57600080fd5b506104656105fa366004614556565b610ffe565b34801561060b57600080fd5b5061056c61061a366004614584565b611117565b34801561062b57600080fd5b5061046561063a3660046145c5565b61118f565b34801561064b57600080fd5b5061046561065a3660046145e7565b6112ee565b34801561066b57600080fd5b506104376107d081565b34801561068157600080fd5b5061043760185481565b34801561069757600080fd5b506106a0611464565b60405160ff9091168152602001610418565b3480156106be57600080fd5b506104656106cd3660046146b9565b611493565b3480156106de57600080fd5b506104656106ed366004614539565b611597565b3480156106fe57600080fd5b5061046561070d3660046146fc565b611675565b34801561071e57600080fd5b5061046561072d366004614737565b611740565b34801561073e57600080fd5b5061046561074d3660046145c5565b6117c5565b34801561075e57600080fd5b50600d54610404906001600160a01b031681565b34801561077e57600080fd5b5060195461056c90610100900460ff1681565b34801561079d57600080fd5b506104656107ac366004614539565b611924565b3480156107bd57600080fd5b5061056c6107cc366004614539565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107f657600080fd5b5060195461056c9062010000900460ff1681565b34801561081657600080fd5b50610465610825366004614737565b611b8b565b34801561083657600080fd5b5061056c610845366004614539565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561086f57600080fd5b5061043761087e366004614539565b611c10565b34801561088f57600080fd5b506108a361089e366004614539565b611c99565b6040516104189493929190614755565b3480156108bf57600080fd5b50610465611d3a565b3480156108d457600080fd5b506104656108e3366004614737565b611df9565b3480156108f457600080fd5b50610437611f68565b34801561090957600080fd5b50610437610918366004614539565b6001600160a01b031660009081526001602052604090205490565b34801561093f57600080fd5b50610465611f83565b34801561095457600080fd5b50610465610963366004614737565b612061565b34801561097457600080fd5b506000546001600160a01b0316610404565b34801561099257600080fd5b5061056c61221a565b3480156109a757600080fd5b50610465612295565b3480156109bc57600080fd5b5060408051808201909152600681527f244d446546690000000000000000000000000000000000000000000000000000602082015261051f565b348015610a0257600080fd5b50610465612566565b348015610a1757600080fd5b5061056c610a2636600461450d565b6125de565b348015610a3757600080fd5b50610465610a463660046146b9565b6125f2565b348015610a5757600080fd5b50610437610a66366004614539565b6127aa565b348015610a7757600080fd5b50610465610a863660046147ad565b6127f6565b348015610a9757600080fd5b50610465610aa6366004614539565b6128e9565b348015610ab757600080fd5b5061056c610ac6366004614539565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610af057600080fd5b50600b54610b219061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610418565b348015610b5b57600080fd5b50610465610b6a3660046147d9565b612996565b348015610b7b57600080fd5b50610465610b8a366004614556565b612a04565b348015610b9b57600080fd5b50610437610baa366004614556565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610be157600080fd5b50610465610bf0366004614315565b612a99565b348015610c0157600080fd5b5061043760155481565b348015610c1757600080fd5b50610465610c26366004614539565b612b20565b348015610c3757600080fd5b50610465610c46366004614737565b612edb565b348015610c5757600080fd5b5060195461056c9060ff1681565b348015610c7157600080fd5b50610437612fc7565b348015610c8657600080fd5b50600e54600f54610ca1916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610418565b348015610ccd57600080fd5b5060145461056c90610100900460ff1681565b348015610cec57600080fd5b5061056c610cfb366004614539565b61304e565b348015610d0c57600080fd5b50610465610d1b366004614737565b6130dd565b6000546001600160a01b03163314610d7f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6019546040517fefbdbabd0000000000000000000000000000000000000000000000000000000081528315156004820152821515602482015263010000009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610dee57600080fd5b505af1158015610e02573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6019546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610eb59085908590600401614836565b600060405180830381600087803b158015610ecf57600080fd5b505af1158015610ee3573d6000803e3d6000fd5b5050505060005b8251811015610f2857610f16838281518110610f0857610f0861485a565b602002602001015183611df9565b80610f20816148b8565b915050610eea565b505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f889086815260200190565b60405180910390a35060015b92915050565b6000610fa86012600a6149b6565b601154610fb591906149c5565b905090565b6000610fc86012600a6149b6565b610fd79064174876e800614a00565b600003610fe357600080fd5b610fef6012600a6149b6565b610fb59064174876e800614a00565b6000546001600160a01b031633146110585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b601954610100900460ff161561106d57600080fd5b6001600160a01b038116301480159061108f57506001600160a01b0382163014155b80156110ad5750816001600160a01b0316816001600160a01b031614155b6110b657600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191461117c576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611176908490614a1f565b90915550505b611187848484613162565b949350505050565b6000546001600160a01b031633146111e95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6103e86111f86012600a6149b6565b6112079064174876e800614a00565b61121191906149c5565b818361121f6012600a6149b6565b61122e9064174876e800614a00565b6112389190614a00565b61124291906149c5565b10156112b65760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610d76565b80826112c46012600a6149b6565b6112d39064174876e800614a00565b6112dd9190614a00565b6112e791906149c5565b6011555050565b6000546001600160a01b031633146113485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b80518251146113995760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610d76565b60005b82518160ff161015610f2857818160ff16815181106113bd576113bd61485a565b60200260200101516113e4336001600160a01b031660009081526001602052604090205490565b10156113ef57600080fd5b61145133848360ff16815181106114085761140861485a565b60200260200101516012600a61141e91906149b6565b858560ff16815181106114335761143361485a565b60200260200101516114459190614a00565b6000806000600161361c565b508061145c81614a36565b91505061139c565b60006114726012600a6149b6565b6114819064174876e800614a00565b60000361148d57600080fd5b50601290565b6000546001600160a01b031633146114ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6107d08361ffff161115801561150957506107d08261ffff1611155b801561151b57506107d08161ffff1611155b61152457600080fd5b600a805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146115f15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b906024015b600060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146116cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b83856116dd6012600a6149b6565b6116ec9064174876e800614a00565b6116f69190614a00565b61170091906149c5565b60175581836117116012600a6149b6565b6117209064174876e800614a00565b61172a9190614a00565b61173491906149c5565b60185560155550505050565b6000546001600160a01b0316331461179a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461181f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6103e861182e6012600a6149b6565b61183d9064174876e800614a00565b61184791906149c5565b81836118556012600a6149b6565b6118649064174876e800614a00565b61186e9190614a00565b61187891906149c5565b10156118ec5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610d76565b80826118fa6012600a6149b6565b6119099064174876e800614a00565b6119139190614a00565b61191d91906149c5565b6010555050565b6000546001600160a01b0316331461197e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b0381166119fa5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d76565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611a985760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610d76565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611b3357600080546001600160a01b03168082526001602052604090912054611b3191908390611445565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611be55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6012546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa158015611c75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190614a55565b6012546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa158015611d03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2b9190810190614ad2565b93509350935093509193509193565b6000546001600160a01b03163314611d945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611de457600080fd5b505af193505050508015611df6575060015b50565b6000546001600160a01b03163314611e535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b0382163014801590611e7a5750600d546001600160a01b03838116911614155b611e8357600080fd5b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611f02576012546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610dd4565b6012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401610dd4565b5050565b6000611f766012600a6149b6565b601054610fb591906149c5565b6000546001600160a01b03163314611fdd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b600080546001600160a01b039081168252600660209081526040808420805460ff199081169091558454909316845260089091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146120bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b801515600003612138576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401610dd4565b6003541561219f576203f480600354426121529190614a1f565b1161219f5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610d76565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401610dd4565b600080546001600160a01b031633146122755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b600c5461228f9030906001600160a01b03166000196138b5565b50600190565b6000546001600160a01b031633146122ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b601954610100900460ff16156123475760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d76565b60195462010000900460ff1661239f5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610d76565b601954630100000090046001600160a01b03166123e757601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526012606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561247357600080fd5b505af1925050508015612484575060015b50601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124d557600080fd5b505af19250505080156124e6575060015b506019805461ff001916610100179055600d546001600160a01b031660009081526001602052604090205461271090612520906005614a00565b61252a91906149c5565b601755600d546001600160a01b03166000908152600160205260409020546103e890612557906001614a00565b61256191906149c5565b601855565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b1580156125c457600080fd5b505af11580156125d8573d6000803e3d6000fd5b50505050565b60006125eb338484613162565b9392505050565b6000546001600160a01b0316331461264c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b600b805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909416928816929092179290921716179055806126c48385614b7f565b6126ce9190614b7f565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff93841602179055600a5460009161271f9162010000810482169116614b7f565b600b5461ffff918216925066010000000000009004168110156125d85760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610d76565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611c58565b6000546001600160a01b031633146128505760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b61285b81600a614ba5565b6128659083614a00565b6012546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b1580156128cc57600080fd5b505af11580156128e0573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146129435760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6019546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611640565b6000546001600160a01b031633146129f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b620b71b081106129ff57600080fd5b601355565b6000546001600160a01b03163314612a5e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b600e80546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff1991821617909155600f8054929093169116179055565b6000546001600160a01b03163314612af35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6014805461ff00191661010093151593909302929092179091556019805460ff1916911515919091179055565b6000546001600160a01b03163314612b7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be39190614bb1565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c549190614bb1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cdb9190614bb1565b90506001600160a01b038116612e7957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4d9190614bb1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbe9190614bb1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e479190614bb1565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612ea2565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f289030906000196138b5565b6000546001600160a01b03163314612f355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6019546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b158015612fa557600080fd5b505af1158015612fb9573d6000803e3d6000fd5b50505050611f648282611df9565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa15801561302a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb59190614a55565b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa1580156130b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f949190614bce565b6000546001600160a01b031633146131375760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d76565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b60006001600160a01b0384166131e05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b03831661325c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610d76565b600082116132d25760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613300576001925061332e565b6001600160a01b03861660009081526002602052604090205460ff161561332a576001915061332e565b5060015b6133388787613a0d565b1561354357601954610100900460ff166133945760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d76565b828061339d5750815b15613461576001600160a01b03871660009081526007602052604090205460ff161580156133e457506001600160a01b03861660009081526007602052604090205460ff16155b15613461576010548511156134615760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610d76565b600c546001600160a01b0387811691161480159061347d575081155b15613543576001600160a01b03861660009081526007602052604090205460ff1661354357601154856134c5886001600160a01b031660009081526001602052604090205490565b6134cf9190614beb565b11156135435760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b03871660009081526006602052604090205460019060ff168061358557506001600160a01b03871660009081526006602052604090205460ff165b1561358e575060005b82156136015760145460ff161580156135ae5750601454610100900460ff165b1561360157426015546016546135c49190614beb565b1015613601573060009081526001602052604090205460175481106135ff5760185481106135f157506018545b6135fa81613ade565b426016555b505b6136108888888488888861361c565b98975050505050505050565b60195460009062010000900460ff1661371e576136398888613e8c565b60195462010000900460ff1615801561365757506136578888613a0d565b801561367c57506001600160a01b03881660009081526005602052604090205460ff16155b80156136a157506001600160a01b03871660009081526005602052604090205460ff16155b80156136ab575081155b1561371e5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610d76565b6137288888613a0d565b156137dc576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015289811660248301526044820189905260009263010000009004169063ecd07a53906064016020604051808303816000875af19250505080156137c5575060408051601f3d908101601f191682019092526137c291810190614bce565b60015b6137ce57600080fd5b9050806137da57600080fd5b505b6001600160a01b03881660009081526001602052604081208054889290613804908490614a1f565b9091555086905085156138215761381e898887878761403b565b90505b6001600160a01b03881660009081526001602052604081208054839290613849908490614beb565b9091555061385990508989614126565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161389e91815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b0383166139305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b0382166139ac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610d76565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613a3a57506000546001600160a01b03838116911614155b8015613a5157506000546001600160a01b03163214155b8015613a7657506001600160a01b03821660009081526009602052604090205460ff16155b8015613a9b57506001600160a01b03831660009081526009602052604090205460ff16155b8015613ab257506001600160a01b03821661dead14155b8015613ac657506001600160a01b03821615155b80156125eb575050506001600160a01b031630141590565b6014805460ff1916600117905560408051608081018252600b5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613b3f5750613e7f565b306000908152600460209081526040808320600c546001600160a01b0316845290915290205460001914613b9857306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613bcd57613bcd61485a565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c639190614bb1565b81600181518110613c7657613c7661485a565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613cd5908690600090869030904290600401614c03565b600060405180830381600087803b158015613cef57600080fd5b505af1158015613d03573d6000803e3d6000fd5b5050506060830151835147925060009161ffff90811691613d25911684614a00565b613d2f91906149c5565b90506000846060015161ffff16856020015161ffff1684613d509190614a00565b613d5a91906149c5565b90506000613d688284614beb565b613d729085614a1f565b865190915061ffff1615613de457601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613dd057600080fd5b505af193505050508015613de2575060015b505b604086015161ffff1615613e2e57600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613e2c573d6000803e3d6000fd5b505b602086015161ffff1615613e7857600f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613e76573d6000803e3d6000fd5b505b5050505050505b506014805460ff19169055565b60195462010000900460ff1615613f0b5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610d76565b613f158282613a0d565b158015613f2f5750600d546001600160a01b038281169116145b15611f64576001600160a01b038083166000908152600960205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017908190556301000000900416613fc457601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b0316613ff4576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156140515750600a5461ffff1661407b565b831561406a5750600a5462010000900461ffff1661407b565b50600a54640100000000900461ffff165b8060000361408c578591505061411d565b600061271061409b8389614a00565b6140a591906149c5565b306000908152600160205260408120805492935083929091906140c9908490614beb565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36141188188614a1f565b925050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff166141d0576012546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156141bd57600080fd5b505af19250505080156141ce575060015b505b6001600160a01b03811660009081526008602052604090205460ff1661427a576012546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561426757600080fd5b505af1925050508015614278575060015b505b60195460ff1615611f64576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916142d39160040190815260200190565b600060405180830381600087803b1580156142ed57600080fd5b505af19250505080156142fe575060015b15611f64575050565b8015158114611df657600080fd5b6000806040838503121561432857600080fd5b823561433381614307565b9150602083013561434381614307565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156143a6576143a661434e565b604052919050565b600067ffffffffffffffff8211156143c8576143c861434e565b5060051b60200190565b6001600160a01b0381168114611df657600080fd5b600082601f8301126143f857600080fd5b8135602061440d614408836143ae565b61437d565b82815260059290921b8401810191818101908684111561442c57600080fd5b8286015b84811015614450578035614443816143d2565b8352918301918301614430565b509695505050505050565b6000806040838503121561446e57600080fd5b823567ffffffffffffffff81111561448557600080fd5b614491858286016143e7565b925050602083013561434381614307565b60005b838110156144bd5781810151838201526020016144a5565b838111156125d85750506000910152565b600081518084526144e68160208601602086016144a2565b601f01601f19169290920160200192915050565b6020815260006125eb60208301846144ce565b6000806040838503121561452057600080fd5b823561452b816143d2565b946020939093013593505050565b60006020828403121561454b57600080fd5b81356125eb816143d2565b6000806040838503121561456957600080fd5b8235614574816143d2565b91506020830135614343816143d2565b60008060006060848603121561459957600080fd5b83356145a4816143d2565b925060208401356145b4816143d2565b929592945050506040919091013590565b600080604083850312156145d857600080fd5b50508035926020909101359150565b600080604083850312156145fa57600080fd5b823567ffffffffffffffff8082111561461257600080fd5b61461e868387016143e7565b935060209150818501358181111561463557600080fd5b85019050601f8101861361464857600080fd5b8035614656614408826143ae565b81815260059190911b8201830190838101908883111561467557600080fd5b928401925b828410156146935783358252928401929084019061467a565b80955050505050509250929050565b803561ffff811681146146b457600080fd5b919050565b6000806000606084860312156146ce57600080fd5b6146d7846146a2565b92506146e5602085016146a2565b91506146f3604085016146a2565b90509250925092565b600080600080600060a0868803121561471457600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561474a57600080fd5b8235614333816143d2565b60808152600061476860808301876144ce565b828103602084015261477a81876144ce565b9050828103604084015261478e81866144ce565b905082810360608401526147a281856144ce565b979650505050505050565b6000806000606084860312156147c257600080fd5b505081359360208301359350604090920135919050565b6000602082840312156147eb57600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561482b5781516001600160a01b031687529582019590820190600101614806565b509495945050505050565b60408152600061484960408301856147f2565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060001982036148cb576148cb614889565b5060010190565b600181815b8085111561490d5781600019048211156148f3576148f3614889565b8085161561490057918102915b93841c93908002906148d7565b509250929050565b60008261492457506001610f94565b8161493157506000610f94565b816001811461494757600281146149515761496d565b6001915050610f94565b60ff84111561496257614962614889565b50506001821b610f94565b5060208310610133831016604e8410600b8410161715614990575081810a610f94565b61499a83836148d2565b80600019048211156149ae576149ae614889565b029392505050565b60006125eb60ff841683614915565b6000826149fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615614a1a57614a1a614889565b500290565b600082821015614a3157614a31614889565b500390565b600060ff821660ff8103614a4c57614a4c614889565b60010192915050565b600060208284031215614a6757600080fd5b5051919050565b600082601f830112614a7f57600080fd5b815167ffffffffffffffff811115614a9957614a9961434e565b614aac6020601f19601f8401160161437d565b818152846020838601011115614ac157600080fd5b6111878260208301602087016144a2565b60008060008060808587031215614ae857600080fd5b845167ffffffffffffffff80821115614b0057600080fd5b614b0c88838901614a6e565b95506020870151915080821115614b2257600080fd5b614b2e88838901614a6e565b94506040870151915080821115614b4457600080fd5b614b5088838901614a6e565b93506060870151915080821115614b6657600080fd5b50614b7387828801614a6e565b91505092959194509250565b600061ffff808316818516808303821115614b9c57614b9c614889565b01949350505050565b60006125eb8383614915565b600060208284031215614bc357600080fd5b81516125eb816143d2565b600060208284031215614be057600080fd5b81516125eb81614307565b60008219821115614bfe57614bfe614889565b500190565b85815284602082015260a060408201526000614c2260a08301866147f2565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220b1214af707302c39f7af5bed656874ff79dcb1f2242af61408bb5e3a8839003364736f6c634300080d0033

Deployed Bytecode Sourcemap

5019:24060:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6712:73;;;;;;;;;;;;6743:42;6712:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6712:73:0;;;;;;;;7508:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;7508:28:0;245:177:1;17431:151:0;;;;;;;;;;-1:-1:-1;17431:151:0;;;;;:::i;:::-;;:::i;:::-;;16690:294;;;;;;;;;;-1:-1:-1;16690:294:0;;;;;:::i;:::-;;:::i;6187:110::-;;;;;;;;;;-1:-1:-1;6187:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;3236:6:1;3269:15;;;3251:34;;3321:15;;;3316:2;3301:18;;3294:43;3373:15;;3353:18;;;3346:43;;;;3214:2;3199:18;6187:110:0;3030:365:1;11990:80:0;;;;;;;;;;-1:-1:-1;12062:5:0;;;;;;;;;;;;;;;;;11990:80;;;;;;;:::i;6651:26::-;;;;;;;;;;-1:-1:-1;6651:26:0;;;;-1:-1:-1;;;;;6651:26:0;;;12411:216;;;;;;;;;;-1:-1:-1;12411:216:0;;;;;:::i;:::-;;:::i;:::-;;;4943:14:1;;4936:22;4918:41;;4906:2;4891:18;12411:216:0;4778:187:1;15474:140:0;;;;;;;;;;-1:-1:-1;15474:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;15572:34:0;15548:4;15572:34;;;:25;:34;;;;;;;;;15474:140;19824:112;;;;;;;;;;;;;:::i;11661:115::-;;;;;;;;;;;;;:::i;14711:335::-;;;;;;;;;;-1:-1:-1;14711:335:0;;;;;:::i;:::-;;:::i;13325:306::-;;;;;;;;;;-1:-1:-1;13325:306:0;;;;;:::i;:::-;;:::i;19435:267::-;;;;;;;;;;-1:-1:-1;19435:267:0;;;;;:::i;:::-;;:::i;28526:418::-;;;;;;;;;;-1:-1:-1;28526:418:0;;;;;:::i;:::-;;:::i;6448:42::-;;;;;;;;;;;;6486:4;6448:42;;7543:25;;;;;;;;;;;;;;;;11782:112;;;;;;;;;;;;;:::i;:::-;;;7644:4:1;7632:17;;;7614:36;;7602:2;7587:18;11782:112:0;7472:184:1;18187:353:0;;;;;;;;;;-1:-1:-1;18187:353:0;;;;;:::i;:::-;;:::i;17189:108::-;;;;;;;;;;-1:-1:-1;17189:108:0;;;;;:::i;:::-;;:::i;20145:338::-;;;;;;;;;;-1:-1:-1;20145:338:0;;;;;:::i;:::-;;:::i;15622:140::-;;;;;;;;;;-1:-1:-1;15622:140:0;;;;;:::i;:::-;;:::i;19158:269::-;;;;;;;;;;-1:-1:-1;19158:269:0;;;;;:::i;:::-;;:::i;6684:21::-;;;;;;;;;;-1:-1:-1;6684:21:0;;;;-1:-1:-1;;;;;6684:21:0;;;7618:34;;;;;;;;;;-1:-1:-1;7618:34:0;;;;;;;;;;;10290:728;;;;;;;;;;-1:-1:-1;10290:728:0;;;;;:::i;:::-;;:::i;15054:127::-;;;;;;;;;;-1:-1:-1;15054:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;15145:28:0;15121:4;15145:28;;;:19;:28;;;;;;;;;15054:127;7659:36;;;;;;;;;;-1:-1:-1;7659:36:0;;;;;;;;;;;16127:134;;;;;;;;;;-1:-1:-1;16127:134:0;;;;;:::i;:::-;;:::i;15334:132::-;;;;;;;;;;-1:-1:-1;15334:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;15428:30:0;15404:4;15428:30;;;:21;:30;;;;;;;;;15334:132;21347:154;;;;;;;;;;-1:-1:-1;21347:154:0;;;;;:::i;:::-;;:::i;21147:192::-;;;;;;;;;;-1:-1:-1;21147:192:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;28952:124::-;;;;;;;;;;;;;:::i;15770:349::-;;;;;;;;;;-1:-1:-1;15770:349:0;;;;;:::i;:::-;;:::i;19710:106::-;;;;;;;;;;;;;:::i;12161:103::-;;;;;;;;;;-1:-1:-1;12161:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;12245:16:0;12227:7;12245:16;;;:7;:16;;;;;;;12161:103;11026:245;;;;;;;;;;;;;:::i;14187:516::-;;;;;;;;;;-1:-1:-1;14187:516:0;;;;;:::i;:::-;;:::i;12076:79::-;;;;;;;;;;-1:-1:-1;12128:7:0;12146:6;-1:-1:-1;;;;;12146:6:0;12076:79;;12984:173;;;;;;;;;;;;;:::i;17590:589::-;;;;;;;;;;;;;:::i;11900:84::-;;;;;;;;;;-1:-1:-1;11974:7:0;;;;;;;;;;;;;;;;;11900:84;;20913:100;;;;;;;;;;;;;:::i;13165:152::-;;;;;;;;;;-1:-1:-1;13165:152:0;;;;;:::i;:::-;;:::i;18548:400::-;;;;;;;;;;-1:-1:-1;18548:400:0;;;;;:::i;:::-;;:::i;21509:150::-;;;;;;;;;;-1:-1:-1;21509:150:0;;;;;:::i;:::-;;:::i;20491:275::-;;;;;;;;;;-1:-1:-1;20491:275:0;;;;;:::i;:::-;;:::i;17305:118::-;;;;;;;;;;-1:-1:-1;17305:118:0;;;;;:::i;:::-;;:::i;15189:137::-;;;;;;;;;;-1:-1:-1;15189:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;15285:33:0;15261:4;15285:33;;;:24;:33;;;;;;;;;15189:137;6306:133;;;;;;;;;;-1:-1:-1;6306:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10274:6:1;10307:15;;;10289:34;;10359:15;;;10354:2;10339:18;;10332:43;10411:15;;;10391:18;;;10384:43;;;;10463:15;;;10458:2;10443:18;;10436:43;10251:3;10236:19;6306:133:0;10041:444:1;20774:131:0;;;;;;;;;;-1:-1:-1;20774:131:0;;;;;:::i;:::-;;:::i;18956:192::-;;;;;;;;;;-1:-1:-1;18956:192:0;;;;;:::i;:::-;;:::i;12270:133::-;;;;;;;;;;-1:-1:-1;12270:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;12372:19:0;;;12354:7;12372:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;12270:133;19944:193;;;;;;;;;;-1:-1:-1;19944:193:0;;;;;:::i;:::-;;:::i;7426:44::-;;;;;;;;;;;;;;;;13639:540;;;;;;;;;;-1:-1:-1;13639:540:0;;;;;:::i;:::-;;:::i;16489:193::-;;;;;;;;;;-1:-1:-1;16489:193:0;;;;;:::i;:::-;;:::i;7575:34::-;;;;;;;;;;-1:-1:-1;7575:34:0;;;;;;;;21021:118;;;;;;;;;;;;;:::i;6976:196::-;;;;;;;;;;-1:-1:-1;6976:196:0;;;;;;-1:-1:-1;;;;;6976:196:0;;;;;;;;;;;-1:-1:-1;;;;;11369:15:1;;;11351:34;;11421:15;;;;11416:2;11401:18;;11394:43;11263:18;6976:196:0;11084:359:1;7380:39:0;;;;;;;;;;-1:-1:-1;7380:39:0;;;;;;;;;;;17056:125;;;;;;;;;;-1:-1:-1;17056:125:0;;;;;:::i;:::-;;:::i;16269:148::-;;;;;;;;;;-1:-1:-1;16269:148:0;;;;;:::i;:::-;;:::i;17431:151::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;;;;;;;;;17526:9:::1;::::0;:48:::1;::::0;;;;11996:14:1;;11989:22;17526:48:0::1;::::0;::::1;11971:41:1::0;12055:14;;12048:22;12028:18;;;12021:50;17526:9:0;;;::::1;-1:-1:-1::0;;;;;17526:9:0::1;::::0;:24:::1;::::0;11944:18:1;;17526:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17431:151:::0;;:::o;16690:294::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;16798:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;16798:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;16836:8;;16846:7;;16798:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16869:9;16865:112;16888:8;:15;16884:1;:19;16865:112;;;16924:41;16944:8;16953:1;16944:11;;;;;;;;:::i;:::-;;;;;;;16957:7;16924:19;:41::i;:::-;16905:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16865:112;;;;16690:294:::0;;:::o;12411:216::-;12515:10;12486:4;12503:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12503:32:0;;;;;;;;;;:41;;;12560:37;12486:4;;12503:32;;12560:37;;;;12538:6;391:25:1;;379:2;364:18;;245:177;12560:37:0;;;;;;;;-1:-1:-1;12615:4:0;12411:216;;;;;:::o;19824:112::-;19869:7;19914:13;5865:2;19914;:13;:::i;:::-;19896:14;;:32;;;;:::i;:::-;19889:39;;19824:112;:::o;11661:115::-;11716:7;5929:15;5865:2;5929;:15;:::i;:::-;5911:34;;5701:15;5911:34;:::i;:::-;11742:1;11731:12;11727:31;;11747:8;;;11727:31;5929:15;5865:2;5929;:15;:::i;:::-;5911:34;;5701:15;5911:34;:::i;14711:335::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;14819:14:::1;::::0;::::1;::::0;::::1;;;14818:15;14810:24;;;::::0;::::1;;-1:-1:-1::0;;;;;14853:29:0;::::1;14877:4;14853:29;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;14886:29:0;::::1;14910:4;14886:29;;14853:62;:94;;;;;14935:12;-1:-1:-1::0;;;;;14919:28:0::1;:12;-1:-1:-1::0;;;;;14919:28:0::1;;;14853:94;14845:103;;;::::0;::::1;;14959:9;:33:::0;;-1:-1:-1;;14959:33:0::1;-1:-1:-1::0;;;;;14959:33:0;;::::1;;::::0;;15003:9:::1;:35:::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;14711:335::o;13325:306::-;-1:-1:-1;;;;;13446:19:0;;13425:4;13446:19;;;:11;:19;;;;;;;;13466:10;13446:31;;;;;;;;-1:-1:-1;;13446:52:0;13442:126;;-1:-1:-1;;;;;13515:19:0;;;;;;:11;:19;;;;;;;;13535:10;13515:31;;;;;;;:41;;13550:6;;13515:19;:41;;13550:6;;13515:41;:::i;:::-;;;;-1:-1:-1;;13442:126:0;13587:36;13597:6;13605:9;13616:6;13587:9;:36::i;:::-;13580:43;13325:306;-1:-1:-1;;;;13325:306:0:o;19435:267::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;19577:4:::1;5929:15;5865:2;5929;:15;:::i;:::-;5911:34;::::0;5701:15:::1;5911:34;:::i;:::-;19567:14;;;;:::i;:::-;19555:7:::0;19544;5929:15:::1;5865:2;5929;:15;:::i;:::-;5911:34;::::0;5701:15:::1;5911:34;:::i;:::-;19534:17;;;;:::i;:::-;19533:29;;;;:::i;:::-;:49;;19525:112;;;::::0;-1:-1:-1;;;19525:112:0;;15843:2:1;19525:112:0::1;::::0;::::1;15825:21:1::0;15882:2;15862:18;;;15855:30;15921:34;15901:18;;;15894:62;15992:20;15972:18;;;15965:48;16030:19;;19525:112:0::1;15641:414:1::0;19525:112:0::1;19687:7:::0;19676;5929:15:::1;5865:2;5929;:15;:::i;:::-;5911:34;::::0;5701:15:::1;5911:34;:::i;:::-;19666:17;;;;:::i;:::-;19665:29;;;;:::i;:::-;19648:14;:46:::0;-1:-1:-1;;19435:267:0:o;28526:418::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;28661:7:::1;:14;28642:8;:15;:33;28634:67;;;::::0;-1:-1:-1;;;28634:67:0;;16262:2:1;28634:67:0::1;::::0;::::1;16244:21:1::0;16301:2;16281:18;;;16274:30;16340:23;16320:18;;;16313:51;16381:18;;28634:67:0::1;16060:345:1::0;28634:67:0::1;28717:7;28712:225;28734:8;:15;28730:1;:19;;;28712:225;;;28804:7;28812:1;28804:10;;;;;;;;;;:::i;:::-;;;;;;;28779:21;28789:10;-1:-1:-1::0;;;;;12245:16:0;12227:7;12245:16;;;:7;:16;;;;;;;12161:103;28779:21:::1;:35;;28771:44;;;::::0;::::1;;28830:95;28848:10;28860:8;28869:1;28860:11;;;;;;;;;;:::i;:::-;;;;;;;5865:2;28884;:13;;;;:::i;:::-;28873:7;28881:1;28873:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;28899:5;28906::::0;28913::::1;28920:4;28830:17;:95::i;:::-;-1:-1:-1::0;28751:3:0;::::1;::::0;::::1;:::i;:::-;;;;28712:225;;11782:112:::0;11834:5;5929:15;5865:2;5929;:15;:::i;:::-;5911:34;;5701:15;5911:34;:::i;:::-;11858:1;11847:12;11843:31;;11863:8;;;11843:31;-1:-1:-1;5865:2:0;;11782:112::o;18187:353::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;6486:4:::1;18294:6;:21;;;;:65;;;;;6536:4;18336:7;:23;;;;18294:65;:117;;;;;6590:4;18380:11;:31;;;;18294:117;18286:126;;;::::0;::::1;;18423:9;:25:::0;;::::1;::::0;;::::1;18459:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;18497:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;18187:353::o;17189:108::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;17258:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17258:31:0::1;::::0;::::1;160:74:1::0;17258:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17258:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17189:108:::0;:::o;20145:338::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;20359:16;20339;5929:15:::1;5865:2;5929;:15;:::i;:::-;5911:34;::::0;5701:15:::1;5911:34;:::i;:::-;20329:26;;;;:::i;:::-;20328:47;;;;:::i;:::-;20312:13;:63:::0;20427:13;20410;5929:15:::1;5865:2;5929;:15;:::i;:::-;5911:34;::::0;5701:15:::1;5911:34;:::i;:::-;20400:23;;;;:::i;:::-;20399:41;;;;:::i;:::-;20386:10;:54:::0;20451:17:::1;:24:::0;-1:-1:-1;;;;20145:338:0:o;15622:140::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;-1:-1:-1;;;;;15714:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;15714:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15622:140::o;19158:269::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;19299:4:::1;5929:15;5865:2;5929;:15;:::i;:::-;5911:34;::::0;5701:15:::1;5911:34;:::i;:::-;19289:14;;;;:::i;:::-;19277:7:::0;19266;5929:15:::1;5865:2;5929;:15;:::i;:::-;5911:34;::::0;5701:15:::1;5911:34;:::i;:::-;19256:17;;;;:::i;:::-;19255:29;;;;:::i;:::-;:49;;19247:117;;;::::0;-1:-1:-1;;;19247:117:0;;16792:2:1;19247:117:0::1;::::0;::::1;16774:21:1::0;16831:2;16811:18;;;16804:30;16870:34;16850:18;;;16843:62;16941:25;16921:18;;;16914:53;16984:19;;19247:117:0::1;16590:419:1::0;19247:117:0::1;19412:7:::0;19401;5929:15:::1;5865:2;5929;:15;:::i;:::-;5911:34;::::0;5701:15:::1;5911:34;:::i;:::-;19391:17;;;;:::i;:::-;19390:29;;;;:::i;:::-;19375:12;:44:::0;-1:-1:-1;;19158:269:0:o;10290:728::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;-1:-1:-1;;;;;10369:22:0;::::1;10361:96;;;::::0;-1:-1:-1;;;10361:96:0;;17216:2:1;10361:96:0::1;::::0;::::1;17198:21:1::0;17255:2;17235:18;;;17228:30;17294:34;17274:18;;;17267:62;17365:31;17345:18;;;17338:59;17414:19;;10361:96:0::1;17014:425:1::0;10361:96:0::1;10476:16:::0;-1:-1:-1;;;;;10476:16:0;::::1;::::0;10468:90:::1;;;::::0;-1:-1:-1;;;10468:90:0;;17216:2:1;10468:90:0::1;::::0;::::1;17198:21:1::0;17255:2;17235:18;;;17228:30;17294:34;17274:18;;;17267:62;17365:31;17345:18;;;17338:59;17414:19;;10468:90:0::1;17014:425:1::0;10468:90:0::1;10599:5;10589:6:::0;;-1:-1:-1;;;;;10589:6:0;;::::1;10569:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;10569:35:0;;::::1;::::0;;;10640:6;;;::::1;10615:32:::0;;:24:::1;:32:::0;;;;;;:40;;;::::1;::::0;;10666:29;;::::1;::::0;;;;;;;;:36;;;::::1;-1:-1:-1::0;10666:36:0;;::::1;::::0;;;10713:34;;;;;;:41;;;;::::1;::::0;::::1;::::0;;10788:6;;;;::::1;12245:16:::0;;;;;;10778:21;10775:134:::1;;10834:6;::::0;;-1:-1:-1;;;;;10834:6:0::1;12245:16:::0;;;:7;:16;;;;;;;10816:81:::1;::::0;10834:6;10842:8;;10852:17:::1;12161:103:::0;10816:81:::1;;10775:134;10929:6;:17:::0;;-1:-1:-1;;10929:17:0::1;-1:-1:-1::0;;;;;10929:17:0;::::1;::::0;;::::1;::::0;;10962:38:::1;::::0;10929:17;;;;10962:38:::1;::::0;10929:6;10962:38:::1;10290:728:::0;:::o;16127:134::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;-1:-1:-1;;;;;16215:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;16215:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16127:134::o;21347:154::-;21448:9;;:45;;;;;-1:-1:-1;;;;;178:55:1;;;21448:45:0;;;160:74:1;21421:7:0;;21448:9;;:32;;133:18:1;;21448:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21147:192::-;21290:9;;:41;;;;;-1:-1:-1;;;;;178:55:1;;;21290:41:0;;;160:74:1;21212:13:0;;;;;;;;21290:9;;:28;;133:18:1;;21290:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21290:41:0;;;;;;;;;;;;:::i;:::-;21283:48;;;;;;;;21147:192;;;;;:::o;28952:124::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;29011:9:::1;;;;;;;;;-1:-1:-1::0;;;;;29011:9:0::1;-1:-1:-1::0;;;;;29011:14:0::1;;29033:21;29011:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29007:62:::0;28952:124::o;15770:349::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;-1:-1:-1;;;;;15865:23:0;::::1;15883:4;15865:23;::::0;::::1;::::0;:43:::1;;-1:-1:-1::0;15902:6:0::1;::::0;-1:-1:-1;;;;;15892:16:0;;::::1;15902:6:::0;::::1;15892:16;;15865:43;15857:52;;;::::0;::::1;;-1:-1:-1::0;;;;;15920:32:0;::::1;;::::0;;;:24:::1;:32;::::0;;;;:42;;-1:-1:-1;;15920:42:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;15973:139:::1;;16001:9;::::0;:26:::1;::::0;;;;-1:-1:-1;;;;;19370:55:1;;;16001:26:0::1;::::0;::::1;19352:74:1::0;16001:9:0::1;19442:18:1::0;;;19435:34;16001:9:0;;::::1;::::0;:15:::1;::::0;19325:18:1;;16001:26:0::1;19170:305:1::0;15973:139:0::1;16060:9;::::0;-1:-1:-1;;;;;16084:15:0;;::::1;16060:9;16084:15:::0;;;16060:9;16084:15:::1;::::0;;;;;;;16060:40;;;;;::::1;::::0;::::1;19352:74:1::0;;;;19442:18;;;19435:34;16060:9:0;::::1;::::0;:15:::1;::::0;19325:18:1;;16060:40:0::1;19170:305:1::0;15973:139:0::1;15770:349:::0;;:::o;19710:106::-;19751:7;19794:13;5865:2;19794;:13;:::i;:::-;19778:12;;:30;;;;:::i;11026:245::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;11121:5:::1;11111:6:::0;;-1:-1:-1;;;;;11111:6:0;;::::1;11091:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;11091:35:0;;::::1;::::0;;;11162:6;;;;::::1;11137:32:::0;;:24:::1;:32:::0;;;;;;:40;;;;::::1;::::0;;;11188:19;;-1:-1:-1;;11188:19:0::1;::::0;;11223:40;11121:5;;11223:40:::1;::::0;11121:5;;11223:40:::1;11026:245::o:0;14187:516::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;14268:16;::::1;;14279:5;14268:16:::0;14264:432:::1;;-1:-1:-1::0;;;;;14301:13:0;;::::1;14317:5;14301:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;14301:21:0::1;::::0;;14337:9:::1;::::0;:32;;;;;::::1;::::0;::::1;19950:74:1::0;;;;20040:18;;;20033:50;;;;14337:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19923:18:1;;14337:32:0::1;19782:307:1::0;14264:432:0::1;14406:17;::::0;:22;14402:152:::1;;14495:6;14475:17;;14457:15;:35;;;;:::i;:::-;:44;14449:89;;;::::0;-1:-1:-1;;;14449:89:0;;20296:2:1;14449:89:0::1;::::0;::::1;20278:21:1::0;;;20315:18;;;20308:30;20374:34;20354:18;;;20347:62;20426:18;;14449:89:0::1;20094:356:1::0;14449:89:0::1;-1:-1:-1::0;;;;;14568:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;14568:20:0::1;14584:4;14568:20:::0;;::::1;::::0;;;14623:15:::1;14603:17;:35:::0;14653:9:::1;::::0;:31;;;;;::::1;::::0;::::1;19950:74:1::0;;;;20040:18;;;20033:50;14653:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;19923:18:1;;14653:31:0::1;19782:307:1::0;12984:173:0;13048:4;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;13097:9:::1;::::0;13065:62:::1;::::0;13082:4:::1;::::0;-1:-1:-1;;;;;13097:9:0::1;-1:-1:-1::0;;13065:8:0::1;:62::i;:::-;-1:-1:-1::0;13145:4:0::1;12984:173:::0;:::o;17590:589::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;17652:14:::1;::::0;::::1;::::0;::::1;;;17651:15;17643:52;;;::::0;-1:-1:-1;;;17643:52:0;;20657:2:1;17643:52:0::1;::::0;::::1;20639:21:1::0;20696:2;20676:18;;;20669:30;20735:26;20715:18;;;20708:54;20779:18;;17643:52:0::1;20455:348:1::0;17643:52:0::1;17714:16;::::0;;;::::1;;;17706:53;;;::::0;-1:-1:-1;;;17706:53:0;;21010:2:1;17706:53:0::1;::::0;::::1;20992:21:1::0;21049:2;21029:18;;;21022:30;21088:26;21068:18;;;21061:54;21132:18;;17706:53:0::1;20808:348:1::0;17706:53:0::1;17781:9;::::0;;;::::1;-1:-1:-1::0;;;;;17781:9:0::1;17770:99;;17821:9;:36:::0;;;::::1;17851:4;17821:36:::0;::::1;;::::0;;17770:99:::1;17883:9;::::0;17903:6:::1;::::0;17883:85:::1;::::0;;;;-1:-1:-1;;;;;17903:6:0;;::::1;17883:85;::::0;::::1;21384:74:1::0;21506:10;17918:12:0::1;21494:23:1::0;21474:18;;;21467:51;21566:18;17940:15:0::1;21554:31:1::0;21534:18;;;21527:59;5865:2:0::1;21602:18:1::0;;;21595:45;17883:9:0;;;::::1;;::::0;:19:::1;::::0;21356::1;;17883:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;17879:101:::0;17994:9:::1;;;;;;;;;-1:-1:-1::0;;;;;17994:9:0::1;-1:-1:-1::0;;;;;17994:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;18038:14:0::1;:21:::0;;-1:-1:-1;;18038:21:0::1;;;::::0;;18097:6:::1;::::0;-1:-1:-1;;;;;18097:6:0::1;-1:-1:-1::0;12245:16:0;;;-1:-1:-1;12245:16:0;;;;;;18112:5:::1;::::0;18087:21:::1;::::0;18107:1:::1;18087:21;:::i;:::-;18086:31;;;;:::i;:::-;18070:13;:47:::0;18152:6:::1;::::0;-1:-1:-1;;;;;18152:6:0::1;12227:7:::0;12245:16;;;:7;:16;;;;;;18167:4:::1;::::0;18142:21:::1;::::0;18162:1:::1;18142:21;:::i;:::-;18141:30;;;;:::i;:::-;18128:10;:43:::0;17590:589::o;20913:100::-;20964:9;;:41;;;;;20994:10;20964:41;;;160:74:1;-1:-1:-1;;;;;20964:9:0;;;;:29;;133:18:1;;20964:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20913:100::o;13165:152::-;13245:4;13269:40;13279:10;13291:9;13302:6;13269:9;:40::i;:::-;13262:47;13165:152;-1:-1:-1;;;13165:152:0:o;18548:400::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;18644:7:::1;:25:::0;;::::1;18710:29:::0;;::::1;::::0;::::1;::::0;18680:19;;::::1;::::0;::::1;::::0;;;;18644:25;;::::1;18680:19:::0;;;;;;;::::1;18710:29;;::::0;;18730:9;18766:14:::1;18695:4:::0;18662:7;18766:14:::1;:::i;:::-;:26;;;;:::i;:::-;18750:7;:42:::0;;;::::1;::::0;::::1;::::0;;::::1;;;::::0;;18838:9:::1;:17:::0;-1:-1:-1;;18819:36:0::1;::::0;18838:17;;::::1;::::0;::::1;::::0;18819:16:::1;:36;:::i;:::-;18874:7;:13:::0;18803:52:::1;::::0;;::::1;::::0;-1:-1:-1;18874:13:0;;::::1;;:22:::0;-1:-1:-1;18874:22:0::1;18866:74;;;::::0;-1:-1:-1;;;18866:74:0;;22082:2:1;18866:74:0::1;::::0;::::1;22064:21:1::0;22121:2;22101:18;;;22094:30;22160:34;22140:18;;;22133:62;22231:9;22211:18;;;22204:37;22258:19;;18866:74:0::1;21880:403:1::0;21509:150:0;21611:9;;:40;;;;;-1:-1:-1;;;;;178:55:1;;;21611:40:0;;;160:74:1;21584:7:0;;21611:9;;:27;;133:18:1;;21611:40:0;14:226:1;20491:275:0;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;20662:27:::1;20666:23:::0;20662:2:::1;:27;:::i;:::-;20645:44;::::0;:14;:44:::1;:::i;:::-;20700:9;::::0;:58:::1;::::0;;;;::::1;::::0;::::1;22598:25:1::0;;;22639:18;;;22632:34;;;20628:61:0;;-1:-1:-1;;;;;;20700:9:0::1;::::0;:30:::1;::::0;22571:18:1;;20700:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20491:275:::0;;;:::o;17305:118::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;17379:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17379:36:0::1;::::0;::::1;160:74:1::0;17379:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;17379:36:0::1;14:226:1::0;20774:131:0;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;20861:6:::1;20855:3;:12;20847:21;;;::::0;::::1;;20879:12;:18:::0;20774:131::o;18956:192::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;19055:11:::1;:42:::0;;-1:-1:-1;;;;;19055:42:0;;::::1;-1:-1:-1::0;;19055:42:0;;::::1;;::::0;;;19108:16;:32;;;;;::::1;::::0;::::1;;::::0;;18956:192::o;19944:193::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;20050:19:::1;:30:::0;;-1:-1:-1;;20050:30:0::1;;::::0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;20091:14:::1;:38:::0;;-1:-1:-1;;20091:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19944:193::o;13639:540::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;13708:20:::1;13741:9;13708:43;;13762:16;13792:10;-1:-1:-1::0;;;;;13792:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13781:40:0::1;;13830:4;13837:10;-1:-1:-1::0;;;;;13837:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13781:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11369:15:1;;;13781:74:0::1;::::0;::::1;11351:34:1::0;11421:15;;11401:18;;;11394:43;11263:18;;13781:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13762:93:::0;-1:-1:-1;;;;;;13870:22:0;::::1;13866:200;;13929:10;-1:-1:-1::0;;;;;13929:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13918:43:0::1;;13970:4;13977:10;-1:-1:-1::0;;;;;13977:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13918:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11369:15:1;;;13918:77:0::1;::::0;::::1;11351:34:1::0;11421:15;;11401:18;;;11394:43;11263:18;;13918:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13909:6;:86:::0;;-1:-1:-1;;13909:86:0::1;-1:-1:-1::0;;;;;13909:86:0;;;::::1;::::0;;;::::1;::::0;;13866:200:::1;;;14037:6;:17:::0;;-1:-1:-1;;14037:17:0::1;-1:-1:-1::0;;;;;14037:17:0;::::1;;::::0;;13866:200:::1;14076:9;:22:::0;;-1:-1:-1;;14076:22:0::1;-1:-1:-1::0;;;;;14076:22:0;::::1;::::0;;::::1;::::0;;;14109:62:::1;::::0;14126:4:::1;::::0;-1:-1:-1;;14109:8:0::1;:62::i;16489:193::-:0;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;16579:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;19968:55:1;;;16579:47:0::1;::::0;::::1;19950:74:1::0;20067:14;;20060:22;20040:18;;;20033:50;16579:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;19923:18:1;;16579:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16637:37;16657:7;16666;16637:19;:37::i;21021:118::-:0;21100:9;;:31;;;;;;;;21073:7;;-1:-1:-1;;;;;21100:9:0;;:29;;:31;;;;;;;;;;;;;;:9;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17056:125::-;17141:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;17141:32:0;;;160:74:1;17117:4:0;;17141:9;;;;;:23;;133:18:1;;17141:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16269:148::-;7867:6;;-1:-1:-1;;;;;7867:6:0;7877:10;7867:20;7859:65;;;;-1:-1:-1;;;7859:65:0;;11650:2:1;7859:65:0;;;11632:21:1;;;11669:18;;;11662:30;11728:34;11708:18;;;11701:62;11780:18;;7859:65:0;11448:356:1;7859:65:0;-1:-1:-1;;;;;16365:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;16365:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16269:148::o;22032:2073::-;22111:4;-1:-1:-1;;;;;22136:18:0;;22128:68;;;;-1:-1:-1;;;22128:68:0;;23717:2:1;22128:68:0;;;23699:21:1;23756:2;23736:18;;;23729:30;23795:34;23775:18;;;23768:62;23866:7;23846:18;;;23839:35;23891:19;;22128:68:0;23515:401:1;22128:68:0;-1:-1:-1;;;;;22215:16:0;;22207:64;;;;-1:-1:-1;;;22207:64:0;;24123:2:1;22207:64:0;;;24105:21:1;24162:2;24142:18;;;24135:30;24201:34;24181:18;;;24174:62;24272:5;24252:18;;;24245:33;24295:19;;22207:64:0;23921:399:1;22207:64:0;22299:1;22290:6;:10;22282:64;;;;-1:-1:-1;;;22282:64:0;;24527:2:1;22282:64:0;;;24509:21:1;24566:2;24546:18;;;24539:30;24605:34;24585:18;;;24578:62;24676:11;24656:18;;;24649:39;24705:19;;22282:64:0;24325:405:1;22282:64:0;-1:-1:-1;;;;;22445:13:0;;22357:8;22445:13;;;:7;:13;;;;;;22357:8;;;;22445:13;;22441:162;;;22481:4;22475:10;;22441:162;;;-1:-1:-1;;;;;22507:11:0;;;;;;:7;:11;;;;;;;;22503:100;;;22542:4;22535:11;;22503:100;;;-1:-1:-1;22587:4:0;22503:100;22616:20;22627:4;22633:2;22616:10;:20::i;:::-;22613:641;;;22657:14;;;;;;;22653:89;;22692:34;;-1:-1:-1;;;22692:34:0;;24937:2:1;22692:34:0;;;24919:21:1;24976:2;24956:18;;;24949:30;25015:26;24995:18;;;24988:54;25059:18;;22692:34:0;24735:348:1;22653:89:0;22759:3;:11;;;;22766:4;22759:11;22756:231;;;-1:-1:-1;;;;;22795:27:0;;;;;;:21;:27;;;;;;;;22794:28;:58;;;;-1:-1:-1;;;;;;22827:25:0;;;;;;:21;:25;;;;;;;;22826:26;22794:58;22790:182;;;22895:12;;22885:6;:22;;22877:75;;;;-1:-1:-1;;;22877:75:0;;25290:2:1;22877:75:0;;;25272:21:1;25329:2;25309:18;;;25302:30;25368:34;25348:18;;;25341:62;25439:10;25419:18;;;25412:38;25467:19;;22877:75:0;25088:404:1;22877:75:0;23018:9;;-1:-1:-1;;;;;23004:24:0;;;23018:9;;23004:24;;;;:33;;;23033:4;23032:5;23004:33;23001:242;;;-1:-1:-1;;;;;23063:25:0;;;;;;:21;:25;;;;;;;;23058:170;;23147:14;;23137:6;23121:13;23131:2;-1:-1:-1;;;;;12245:16:0;12227:7;12245:16;;;:7;:16;;;;;;;12161:103;23121:13;:22;;;;:::i;:::-;:40;;23113:95;;;;-1:-1:-1;;;23113:95:0;;25832:2:1;23113:95:0;;;25814:21:1;25871:2;25851:18;;;25844:30;25910:34;25890:18;;;25883:62;25981:12;25961:18;;;25954:40;26011:19;;23113:95:0;25630:406:1;23113:95:0;-1:-1:-1;;;;;23309:25:0;;23266:12;23309:25;;;:19;:25;;;;;;23281:4;;23309:25;;;:52;;-1:-1:-1;;;;;;23338:23:0;;;;;;:19;:23;;;;;;;;23309:52;23306:98;;;-1:-1:-1;23387:5:0;23306:98;23420:4;23416:599;;;23446:6;;;;23445:7;:47;;;;-1:-1:-1;23473:19:0;;;;;;;23445:47;23441:557;;;23562:15;23542:17;;23531:8;;:28;;;;:::i;:::-;:46;23527:456;;;23651:4;23602:28;12245:16;;;:7;:16;;;;;;23708:13;;23684:37;;23680:284;;23777:10;;23753:20;:34;23750:77;;-1:-1:-1;23814:10:0;;23750:77;23853:34;23866:20;23853:12;:34::i;:::-;23925:15;23914:8;:26;23680:284;23579:404;23527:456;24035:62;24053:4;24059:2;24063:6;24071:7;24080:3;24085:4;24091:5;24035:17;:62::i;:::-;24028:69;22032:2073;-1:-1:-1;;;;;;;;22032:2073:0:o;24113:1123::-;24269:16;;24247:4;;24269:16;;;;;24264:298;;24302:28;24321:4;24327:2;24302:18;:28::i;:::-;24350:16;;;;;;;24349:17;:41;;;;;24370:20;24381:4;24387:2;24370:10;:20::i;:::-;24349:77;;;;-1:-1:-1;;;;;;24395:31:0;;;;;;:25;:31;;;;;;;;24394:32;24349:77;:111;;;;-1:-1:-1;;;;;;24431:29:0;;;;;;:25;:29;;;;;;;;24430:30;24349:111;:121;;;;;24465:5;24464:6;24349:121;24345:206;;;24491:44;;-1:-1:-1;;;24491:44:0;;26243:2:1;24491:44:0;;;26225:21:1;26282:2;26262:18;;;26255:30;26321:34;26301:18;;;26294:62;26392:4;26372:18;;;26365:32;26414:19;;24491:44:0;26041:398:1;24345:206:0;24577:20;24588:4;24594:2;24577:10;:20::i;:::-;24574:313;;;24645:9;;:37;;;;;-1:-1:-1;;;;;26725:15:1;;;24645:37:0;;;26707:34:1;26777:15;;;26757:18;;;26750:43;26809:18;;;26802:34;;;24614:12:0;;24645:9;;;;;:19;;26619:18:1;;24645:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;24645:37:0;;;;;;;;-1:-1:-1;;24645:37:0;;;;;;;;;;;;:::i;:::-;;;24641:163;;24780:8;;;24641:163;24733:5;-1:-1:-1;24824:7:0;24820:56;;24852:8;;;24820:56;24599:288;24574:313;-1:-1:-1;;;;;24899:13:0;;;;;;:7;:13;;;;;:23;;24916:6;;24899:13;:23;;24916:6;;24899:23;:::i;:::-;;;;-1:-1:-1;24958:6:0;;-1:-1:-1;24975:98:0;;;;25020:41;25030:4;25036:6;25044:3;25049:4;25055:5;25020:9;:41::i;:::-;25003:58;;24975:98;-1:-1:-1;;;;;25083:11:0;;;;;;:7;:11;;;;;:29;;25098:14;;25083:11;:29;;25098:14;;25083:29;:::i;:::-;;;;-1:-1:-1;25125:29:0;;-1:-1:-1;25145:4:0;25151:2;25125:19;:29::i;:::-;25187:2;-1:-1:-1;;;;;25172:34:0;25181:4;-1:-1:-1;;;;;25172:34:0;;25191:14;25172:34;;;;391:25:1;;379:2;364:18;;245:177;25172:34:0;;;;;;;;-1:-1:-1;25224:4:0;;24113:1123;-1:-1:-1;;;;;;;;24113:1123:0:o;12635:341::-;-1:-1:-1;;;;;12729:20:0;;12721:69;;;;-1:-1:-1;;;12721:69:0;;27049:2:1;12721:69:0;;;27031:21:1;27088:2;27068:18;;;27061:30;27127:34;27107:18;;;27100:62;27198:6;27178:18;;;27171:34;27222:19;;12721:69:0;26847:400:1;12721:69:0;-1:-1:-1;;;;;12809:21:0;;12801:68;;;;-1:-1:-1;;;12801:68:0;;27454:2:1;12801:68:0;;;27436:21:1;27493:2;27473:18;;;27466:30;27532:34;27512:18;;;27505:62;27603:4;27583:18;;;27576:32;27625:19;;12801:68:0;27252:398:1;12801:68:0;-1:-1:-1;;;;;12882:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;12935:33;;391:25:1;;;12935:33:0;;364:18:1;12935:33:0;;;;;;;12635:341;;;:::o;21667:357::-;21735:4;21767:6;;-1:-1:-1;;;;;21759:14:0;;;21767:6;;21759:14;;;;:43;;-1:-1:-1;21796:6:0;;-1:-1:-1;;;;;21790:12:0;;;21796:6;;21790:12;;21759:43;:79;;;;-1:-1:-1;21832:6:0;;-1:-1:-1;;;;;21832:6:0;21819:9;:19;;21759:79;:118;;;;-1:-1:-1;;;;;;21856:21:0;;;;;;:17;:21;;;;;;;;21855:22;21759:118;:159;;;;-1:-1:-1;;;;;;21895:23:0;;;;;;:17;:23;;;;;;;;21894:24;21759:159;:186;;;;-1:-1:-1;;;;;;21935:10:0;;6743:42;21935:10;;21759:186;:219;;;;-1:-1:-1;;;;;;21962:16:0;;;;21759:219;:257;;;;-1:-1:-1;;;;;;;;21995:21:0;22011:4;21995:21;;;21667:357::o;26562:1318::-;7761:6;:13;;-1:-1:-1;;7761:13:0;7770:4;7761:13;;;26643:30:::1;::::0;;::::1;::::0;::::1;::::0;;26666:7:::1;26643:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;7761:6;26688:17;26684:56:::1;;26722:7;;;26684:56;26783:4;26763:26;::::0;;;:11:::1;:26;::::0;;;;;;;26798:9:::1;::::0;-1:-1:-1;;;;;26798:9:0::1;26763:46:::0;;;;;;;;-1:-1:-1;;26763:67:0::1;26760:165;;26867:4;26847:26;::::0;;;:11:::1;:26;::::0;;;;;;;26882:9:::1;::::0;-1:-1:-1;;;;;26882:9:0::1;26847:46:::0;;;;;;;-1:-1:-1;;26847:66:0;;26760:165:::1;26961:16;::::0;;26975:1:::1;26961:16:::0;;;;;::::1;::::0;;26937:21:::1;::::0;26961:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26961:16:0::1;26937:40;;27006:4;26988;26993:1;26988:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26988:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27032:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;26988:7;;27032:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27022:4;27027:1;27022:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27022:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;27061:9:::1;::::0;:199:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:199:::1;::::0;27136:20;;27061:9:::1;::::0;27187:4;;27214::::1;::::0;27234:15:::1;::::0;27061:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;27383:12:0::1;::::0;::::1;::::0;27365:14;;27294:21:::1;::::0;-1:-1:-1;27273:18:0::1;::::0;27351:44:::1;::::0;;::::1;::::0;27352:27:::1;::::0;::::1;27294:21:::0;27352:27:::1;:::i;:::-;27351:44;;;;:::i;:::-;27326:69;;27406:19;27457:6;:12;;;27428:41;;27442:6;:11;;;27429:24;;:10;:24;;;;:::i;:::-;27428:41;;;;:::i;:::-;27406:63:::0;-1:-1:-1;27480:24:0::1;27521:28;27406:63:::0;27521:14;:28:::1;:::i;:::-;27507:43;::::0;:10;:43:::1;:::i;:::-;27567:14:::0;;27480:70;;-1:-1:-1;27567:18:0::1;;::::0;27563:105:::1;;27606:9;;;;;;;;;-1:-1:-1::0;;;;;27606:9:0::1;-1:-1:-1::0;;;;;27606:14:0::1;;27628;27606:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;27602:55:::0;::::1;27683:16;::::0;::::1;::::0;:20:::1;;::::0;27680:99:::1;;27719:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;27719:21:0;;::::1;::::0;:48;::::1;;;::::0;27750:16;;27719:21:::1;:48:::0;:21;:48;27750:16;27719:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27680:99;27792:11;::::0;::::1;::::0;:15:::1;;::::0;27789:84:::1;;27823:16:::0;;:38:::1;::::0;-1:-1:-1;;;;;27823:16:0;;::::1;::::0;:38;::::1;;;::::0;27849:11;;27823:16:::1;:38:::0;:16;:38;27849:11;27823:16;:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27789:84;26632:1248;;;;;;7785:1;-1:-1:-1::0;7797:6:0;:14;;-1:-1:-1;;7797:14:0;;;26562:1318::o;27888:630::-;27970:16;;;;;;;27969:17;27961:65;;;;-1:-1:-1;;;27961:65:0;;28467:2:1;27961:65:0;;;28449:21:1;28506:2;28486:18;;;28479:30;28545:34;28525:18;;;28518:62;28616:5;28596:18;;;28589:33;28639:19;;27961:65:0;28265:399:1;27961:65:0;28042:20;28053:4;28059:2;28042:10;:20::i;:::-;28041:21;:37;;;;-1:-1:-1;28072:6:0;;-1:-1:-1;;;;;28066:12:0;;;28072:6;;28066:12;28041:37;28037:474;;;-1:-1:-1;;;;;28095:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;28095:30:0;28121:4;28095:30;;;28140:16;:23;;;;;;;;;;28189:9;;;;28178:108;;28234:9;:36;;;;28264:4;28234:36;;;;;28178:108;28311:9;;-1:-1:-1;;;;;28311:9:0;28300:107;;28357:9;:34;;-1:-1:-1;;28357:34:0;28385:4;28357:34;;;28300:107;28421:19;:26;;-1:-1:-1;;28421:26:0;;;;;28467:32;;-1:-1:-1;4918:41:1;;28467:32:0;;4906:2:1;4891:18;28467:32:0;;;;;;;27888:630;;:::o;25907:647::-;26007:7;26027:18;26060:3;26056:205;;;-1:-1:-1;26093:9:0;:16;;;26056:205;;;26131:4;26127:134;;;-1:-1:-1;26165:9:0;:17;;;;;;26127:134;;;-1:-1:-1;26228:9:0;:21;;;;;;26127:134;26277:10;26291:1;26277:15;26273:61;;26316:6;26309:13;;;;;26273:61;26346:17;6637:5;26366:19;26375:10;26366:6;:19;:::i;:::-;:38;;;;:::i;:::-;26433:4;26417:22;;;;:7;:22;;;;;:35;;26346:58;;-1:-1:-1;26346:58:0;;26417:22;;;:35;;26346:58;;26417:35;:::i;:::-;;;;-1:-1:-1;;26468:40:0;;391:25:1;;;26491:4:0;;-1:-1:-1;;;;;26468:40:0;;;;;379:2:1;364:18;26468:40:0;;;;;;;26528:18;26537:9;26528:6;:18;:::i;:::-;26521:25;;;;25907:647;;;;;;;;:::o;25244:419::-;-1:-1:-1;;;;;25324:30:0;;;;;;:24;:30;;;;;;;;25319:115;;25375:9;;-1:-1:-1;;;;;25397:13:0;;;25375:9;25397:13;;;25375:9;25397:13;;;;;;;;25375:36;;;;;;;;19352:74:1;;;;19442:18;;;19435:34;25375:9:0;;;:15;;19325:18:1;;25375:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25371:52;;-1:-1:-1;;;;;25449:28:0;;;;;;:24;:28;;;;;;;;25444:109;;25498:9;;-1:-1:-1;;;;;25518:11:0;;;25498:9;25518:11;;;25498:9;25518:11;;;;;;;;25498:32;;;;;;;;19352:74:1;;;;19442:18;;;19435:34;25498:9:0;;;:15;;19325:18:1;;25498:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25494:48;;25567:14;;;;25563:93;;;25602:9;;25620:12;;25602:31;;;;;-1:-1:-1;;;;;25602:9:0;;;;:17;;:31;;;;391:25:1;;;379:2;364:18;;245:177;25602:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25598:47;;;25244:419;;:::o;427:118:1:-;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;931:184::-;983:77;980:1;973:88;1080:4;1077:1;1070:15;1104:4;1101:1;1094:15;1120:334;1191:2;1185:9;1247:2;1237:13;;-1:-1:-1;;1233:86:1;1221:99;;1350:18;1335:34;;1371:22;;;1332:62;1329:88;;;1397:18;;:::i;:::-;1433:2;1426:22;1120:334;;-1:-1:-1;1120:334:1:o;1459:183::-;1519:4;1552:18;1544:6;1541:30;1538:56;;;1574:18;;:::i;:::-;-1:-1:-1;1619:1:1;1615:14;1631:4;1611:25;;1459:183::o;1647:154::-;-1:-1:-1;;;;;1726:5:1;1722:54;1715:5;1712:65;1702:93;;1791:1;1788;1781:12;1806:737;1860:5;1913:3;1906:4;1898:6;1894:17;1890:27;1880:55;;1931:1;1928;1921:12;1880:55;1967:6;1954:20;1993:4;2017:60;2033:43;2073:2;2033:43;:::i;:::-;2017:60;:::i;:::-;2111:15;;;2197:1;2193:10;;;;2181:23;;2177:32;;;2142:12;;;;2221:15;;;2218:35;;;2249:1;2246;2239:12;2218:35;2285:2;2277:6;2273:15;2297:217;2313:6;2308:3;2305:15;2297:217;;;2393:3;2380:17;2410:31;2435:5;2410:31;:::i;:::-;2454:18;;2492:12;;;;2330;;2297:217;;;-1:-1:-1;2532:5:1;1806:737;-1:-1:-1;;;;;;1806:737:1:o;2548:477::-;2638:6;2646;2699:2;2687:9;2678:7;2674:23;2670:32;2667:52;;;2715:1;2712;2705:12;2667:52;2755:9;2742:23;2788:18;2780:6;2777:30;2774:50;;;2820:1;2817;2810:12;2774:50;2843:61;2896:7;2887:6;2876:9;2872:22;2843:61;:::i;:::-;2833:71;;;2954:2;2943:9;2939:18;2926:32;2967:28;2989:5;2967:28;:::i;3400:258::-;3472:1;3482:113;3496:6;3493:1;3490:13;3482:113;;;3572:11;;;3566:18;3553:11;;;3546:39;3518:2;3511:10;3482:113;;;3613:6;3610:1;3607:13;3604:48;;;-1:-1:-1;;3648:1:1;3630:16;;3623:27;3400:258::o;3663:317::-;3705:3;3743:5;3737:12;3770:6;3765:3;3758:19;3786:63;3842:6;3835:4;3830:3;3826:14;3819:4;3812:5;3808:16;3786:63;:::i;:::-;3894:2;3882:15;-1:-1:-1;;3878:88:1;3869:98;;;;3969:4;3865:109;;3663:317;-1:-1:-1;;3663:317:1:o;3985:220::-;4134:2;4123:9;4116:21;4097:4;4154:45;4195:2;4184:9;4180:18;4172:6;4154:45;:::i;4458:315::-;4526:6;4534;4587:2;4575:9;4566:7;4562:23;4558:32;4555:52;;;4603:1;4600;4593:12;4555:52;4642:9;4629:23;4661:31;4686:5;4661:31;:::i;:::-;4711:5;4763:2;4748:18;;;;4735:32;;-1:-1:-1;;;4458:315:1:o;4970:247::-;5029:6;5082:2;5070:9;5061:7;5057:23;5053:32;5050:52;;;5098:1;5095;5088:12;5050:52;5137:9;5124:23;5156:31;5181:5;5156:31;:::i;5222:388::-;5290:6;5298;5351:2;5339:9;5330:7;5326:23;5322:32;5319:52;;;5367:1;5364;5357:12;5319:52;5406:9;5393:23;5425:31;5450:5;5425:31;:::i;:::-;5475:5;-1:-1:-1;5532:2:1;5517:18;;5504:32;5545:33;5504:32;5545:33;:::i;5615:456::-;5692:6;5700;5708;5761:2;5749:9;5740:7;5736:23;5732:32;5729:52;;;5777:1;5774;5767:12;5729:52;5816:9;5803:23;5835:31;5860:5;5835:31;:::i;:::-;5885:5;-1:-1:-1;5942:2:1;5927:18;;5914:32;5955:33;5914:32;5955:33;:::i;:::-;5615:456;;6007:7;;-1:-1:-1;;;6061:2:1;6046:18;;;;6033:32;;5615:456::o;6076:248::-;6144:6;6152;6205:2;6193:9;6184:7;6180:23;6176:32;6173:52;;;6221:1;6218;6211:12;6173:52;-1:-1:-1;;6244:23:1;;;6314:2;6299:18;;;6286:32;;-1:-1:-1;6076:248:1:o;6329:1138::-;6447:6;6455;6508:2;6496:9;6487:7;6483:23;6479:32;6476:52;;;6524:1;6521;6514:12;6476:52;6564:9;6551:23;6593:18;6634:2;6626:6;6623:14;6620:34;;;6650:1;6647;6640:12;6620:34;6673:61;6726:7;6717:6;6706:9;6702:22;6673:61;:::i;:::-;6663:71;;6753:2;6743:12;;6808:2;6797:9;6793:18;6780:32;6837:2;6827:8;6824:16;6821:36;;;6853:1;6850;6843:12;6821:36;6876:24;;;-1:-1:-1;6931:4:1;6923:13;;6919:27;-1:-1:-1;6909:55:1;;6960:1;6957;6950:12;6909:55;6996:2;6983:16;7019:60;7035:43;7075:2;7035:43;:::i;7019:60::-;7113:15;;;7195:1;7191:10;;;;7183:19;;7179:28;;;7144:12;;;;7219:19;;;7216:39;;;7251:1;7248;7241:12;7216:39;7275:11;;;;7295:142;7311:6;7306:3;7303:15;7295:142;;;7377:17;;7365:30;;7328:12;;;;7415;;;;7295:142;;;7456:5;7446:15;;;;;;;6329:1138;;;;;:::o;7661:159::-;7728:20;;7788:6;7777:18;;7767:29;;7757:57;;7810:1;7807;7800:12;7757:57;7661:159;;;:::o;7825:328::-;7899:6;7907;7915;7968:2;7956:9;7947:7;7943:23;7939:32;7936:52;;;7984:1;7981;7974:12;7936:52;8007:28;8025:9;8007:28;:::i;:::-;7997:38;;8054:37;8087:2;8076:9;8072:18;8054:37;:::i;:::-;8044:47;;8110:37;8143:2;8132:9;8128:18;8110:37;:::i;:::-;8100:47;;7825:328;;;;;:::o;8158:454::-;8253:6;8261;8269;8277;8285;8338:3;8326:9;8317:7;8313:23;8309:33;8306:53;;;8355:1;8352;8345:12;8306:53;-1:-1:-1;;8378:23:1;;;8448:2;8433:18;;8420:32;;-1:-1:-1;8499:2:1;8484:18;;8471:32;;8550:2;8535:18;;8522:32;;-1:-1:-1;8601:3:1;8586:19;8573:33;;-1:-1:-1;8158:454:1;-1:-1:-1;8158:454:1:o;8617:382::-;8682:6;8690;8743:2;8731:9;8722:7;8718:23;8714:32;8711:52;;;8759:1;8756;8749:12;8711:52;8798:9;8785:23;8817:31;8842:5;8817:31;:::i;9004:711::-;9297:3;9286:9;9279:22;9260:4;9324:46;9365:3;9354:9;9350:19;9342:6;9324:46;:::i;:::-;9418:9;9410:6;9406:22;9401:2;9390:9;9386:18;9379:50;9452:33;9478:6;9470;9452:33;:::i;:::-;9438:47;;9533:9;9525:6;9521:22;9516:2;9505:9;9501:18;9494:50;9567:33;9593:6;9585;9567:33;:::i;:::-;9553:47;;9648:9;9640:6;9636:22;9631:2;9620:9;9616:18;9609:50;9676:33;9702:6;9694;9676:33;:::i;:::-;9668:41;9004:711;-1:-1:-1;;;;;;;9004:711:1:o;9720:316::-;9797:6;9805;9813;9866:2;9854:9;9845:7;9841:23;9837:32;9834:52;;;9882:1;9879;9872:12;9834:52;-1:-1:-1;;9905:23:1;;;9975:2;9960:18;;9947:32;;-1:-1:-1;10026:2:1;10011:18;;;9998:32;;9720:316;-1:-1:-1;9720:316:1:o;10490:180::-;10549:6;10602:2;10590:9;10581:7;10577:23;10573:32;10570:52;;;10618:1;10615;10608:12;10570:52;-1:-1:-1;10641:23:1;;10490:180;-1:-1:-1;10490:180:1:o;12082:484::-;12135:3;12173:5;12167:12;12200:6;12195:3;12188:19;12226:4;12255:2;12250:3;12246:12;12239:19;;12292:2;12285:5;12281:14;12313:1;12323:218;12337:6;12334:1;12331:13;12323:218;;;12402:13;;-1:-1:-1;;;;;12398:62:1;12386:75;;12481:12;;;;12516:15;;;;12359:1;12352:9;12323:218;;;-1:-1:-1;12557:3:1;;12082:484;-1:-1:-1;;;;;12082:484:1:o;12571:342::-;12772:2;12761:9;12754:21;12735:4;12792:56;12844:2;12833:9;12829:18;12821:6;12792:56;:::i;:::-;12784:64;;12898:6;12891:14;12884:22;12879:2;12868:9;12864:18;12857:50;12571:342;;;;;:::o;12918:184::-;12970:77;12967:1;12960:88;13067:4;13064:1;13057:15;13091:4;13088:1;13081:15;13107:184;13159:77;13156:1;13149:88;13256:4;13253:1;13246:15;13280:4;13277:1;13270:15;13296:195;13335:3;-1:-1:-1;;13359:5:1;13356:77;13353:103;;13436:18;;:::i;:::-;-1:-1:-1;13483:1:1;13472:13;;13296:195::o;13496:482::-;13585:1;13628:5;13585:1;13642:330;13663:7;13653:8;13650:21;13642:330;;;13782:4;-1:-1:-1;;13710:77:1;13704:4;13701:87;13698:113;;;13791:18;;:::i;:::-;13841:7;13831:8;13827:22;13824:55;;;13861:16;;;;13824:55;13940:22;;;;13900:15;;;;13642:330;;;13646:3;13496:482;;;;;:::o;13983:866::-;14032:5;14062:8;14052:80;;-1:-1:-1;14103:1:1;14117:5;;14052:80;14151:4;14141:76;;-1:-1:-1;14188:1:1;14202:5;;14141:76;14233:4;14251:1;14246:59;;;;14319:1;14314:130;;;;14226:218;;14246:59;14276:1;14267:10;;14290:5;;;14314:130;14351:3;14341:8;14338:17;14335:43;;;14358:18;;:::i;:::-;-1:-1:-1;;14414:1:1;14400:16;;14429:5;;14226:218;;14528:2;14518:8;14515:16;14509:3;14503:4;14500:13;14496:36;14490:2;14480:8;14477:16;14472:2;14466:4;14463:12;14459:35;14456:77;14453:159;;;-1:-1:-1;14565:19:1;;;14597:5;;14453:159;14644:34;14669:8;14663:4;14644:34;:::i;:::-;14774:6;-1:-1:-1;;14702:79:1;14693:7;14690:92;14687:118;;;14785:18;;:::i;:::-;14823:20;;13983:866;-1:-1:-1;;;13983:866:1:o;14854:140::-;14912:5;14941:47;14982:4;14972:8;14968:19;14962:4;14941:47;:::i;14999:274::-;15039:1;15065;15055:189;;15100:77;15097:1;15090:88;15201:4;15198:1;15191:15;15229:4;15226:1;15219:15;15055:189;-1:-1:-1;15258:9:1;;14999:274::o;15278:228::-;15318:7;15444:1;-1:-1:-1;;15372:74:1;15369:1;15366:81;15361:1;15354:9;15347:17;15343:105;15340:131;;;15451:18;;:::i;:::-;-1:-1:-1;15491:9:1;;15278:228::o;15511:125::-;15551:4;15579:1;15576;15573:8;15570:34;;;15584:18;;:::i;:::-;-1:-1:-1;15621:9:1;;15511:125::o;16410:175::-;16447:3;16491:4;16484:5;16480:16;16520:4;16511:7;16508:17;16505:43;;16528:18;;:::i;:::-;16577:1;16564:15;;16410:175;-1:-1:-1;;16410:175:1:o;17444:184::-;17514:6;17567:2;17555:9;17546:7;17542:23;17538:32;17535:52;;;17583:1;17580;17573:12;17535:52;-1:-1:-1;17606:16:1;;17444:184;-1:-1:-1;17444:184:1:o;17633:556::-;17687:5;17740:3;17733:4;17725:6;17721:17;17717:27;17707:55;;17758:1;17755;17748:12;17707:55;17787:6;17781:13;17813:18;17809:2;17806:26;17803:52;;;17835:18;;:::i;:::-;17879:114;17987:4;-1:-1:-1;;17911:4:1;17907:2;17903:13;17899:86;17895:97;17879:114;:::i;:::-;18018:2;18009:7;18002:19;18064:3;18057:4;18052:2;18044:6;18040:15;18036:26;18033:35;18030:55;;;18081:1;18078;18071:12;18030:55;18094:64;18155:2;18148:4;18139:7;18135:18;18128:4;18120:6;18116:17;18094:64;:::i;18194:971::-;18331:6;18339;18347;18355;18408:3;18396:9;18387:7;18383:23;18379:33;18376:53;;;18425:1;18422;18415:12;18376:53;18458:9;18452:16;18487:18;18528:2;18520:6;18517:14;18514:34;;;18544:1;18541;18534:12;18514:34;18567:61;18620:7;18611:6;18600:9;18596:22;18567:61;:::i;:::-;18557:71;;18674:2;18663:9;18659:18;18653:25;18637:41;;18703:2;18693:8;18690:16;18687:36;;;18719:1;18716;18709:12;18687:36;18742:63;18797:7;18786:8;18775:9;18771:24;18742:63;:::i;:::-;18732:73;;18851:2;18840:9;18836:18;18830:25;18814:41;;18880:2;18870:8;18867:16;18864:36;;;18896:1;18893;18886:12;18864:36;18919:63;18974:7;18963:8;18952:9;18948:24;18919:63;:::i;:::-;18909:73;;19028:2;19017:9;19013:18;19007:25;18991:41;;19057:2;19047:8;19044:16;19041:36;;;19073:1;19070;19063:12;19041:36;;19096:63;19151:7;19140:8;19129:9;19125:24;19096:63;:::i;:::-;19086:73;;;18194:971;;;;;;;:::o;21651:224::-;21690:3;21718:6;21751:2;21748:1;21744:10;21781:2;21778:1;21774:10;21812:3;21808:2;21804:12;21799:3;21796:21;21793:47;;;21820:18;;:::i;:::-;21856:13;;21651:224;-1:-1:-1;;;;21651:224:1:o;22288:131::-;22348:5;22377:36;22404:8;22398:4;22377:36;:::i;22677:251::-;22747:6;22800:2;22788:9;22779:7;22775:23;22771:32;22768:52;;;22816:1;22813;22806:12;22768:52;22848:9;22842:16;22867:31;22892:5;22867:31;:::i;23265:245::-;23332:6;23385:2;23373:9;23364:7;23360:23;23356:32;23353:52;;;23401:1;23398;23391:12;23353:52;23433:9;23427:16;23452:28;23474:5;23452:28;:::i;25497:128::-;25537:3;25568:1;25564:6;25561:1;25558:13;25555:39;;;25574:18;;:::i;:::-;-1:-1:-1;25610:9:1;;25497:128::o;27655:605::-;27954:6;27943:9;27936:25;27997:6;27992:2;27981:9;27977:18;27970:34;28040:3;28035:2;28024:9;28020:18;28013:31;27917:4;28061:57;28113:3;28102:9;28098:19;28090:6;28061:57;:::i;:::-;-1:-1:-1;;;;;28154:55:1;;;;28149:2;28134:18;;28127:83;-1:-1:-1;28241:3:1;28226:19;28219:35;28053:65;27655:605;-1:-1:-1;;;27655:605:1:o

Swarm Source

ipfs://b1214af707302c39f7af5bed656874ff79dcb1f2242af61408bb5e3a88390033
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.