ETH Price: $3,960.97 (+1.78%)

Token

Banana Index (Bandex)
 

Overview

Max Total Supply

1,000,000,000,000 Bandex

Holders

488 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
crypto-punkk.eth
Balance
758,147,875.910696952 Bandex

Value
$0.00
0x6e7026ecbe87cb6fcc28ec6e090069d80db4f869
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Banana Index is the Governance Token of Banana Task Force Ape. It empowers users to make critical decisions and proposals that can change BTFA's ecosystem.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BananaIndex

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

contract AirDropper {
    address public TOKEN;
    BananaIndex public IF_TOKEN;
    uint256 decimals;
    mapping (address => User) users;
    uint256 totalNeededTokens;

    uint256 public claimDelay = 24 hours;
    bool public delayedClaimEnabled = true;

    struct User {
        uint256 claimableTokens;
        uint256 lastClaimTime;
        uint256 claimDailyLimit;
    }

    constructor (address token, uint256 _decimals) {
        decimals = _decimals;
        TOKEN = token;
        IF_TOKEN = BananaIndex(payable(token));
    }

    modifier onlyToken() {
        require(TOKEN == msg.sender || address(this) == msg.sender, "Ownable: caller is not the token.");
        _;
    }

    function getTotalNeededTokens() public view returns (uint256) {
        return totalNeededTokens;
    }

    function getClaimableTokens(address account) external view returns (uint256) {
        return users[account].claimableTokens;
    }

    function getSecondsUntilNextClaim(address account) external view returns (uint256) {
        uint256 lastClaim = users[account].lastClaimTime;
        if (lastClaim + claimDelay < block.timestamp) {
            return 0;
        } else {
            return ((lastClaim + claimDelay) - block.timestamp);
        }
    }

    function setClaimDelay(uint256 time) external onlyToken {
        require(time <= 24 hours, "Cannot set higher than 24hrs.");
        claimDelay = time;
    }

    function disableDelayedClaim() external onlyToken {
        delayedClaimEnabled = false;
    }

    function setUserToDrop(address account, uint256 tokens) public onlyToken {
        require(users[account].claimableTokens == 0, "User already set.");
        tokens *= (10**decimals);
        users[account].claimableTokens = tokens;
        users[account].lastClaimTime = 0;
        users[account].claimDailyLimit = tokens / 20;
        totalNeededTokens += tokens;
    }

    function multiSet(address[] calldata accounts, uint256[] calldata tokens) external onlyToken {
        for(uint256 i = 0; i < accounts.length; i++){
            setUserToDrop(accounts[i], tokens[i]);
        }
    }

    function withdrawDailyTokens(address account) external {
        uint256 timestamp = block.timestamp;
        User memory user = users[account];
        require(user.claimableTokens > 0, "No tokens available to claim.");
        uint256 amount;
        if (delayedClaimEnabled) {
            require(user.lastClaimTime + claimDelay <= timestamp, "Cannot claim again yet.");
            if (user.claimableTokens > user.claimDailyLimit) {
                amount = user.claimDailyLimit;
            } else {
                amount = users[account].claimableTokens;
            }
            users[account].lastClaimTime = timestamp;
        } else {
            amount = users[account].claimableTokens;
        }
        users[account].claimableTokens -= amount;
        totalNeededTokens -= amount;
        IF_TOKEN._basicTransfer(address(this), account, amount);
    }

    function depositTokens() external  onlyToken{
        address owner = IF_TOKEN.getOwner();
        uint256 needed = getTotalNeededTokens() - IF_TOKEN.balanceOf(address(this));
        IF_TOKEN._basicTransfer(owner, address(this), needed);
    }
}

contract BananaIndex 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;

    mapping (address => bool) private presaleAddresses;
    bool private allowedPresaleExclusion = true;

    uint256 constant private startingSupply = 1_000_000_000_000;

    string constant private _name = "Banana Index";
    string constant private _symbol = "Bandex";
    uint8 constant private _decimals = 9;

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

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

    struct Ratios {
        uint16 rewards;
        uint16 liquidity;
        uint16 marketing;
        uint16 dev;
        uint16 floorSupport;
        uint16 buybackAndBurn;
        uint16 total;
    }

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

    Ratios public _ratios = Ratios({
        rewards: 200,
        liquidity: 300,
        marketing: 300,
        dev: 200,
        floorSupport: 200,
        buybackAndBurn: 200,
        total: 1400
        });

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

    IRouter02 public dexRouter;
    address public lpPair;

    // BTFA MAINNET ADDRESS
    address private BTFA = 0xC631bE100F6Cf9A7012C23De5a6ccb990EAFC133;
    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant private ZERO = 0x0000000000000000000000000000000000000000;

    struct TaxWallets {
        address payable marketing;
        address payable dev;
        address payable floorSupport;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x1764041440eD4081Ae361EC9c2245Eb33F023F60),
        dev: payable(0x4C97047ff011c523f7E7f359784659dC05ca0A91),
        floorSupport: payable(0x040C3d1B80630ec46627db3d9077255AA52b7e87)
        });

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

    Cashier reflector;
    uint256 reflectorGas = 300000;
    AirDropper public airdrop;

    bool inSwap;
    bool public contractSwapEnabled = false;
    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);
            BTFA = 0x7ef95a0FEE0Dd31b22626fA2e10Ee6A223F8a684;
        } 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;
        airdrop = new AirDropper(address(this), _decimals);

        _approve(_owner, address(dexRouter), type(uint256).max);
        _approve(_owner, address(airdrop), 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);
        }
    }

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

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

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

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

    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;
        allowedPresaleExclusion = false;
        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 liquidity, uint16 marketing, uint16 dev, uint16 floorSupport, uint16 buybackAndBurn) external onlyOwner {
        _ratios.rewards = rewards;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.dev = dev;
        _ratios.floorSupport = floorSupport;
        _ratios.buybackAndBurn = buybackAndBurn;
        _ratios.total = rewards + liquidity + marketing + dev + floorSupport + buybackAndBurn;
        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 dev, address payable floorSupport) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.dev = payable(dev);
        _taxWallets.floorSupport = payable(floorSupport);
    }

    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) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    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 excludePresaleAddresses(address router, address presale) external onlyOwner {
        require(allowedPresaleExclusion);
        if (router == presale) {
            _liquidityHolders[presale] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(presale, true);
            setDividendExcluded(presale, true);
        } else {
            _liquidityHolders[router] = true;
            _liquidityHolders[presale] = true;
            presaleAddresses[router] = true;
            presaleAddresses[presale] = true;
            setExcludedFromFees(router, true);
            setExcludedFromFees(presale, true);
            setDividendExcluded(router, true);
            setDividendExcluded(presale, true);
        }
    }

    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
                && !presaleAddresses[to]
                && !presaleAddresses[from]
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    contractSwap(contractTokenBalance);
                }
            }      
        } 

        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;

        processRewards(from, to);

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

    function processRewards(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) external returns (bool) {
        require(msg.sender == address(airdrop), "Only airdropper may call.");
        _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 _WETH = dexRouter.WETH();

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / (ratios.total)) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _WETH;

        uint256 initial = address(this).balance;

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

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

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

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 rewardsBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 devBalance = (amtBalance * ratios.dev) / ratios.total;
        uint256 floorSupportBalance = (amtBalance * ratios.floorSupport) / ratios.total;
        uint256 buybackAndBurnBalance = (amtBalance * ratios.buybackAndBurn) / ratios.total;
        uint256 marketingBalance = amtBalance - (rewardsBalance + devBalance + floorSupportBalance + buybackAndBurnBalance);

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

        if(ratios.marketing > 0){
            _taxWallets.marketing.transfer(marketingBalance);
        }
        if(ratios.dev > 0){
            _taxWallets.dev.transfer(devBalance);
        }
        if(ratios.floorSupport > 0){
            _taxWallets.floorSupport.transfer(floorSupportBalance);
        }
    }

    function buyAndBurnBTFA() external onlyOwner {
        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = BTFA;

        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: address(this).balance}
        (
            0,
            path,
            DEAD,
            block.timestamp
        );
    }

    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;
            allowedPresaleExclusion = false;
            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 {}
    }

//=====================================================================================
//            Reflector

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

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

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

    function getUserRealizedGains(address user) external view returns (uint256) {
        return reflector.getUserRealizedRewards(user);
    }

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

//=====================================================================================
//            Airdropper

    function ADgetTotalNeededTokens() external view returns (uint256) {
        return airdrop.getTotalNeededTokens();
    }

    function ADgetClaimableTokens(address account) external view returns (uint256) {
        return airdrop.getClaimableTokens(account);
    }

    function ADgetSecondsUntilNextClaim(address account) external view returns (uint256) {
        return airdrop.getSecondsUntilNextClaim(account);
    }

    function ADsetClaimDelay(uint256 time) external onlyOwner {
        airdrop.setClaimDelay(time);
    }

    function ADdisableDelayedClaim() external onlyOwner {
        airdrop.disableDelayedClaim();
    }

    function ADsetUserToDrop(address account, uint256 tokens) external onlyOwner {
        airdrop.setUserToDrop(account, tokens);
    }

    function ADmultiSet(address[] calldata accounts, uint256[] calldata tokens) external onlyOwner {
        airdrop.multiSet(accounts, tokens);
    }

    bool entry;

    function ADwithdrawDailyTokens() external {
        require(entry == false, "Entered.");
        entry = true;
        airdrop.withdrawDailyTokens(msg.sender);
        entry = false;
    }

    function ADdepositTokens() external onlyOwner{
        airdrop.depositTokens();
    }
}

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":"ADdepositTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ADdisableDelayedClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ADgetClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ADgetSecondsUntilNextClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ADgetTotalNeededTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"ADmultiSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"ADsetClaimDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ADsetUserToDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ADwithdrawDailyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_basicTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"floorSupport","type":"uint16"},{"internalType":"uint16","name":"buybackAndBurn","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":"dev","type":"address"},{"internalType":"address payable","name":"floorSupport","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdrop","outputs":[{"internalType":"contract AirDropper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"buyAndBurnBTFA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"presale","type":"address"}],"name":"excludePresaleAddresses","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":"user","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":"user","type":"address"}],"name":"getUserRealizedGains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","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":"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":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","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":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"floorSupport","type":"uint16"},{"internalType":"uint16","name":"buybackAndBurn","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"}],"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":"dev","type":"address"},{"internalType":"address payable","name":"floorSupport","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"}]

60006003819055600b805460ff19166001179055610578608081905260a081905260c091909152600c805465ffffffffffff1916630578057817905560c860e081905261012c61010081905261012052610140819052610160819052610180526101a052600d80546d057800c800c800c8012c012c00c86001600160701b0319909116179055601080546001600160a01b031990811673c631be100f6cf9a7012c23de5a6ccb990eafc13317909155610220604052731764041440ed4081ae361ec9c2245eb33f023f606101c0819052734c97047ff011c523f7e7f359784659dc05ca0a916101e081905273040c3d1b80630ec46627db3d9077255aa52b7e876102008190526011805485169093179092556012805484169091179055601380549092161790556064620001366009600a6200098b565b620001479064e8d4a51000620009a3565b62000154906064620009a3565b620001609190620009c5565b6014556064620001736009600a6200098b565b620001849064e8d4a51000620009a3565b62000191906064620009a3565b6200019d9190620009c5565b601555620493e06017556018805460ff60a81b19169055601b805462ffffff19169055600080546001600160a01b03191633179055620001e06009600a6200098b565b620001f19064e8d4a51000620009a3565b600080546001600160a01b039081168252600160205260408220929092558054909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002446009600a6200098b565b620002559064e8d4a51000620009a3565b60405190815260200160405180910390a3600080546040516001600160a01b0390911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a346603803620002d457600e80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620003dd565b466061036200032b57600e80546001600160a01b031990811673d99d1c33f9fc3444f8101754abc46c52416550d11790915560108054909116737ef95a0fee0dd31b22626fa2e10ee6a223f8a684179055620003dd565b46600114806200033b5750466004145b156200036d57600e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620003dd565b4661a86a03620003a357600e80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d4179055620003dd565b4660fa03620003d857600e80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c29179055620003dd565b600080fd5b600e60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000431573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004579190620009e8565b6001600160a01b031663c9c65396600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004df9190620009e8565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af11580156200052c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005529190620009e8565b600f80546001600160a01b0319166001600160a01b0392909216918217905560009081526002602052604090819020805460ff191660011790555130906009906200059d9062000868565b6001600160a01b03909216825260ff166020820152604001604051809103906000f080158015620005d2573d6000803e3d6000fd5b50601880546001600160a01b0319166001600160a01b03928316179055600054600e54620006089291821691166000196200073c565b60005460185462000629916001600160a01b0390811691166000196200073c565b600e54620006459030906001600160a01b03166000196200073c565b600080546001600160a01b0390811682526006602090815260408084208054600160ff1991821681179092553080875283872080548316841790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805483168417905586548616875260089094528286208054821683179055600f5490941685528185208054851682179055918452832080548316821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548316821790559180527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909116909117905562000a13565b6001600160a01b038316620007a45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620008075760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200079b565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610e32806200653d83390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008cd578160001904821115620008b157620008b162000876565b80851615620008bf57918102915b93841c939080029062000891565b509250929050565b600082620008e65750600162000985565b81620008f55750600062000985565b81600181146200090e5760028114620009195762000939565b600191505062000985565b60ff8411156200092d576200092d62000876565b50506001821b62000985565b5060208310610133831016604e8410600b84101617156200095e575081810a62000985565b6200096a83836200088c565b806000190482111562000981576200098162000876565b0290505b92915050565b60006200099c60ff841683620008d5565b9392505050565b6000816000190483118215151615620009c057620009c062000876565b500290565b600082620009e357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620009fb57600080fd5b81516001600160a01b03811681146200099c57600080fd5b615b1a8062000a236000396000f3fe6080604052600436106105265760003560e01c8063715018a6116102af578063b421626c11610179578063eec2744e116100d6578063fb78680d1161008a578063fe575a871161006f578063fe575a8714610fb5578063feadde9c14610fd5578063ff1f767614610ff557600080fd5b8063fb78680d14610f74578063fdb78c0e14610f9457600080fd5b8063f0774e71116100bb578063f0774e7114610ee8578063f7c245ea14610f08578063f94aa1b414610f1d57600080fd5b8063eec2744e14610eae578063efe7dc9014610ece57600080fd5b8063dd62ed3e1161012d578063e8c0eb2011610112578063e8c0eb2014610e59578063eafb5a3c14610e79578063ebc75be414610e9957600080fd5b8063dd62ed3e14610df3578063dea528a114610e3957600080fd5b8063cf8477061161015e578063cf84770614610d07578063d0b1449d14610db3578063d69153c914610dd357600080fd5b8063b421626c14610cae578063c705c56914610cce57600080fd5b80638ac6fa0311610227578063a9059cbb116101db578063b16f52d9116101c0578063b16f52d914610c99578063b1b08f71146107e3578063b3d514fb146107e357600080fd5b8063a9059cbb14610c59578063ab5cb5a614610c7957600080fd5b80639dc676151161020c5780639dc6761514610c0f578063a3d4176a14610c24578063a3ff795e14610c4457600080fd5b80638ac6fa0314610ba957806395d89b4114610bc957600080fd5b80638749209d1161027e578063893d20e811610263578063893d20e814610b615780638a63bd9b14610b7f5780638a8c523c14610b9457600080fd5b80638749209d14610b215780638839d81614610b4157600080fd5b8063715018a614610ab757806375cb1bd114610acc57806380c581d114610aec578063850db72614610b0c57600080fd5b8063313ce567116103f05780634fbee193116103685780636386c1c71161031c5780636b639a25116103015780636b639a2514610a4c5780636ebd007814610a6c57806370a0823114610a8157600080fd5b80636386c1c714610a075780636ab86dc114610a3757600080fd5b8063590ffdce1161034d578063590ffdce1461098e5780635cce86cd146109ae5780636372c68f146109e757600080fd5b80634fbee1931461093557806350a8e0161461096e57600080fd5b80633884d635116103bf578063452ed4f1116103a4578063452ed4f1146108d65780634ada218b146108f65780634fb2e45d1461091557600080fd5b80633884d635146108965780633f3cf56c146108b657600080fd5b8063313ce5671461080f57806332cde6641461083657806333251a0b1461085657806336fddb041461087657600080fd5b80630fa604e41161049e578063260039571161045257806329dd87981161043757806329dd8798146107c35780632b28fc7a146107e35780632e8fa821146107f957600080fd5b806326003957146107835780632610eaca146107a357600080fd5b806318160ddd1161048357806318160ddd1461072e578063218950bc1461074357806323b872dd1461076357600080fd5b80630fa604e4146106f957806313b4a7f41461070e57600080fd5b806306fdde03116104f557806309231602116104da5780630923160214610670578063095ea7b3146106905780630dcbcf1c146106c057600080fd5b806306fdde03146106015780630758d9241461065057600080fd5b806303fd2a45146105325780630445b6671461056557806305bbedb614610589578063069d955f146105ab57600080fd5b3661052d57005b600080fd5b34801561053e57600080fd5b5061054861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561057157600080fd5b5061057b60195481565b60405190815260200161055c565b34801561059557600080fd5b506105a96105a4366004615006565b61100a565b005b3480156105b757600080fd5b50600c546105dc9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161055c565b34801561060d57600080fd5b5060408051808201909152600c81527f42616e616e6120496e646578000000000000000000000000000000000000000060208201525b60405161055c91906150b0565b34801561065c57600080fd5b50600e54610548906001600160a01b031681565b34801561067c57600080fd5b506105a961068b3660046150c3565b611120565b34801561069c57600080fd5b506106b06106ab3660046150dc565b61123a565b604051901515815260200161055c565b3480156106cc57600080fd5b506106b06106db366004615108565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561070557600080fd5b5061057b6112a7565b34801561071a57600080fd5b506105a9610729366004615125565b6112c7565b34801561073a57600080fd5b5061057b61140b565b34801561074f57600080fd5b506105a961075e366004615125565b61144f565b34801561076f57600080fd5b506106b061077e366004615153565b611541565b34801561078f57600080fd5b506105a961079e366004615194565b6115b9565b3480156107af57600080fd5b506105a96107be3660046151b6565b611706565b3480156107cf57600080fd5b506105a96107de366004615271565b61186a565b3480156107ef57600080fd5b5061057b6105dc81565b34801561080557600080fd5b5061057b601a5481565b34801561081b57600080fd5b5061082461194f565b60405160ff909116815260200161055c565b34801561084257600080fd5b506105a96108513660046152e4565b61197e565b34801561086257600080fd5b506105a9610871366004615108565b611a3c565b34801561088257600080fd5b506105a9610891366004615327565b611ad7565b3480156108a257600080fd5b50601854610548906001600160a01b031681565b3480156108c257600080fd5b506105a96108d1366004615194565b611b4a565b3480156108e257600080fd5b50600f54610548906001600160a01b031681565b34801561090257600080fd5b50601b546106b090610100900460ff1681565b34801561092157600080fd5b506105a9610930366004615108565b611c97565b34801561094157600080fd5b506106b0610950366004615108565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561097a57600080fd5b50601b546106b09062010000900460ff1681565b34801561099a57600080fd5b506105a96109a9366004615327565b611ec2565b3480156109ba57600080fd5b506106b06109c9366004615108565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156109f357600080fd5b5061057b610a02366004615108565b611f35565b348015610a1357600080fd5b50610a27610a22366004615108565b611fbe565b60405161055c9493929190615355565b348015610a4357600080fd5b506105a961205f565b348015610a5857600080fd5b506105a9610a67366004615327565b61210c565b348015610a7857600080fd5b5061057b61227a565b348015610a8d57600080fd5b5061057b610a9c366004615108565b6001600160a01b031660009081526001602052604090205490565b348015610ac357600080fd5b506105a9612295565b348015610ad857600080fd5b506105a9610ae73660046153ad565b612354565b348015610af857600080fd5b506105a9610b07366004615327565b6123db565b348015610b1857600080fd5b506105a9612550565b348015610b2d57600080fd5b506105a9610b3c3660046150c3565b612642565b348015610b4d57600080fd5b506105a9610b5c366004615444565b6126d4565b348015610b6d57600080fd5b506000546001600160a01b0316610548565b348015610b8b57600080fd5b506106b061276b565b348015610ba057600080fd5b506105a96127d4565b348015610bb557600080fd5b506105a9610bc43660046150dc565b612a95565b348015610bd557600080fd5b5060408051808201909152600681527f42616e64657800000000000000000000000000000000000000000000000000006020820152610643565b348015610c1b57600080fd5b506105a9612b2f565b348015610c3057600080fd5b5061057b610c3f366004615108565b612ba7565b348015610c5057600080fd5b506105a9612bf3565b348015610c6557600080fd5b506106b0610c743660046150dc565b612c8b565b348015610c8557600080fd5b5061057b610c94366004615108565b612c9f565b348015610ca557600080fd5b506105a9612ceb565b348015610cba57600080fd5b506105a9610cc93660046154b0565b612e7f565b348015610cda57600080fd5b506106b0610ce9366004615108565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610d1357600080fd5b50600d54610d6f9061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a01000000000000000000008104821691600160601b9091041687565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015284166080840152831660a083015290911660c082015260e00161055c565b348015610dbf57600080fd5b506105a9610dce3660046150c3565b612f60565b348015610ddf57600080fd5b506105a9610dee3660046154dc565b612fbc565b348015610dff57600080fd5b5061057b610e0e366004615125565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e4557600080fd5b506105a9610e54366004615550565b613190565b348015610e6557600080fd5b5061057b610e74366004615108565b613209565b348015610e8557600080fd5b506105a9610e94366004615108565b613255565b348015610ea557600080fd5b5061057b6135d7565b348015610eba57600080fd5b506105a9610ec9366004615327565b61365e565b348015610eda57600080fd5b50601b546106b09060ff1681565b348015610ef457600080fd5b506106b0610f03366004615153565b613738565b348015610f1457600080fd5b5061057b613848565b348015610f2957600080fd5b50601154601254601354610f4a926001600160a01b03908116928116911683565b604080516001600160a01b039485168152928416602084015292169181019190915260600161055c565b348015610f8057600080fd5b506105a9610f8f36600461556e565b6138ab565b348015610fa057600080fd5b506018546106b090600160a81b900460ff1681565b348015610fc157600080fd5b506106b0610fd0366004615108565b613961565b348015610fe157600080fd5b506105a9610ff0366004615327565b6139f0565b34801561100157600080fd5b506105a9613a63565b6000546001600160a01b031633146110575760405162461bcd60e51b81526020600482018190526024820152600080516020615ac583398151915260448201526064015b60405180910390fd5b601b546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb6906110a890859085906004016155e4565b600060405180830381600087803b1580156110c257600080fd5b505af11580156110d6573d6000803e3d6000fd5b5050505060005b825181101561111b576111098382815181106110fb576110fb615608565b60200260200101518361210c565b8061111381615634565b9150506110dd565b505050565b6000546001600160a01b031633146111685760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b60968110156111b95760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e000000000000000000000000000000000000000000000000604482015260640161104e565b601b546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561121f57600080fd5b505af1158015611233573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906112959086815260200190565b60405180910390a35060015b92915050565b60006112b56009600a615731565b6015546112c29190615740565b905090565b6000546001600160a01b0316331461130f5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b600b5460ff1661131e57600080fd5b806001600160a01b0316826001600160a01b03160361138b576001600160a01b03811660009081526009602090815260408083208054600160ff199182168117909255600a909352922080549091168217905561137c908290611ec2565b61138781600161210c565b5050565b6001600160a01b0382811660008181526009602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600a9092528083208054861683179055928252919020805490921681179091556113f5908390611ec2565b611400816001611ec2565b61137c82600161210c565b60006114196009600a615731565b6114289064e8d4a51000615762565b60000361143457600080fd5b6114406009600a615731565b6112c29064e8d4a51000615762565b6000546001600160a01b031633146114975760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b54610100900460ff16156114ac57600080fd5b6001600160a01b03811630148015906114ce57506001600160a01b0382163014155b80156114ec5750816001600160a01b0316816001600160a01b031614155b6114f557600080fd5b601680546001600160a01b0319166001600160a01b03928316179055601b805476ffffffffffffffffffffffffffffffffffffffff000000191663010000009390921692909202179055565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146115a6576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906115a0908490615781565b90915550505b6115b1848484613afb565b949350505050565b6000546001600160a01b031633146116015760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6103e86116106009600a615731565b61161f9064e8d4a51000615762565b6116299190615740565b81836116376009600a615731565b6116469064e8d4a51000615762565b6116509190615762565b61165a9190615740565b10156116ce5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e0000000000000000000000000000606482015260840161104e565b80826116dc6009600a615731565b6116eb9064e8d4a51000615762565b6116f59190615762565b6116ff9190615740565b6015555050565b6000546001600160a01b0316331461174e5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b805182511461179f5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e0000000000000000000000604482015260640161104e565b60005b82518160ff16101561111b57818160ff16815181106117c3576117c3615608565b60200260200101516117ea336001600160a01b031660009081526001602052604090205490565b10156117f557600080fd5b61185733848360ff168151811061180e5761180e615608565b60200260200101516009600a6118249190615731565b858560ff168151811061183957611839615608565b602002602001015161184b9190615762565b60008060006001613fec565b508061186281615798565b9150506117a2565b6000546001600160a01b031633146118b25760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da69906084015b600060405180830381600087803b15801561193157600080fd5b505af1158015611945573d6000803e3d6000fd5b5050505050505050565b600061195d6009600a615731565b61196c9064e8d4a51000615762565b60000361197857600080fd5b50600990565b6000546001600160a01b031633146119c65760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6105dc8361ffff16111580156119e257506105dc8261ffff1611155b80156119f457506105dc8161ffff1611155b6119fd57600080fd5b600c805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b03163314611a845760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401611205565b6000546001600160a01b03163314611b1f5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b925760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6103e8611ba16009600a615731565b611bb09064e8d4a51000615762565b611bba9190615740565b8183611bc86009600a615731565b611bd79064e8d4a51000615762565b611be19190615762565b611beb9190615740565b1015611c5f5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e000000000000000000606482015260840161104e565b8082611c6d6009600a615731565b611c7c9064e8d4a51000615762565b611c869190615762565b611c909190615740565b6014555050565b6000546001600160a01b03163314611cdf5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b038116611d5b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606482015260840161104e565b61deac196001600160a01b03821601611ddc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606482015260840161104e565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611e7757600080546001600160a01b03168082526001602052604090912054611e759190839061184b565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611f0a5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6016546040517ff5df70180000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f5df7018906024015b602060405180830381865afa158015611f9a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a191906157b7565b6016546040517f6386c1c70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690636386c1c790602401600060405180830381865afa158015612028573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120509190810190615834565b93509350935093509193509193565b6000546001600160a01b031633146120a75760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601660009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120f757600080fd5b505af193505050508015612109575060015b50565b6000546001600160a01b031633146121545760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b038216301480159061217b5750600f546001600160a01b03838116911614155b61218457600080fd5b6001600160a01b0382166000908152600860205260409020805460ff1916821580159190911790915561221c57601654604051636f823f4f60e11b81526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b15801561220057600080fd5b505af1158015612214573d6000803e3d6000fd5b505050505050565b6016546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561220057600080fd5b60006122886009600a615731565b6014546112c29190615740565b6000546001600160a01b031633146122dd5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b600080546001600160a01b039081168252600660209081526040808420805460ff19908116909155845490931684526008909152808320805490921690915581546001600160a01b03191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461239c5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601180546001600160a01b039485166001600160a01b031991821617909155601280549385169382169390931790925560138054919093169116179055565b6000546001600160a01b031633146124235760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b801515600003612487576001600160a01b03828116600081815260026020526040808220805460ff19169055601b5490516380c581d160e01b81526004810193909352602483019190915263010000009004909116906380c581d1906044016121e6565b600354156124ee576203f480600354426124a19190615781565b116124ee5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b21604482015260640161104e565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601b5491516380c581d160e01b81526004810193909352602483015263010000009004909116906380c581d1906044016121e6565b601b54600160b81b900460ff16156125aa5760405162461bcd60e51b815260206004820152600860248201527f456e74657265642e000000000000000000000000000000000000000000000000604482015260640161104e565b601b805460ff60b81b1916600160b81b1790556018546040517fd895f8750000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063d895f87590602401600060405180830381600087803b15801561261b57600080fd5b505af115801561262f573d6000803e3d6000fd5b5050601b805460ff60b81b191690555050565b6000546001600160a01b0316331461268a5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6018546040517f3a1920f7000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690633a1920f790602401611205565b6000546001600160a01b0316331461271c5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6018546040517f74ff4dc70000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906374ff4dc7906119179087908790879087906004016158e1565b600080546001600160a01b031633146127b45760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b600e546127ce9030906001600160a01b0316600019614285565b50600190565b6000546001600160a01b0316331461281c5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b54610100900460ff16156128745760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c6564210000000000000000604482015260640161104e565b601b5462010000900460ff166128cc5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e0000000000000000604482015260640161104e565b601b54630100000090046001600160a01b031661290c57601b805476ffffffffffffffffffffffffffffffffffffffff0000001916306301000000021790555b601b54600f546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526009606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561299857600080fd5b505af19250505080156129a9575060015b50601660009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129fa57600080fd5b505af1925050508015612a0b575060015b50601b805461ff001916610100179055600b805460ff19169055600f546001600160a01b031660009081526001602052604090205461271090612a4f906005615762565b612a599190615740565b601955600f546001600160a01b03166000908152600160205260409020546103e890612a86906001615762565b612a909190615740565b601a55565b6000546001600160a01b03163314612add5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6018546040517fea3ba6ea0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063ea3ba6ea906044016121e6565b6016546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b158015612b8d57600080fd5b505af1158015612ba1573d6000803e3d6000fd5b50505050565b6018546040517f13419b6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009216906313419b6d90602401611f7d565b6000546001600160a01b03163314612c3b5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601860009054906101000a90046001600160a01b03166001600160a01b03166394cb72ce6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b8d57600080fd5b6000612c98338484613afb565b9392505050565b6016546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611f7d565b6000546001600160a01b03163314612d335760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6040805160028082526060820183526000926020830190803683375050600e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc1919061597e565b81600081518110612dd457612dd4615608565b6001600160a01b039283166020918202929092010152601054825191169082906001908110612e0557612e05615608565b6001600160a01b039283166020918202929092010152600e546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95904790612e6690600090869061dead90429060040161599b565b6000604051808303818588803b15801561220057600080fd5b6000546001600160a01b03163314612ec75760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b612ed281600a6159d0565b612edc9083615762565b6016546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b158015612f4357600080fd5b505af1158015612f57573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612fa85760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b620b71b08110612fb757600080fd5b601755565b6000546001600160a01b031633146130045760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b600d805461ffff88811663ffffffff199092169190911762010000888316021767ffffffff0000000019166401000000008783160267ffff000000000000191617660100000000000086831602176bffffffff0000000000000000191668010000000000000000858316026bffff000000000000000000001916176a010000000000000000000091841691909102179055808284866130a3898b6159dc565b6130ad91906159dc565b6130b791906159dc565b6130c191906159dc565b6130cb91906159dc565b600d80546dffff0000000000000000000000001916600160601b61ffff93841602179055600c5460009161310891620100008104821691166159dc565b600d5461ffff9182169250600160601b900416811015612f575760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e00000000000000000000000000000000000000000000000000606482015260840161104e565b6000546001600160a01b031633146131d85760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6018805460ff60a81b1916600160a81b9315159390930292909217909155601b805460ff1916911515919091179055565b6018546040517f1b831ead0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000921690631b831ead90602401611f7d565b6000546001600160a01b0316331461329d5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613306919061597e565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613353573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613377919061597e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156133da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fe919061597e565b90506001600160a01b03811661358f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561344c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613470919061597e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e1919061597e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356a919061597e565b600f80546001600160a01b0319166001600160a01b03929092169190911790556135ab565b600f80546001600160a01b0319166001600160a01b0383161790555b600e80546001600160a01b0319166001600160a01b03841690811790915561111b903090600019614285565b601854604080517fd78d5c1e00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163d78d5c1e9160048083019260209291908290030181865afa15801561363a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c291906157b7565b6000546001600160a01b031633146136a65760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b15801561371657600080fd5b505af115801561372a573d6000803e3d6000fd5b50505050611387828261210c565b6018546000906001600160a01b031633146137955760405162461bcd60e51b815260206004820152601960248201527f4f6e6c792061697264726f70706572206d61792063616c6c2e00000000000000604482015260640161104e565b6001600160a01b038416600090815260016020526040812080548492906137bd908490615781565b90915550506001600160a01b038316600090815260016020526040812080548492906137ea908490615a02565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383691815260200190565b60405180910390a35060019392505050565b601654604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa15801561363a573d6000803e3d6000fd5b6000546001600160a01b031633146138f35760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b82846139016009600a615731565b6139109064e8d4a51000615762565b61391a9190615762565b6139249190615740565b60195580826139356009600a615731565b6139449064e8d4a51000615762565b61394e9190615762565b6139589190615740565b601a5550505050565b601b546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa1580156139cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a19190615a1a565b6000546001600160a01b03163314613a385760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314613aab5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601860009054906101000a90046001600160a01b03166001600160a01b0316637c4b414d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b8d57600080fd5b60006001600160a01b038416613b795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b038316613bf55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161104e565b60008211613c6b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613c995760019250613cc7565b6001600160a01b03861660009081526002602052604090205460ff1615613cc35760019150613cc7565b5060015b613cd187876143dd565b15613edc57601b54610100900460ff16613d2d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c6564210000000000000000604482015260640161104e565b8280613d365750815b15613dfa576001600160a01b03871660009081526007602052604090205460ff16158015613d7d57506001600160a01b03861660009081526007602052604090205460ff16155b15613dfa57601454851115613dfa5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e000000000000000000000000000000000000000000000000606482015260840161104e565b600e546001600160a01b03878116911614801590613e16575081155b15613edc576001600160a01b03861660009081526007602052604090205460ff16613edc5760155485613e5e886001600160a01b031660009081526001602052604090205490565b613e689190615a02565b1115613edc5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e00000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b03871660009081526006602052604090205460019060ff1680613f1e57506001600160a01b03871660009081526006602052604090205460ff165b15613f27575060005b8215613fd157601854600160a01b900460ff16158015613f505750601854600160a81b900460ff165b8015613f7557506001600160a01b0387166000908152600a602052604090205460ff16155b8015613f9a57506001600160a01b0388166000908152600a602052604090205460ff16155b15613fd157306000908152600160205260409020546019548110613fcf57601a548110613fc65750601a545b613fcf816144ae565b505b613fe088888884888888613fec565b98975050505050505050565b601b5460009062010000900460ff166140ee576140098888614ade565b601b5462010000900460ff16158015614027575061402788886143dd565b801561404c57506001600160a01b03881660009081526005602052604090205460ff16155b801561407157506001600160a01b03871660009081526005602052604090205460ff16155b801561407b575081155b156140ee5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e000000000000000000000000000000000000000000000000000000000000606482015260840161104e565b6140f888886143dd565b156141ac57601b546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015289811660248301526044820189905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015614195575060408051601f3d908101601f1916820190925261419291810190615a1a565b60015b61419e57600080fd5b9050806141aa57600080fd5b505b6001600160a01b038816600090815260016020526040812080548892906141d4908490615781565b9091555086905085156141f1576141ee8988878787614c6a565b90505b6001600160a01b03881660009081526001602052604081208054839290614219908490615a02565b9091555061422990508989614d55565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161426e91815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b0383166143005760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b03821661437c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0384811691161480159061440a57506000546001600160a01b03838116911614155b801561442157506000546001600160a01b03163214155b801561444657506001600160a01b03821660009081526009602052604090205460ff16155b801561446b57506001600160a01b03831660009081526009602052604090205460ff16155b801561448257506001600160a01b03821661dead14155b801561449657506001600160a01b03821615155b8015612c98575050506001600160a01b031630141590565b6018805460ff60a01b1916600160a01b1790556040805160e081018252600d5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a01000000000000000000008104831660a0830152600160601b900490911660c0820181905260000361454b5750614ace565b306000908152600460209081526040808320600e546001600160a01b03168452909152902054600019146145a457306000908152600460209081526040808320600e546001600160a01b03168452909152902060001990555b600e54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156145ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614612919061597e565b9050600060028360c0015161ffff16846020015161ffff16866146359190615762565b61463f9190615740565b6146499190615740565b905060006146578286615781565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061469157614691615608565b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106146c5576146c5615608565b6001600160a01b039283166020918202929092010152600e546040517f791ac9470000000000000000000000000000000000000000000000000000000081524792919091169063791ac94790614728908690600090879030904290600401615a37565b600060405180830381600087803b15801561474257600080fd5b505af1158015614756573d6000803e3d6000fd5b50505050600081476147689190615781565b90506000846147778784615762565b6147819190615740565b9050851561487257600e546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101889052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614810573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148359190615a73565b505060408051838152602081018990527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61487c8183615781565b915087602001518860c0018181516148949190615aa1565b61ffff90811690915260c08a01518a5160009350908216916148b7911685615762565b6148c19190615740565b905060008960c0015161ffff168a6060015161ffff16856148e29190615762565b6148ec9190615740565b905060008a60c0015161ffff168b6080015161ffff168661490d9190615762565b6149179190615740565b905060008b60c0015161ffff168c60a0015161ffff16876149389190615762565b6149429190615740565b9050600081836149528688615a02565b61495c9190615a02565b6149669190615a02565b6149709088615781565b8d5190915061ffff16156149e257601660009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156149ce57600080fd5b505af1935050505080156149e0575060015b505b60408d015161ffff1615614a2c576011546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614a2a573d6000803e3d6000fd5b505b60608d015161ffff1615614a76576012546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015614a74573d6000803e3d6000fd5b505b60808d015161ffff1615614ac0576013546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015614abe573d6000803e3d6000fd5b505b505050505050505050505050505b506018805460ff60a01b19169055565b601b5462010000900460ff1615614b5d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e0000000000000000000000000000000000000000000000000000000000606482015260840161104e565b614b6782826143dd565b158015614b815750600f546001600160a01b038281169116145b15611387576001600160a01b038083166000908152600960205260409020805460ff19166001179055601b805462ff000019166201000017908190556301000000900416614bf257601b805476ffffffffffffffffffffffffffffffffffffffff0000001916306301000000021790555b6016546001600160a01b0316614c1557601680546001600160a01b031916301790555b6018805460ff60a81b1916600160a81b179055600b805460ff19169055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6000808415614c805750600c5461ffff16614caa565b8315614c995750600c5462010000900461ffff16614caa565b50600c54640100000000900461ffff165b80600003614cbb5785915050614d4c565b6000612710614cca8389615762565b614cd49190615740565b30600090815260016020526040812080549293508392909190614cf8908490615a02565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3614d478188615781565b925050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff16614de6576016546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614dd357600080fd5b505af1925050508015614de4575060015b505b6001600160a01b03811660009081526008602052604090205460ff16614e77576016546001600160a01b0382811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614e6457600080fd5b505af1925050508015614e75575060015b505b601b5460ff1615611387576016546017546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb91614ed09160040190815260200190565b600060405180830381600087803b158015614eea57600080fd5b505af1925050508015614efb575060015b15611387575050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f4357614f43614f04565b604052919050565b600067ffffffffffffffff821115614f6557614f65614f04565b5060051b60200190565b6001600160a01b038116811461210957600080fd5b600082601f830112614f9557600080fd5b81356020614faa614fa583614f4b565b614f1a565b82815260059290921b84018101918181019086841115614fc957600080fd5b8286015b84811015614fed578035614fe081614f6f565b8352918301918301614fcd565b509695505050505050565b801515811461210957600080fd5b6000806040838503121561501957600080fd5b823567ffffffffffffffff81111561503057600080fd5b61503c85828601614f84565b925050602083013561504d81614ff8565b809150509250929050565b60005b8381101561507357818101518382015260200161505b565b83811115612ba15750506000910152565b6000815180845261509c816020860160208601615058565b601f01601f19169290920160200192915050565b602081526000612c986020830184615084565b6000602082840312156150d557600080fd5b5035919050565b600080604083850312156150ef57600080fd5b82356150fa81614f6f565b946020939093013593505050565b60006020828403121561511a57600080fd5b8135612c9881614f6f565b6000806040838503121561513857600080fd5b823561514381614f6f565b9150602083013561504d81614f6f565b60008060006060848603121561516857600080fd5b833561517381614f6f565b9250602084013561518381614f6f565b929592945050506040919091013590565b600080604083850312156151a757600080fd5b50508035926020909101359150565b600080604083850312156151c957600080fd5b823567ffffffffffffffff808211156151e157600080fd5b6151ed86838701614f84565b935060209150818501358181111561520457600080fd5b85019050601f8101861361521757600080fd5b8035615225614fa582614f4b565b81815260059190911b8201830190838101908883111561524457600080fd5b928401925b8284101561526257833582529284019290840190615249565b80955050505050509250929050565b6000806000806080858703121561528757600080fd5b843561529281614ff8565b935060208501356152a281614ff8565b925060408501356152b281614ff8565b915060608501356152c281614ff8565b939692955090935050565b803561ffff811681146152df57600080fd5b919050565b6000806000606084860312156152f957600080fd5b615302846152cd565b9250615310602085016152cd565b915061531e604085016152cd565b90509250925092565b6000806040838503121561533a57600080fd5b823561534581614f6f565b9150602083013561504d81614ff8565b6080815260006153686080830187615084565b828103602084015261537a8187615084565b9050828103604084015261538e8186615084565b905082810360608401526153a28185615084565b979650505050505050565b6000806000606084860312156153c257600080fd5b83356153cd81614f6f565b925060208401356153dd81614f6f565b915060408401356153ed81614f6f565b809150509250925092565b60008083601f84011261540a57600080fd5b50813567ffffffffffffffff81111561542257600080fd5b6020830191508360208260051b850101111561543d57600080fd5b9250929050565b6000806000806040858703121561545a57600080fd5b843567ffffffffffffffff8082111561547257600080fd5b61547e888389016153f8565b9096509450602087013591508082111561549757600080fd5b506154a4878288016153f8565b95989497509550505050565b6000806000606084860312156154c557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c087890312156154f557600080fd5b6154fe876152cd565b955061550c602088016152cd565b945061551a604088016152cd565b9350615528606088016152cd565b9250615536608088016152cd565b915061554460a088016152cd565b90509295509295509295565b6000806040838503121561556357600080fd5b823561534581614ff8565b6000806000806080858703121561558457600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156155d95781516001600160a01b0316875295820195908201906001016155b4565b509495945050505050565b6040815260006155f760408301856155a0565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016156465761564661561e565b5060010190565b600181815b8085111561568857816000190482111561566e5761566e61561e565b8085161561567b57918102915b93841c9390800290615652565b509250929050565b60008261569f575060016112a1565b816156ac575060006112a1565b81600181146156c257600281146156cc576156e8565b60019150506112a1565b60ff8411156156dd576156dd61561e565b50506001821b6112a1565b5060208310610133831016604e8410600b841016171561570b575081810a6112a1565b615715838361564d565b80600019048211156157295761572961561e565b029392505050565b6000612c9860ff841683615690565b60008261575d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561577c5761577c61561e565b500290565b6000828210156157935761579361561e565b500390565b600060ff821660ff81036157ae576157ae61561e565b60010192915050565b6000602082840312156157c957600080fd5b5051919050565b600082601f8301126157e157600080fd5b815167ffffffffffffffff8111156157fb576157fb614f04565b61580e601f8201601f1916602001614f1a565b81815284602083860101111561582357600080fd5b6115b1826020830160208701615058565b6000806000806080858703121561584a57600080fd5b845167ffffffffffffffff8082111561586257600080fd5b61586e888389016157d0565b9550602087015191508082111561588457600080fd5b615890888389016157d0565b945060408701519150808211156158a657600080fd5b6158b2888389016157d0565b935060608701519150808211156158c857600080fd5b506158d5878288016157d0565b91505092959194509250565b6040808252810184905260008560608301825b8781101561592457823561590781614f6f565b6001600160a01b03168252602092830192909101906001016158f4565b5083810360208501528481527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85111561595d57600080fd5b8460051b915081866020830137600091016020019081529695505050505050565b60006020828403121561599057600080fd5b8151612c9881614f6f565b8481526080602082015260006159b460808301866155a0565b6001600160a01b03949094166040830152506060015292915050565b6000612c988383615690565b600061ffff8083168185168083038211156159f9576159f961561e565b01949350505050565b60008219821115615a1557615a1561561e565b500190565b600060208284031215615a2c57600080fd5b8151612c9881614ff8565b85815284602082015260a060408201526000615a5660a08301866155a0565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215615a8857600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015615abc57615abc61561e565b03939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220cf887e553c1a1d8e801cd924ff3696515d567a6643a9dff5dfd3e721cc3cbee764736f6c634300080d00336080604052620151806005556006805460ff1916600117905534801561002457600080fd5b50604051610e32380380610e3283398101604081905261004391610075565b600255600080546001600160a01b039092166001600160a01b03199283168117909155600180549092161790556100af565b6000806040838503121561008857600080fd5b82516001600160a01b038116811461009f57600080fd5b6020939093015192949293505050565b610d74806100be6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80637c4b414d1161008c578063d78d5c1e11610066578063d78d5c1e146101bc578063d895f875146101c4578063ea3ba6ea146101d7578063f4c02b83146101ea57600080fd5b80637c4b414d1461018157806382bfefc81461018957806394cb72ce146101b457600080fd5b806328c61255116100bd57806328c612551461013c5780633a1920f71461015957806374ff4dc71461016e57600080fd5b806313419b6d146100e45780631b831ead1461010a5780631c8ec29914610133575b600080fd5b6100f76100f2366004610a25565b6101fd565b6040519081526020015b60405180910390f35b6100f7610118366004610a25565b6001600160a01b031660009081526003602052604090205490565b6100f760055481565b6006546101499060ff1681565b6040519015158152602001610101565b61016c610167366004610a42565b610257565b005b61016c61017c366004610aa7565b610322565b61016c6103fc565b60005461019c906001600160a01b031681565b6040516001600160a01b039091168152602001610101565b61016c61060d565b6004546100f7565b61016c6101d2366004610a25565b610687565b61016c6101e5366004610b13565b6108bb565b60015461019c906001600160a01b031681565b6001600160a01b03811660009081526003602052604081206001015460055442906102289083610b55565b10156102375750600092915050565b42600554826102469190610b55565b6102509190610b6d565b9392505050565b6000546001600160a01b031633148061026f57503033145b6102ca5760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520746f6b656e6044820152601760f91b60648201526084015b60405180910390fd5b6201518081111561031d5760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742073657420686967686572207468616e2032346872732e00000060448201526064016102c1565b600555565b6000546001600160a01b031633148061033a57503033145b6103905760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520746f6b656e6044820152601760f91b60648201526084016102c1565b60005b838110156103f5576103e38585838181106103b0576103b0610b84565b90506020020160208101906103c59190610a25565b8484848181106103d7576103d7610b84565b905060200201356108bb565b806103ed81610b9a565b915050610393565b5050505050565b6000546001600160a01b031633148061041457503033145b61046a5760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520746f6b656e6044820152601760f91b60648201526084016102c1565b600154604080517f893d20e800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163893d20e89160048083019260209291908290030181865afa1580156104cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f19190610bb3565b6001546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057c9190610bd0565b6004546105899190610b6d565b60015460405163f0774e7160e01b81526001600160a01b0385811660048301523060248301526044820184905292935091169063f0774e71906064016020604051808303816000875af11580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106089190610be9565b505050565b6000546001600160a01b031633148061062557503033145b61067b5760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520746f6b656e6044820152601760f91b60648201526084016102c1565b6006805460ff19169055565b6001600160a01b03811660009081526003602090815260409182902082516060810184528154808252600183015493820193909352600290910154928101929092524291906107185760405162461bcd60e51b815260206004820152601d60248201527f4e6f20746f6b656e7320617661696c61626c6520746f20636c61696d2e00000060448201526064016102c1565b60065460009060ff16156107dd578260055483602001516107399190610b55565b11156107875760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420636c61696d20616761696e207965742e00000000000000000060448201526064016102c1565b60408201518251111561079f575060408101516107ba565b506001600160a01b0383166000908152600360205260409020545b6001600160a01b03841660009081526003602052604090206001018390556107f8565b506001600160a01b0383166000908152600360205260409020545b6001600160a01b03841660009081526003602052604081208054839290610820908490610b6d565b9250508190555080600460008282546108399190610b6d565b909155505060015460405163f0774e7160e01b81523060048201526001600160a01b038681166024830152604482018490529091169063f0774e71906064016020604051808303816000875af1158015610897573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f59190610be9565b6000546001600160a01b03163314806108d357503033145b6109295760405162461bcd60e51b815260206004820152602160248201527f4f776e61626c653a2063616c6c6572206973206e6f742074686520746f6b656e6044820152601760f91b60648201526084016102c1565b6001600160a01b0382166000908152600360205260409020541561098f5760405162461bcd60e51b815260206004820152601160248201527f5573657220616c7265616479207365742e00000000000000000000000000000060448201526064016102c1565b60025461099d90600a610cf1565b6109a79082610cfd565b6001600160a01b03831660009081526003602052604081208281556001015590506109d3601482610d1c565b6001600160a01b03831660009081526003602052604081206002019190915560048054839290610a04908490610b55565b90915550505050565b6001600160a01b0381168114610a2257600080fd5b50565b600060208284031215610a3757600080fd5b813561025081610a0d565b600060208284031215610a5457600080fd5b5035919050565b60008083601f840112610a6d57600080fd5b50813567ffffffffffffffff811115610a8557600080fd5b6020830191508360208260051b8501011115610aa057600080fd5b9250929050565b60008060008060408587031215610abd57600080fd5b843567ffffffffffffffff80821115610ad557600080fd5b610ae188838901610a5b565b90965094506020870135915080821115610afa57600080fd5b50610b0787828801610a5b565b95989497509550505050565b60008060408385031215610b2657600080fd5b8235610b3181610a0d565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610b6857610b68610b3f565b500190565b600082821015610b7f57610b7f610b3f565b500390565b634e487b7160e01b600052603260045260246000fd5b600060018201610bac57610bac610b3f565b5060010190565b600060208284031215610bc557600080fd5b815161025081610a0d565b600060208284031215610be257600080fd5b5051919050565b600060208284031215610bfb57600080fd5b8151801515811461025057600080fd5b600181815b80851115610c46578160001904821115610c2c57610c2c610b3f565b80851615610c3957918102915b93841c9390800290610c10565b509250929050565b600082610c5d57506001610ceb565b81610c6a57506000610ceb565b8160018114610c805760028114610c8a57610ca6565b6001915050610ceb565b60ff841115610c9b57610c9b610b3f565b50506001821b610ceb565b5060208310610133831016604e8410600b8410161715610cc9575081810a610ceb565b610cd38383610c0b565b8060001904821115610ce757610ce7610b3f565b0290505b92915050565b60006102508383610c4e565b6000816000190483118215151615610d1757610d17610b3f565b500290565b600082610d3957634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220435b51ef44ce66e1e1a7f7582aabf33d85c851ba568cee2700d40232fe11301164736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106105265760003560e01c8063715018a6116102af578063b421626c11610179578063eec2744e116100d6578063fb78680d1161008a578063fe575a871161006f578063fe575a8714610fb5578063feadde9c14610fd5578063ff1f767614610ff557600080fd5b8063fb78680d14610f74578063fdb78c0e14610f9457600080fd5b8063f0774e71116100bb578063f0774e7114610ee8578063f7c245ea14610f08578063f94aa1b414610f1d57600080fd5b8063eec2744e14610eae578063efe7dc9014610ece57600080fd5b8063dd62ed3e1161012d578063e8c0eb2011610112578063e8c0eb2014610e59578063eafb5a3c14610e79578063ebc75be414610e9957600080fd5b8063dd62ed3e14610df3578063dea528a114610e3957600080fd5b8063cf8477061161015e578063cf84770614610d07578063d0b1449d14610db3578063d69153c914610dd357600080fd5b8063b421626c14610cae578063c705c56914610cce57600080fd5b80638ac6fa0311610227578063a9059cbb116101db578063b16f52d9116101c0578063b16f52d914610c99578063b1b08f71146107e3578063b3d514fb146107e357600080fd5b8063a9059cbb14610c59578063ab5cb5a614610c7957600080fd5b80639dc676151161020c5780639dc6761514610c0f578063a3d4176a14610c24578063a3ff795e14610c4457600080fd5b80638ac6fa0314610ba957806395d89b4114610bc957600080fd5b80638749209d1161027e578063893d20e811610263578063893d20e814610b615780638a63bd9b14610b7f5780638a8c523c14610b9457600080fd5b80638749209d14610b215780638839d81614610b4157600080fd5b8063715018a614610ab757806375cb1bd114610acc57806380c581d114610aec578063850db72614610b0c57600080fd5b8063313ce567116103f05780634fbee193116103685780636386c1c71161031c5780636b639a25116103015780636b639a2514610a4c5780636ebd007814610a6c57806370a0823114610a8157600080fd5b80636386c1c714610a075780636ab86dc114610a3757600080fd5b8063590ffdce1161034d578063590ffdce1461098e5780635cce86cd146109ae5780636372c68f146109e757600080fd5b80634fbee1931461093557806350a8e0161461096e57600080fd5b80633884d635116103bf578063452ed4f1116103a4578063452ed4f1146108d65780634ada218b146108f65780634fb2e45d1461091557600080fd5b80633884d635146108965780633f3cf56c146108b657600080fd5b8063313ce5671461080f57806332cde6641461083657806333251a0b1461085657806336fddb041461087657600080fd5b80630fa604e41161049e578063260039571161045257806329dd87981161043757806329dd8798146107c35780632b28fc7a146107e35780632e8fa821146107f957600080fd5b806326003957146107835780632610eaca146107a357600080fd5b806318160ddd1161048357806318160ddd1461072e578063218950bc1461074357806323b872dd1461076357600080fd5b80630fa604e4146106f957806313b4a7f41461070e57600080fd5b806306fdde03116104f557806309231602116104da5780630923160214610670578063095ea7b3146106905780630dcbcf1c146106c057600080fd5b806306fdde03146106015780630758d9241461065057600080fd5b806303fd2a45146105325780630445b6671461056557806305bbedb614610589578063069d955f146105ab57600080fd5b3661052d57005b600080fd5b34801561053e57600080fd5b5061054861dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561057157600080fd5b5061057b60195481565b60405190815260200161055c565b34801561059557600080fd5b506105a96105a4366004615006565b61100a565b005b3480156105b757600080fd5b50600c546105dc9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161055c565b34801561060d57600080fd5b5060408051808201909152600c81527f42616e616e6120496e646578000000000000000000000000000000000000000060208201525b60405161055c91906150b0565b34801561065c57600080fd5b50600e54610548906001600160a01b031681565b34801561067c57600080fd5b506105a961068b3660046150c3565b611120565b34801561069c57600080fd5b506106b06106ab3660046150dc565b61123a565b604051901515815260200161055c565b3480156106cc57600080fd5b506106b06106db366004615108565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561070557600080fd5b5061057b6112a7565b34801561071a57600080fd5b506105a9610729366004615125565b6112c7565b34801561073a57600080fd5b5061057b61140b565b34801561074f57600080fd5b506105a961075e366004615125565b61144f565b34801561076f57600080fd5b506106b061077e366004615153565b611541565b34801561078f57600080fd5b506105a961079e366004615194565b6115b9565b3480156107af57600080fd5b506105a96107be3660046151b6565b611706565b3480156107cf57600080fd5b506105a96107de366004615271565b61186a565b3480156107ef57600080fd5b5061057b6105dc81565b34801561080557600080fd5b5061057b601a5481565b34801561081b57600080fd5b5061082461194f565b60405160ff909116815260200161055c565b34801561084257600080fd5b506105a96108513660046152e4565b61197e565b34801561086257600080fd5b506105a9610871366004615108565b611a3c565b34801561088257600080fd5b506105a9610891366004615327565b611ad7565b3480156108a257600080fd5b50601854610548906001600160a01b031681565b3480156108c257600080fd5b506105a96108d1366004615194565b611b4a565b3480156108e257600080fd5b50600f54610548906001600160a01b031681565b34801561090257600080fd5b50601b546106b090610100900460ff1681565b34801561092157600080fd5b506105a9610930366004615108565b611c97565b34801561094157600080fd5b506106b0610950366004615108565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561097a57600080fd5b50601b546106b09062010000900460ff1681565b34801561099a57600080fd5b506105a96109a9366004615327565b611ec2565b3480156109ba57600080fd5b506106b06109c9366004615108565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156109f357600080fd5b5061057b610a02366004615108565b611f35565b348015610a1357600080fd5b50610a27610a22366004615108565b611fbe565b60405161055c9493929190615355565b348015610a4357600080fd5b506105a961205f565b348015610a5857600080fd5b506105a9610a67366004615327565b61210c565b348015610a7857600080fd5b5061057b61227a565b348015610a8d57600080fd5b5061057b610a9c366004615108565b6001600160a01b031660009081526001602052604090205490565b348015610ac357600080fd5b506105a9612295565b348015610ad857600080fd5b506105a9610ae73660046153ad565b612354565b348015610af857600080fd5b506105a9610b07366004615327565b6123db565b348015610b1857600080fd5b506105a9612550565b348015610b2d57600080fd5b506105a9610b3c3660046150c3565b612642565b348015610b4d57600080fd5b506105a9610b5c366004615444565b6126d4565b348015610b6d57600080fd5b506000546001600160a01b0316610548565b348015610b8b57600080fd5b506106b061276b565b348015610ba057600080fd5b506105a96127d4565b348015610bb557600080fd5b506105a9610bc43660046150dc565b612a95565b348015610bd557600080fd5b5060408051808201909152600681527f42616e64657800000000000000000000000000000000000000000000000000006020820152610643565b348015610c1b57600080fd5b506105a9612b2f565b348015610c3057600080fd5b5061057b610c3f366004615108565b612ba7565b348015610c5057600080fd5b506105a9612bf3565b348015610c6557600080fd5b506106b0610c743660046150dc565b612c8b565b348015610c8557600080fd5b5061057b610c94366004615108565b612c9f565b348015610ca557600080fd5b506105a9612ceb565b348015610cba57600080fd5b506105a9610cc93660046154b0565b612e7f565b348015610cda57600080fd5b506106b0610ce9366004615108565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610d1357600080fd5b50600d54610d6f9061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a01000000000000000000008104821691600160601b9091041687565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015284166080840152831660a083015290911660c082015260e00161055c565b348015610dbf57600080fd5b506105a9610dce3660046150c3565b612f60565b348015610ddf57600080fd5b506105a9610dee3660046154dc565b612fbc565b348015610dff57600080fd5b5061057b610e0e366004615125565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e4557600080fd5b506105a9610e54366004615550565b613190565b348015610e6557600080fd5b5061057b610e74366004615108565b613209565b348015610e8557600080fd5b506105a9610e94366004615108565b613255565b348015610ea557600080fd5b5061057b6135d7565b348015610eba57600080fd5b506105a9610ec9366004615327565b61365e565b348015610eda57600080fd5b50601b546106b09060ff1681565b348015610ef457600080fd5b506106b0610f03366004615153565b613738565b348015610f1457600080fd5b5061057b613848565b348015610f2957600080fd5b50601154601254601354610f4a926001600160a01b03908116928116911683565b604080516001600160a01b039485168152928416602084015292169181019190915260600161055c565b348015610f8057600080fd5b506105a9610f8f36600461556e565b6138ab565b348015610fa057600080fd5b506018546106b090600160a81b900460ff1681565b348015610fc157600080fd5b506106b0610fd0366004615108565b613961565b348015610fe157600080fd5b506105a9610ff0366004615327565b6139f0565b34801561100157600080fd5b506105a9613a63565b6000546001600160a01b031633146110575760405162461bcd60e51b81526020600482018190526024820152600080516020615ac583398151915260448201526064015b60405180910390fd5b601b546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb6906110a890859085906004016155e4565b600060405180830381600087803b1580156110c257600080fd5b505af11580156110d6573d6000803e3d6000fd5b5050505060005b825181101561111b576111098382815181106110fb576110fb615608565b60200260200101518361210c565b8061111381615634565b9150506110dd565b505050565b6000546001600160a01b031633146111685760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b60968110156111b95760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e000000000000000000000000000000000000000000000000604482015260640161104e565b601b546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561121f57600080fd5b505af1158015611233573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906112959086815260200190565b60405180910390a35060015b92915050565b60006112b56009600a615731565b6015546112c29190615740565b905090565b6000546001600160a01b0316331461130f5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b600b5460ff1661131e57600080fd5b806001600160a01b0316826001600160a01b03160361138b576001600160a01b03811660009081526009602090815260408083208054600160ff199182168117909255600a909352922080549091168217905561137c908290611ec2565b61138781600161210c565b5050565b6001600160a01b0382811660008181526009602090815260408083208054600160ff1991821681179092559587168085528285208054881683179055948452600a9092528083208054861683179055928252919020805490921681179091556113f5908390611ec2565b611400816001611ec2565b61137c82600161210c565b60006114196009600a615731565b6114289064e8d4a51000615762565b60000361143457600080fd5b6114406009600a615731565b6112c29064e8d4a51000615762565b6000546001600160a01b031633146114975760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b54610100900460ff16156114ac57600080fd5b6001600160a01b03811630148015906114ce57506001600160a01b0382163014155b80156114ec5750816001600160a01b0316816001600160a01b031614155b6114f557600080fd5b601680546001600160a01b0319166001600160a01b03928316179055601b805476ffffffffffffffffffffffffffffffffffffffff000000191663010000009390921692909202179055565b6001600160a01b0383166000908152600460209081526040808320338452909152812054600019146115a6576001600160a01b0384166000908152600460209081526040808320338452909152812080548492906115a0908490615781565b90915550505b6115b1848484613afb565b949350505050565b6000546001600160a01b031633146116015760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6103e86116106009600a615731565b61161f9064e8d4a51000615762565b6116299190615740565b81836116376009600a615731565b6116469064e8d4a51000615762565b6116509190615762565b61165a9190615740565b10156116ce5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e0000000000000000000000000000606482015260840161104e565b80826116dc6009600a615731565b6116eb9064e8d4a51000615762565b6116f59190615762565b6116ff9190615740565b6015555050565b6000546001600160a01b0316331461174e5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b805182511461179f5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e0000000000000000000000604482015260640161104e565b60005b82518160ff16101561111b57818160ff16815181106117c3576117c3615608565b60200260200101516117ea336001600160a01b031660009081526001602052604090205490565b10156117f557600080fd5b61185733848360ff168151811061180e5761180e615608565b60200260200101516009600a6118249190615731565b858560ff168151811061183957611839615608565b602002602001015161184b9190615762565b60008060006001613fec565b508061186281615798565b9150506117a2565b6000546001600160a01b031633146118b25760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da69906084015b600060405180830381600087803b15801561193157600080fd5b505af1158015611945573d6000803e3d6000fd5b5050505050505050565b600061195d6009600a615731565b61196c9064e8d4a51000615762565b60000361197857600080fd5b50600990565b6000546001600160a01b031633146119c65760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6105dc8361ffff16111580156119e257506105dc8261ffff1611155b80156119f457506105dc8161ffff1611155b6119fd57600080fd5b600c805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b03163314611a845760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401611205565b6000546001600160a01b03163314611b1f5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611b925760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6103e8611ba16009600a615731565b611bb09064e8d4a51000615762565b611bba9190615740565b8183611bc86009600a615731565b611bd79064e8d4a51000615762565b611be19190615762565b611beb9190615740565b1015611c5f5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e000000000000000000606482015260840161104e565b8082611c6d6009600a615731565b611c7c9064e8d4a51000615762565b611c869190615762565b611c909190615740565b6014555050565b6000546001600160a01b03163314611cdf5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b038116611d5b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606482015260840161104e565b61deac196001600160a01b03821601611ddc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606482015260840161104e565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611e7757600080546001600160a01b03168082526001602052604090912054611e759190839061184b565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611f0a5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6016546040517ff5df70180000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f5df7018906024015b602060405180830381865afa158015611f9a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a191906157b7565b6016546040517f6386c1c70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690636386c1c790602401600060405180830381865afa158015612028573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120509190810190615834565b93509350935093509193509193565b6000546001600160a01b031633146120a75760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601660009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120f757600080fd5b505af193505050508015612109575060015b50565b6000546001600160a01b031633146121545760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b038216301480159061217b5750600f546001600160a01b03838116911614155b61218457600080fd5b6001600160a01b0382166000908152600860205260409020805460ff1916821580159190911790915561221c57601654604051636f823f4f60e11b81526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b15801561220057600080fd5b505af1158015612214573d6000803e3d6000fd5b505050505050565b6016546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561220057600080fd5b60006122886009600a615731565b6014546112c29190615740565b6000546001600160a01b031633146122dd5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b600080546001600160a01b039081168252600660209081526040808420805460ff19908116909155845490931684526008909152808320805490921690915581546001600160a01b03191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461239c5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601180546001600160a01b039485166001600160a01b031991821617909155601280549385169382169390931790925560138054919093169116179055565b6000546001600160a01b031633146124235760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b801515600003612487576001600160a01b03828116600081815260026020526040808220805460ff19169055601b5490516380c581d160e01b81526004810193909352602483019190915263010000009004909116906380c581d1906044016121e6565b600354156124ee576203f480600354426124a19190615781565b116124ee5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b21604482015260640161104e565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601b5491516380c581d160e01b81526004810193909352602483015263010000009004909116906380c581d1906044016121e6565b601b54600160b81b900460ff16156125aa5760405162461bcd60e51b815260206004820152600860248201527f456e74657265642e000000000000000000000000000000000000000000000000604482015260640161104e565b601b805460ff60b81b1916600160b81b1790556018546040517fd895f8750000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b039091169063d895f87590602401600060405180830381600087803b15801561261b57600080fd5b505af115801561262f573d6000803e3d6000fd5b5050601b805460ff60b81b191690555050565b6000546001600160a01b0316331461268a5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6018546040517f3a1920f7000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b0390911690633a1920f790602401611205565b6000546001600160a01b0316331461271c5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6018546040517f74ff4dc70000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906374ff4dc7906119179087908790879087906004016158e1565b600080546001600160a01b031633146127b45760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b600e546127ce9030906001600160a01b0316600019614285565b50600190565b6000546001600160a01b0316331461281c5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b54610100900460ff16156128745760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c6564210000000000000000604482015260640161104e565b601b5462010000900460ff166128cc5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e0000000000000000604482015260640161104e565b601b54630100000090046001600160a01b031661290c57601b805476ffffffffffffffffffffffffffffffffffffffff0000001916306301000000021790555b601b54600f546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526009606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561299857600080fd5b505af19250505080156129a9575060015b50601660009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129fa57600080fd5b505af1925050508015612a0b575060015b50601b805461ff001916610100179055600b805460ff19169055600f546001600160a01b031660009081526001602052604090205461271090612a4f906005615762565b612a599190615740565b601955600f546001600160a01b03166000908152600160205260409020546103e890612a86906001615762565b612a909190615740565b601a55565b6000546001600160a01b03163314612add5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6018546040517fea3ba6ea0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063ea3ba6ea906044016121e6565b6016546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b158015612b8d57600080fd5b505af1158015612ba1573d6000803e3d6000fd5b50505050565b6018546040517f13419b6d0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009216906313419b6d90602401611f7d565b6000546001600160a01b03163314612c3b5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601860009054906101000a90046001600160a01b03166001600160a01b03166394cb72ce6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b8d57600080fd5b6000612c98338484613afb565b9392505050565b6016546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611f7d565b6000546001600160a01b03163314612d335760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6040805160028082526060820183526000926020830190803683375050600e54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc1919061597e565b81600081518110612dd457612dd4615608565b6001600160a01b039283166020918202929092010152601054825191169082906001908110612e0557612e05615608565b6001600160a01b039283166020918202929092010152600e546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95904790612e6690600090869061dead90429060040161599b565b6000604051808303818588803b15801561220057600080fd5b6000546001600160a01b03163314612ec75760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b612ed281600a6159d0565b612edc9083615762565b6016546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b158015612f4357600080fd5b505af1158015612f57573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314612fa85760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b620b71b08110612fb757600080fd5b601755565b6000546001600160a01b031633146130045760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b600d805461ffff88811663ffffffff199092169190911762010000888316021767ffffffff0000000019166401000000008783160267ffff000000000000191617660100000000000086831602176bffffffff0000000000000000191668010000000000000000858316026bffff000000000000000000001916176a010000000000000000000091841691909102179055808284866130a3898b6159dc565b6130ad91906159dc565b6130b791906159dc565b6130c191906159dc565b6130cb91906159dc565b600d80546dffff0000000000000000000000001916600160601b61ffff93841602179055600c5460009161310891620100008104821691166159dc565b600d5461ffff9182169250600160601b900416811015612f575760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e00000000000000000000000000000000000000000000000000606482015260840161104e565b6000546001600160a01b031633146131d85760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6018805460ff60a81b1916600160a81b9315159390930292909217909155601b805460ff1916911515919091179055565b6018546040517f1b831ead0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000921690631b831ead90602401611f7d565b6000546001600160a01b0316331461329d5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613306919061597e565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613353573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613377919061597e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156133da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fe919061597e565b90506001600160a01b03811661358f57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561344c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613470919061597e565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e1919061597e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015613546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356a919061597e565b600f80546001600160a01b0319166001600160a01b03929092169190911790556135ab565b600f80546001600160a01b0319166001600160a01b0383161790555b600e80546001600160a01b0319166001600160a01b03841690811790915561111b903090600019614285565b601854604080517fd78d5c1e00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163d78d5c1e9160048083019260209291908290030181865afa15801561363a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c291906157b7565b6000546001600160a01b031633146136a65760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601b546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b15801561371657600080fd5b505af115801561372a573d6000803e3d6000fd5b50505050611387828261210c565b6018546000906001600160a01b031633146137955760405162461bcd60e51b815260206004820152601960248201527f4f6e6c792061697264726f70706572206d61792063616c6c2e00000000000000604482015260640161104e565b6001600160a01b038416600090815260016020526040812080548492906137bd908490615781565b90915550506001600160a01b038316600090815260016020526040812080548492906137ea908490615a02565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383691815260200190565b60405180910390a35060019392505050565b601654604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa15801561363a573d6000803e3d6000fd5b6000546001600160a01b031633146138f35760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b82846139016009600a615731565b6139109064e8d4a51000615762565b61391a9190615762565b6139249190615740565b60195580826139356009600a615731565b6139449064e8d4a51000615762565b61394e9190615762565b6139589190615740565b601a5550505050565b601b546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa1580156139cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a19190615a1a565b6000546001600160a01b03163314613a385760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314613aab5760405162461bcd60e51b81526020600482018190526024820152600080516020615ac5833981519152604482015260640161104e565b601860009054906101000a90046001600160a01b03166001600160a01b0316637c4b414d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b8d57600080fd5b60006001600160a01b038416613b795760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b038316613bf55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161104e565b60008211613c6b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f0000000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613c995760019250613cc7565b6001600160a01b03861660009081526002602052604090205460ff1615613cc35760019150613cc7565b5060015b613cd187876143dd565b15613edc57601b54610100900460ff16613d2d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c6564210000000000000000604482015260640161104e565b8280613d365750815b15613dfa576001600160a01b03871660009081526007602052604090205460ff16158015613d7d57506001600160a01b03861660009081526007602052604090205460ff16155b15613dfa57601454851115613dfa5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e000000000000000000000000000000000000000000000000606482015260840161104e565b600e546001600160a01b03878116911614801590613e16575081155b15613edc576001600160a01b03861660009081526007602052604090205460ff16613edc5760155485613e5e886001600160a01b031660009081526001602052604090205490565b613e689190615a02565b1115613edc5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e00000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b03871660009081526006602052604090205460019060ff1680613f1e57506001600160a01b03871660009081526006602052604090205460ff165b15613f27575060005b8215613fd157601854600160a01b900460ff16158015613f505750601854600160a81b900460ff165b8015613f7557506001600160a01b0387166000908152600a602052604090205460ff16155b8015613f9a57506001600160a01b0388166000908152600a602052604090205460ff16155b15613fd157306000908152600160205260409020546019548110613fcf57601a548110613fc65750601a545b613fcf816144ae565b505b613fe088888884888888613fec565b98975050505050505050565b601b5460009062010000900460ff166140ee576140098888614ade565b601b5462010000900460ff16158015614027575061402788886143dd565b801561404c57506001600160a01b03881660009081526005602052604090205460ff16155b801561407157506001600160a01b03871660009081526005602052604090205460ff16155b801561407b575081155b156140ee5760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e000000000000000000000000000000000000000000000000000000000000606482015260840161104e565b6140f888886143dd565b156141ac57601b546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116600483015289811660248301526044820189905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015614195575060408051601f3d908101601f1916820190925261419291810190615a1a565b60015b61419e57600080fd5b9050806141aa57600080fd5b505b6001600160a01b038816600090815260016020526040812080548892906141d4908490615781565b9091555086905085156141f1576141ee8988878787614c6a565b90505b6001600160a01b03881660009081526001602052604081208054839290614219908490615a02565b9091555061422990508989614d55565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161426e91815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b0383166143005760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b03821661437c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161104e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b0384811691161480159061440a57506000546001600160a01b03838116911614155b801561442157506000546001600160a01b03163214155b801561444657506001600160a01b03821660009081526009602052604090205460ff16155b801561446b57506001600160a01b03831660009081526009602052604090205460ff16155b801561448257506001600160a01b03821661dead14155b801561449657506001600160a01b03821615155b8015612c98575050506001600160a01b031630141590565b6018805460ff60a01b1916600160a01b1790556040805160e081018252600d5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a01000000000000000000008104831660a0830152600160601b900490911660c0820181905260000361454b5750614ace565b306000908152600460209081526040808320600e546001600160a01b03168452909152902054600019146145a457306000908152600460209081526040808320600e546001600160a01b03168452909152902060001990555b600e54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156145ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614612919061597e565b9050600060028360c0015161ffff16846020015161ffff16866146359190615762565b61463f9190615740565b6146499190615740565b905060006146578286615781565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061469157614691615608565b60200260200101906001600160a01b031690816001600160a01b03168152505083816001815181106146c5576146c5615608565b6001600160a01b039283166020918202929092010152600e546040517f791ac9470000000000000000000000000000000000000000000000000000000081524792919091169063791ac94790614728908690600090879030904290600401615a37565b600060405180830381600087803b15801561474257600080fd5b505af1158015614756573d6000803e3d6000fd5b50505050600081476147689190615781565b90506000846147778784615762565b6147819190615740565b9050851561487257600e546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101889052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015614810573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148359190615a73565b505060408051838152602081018990527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61487c8183615781565b915087602001518860c0018181516148949190615aa1565b61ffff90811690915260c08a01518a5160009350908216916148b7911685615762565b6148c19190615740565b905060008960c0015161ffff168a6060015161ffff16856148e29190615762565b6148ec9190615740565b905060008a60c0015161ffff168b6080015161ffff168661490d9190615762565b6149179190615740565b905060008b60c0015161ffff168c60a0015161ffff16876149389190615762565b6149429190615740565b9050600081836149528688615a02565b61495c9190615a02565b6149669190615a02565b6149709088615781565b8d5190915061ffff16156149e257601660009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be866040518263ffffffff1660e01b81526004016000604051808303818588803b1580156149ce57600080fd5b505af1935050505080156149e0575060015b505b60408d015161ffff1615614a2c576011546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614a2a573d6000803e3d6000fd5b505b60608d015161ffff1615614a76576012546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015614a74573d6000803e3d6000fd5b505b60808d015161ffff1615614ac0576013546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015614abe573d6000803e3d6000fd5b505b505050505050505050505050505b506018805460ff60a01b19169055565b601b5462010000900460ff1615614b5d5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e0000000000000000000000000000000000000000000000000000000000606482015260840161104e565b614b6782826143dd565b158015614b815750600f546001600160a01b038281169116145b15611387576001600160a01b038083166000908152600960205260409020805460ff19166001179055601b805462ff000019166201000017908190556301000000900416614bf257601b805476ffffffffffffffffffffffffffffffffffffffff0000001916306301000000021790555b6016546001600160a01b0316614c1557601680546001600160a01b031916301790555b6018805460ff60a81b1916600160a81b179055600b805460ff19169055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6000808415614c805750600c5461ffff16614caa565b8315614c995750600c5462010000900461ffff16614caa565b50600c54640100000000900461ffff165b80600003614cbb5785915050614d4c565b6000612710614cca8389615762565b614cd49190615740565b30600090815260016020526040812080549293508392909190614cf8908490615a02565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3614d478188615781565b925050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff16614de6576016546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614dd357600080fd5b505af1925050508015614de4575060015b505b6001600160a01b03811660009081526008602052604090205460ff16614e77576016546001600160a01b0382811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614e6457600080fd5b505af1925050508015614e75575060015b505b601b5460ff1615611387576016546017546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb91614ed09160040190815260200190565b600060405180830381600087803b158015614eea57600080fd5b505af1925050508015614efb575060015b15611387575050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614f4357614f43614f04565b604052919050565b600067ffffffffffffffff821115614f6557614f65614f04565b5060051b60200190565b6001600160a01b038116811461210957600080fd5b600082601f830112614f9557600080fd5b81356020614faa614fa583614f4b565b614f1a565b82815260059290921b84018101918181019086841115614fc957600080fd5b8286015b84811015614fed578035614fe081614f6f565b8352918301918301614fcd565b509695505050505050565b801515811461210957600080fd5b6000806040838503121561501957600080fd5b823567ffffffffffffffff81111561503057600080fd5b61503c85828601614f84565b925050602083013561504d81614ff8565b809150509250929050565b60005b8381101561507357818101518382015260200161505b565b83811115612ba15750506000910152565b6000815180845261509c816020860160208601615058565b601f01601f19169290920160200192915050565b602081526000612c986020830184615084565b6000602082840312156150d557600080fd5b5035919050565b600080604083850312156150ef57600080fd5b82356150fa81614f6f565b946020939093013593505050565b60006020828403121561511a57600080fd5b8135612c9881614f6f565b6000806040838503121561513857600080fd5b823561514381614f6f565b9150602083013561504d81614f6f565b60008060006060848603121561516857600080fd5b833561517381614f6f565b9250602084013561518381614f6f565b929592945050506040919091013590565b600080604083850312156151a757600080fd5b50508035926020909101359150565b600080604083850312156151c957600080fd5b823567ffffffffffffffff808211156151e157600080fd5b6151ed86838701614f84565b935060209150818501358181111561520457600080fd5b85019050601f8101861361521757600080fd5b8035615225614fa582614f4b565b81815260059190911b8201830190838101908883111561524457600080fd5b928401925b8284101561526257833582529284019290840190615249565b80955050505050509250929050565b6000806000806080858703121561528757600080fd5b843561529281614ff8565b935060208501356152a281614ff8565b925060408501356152b281614ff8565b915060608501356152c281614ff8565b939692955090935050565b803561ffff811681146152df57600080fd5b919050565b6000806000606084860312156152f957600080fd5b615302846152cd565b9250615310602085016152cd565b915061531e604085016152cd565b90509250925092565b6000806040838503121561533a57600080fd5b823561534581614f6f565b9150602083013561504d81614ff8565b6080815260006153686080830187615084565b828103602084015261537a8187615084565b9050828103604084015261538e8186615084565b905082810360608401526153a28185615084565b979650505050505050565b6000806000606084860312156153c257600080fd5b83356153cd81614f6f565b925060208401356153dd81614f6f565b915060408401356153ed81614f6f565b809150509250925092565b60008083601f84011261540a57600080fd5b50813567ffffffffffffffff81111561542257600080fd5b6020830191508360208260051b850101111561543d57600080fd5b9250929050565b6000806000806040858703121561545a57600080fd5b843567ffffffffffffffff8082111561547257600080fd5b61547e888389016153f8565b9096509450602087013591508082111561549757600080fd5b506154a4878288016153f8565b95989497509550505050565b6000806000606084860312156154c557600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c087890312156154f557600080fd5b6154fe876152cd565b955061550c602088016152cd565b945061551a604088016152cd565b9350615528606088016152cd565b9250615536608088016152cd565b915061554460a088016152cd565b90509295509295509295565b6000806040838503121561556357600080fd5b823561534581614ff8565b6000806000806080858703121561558457600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156155d95781516001600160a01b0316875295820195908201906001016155b4565b509495945050505050565b6040815260006155f760408301856155a0565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016156465761564661561e565b5060010190565b600181815b8085111561568857816000190482111561566e5761566e61561e565b8085161561567b57918102915b93841c9390800290615652565b509250929050565b60008261569f575060016112a1565b816156ac575060006112a1565b81600181146156c257600281146156cc576156e8565b60019150506112a1565b60ff8411156156dd576156dd61561e565b50506001821b6112a1565b5060208310610133831016604e8410600b841016171561570b575081810a6112a1565b615715838361564d565b80600019048211156157295761572961561e565b029392505050565b6000612c9860ff841683615690565b60008261575d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561577c5761577c61561e565b500290565b6000828210156157935761579361561e565b500390565b600060ff821660ff81036157ae576157ae61561e565b60010192915050565b6000602082840312156157c957600080fd5b5051919050565b600082601f8301126157e157600080fd5b815167ffffffffffffffff8111156157fb576157fb614f04565b61580e601f8201601f1916602001614f1a565b81815284602083860101111561582357600080fd5b6115b1826020830160208701615058565b6000806000806080858703121561584a57600080fd5b845167ffffffffffffffff8082111561586257600080fd5b61586e888389016157d0565b9550602087015191508082111561588457600080fd5b615890888389016157d0565b945060408701519150808211156158a657600080fd5b6158b2888389016157d0565b935060608701519150808211156158c857600080fd5b506158d5878288016157d0565b91505092959194509250565b6040808252810184905260008560608301825b8781101561592457823561590781614f6f565b6001600160a01b03168252602092830192909101906001016158f4565b5083810360208501528481527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85111561595d57600080fd5b8460051b915081866020830137600091016020019081529695505050505050565b60006020828403121561599057600080fd5b8151612c9881614f6f565b8481526080602082015260006159b460808301866155a0565b6001600160a01b03949094166040830152506060015292915050565b6000612c988383615690565b600061ffff8083168185168083038211156159f9576159f961561e565b01949350505050565b60008219821115615a1557615a1561561e565b500190565b600060208284031215615a2c57600080fd5b8151612c9881614ff8565b85815284602082015260a060408201526000615a5660a08301866155a0565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215615a8857600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015615abc57615abc61561e565b03939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220cf887e553c1a1d8e801cd924ff3696515d567a6643a9dff5dfd3e721cc3cbee764736f6c634300080d0033

Deployed Bytecode Sourcemap

8449:28760:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10522:73;;;;;;;;;;;;10553:42;10522:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;10522:73:0;;;;;;;;11384:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;11384:28:0;245:177:1;20755:294:0;;;;;;;;;;-1:-1:-1;20755:294:0;;;;;:::i;:::-;;:::i;:::-;;9809:113;;;;;;;;;;-1:-1:-1;9809:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;2796:6:1;2829:15;;;2811:34;;2881:15;;;2876:2;2861:18;;2854:43;2933:15;;2913:18;;;2906:43;;;;2774:2;2759:18;9809:113:0;2590:365:1;16055:80:0;;;;;;;;;;-1:-1:-1;16127:5:0;;;;;;;;;;;;;;;;;16055:80;;;;;;;:::i;10358:26::-;;;;;;;;;;-1:-1:-1;10358:26:0;;;;-1:-1:-1;;;;;10358:26:0;;;21509:150;;;;;;;;;;-1:-1:-1;21509:150:0;;;;;:::i;:::-;;:::i;16476:216::-;;;;;;;;;;-1:-1:-1;16476:216:0;;;;;:::i;:::-;;:::i;:::-;;;4629:14:1;;4622:22;4604:41;;4592:2;4577:18;16476:216:0;4464:187:1;19539:140:0;;;;;;;;;;-1:-1:-1;19539:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;19637:34:0;19613:4;19637:34;;;:25;:34;;;;;;;;;19539:140;24265:112;;;;;;;;;;;;;:::i;25305:774::-;;;;;;;;;;-1:-1:-1;25305:774:0;;;;;:::i;:::-;;:::i;15726:115::-;;;;;;;;;;;;;:::i;18776:335::-;;;;;;;;;;-1:-1:-1;18776:335:0;;;;;:::i;:::-;;:::i;17390:306::-;;;;;;;;;;-1:-1:-1;17390:306:0;;;;;:::i;:::-;;:::i;23876:267::-;;;;;;;;;;-1:-1:-1;23876:267:0;;;;;:::i;:::-;;:::i;34447:418::-;;;;;;;;;;-1:-1:-1;34447:418:0;;;;;:::i;:::-;;:::i;21306:195::-;;;;;;;;;;-1:-1:-1;21306:195:0;;;;;:::i;:::-;;:::i;10155:42::-;;;;;;;;;;;;10193:4;10155:42;;11419:25;;;;;;;;;;;;;;;;15847:112;;;;;;;;;;;;;:::i;:::-;;;7982:4:1;7970:17;;;7952:36;;7940:2;7925:18;15847:112:0;7810:184:1;22306:353:0;;;;;;;;;;-1:-1:-1;22306:353:0;;;;;:::i;:::-;;:::i;21190:108::-;;;;;;;;;;-1:-1:-1;21190:108:0;;;;;:::i;:::-;;:::i;19687:140::-;;;;;;;;;;-1:-1:-1;19687:140:0;;;;;:::i;:::-;;:::i;11286:25::-;;;;;;;;;;-1:-1:-1;11286:25:0;;;;-1:-1:-1;;;;;11286:25:0;;;23599:269;;;;;;;;;;-1:-1:-1;23599:269:0;;;;;:::i;:::-;;:::i;10391:21::-;;;;;;;;;;-1:-1:-1;10391:21:0;;;;-1:-1:-1;;;;;10391:21:0;;;11494:34;;;;;;;;;;-1:-1:-1;11494:34:0;;;;;;;;;;;14355:728;;;;;;;;;;-1:-1:-1;14355:728:0;;;;;:::i;:::-;;:::i;19119:127::-;;;;;;;;;;-1:-1:-1;19119:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;19210:28:0;19186:4;19210:28;;;:19;:28;;;;;;;;;19119:127;11535:36;;;;;;;;;;-1:-1:-1;11535:36:0;;;;;;;;;;;20192:134;;;;;;;;;;-1:-1:-1;20192:134:0;;;;;:::i;:::-;;:::i;19399:132::-;;;;;;;;;;-1:-1:-1;19399:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;19493:30:0;19469:4;19493:30;;;:21;:30;;;;;;;;;19399:132;35534:140;;;;;;;;;;-1:-1:-1;35534:140:0;;;;;:::i;:::-;;:::i;35355:171::-;;;;;;;;;;-1:-1:-1;35355:171:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;34873:124::-;;;;;;;;;;;;;:::i;19835:349::-;;;;;;;;;;-1:-1:-1;19835:349:0;;;;;:::i;:::-;;:::i;24151:106::-;;;;;;;;;;;;;:::i;16226:103::-;;;;;;;;;;-1:-1:-1;16226:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;16310:16:0;16292:7;16310:16;;;:7;:16;;;;;;;16226:103;15091:245;;;;;;;;;;;;;:::i;23313:278::-;;;;;;;;;;-1:-1:-1;23313:278:0;;;;;:::i;:::-;;:::i;18252:516::-;;;;;;;;;;-1:-1:-1;18252:516:0;;;;;:::i;:::-;;:::i;36918:193::-;;;;;;;;;;;;;:::i;36381:104::-;;;;;;;;;;-1:-1:-1;36381:104:0;;;;;:::i;:::-;;:::i;36743:148::-;;;;;;;;;;-1:-1:-1;36743:148:0;;;;;:::i;:::-;;:::i;16141:79::-;;;;;;;;;;-1:-1:-1;16193:7:0;16211:6;-1:-1:-1;;;;;16211:6:0;16141:79;;17049:173;;;;;;;;;;;;;:::i;21667:631::-;;;;;;;;;;;;;:::i;36601:134::-;;;;;;;;;;-1:-1:-1;36601:134:0;;;;;:::i;:::-;;:::i;15965:84::-;;;;;;;;;;-1:-1:-1;16039:7:0;;;;;;;;;;;;;;;;;15965:84;;35121:100;;;;;;;;;;;;;:::i;36221:152::-;;;;;;;;;;-1:-1:-1;36221:152:0;;;;;:::i;:::-;;:::i;36493:100::-;;;;;;;;;;;;;:::i;17230:152::-;;;;;;;;;;-1:-1:-1;17230:152:0;;;;;:::i;:::-;;:::i;35682:136::-;;;;;;;;;;-1:-1:-1;35682:136:0;;;;;:::i;:::-;;:::i;33381:374::-;;;;;;;;;;;;;:::i;24883:275::-;;;;;;;;;;-1:-1:-1;24883:275:0;;;;;:::i;:::-;;:::i;19254:137::-;;;;;;;;;;-1:-1:-1;19254:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;19350:33:0;19326:4;19350:33;;;:24;:33;;;;;;;;;19254:137;9931:215;;;;;;;;;;-1:-1:-1;9931:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9931:215:0;;;;;;;;;;12188:6:1;12221:15;;;12203:34;;12273:15;;;12268:2;12253:18;;12246:43;12325:15;;;12305:18;;;12298:43;;;;12377:15;;;12372:2;12357:18;;12350:43;12430:15;;12424:3;12409:19;;12402:44;12483:15;;12477:3;12462:19;;12455:44;12536:15;;;12530:3;12515:19;;12508:44;12165:3;12150:19;9931:215:0;11877:681:1;25166:131:0;;;;;;;;;;-1:-1:-1;25166:131:0;;;;;:::i;:::-;;:::i;22667:638::-;;;;;;;;;;-1:-1:-1;22667:638:0;;;;;:::i;:::-;;:::i;16335:133::-;;;;;;;;;;-1:-1:-1;16335:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16437:19:0;;;16419:7;16437:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16335:133;24385:193;;;;;;;;;;-1:-1:-1;24385:193:0;;;;;:::i;:::-;;:::i;36073:140::-;;;;;;;;;;-1:-1:-1;36073:140:0;;;;;:::i;:::-;;:::i;17704:540::-;;;;;;;;;;-1:-1:-1;17704:540:0;;;;;:::i;:::-;;:::i;35943:122::-;;;;;;;;;;;;;:::i;20554:193::-;;;;;;;;;;-1:-1:-1;20554:193:0;;;;;:::i;:::-;;:::i;11451:34::-;;;;;;;;;;-1:-1:-1;11451:34:0;;;;;;;;30004:307;;;;;;;;;;-1:-1:-1;30004:307:0;;;;;:::i;:::-;;:::i;35229:118::-;;;;;;;;;;;;;:::i;10824:271::-;;;;;;;;;;-1:-1:-1;10824:271:0;;;;;;;;-1:-1:-1;;;;;10824:271:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13825:15:1;;;13807:34;;13877:15;;;13872:2;13857:18;;13850:43;13929:15;;13909:18;;;13902:43;;;;13734:2;13719:18;10824:271:0;13496:455:1;24586:289:0;;;;;;;;;;-1:-1:-1;24586:289:0;;;;;:::i;:::-;;:::i;11338:39::-;;;;;;;;;;-1:-1:-1;11338:39:0;;;;-1:-1:-1;;;11338:39:0;;;;;;21057:125;;;;;;;;;;-1:-1:-1;21057:125:0;;;;;:::i;:::-;;:::i;20334:148::-;;;;;;;;;;-1:-1:-1;20334:148:0;;;;;:::i;:::-;;:::i;37119:87::-;;;;;;;;;;;;;:::i;20755:294::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;;;;;;;;;20863:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;20863:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;20901:8;;20911:7;;20863:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20934:9;20930:112;20953:8;:15;20949:1;:19;20930:112;;;20989:41;21009:8;21018:1;21009:11;;;;;;;;:::i;:::-;;;;;;;21022:7;20989:19;:41::i;:::-;20970:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20930:112;;;;20755:294:::0;;:::o;21509:150::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;21593:3:::1;21586;:10;;21578:31;;;::::0;-1:-1:-1;;;21578:31:0;;16263:2:1;21578:31:0::1;::::0;::::1;16245:21:1::0;16302:1;16282:18;;;16275:29;16340:10;16320:18;;;16313:38;16368:18;;21578:31:0::1;16061:331:1::0;21578:31:0::1;21620:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;21620:9:0;;;::::1;-1:-1:-1::0;;;;;21620:9:0::1;::::0;:26:::1;::::0;364:18:1;;21620:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21509:150:::0;:::o;16476:216::-;16580:10;16551:4;16568:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16568:32:0;;;;;;;;;;:41;;;16625:37;16551:4;;16568:32;;16625:37;;;;16603:6;391:25:1;;379:2;364:18;;245:177;16625:37:0;;;;;;;;-1:-1:-1;16680:4:0;16476:216;;;;;:::o;24265:112::-;24310:7;24355:13;9400:1;24355:2;:13;:::i;:::-;24337:14;;:32;;;;:::i;:::-;24330:39;;24265:112;:::o;25305:774::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;25409:23:::1;::::0;::::1;;25401:32;;;::::0;::::1;;25458:7;-1:-1:-1::0;;;;;25448:17:0::1;:6;-1:-1:-1::0;;;;;25448:17:0::1;::::0;25444:628:::1;;-1:-1:-1::0;;;;;25482:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;;;:33;;25511:4:::1;-1:-1:-1::0;;25482:33:0;;::::1;::::0;::::1;::::0;;;25530:16:::1;:25:::0;;;;;:32;;;;::::1;::::0;::::1;::::0;;25577:34:::1;::::0;25482:26;;25577:19:::1;:34::i;:::-;25626;25646:7;25655:4;25626:19;:34::i;:::-;25305:774:::0;;:::o;25444:628::-:1;-1:-1:-1::0;;;;;25693:25:0;;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;:32;;25721:4:::1;-1:-1:-1::0;;25693:32:0;;::::1;::::0;::::1;::::0;;;25740:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;25788:24;;;:16:::1;:24:::0;;;;;;:31;;;::::1;::::0;::::1;::::0;;25834:25;;;;;;:32;;;;::::1;::::0;::::1;::::0;;;25881:33:::1;::::0;25693:25;;25881:19:::1;:33::i;:::-;25929:34;25949:7;25958:4;25929:19;:34::i;:::-;25978:33;25998:6;26006:4;25978:19;:33::i;15726:115::-:0;15781:7;9463:15;9400:1;9463:2;:15;:::i;:::-;9445:34;;9237:17;9445:34;:::i;:::-;15807:1;15796:12;15792:31;;15812:8;;;15792:31;9463:15;9400:1;9463:2;:15;:::i;:::-;9445:34;;9237:17;9445:34;:::i;18776:335::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;18884:14:::1;::::0;::::1;::::0;::::1;;;18883:15;18875:24;;;::::0;::::1;;-1:-1:-1::0;;;;;18918:29:0;::::1;18942:4;18918:29;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;18951:29:0;::::1;18975:4;18951:29;;18918:62;:94;;;;;19000:12;-1:-1:-1::0;;;;;18984:28:0::1;:12;-1:-1:-1::0;;;;;18984:28:0::1;;;18918:94;18910:103;;;::::0;::::1;;19024:9;:33:::0;;-1:-1:-1;;;;;;19024:33:0::1;-1:-1:-1::0;;;;;19024:33:0;;::::1;;::::0;;19068:9:::1;:35:::0;;-1:-1:-1;;19068:35:0::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;18776:335::o;17390:306::-;-1:-1:-1;;;;;17511:19:0;;17490:4;17511:19;;;:11;:19;;;;;;;;17531:10;17511:31;;;;;;;;-1:-1:-1;;17511:52:0;17507:126;;-1:-1:-1;;;;;17580:19:0;;;;;;:11;:19;;;;;;;;17600:10;17580:31;;;;;;;:41;;17615:6;;17580:19;:41;;17615:6;;17580:41;:::i;:::-;;;;-1:-1:-1;;17507:126:0;17652:36;17662:6;17670:9;17681:6;17652:9;:36::i;:::-;17645:43;17390:306;-1:-1:-1;;;;17390:306:0:o;23876:267::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;24018:4:::1;9463:15;9400:1;9463:2;:15;:::i;:::-;9445:34;::::0;9237:17:::1;9445:34;:::i;:::-;24008:14;;;;:::i;:::-;23996:7:::0;23985;9463:15:::1;9400:1;9463:2;:15;:::i;:::-;9445:34;::::0;9237:17:::1;9445:34;:::i;:::-;23975:17;;;;:::i;:::-;23974:29;;;;:::i;:::-;:49;;23966:112;;;::::0;-1:-1:-1;;;23966:112:0;;18564:2:1;23966:112:0::1;::::0;::::1;18546:21:1::0;18603:2;18583:18;;;18576:30;18642:34;18622:18;;;18615:62;18713:20;18693:18;;;18686:48;18751:19;;23966:112:0::1;18362:414:1::0;23966:112:0::1;24128:7:::0;24117;9463:15:::1;9400:1;9463:2;:15;:::i;:::-;9445:34;::::0;9237:17:::1;9445:34;:::i;:::-;24107:17;;;;:::i;:::-;24106:29;;;;:::i;:::-;24089:14;:46:::0;-1:-1:-1;;23876:267:0:o;34447:418::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;34582:7:::1;:14;34563:8;:15;:33;34555:67;;;::::0;-1:-1:-1;;;34555:67:0;;18983:2:1;34555:67:0::1;::::0;::::1;18965:21:1::0;19022:2;19002:18;;;18995:30;19061:23;19041:18;;;19034:51;19102:18;;34555:67:0::1;18781:345:1::0;34555:67:0::1;34638:7;34633:225;34655:8;:15;34651:1;:19;;;34633:225;;;34725:7;34733:1;34725:10;;;;;;;;;;:::i;:::-;;;;;;;34700:21;34710:10;-1:-1:-1::0;;;;;16310:16:0;16292:7;16310:16;;;:7;:16;;;;;;;16226:103;34700:21:::1;:35;;34692:44;;;::::0;::::1;;34751:95;34769:10;34781:8;34790:1;34781:11;;;;;;;;;;:::i;:::-;;;;;;;9400:1;34805:2;:13;;;;:::i;:::-;34794:7;34802:1;34794:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;34820:5;34827::::0;34834::::1;34841:4;34751:17;:95::i;:::-;-1:-1:-1::0;34672:3:0;::::1;::::0;::::1;:::i;:::-;;;;34633:225;;21306:195:::0;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;21428:9:::1;::::0;:65:::1;::::0;;;;19543:14:1;;19536:22;21428:65:0::1;::::0;::::1;19518:41:1::0;19602:14;;19595:22;19575:18;;;19568:50;19661:14;;19654:22;19634:18;;;19627:50;19720:14;;19713:22;19693:18;;;19686:50;21428:9:0;;;::::1;-1:-1:-1::0;;;;;21428:9:0::1;::::0;:24:::1;::::0;19490:19:1;;21428:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21306:195:::0;;;;:::o;15847:112::-;15899:5;9463:15;9400:1;9463:2;:15;:::i;:::-;9445:34;;9237:17;9445:34;:::i;:::-;15923:1;15912:12;15908:31;;15928:8;;;15908:31;-1:-1:-1;9400:1:0;;15847:112::o;22306:353::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;10193:4:::1;22413:6;:21;;;;:65;;;;;10243:4;22455:7;:23;;;;22413:65;:117;;;;;10297:4;22499:11;:31;;;;22413:117;22405:126;;;::::0;::::1;;22542:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;22578:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;22616:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;22306:353::o;21190:108::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;21259:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;21259:31:0::1;::::0;::::1;160:74:1::0;21259:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;21259:31:0::1;14:226:1::0;19687:140:0;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;-1:-1:-1;;;;;19779:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;19779:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19687:140::o;23599:269::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;23740:4:::1;9463:15;9400:1;9463:2;:15;:::i;:::-;9445:34;::::0;9237:17:::1;9445:34;:::i;:::-;23730:14;;;;:::i;:::-;23718:7:::0;23707;9463:15:::1;9400:1;9463:2;:15;:::i;:::-;9445:34;::::0;9237:17:::1;9445:34;:::i;:::-;23697:17;;;;:::i;:::-;23696:29;;;;:::i;:::-;:49;;23688:117;;;::::0;-1:-1:-1;;;23688:117:0;;19949:2:1;23688:117:0::1;::::0;::::1;19931:21:1::0;19988:2;19968:18;;;19961:30;20027:34;20007:18;;;20000:62;20098:25;20078:18;;;20071:53;20141:19;;23688:117:0::1;19747:419:1::0;23688:117:0::1;23853:7:::0;23842;9463:15:::1;9400:1;9463:2;:15;:::i;:::-;9445:34;::::0;9237:17:::1;9445:34;:::i;:::-;23832:17;;;;:::i;:::-;23831:29;;;;:::i;:::-;23816:12;:44:::0;-1:-1:-1;;23599:269:0:o;14355:728::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;-1:-1:-1;;;;;14434:22:0;::::1;14426:96;;;::::0;-1:-1:-1;;;14426:96:0;;20373:2:1;14426:96:0::1;::::0;::::1;20355:21:1::0;20412:2;20392:18;;;20385:30;20451:34;20431:18;;;20424:62;20522:31;20502:18;;;20495:59;20571:19;;14426:96:0::1;20171:425:1::0;14426:96:0::1;-1:-1:-1::0;;;;;;;14541:16:0;::::1;::::0;14533:90:::1;;;::::0;-1:-1:-1;;;14533:90:0;;20373:2:1;14533:90:0::1;::::0;::::1;20355:21:1::0;20412:2;20392:18;;;20385:30;20451:34;20431:18;;;20424:62;20522:31;20502:18;;;20495:59;20571:19;;14533:90:0::1;20171:425:1::0;14533:90:0::1;14664:5;14654:6:::0;;-1:-1:-1;;;;;14654:6:0;;::::1;14634:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;14634:35:0;;::::1;::::0;;;14705:6;;;::::1;14680:32:::0;;:24:::1;:32:::0;;;;;;:40;;;::::1;::::0;;14731:29;;::::1;::::0;;;;;;;;:36;;;::::1;-1:-1:-1::0;14731:36:0;;::::1;::::0;;;14778:34;;;;;;:41;;;;::::1;::::0;::::1;::::0;;14853:6;;;;::::1;16310:16:::0;;;;;;14843:21;14840:134:::1;;14899:6;::::0;;-1:-1:-1;;;;;14899:6:0::1;16310:16:::0;;;:7;:16;;;;;;;14881:81:::1;::::0;14899:6;14907:8;;14917:17:::1;16226:103:::0;14881:81:::1;;14840:134;14994:6;:17:::0;;-1:-1:-1;;;;;;14994:17:0::1;-1:-1:-1::0;;;;;14994:17:0;::::1;::::0;;::::1;::::0;;15027:38:::1;::::0;14994:17;;;;15027:38:::1;::::0;14994:6;15027:38:::1;14355:728:::0;:::o;20192:134::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;-1:-1:-1;;;;;20280:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;20280:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20192:134::o;35534:140::-;35628:9;;:38;;;;;-1:-1:-1;;;;;178:55:1;;;35628:38:0;;;160:74:1;35601:7:0;;35628:9;;:32;;133:18:1;;35628:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35355:171::-;35491:9;;:27;;;;;-1:-1:-1;;;;;178:55:1;;;35491:27:0;;;160:74:1;35413:13:0;;;;;;;;35491:9;;:21;;133:18:1;;35491:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35491:27:0;;;;;;;;;;;;:::i;:::-;35484:34;;;;;;;;35355:171;;;;;:::o;34873:124::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;34932:9:::1;;;;;;;;;-1:-1:-1::0;;;;;34932:9:0::1;-1:-1:-1::0;;;;;34932:14:0::1;;34954:21;34932:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;34928:62:::0;34873:124::o;19835:349::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;-1:-1:-1;;;;;19930:23:0;::::1;19948:4;19930:23;::::0;::::1;::::0;:43:::1;;-1:-1:-1::0;19967:6:0::1;::::0;-1:-1:-1;;;;;19957:16:0;;::::1;19967:6:::0;::::1;19957:16;;19930:43;19922:52;;;::::0;::::1;;-1:-1:-1::0;;;;;19985:32:0;::::1;;::::0;;;:24:::1;:32;::::0;;;;:42;;-1:-1:-1;;19985:42:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;20038:139:::1;;20066:9;::::0;:26:::1;::::0;-1:-1:-1;;;20066:26:0;;-1:-1:-1;;;;;22468:55:1;;;20066:26:0::1;::::0;::::1;22450:74:1::0;20066:9:0::1;22540:18:1::0;;;22533:34;20066:9:0;;::::1;::::0;:15:::1;::::0;22423:18:1;;20066:26:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25305:774:::0;;:::o;20038:139::-:1;20125:9;::::0;-1:-1:-1;;;;;20149:15:0;;::::1;20125:9;20149:15:::0;;;20125:9;20149:15:::1;::::0;;;;;;;20125:40;;-1:-1:-1;;;20125:40:0;;::::1;::::0;::::1;22450:74:1::0;;;;22540:18;;;22533:34;20125:9:0;::::1;::::0;:15:::1;::::0;22423:18:1;;20125:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;24151:106:::0;24192:7;24235:13;9400:1;24235:2;:13;:::i;:::-;24219:12;;:30;;;;:::i;15091:245::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;15186:5:::1;15176:6:::0;;-1:-1:-1;;;;;15176:6:0;;::::1;15156:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;15156:35:0;;::::1;::::0;;;15227:6;;;;::::1;15202:32:::0;;:24:::1;:32:::0;;;;;;:40;;;;::::1;::::0;;;15253:19;;-1:-1:-1;;;;;;15253:19:0::1;::::0;;15288:40;15186:5;;15288:40:::1;::::0;15186:5;;15288:40:::1;15091:245::o:0;23313:278::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;23441:11:::1;:42:::0;;-1:-1:-1;;;;;23441:42:0;;::::1;-1:-1:-1::0;;;;;;23441:42:0;;::::1;;::::0;;;23494:15;:30;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;23535:24;:48;;;;;::::1;::::0;::::1;;::::0;;23313:278::o;18252:516::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;18333:16;::::1;;18344:5;18333:16:::0;18329:432:::1;;-1:-1:-1::0;;;;;18366:13:0;;::::1;18382:5;18366:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;18366:21:0::1;::::0;;18402:9:::1;::::0;:32;;-1:-1:-1;;;18402:32:0;;::::1;::::0;::::1;23048:74:1::0;;;;23138:18;;;23131:50;;;;18402:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23021:18:1;;18402:32:0::1;22880:307:1::0;18329:432:0::1;18471:17;::::0;:22;18467:152:::1;;18560:6;18540:17;;18522:15;:35;;;;:::i;:::-;:44;18514:89;;;::::0;-1:-1:-1;;;18514:89:0;;23394:2:1;18514:89:0::1;::::0;::::1;23376:21:1::0;;;23413:18;;;23406:30;23472:34;23452:18;;;23445:62;23524:18;;18514:89:0::1;23192:356:1::0;18514:89:0::1;-1:-1:-1::0;;;;;18633:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;18633:20:0::1;18649:4;18633:20:::0;;::::1;::::0;;;18688:15:::1;18668:17;:35:::0;18718:9:::1;::::0;:31;;-1:-1:-1;;;18718:31:0;;::::1;::::0;::::1;23048:74:1::0;;;;23138:18;;;23131:50;18718:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23021:18:1;;18718:31:0::1;22880:307:1::0;36918:193:0;36979:5;;-1:-1:-1;;;36979:5:0;;;;:14;36971:35;;;;-1:-1:-1;;;36971:35:0;;23755:2:1;36971:35:0;;;23737:21:1;23794:1;23774:18;;;23767:29;23832:10;23812:18;;;23805:38;23860:18;;36971:35:0;23553:331:1;36971:35:0;37017:5;:12;;-1:-1:-1;;;;37017:12:0;-1:-1:-1;;;37017:12:0;;;37040:7;;:39;;;;;37068:10;37040:39;;;160:74:1;-1:-1:-1;;;;;37040:7:0;;;;:27;;133:18:1;;37040:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37090:5:0;:13;;-1:-1:-1;;;;37090:13:0;;;-1:-1:-1;;36918:193:0:o;36381:104::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;36450:7:::1;::::0;:27:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;-1:-1:-1;;;;;36450:7:0;;::::1;::::0;:21:::1;::::0;364:18:1;;36450:27:0::1;245:177:1::0;36743:148:0;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;36849:7:::1;::::0;:34:::1;::::0;;;;-1:-1:-1;;;;;36849:7:0;;::::1;::::0;:16:::1;::::0;:34:::1;::::0;36866:8;;;;36876:6;;;;36849:34:::1;;;:::i;17049:173::-:0;17113:4;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;17162:9:::1;::::0;17130:62:::1;::::0;17147:4:::1;::::0;-1:-1:-1;;;;;17162:9:0::1;-1:-1:-1::0;;17130:8:0::1;:62::i;:::-;-1:-1:-1::0;17210:4:0::1;17049:173:::0;:::o;21667:631::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;21729:14:::1;::::0;::::1;::::0;::::1;;;21728:15;21720:52;;;::::0;-1:-1:-1;;;21720:52:0;;25268:2:1;21720:52:0::1;::::0;::::1;25250:21:1::0;25307:2;25287:18;;;25280:30;25346:26;25326:18;;;25319:54;25390:18;;21720:52:0::1;25066:348:1::0;21720:52:0::1;21791:16;::::0;;;::::1;;;21783:53;;;::::0;-1:-1:-1;;;21783:53:0;;25621:2:1;21783:53:0::1;::::0;::::1;25603:21:1::0;25660:2;25640:18;;;25633:30;25699:26;25679:18;;;25672:54;25743:18;;21783:53:0::1;25419:348:1::0;21783:53:0::1;21858:9;::::0;;;::::1;-1:-1:-1::0;;;;;21858:9:0::1;21847:99;;21898:9;:36:::0;;-1:-1:-1;;21898:36:0::1;21928:4;21898:36:::0;::::1;;::::0;;21847:99:::1;21960:9;::::0;21980:6:::1;::::0;21960:85:::1;::::0;;;;-1:-1:-1;;;;;21980:6:0;;::::1;21960:85;::::0;::::1;25995:74:1::0;26117:10;21995:12:0::1;26105:23:1::0;26085:18;;;26078:51;26177:18;22017:15:0::1;26165:31:1::0;26145:18;;;26138:59;9400:1:0::1;26213:18:1::0;;;26206:45;21960:9:0;;;::::1;;::::0;:19:::1;::::0;25967::1;;21960:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21956:101:::0;22071:9:::1;;;;;;;;;-1:-1:-1::0;;;;;22071:9:0::1;-1:-1:-1::0;;;;;22071:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;22115:14:0::1;:21:::0;;-1:-1:-1;;22115:21:0::1;;;::::0;;22147:23:::1;:31:::0;;-1:-1:-1;;22147:31:0::1;::::0;;22216:6:::1;::::0;-1:-1:-1;;;;;22216:6:0::1;-1:-1:-1::0;16310:16:0;;;-1:-1:-1;16310:16:0;;;;;;22231:5:::1;::::0;22206:21:::1;::::0;22226:1:::1;22206:21;:::i;:::-;22205:31;;;;:::i;:::-;22189:13;:47:::0;22271:6:::1;::::0;-1:-1:-1;;;;;22271:6:0::1;16292:7:::0;16310:16;;;:7;:16;;;;;;22286:4:::1;::::0;22261:21:::1;::::0;22281:1:::1;22261:21;:::i;:::-;22260:30;;;;:::i;:::-;22247:10;:43:::0;21667:631::o;36601:134::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;36689:7:::1;::::0;:38:::1;::::0;;;;-1:-1:-1;;;;;22468:55:1;;;36689:38:0::1;::::0;::::1;22450:74:1::0;22540:18;;;22533:34;;;36689:7:0;;::::1;::::0;:21:::1;::::0;22423:18:1;;36689:38:0::1;22268:305:1::0;35121:100:0;35172:9;;:41;;;;;35202:10;35172:41;;;160:74:1;-1:-1:-1;;;;;35172:9:0;;;;:29;;133:18:1;;35172:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35121:100::o;36221:152::-;36324:7;;:41;;;;;-1:-1:-1;;;;;178:55:1;;;36324:41:0;;;160:74:1;36297:7:0;;36324;;:32;;133:18:1;;36324:41:0;14:226:1;36493:100:0;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;36556:7:::1;;;;;;;;;-1:-1:-1::0;;;;;36556:7:0::1;-1:-1:-1::0;;;;;36556:27:0::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;17230:152:::0;17310:4;17334:40;17344:10;17356:9;17367:6;17334:9;:40::i;:::-;17327:47;17230:152;-1:-1:-1;;;17230:152:0:o;35682:136::-;35777:9;;:33;;;;;-1:-1:-1;;;;;178:55:1;;;35777:33:0;;;160:74:1;35750:7:0;;35777:9;;:27;;133:18:1;;35777:33:0;14:226:1;33381:374:0;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;33461:16:::1;::::0;;33475:1:::1;33461:16:::0;;;;;::::1;::::0;;33437:21:::1;::::0;33461:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;33498:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;33498:16:0;;;;33437:40;;-1:-1:-1;;;;;;33498:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;33498:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33488:4;33493:1;33488:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33488:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;33535:4:::1;::::0;33525:7;;33535:4;::::1;::::0;33525;;33535;;33525:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;33525:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;33552:9:::1;::::0;:195:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;33620:21:::1;::::0;33552:195:::1;::::0;:9:::1;::::0;33683:4;;10553:42:::1;::::0;33721:15:::1;::::0;33552:195:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;24883:275:::0;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;25054:27:::1;25058:23:::0;25054:2:::1;:27;:::i;:::-;25037:44;::::0;:14;:44:::1;:::i;:::-;25092:9;::::0;:58:::1;::::0;;;;::::1;::::0;::::1;27366:25:1::0;;;27407:18;;;27400:34;;;25020:61:0;;-1:-1:-1;;;;;;25092:9:0::1;::::0;:30:::1;::::0;27339:18:1;;25092:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24883:275:::0;;;:::o;25166:131::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;25253:6:::1;25247:3;:12;25239:21;;;::::0;::::1;;25271:12;:18:::0;25166:131::o;22667:638::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;22824:7:::1;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;22860:29:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;22940:17:0;22900:29;;;::::1;;-1:-1:-1::0;;22940:17:0;;;;;::::1;;;-1:-1:-1::0;;23014:39:0;22968:35;;;::::1;;-1:-1:-1::0;;23014:39:0;;;;;::::1;::::0;;;::::1;;::::0;;;22968:35;22940:17;22900:29;23080:19:::1;22860:29:::0;22824:25;23080:19:::1;:::i;:::-;:31;;;;:::i;:::-;:37;;;;:::i;:::-;:52;;;;:::i;:::-;:69;;;;:::i;:::-;23064:7;:85:::0;;-1:-1:-1;;23064:85:0::1;-1:-1:-1::0;;;23064:85:0::1;::::0;;::::1;;;::::0;;:13:::1;23195:17:::0;-1:-1:-1;;23176:36:0::1;::::0;23195:17;;::::1;::::0;::::1;::::0;23176:16:::1;:36;:::i;:::-;23231:7;:13:::0;23160:52:::1;::::0;;::::1;::::0;-1:-1:-1;;;;23231:13:0;::::1;;:22:::0;-1:-1:-1;23231:22:0::1;23223:74;;;::::0;-1:-1:-1;;;23223:74:0;;27876:2:1;23223:74:0::1;::::0;::::1;27858:21:1::0;27915:2;27895:18;;;27888:30;27954:34;27934:18;;;27927:62;28025:9;28005:18;;;27998:37;28052:19;;23223:74:0::1;27674:403:1::0;24385:193:0;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;24491:19:::1;:30:::0;;-1:-1:-1;;;;24491:30:0::1;-1:-1:-1::0;;;24491:30:0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;24532:14:::1;:38:::0;;-1:-1:-1;;24532:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24385:193::o;36073:140::-;36170:7;;:35;;;;;-1:-1:-1;;;;;178:55:1;;;36170:35:0;;;160:74:1;36143:7:0;;36170;;:26;;133:18:1;;36170:35:0;14:226:1;17704:540:0;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;17773:20:::1;17806:9;17773:43;;17827:16;17857:10;-1:-1:-1::0;;;;;17857:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17846:40:0::1;;17895:4;17902:10;-1:-1:-1::0;;;;;17902:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17846:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;28335:15:1;;;17846:74:0::1;::::0;::::1;28317:34:1::0;28387:15;;28367:18;;;28360:43;28229:18;;17846:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17827:93:::0;-1:-1:-1;;;;;;17935:22:0;::::1;17931:200;;17994:10;-1:-1:-1::0;;;;;17994:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17983:43:0::1;;18035:4;18042:10;-1:-1:-1::0;;;;;18042:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17983:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;28335:15:1;;;17983:77:0::1;::::0;::::1;28317:34:1::0;28387:15;;28367:18;;;28360:43;28229:18;;17983:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17974:6;:86:::0;;-1:-1:-1;;;;;;17974:86:0::1;-1:-1:-1::0;;;;;17974:86:0;;;::::1;::::0;;;::::1;::::0;;17931:200:::1;;;18102:6;:17:::0;;-1:-1:-1;;;;;;18102:17:0::1;-1:-1:-1::0;;;;;18102:17:0;::::1;;::::0;;17931:200:::1;18141:9;:22:::0;;-1:-1:-1;;;;;;18141:22:0::1;-1:-1:-1::0;;;;;18141:22:0;::::1;::::0;;::::1;::::0;;;18174:62:::1;::::0;18191:4:::1;::::0;-1:-1:-1;;18174:8:0::1;:62::i;35943:122::-:0;36027:7;;:30;;;;;;;;36000:7;;-1:-1:-1;;;;;36027:7:0;;:28;;:30;;;;;;;;;;;;;;:7;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20554:193::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;20644:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;23066:55:1;;;20644:47:0::1;::::0;::::1;23048:74:1::0;23165:14;;23158:22;23138:18;;;23131:50;20644:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;23021:18:1;;20644:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20702:37;20722:7;20731;20702:19;:37::i;30004:307::-:0;30135:7;;30088:4;;-1:-1:-1;;;;;30135:7:0;30113:10;:30;30105:68;;;;-1:-1:-1;;;30105:68:0;;28616:2:1;30105:68:0;;;28598:21:1;28655:2;28635:18;;;28628:30;28694:27;28674:18;;;28667:55;28739:18;;30105:68:0;28414:349:1;30105:68:0;-1:-1:-1;;;;;30184:13:0;;;;;;:7;:13;;;;;:23;;30201:6;;30184:13;:23;;30201:6;;30184:23;:::i;:::-;;;;-1:-1:-1;;;;;;;30218:11:0;;;;;;:7;:11;;;;;:21;;30233:6;;30218:11;:21;;30233:6;;30218:21;:::i;:::-;;;;;;;;30270:2;-1:-1:-1;;;;;30255:26:0;30264:4;-1:-1:-1;;;;;30255:26:0;;30274:6;30255:26;;;;391:25:1;;379:2;364:18;;245:177;30255:26:0;;;;;;;;-1:-1:-1;30299:4:0;30004:307;;;;;:::o;35229:118::-;35308:9;;:31;;;;;;;;35281:7;;-1:-1:-1;;;;;35308:9:0;;:29;;:31;;;;;;;;;;;;;;:9;:31;;;;;;;;;;;;;;24586:289;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;24786:16;24766;9463:15:::1;9400:1;9463:2;:15;:::i;:::-;9445:34;::::0;9237:17:::1;9445:34;:::i;:::-;24756:26;;;;:::i;:::-;24755:47;;;;:::i;:::-;24739:13;:63:::0;24854:13;24837;9463:15:::1;9400:1;9463:2;:15;:::i;:::-;9445:34;::::0;9237:17:::1;9445:34;:::i;:::-;24827:23;;;;:::i;:::-;24826:41;;;;:::i;:::-;24813:10;:54:::0;-1:-1:-1;;;;24586:289:0:o;21057:125::-;21142:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;21142:32:0;;;160:74:1;21118:4:0;;21142:9;;;;;:23;;133:18:1;;21142:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20334:148::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;-1:-1:-1;;;;;20430:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;20430:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20334:148::o;37119:87::-;11743:6;;-1:-1:-1;;;;;11743:6:0;11753:10;11743:20;11735:65;;;;-1:-1:-1;;;11735:65:0;;14548:2:1;11735:65:0;;;14530:21:1;;;14567:18;;;14560:30;-1:-1:-1;;;;;;;;;;;14606:18:1;;;14599:62;14678:18;;11735:65:0;14346:356:1;11735:65:0;37175:7:::1;;;;;;;;;-1:-1:-1::0;;;;;37175:7:0::1;-1:-1:-1::0;;;;;37175:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;26452:1996:::0;26531:4;-1:-1:-1;;;;;26556:18:0;;26548:68;;;;-1:-1:-1;;;26548:68:0;;29353:2:1;26548:68:0;;;29335:21:1;29392:2;29372:18;;;29365:30;29431:34;29411:18;;;29404:62;29502:7;29482:18;;;29475:35;29527:19;;26548:68:0;29151:401:1;26548:68:0;-1:-1:-1;;;;;26635:16:0;;26627:64;;;;-1:-1:-1;;;26627:64:0;;29759:2:1;26627:64:0;;;29741:21:1;29798:2;29778:18;;;29771:30;29837:34;29817:18;;;29810:62;29908:5;29888:18;;;29881:33;29931:19;;26627:64:0;29557:399:1;26627:64:0;26719:1;26710:6;:10;26702:64;;;;-1:-1:-1;;;26702:64:0;;30163:2:1;26702:64:0;;;30145:21:1;30202:2;30182:18;;;30175:30;30241:34;30221:18;;;30214:62;30312:11;30292:18;;;30285:39;30341:19;;26702:64:0;29961:405:1;26702:64:0;-1:-1:-1;;;;;26865:13:0;;26777:8;26865:13;;;:7;:13;;;;;;26777:8;;;;26865:13;;26861:162;;;26901:4;26895:10;;26861:162;;;-1:-1:-1;;;;;26927:11:0;;;;;;:7;:11;;;;;;;;26923:100;;;26962:4;26955:11;;26923:100;;;-1:-1:-1;27007:4:0;26923:100;27036:20;27047:4;27053:2;27036:10;:20::i;:::-;27033:641;;;27077:14;;;;;;;27073:89;;27112:34;;-1:-1:-1;;;27112:34:0;;30573:2:1;27112:34:0;;;30555:21:1;30612:2;30592:18;;;30585:30;30651:26;30631:18;;;30624:54;30695:18;;27112:34:0;30371:348:1;27073:89:0;27179:3;:11;;;;27186:4;27179:11;27176:231;;;-1:-1:-1;;;;;27215:27:0;;;;;;:21;:27;;;;;;;;27214:28;:58;;;;-1:-1:-1;;;;;;27247:25:0;;;;;;:21;:25;;;;;;;;27246:26;27214:58;27210:182;;;27315:12;;27305:6;:22;;27297:75;;;;-1:-1:-1;;;27297:75:0;;30926:2:1;27297:75:0;;;30908:21:1;30965:2;30945:18;;;30938:30;31004:34;30984:18;;;30977:62;31075:10;31055:18;;;31048:38;31103:19;;27297:75:0;30724:404:1;27297:75:0;27438:9;;-1:-1:-1;;;;;27424:24:0;;;27438:9;;27424:24;;;;:33;;;27453:4;27452:5;27424:33;27421:242;;;-1:-1:-1;;;;;27483:25:0;;;;;;:21;:25;;;;;;;;27478:170;;27567:14;;27557:6;27541:13;27551:2;-1:-1:-1;;;;;16310:16:0;16292:7;16310:16;;;:7;:16;;;;;;;16226:103;27541:13;:22;;;;:::i;:::-;:40;;27533:95;;;;-1:-1:-1;;;27533:95:0;;31335:2:1;27533:95:0;;;31317:21:1;31374:2;31354:18;;;31347:30;31413:34;31393:18;;;31386:62;31484:12;31464:18;;;31457:40;31514:19;;27533:95:0;31133:406:1;27533:95:0;-1:-1:-1;;;;;27729:25:0;;27686:12;27729:25;;;:19;:25;;;;;;27701:4;;27729:25;;;:52;;-1:-1:-1;;;;;;27758:23:0;;;;;;:19;:23;;;;;;;;27729:52;27726:98;;;-1:-1:-1;27807:5:0;27726:98;27840:4;27836:522;;;27866:6;;-1:-1:-1;;;27866:6:0;;;;27865:7;:47;;;;-1:-1:-1;27893:19:0;;-1:-1:-1;;;27893:19:0;;;;27865:47;:89;;;;-1:-1:-1;;;;;;27934:20:0;;;;;;:16;:20;;;;;;;;27933:21;27865:89;:133;;;;-1:-1:-1;;;;;;27976:22:0;;;;;;:16;:22;;;;;;;;27975:23;27865:133;27861:480;;;28082:4;28033:28;16310:16;;;:7;:16;;;;;;28135:13;;28111:37;;28107:219;;28200:10;;28176:20;:34;28173:77;;-1:-1:-1;28237:10:0;;28173:77;28272:34;28285:20;28272:12;:34::i;:::-;28014:327;27861:480;28378:62;28396:4;28402:2;28406:6;28414:7;28423:3;28428:4;28434:5;28378:17;:62::i;:::-;28371:69;26452:1996;-1:-1:-1;;;;;;;;26452:1996:0:o;28456:1118::-;28612:16;;28590:4;;28612:16;;;;;28607:298;;28645:28;28664:4;28670:2;28645:18;:28::i;:::-;28693:16;;;;;;;28692:17;:41;;;;;28713:20;28724:4;28730:2;28713:10;:20::i;:::-;28692:77;;;;-1:-1:-1;;;;;;28738:31:0;;;;;;:25;:31;;;;;;;;28737:32;28692:77;:111;;;;-1:-1:-1;;;;;;28774:29:0;;;;;;:25;:29;;;;;;;;28773:30;28692:111;:121;;;;;28808:5;28807:6;28692:121;28688:206;;;28834:44;;-1:-1:-1;;;28834:44:0;;31746:2:1;28834:44:0;;;31728:21:1;31785:2;31765:18;;;31758:30;31824:34;31804:18;;;31797:62;31895:4;31875:18;;;31868:32;31917:19;;28834:44:0;31544:398:1;28688:206:0;28920:20;28931:4;28937:2;28920:10;:20::i;:::-;28917:313;;;28988:9;;:37;;;;;-1:-1:-1;;;;;32228:15:1;;;28988:37:0;;;32210:34:1;32280:15;;;32260:18;;;32253:43;32312:18;;;32305:34;;;28957:12:0;;28988:9;;;;;:19;;32122:18:1;;28988:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;28988:37:0;;;;;;;;-1:-1:-1;;28988:37:0;;;;;;;;;;;;:::i;:::-;;;28984:163;;29123:8;;;28984:163;29076:5;-1:-1:-1;29167:7:0;29163:56;;29195:8;;;29163:56;28942:288;28917:313;-1:-1:-1;;;;;29242:13:0;;;;;;:7;:13;;;;;:23;;29259:6;;29242:13;:23;;29259:6;;29242:23;:::i;:::-;;;;-1:-1:-1;29301:6:0;;-1:-1:-1;29318:98:0;;;;29363:41;29373:4;29379:6;29387:3;29392:4;29398:5;29363:9;:41::i;:::-;29346:58;;29318:98;-1:-1:-1;;;;;29426:11:0;;;;;;:7;:11;;;;;:29;;29441:14;;29426:11;:29;;29441:14;;29426:29;:::i;:::-;;;;-1:-1:-1;29468:24:0;;-1:-1:-1;29483:4:0;29489:2;29468:14;:24::i;:::-;29525:2;-1:-1:-1;;;;;29510:34:0;29519:4;-1:-1:-1;;;;;29510:34:0;;29529:14;29510:34;;;;391:25:1;;379:2;364:18;;245:177;29510:34:0;;;;;;;;-1:-1:-1;29562:4:0;;28456:1118;-1:-1:-1;;;;;;;;28456:1118:0:o;16700:341::-;-1:-1:-1;;;;;16794:20:0;;16786:69;;;;-1:-1:-1;;;16786:69:0;;32552:2:1;16786:69:0;;;32534:21:1;32591:2;32571:18;;;32564:30;32630:34;32610:18;;;32603:62;32701:6;32681:18;;;32674:34;32725:19;;16786:69:0;32350:400:1;16786:69:0;-1:-1:-1;;;;;16874:21:0;;16866:68;;;;-1:-1:-1;;;16866:68:0;;32957:2:1;16866:68:0;;;32939:21:1;32996:2;32976:18;;;32969:30;33035:34;33015:18;;;33008:62;33106:4;33086:18;;;33079:32;33128:19;;16866:68:0;32755:398:1;16866:68:0;-1:-1:-1;;;;;16947:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;17000:33;;391:25:1;;;17000:33:0;;364:18:1;17000:33:0;;;;;;;16700:341;;;:::o;26087:357::-;26155:4;26187:6;;-1:-1:-1;;;;;26179:14:0;;;26187:6;;26179:14;;;;:43;;-1:-1:-1;26216:6:0;;-1:-1:-1;;;;;26210:12:0;;;26216:6;;26210:12;;26179:43;:79;;;;-1:-1:-1;26252:6:0;;-1:-1:-1;;;;;26252:6:0;26239:9;:19;;26179:79;:118;;;;-1:-1:-1;;;;;;26276:21:0;;;;;;:17;:21;;;;;;;;26275:22;26179:118;:159;;;;-1:-1:-1;;;;;;26315:23:0;;;;;;:17;:23;;;;;;;;26314:24;26179:159;:186;;;;-1:-1:-1;;;;;;26355:10:0;;10553:42;26355:10;;26179:186;:219;;;;-1:-1:-1;;;;;;26382:16:0;;;;26179:219;:257;;;;-1:-1:-1;;;;;;;;26415:21:0;26431:4;26415:21;;;26087:357::o;30974:2399::-;11637:6;:13;;-1:-1:-1;;;;11637:13:0;-1:-1:-1;;;11637:13:0;;;31055:30:::1;::::0;;::::1;::::0;::::1;::::0;;31078:7:::1;31055:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31055:30:0;::::1;::::0;;::::1;::::0;;;;;;11637:13;31100:17;31096:56:::1;;31134:7;;;31096:56;31195:4;31175:26;::::0;;;:11:::1;:26;::::0;;;;;;;31210:9:::1;::::0;-1:-1:-1;;;;;31210:9:0::1;31175:46:::0;;;;;;;;-1:-1:-1;;31175:67:0::1;31172:165;;31279:4;31259:26;::::0;;;:11:::1;:26;::::0;;;;;;;31294:9:::1;::::0;-1:-1:-1;;;;;31294:9:0::1;31259:46:::0;;;;;;;-1:-1:-1;;31259:66:0;;31172:165:::1;31365:9;::::0;:16:::1;::::0;;-1:-1:-1;;;31365:16:0;;;;31349:13:::1;::::0;-1:-1:-1;;;;;31365:9:0::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31349:32;;31394:17;31477:1;31460:6;:12;;;31415:58;;31439:6;:16;;;31416:39;;:20;:39;;;;:::i;:::-;31415:58;;;;:::i;:::-;31414:64;;;;:::i;:::-;31394:84:::0;-1:-1:-1;31489:15:0::1;31507:32;31394:84:::0;31507:20;:32:::1;:::i;:::-;31576:16;::::0;;31590:1:::1;31576:16:::0;;;;;::::1;::::0;;31489:50;;-1:-1:-1;31552:21:0::1;::::0;31576:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;31576:16:0::1;31552:40;;31621:4;31603;31608:1;31603:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;31603:23:0::1;;;-1:-1:-1::0;;;;;31603:23:0::1;;;::::0;::::1;31647:5;31637:4;31642:1;31637:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31637:15:0;;::::1;:7;::::0;;::::1;::::0;;;;;:15;31717:9:::1;::::0;:186:::1;::::0;;;;31683:21:::1;::::0;31717:9;;;::::1;::::0;:60:::1;::::0;:186:::1;::::0;31792:7;;31665:15:::1;::::0;31830:4;;31857::::1;::::0;31877:15:::1;::::0;31717:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31916:18;31961:7;31937:21;:31;;;;:::i;:::-;31916:52:::0;-1:-1:-1;31979:24:0::1;32033:7:::0;32007:22:::1;32020:9:::0;31916:52;32007:22:::1;:::i;:::-;32006:34;;;;:::i;:::-;31979:61:::0;-1:-1:-1;32057:13:0;;32053:328:::1;;32087:9;::::0;:222:::1;::::0;;;;32164:4:::1;32087:222;::::0;::::1;34132:34:1::0;34182:18;;;34175:34;;;32087:9:0::1;34225:18:1::0;;;34218:34;;;34268:18;;;34261:34;10553:42:0::1;34311:19:1::0;;;34304:44;32279:15:0::1;34364:19:1::0;;;34357:35;-1:-1:-1;;;;;32087:9:0;;::::1;::::0;:25:::1;::::0;32120:16;;34043:19:1;;32087:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;32329:40:0::1;::::0;;27366:25:1;;;27422:2;27407:18;;27400:34;;;32329:40:0::1;::::0;-1:-1:-1;27339:18:1;32329:40:0::1;;;;;;;32053:328;32393:30;32407:16:::0;32393:30;::::1;:::i;:::-;;;32450:6;:16;;;32434:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;32534:12:::1;::::0;::::1;::::0;32516:14;;32477:22:::1;::::0;-1:-1:-1;32502:44:0;;::::1;::::0;32503:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;32502:44;;;;:::i;:::-;32477:69;;32557:18;32606:6;:12;;;32578:40;;32592:6;:10;;;32579:23;;:10;:23;;;;:::i;:::-;32578:40;;;;:::i;:::-;32557:61;;32629:27;32696:6;:12;;;32659:49;;32673:6;:19;;;32660:32;;:10;:32;;;;:::i;:::-;32659:49;;;;:::i;:::-;32629:79;;32719:29;32790:6;:12;;;32751:51;;32765:6;:21;;;32752:34;;:10;:34;;;;:::i;:::-;32751:51;;;;:::i;:::-;32719:83:::0;-1:-1:-1;32813:24:0::1;32719:83:::0;32884:19;32854:27:::1;32871:10:::0;32854:14;:27:::1;:::i;:::-;:49;;;;:::i;:::-;:73;;;;:::i;:::-;32840:88;::::0;:10;:88:::1;:::i;:::-;32945:14:::0;;32813:115;;-1:-1:-1;32945:18:0::1;;::::0;32941:105:::1;;32984:9;;;;;;;;;-1:-1:-1::0;;;;;32984:9:0::1;-1:-1:-1::0;;;;;32984:14:0::1;;33006;32984:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;32980:55:::0;::::1;33061:16;::::0;::::1;::::0;:20:::1;;::::0;33058:99:::1;;33097:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;33097:21:0;;::::1;::::0;:48;::::1;;;::::0;33128:16;;33097:21:::1;:48:::0;:21;:48;33128:16;33097:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33058:99;33170:10;::::0;::::1;::::0;:14:::1;;::::0;33167:81:::1;;33200:15:::0;;:36:::1;::::0;-1:-1:-1;;;;;33200:15:0;;::::1;::::0;:36;::::1;;;::::0;33225:10;;33200:15:::1;:36:::0;:15;:36;33225:10;33200:15;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33167:81;33261:19;::::0;::::1;::::0;:23:::1;;::::0;33258:108:::1;;33300:24:::0;;:54:::1;::::0;-1:-1:-1;;;;;33300:24:0;;::::1;::::0;:54;::::1;;;::::0;33334:19;;33300:24:::1;:54:::0;:24;:54;33334:19;33300:24;:54;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;33258:108;31044:2329;;;;;;;;;;;;;11661:1;-1:-1:-1::0;11673:6:0;:14;;-1:-1:-1;;;;11673:14:0;;;30974:2399::o;33763:676::-;33845:16;;;;;;;33844:17;33836:65;;;;-1:-1:-1;;;33836:65:0;;35138:2:1;33836:65:0;;;35120:21:1;35177:2;35157:18;;;35150:30;35216:34;35196:18;;;35189:62;35287:5;35267:18;;;35260:33;35310:19;;33836:65:0;34936:399:1;33836:65:0;33917:20;33928:4;33934:2;33917:10;:20::i;:::-;33916:21;:37;;;;-1:-1:-1;33947:6:0;;-1:-1:-1;;;;;33941:12:0;;;33947:6;;33941:12;33916:37;33912:520;;;-1:-1:-1;;;;;33970:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;33970:30:0;33996:4;33970:30;;;34015:16;:23;;-1:-1:-1;;34015:23:0;;;;;;;34064:9;;;;34053:108;;34109:9;:36;;-1:-1:-1;;34109:36:0;34139:4;34109:36;;;;;34053:108;34186:9;;-1:-1:-1;;;;;34186:9:0;34175:107;;34232:9;:34;;-1:-1:-1;;;;;;34232:34:0;34260:4;34232:34;;;34175:107;34296:19;:26;;-1:-1:-1;;;;34296:26:0;-1:-1:-1;;;34296:26:0;;;34337:23;:31;;-1:-1:-1;;34337:31:0;;;34388:32;;-1:-1:-1;4604:41:1;;34388:32:0;;4592:2:1;4577:18;34388:32:0;;;;;;;33763:676;;:::o;30319:647::-;30419:7;30439:18;30472:3;30468:205;;;-1:-1:-1;30505:9:0;:16;;;30468:205;;;30543:4;30539:134;;;-1:-1:-1;30577:9:0;:17;;;;;;30539:134;;;-1:-1:-1;30640:9:0;:21;;;;;;30539:134;30689:10;30703:1;30689:15;30685:61;;30728:6;30721:13;;;;;30685:61;30758:17;10344:5;30778:19;30787:10;30778:6;:19;:::i;:::-;:38;;;;:::i;:::-;30845:4;30829:22;;;;:7;:22;;;;;:35;;30758:58;;-1:-1:-1;30758:58:0;;30829:22;;;:35;;30758:58;;30829:35;:::i;:::-;;;;-1:-1:-1;;30880:40:0;;391:25:1;;;30903:4:0;;-1:-1:-1;;;;;30880:40:0;;;;;379:2:1;364:18;30880:40:0;;;;;;;30940:18;30949:9;30940:6;:18;:::i;:::-;30933:25;;;;30319:647;;;;;;;;:::o;29582:414::-;-1:-1:-1;;;;;29657:30:0;;;;;;:24;:30;;;;;;;;29652:115;;29708:9;;-1:-1:-1;;;;;29730:13:0;;;29708:9;29730:13;;;29708:9;29730:13;;;;;;;;29708:36;;-1:-1:-1;;;29708:36:0;;;;;22450:74:1;;;;22540:18;;;22533:34;29708:9:0;;;:15;;22423:18:1;;29708:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29704:52;;-1:-1:-1;;;;;29782:28:0;;;;;;:24;:28;;;;;;;;29777:109;;29831:9;;-1:-1:-1;;;;;29851:11:0;;;29831:9;29851:11;;;29831:9;29851:11;;;;;;;;29831:32;;-1:-1:-1;;;29831:32:0;;;;;22450:74:1;;;;22540:18;;;22533:34;29831:9:0;;;:15;;22423:18:1;;29831:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29827:48;;29900:14;;;;29896:93;;;29935:9;;29953:12;;29935:31;;;;;-1:-1:-1;;;;;29935:9:0;;;;:17;;:31;;;;391:25:1;;;379:2;364:18;;245:177;29935:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29931:47;;;29582:414;;:::o;427:184:1:-;-1:-1:-1;;;476:1:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:275;687:2;681:9;752:2;733:13;;-1:-1:-1;;729:27:1;717:40;;787:18;772:34;;808:22;;;769:62;766:88;;;834:18;;:::i;:::-;870:2;863:22;616:275;;-1:-1:-1;616:275:1:o;896:183::-;956:4;989:18;981:6;978:30;975:56;;;1011:18;;:::i;:::-;-1:-1:-1;1056:1:1;1052:14;1068:4;1048:25;;896:183::o;1084:154::-;-1:-1:-1;;;;;1163:5:1;1159:54;1152:5;1149:65;1139:93;;1228:1;1225;1218:12;1243:737;1297:5;1350:3;1343:4;1335:6;1331:17;1327:27;1317:55;;1368:1;1365;1358:12;1317:55;1404:6;1391:20;1430:4;1454:60;1470:43;1510:2;1470:43;:::i;:::-;1454:60;:::i;:::-;1548:15;;;1634:1;1630:10;;;;1618:23;;1614:32;;;1579:12;;;;1658:15;;;1655:35;;;1686:1;1683;1676:12;1655:35;1722:2;1714:6;1710:15;1734:217;1750:6;1745:3;1742:15;1734:217;;;1830:3;1817:17;1847:31;1872:5;1847:31;:::i;:::-;1891:18;;1929:12;;;;1767;;1734:217;;;-1:-1:-1;1969:5:1;1243:737;-1:-1:-1;;;;;;1243:737:1:o;1985:118::-;2071:5;2064:13;2057:21;2050:5;2047:32;2037:60;;2093:1;2090;2083:12;2108:477;2198:6;2206;2259:2;2247:9;2238:7;2234:23;2230:32;2227:52;;;2275:1;2272;2265:12;2227:52;2315:9;2302:23;2348:18;2340:6;2337:30;2334:50;;;2380:1;2377;2370:12;2334:50;2403:61;2456:7;2447:6;2436:9;2432:22;2403:61;:::i;:::-;2393:71;;;2514:2;2503:9;2499:18;2486:32;2527:28;2549:5;2527:28;:::i;:::-;2574:5;2564:15;;;2108:477;;;;;:::o;2960:258::-;3032:1;3042:113;3056:6;3053:1;3050:13;3042:113;;;3132:11;;;3126:18;3113:11;;;3106:39;3078:2;3071:10;3042:113;;;3173:6;3170:1;3167:13;3164:48;;;-1:-1:-1;;3208:1:1;3190:16;;3183:27;2960:258::o;3223:::-;3265:3;3303:5;3297:12;3330:6;3325:3;3318:19;3346:63;3402:6;3395:4;3390:3;3386:14;3379:4;3372:5;3368:16;3346:63;:::i;:::-;3463:2;3442:15;-1:-1:-1;;3438:29:1;3429:39;;;;3470:4;3425:50;;3223:258;-1:-1:-1;;3223:258:1:o;3486:220::-;3635:2;3624:9;3617:21;3598:4;3655:45;3696:2;3685:9;3681:18;3673:6;3655:45;:::i;3959:180::-;4018:6;4071:2;4059:9;4050:7;4046:23;4042:32;4039:52;;;4087:1;4084;4077:12;4039:52;-1:-1:-1;4110:23:1;;3959:180;-1:-1:-1;3959:180:1:o;4144:315::-;4212:6;4220;4273:2;4261:9;4252:7;4248:23;4244:32;4241:52;;;4289:1;4286;4279:12;4241:52;4328:9;4315:23;4347:31;4372:5;4347:31;:::i;:::-;4397:5;4449:2;4434:18;;;;4421:32;;-1:-1:-1;;;4144:315:1:o;4656:247::-;4715:6;4768:2;4756:9;4747:7;4743:23;4739:32;4736:52;;;4784:1;4781;4774:12;4736:52;4823:9;4810:23;4842:31;4867:5;4842:31;:::i;4908:388::-;4976:6;4984;5037:2;5025:9;5016:7;5012:23;5008:32;5005:52;;;5053:1;5050;5043:12;5005:52;5092:9;5079:23;5111:31;5136:5;5111:31;:::i;:::-;5161:5;-1:-1:-1;5218:2:1;5203:18;;5190:32;5231:33;5190:32;5231:33;:::i;5301:456::-;5378:6;5386;5394;5447:2;5435:9;5426:7;5422:23;5418:32;5415:52;;;5463:1;5460;5453:12;5415:52;5502:9;5489:23;5521:31;5546:5;5521:31;:::i;:::-;5571:5;-1:-1:-1;5628:2:1;5613:18;;5600:32;5641:33;5600:32;5641:33;:::i;:::-;5301:456;;5693:7;;-1:-1:-1;;;5747:2:1;5732:18;;;;5719:32;;5301:456::o;5762:248::-;5830:6;5838;5891:2;5879:9;5870:7;5866:23;5862:32;5859:52;;;5907:1;5904;5897:12;5859:52;-1:-1:-1;;5930:23:1;;;6000:2;5985:18;;;5972:32;;-1:-1:-1;5762:248:1:o;6015:1138::-;6133:6;6141;6194:2;6182:9;6173:7;6169:23;6165:32;6162:52;;;6210:1;6207;6200:12;6162:52;6250:9;6237:23;6279:18;6320:2;6312:6;6309:14;6306:34;;;6336:1;6333;6326:12;6306:34;6359:61;6412:7;6403:6;6392:9;6388:22;6359:61;:::i;:::-;6349:71;;6439:2;6429:12;;6494:2;6483:9;6479:18;6466:32;6523:2;6513:8;6510:16;6507:36;;;6539:1;6536;6529:12;6507:36;6562:24;;;-1:-1:-1;6617:4:1;6609:13;;6605:27;-1:-1:-1;6595:55:1;;6646:1;6643;6636:12;6595:55;6682:2;6669:16;6705:60;6721:43;6761:2;6721:43;:::i;6705:60::-;6799:15;;;6881:1;6877:10;;;;6869:19;;6865:28;;;6830:12;;;;6905:19;;;6902:39;;;6937:1;6934;6927:12;6902:39;6961:11;;;;6981:142;6997:6;6992:3;6989:15;6981:142;;;7063:17;;7051:30;;7014:12;;;;7101;;;;6981:142;;;7142:5;7132:15;;;;;;;6015:1138;;;;;:::o;7158:647::-;7232:6;7240;7248;7256;7309:3;7297:9;7288:7;7284:23;7280:33;7277:53;;;7326:1;7323;7316:12;7277:53;7365:9;7352:23;7384:28;7406:5;7384:28;:::i;:::-;7431:5;-1:-1:-1;7488:2:1;7473:18;;7460:32;7501:30;7460:32;7501:30;:::i;:::-;7550:7;-1:-1:-1;7609:2:1;7594:18;;7581:32;7622:30;7581:32;7622:30;:::i;:::-;7671:7;-1:-1:-1;7730:2:1;7715:18;;7702:32;7743:30;7702:32;7743:30;:::i;:::-;7158:647;;;;-1:-1:-1;7158:647:1;;-1:-1:-1;;7158:647:1:o;7999:159::-;8066:20;;8126:6;8115:18;;8105:29;;8095:57;;8148:1;8145;8138:12;8095:57;7999:159;;;:::o;8163:328::-;8237:6;8245;8253;8306:2;8294:9;8285:7;8281:23;8277:32;8274:52;;;8322:1;8319;8312:12;8274:52;8345:28;8363:9;8345:28;:::i;:::-;8335:38;;8392:37;8425:2;8414:9;8410:18;8392:37;:::i;:::-;8382:47;;8448:37;8481:2;8470:9;8466:18;8448:37;:::i;:::-;8438:47;;8163:328;;;;;:::o;8496:382::-;8561:6;8569;8622:2;8610:9;8601:7;8597:23;8593:32;8590:52;;;8638:1;8635;8628:12;8590:52;8677:9;8664:23;8696:31;8721:5;8696:31;:::i;:::-;8746:5;-1:-1:-1;8803:2:1;8788:18;;8775:32;8816:30;8775:32;8816:30;:::i;9132:711::-;9425:3;9414:9;9407:22;9388:4;9452:46;9493:3;9482:9;9478:19;9470:6;9452:46;:::i;:::-;9546:9;9538:6;9534:22;9529:2;9518:9;9514:18;9507:50;9580:33;9606:6;9598;9580:33;:::i;:::-;9566:47;;9661:9;9653:6;9649:22;9644:2;9633:9;9629:18;9622:50;9695:33;9721:6;9713;9695:33;:::i;:::-;9681:47;;9776:9;9768:6;9764:22;9759:2;9748:9;9744:18;9737:50;9804:33;9830:6;9822;9804:33;:::i;:::-;9796:41;9132:711;-1:-1:-1;;;;;;;9132:711:1:o;9848:553::-;9949:6;9957;9965;10018:2;10006:9;9997:7;9993:23;9989:32;9986:52;;;10034:1;10031;10024:12;9986:52;10073:9;10060:23;10092:31;10117:5;10092:31;:::i;:::-;10142:5;-1:-1:-1;10199:2:1;10184:18;;10171:32;10212:33;10171:32;10212:33;:::i;:::-;10264:7;-1:-1:-1;10323:2:1;10308:18;;10295:32;10336:33;10295:32;10336:33;:::i;:::-;10388:7;10378:17;;;9848:553;;;;;:::o;10406:367::-;10469:8;10479:6;10533:3;10526:4;10518:6;10514:17;10510:27;10500:55;;10551:1;10548;10541:12;10500:55;-1:-1:-1;10574:20:1;;10617:18;10606:30;;10603:50;;;10649:1;10646;10639:12;10603:50;10686:4;10678:6;10674:17;10662:29;;10746:3;10739:4;10729:6;10726:1;10722:14;10714:6;10710:27;10706:38;10703:47;10700:67;;;10763:1;10760;10753:12;10700:67;10406:367;;;;;:::o;10778:773::-;10900:6;10908;10916;10924;10977:2;10965:9;10956:7;10952:23;10948:32;10945:52;;;10993:1;10990;10983:12;10945:52;11033:9;11020:23;11062:18;11103:2;11095:6;11092:14;11089:34;;;11119:1;11116;11109:12;11089:34;11158:70;11220:7;11211:6;11200:9;11196:22;11158:70;:::i;:::-;11247:8;;-1:-1:-1;11132:96:1;-1:-1:-1;11335:2:1;11320:18;;11307:32;;-1:-1:-1;11351:16:1;;;11348:36;;;11380:1;11377;11370:12;11348:36;;11419:72;11483:7;11472:8;11461:9;11457:24;11419:72;:::i;:::-;10778:773;;;;-1:-1:-1;11510:8:1;-1:-1:-1;;;;10778:773:1:o;11556:316::-;11633:6;11641;11649;11702:2;11690:9;11681:7;11677:23;11673:32;11670:52;;;11718:1;11715;11708:12;11670:52;-1:-1:-1;;11741:23:1;;;11811:2;11796:18;;11783:32;;-1:-1:-1;11862:2:1;11847:18;;;11834:32;;11556:316;-1:-1:-1;11556:316:1:o;12563:547::-;12661:6;12669;12677;12685;12693;12701;12754:3;12742:9;12733:7;12729:23;12725:33;12722:53;;;12771:1;12768;12761:12;12722:53;12794:28;12812:9;12794:28;:::i;:::-;12784:38;;12841:37;12874:2;12863:9;12859:18;12841:37;:::i;:::-;12831:47;;12897:37;12930:2;12919:9;12915:18;12897:37;:::i;:::-;12887:47;;12953:37;12986:2;12975:9;12971:18;12953:37;:::i;:::-;12943:47;;13009:38;13042:3;13031:9;13027:19;13009:38;:::i;:::-;12999:48;;13066:38;13099:3;13088:9;13084:19;13066:38;:::i;:::-;13056:48;;12563:547;;;;;;;;:::o;13115:376::-;13177:6;13185;13238:2;13226:9;13217:7;13213:23;13209:32;13206:52;;;13254:1;13251;13244:12;13206:52;13293:9;13280:23;13312:28;13334:5;13312:28;:::i;13956:385::-;14042:6;14050;14058;14066;14119:3;14107:9;14098:7;14094:23;14090:33;14087:53;;;14136:1;14133;14126:12;14087:53;-1:-1:-1;;14159:23:1;;;14229:2;14214:18;;14201:32;;-1:-1:-1;14280:2:1;14265:18;;14252:32;;14331:2;14316:18;14303:32;;-1:-1:-1;13956:385:1;-1:-1:-1;13956:385:1:o;14707:484::-;14760:3;14798:5;14792:12;14825:6;14820:3;14813:19;14851:4;14880:2;14875:3;14871:12;14864:19;;14917:2;14910:5;14906:14;14938:1;14948:218;14962:6;14959:1;14956:13;14948:218;;;15027:13;;-1:-1:-1;;;;;15023:62:1;15011:75;;15106:12;;;;15141:15;;;;14984:1;14977:9;14948:218;;;-1:-1:-1;15182:3:1;;14707:484;-1:-1:-1;;;;;14707:484:1:o;15196:342::-;15397:2;15386:9;15379:21;15360:4;15417:56;15469:2;15458:9;15454:18;15446:6;15417:56;:::i;:::-;15409:64;;15523:6;15516:14;15509:22;15504:2;15493:9;15489:18;15482:50;15196:342;;;;;:::o;15543:184::-;-1:-1:-1;;;15592:1:1;15585:88;15692:4;15689:1;15682:15;15716:4;15713:1;15706:15;15732:184;-1:-1:-1;;;15781:1:1;15774:88;15881:4;15878:1;15871:15;15905:4;15902:1;15895:15;15921:135;15960:3;15981:17;;;15978:43;;16001:18;;:::i;:::-;-1:-1:-1;16048:1:1;16037:13;;15921:135::o;16397:422::-;16486:1;16529:5;16486:1;16543:270;16564:7;16554:8;16551:21;16543:270;;;16623:4;16619:1;16615:6;16611:17;16605:4;16602:27;16599:53;;;16632:18;;:::i;:::-;16682:7;16672:8;16668:22;16665:55;;;16702:16;;;;16665:55;16781:22;;;;16741:15;;;;16543:270;;;16547:3;16397:422;;;;;:::o;16824:806::-;16873:5;16903:8;16893:80;;-1:-1:-1;16944:1:1;16958:5;;16893:80;16992:4;16982:76;;-1:-1:-1;17029:1:1;17043:5;;16982:76;17074:4;17092:1;17087:59;;;;17160:1;17155:130;;;;17067:218;;17087:59;17117:1;17108:10;;17131:5;;;17155:130;17192:3;17182:8;17179:17;17176:43;;;17199:18;;:::i;:::-;-1:-1:-1;;17255:1:1;17241:16;;17270:5;;17067:218;;17369:2;17359:8;17356:16;17350:3;17344:4;17341:13;17337:36;17331:2;17321:8;17318:16;17313:2;17307:4;17304:12;17300:35;17297:77;17294:159;;;-1:-1:-1;17406:19:1;;;17438:5;;17294:159;17485:34;17510:8;17504:4;17485:34;:::i;:::-;17555:6;17551:1;17547:6;17543:19;17534:7;17531:32;17528:58;;;17566:18;;:::i;:::-;17604:20;;16824:806;-1:-1:-1;;;16824:806:1:o;17635:140::-;17693:5;17722:47;17763:4;17753:8;17749:19;17743:4;17722:47;:::i;17780:274::-;17820:1;17846;17836:189;;-1:-1:-1;;;17878:1:1;17871:88;17982:4;17979:1;17972:15;18010:4;18007:1;18000:15;17836:189;-1:-1:-1;18039:9:1;;17780:274::o;18059:168::-;18099:7;18165:1;18161;18157:6;18153:14;18150:1;18147:21;18142:1;18135:9;18128:17;18124:45;18121:71;;;18172:18;;:::i;:::-;-1:-1:-1;18212:9:1;;18059:168::o;18232:125::-;18272:4;18300:1;18297;18294:8;18291:34;;;18305:18;;:::i;:::-;-1:-1:-1;18342:9:1;;18232:125::o;19131:175::-;19168:3;19212:4;19205:5;19201:16;19241:4;19232:7;19229:17;19226:43;;19249:18;;:::i;:::-;19298:1;19285:15;;19131:175;-1:-1:-1;;19131:175:1:o;20601:184::-;20671:6;20724:2;20712:9;20703:7;20699:23;20695:32;20692:52;;;20740:1;20737;20730:12;20692:52;-1:-1:-1;20763:16:1;;20601:184;-1:-1:-1;20601:184:1:o;20790:497::-;20844:5;20897:3;20890:4;20882:6;20878:17;20874:27;20864:55;;20915:1;20912;20905:12;20864:55;20944:6;20938:13;20970:18;20966:2;20963:26;20960:52;;;20992:18;;:::i;:::-;21036:55;21079:2;21060:13;;-1:-1:-1;;21056:27:1;21085:4;21052:38;21036:55;:::i;:::-;21116:2;21107:7;21100:19;21162:3;21155:4;21150:2;21142:6;21138:15;21134:26;21131:35;21128:55;;;21179:1;21176;21169:12;21128:55;21192:64;21253:2;21246:4;21237:7;21233:18;21226:4;21218:6;21214:17;21192:64;:::i;21292:971::-;21429:6;21437;21445;21453;21506:3;21494:9;21485:7;21481:23;21477:33;21474:53;;;21523:1;21520;21513:12;21474:53;21556:9;21550:16;21585:18;21626:2;21618:6;21615:14;21612:34;;;21642:1;21639;21632:12;21612:34;21665:61;21718:7;21709:6;21698:9;21694:22;21665:61;:::i;:::-;21655:71;;21772:2;21761:9;21757:18;21751:25;21735:41;;21801:2;21791:8;21788:16;21785:36;;;21817:1;21814;21807:12;21785:36;21840:63;21895:7;21884:8;21873:9;21869:24;21840:63;:::i;:::-;21830:73;;21949:2;21938:9;21934:18;21928:25;21912:41;;21978:2;21968:8;21965:16;21962:36;;;21994:1;21991;21984:12;21962:36;22017:63;22072:7;22061:8;22050:9;22046:24;22017:63;:::i;:::-;22007:73;;22126:2;22115:9;22111:18;22105:25;22089:41;;22155:2;22145:8;22142:16;22139:36;;;22171:1;22168;22161:12;22139:36;;22194:63;22249:7;22238:8;22227:9;22223:24;22194:63;:::i;:::-;22184:73;;;21292:971;;;;;;;:::o;23889:1172::-;24177:2;24189:21;;;24162:18;;24245:22;;;24129:4;24324:6;24298:2;24283:18;;24129:4;24358:327;24372:6;24369:1;24366:13;24358:327;;;24447:6;24434:20;24467:31;24492:5;24467:31;:::i;:::-;-1:-1:-1;;;;;24523:54:1;24511:67;;24601:4;24660:15;;;;24625:12;;;;24394:1;24387:9;24358:327;;;24362:3;24732:9;24727:3;24723:19;24716:4;24705:9;24701:20;24694:49;24764:6;24759:3;24752:19;24794:66;24786:6;24783:78;24780:98;;;24874:1;24871;24864:12;24780:98;24908:6;24905:1;24901:14;24887:28;;24961:6;24953;24946:4;24941:3;24937:14;24924:44;25034:1;24991:16;;25009:4;24987:27;25023:13;;;24987:27;23889:1172;-1:-1:-1;;;;;;23889:1172:1:o;26262:251::-;26332:6;26385:2;26373:9;26364:7;26360:23;26356:32;26353:52;;;26401:1;26398;26391:12;26353:52;26433:9;26427:16;26452:31;26477:5;26452:31;:::i;26518:533::-;26789:6;26778:9;26771:25;26832:3;26827:2;26816:9;26812:18;26805:31;26752:4;26853:57;26905:3;26894:9;26890:19;26882:6;26853:57;:::i;:::-;-1:-1:-1;;;;;26946:55:1;;;;26941:2;26926:18;;26919:83;-1:-1:-1;27033:2:1;27018:18;27011:34;26845:65;26518:533;-1:-1:-1;;26518:533:1:o;27056:131::-;27116:5;27145:36;27172:8;27166:4;27145:36;:::i;27445:224::-;27484:3;27512:6;27545:2;27542:1;27538:10;27575:2;27572:1;27568:10;27606:3;27602:2;27598:12;27593:3;27590:21;27587:47;;;27614:18;;:::i;:::-;27650:13;;27445:224;-1:-1:-1;;;;27445:224:1:o;28768:128::-;28808:3;28839:1;28835:6;28832:1;28829:13;28826:39;;;28845:18;;:::i;:::-;-1:-1:-1;28881:9:1;;28768:128::o;28901:245::-;28968:6;29021:2;29009:9;29000:7;28996:23;28992:32;28989:52;;;29037:1;29034;29027:12;28989:52;29069:9;29063:16;29088:28;29110:5;29088:28;:::i;33158:605::-;33457:6;33446:9;33439:25;33500:6;33495:2;33484:9;33480:18;33473:34;33543:3;33538:2;33527:9;33523:18;33516:31;33420:4;33564:57;33616:3;33605:9;33601:19;33593:6;33564:57;:::i;:::-;-1:-1:-1;;;;;33657:55:1;;;;33652:2;33637:18;;33630:83;-1:-1:-1;33744:3:1;33729:19;33722:35;33556:65;33158:605;-1:-1:-1;;;33158:605:1:o;34403:306::-;34491:6;34499;34507;34560:2;34548:9;34539:7;34535:23;34531:32;34528:52;;;34576:1;34573;34566:12;34528:52;34605:9;34599:16;34589:26;;34655:2;34644:9;34640:18;34634:25;34624:35;;34699:2;34688:9;34684:18;34678:25;34668:35;;34403:306;;;;;:::o;34714:217::-;34753:4;34782:6;34838:10;;;;34808;;34860:12;;;34857:38;;;34875:18;;:::i;:::-;34912:13;;34714:217;-1:-1:-1;;;34714:217:1:o

Swarm Source

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