ETH Price: $3,028.39 (+2.33%)
Gas: 1 Gwei

Token

Burntama (BTAMA)
 

Overview

Max Total Supply

10,000,000,000 BTAMA

Holders

181

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
vvolis.eth
Balance
12,768,341.395472992 BTAMA

Value
$0.00
0x4572bec0b73b319dfa81845036a62750566dff43
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Burntama

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

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

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


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/od/ai/nu/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }


    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Burntama is Context, IERC20Upgradeable {
    // Ownership moved to in-contract for customizability.
    address private _owner;

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _Bots;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 100;
    uint256 public _marketingFee = 900;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyMarketingFee = _marketingFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 100;
    uint256 public _sellMarketingFee = 900;
    
    uint256 public _transferReflectFee = 0;
    uint256 public _transferLiquidityFee = 0;
    uint256 public _transferMarketingFee = 0 ;
    
    uint256 private maxReflectFee = 1000;
    uint256 private maxLiquidityFee = 1000;
    uint256 private maxMarketingFee = 2000;

    uint256 public _liquidityRatio = 100;
    uint256 public _marketingRatio = 900;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address public _routerAddress;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _marketingWallet; // Funds used for marketing.
    address payable private _burnwallet; // Funds used for critical buybacks and daily buybacks.
    address payable private _devwallet; // Funds used to pay for further development.
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    bool private SnipersareProwling = false;
    bool public burnon = true;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

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

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

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function SetTheFlame(address payable marketwallet, address payable devwallet, address payable burnwallet, string memory settokenname, string memory settokensymbol, uint8 _block, uint256 gas) external onlyOwner {
        require(!contractBurning);
        require(snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        require(gas >= 1, "Not enough gas for Transaction");

        _marketingWallet = payable(marketwallet);
        _burnwallet = payable(burnwallet);
        _devwallet = payable(devwallet);

        _name = settokenname;
        _symbol = settokensymbol;
        startingSupply = 10_000_000_000;
        if (startingSupply < 10000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        snipeBlockAmt = _block;
        gasPriceLimit = gas * 1 gwei;
        _maxTxAmount = (_tTotal * 1000) / 100000;
        maxTxAmountUI = (startingSupply * 1000) / 100000;
        _maxWalletSize = (_tTotal * 20) / 1000;
        maxWalletSizeUI = (startingSupply * 20) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

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

        contractBurning = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

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

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


        

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );
        launched = block.number;
    }

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

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

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

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function setlaunchtime (uint256 launchtime) external onlyOwner {
        launched = launchtime;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

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

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

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function setProtectionSettings(bool antiSnipe, bool antiGas, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        gasLimitActive = antiGas;
        sameBlockActive = antiBlock;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 1, "Minimum is 1");
        gasPriceLimit = gas * 1 gwei;
    }

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

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

    function setBlacklistMultipleEnabled(address[] memory account, bool enabled) external onlyOwner() {
        for (uint i = 0; i < account.length; i++) {
            _isSniperOrBlacklisted[account[i]] = enabled;
        }
    }
    
    function setthebots(address[] memory account, bool enabled) external onlyOwner() {
        for (uint i = 0; i < account.length; i++) {
            _Bots[account[i]] = enabled;
        }
    }

    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 4900);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyMarketingFee = marketing;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 4900);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellMarketingFee = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 4900);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferMarketingFee = marketing;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

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

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

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

    function setMarketingWallet(address payable marketing, address payable burn, address payable dev) external onlyOwner {
        _marketingWallet = payable(marketing);
        _devwallet = payable(dev);
        _burnwallet = payable(burn);
    }

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        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 _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");
        require(!_Bots[to] && !_Bots[from], "Bots Aren't allowed to trade");
        if (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }
        if(SnipersareProwling){
            if (block.number <= (launched) && 
                !lpPairs[to] && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _Bots[to] = true;
        }
        }
        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

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

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

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

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


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            uint256 ethbalance = address(this).balance;
            uint256 marketingbalance = ethbalance * 2 / 5 ;
            uint256 devbalance = ethbalance * 2 / 5 ;
            uint256 burnbalance = ethbalance / 5 ;
            _marketingWallet.transfer(marketingbalance);
            _devwallet.transfer(devbalance);
            _burnwallet.transfer(burnbalance);
        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

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

    function enableTrades() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if (snipeBlockAmt < 10) {
            _liqAddBlock = block.number + 10;
        } else {
            _liqAddBlock = block.number + snipeBlockAmt ;
        }
        tradingEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Rejected.");
            }

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

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

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

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

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

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

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _marketingFee = _transferMarketingFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

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

            values.rFee = 0;
        }

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

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function rescueETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketwallet","type":"address"},{"internalType":"address payable","name":"devwallet","type":"address"},{"internalType":"address payable","name":"burnwallet","type":"address"},{"internalType":"string","name":"settokenname","type":"string"},{"internalType":"string","name":"settokensymbol","type":"string"},{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"SetTheFlame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnon","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrades","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"isitaBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","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":"account","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistMultipleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"burn","type":"address"},{"internalType":"address payable","name":"dev","type":"address"}],"name":"setMarketingWallet","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"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"launchtime","type":"uint256"}],"name":"setlaunchtime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setthebots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600f81905560646010819055610384601181905560128390556013829055601481905560158390556016829055601781905560188390556019839055601a8390556103e8601b819055601c556107d0601d55601e91909155601f55612710602055602980546001600160a01b031990811661dead17909155602a805482169055602d805460ff60a81b191690556034805464010000010064ffffffffff1990911617905560358290556036829055603782905560388281556039805460ff199081166001908117909255603b80548216909217909155603e80549091169055825490911633179091554614156200012857602880546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001b1565b46606114156200015e57602880546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001b1565b46600114806200016e5750466004145b806200017a5750466003145b15620001ac57602880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001b1565b600080fd5b600160066000620001ca6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600b90620002236000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200026c620002573390565b6028546001600160a01b03166000196200028e565b602854620002889030906001600160a01b03166000196200028e565b620003ba565b6001600160a01b038316620002f65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003595760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002ed565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61470f80620003ca6000396000f3fe6080604052600436106103fe5760003560e01c80636bc87c3a11610213578063bbcea6bf11610123578063e769cda0116100ab578063eafb5a3c1161007a578063eafb5a3c14610bb7578063eec2744e14610bd7578063f6540ec714610bf7578063fa9f9e1914610c0d578063fb78680d14610c2d57600080fd5b8063e769cda014610b4b578063e79d416014610b6b578063e7c281d614610b81578063ea08d30b14610ba157600080fd5b8063d038b07e116100f2578063d038b07e14610a97578063d9e6646014610aad578063dc44b6a014610acd578063dd62ed3e14610ae3578063dff889d614610b2957600080fd5b8063bbcea6bf14610a35578063c49b9a8014610a4b578063c5d2418914610a6b578063c860795214610a8157600080fd5b806388f82020116101a657806394417b781161017557806394417b78146109a057806395d89b41146109c0578063a457c2d7146109d5578063a9059cbb146109f5578063b6f8f8dc14610a1557600080fd5b806388f8202014610910578063893d20e81461094957806389fd9bc1146109675780638da5cb5b1461094957600080fd5b806370a08231116101e257806370a08231146108a5578063715018a6146108c557806380c581d1146108da57806388790a68146108fa57600080fd5b80636bc87c3a146108395780636c6d9fa11461084f5780636cbdd5e31461086f5780636ed18aae1461088557600080fd5b8063384f6b511161030e57806350a8e016116102a157806358fa63ca1161027057806358fa63ca146107a357806364038409146107c35780636612e66f146107d9578063662fb4b2146107f95780636639dd931461081957600080fd5b806350a8e0161461070a5780635342acb41461072a578063571ac8b014610763578063575f18e51461078357600080fd5b806345e8c85c116102dd57806345e8c85c1461069d5780634a74bb02146106b35780634ef3cce5146106d45780634fb2e45d146106ea57600080fd5b8063384f6b5114610627578063395093511461063d5780633f3cf56c1461065d578063452ed4f11461067d57600080fd5b806313e461921161039157806322976e0d1161036057806322976e0d1461058f57806323b872dd146105a557806326003957146105c55780632d838119146105e5578063313ce5671461060557600080fd5b806313e461921461052f57806315639c1b1461054f57806318160ddd1461056557806320800a001461057a57600080fd5b8063095ea7b3116103cd578063095ea7b3146104ab5780630acc1f1c146104db578063111813df146104fb57806313114a9d1461051057600080fd5b806303fd2a451461040a57806306fdde03146104475780630758d92414610469578063092316021461048957600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5060295461042a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561045357600080fd5b5061045c610c4d565b60405161043e9190613e48565b34801561047557600080fd5b5060265461042a906001600160a01b031681565b34801561049557600080fd5b506104a96104a4366004613e9d565b610cdf565b005b3480156104b757600080fd5b506104cb6104c6366004613ecb565b610d66565b604051901515815260200161043e565b3480156104e757600080fd5b506104a96104f6366004613e9d565b610d7d565b34801561050757600080fd5b506104a9610dac565b34801561051c57600080fd5b506025545b60405190815260200161043e565b34801561053b57600080fd5b506104a961054a366004613f0c565b610e89565b34801561055b57600080fd5b50610521600f5481565b34801561057157600080fd5b50602354610521565b34801561058657600080fd5b506104a961117d565b34801561059b57600080fd5b5061052160115481565b3480156105b157600080fd5b506104cb6105c0366004613f41565b6111e4565b3480156105d157600080fd5b506104a96105e0366004613f82565b611237565b3480156105f157600080fd5b50610521610600366004613e9d565b61131f565b34801561061157600080fd5b5060215460405160ff909116815260200161043e565b34801561063357600080fd5b50610521601e5481565b34801561064957600080fd5b506104cb610658366004613ecb565b6113a3565b34801561066957600080fd5b506104a9610678366004613f82565b6113da565b34801561068957600080fd5b5060275461042a906001600160a01b031681565b3480156106a957600080fd5b5061052160185481565b3480156106bf57600080fd5b50602d546104cb90600160a81b900460ff1681565b3480156106e057600080fd5b50610521601f5481565b3480156106f657600080fd5b506104a9610705366004613fa4565b6114cd565b34801561071657600080fd5b506034546104cb9062010000900460ff1681565b34801561073657600080fd5b506104cb610745366004613fa4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561076f57600080fd5b506104cb61077e366004613fa4565b61166f565b34801561078f57600080fd5b506104a961079e366004613fc1565b61167d565b3480156107af57600080fd5b50602a5461042a906001600160a01b031681565b3480156107cf57600080fd5b50610521602f5481565b3480156107e557600080fd5b506104a96107f4366004613f0c565b611703565b34801561080557600080fd5b506104a9610814366004614034565b611758565b34801561082557600080fd5b506104a9610834366004613f82565b6117e9565b34801561084557600080fd5b5061052160105481565b34801561085b57600080fd5b506104a961086a366004613fc1565b61181e565b34801561087b57600080fd5b50610521601a5481565b34801561089157600080fd5b506104a96108a0366004614034565b6118a4565b3480156108b157600080fd5b506105216108c0366004613fa4565b611935565b3480156108d157600080fd5b506104a9611994565b3480156108e657600080fd5b506104a96108f5366004613f0c565b611a13565b34801561090657600080fd5b5061052160165481565b34801561091c57600080fd5b506104cb61092b366004613fa4565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095557600080fd5b506000546001600160a01b031661042a565b34801561097357600080fd5b506104cb610982366004613fa4565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109ac57600080fd5b506104a96109bb3660046140f8565b611af6565b3480156109cc57600080fd5b5061045c611b5f565b3480156109e157600080fd5b506104cb6109f0366004613ecb565b611b6e565b348015610a0157600080fd5b506104cb610a10366004613ecb565b611ba5565b348015610a2157600080fd5b506104a9610a30366004614143565b611bb2565b348015610a4157600080fd5b5061052160155481565b348015610a5757600080fd5b506104a9610a66366004614186565b611c18565b348015610a7757600080fd5b5061052160145481565b348015610a8d57600080fd5b5061052160175481565b348015610aa357600080fd5b5061052160125481565b348015610ab957600080fd5b5060285461042a906001600160a01b031681565b348015610ad957600080fd5b5061052160135481565b348015610aef57600080fd5b50610521610afe3660046141a1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b3557600080fd5b506034546104cb90640100000000900460ff1681565b348015610b5757600080fd5b506104a9610b66366004613f0c565b611c9a565b348015610b7757600080fd5b5061052160385481565b348015610b8d57600080fd5b506104a9610b9c366004613fc1565b611cef565b348015610bad57600080fd5b5061052160195481565b348015610bc357600080fd5b506104a9610bd2366004613fa4565b611d75565b348015610be357600080fd5b506104a9610bf2366004613f0c565b6120ff565b348015610c0357600080fd5b5061052160315481565b348015610c1957600080fd5b506104a9610c2836600461424a565b612154565b348015610c3957600080fd5b506104a9610c4836600461430a565b612748565b6060600d8054610c5c9061433c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c889061433c565b8015610cd55780601f10610caa57610100808354040283529160200191610cd5565b820191906000526020600020905b815481529060010190602001808311610cb857829003601f168201915b5050505050905090565b6000546001600160a01b03163314610d125760405162461bcd60e51b8152600401610d0990614377565b60405180910390fd5b6001811015610d525760405162461bcd60e51b815260206004820152600c60248201526b4d696e696d756d206973203160a01b6044820152606401610d09565b610d6081633b9aca006143c2565b603a5550565b6000610d733384846127b1565b5060015b92915050565b6000546001600160a01b03163314610da75760405162461bcd60e51b8152600401610d0990614377565b603d55565b6000546001600160a01b03163314610dd65760405162461bcd60e51b8152600401610d0990614377565b60345460ff1615610e295760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d09565b610e34306001610e89565b602754610e4b906001600160a01b03166001610e89565b600a6037541015610e6957610e6143600a6143e1565b603555610e7a565b603754610e7690436143e1565b6035555b6034805460ff19166001179055565b6000546001600160a01b03163314610eb35760405162461bcd60e51b8152600401610d0990614377565b60018115151415610fe8576001600160a01b03821660009081526007602052604090205460ff1615610f275760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d09565b6001600160a01b03821660009081526001602052604090205415610f81576001600160a01b038216600090815260016020526040902054610f679061131f565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611179576001600160a01b03821660009081526007602052604090205460ff166110555760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d09565b60005b60085481101561117757826001600160a01b03166008828154811061107f5761107f6143f9565b6000918252602090912001546001600160a01b0316141561116557600880546110aa9060019061440f565b815481106110ba576110ba6143f9565b600091825260209091200154600880546001600160a01b0390921691839081106110e6576110e66143f9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600880548061113e5761113e614426565b600082815260209020810160001990810180546001600160a01b0319169055019055611177565b8061116f8161443c565b915050611058565b505b5050565b6000546001600160a01b031633146111a75760405162461bcd60e51b8152600401610d0990614377565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156111e1573d6000803e3d6000fd5b50565b60006111f18484846128d5565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461122d91869161122890869061440f565b6127b1565b5060019392505050565b6000546001600160a01b031633146112615760405162461bcd60e51b8152600401610d0990614377565b6000818360235461127291906143c2565b61127c919061446d565b90506103e860235461128e919061446d565b8110156112f85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610d09565b6030819055600c54829061130d9085906143c2565b611317919061446d565b603155505050565b60006024548211156113865760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d09565b6000611390612e7b565b905061139c818461446d565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d739185906112289086906143e1565b6000546001600160a01b031633146114045760405162461bcd60e51b8152600401610d0990614377565b6000818360235461141591906143c2565b61141f919061446d565b9050612710602354611431919061446d565b8110156114a65760405162461bcd60e51b815260206004820152603860248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e303125206f6620746f74616c20737570706c792e00000000000000006064820152608401610d09565b602e819055600c5482906114bb9085906143c2565b6114c5919061446d565b602f55505050565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610d0990614377565b6001600160a01b03811661151d5760405162461bcd60e51b8152600401610d0990614481565b6029546001600160a01b038281169116141561154b5760405162461bcd60e51b8152600401610d0990614481565b60008054611564916001600160a01b0390911690611703565b61156f816001611703565b61157a816001610e89565b600054602b546001600160a01b03908116911614156115af57602b80546001600160a01b0319166001600160a01b0383161790555b6000546115c4906001600160a01b0316611935565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916115fd9116611935565b111561162457600054611622906001600160a01b03168261161d82611935565b6128d5565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d7782600019610d66565b6000546001600160a01b031633146116a75760405162461bcd60e51b8152600401610d0990614377565b601b5483111580156116bb5750601c548211155b80156116c95750601d548111155b6116d257600080fd5b611324816116e084866143e1565b6116ea91906143e1565b11156116f557600080fd5b601892909255601955601a55565b6000546001600160a01b0316331461172d5760405162461bcd60e51b8152600401610d0990614377565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117825760405162461bcd60e51b8152600401610d0990614377565b60005b82518110156111775781600a60008584815181106117a5576117a56143f9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117e18161443c565b915050611785565b6000546001600160a01b031633146118135760405162461bcd60e51b8152600401610d0990614377565b601e91909155601f55565b6000546001600160a01b031633146118485760405162461bcd60e51b8152600401610d0990614377565b601b54831115801561185c5750601c548211155b801561186a5750601d548111155b61187357600080fd5b6113248161188184866143e1565b61188b91906143e1565b111561189657600080fd5b601292909255601355601455565b6000546001600160a01b031633146118ce5760405162461bcd60e51b8152600401610d0990614377565b60005b82518110156111775781600960008584815181106118f1576118f16143f9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061192d8161443c565b9150506118d1565b6001600160a01b03811660009081526007602052604081205460ff161561197257506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d779061131f565b6000546001600160a01b031633146119be5760405162461bcd60e51b8152600401610d0990614377565b600080546119d7916001600160a01b0390911690611703565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611a3d5760405162461bcd60e51b8152600401610d0990614377565b80611a6457506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611acb5762093a8060045442611a7e919061440f565b11611acb5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610d09565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b03163314611b205760405162461bcd60e51b8152600401610d0990614377565b602b80546001600160a01b039485166001600160a01b031991821617909155602d805492851692821692909217909155602c8054929093169116179055565b6060600e8054610c5c9061433c565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d7391859061122890869061440f565b600061122d3384846128d5565b6000546001600160a01b03163314611bdc5760405162461bcd60e51b8152600401610d0990614377565b603480549315156101000261ff0019909416939093179092556039805491151560ff19928316179055603b805492151592909116919091179055565b6000546001600160a01b03163314611c425760405162461bcd60e51b8152600401610d0990614377565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c8f90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611cc45760405162461bcd60e51b8152600401610d0990614377565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d195760405162461bcd60e51b8152600401610d0990614377565b601b548311158015611d2d5750601c548211155b8015611d3b5750601d548111155b611d4457600080fd5b61132481611d5284866143e1565b611d5c91906143e1565b1115611d6757600080fd5b601592909255601655601755565b6000546001600160a01b03163314611d9f5760405162461bcd60e51b8152600401610d0990614377565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ddf57600080fd5b505afa158015611df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1791906144de565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9791906144de565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611edd57600080fd5b505afa158015611ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1591906144de565b90506001600160a01b0381166120bb57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f5e57600080fd5b505afa158015611f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9691906144de565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611fde57600080fd5b505afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201691906144de565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561205e57600080fd5b505af1158015612072573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209691906144de565b602780546001600160a01b0319166001600160a01b03929092169190911790556120d7565b602780546001600160a01b0319166001600160a01b0383161790555b602680546001600160a01b0319166001600160a01b03841617905561117730846000196127b1565b6000546001600160a01b031633146121295760405162461bcd60e51b8152600401610d0990614377565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461217e5760405162461bcd60e51b8152600401610d0990614377565b603e5460ff161561218e57600080fd5b60375415801561219e5750603a54155b80156121b3575060345462010000900460ff16155b6121bc57600080fd5b600181101561220d5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f7567682067617320666f72205472616e73616374696f6e00006044820152606401610d09565b602b80546001600160a01b03808a166001600160a01b031992831617909255602c8054888416908316179055602d805492891692909116919091179055835161225d90600d906020870190613daf565b50825161227190600e906020860190613daf565b506402540be400600c556021805460ff1916600990811790915560225560225461229c90600a6145df565b600c546122a991906143c2565b60238190556122ba906000196145eb565b6122c69060001961440f565b602455602854602680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561232057600080fd5b505afa158015612334573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235891906144de565b6001600160a01b031663c9c65396602660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b457600080fd5b505afa1580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ec91906144de565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561243357600080fd5b505af1158015612447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246b91906144de565b602780546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602654909416835292905220600019905560ff82166037556124d681633b9aca006143c2565b603a55602354620186a0906124ed906103e86143c2565b6124f7919061446d565b602e55600c54620186a09061250e906103e86143c2565b612518919061446d565b602f556023546103e89061252d9060146143c2565b612537919061446d565b603055600c546103e89061254c9060146143c2565b612556919061446d565b6031556023546127109061256b9060056143c2565b612575919061446d565b6032556023546103e89061258a9060056143c2565b612594919061446d565b6033556028546125af906001600160a01b0316600019610d66565b50603e805460ff191660019081179091556024549060006125d86000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556126046000546001600160a01b031690565b602a546023546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36026546126679030906001600160a01b03166000196127b1565b61269261267c6000546001600160a01b031690565b3061161d6108c06000546001600160a01b031690565b506026546001600160a01b031663f305d71947306126af81611935565b6000806126c46000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016126e6969594939291906145ff565b6060604051808303818588803b1580156126ff57600080fd5b505af1158015612713573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612738919061463a565b505043603d555050505050505050565b6000546001600160a01b031633146127725760405162461bcd60e51b8152600401610d0990614377565b828460235461278191906143c2565b61278b919061446d565b603255602354819061279e9084906143c2565b6127a8919061446d565b60335550505050565b6001600160a01b0383166128135760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d09565b6001600160a01b0382166128745760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d09565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661293b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d09565b6001600160a01b03831661299d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d09565b600082116129ff5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d09565b6001600160a01b0383166000908152600a602052604090205460ff16158015612a4157506001600160a01b0384166000908152600a602052604090205460ff16155b612a8d5760405162461bcd60e51b815260206004820152601c60248201527f426f7473204172656e277420616c6c6f77656420746f207472616465000000006044820152606401610d09565b60395460ff1615612aea57603a543a1115612aea5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d09565b612af48484612e9e565b15612d145760345460ff16612b4b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d09565b603b5460ff1615612bfd576001600160a01b03841660009081526003602052604090205460ff1615612bbc576001600160a01b0383166000908152603c6020526040902054431415612b9c57600080fd5b6001600160a01b0383166000908152603c60205260409020439055612bfd565b6001600160a01b0384166000908152603c6020526040902054431415612be157600080fd5b6001600160a01b0384166000908152603c602052604090204390555b602e54821115612c605760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d09565b6028546001600160a01b03848116911614801590612c9757506001600160a01b03831660009081526003602052604090205460ff16155b15612d145760305482612ca985611935565b612cb391906143e1565b1115612d145760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610d09565b6034546301000000900460ff1615612da357603d544311158015612d5157506001600160a01b03831660009081526003602052604090205460ff16155b8015612d7a57506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15612da3576001600160a01b0383166000908152600a60205260409020805460ff191660011790555b6001600160a01b03841660009081526006602052604090205460019060ff1680612de557506001600160a01b03841660009081526006602052604090205460ff165b15612dee575060005b6001600160a01b03841660009081526003602052604090205460ff1615612e6657602d54600160a01b900460ff16158015612e325750602d54600160a81b900460ff165b15612e66576000612e4230611935565b90506032548110612e64576033548110612e5b57506033545b612e6481612f5e565b505b612e7285858584613354565b95945050505050565b6000806000612e8861382d565b9092509050612e97818361446d565b9250505090565b600080546001600160a01b03848116911614801590612ecb57506000546001600160a01b03838116911614155b8015612ef057506001600160a01b0382166000908152600b602052604090205460ff16155b8015612f1557506001600160a01b0383166000908152600b602052604090205460ff16155b8015612f2f57506029546001600160a01b03838116911614155b8015612f4357506001600160a01b03821615155b801561139c57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601f54601e54612f8191906143e1565b612f8a57613344565b60006002601f54601e54612f9e91906143e1565b601e54612fab90856143c2565b612fb5919061446d565b612fbf919061446d565b90506000612fcd828461440f565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613007576130076143f9565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561305b57600080fd5b505afa15801561306f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309391906144de565b816001815181106130a6576130a66143f9565b6001600160a01b03928316602091820292909201015260265460405163791ac94760e01b815291169063791ac947906130ec908590600090869030904290600401614668565b600060405180830381600087803b15801561310657600080fd5b505af115801561311a573d6000803e3d6000fd5b5050505060006002601f54601e5461313291906143e1565b601e5461313f90476143c2565b613149919061446d565b613153919061446d565b905083156132325760265460295460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261319b9230928b926000928392169042906004016145ff565b6060604051808303818588803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131ed919061463a565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061323e858761440f565b111561333f5747600060056132548360026143c2565b61325e919061446d565b90506000600561326f8460026143c2565b613279919061446d565b9050600061328860058561446d565b602b546040519192506001600160a01b03169084156108fc029085906000818181858888f193505050501580156132c3573d6000803e3d6000fd5b50602d546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156132fe573d6000803e3d6000fd5b50602c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613339573d6000803e3d6000fd5b50505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff1615613540576001600160a01b03851660009081526009602052604090205460ff16806133a657506001600160a01b03841660009081526009602052604090205460ff165b156133df5760405162461bcd60e51b81526020600482015260096024820152682932b532b1ba32b21760b91b6044820152606401610d09565b60345462010000900460ff16613477576133f985856139b0565b60345462010000900460ff1615801561341757506134178585612e9e565b156134725760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610d09565b613540565b60006035541180156134a157506001600160a01b03851660009081526003602052604090205460ff165b80156134b257506134b28585612e9e565b15613540576037546035546134c7904361440f565b1015613540576001600160a01b0384166000908152600960205260408120805460ff1916600117905560388054916134fe8361443c565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b600061354e86868686613acd565b60808101516001600160a01b0388166000908152600160205260409020549192506135789161440f565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546135af91906143e1565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561360357506001600160a01b03851660009081526007602052604090205460ff16155b1561364a576001600160a01b03861660009081526002602052604090205461362c90859061440f565b6001600160a01b03871660009081526002602052604090205561378a565b6001600160a01b03861660009081526007602052604090205460ff1615801561368b57506001600160a01b03851660009081526007602052604090205460ff165b156136d35780516001600160a01b0386166000908152600260205260409020546136b591906143e1565b6001600160a01b03861660009081526002602052604090205561378a565b6001600160a01b03861660009081526007602052604090205460ff16801561371357506001600160a01b03851660009081526007602052604090205460ff165b1561378a576001600160a01b03861660009081526002602052604090205461373c90859061440f565b6001600160a01b038088166000908152600260205260408082209390935583519188168152919091205461377091906143e1565b6001600160a01b0386166000908152600260205260409020555b6040810151156137a2576137a2868260400151613cbd565b60008160a0015111806137b9575060008160200151115b156137d0576137d08160a001518260200151613d89565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161381991815260200190565b60405180910390a350600195945050505050565b6024546023546000918291825b60085481101561397f5782600160006008848154811061385c5761385c6143f9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806138c757508160026000600884815481106138a0576138a06143f9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138dd57602454602354945094505050509091565b60016000600883815481106138f4576138f46143f9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613923908461440f565b9250600260006008838154811061393c5761393c6143f9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461396b908361440f565b9150806139778161443c565b91505061383a565b50602354602454613990919061446d565b8210156139a7576024546023549350935050509091565b90939092509050565b60345462010000900460ff1615613a155760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d09565b613a1f8282612e9e565b158015613a3957506027546001600160a01b038281169116145b15611179576001600160a01b0382166000908152600b602052604090819020805460ff191660019081179091556034805462ff000019166201000017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613ac191901515815260200190565b60405180910390a15050565b613b066040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613b3f6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613b49612e7b565b9050613b5581866143c2565b60808301528315613c67576001600160a01b03861660009081526003602052604090205460ff1615613b9857601554600f55601654601055601754601155613be3565b6001600160a01b03871660009081526003602052604090205460ff1615613bd057601254600f55601354601055601454601155613be3565b601854600f55601954601055601a546011555b602054600f54613bf390876143c2565b613bfd919061446d565b60208084019190915254601154601054613c1791906143e1565b613c2190876143c2565b613c2b919061446d565b604083018190526020830151613c4191906143e1565b613c4b908661440f565b82526020820151613c5d9082906143c2565b60a0830152613c80565b6000602083018190526040830181905285835260a08301525b808260400151613c9091906143c2565b8260a00151613c9f91906143e1565b8260800151613cae919061440f565b60608301525095945050505050565b6000613cc7612e7b565b90506000613cd582846143c2565b30600090815260016020526040902054909150613cf39082906143e1565b3060009081526001602090815260408083209390935560079052205460ff1615613d435730600090815260026020526040902054613d329084906143e1565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b81602454613d97919061440f565b602455602554613da89082906143e1565b6025555050565b828054613dbb9061433c565b90600052602060002090601f016020900481019282613ddd5760008555613e23565b82601f10613df657805160ff1916838001178555613e23565b82800160010185558215613e23579182015b82811115613e23578251825591602001919060010190613e08565b50613e2f929150613e33565b5090565b5b80821115613e2f5760008155600101613e34565b600060208083528351808285015260005b81811015613e7557858101830151858201604001528201613e59565b81811115613e87576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613eaf57600080fd5b5035919050565b6001600160a01b03811681146111e157600080fd5b60008060408385031215613ede57600080fd5b8235613ee981613eb6565b946020939093013593505050565b80358015158114613f0757600080fd5b919050565b60008060408385031215613f1f57600080fd5b8235613f2a81613eb6565b9150613f3860208401613ef7565b90509250929050565b600080600060608486031215613f5657600080fd5b8335613f6181613eb6565b92506020840135613f7181613eb6565b929592945050506040919091013590565b60008060408385031215613f9557600080fd5b50508035926020909101359150565b600060208284031215613fb657600080fd5b813561139c81613eb6565b600080600060608486031215613fd657600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561402c5761402c613fed565b604052919050565b6000806040838503121561404757600080fd5b823567ffffffffffffffff8082111561405f57600080fd5b818501915085601f83011261407357600080fd5b813560208282111561408757614087613fed565b8160051b9250614098818401614003565b82815292840181019281810190898511156140b257600080fd5b948201945b848610156140dc57853593506140cc84613eb6565b83825294820194908201906140b7565b96506140eb9050878201613ef7565b9450505050509250929050565b60008060006060848603121561410d57600080fd5b833561411881613eb6565b9250602084013561412881613eb6565b9150604084013561413881613eb6565b809150509250925092565b60008060006060848603121561415857600080fd5b61416184613ef7565b925061416f60208501613ef7565b915061417d60408501613ef7565b90509250925092565b60006020828403121561419857600080fd5b61139c82613ef7565b600080604083850312156141b457600080fd5b82356141bf81613eb6565b915060208301356141cf81613eb6565b809150509250929050565b600082601f8301126141eb57600080fd5b813567ffffffffffffffff81111561420557614205613fed565b614218601f8201601f1916602001614003565b81815284602083860101111561422d57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060e0888a03121561426557600080fd5b873561427081613eb6565b9650602088013561428081613eb6565b9550604088013561429081613eb6565b9450606088013567ffffffffffffffff808211156142ad57600080fd5b6142b98b838c016141da565b955060808a01359150808211156142cf57600080fd5b506142dc8a828b016141da565b93505060a088013560ff811681146142f357600080fd5b8092505060c0880135905092959891949750929550565b6000806000806080858703121561432057600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061435057607f821691505b6020821081141561437157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156143dc576143dc6143ac565b500290565b600082198211156143f4576143f46143ac565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015614421576144216143ac565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415614450576144506143ac565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261447c5761447c614457565b500490565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b6000602082840312156144f057600080fd5b815161139c81613eb6565b600181815b8085111561453657816000190482111561451c5761451c6143ac565b8085161561452957918102915b93841c9390800290614500565b509250929050565b60008261454d57506001610d77565b8161455a57506000610d77565b8160018114614570576002811461457a57614596565b6001915050610d77565b60ff84111561458b5761458b6143ac565b50506001821b610d77565b5060208310610133831016604e8410600b84101617156145b9575081810a610d77565b6145c383836144fb565b80600019048211156145d7576145d76143ac565b029392505050565b600061139c838361453e565b6000826145fa576145fa614457565b500690565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561464f57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146b85784516001600160a01b031683529383019391830191600101614693565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220307bcd16b84b8ae1028f1784194fa03ba630d84e8305ceef1719bb709310add264736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c80636bc87c3a11610213578063bbcea6bf11610123578063e769cda0116100ab578063eafb5a3c1161007a578063eafb5a3c14610bb7578063eec2744e14610bd7578063f6540ec714610bf7578063fa9f9e1914610c0d578063fb78680d14610c2d57600080fd5b8063e769cda014610b4b578063e79d416014610b6b578063e7c281d614610b81578063ea08d30b14610ba157600080fd5b8063d038b07e116100f2578063d038b07e14610a97578063d9e6646014610aad578063dc44b6a014610acd578063dd62ed3e14610ae3578063dff889d614610b2957600080fd5b8063bbcea6bf14610a35578063c49b9a8014610a4b578063c5d2418914610a6b578063c860795214610a8157600080fd5b806388f82020116101a657806394417b781161017557806394417b78146109a057806395d89b41146109c0578063a457c2d7146109d5578063a9059cbb146109f5578063b6f8f8dc14610a1557600080fd5b806388f8202014610910578063893d20e81461094957806389fd9bc1146109675780638da5cb5b1461094957600080fd5b806370a08231116101e257806370a08231146108a5578063715018a6146108c557806380c581d1146108da57806388790a68146108fa57600080fd5b80636bc87c3a146108395780636c6d9fa11461084f5780636cbdd5e31461086f5780636ed18aae1461088557600080fd5b8063384f6b511161030e57806350a8e016116102a157806358fa63ca1161027057806358fa63ca146107a357806364038409146107c35780636612e66f146107d9578063662fb4b2146107f95780636639dd931461081957600080fd5b806350a8e0161461070a5780635342acb41461072a578063571ac8b014610763578063575f18e51461078357600080fd5b806345e8c85c116102dd57806345e8c85c1461069d5780634a74bb02146106b35780634ef3cce5146106d45780634fb2e45d146106ea57600080fd5b8063384f6b5114610627578063395093511461063d5780633f3cf56c1461065d578063452ed4f11461067d57600080fd5b806313e461921161039157806322976e0d1161036057806322976e0d1461058f57806323b872dd146105a557806326003957146105c55780632d838119146105e5578063313ce5671461060557600080fd5b806313e461921461052f57806315639c1b1461054f57806318160ddd1461056557806320800a001461057a57600080fd5b8063095ea7b3116103cd578063095ea7b3146104ab5780630acc1f1c146104db578063111813df146104fb57806313114a9d1461051057600080fd5b806303fd2a451461040a57806306fdde03146104475780630758d92414610469578063092316021461048957600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5060295461042a906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561045357600080fd5b5061045c610c4d565b60405161043e9190613e48565b34801561047557600080fd5b5060265461042a906001600160a01b031681565b34801561049557600080fd5b506104a96104a4366004613e9d565b610cdf565b005b3480156104b757600080fd5b506104cb6104c6366004613ecb565b610d66565b604051901515815260200161043e565b3480156104e757600080fd5b506104a96104f6366004613e9d565b610d7d565b34801561050757600080fd5b506104a9610dac565b34801561051c57600080fd5b506025545b60405190815260200161043e565b34801561053b57600080fd5b506104a961054a366004613f0c565b610e89565b34801561055b57600080fd5b50610521600f5481565b34801561057157600080fd5b50602354610521565b34801561058657600080fd5b506104a961117d565b34801561059b57600080fd5b5061052160115481565b3480156105b157600080fd5b506104cb6105c0366004613f41565b6111e4565b3480156105d157600080fd5b506104a96105e0366004613f82565b611237565b3480156105f157600080fd5b50610521610600366004613e9d565b61131f565b34801561061157600080fd5b5060215460405160ff909116815260200161043e565b34801561063357600080fd5b50610521601e5481565b34801561064957600080fd5b506104cb610658366004613ecb565b6113a3565b34801561066957600080fd5b506104a9610678366004613f82565b6113da565b34801561068957600080fd5b5060275461042a906001600160a01b031681565b3480156106a957600080fd5b5061052160185481565b3480156106bf57600080fd5b50602d546104cb90600160a81b900460ff1681565b3480156106e057600080fd5b50610521601f5481565b3480156106f657600080fd5b506104a9610705366004613fa4565b6114cd565b34801561071657600080fd5b506034546104cb9062010000900460ff1681565b34801561073657600080fd5b506104cb610745366004613fa4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561076f57600080fd5b506104cb61077e366004613fa4565b61166f565b34801561078f57600080fd5b506104a961079e366004613fc1565b61167d565b3480156107af57600080fd5b50602a5461042a906001600160a01b031681565b3480156107cf57600080fd5b50610521602f5481565b3480156107e557600080fd5b506104a96107f4366004613f0c565b611703565b34801561080557600080fd5b506104a9610814366004614034565b611758565b34801561082557600080fd5b506104a9610834366004613f82565b6117e9565b34801561084557600080fd5b5061052160105481565b34801561085b57600080fd5b506104a961086a366004613fc1565b61181e565b34801561087b57600080fd5b50610521601a5481565b34801561089157600080fd5b506104a96108a0366004614034565b6118a4565b3480156108b157600080fd5b506105216108c0366004613fa4565b611935565b3480156108d157600080fd5b506104a9611994565b3480156108e657600080fd5b506104a96108f5366004613f0c565b611a13565b34801561090657600080fd5b5061052160165481565b34801561091c57600080fd5b506104cb61092b366004613fa4565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095557600080fd5b506000546001600160a01b031661042a565b34801561097357600080fd5b506104cb610982366004613fa4565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109ac57600080fd5b506104a96109bb3660046140f8565b611af6565b3480156109cc57600080fd5b5061045c611b5f565b3480156109e157600080fd5b506104cb6109f0366004613ecb565b611b6e565b348015610a0157600080fd5b506104cb610a10366004613ecb565b611ba5565b348015610a2157600080fd5b506104a9610a30366004614143565b611bb2565b348015610a4157600080fd5b5061052160155481565b348015610a5757600080fd5b506104a9610a66366004614186565b611c18565b348015610a7757600080fd5b5061052160145481565b348015610a8d57600080fd5b5061052160175481565b348015610aa357600080fd5b5061052160125481565b348015610ab957600080fd5b5060285461042a906001600160a01b031681565b348015610ad957600080fd5b5061052160135481565b348015610aef57600080fd5b50610521610afe3660046141a1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b3557600080fd5b506034546104cb90640100000000900460ff1681565b348015610b5757600080fd5b506104a9610b66366004613f0c565b611c9a565b348015610b7757600080fd5b5061052160385481565b348015610b8d57600080fd5b506104a9610b9c366004613fc1565b611cef565b348015610bad57600080fd5b5061052160195481565b348015610bc357600080fd5b506104a9610bd2366004613fa4565b611d75565b348015610be357600080fd5b506104a9610bf2366004613f0c565b6120ff565b348015610c0357600080fd5b5061052160315481565b348015610c1957600080fd5b506104a9610c2836600461424a565b612154565b348015610c3957600080fd5b506104a9610c4836600461430a565b612748565b6060600d8054610c5c9061433c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c889061433c565b8015610cd55780601f10610caa57610100808354040283529160200191610cd5565b820191906000526020600020905b815481529060010190602001808311610cb857829003601f168201915b5050505050905090565b6000546001600160a01b03163314610d125760405162461bcd60e51b8152600401610d0990614377565b60405180910390fd5b6001811015610d525760405162461bcd60e51b815260206004820152600c60248201526b4d696e696d756d206973203160a01b6044820152606401610d09565b610d6081633b9aca006143c2565b603a5550565b6000610d733384846127b1565b5060015b92915050565b6000546001600160a01b03163314610da75760405162461bcd60e51b8152600401610d0990614377565b603d55565b6000546001600160a01b03163314610dd65760405162461bcd60e51b8152600401610d0990614377565b60345460ff1615610e295760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610d09565b610e34306001610e89565b602754610e4b906001600160a01b03166001610e89565b600a6037541015610e6957610e6143600a6143e1565b603555610e7a565b603754610e7690436143e1565b6035555b6034805460ff19166001179055565b6000546001600160a01b03163314610eb35760405162461bcd60e51b8152600401610d0990614377565b60018115151415610fe8576001600160a01b03821660009081526007602052604090205460ff1615610f275760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610d09565b6001600160a01b03821660009081526001602052604090205415610f81576001600160a01b038216600090815260016020526040902054610f679061131f565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611179576001600160a01b03821660009081526007602052604090205460ff166110555760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610d09565b60005b60085481101561117757826001600160a01b03166008828154811061107f5761107f6143f9565b6000918252602090912001546001600160a01b0316141561116557600880546110aa9060019061440f565b815481106110ba576110ba6143f9565b600091825260209091200154600880546001600160a01b0390921691839081106110e6576110e66143f9565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff19169055600880548061113e5761113e614426565b600082815260209020810160001990810180546001600160a01b0319169055019055611177565b8061116f8161443c565b915050611058565b505b5050565b6000546001600160a01b031633146111a75760405162461bcd60e51b8152600401610d0990614377565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156111e1573d6000803e3d6000fd5b50565b60006111f18484846128d5565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461122d91869161122890869061440f565b6127b1565b5060019392505050565b6000546001600160a01b031633146112615760405162461bcd60e51b8152600401610d0990614377565b6000818360235461127291906143c2565b61127c919061446d565b90506103e860235461128e919061446d565b8110156112f85760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610d09565b6030819055600c54829061130d9085906143c2565b611317919061446d565b603155505050565b60006024548211156113865760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d09565b6000611390612e7b565b905061139c818461446d565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d739185906112289086906143e1565b6000546001600160a01b031633146114045760405162461bcd60e51b8152600401610d0990614377565b6000818360235461141591906143c2565b61141f919061446d565b9050612710602354611431919061446d565b8110156114a65760405162461bcd60e51b815260206004820152603860248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e303125206f6620746f74616c20737570706c792e00000000000000006064820152608401610d09565b602e819055600c5482906114bb9085906143c2565b6114c5919061446d565b602f55505050565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610d0990614377565b6001600160a01b03811661151d5760405162461bcd60e51b8152600401610d0990614481565b6029546001600160a01b038281169116141561154b5760405162461bcd60e51b8152600401610d0990614481565b60008054611564916001600160a01b0390911690611703565b61156f816001611703565b61157a816001610e89565b600054602b546001600160a01b03908116911614156115af57602b80546001600160a01b0319166001600160a01b0383161790555b6000546115c4906001600160a01b0316611935565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916115fd9116611935565b111561162457600054611622906001600160a01b03168261161d82611935565b6128d5565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610d7782600019610d66565b6000546001600160a01b031633146116a75760405162461bcd60e51b8152600401610d0990614377565b601b5483111580156116bb5750601c548211155b80156116c95750601d548111155b6116d257600080fd5b611324816116e084866143e1565b6116ea91906143e1565b11156116f557600080fd5b601892909255601955601a55565b6000546001600160a01b0316331461172d5760405162461bcd60e51b8152600401610d0990614377565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146117825760405162461bcd60e51b8152600401610d0990614377565b60005b82518110156111775781600a60008584815181106117a5576117a56143f9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806117e18161443c565b915050611785565b6000546001600160a01b031633146118135760405162461bcd60e51b8152600401610d0990614377565b601e91909155601f55565b6000546001600160a01b031633146118485760405162461bcd60e51b8152600401610d0990614377565b601b54831115801561185c5750601c548211155b801561186a5750601d548111155b61187357600080fd5b6113248161188184866143e1565b61188b91906143e1565b111561189657600080fd5b601292909255601355601455565b6000546001600160a01b031633146118ce5760405162461bcd60e51b8152600401610d0990614377565b60005b82518110156111775781600960008584815181106118f1576118f16143f9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061192d8161443c565b9150506118d1565b6001600160a01b03811660009081526007602052604081205460ff161561197257506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d779061131f565b6000546001600160a01b031633146119be5760405162461bcd60e51b8152600401610d0990614377565b600080546119d7916001600160a01b0390911690611703565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611a3d5760405162461bcd60e51b8152600401610d0990614377565b80611a6457506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611acb5762093a8060045442611a7e919061440f565b11611acb5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610d09565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b03163314611b205760405162461bcd60e51b8152600401610d0990614377565b602b80546001600160a01b039485166001600160a01b031991821617909155602d805492851692821692909217909155602c8054929093169116179055565b6060600e8054610c5c9061433c565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d7391859061122890869061440f565b600061122d3384846128d5565b6000546001600160a01b03163314611bdc5760405162461bcd60e51b8152600401610d0990614377565b603480549315156101000261ff0019909416939093179092556039805491151560ff19928316179055603b805492151592909116919091179055565b6000546001600160a01b03163314611c425760405162461bcd60e51b8152600401610d0990614377565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c8f90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611cc45760405162461bcd60e51b8152600401610d0990614377565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d195760405162461bcd60e51b8152600401610d0990614377565b601b548311158015611d2d5750601c548211155b8015611d3b5750601d548111155b611d4457600080fd5b61132481611d5284866143e1565b611d5c91906143e1565b1115611d6757600080fd5b601592909255601655601755565b6000546001600160a01b03163314611d9f5760405162461bcd60e51b8152600401610d0990614377565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ddf57600080fd5b505afa158015611df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1791906144de565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5f57600080fd5b505afa158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9791906144de565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b158015611edd57600080fd5b505afa158015611ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1591906144de565b90506001600160a01b0381166120bb57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f5e57600080fd5b505afa158015611f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9691906144de565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611fde57600080fd5b505afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201691906144de565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561205e57600080fd5b505af1158015612072573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209691906144de565b602780546001600160a01b0319166001600160a01b03929092169190911790556120d7565b602780546001600160a01b0319166001600160a01b0383161790555b602680546001600160a01b0319166001600160a01b03841617905561117730846000196127b1565b6000546001600160a01b031633146121295760405162461bcd60e51b8152600401610d0990614377565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461217e5760405162461bcd60e51b8152600401610d0990614377565b603e5460ff161561218e57600080fd5b60375415801561219e5750603a54155b80156121b3575060345462010000900460ff16155b6121bc57600080fd5b600181101561220d5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f7567682067617320666f72205472616e73616374696f6e00006044820152606401610d09565b602b80546001600160a01b03808a166001600160a01b031992831617909255602c8054888416908316179055602d805492891692909116919091179055835161225d90600d906020870190613daf565b50825161227190600e906020860190613daf565b506402540be400600c556021805460ff1916600990811790915560225560225461229c90600a6145df565b600c546122a991906143c2565b60238190556122ba906000196145eb565b6122c69060001961440f565b602455602854602680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561232057600080fd5b505afa158015612334573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235891906144de565b6001600160a01b031663c9c65396602660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b457600080fd5b505afa1580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ec91906144de565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b15801561243357600080fd5b505af1158015612447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246b91906144de565b602780546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602654909416835292905220600019905560ff82166037556124d681633b9aca006143c2565b603a55602354620186a0906124ed906103e86143c2565b6124f7919061446d565b602e55600c54620186a09061250e906103e86143c2565b612518919061446d565b602f556023546103e89061252d9060146143c2565b612537919061446d565b603055600c546103e89061254c9060146143c2565b612556919061446d565b6031556023546127109061256b9060056143c2565b612575919061446d565b6032556023546103e89061258a9060056143c2565b612594919061446d565b6033556028546125af906001600160a01b0316600019610d66565b50603e805460ff191660019081179091556024549060006125d86000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556126046000546001600160a01b031690565b602a546023546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36026546126679030906001600160a01b03166000196127b1565b61269261267c6000546001600160a01b031690565b3061161d6108c06000546001600160a01b031690565b506026546001600160a01b031663f305d71947306126af81611935565b6000806126c46000546001600160a01b031690565b426040518863ffffffff1660e01b81526004016126e6969594939291906145ff565b6060604051808303818588803b1580156126ff57600080fd5b505af1158015612713573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612738919061463a565b505043603d555050505050505050565b6000546001600160a01b031633146127725760405162461bcd60e51b8152600401610d0990614377565b828460235461278191906143c2565b61278b919061446d565b603255602354819061279e9084906143c2565b6127a8919061446d565b60335550505050565b6001600160a01b0383166128135760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d09565b6001600160a01b0382166128745760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d09565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661293b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d09565b6001600160a01b03831661299d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d09565b600082116129ff5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d09565b6001600160a01b0383166000908152600a602052604090205460ff16158015612a4157506001600160a01b0384166000908152600a602052604090205460ff16155b612a8d5760405162461bcd60e51b815260206004820152601c60248201527f426f7473204172656e277420616c6c6f77656420746f207472616465000000006044820152606401610d09565b60395460ff1615612aea57603a543a1115612aea5760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610d09565b612af48484612e9e565b15612d145760345460ff16612b4b5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610d09565b603b5460ff1615612bfd576001600160a01b03841660009081526003602052604090205460ff1615612bbc576001600160a01b0383166000908152603c6020526040902054431415612b9c57600080fd5b6001600160a01b0383166000908152603c60205260409020439055612bfd565b6001600160a01b0384166000908152603c6020526040902054431415612be157600080fd5b6001600160a01b0384166000908152603c602052604090204390555b602e54821115612c605760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d09565b6028546001600160a01b03848116911614801590612c9757506001600160a01b03831660009081526003602052604090205460ff16155b15612d145760305482612ca985611935565b612cb391906143e1565b1115612d145760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610d09565b6034546301000000900460ff1615612da357603d544311158015612d5157506001600160a01b03831660009081526003602052604090205460ff16155b8015612d7a57506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15612da3576001600160a01b0383166000908152600a60205260409020805460ff191660011790555b6001600160a01b03841660009081526006602052604090205460019060ff1680612de557506001600160a01b03841660009081526006602052604090205460ff165b15612dee575060005b6001600160a01b03841660009081526003602052604090205460ff1615612e6657602d54600160a01b900460ff16158015612e325750602d54600160a81b900460ff165b15612e66576000612e4230611935565b90506032548110612e64576033548110612e5b57506033545b612e6481612f5e565b505b612e7285858584613354565b95945050505050565b6000806000612e8861382d565b9092509050612e97818361446d565b9250505090565b600080546001600160a01b03848116911614801590612ecb57506000546001600160a01b03838116911614155b8015612ef057506001600160a01b0382166000908152600b602052604090205460ff16155b8015612f1557506001600160a01b0383166000908152600b602052604090205460ff16155b8015612f2f57506029546001600160a01b03838116911614155b8015612f4357506001600160a01b03821615155b801561139c57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601f54601e54612f8191906143e1565b612f8a57613344565b60006002601f54601e54612f9e91906143e1565b601e54612fab90856143c2565b612fb5919061446d565b612fbf919061446d565b90506000612fcd828461440f565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613007576130076143f9565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561305b57600080fd5b505afa15801561306f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309391906144de565b816001815181106130a6576130a66143f9565b6001600160a01b03928316602091820292909201015260265460405163791ac94760e01b815291169063791ac947906130ec908590600090869030904290600401614668565b600060405180830381600087803b15801561310657600080fd5b505af115801561311a573d6000803e3d6000fd5b5050505060006002601f54601e5461313291906143e1565b601e5461313f90476143c2565b613149919061446d565b613153919061446d565b905083156132325760265460295460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261319b9230928b926000928392169042906004016145ff565b6060604051808303818588803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131ed919061463a565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061323e858761440f565b111561333f5747600060056132548360026143c2565b61325e919061446d565b90506000600561326f8460026143c2565b613279919061446d565b9050600061328860058561446d565b602b546040519192506001600160a01b03169084156108fc029085906000818181858888f193505050501580156132c3573d6000803e3d6000fd5b50602d546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156132fe573d6000803e3d6000fd5b50602c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613339573d6000803e3d6000fd5b50505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff1615613540576001600160a01b03851660009081526009602052604090205460ff16806133a657506001600160a01b03841660009081526009602052604090205460ff165b156133df5760405162461bcd60e51b81526020600482015260096024820152682932b532b1ba32b21760b91b6044820152606401610d09565b60345462010000900460ff16613477576133f985856139b0565b60345462010000900460ff1615801561341757506134178585612e9e565b156134725760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610d09565b613540565b60006035541180156134a157506001600160a01b03851660009081526003602052604090205460ff165b80156134b257506134b28585612e9e565b15613540576037546035546134c7904361440f565b1015613540576001600160a01b0384166000908152600960205260408120805460ff1916600117905560388054916134fe8361443c565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b600061354e86868686613acd565b60808101516001600160a01b0388166000908152600160205260409020549192506135789161440f565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546135af91906143e1565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561360357506001600160a01b03851660009081526007602052604090205460ff16155b1561364a576001600160a01b03861660009081526002602052604090205461362c90859061440f565b6001600160a01b03871660009081526002602052604090205561378a565b6001600160a01b03861660009081526007602052604090205460ff1615801561368b57506001600160a01b03851660009081526007602052604090205460ff165b156136d35780516001600160a01b0386166000908152600260205260409020546136b591906143e1565b6001600160a01b03861660009081526002602052604090205561378a565b6001600160a01b03861660009081526007602052604090205460ff16801561371357506001600160a01b03851660009081526007602052604090205460ff165b1561378a576001600160a01b03861660009081526002602052604090205461373c90859061440f565b6001600160a01b038088166000908152600260205260408082209390935583519188168152919091205461377091906143e1565b6001600160a01b0386166000908152600260205260409020555b6040810151156137a2576137a2868260400151613cbd565b60008160a0015111806137b9575060008160200151115b156137d0576137d08160a001518260200151613d89565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161381991815260200190565b60405180910390a350600195945050505050565b6024546023546000918291825b60085481101561397f5782600160006008848154811061385c5761385c6143f9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806138c757508160026000600884815481106138a0576138a06143f9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156138dd57602454602354945094505050509091565b60016000600883815481106138f4576138f46143f9565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613923908461440f565b9250600260006008838154811061393c5761393c6143f9565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461396b908361440f565b9150806139778161443c565b91505061383a565b50602354602454613990919061446d565b8210156139a7576024546023549350935050509091565b90939092509050565b60345462010000900460ff1615613a155760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610d09565b613a1f8282612e9e565b158015613a3957506027546001600160a01b038281169116145b15611179576001600160a01b0382166000908152600b602052604090819020805460ff191660019081179091556034805462ff000019166201000017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15991613ac191901515815260200190565b60405180910390a15050565b613b066040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613b3f6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613b49612e7b565b9050613b5581866143c2565b60808301528315613c67576001600160a01b03861660009081526003602052604090205460ff1615613b9857601554600f55601654601055601754601155613be3565b6001600160a01b03871660009081526003602052604090205460ff1615613bd057601254600f55601354601055601454601155613be3565b601854600f55601954601055601a546011555b602054600f54613bf390876143c2565b613bfd919061446d565b60208084019190915254601154601054613c1791906143e1565b613c2190876143c2565b613c2b919061446d565b604083018190526020830151613c4191906143e1565b613c4b908661440f565b82526020820151613c5d9082906143c2565b60a0830152613c80565b6000602083018190526040830181905285835260a08301525b808260400151613c9091906143c2565b8260a00151613c9f91906143e1565b8260800151613cae919061440f565b60608301525095945050505050565b6000613cc7612e7b565b90506000613cd582846143c2565b30600090815260016020526040902054909150613cf39082906143e1565b3060009081526001602090815260408083209390935560079052205460ff1615613d435730600090815260026020526040902054613d329084906143e1565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b81602454613d97919061440f565b602455602554613da89082906143e1565b6025555050565b828054613dbb9061433c565b90600052602060002090601f016020900481019282613ddd5760008555613e23565b82601f10613df657805160ff1916838001178555613e23565b82800160010185558215613e23579182015b82811115613e23578251825591602001919060010190613e08565b50613e2f929150613e33565b5090565b5b80821115613e2f5760008155600101613e34565b600060208083528351808285015260005b81811015613e7557858101830151858201604001528201613e59565b81811115613e87576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613eaf57600080fd5b5035919050565b6001600160a01b03811681146111e157600080fd5b60008060408385031215613ede57600080fd5b8235613ee981613eb6565b946020939093013593505050565b80358015158114613f0757600080fd5b919050565b60008060408385031215613f1f57600080fd5b8235613f2a81613eb6565b9150613f3860208401613ef7565b90509250929050565b600080600060608486031215613f5657600080fd5b8335613f6181613eb6565b92506020840135613f7181613eb6565b929592945050506040919091013590565b60008060408385031215613f9557600080fd5b50508035926020909101359150565b600060208284031215613fb657600080fd5b813561139c81613eb6565b600080600060608486031215613fd657600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561402c5761402c613fed565b604052919050565b6000806040838503121561404757600080fd5b823567ffffffffffffffff8082111561405f57600080fd5b818501915085601f83011261407357600080fd5b813560208282111561408757614087613fed565b8160051b9250614098818401614003565b82815292840181019281810190898511156140b257600080fd5b948201945b848610156140dc57853593506140cc84613eb6565b83825294820194908201906140b7565b96506140eb9050878201613ef7565b9450505050509250929050565b60008060006060848603121561410d57600080fd5b833561411881613eb6565b9250602084013561412881613eb6565b9150604084013561413881613eb6565b809150509250925092565b60008060006060848603121561415857600080fd5b61416184613ef7565b925061416f60208501613ef7565b915061417d60408501613ef7565b90509250925092565b60006020828403121561419857600080fd5b61139c82613ef7565b600080604083850312156141b457600080fd5b82356141bf81613eb6565b915060208301356141cf81613eb6565b809150509250929050565b600082601f8301126141eb57600080fd5b813567ffffffffffffffff81111561420557614205613fed565b614218601f8201601f1916602001614003565b81815284602083860101111561422d57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060e0888a03121561426557600080fd5b873561427081613eb6565b9650602088013561428081613eb6565b9550604088013561429081613eb6565b9450606088013567ffffffffffffffff808211156142ad57600080fd5b6142b98b838c016141da565b955060808a01359150808211156142cf57600080fd5b506142dc8a828b016141da565b93505060a088013560ff811681146142f357600080fd5b8092505060c0880135905092959891949750929550565b6000806000806080858703121561432057600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061435057607f821691505b6020821081141561437157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156143dc576143dc6143ac565b500290565b600082198211156143f4576143f46143ac565b500190565b634e487b7160e01b600052603260045260246000fd5b600082821015614421576144216143ac565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415614450576144506143ac565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261447c5761447c614457565b500490565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b6000602082840312156144f057600080fd5b815161139c81613eb6565b600181815b8085111561453657816000190482111561451c5761451c6143ac565b8085161561452957918102915b93841c9390800290614500565b509250929050565b60008261454d57506001610d77565b8161455a57506000610d77565b8160018114614570576002811461457a57614596565b6001915050610d77565b60ff84111561458b5761458b6143ac565b50506001821b610d77565b5060208310610133831016604e8410600b84101617156145b9575081810a610d77565b6145c383836144fb565b80600019048211156145d7576145d76143ac565b029392505050565b600061139c838361453e565b6000826145fa576145fa614457565b500690565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561464f57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156146b85784516001600160a01b031683529383019391830191600101614693565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220307bcd16b84b8ae1028f1784194fa03ba630d84e8305ceef1719bb709310add264736f6c63430008090033

Deployed Bytecode Sourcemap

8203:28339:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10203:64;;;;;;;;;;-1:-1:-1;10203:64:0;;;;-1:-1:-1;;;;;10203:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;10203:64:0;;;;;;;;17447:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10074:35::-;;;;;;;;;;-1:-1:-1;10074:35:0;;;;-1:-1:-1;;;;;10074:35:0;;;20879:149;;;;;;;;;;-1:-1:-1;20879:149:0;;;;;:::i;:::-;;:::i;:::-;;18123:161;;;;;;;;;;-1:-1:-1;18123:161:0;;;;;:::i;:::-;;:::i;:::-;;;1864:14:1;;1857:22;1839:41;;1827:2;1812:18;18123:161:0;1699:187:1;18694:103:0;;;;;;;;;;-1:-1:-1;18694:103:0;;;;;:::i;:::-;;:::i;31093:413::-;;;;;;;;;;;;;:::i;25754:87::-;;;;;;;;;;-1:-1:-1;25823:10:0;;25754:87;;;2037:25:1;;;2025:2;2010:18;25754:87:0;1891:177:1;24840:906:0;;;;;;;;;;-1:-1:-1;24840:906:0;;;;;:::i;:::-;;:::i;9029:30::-;;;;;;;;;;;;;;;;17200:83;;;;;;;;;;-1:-1:-1;17273:7:0;;17200:83;;35959:107;;;;;;;;;;;;;:::i;9107:34::-;;;;;;;;;;;;;;;;18420:266;;;;;;;;;;-1:-1:-1;18420:266:0;;;;;:::i;:::-;;:::i;23621:340::-;;;;;;;;;;-1:-1:-1;23621:340:0;;;;;:::i;:::-;;:::i;26181:250::-;;;;;;;;;;-1:-1:-1;26181:250:0;;;;;:::i;:::-;;:::i;17289:71::-;;;;;;;;;;-1:-1:-1;17348:9:0;;17289:71;;17348:9;;;;3414:36:1;;3402:2;3387:18;17289:71:0;3272:184:1;9728:36:0;;;;;;;;;;;;;;;;18805:215;;;;;;;;;;-1:-1:-1;18805:215:0;;;;;:::i;:::-;;:::i;23271:342::-;;;;;;;;;;-1:-1:-1;23271:342:0;;;;;:::i;:::-;;:::i;10116:21::-;;;;;;;;;;-1:-1:-1;10116:21:0;;;;-1:-1:-1;;;;;10116:21:0;;;9447:38;;;;;;;;;;;;;;;;10640:41;;;;;;;;;;-1:-1:-1;10640:41:0;;;;-1:-1:-1;;;10640:41:0;;;;;;9771:36;;;;;;;;;;;;;;;;15838:807;;;;;;;;;;-1:-1:-1;15838:807:0;;;;;:::i;:::-;;:::i;10992:36::-;;;;;;;;;;-1:-1:-1;10992:36:0;;;;;;;;;;;20382:123;;;;;;;;;;-1:-1:-1;20382:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;20470:27:0;20446:4;20470:27;;;:18;:27;;;;;;;;;20382:123;18292:120;;;;;;;;;;-1:-1:-1;18292:120:0;;;;;:::i;:::-;;:::i;22640:455::-;;;;;;;;;;-1:-1:-1;22640:455:0;;;;;:::i;:::-;;:::i;10274:64::-;;;;;;;;;;-1:-1:-1;10274:64:0;;;;-1:-1:-1;;;;;10274:64:0;;;10729:28;;;;;;;;;;;;;;;;24700:132;;;;;;;;;;-1:-1:-1;24700:132:0;;;;;:::i;:::-;;:::i;21547:195::-;;;;;;;;;;-1:-1:-1;21547:195:0;;;;;:::i;:::-;;:::i;23103:160::-;;;;;;;;;;-1:-1:-1;23103:160:0;;;;;:::i;:::-;;:::i;9066:34::-;;;;;;;;;;;;;;;;21750:435;;;;;;;;;;-1:-1:-1;21750:435:0;;;;;:::i;:::-;;:::i;9539:40::-;;;;;;;;;;;;;;;;21306:229;;;;;;;;;;-1:-1:-1;21306:229:0;;;;;:::i;:::-;;:::i;17742:198::-;;;;;;;;;;-1:-1:-1;17742:198:0;;;;;:::i;:::-;;:::i;16653:194::-;;;;;;;;;;;;;:::i;19822:424::-;;;;;;;;;;-1:-1:-1;19822:424:0;;;;;:::i;:::-;;:::i;9351:38::-;;;;;;;;;;;;;;;;20254:120;;;;;;;;;;-1:-1:-1;20254:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20346:20:0;20322:4;20346:20;;;:11;:20;;;;;;;;;20254:120;17524:71;;;;;;;;;;-1:-1:-1;17567:7:0;15816:6;-1:-1:-1;;;;;15816:6:0;17524:71;;20513:132;;;;;;;;;;-1:-1:-1;20513:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;20606:31:0;20582:4;20606:31;;;:22;:31;;;;;;;;;20513:132;24266:247;;;;;;;;;;-1:-1:-1;24266:247:0;;;;;:::i;:::-;;:::i;17366:75::-;;;;;;;;;;;;;:::i;19028:225::-;;;;;;;;;;-1:-1:-1;19028:225:0;;;;;:::i;:::-;;:::i;17948:167::-;;;;;;;;;;-1:-1:-1;17948:167:0;;;;;:::i;:::-;;:::i;20653:218::-;;;;;;;;;;-1:-1:-1;20653:218:0;;;;;:::i;:::-;;:::i;9310:34::-;;;;;;;;;;;;;;;;24521:171;;;;;;;;;;-1:-1:-1;24521:171:0;;;;;:::i;:::-;;:::i;9254:47::-;;;;;;;;;;;;;;;;9396:38;;;;;;;;;;;;;;;;9150:43;;;;;;;;;;;;;;;;10165:29;;;;;;;;;;-1:-1:-1;10165:29:0;;;;-1:-1:-1;;;;;10165:29:0;;;9200:47;;;;;;;;;;;;;;;;17601:133;;;;;;;;;;-1:-1:-1;17601:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17703:19:0;;;17685:7;17703:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17601:133;11081:25;;;;;;;;;;-1:-1:-1;11081:25:0;;;;;;;;;;;21185:113;;;;;;;;;;-1:-1:-1;21185:113:0;;;;;:::i;:::-;;:::i;11231:32::-;;;;;;;;;;;;;;;;22193:439;;;;;;;;;;-1:-1:-1;22193:439:0;;;;;:::i;:::-;;:::i;9492:40::-;;;;;;;;;;;;;;;;19261:553;;;;;;;;;;-1:-1:-1;19261:553:0;;;;;:::i;:::-;;:::i;21036:141::-;;;;;;;;;;-1:-1:-1;21036:141:0;;;;;:::i;:::-;;:::i;10803:30::-;;;;;;;;;;;;;;;;12986:2212;;;;;;;;;;-1:-1:-1;12986:2212:0;;;;;:::i;:::-;;:::i;23969:289::-;;;;;;;;;;-1:-1:-1;23969:289:0;;;;;:::i;:::-;;:::i;17447:71::-;17486:13;17510:5;17503:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17447:71;:::o;20879:149::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;;;;;;;;;20963:1:::1;20956:3;:8;;20948:33;;;::::0;-1:-1:-1;;;20948:33:0;;10099:2:1;20948:33:0::1;::::0;::::1;10081:21:1::0;10138:2;10118:18;;;10111:30;-1:-1:-1;;;10157:18:1;;;10150:42;10209:18;;20948:33:0::1;9897:336:1::0;20948:33:0::1;21008:12;:3:::0;21014:6:::1;21008:12;:::i;:::-;20992:13;:28:::0;-1:-1:-1;20879:149:0:o;18123:161::-;18198:4;18215:39;189:10;18238:7;18247:6;18215:8;:39::i;:::-;-1:-1:-1;18272:4:0;18123:161;;;;;:::o;18694:103::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;18768:8:::1;:21:::0;18694:103::o;31093:413::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;31154:14:::1;::::0;::::1;;31153:15;31145:52;;;::::0;-1:-1:-1;;;31145:52:0;;10745:2:1;31145:52:0::1;::::0;::::1;10727:21:1::0;10784:2;10764:18;;;10757:30;10823:26;10803:18;;;10796:54;10867:18;;31145:52:0::1;10543:348:1::0;31145:52:0::1;31208:42;31238:4;31245;31208:21;:42::i;:::-;31283:6;::::0;31261:35:::1;::::0;-1:-1:-1;;;;;31283:6:0::1;::::0;31261:21:::1;:35::i;:::-;31327:2;31311:13;;:18;31307:160;;;31361:17;:12;31376:2;31361:17;:::i;:::-;31346:12;:32:::0;31307:160:::1;;;31441:13;::::0;31426:28:::1;::::0;:12:::1;:28;:::i;:::-;31411:12;:43:::0;31307:160:::1;31477:14;:21:::0;;-1:-1:-1;;31477:21:0::1;31494:4;31477:21;::::0;;31093:413::o;24840:906::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;24945:4:::1;24934:15:::0;::::1;;;24930:809;;;-1:-1:-1::0;;;;;24975:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24974:21;24966:62;;;::::0;-1:-1:-1;;;24966:62:0;;11231:2:1;24966:62:0::1;::::0;::::1;11213:21:1::0;11270:2;11250:18;;;11243:30;11309;11289:18;;;11282:58;11357:18;;24966:62:0::1;11029:352:1::0;24966:62:0::1;-1:-1:-1::0;;;;;25046:16:0;::::1;25065:1;25046:16:::0;;;:7:::1;:16;::::0;;;;;:20;25043:116:::1;;-1:-1:-1::0;;;;;25126:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25106:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25087:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25043:116:::1;-1:-1:-1::0;;;;;;25173:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25173:27:0::1;25196:4;25173:27:::0;;::::1;::::0;;;25215:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25215:23:0::1;::::0;;::::1;::::0;;24840:906::o;24930:809::-:1;25260:16:::0;25256:483:::1;;-1:-1:-1::0;;;;;25301:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25293:61;;;::::0;-1:-1:-1;;;25293:61:0;;11588:2:1;25293:61:0::1;::::0;::::1;11570:21:1::0;11627:2;11607:18;;;11600:30;11666;11646:18;;;11639:58;11714:18;;25293:61:0::1;11386:352:1::0;25293:61:0::1;25374:9;25369:359;25393:9;:16:::0;25389:20;::::1;25369:359;;;25455:7;-1:-1:-1::0;;;;;25439:23:0::1;:9;25449:1;25439:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25439:12:0::1;:23;25435:278;;;25502:9;25512:16:::0;;:20:::1;::::0;25531:1:::1;::::0;25512:20:::1;:::i;:::-;25502:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25487:9:::1;:12:::0;;-1:-1:-1;;;;;25502:31:0;;::::1;::::0;25497:1;;25487:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25487:46:0::1;-1:-1:-1::0;;;;;25487:46:0;;::::1;;::::0;;25556:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25599:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25599:28:0::1;::::0;;25650:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25650:15:0;;;;;-1:-1:-1;;;;;;25650:15:0::1;::::0;;;;;25688:5:::1;;25435:278;25411:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25369:359;;;;25256:483;24840:906:::0;;:::o;35959:107::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;15789:7;15816:6;;36010:48:::1;::::0;-1:-1:-1;;;;;15816:6:0;;;;36036:21:::1;36010:48:::0;::::1;;;::::0;36036:21;;36010:48;15789:7;36010:48;36036:21;15816:6;36010:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35959:107::o:0;18420:266::-;18518:4;18535:36;18545:6;18553:9;18564:6;18535:9;:36::i;:::-;-1:-1:-1;;;;;;18613:19:0;;;;;;:11;:19;;;;;;;;189:10;18613:33;;;;;;;;;18582:74;;18591:6;;18613:42;;18649:6;;18613:42;:::i;:::-;18582:8;:74::i;:::-;-1:-1:-1;18674:4:0;18420:266;;;;;:::o;23621:340::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;23711:13:::1;23749:7;23738;23728;;:17;;;;:::i;:::-;23727:29;;;;:::i;:::-;23711:45;;23795:4;23785:7;;:14;;;;:::i;:::-;23775:5;:25;;23767:88;;;::::0;-1:-1:-1;;;23767:88:0;;12736:2:1;23767:88:0::1;::::0;::::1;12718:21:1::0;12775:2;12755:18;;;12748:30;12814:34;12794:18;;;12787:62;-1:-1:-1;;;12865:18:1;;;12858:48;12923:19;;23767:88:0::1;12534:414:1::0;23767:88:0::1;23866:14;:22:::0;;;23918:14:::1;::::0;23946:7;;23918:24:::1;::::0;23935:7;;23918:24:::1;:::i;:::-;23917:36;;;;:::i;:::-;23899:15;:54:::0;-1:-1:-1;;;23621:340:0:o;26181:250::-;26247:7;26286;;26275;:18;;26267:73;;;;-1:-1:-1;;;26267:73:0;;13155:2:1;26267:73:0;;;13137:21:1;13194:2;13174:18;;;13167:30;13233:34;13213:18;;;13206:62;-1:-1:-1;;;13284:18:1;;;13277:40;13334:19;;26267:73:0;12953:406:1;26267:73:0;26351:19;26374:10;:8;:10::i;:::-;26351:33;-1:-1:-1;26402:21:0;26351:33;26402:7;:21;:::i;:::-;26395:28;26181:250;-1:-1:-1;;;26181:250:0:o;18805:215::-;189:10;18893:4;18942:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18942:34:0;;;;;;;;;;18893:4;;18910:80;;18933:7;;18942:47;;18979:10;;18942:47;:::i;23271:342::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;23360:13:::1;23398:7;23387;23377;;:17;;;;:::i;:::-;23376:29;;;;:::i;:::-;23360:45;;23444:5;23434:7;;:15;;;;:::i;:::-;23424:5;:26;;23416:95;;;::::0;-1:-1:-1;;;23416:95:0;;13566:2:1;23416:95:0::1;::::0;::::1;13548:21:1::0;13605:2;13585:18;;;13578:30;13644:34;13624:18;;;13617:62;13715:26;13695:18;;;13688:54;13759:19;;23416:95:0::1;13364:420:1::0;23416:95:0::1;23522:12;:20:::0;;;23570:14:::1;::::0;23598:7;;23570:24:::1;::::0;23587:7;;23570:24:::1;:::i;:::-;23569:36;;;;:::i;:::-;23553:13;:52:::0;-1:-1:-1;;;23271:342:0:o;15838:807::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15919:22:0;::::1;15911:96;;;;-1:-1:-1::0;;;15911:96:0::1;;;;;;;:::i;:::-;16038:4;::::0;-1:-1:-1;;;;;16026:16:0;;::::1;16038:4:::0;::::1;16026:16;;16018:90;;;;-1:-1:-1::0;;;16018:90:0::1;;;;;;;:::i;:::-;16138:6;::::0;;16119:33:::1;::::0;-1:-1:-1;;;;;16138:6:0;;::::1;::::0;16119:18:::1;:33::i;:::-;16163:34;16182:8;16192:4;16163:18;:34::i;:::-;16208:37;16230:8;16240:4;16208:21;:37::i;:::-;16298:6;::::0;16270:16:::1;::::0;-1:-1:-1;;;;;16270:16:0;;::::1;16298:6:::0;::::1;16270:35;16266:90;;;16320:16;:36:::0;;-1:-1:-1;;;;;;16320:36:0::1;-1:-1:-1::0;;;;;16320:36:0;::::1;;::::0;;16266:90:::1;16419:6;::::0;16409:17:::1;::::0;-1:-1:-1;;;;;16419:6:0::1;16409:9;:17::i;:::-;16377:19;16389:6:::0;;-1:-1:-1;;;;;16389:6:0;;::::1;16377:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;16450:6;;16377:19;;16440:17:::1;::::0;16450:6:::1;16440:9;:17::i;:::-;:21;16437:99;;;16488:6;::::0;16478:46:::1;::::0;-1:-1:-1;;;;;16488:6:0::1;16496:8:::0;16506:17:::1;16488:6:::0;16506:9:::1;:17::i;:::-;16478:9;:46::i;:::-;;16437:99;16556:6;:17:::0;;-1:-1:-1;;;;;;16556:17:0::1;-1:-1:-1::0;;;;;16556:17:0;::::1;::::0;;::::1;::::0;;16589:38:::1;::::0;16556:17;;;;16589:38:::1;::::0;16556:6;16589:38:::1;15838:807:::0;:::o;18292:120::-;18345:4;18369:35;18377:7;-1:-1:-1;;18369:7:0;:35::i;22640:455::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;22770:13:::1;;22759:7;:24;;:73;;;;;22817:15;;22804:9;:28;;22759:73;:122;;;;;22866:15;;22853:9;:28;;22759:122;22751:149;;;::::0;::::1;;22954:4;22941:9:::0;22919:19:::1;22929:9:::0;22919:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;22911:48;;;::::0;::::1;;22970:19;:29:::0;;;;23010:21:::1;:33:::0;23054:21:::1;:33:::0;22640:455::o;24700:132::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24787:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;24787:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24700:132::o;21547:195::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;21644:6:::1;21639:96;21660:7;:14;21656:1;:18;21639:96;;;21716:7;21696:5;:17;21702:7;21710:1;21702:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;21696:17:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;21696:17:0;:27;;-1:-1:-1;;21696:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21676:3;::::1;::::0;::::1;:::i;:::-;;;;21639:96;;23103:160:::0;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;23190:15:::1;:27:::0;;;;23228:15:::1;:27:::0;23103:160::o;21750:435::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;21875:13:::1;;21864:7;:24;;:73;;;;;21922:15;;21909:9;:28;;21864:73;:122;;;;;21971:15;;21958:9;:28;;21864:122;21856:149;;;::::0;::::1;;22059:4;22046:9:::0;22024:19:::1;22034:9:::0;22024:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;22016:48;;;::::0;::::1;;22075:14;:24:::0;;;;22110:16:::1;:28:::0;22149:16:::1;:28:::0;21750:435::o;21306:229::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;21420:6:::1;21415:113;21436:7;:14;21432:1;:18;21415:113;;;21509:7;21472:22;:34;21495:7;21503:1;21495:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;21472:34:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;21472:34:0;:44;;-1:-1:-1;;21472:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21452:3;::::1;::::0;::::1;:::i;:::-;;;;21415:113;;17742:198:::0;-1:-1:-1;;;;;17832:20:0;;17808:7;17832:20;;;:11;:20;;;;;;;;17828:49;;;-1:-1:-1;;;;;;17861:16:0;;;;;:7;:16;;;;;;;17742:198::o;17828:49::-;-1:-1:-1;;;;;17915:16:0;;;;;;:7;:16;;;;;;17895:37;;:19;:37::i;16653:194::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;16739:6:::1;::::0;;16720:33:::1;::::0;-1:-1:-1;;;;;16739:6:0;;::::1;::::0;16720:18:::1;:33::i;:::-;16781:1;16764:19:::0;;-1:-1:-1;;;;;;16764:19:0::1;::::0;;16799:40:::1;::::0;16781:1;;16799:40:::1;::::0;16781:1;;16799:40:::1;16653:194::o:0;19822:424::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;19903:16;19899:340:::1;;-1:-1:-1::0;;;;;;19936:13:0::1;19952:5;19936:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;19936:21:0::1;::::0;;24840:906::o;19899:340::-:1;19994:17;::::0;:22;19990:153:::1;;20083:7;20063:17;;20045:15;:35;;;;:::i;:::-;:45;20037:90;;;::::0;-1:-1:-1;;;20037:90:0;;14421:2:1;20037:90:0::1;::::0;::::1;14403:21:1::0;;;14440:18;;;14433:30;14499:34;14479:18;;;14472:62;14551:18;;20037:90:0::1;14219:356:1::0;20037:90:0::1;-1:-1:-1::0;;;;;20157:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;20157:20:0::1;20173:4;20157:20;::::0;;20212:15:::1;20192:17;:35:::0;19822:424;;:::o;24266:247::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;24394:16:::1;:37:::0;;-1:-1:-1;;;;;24394:37:0;;::::1;-1:-1:-1::0;;;;;;24394:37:0;;::::1;;::::0;;;24442:10:::1;:25:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;24478:11:::1;:27:::0;;;;;::::1;::::0;::::1;;::::0;;24266:247::o;17366:75::-;17407:13;17431:7;17424:14;;;;;:::i;19028:225::-;189:10;19121:4;19170:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19170:34:0;;;;;;;;;;19121:4;;19138:85;;19161:7;;19170:52;;19207:15;;19170:52;:::i;17948:167::-;18026:4;18043:42;189:10;18067:9;18078:6;18043:9;:42::i;20653:218::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;20762:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;20762:28:0;;::::1;::::0;;;::::1;::::0;;;20801:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;20801:24:0;;::::1;;::::0;;20836:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;20653:218::o;24521:171::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;24598:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;24598:32:0::1;-1:-1:-1::0;;;;24598:32:0;;::::1;;::::0;;24646:38:::1;::::0;::::1;::::0;::::1;::::0;24622:8;1864:14:1;1857:22;1839:41;;1827:2;1812:18;;1699:187;24646:38:0::1;;;;;;;;24521:171:::0;:::o;21185:113::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21266:14:0;;;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24;;-1:-1:-1;;21266:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21185:113::o;22193:439::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;22319:13:::1;;22308:7;:24;;:73;;;;;22366:15;;22353:9;:28;;22308:73;:122;;;;;22415:15;;22402:9;:28;;22308:122;22300:149;;;::::0;::::1;;22503:4;22490:9:::0;22468:19:::1;22478:9:::0;22468:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;22460:48;;;::::0;::::1;;22519:15;:25:::0;;;;22555:17:::1;:29:::0;22595:17:::1;:29:::0;22193:439::o;19261:553::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;19334:29:::1;19385:9;19334:61;;19406:16;19443:10;-1:-1:-1::0;;;;;19443:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19425:47:0::1;;19481:4;19488:10;-1:-1:-1::0;;;;;19488:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19425:81;::::0;-1:-1:-1;;;;;;19425:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15066:15:1;;;19425:81:0::1;::::0;::::1;15048:34:1::0;15118:15;;15098:18;;;15091:43;14983:18;;19425:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19406:100:::0;-1:-1:-1;;;;;;19521:22:0;::::1;19517:207;;19587:10;-1:-1:-1::0;;;;;19587:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19569:50:0::1;;19628:4;19635:10;-1:-1:-1::0;;;;;19635:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19569:84;::::0;-1:-1:-1;;;;;;19569:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15066:15:1;;;19569:84:0::1;::::0;::::1;15048:34:1::0;15118:15;;15098:18;;;15091:43;14983:18;;19569:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19560:6;:93:::0;;-1:-1:-1;;;;;;19560:93:0::1;-1:-1:-1::0;;;;;19560:93:0;;;::::1;::::0;;;::::1;::::0;;19517:207:::1;;;19695:6;:17:::0;;-1:-1:-1;;;;;;19695:17:0::1;-1:-1:-1::0;;;;;19695:17:0;::::1;;::::0;;19517:207:::1;19734:9;:22:::0;;-1:-1:-1;;;;;;19734:22:0::1;-1:-1:-1::0;;;;;19734:22:0;::::1;;::::0;;19767:39:::1;19784:4;19791:9:::0;-1:-1:-1;;19767:8:0::1;:39::i;21036:141::-:0;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21128:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;21128:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21036:141::o;12986:2212::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;13216:15:::1;::::0;::::1;;13215:16;13207:25;;;::::0;::::1;;13251:13;::::0;:18;:40;::::1;;;-1:-1:-1::0;13273:13:0::1;::::0;:18;13251:40:::1;:61;;;;-1:-1:-1::0;13296:16:0::1;::::0;;;::::1;;;13295:17;13251:61;13243:70;;;::::0;::::1;;13339:1;13332:3;:8;;13324:51;;;::::0;-1:-1:-1;;;13324:51:0;;15347:2:1;13324:51:0::1;::::0;::::1;15329:21:1::0;15386:2;15366:18;;;15359:30;15425:32;15405:18;;;15398:60;15475:18;;13324:51:0::1;15145:354:1::0;13324:51:0::1;13388:16;:40:::0;;-1:-1:-1;;;;;13388:40:0;;::::1;-1:-1:-1::0;;;;;;13388:40:0;;::::1;;::::0;;;13439:11:::1;:33:::0;;;;::::1;::::0;;::::1;;::::0;;13483:10:::1;:31:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;13527:20;;::::1;::::0;:5:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13558:24:0;;::::1;::::0;:7:::1;::::0;:24:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13610:14:0::1;13593;:31:::0;13770:9:::1;:13:::0;;-1:-1:-1;;13770:13:0::1;13782:1;13770:13:::0;;::::1;::::0;;;13798:12:::1;:24:::0;13876:12:::1;::::0;13872:16:::1;::::0;:2:::1;:16;:::i;:::-;13854:14;;:35;;;;:::i;:::-;13844:7;:45:::0;;;13918:13:::1;::::0;-1:-1:-1;;13918:13:0::1;:::i;:::-;13911:21;::::0;-1:-1:-1;;13911:21:0::1;:::i;:::-;13900:7;:33:::0;13977:14:::1;::::0;13946:9:::1;:46:::0;;-1:-1:-1;;;;;;13946:46:0::1;-1:-1:-1::0;;;;;13977:14:0;;::::1;13946:46:::0;;::::1;::::0;;14030:19:::1;::::0;;-1:-1:-1;;;14030:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13977:14;14030:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14012:49:0::1;;14062:9;;;;;;;;;-1:-1:-1::0;;;;;14062:9:0::1;-1:-1:-1::0;;;;;14062:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14012:82;::::0;-1:-1:-1;;;;;;14012:82:0::1;::::0;;;;;;-1:-1:-1;;;;;15066:15:1;;;14012:82:0::1;::::0;::::1;15048:34:1::0;14088:4:0::1;15098:18:1::0;;;15091:43;14983:18;;14012:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14003:6;:91:::0;;-1:-1:-1;;;;;;14003:91:0::1;-1:-1:-1::0;;;;;14003:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;14105:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;14105:22:0::1;-1:-1:-1::0;14105:22:0::1;::::0;;14158:4:::1;14138:26:::0;;:11:::1;:26:::0;;;;;14173:9:::1;::::0;;;::::1;14138:46:::0;;;;;;-1:-1:-1;;14138:66:0;;14105:22:::1;14225::::0;::::1;:13;:22:::0;14274:12:::1;:3:::0;14280:6:::1;14274:12;:::i;:::-;14258:13;:28:::0;14313:7:::1;::::0;14331:6:::1;::::0;14313:14:::1;::::0;14323:4:::1;14313:14;:::i;:::-;14312:25;;;;:::i;:::-;14297:12;:40:::0;14365:14:::1;::::0;14390:6:::1;::::0;14365:21:::1;::::0;14382:4:::1;14365:21;:::i;:::-;14364:32;;;;:::i;:::-;14348:13;:48:::0;14425:7:::1;::::0;14441:4:::1;::::0;14425:12:::1;::::0;14435:2:::1;14425:12;:::i;:::-;14424:21;;;;:::i;:::-;14407:14;:38:::0;14475:14:::1;::::0;14498:4:::1;::::0;14475:19:::1;::::0;14492:2:::1;14475:19;:::i;:::-;14474:28;;;;:::i;:::-;14456:15;:46:::0;14530:7:::1;::::0;14545:5:::1;::::0;14530:11:::1;::::0;14540:1:::1;14530:11;:::i;:::-;14529:21;;;;:::i;:::-;14513:13;:37:::0;14575:7:::1;::::0;14590:4:::1;::::0;14575:11:::1;::::0;14585:1:::1;14575:11;:::i;:::-;14574:20;;;;:::i;:::-;14561:10;:33:::0;14615:14:::1;::::0;14607:42:::1;::::0;-1:-1:-1;;;;;14615:14:0::1;-1:-1:-1::0;;14607:7:0::1;:42::i;:::-;-1:-1:-1::0;14662:15:0::1;:22:::0;;-1:-1:-1;;14662:22:0::1;14680:4;14662:22:::0;;::::1;::::0;;;14714:7:::1;::::0;;14662:15:::1;14703:7;15789::::0;15816:6;-1:-1:-1;;;;;15816:6:0;;15751:79;14703:7:::1;-1:-1:-1::0;;;;;14695:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14695:16:0;:26;14752:7:::1;15789::::0;15816:6;-1:-1:-1;;;;;15816:6:0;;15751:79;14752:7:::1;14746:4;::::0;14761:7:::1;::::0;14737:32:::1;::::0;2037:25:1;;;-1:-1:-1;;;;;14737:32:0;;::::1;::::0;14746:4;;::::1;::::0;14737:32:::1;::::0;2025:2:1;2010:18;14737:32:0::1;;;;;;;14814:9;::::0;14782:62:::1;::::0;14799:4:::1;::::0;-1:-1:-1;;;;;14814:9:0::1;-1:-1:-1::0;;14782:8:0::1;:62::i;:::-;14857:53;14867:7;15789::::0;15816:6;-1:-1:-1;;;;;15816:6:0;;15751:79;14867:7:::1;14884:4;14891:18;14901:7;15789::::0;15816:6;-1:-1:-1;;;;;15816:6:0;;15751:79;14857:53:::1;-1:-1:-1::0;14937:9:0::1;::::0;-1:-1:-1;;;;;14937:9:0::1;:25;14970:21;15015:4;15035:24;15015:4:::0;15035:9:::1;:24::i;:::-;15074:1;15091::::0;15108:7:::1;15789::::0;15816:6;-1:-1:-1;;;;;15816:6:0;;15751:79;15108:7:::1;15130:15;14937:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;15178:12:0::1;15167:8;:23:::0;-1:-1:-1;;;;;;;;12986:2212:0:o;23969:289::-;12066:6;;-1:-1:-1;;;;;12066:6:0;189:10;12066:22;12058:67;;;;-1:-1:-1;;;12058:67:0;;;;;;;:::i;:::-;24169:16:::1;24149;24139:7;;:26;;;;:::i;:::-;24138:47;;;;:::i;:::-;24122:13;:63:::0;24210:7:::1;::::0;24237:13;;24210:23:::1;::::0;24220:13;;24210:23:::1;:::i;:::-;24209:41;;;;:::i;:::-;24196:10;:54:::0;-1:-1:-1;;;;23969:289:0:o;26443:342::-;-1:-1:-1;;;;;26538:20:0;;26530:69;;;;-1:-1:-1;;;26530:69:0;;18120:2:1;26530:69:0;;;18102:21:1;18159:2;18139:18;;;18132:30;18198:34;18178:18;;;18171:62;-1:-1:-1;;;18249:18:1;;;18242:34;18293:19;;26530:69:0;17918:400:1;26530:69:0;-1:-1:-1;;;;;26618:21:0;;26610:68;;;;-1:-1:-1;;;26610:68:0;;18525:2:1;26610:68:0;;;18507:21:1;18564:2;18544:18;;;18537:30;18603:34;18583:18;;;18576:62;-1:-1:-1;;;18654:18:1;;;18647:32;18696:19;;26610:68:0;18323:398:1;26610:68:0;-1:-1:-1;;;;;26691:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;26744:33;;2037:25:1;;;26744:33:0;;2010:18:1;26744:33:0;;;;;;;26443:342;;;:::o;26793:2237::-;26872:4;-1:-1:-1;;;;;26897:18:0;;26889:68;;;;-1:-1:-1;;;26889:68:0;;18928:2:1;26889:68:0;;;18910:21:1;18967:2;18947:18;;;18940:30;19006:34;18986:18;;;18979:62;-1:-1:-1;;;19057:18:1;;;19050:35;19102:19;;26889:68:0;18726:401:1;26889:68:0;-1:-1:-1;;;;;26976:16:0;;26968:64;;;;-1:-1:-1;;;26968:64:0;;19334:2:1;26968:64:0;;;19316:21:1;19373:2;19353:18;;;19346:30;19412:34;19392:18;;;19385:62;-1:-1:-1;;;19463:18:1;;;19456:33;19506:19;;26968:64:0;19132:399:1;26968:64:0;27060:1;27051:6;:10;27043:64;;;;-1:-1:-1;;;27043:64:0;;19738:2:1;27043:64:0;;;19720:21:1;19777:2;19757:18;;;19750:30;19816:34;19796:18;;;19789:62;-1:-1:-1;;;19867:18:1;;;19860:39;19916:19;;27043:64:0;19536:405:1;27043:64:0;-1:-1:-1;;;;;27127:9:0;;;;;;:5;:9;;;;;;;;27126:10;:26;;;;-1:-1:-1;;;;;;27141:11:0;;;;;;:5;:11;;;;;;;;27140:12;27126:26;27118:67;;;;-1:-1:-1;;;27118:67:0;;20148:2:1;27118:67:0;;;20130:21:1;20187:2;20167:18;;;20160:30;20226;20206:18;;;20199:58;20274:18;;27118:67:0;19946:352:1;27118:67:0;27200:14;;;;27196:112;;;27254:13;;27239:11;:28;;27231:65;;;;-1:-1:-1;;;27231:65:0;;20505:2:1;27231:65:0;;;20487:21:1;20544:2;20524:18;;;20517:30;20583:26;20563:18;;;20556:54;20627:18;;27231:65:0;20303:348:1;27231:65:0;27321:20;27332:4;27338:2;27321:10;:20::i;:::-;27318:776;;;27362:14;;;;27358:89;;27397:34;;-1:-1:-1;;;27397:34:0;;20858:2:1;27397:34:0;;;20840:21:1;20897:2;20877:18;;;20870:30;20936:26;20916:18;;;20909:54;20980:18;;27397:34:0;20656:348:1;27358:89:0;27465:15;;;;27461:347;;;-1:-1:-1;;;;;27505:13:0;;;;;;:7;:13;;;;;;;;27501:292;;;-1:-1:-1;;;;;27550:13:0;;;;;;:9;:13;;;;;;27567:12;27550:29;;27542:38;;;;;;-1:-1:-1;;;;;27603:13:0;;;;;;:9;:13;;;;;27619:12;27603:28;;27501:292;;;-1:-1:-1;;;;;27688:15:0;;;;;;:9;:15;;;;;;27707:12;27688:31;;27680:40;;;;;;-1:-1:-1;;;;;27743:15:0;;;;;;:9;:15;;;;;27761:12;27743:30;;27501:292;27840:12;;27830:6;:22;;27822:75;;;;-1:-1:-1;;;27822:75:0;;21211:2:1;27822:75:0;;;21193:21:1;21250:2;21230:18;;;21223:30;21289:34;21269:18;;;21262:62;-1:-1:-1;;;21340:18:1;;;21333:38;21388:19;;27822:75:0;21009:404:1;27822:75:0;27921:14;;-1:-1:-1;;;;;27915:20:0;;;27921:14;;27915:20;;;;:36;;-1:-1:-1;;;;;;27940:11:0;;;;;;:7;:11;;;;;;;;27939:12;27915:36;27912:171;;;28006:14;;27996:6;27980:13;27990:2;27980:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;27972:95;;;;-1:-1:-1;;;27972:95:0;;21620:2:1;27972:95:0;;;21602:21:1;21659:2;21639:18;;;21632:30;21698:34;21678:18;;;21671:62;-1:-1:-1;;;21749:18:1;;;21742:40;21799:19;;27972:95:0;21418:406:1;27972:95:0;28107:18;;;;;;;28104:251;;;28162:8;;28145:12;:26;;:60;;;;-1:-1:-1;;;;;;28194:11:0;;;;;;:7;:11;;;;;;;;28193:12;28145:60;:139;;;;-1:-1:-1;;;;;;28227:57:0;;28241:42;28227:57;;28145:139;28141:203;;;-1:-1:-1;;;;;28316:9:0;;;;;;:5;:9;;;;;:16;;-1:-1:-1;;28316:16:0;28328:4;28316:16;;;28141:203;-1:-1:-1;;;;;28398:24:0;;28365:12;28398:24;;;:18;:24;;;;;;28380:4;;28398:24;;;:50;;-1:-1:-1;;;;;;28426:22:0;;;;;;:18;:22;;;;;;;;28398:50;28395:96;;;-1:-1:-1;28474:5:0;28395:96;-1:-1:-1;;;;;28507:11:0;;;;;;:7;:11;;;;;;;;28503:457;;;28540:16;;-1:-1:-1;;;28540:16:0;;;;28539:17;:59;;;;-1:-1:-1;28577:21:0;;-1:-1:-1;;;28577:21:0;;;;28539:59;28535:408;;;28633:28;28664:24;28682:4;28664:9;:24::i;:::-;28633:55;;28735:13;;28711:20;:37;28707:221;;28800:10;;28776:20;:34;28773:77;;-1:-1:-1;28837:10:0;;28773:77;28872:36;28887:20;28872:14;:36::i;:::-;28614:329;28535:408;28978:44;28996:4;29002:2;29006:6;29014:7;28978:17;:44::i;:::-;28971:51;26793:2237;-1:-1:-1;;;;;26793:2237:0:o;35080:161::-;35122:7;35143:15;35160;35179:19;:17;:19::i;:::-;35142:56;;-1:-1:-1;35142:56:0;-1:-1:-1;35216:17:0;35142:56;;35216:17;:::i;:::-;35209:24;;;;35080:161;:::o;25849:324::-;25918:4;15816:6;;-1:-1:-1;;;;;25942:15:0;;;15816:6;;25942:15;;;;:45;;-1:-1:-1;15789:7:0;15816:6;-1:-1:-1;;;;;25974:13:0;;;15816:6;;25974:13;;25942:45;:84;;;;-1:-1:-1;;;;;;26005:21:0;;;;;;:17;:21;;;;;;;;26004:22;25942:84;:125;;;;-1:-1:-1;;;;;;26044:23:0;;;;;;:17;:23;;;;;;;;26043:24;25942:125;:152;;;;-1:-1:-1;26090:4:0;;-1:-1:-1;;;;;26084:10:0;;;26090:4;;26084:10;;25942:152;:185;;;;-1:-1:-1;;;;;;26111:16:0;;;;25942:185;:223;;;;-1:-1:-1;;;;;;26144:21:0;;26160:4;26144:21;;25935:230;25849:324;-1:-1:-1;;;25849:324:0:o;29038:1592::-;11940:16;:23;;-1:-1:-1;;;;11940:23:0;-1:-1:-1;;;11940:23:0;;;29146:15:::1;::::0;29128::::1;::::0;:33:::1;::::0;29146:15;29128:33:::1;:::i;:::-;29124:64;;29181:7;;29124:64;29198:17;29301:1;29281:15;;29263;;:33;;;;:::i;:::-;29243:15;::::0;29220:38:::1;::::0;:20;:38:::1;:::i;:::-;29219:78;;;;:::i;:::-;29218:84;;;;:::i;:::-;29198:104:::0;-1:-1:-1;29315:20:0::1;29338:32;29198:104:::0;29338:20;:32:::1;:::i;:::-;29407:16;::::0;;29421:1:::1;29407:16:::0;;;;;::::1;::::0;;29315:55;;-1:-1:-1;29383:21:0::1;::::0;29407:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29407:16:0::1;29383:40;;29452:4;29434;29439:1;29434:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29434:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;29478:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;29478:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;29434:7;;29478:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29468:4;29473:1;29468:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29468:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;29507:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;29507:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;29582:12;;29507:9:::1;::::0;29625:4;;29652::::1;::::0;29672:15:::1;::::0;29507:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29713:24;29824:1;29804:15;;29786;;:33;;;;:::i;:::-;29766:15;::::0;29742:39:::1;::::0;:21:::1;:39;:::i;:::-;29741:79;;;;:::i;:::-;29740:85;;;;:::i;:::-;29713:112:::0;-1:-1:-1;29842:13:0;;29838:344:::1;;29872:9;::::0;30043:4:::1;::::0;29872:224:::1;::::0;-1:-1:-1;;;29872:224:0;;-1:-1:-1;;;;;29872:9:0;;::::1;::::0;:25:::1;::::0;29905:16;;29872:224:::1;::::0;29949:4:::1;::::0;29973:9;;29872::::1;::::0;;;30043:4:::1;::::0;30066:15:::1;::::0;29872:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30116:54:0::1;::::0;;23016:25:1;;;23072:2;23057:18;;23050:34;;;23100:18;;;23093:34;;;30116:54:0::1;::::0;-1:-1:-1;23004:2:1;22989:18;30116:54:0::1;;;;;;;29838:344;30231:1;30196:32;30219:9:::0;30196:20;:32:::1;:::i;:::-;:36;30192:431;;;30270:21;30249:18;30350:1;30333:14;30270:21:::0;30346:1:::1;30333:14;:::i;:::-;:18;;;;:::i;:::-;30306:45:::0;-1:-1:-1;30367:18:0::1;30405:1;30388:14;:10:::0;30401:1:::1;30388:14;:::i;:::-;:18;;;;:::i;:::-;30367:39:::0;-1:-1:-1;30422:19:0::1;30444:14;30457:1;30444:10:::0;:14:::1;:::i;:::-;30474:16;::::0;:43:::1;::::0;30422:36;;-1:-1:-1;;;;;;30474:16:0::1;::::0;:43;::::1;;;::::0;30500:16;;30474::::1;:43:::0;:16;:43;30500:16;30474;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30532:10:0::1;::::0;:31:::1;::::0;-1:-1:-1;;;;;30532:10:0;;::::1;::::0;:31;::::1;;;::::0;30552:10;;30532::::1;:31:::0;:10;:31;30552:10;30532;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30578:11:0::1;::::0;:33:::1;::::0;-1:-1:-1;;;;;30578:11:0;;::::1;::::0;:33;::::1;;;::::0;30599:11;;30578::::1;:33:::0;:11;:33;30599:11;30578;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30234:389;;;;30192:431;29113:1517;;;;11974:1;-1:-1:-1::0;11986:16:0;:24;;-1:-1:-1;;;;11986:24:0;;;29038:1592::o;31720:1880::-;31843:16;;31822:4;;31843:16;;;;;31839:851;;;-1:-1:-1;;;;;20606:31:0;;20582:4;20606:31;;;:22;:31;;;;;;;;31879:56;;;-1:-1:-1;;;;;;20606:31:0;;20582:4;20606:31;;;:22;:31;;;;;;;;31910:25;31875:116;;;31956:19;;-1:-1:-1;;;31956:19:0;;23340:2:1;31956:19:0;;;23322:21:1;23379:1;23359:18;;;23352:29;-1:-1:-1;;;23397:18:1;;;23390:39;23446:18;;31956:19:0;23138:332:1;31875:116:0;32012:16;;;;;;;32007:672;;32049:28;32068:4;32074:2;32049:18;:28::i;:::-;32101:16;;;;;;;32100:17;:41;;;;;32121:20;32132:4;32138:2;32121:10;:20::i;:::-;32096:137;;;32166:47;;-1:-1:-1;;;32166:47:0;;23677:2:1;32166:47:0;;;23659:21:1;23716:2;23696:18;;;23689:30;23755:34;23735:18;;;23728:62;-1:-1:-1;;;23806:18:1;;;23799:35;23851:19;;32166:47:0;23475:401:1;32096:137:0;32007:672;;;32292:1;32277:12;;:16;:55;;;;-1:-1:-1;;;;;;32319:13:0;;;;;;:7;:13;;;;;;;;32277:55;:101;;;;;32358:20;32369:4;32375:2;32358:10;:20::i;:::-;32273:391;;;32455:13;;32440:12;;32425:27;;:12;:27;:::i;:::-;:43;32421:224;;;-1:-1:-1;;;;;32497:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;32497:33:0;32526:4;32497:33;;;32557:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;32605:16:0;;-1:-1:-1;;;;;178:32:1;;160:51;;32605:16:0;;148:2:1;133:18;32605:16:0;;;;;;;32421:224;32702:25;32730:38;32741:4;32747:2;32751:7;32760;32730:10;:38::i;:::-;32813:14;;;;-1:-1:-1;;;;;32797:13:0;;;;;;:7;:13;;;;;;32702:66;;-1:-1:-1;32797:30:0;;;:::i;:::-;-1:-1:-1;;;;;32781:13:0;;;;;;;:7;:13;;;;;;:46;;;;32866:22;;;;32852:11;;;;;;;;;;:36;;32866:22;32852:36;:::i;:::-;-1:-1:-1;;;;;32838:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;32905:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;32927:15:0;;;;;;:11;:15;;;;;;;;32926:16;32905:37;32901:416;;;-1:-1:-1;;;;;32975:13:0;;;;;;:7;:13;;;;;;:23;;32991:7;;32975:23;:::i;:::-;-1:-1:-1;;;;;32959:13:0;;;;;;:7;:13;;;;;:39;32901:416;;;-1:-1:-1;;;;;33021:17:0;;;;;;:11;:17;;;;;;;;33020:18;:37;;;;-1:-1:-1;;;;;;33042:15:0;;;;;;:11;:15;;;;;;;;33020:37;33016:301;;;33102:22;;-1:-1:-1;;;;;33088:11:0;;33102:22;33088:11;;;:7;:11;;;;;;:36;;33102:22;33088:36;:::i;:::-;-1:-1:-1;;;;;33074:11:0;;;;;;:7;:11;;;;;:50;33016:301;;;-1:-1:-1;;;;;33148:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;33169:15:0;;;;;;:11;:15;;;;;;;;33148:36;33144:173;;;-1:-1:-1;;;;;33217:13:0;;;;;;:7;:13;;;;;;:23;;33233:7;;33217:23;:::i;:::-;-1:-1:-1;;;;;33201:13:0;;;;;;;:7;:13;;;;;;:39;;;;33283:22;;33269:11;;;;;;;;;;:36;;33283:22;33269:36;:::i;:::-;-1:-1:-1;;;;;33255:11:0;;;;;;:7;:11;;;;;:50;33144:173;33333:17;;;;:21;33329:79;;33369:39;33384:4;33390:6;:17;;;33369:14;:39::i;:::-;33437:1;33423:6;:11;;;:15;:34;;;;33456:1;33442:6;:11;;;:15;33423:34;33419:91;;;33472:38;33485:6;:11;;;33498:6;:11;;;33472:12;:38::i;:::-;33543:2;-1:-1:-1;;;;;33528:42:0;33537:4;-1:-1:-1;;;;;33528:42:0;;33547:6;:22;;;33528:42;;;;2037:25:1;;2025:2;2010:18;;1891:177;33528:42:0;;;;;;;;-1:-1:-1;33588:4:0;;31720:1880;-1:-1:-1;;;;;31720:1880:0:o;35249:547::-;35347:7;;35383;;35300;;;;;35401:283;35425:9;:16;35421:20;;35401:283;;;35491:7;35467;:21;35475:9;35485:1;35475:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35475:12:0;35467:21;;;;;;;;;;;;;:31;;:66;;;35526:7;35502;:21;35510:9;35520:1;35510:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35510:12:0;35502:21;;;;;;;;;;;;;:31;35467:66;35463:97;;;35543:7;;35552;;35535:25;;;;;;;35249:547;;:::o;35463:97::-;35595:7;:21;35603:9;35613:1;35603:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35603:12:0;35595:21;;;;;;;;;;;;;35585:31;;:7;:31;:::i;:::-;35575:41;;35651:7;:21;35659:9;35669:1;35659:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35659:12:0;35651:21;;;;;;;;;;;;;35641:31;;:7;:31;:::i;:::-;35631:41;-1:-1:-1;35443:3:0;;;;:::i;:::-;;;;35401:283;;;;35718:7;;35708;;:17;;;;:::i;:::-;35698:7;:27;35694:58;;;35735:7;;35744;;35727:25;;;;;;35249:547;;:::o;35694:58::-;35771:7;;35780;;-1:-1:-1;35249:547:0;-1:-1:-1;35249:547:0:o;30646:439::-;30729:16;;;;;;;30728:17;30720:65;;;;-1:-1:-1;;;30720:65:0;;24083:2:1;30720:65:0;;;24065:21:1;24122:2;24102:18;;;24095:30;24161:34;24141:18;;;24134:62;-1:-1:-1;;;24212:18:1;;;24205:33;24255:19;;30720:65:0;23881:399:1;30720:65:0;30801:20;30812:4;30818:2;30801:10;:20::i;:::-;30800:21;:37;;;;-1:-1:-1;30831:6:0;;-1:-1:-1;;;;;30825:12:0;;;30831:6;;30825:12;30800:37;30796:282;;;-1:-1:-1;;;;;30854:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;30854:30:0;30880:4;30854:30;;;;;;30899:16;:23;;-1:-1:-1;;30899:23:0;;;;;30952:15;30937:12;:30;30984:21;:28;;-1:-1:-1;;;;30984:28:0;-1:-1:-1;;;30984:28:0;;;31032:34;;;;;;1864:14:1;;1857:22;1839:41;;1827:2;1812:18;;1699:187;31032:34:0;;;;;;;;30646:439;;:::o;33608:1464::-;33703:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33703:18:0;33734:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33734:25:0;33770:19;33792:10;:8;:10::i;:::-;33770:32;-1:-1:-1;33832:21:0;33770:32;33832:7;:21;:::i;:::-;33815:14;;;:38;33866:1071;;;;-1:-1:-1;;;;;33897:11:0;;;;;;:7;:11;;;;;;;;33893:561;;;33943:15;;33929:11;:29;33993:17;;33977:13;:33;34045:17;;34029:13;:33;33893:561;;;-1:-1:-1;;;;;34088:13:0;;;;;;:7;:13;;;;;;;;34084:370;;;34136:14;;34122:11;:28;34185:16;;34169:13;:32;34236:16;;34220:13;:32;34084:370;;;34307:19;;34293:11;:33;34361:21;;34345:13;:37;34417:21;;34401:13;:37;34084:370;34510:16;;34495:11;;34485:21;;:7;:21;:::i;:::-;34484:42;;;;:::i;:::-;34470:11;;;;:56;;;;34607:16;34589:13;;34573;;:29;;34589:13;34573:29;:::i;:::-;34562:41;;:7;:41;:::i;:::-;34561:62;;;;:::i;:::-;34541:17;;;:82;;;34674:11;;;;:31;;34541:82;34674:31;:::i;:::-;34663:43;;:7;:43;:::i;:::-;34638:68;;34737:11;;;;:25;;34751:11;;34737:25;:::i;:::-;34723:11;;;:39;33866:1071;;;34809:1;34795:11;;;:15;;;34825:17;;;:21;;;34861:32;;;34910:11;;;:15;33866:1071;35027:11;35007:6;:17;;;:31;;;;:::i;:::-;34992:6;:11;;;:47;;;;:::i;:::-;34974:6;:14;;;:66;;;;:::i;:::-;34949:22;;;:91;-1:-1:-1;34949:22:0;33608:1464;-1:-1:-1;;;;;33608:1464:0:o;36078:461::-;36158:19;36181:10;:8;:10::i;:::-;36158:33;-1:-1:-1;36202:18:0;36223:24;36158:33;36223:10;:24;:::i;:::-;36299:4;36283:22;;;;:7;:22;;;;;;36202:45;;-1:-1:-1;36283:35:0;;36202:45;;36283:35;:::i;:::-;36274:4;36258:22;;;;:7;:22;;;;;;;;:60;;;;36332:11;:26;;;;;;36329:104;;;36414:4;36398:22;;;;:7;:22;;;;;;:35;;36423:10;;36398:35;:::i;:::-;36389:4;36373:22;;;;:7;:22;;;;;:60;36329:104;36449:43;;2037:25:1;;;36474:4:0;;-1:-1:-1;;;;;36449:43:0;;;;;2025:2:1;2010:18;36449:43:0;;;;;;;36147:392;;36078:461;;:::o;35808:143::-;35898:4;35888:7;;:14;;;;:::i;:::-;35878:7;:24;35926:10;;:17;;35939:4;;35926:17;:::i;:::-;35913:10;:30;-1:-1:-1;;35808:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:180::-;1117:6;1170:2;1158:9;1149:7;1145:23;1141:32;1138:52;;;1186:1;1183;1176:12;1138:52;-1:-1:-1;1209:23:1;;1058:180;-1:-1:-1;1058:180:1:o;1243:131::-;-1:-1:-1;;;;;1318:31:1;;1308:42;;1298:70;;1364:1;1361;1354:12;1379:315;1447:6;1455;1508:2;1496:9;1487:7;1483:23;1479:32;1476:52;;;1524:1;1521;1514:12;1476:52;1563:9;1550:23;1582:31;1607:5;1582:31;:::i;:::-;1632:5;1684:2;1669:18;;;;1656:32;;-1:-1:-1;;;1379:315:1:o;2073:160::-;2138:20;;2194:13;;2187:21;2177:32;;2167:60;;2223:1;2220;2213:12;2167:60;2073:160;;;:::o;2238:315::-;2303:6;2311;2364:2;2352:9;2343:7;2339:23;2335:32;2332:52;;;2380:1;2377;2370:12;2332:52;2419:9;2406:23;2438:31;2463:5;2438:31;:::i;:::-;2488:5;-1:-1:-1;2512:35:1;2543:2;2528:18;;2512:35;:::i;:::-;2502:45;;2238:315;;;;;:::o;2558:456::-;2635:6;2643;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2759:9;2746:23;2778:31;2803:5;2778:31;:::i;:::-;2828:5;-1:-1:-1;2885:2:1;2870:18;;2857:32;2898:33;2857:32;2898:33;:::i;:::-;2558:456;;2950:7;;-1:-1:-1;;;3004:2:1;2989:18;;;;2976:32;;2558:456::o;3019:248::-;3087:6;3095;3148:2;3136:9;3127:7;3123:23;3119:32;3116:52;;;3164:1;3161;3154:12;3116:52;-1:-1:-1;;3187:23:1;;;3257:2;3242:18;;;3229:32;;-1:-1:-1;3019:248:1:o;3461:247::-;3520:6;3573:2;3561:9;3552:7;3548:23;3544:32;3541:52;;;3589:1;3586;3579:12;3541:52;3628:9;3615:23;3647:31;3672:5;3647:31;:::i;3713:316::-;3790:6;3798;3806;3859:2;3847:9;3838:7;3834:23;3830:32;3827:52;;;3875:1;3872;3865:12;3827:52;-1:-1:-1;;3898:23:1;;;3968:2;3953:18;;3940:32;;-1:-1:-1;4019:2:1;4004:18;;;3991:32;;3713:316;-1:-1:-1;3713:316:1:o;4034:127::-;4095:10;4090:3;4086:20;4083:1;4076:31;4126:4;4123:1;4116:15;4150:4;4147:1;4140:15;4166:275;4237:2;4231:9;4302:2;4283:13;;-1:-1:-1;;4279:27:1;4267:40;;4337:18;4322:34;;4358:22;;;4319:62;4316:88;;;4384:18;;:::i;:::-;4420:2;4413:22;4166:275;;-1:-1:-1;4166:275:1:o;4446:1091::-;4536:6;4544;4597:2;4585:9;4576:7;4572:23;4568:32;4565:52;;;4613:1;4610;4603:12;4565:52;4653:9;4640:23;4682:18;4723:2;4715:6;4712:14;4709:34;;;4739:1;4736;4729:12;4709:34;4777:6;4766:9;4762:22;4752:32;;4822:7;4815:4;4811:2;4807:13;4803:27;4793:55;;4844:1;4841;4834:12;4793:55;4880:2;4867:16;4902:4;4925:2;4921;4918:10;4915:36;;;4931:18;;:::i;:::-;4977:2;4974:1;4970:10;4960:20;;5000:28;5024:2;5020;5016:11;5000:28;:::i;:::-;5062:15;;;5132:11;;;5128:20;;;5093:12;;;;5160:19;;;5157:39;;;5192:1;5189;5182:12;5157:39;5216:11;;;;5236:217;5252:6;5247:3;5244:15;5236:217;;;5332:3;5319:17;5306:30;;5349:31;5374:5;5349:31;:::i;:::-;5393:18;;;5269:12;;;;5431;;;;5236:217;;;5472:5;-1:-1:-1;5496:35:1;;-1:-1:-1;5512:18:1;;;5496:35;:::i;:::-;5486:45;;;;;;4446:1091;;;;;:::o;5542:553::-;5643:6;5651;5659;5712:2;5700:9;5691:7;5687:23;5683:32;5680:52;;;5728:1;5725;5718:12;5680:52;5767:9;5754:23;5786:31;5811:5;5786:31;:::i;:::-;5836:5;-1:-1:-1;5893:2:1;5878:18;;5865:32;5906:33;5865:32;5906:33;:::i;:::-;5958:7;-1:-1:-1;6017:2:1;6002:18;;5989:32;6030:33;5989:32;6030:33;:::i;:::-;6082:7;6072:17;;;5542:553;;;;;:::o;6100:316::-;6168:6;6176;6184;6237:2;6225:9;6216:7;6212:23;6208:32;6205:52;;;6253:1;6250;6243:12;6205:52;6276:26;6292:9;6276:26;:::i;:::-;6266:36;;6321:35;6352:2;6341:9;6337:18;6321:35;:::i;:::-;6311:45;;6375:35;6406:2;6395:9;6391:18;6375:35;:::i;:::-;6365:45;;6100:316;;;;;:::o;6421:180::-;6477:6;6530:2;6518:9;6509:7;6505:23;6501:32;6498:52;;;6546:1;6543;6536:12;6498:52;6569:26;6585:9;6569:26;:::i;6606:388::-;6674:6;6682;6735:2;6723:9;6714:7;6710:23;6706:32;6703:52;;;6751:1;6748;6741:12;6703:52;6790:9;6777:23;6809:31;6834:5;6809:31;:::i;:::-;6859:5;-1:-1:-1;6916:2:1;6901:18;;6888:32;6929:33;6888:32;6929:33;:::i;:::-;6981:7;6971:17;;;6606:388;;;;;:::o;6999:531::-;7042:5;7095:3;7088:4;7080:6;7076:17;7072:27;7062:55;;7113:1;7110;7103:12;7062:55;7149:6;7136:20;7175:18;7171:2;7168:26;7165:52;;;7197:18;;:::i;:::-;7241:55;7284:2;7265:13;;-1:-1:-1;;7261:27:1;7290:4;7257:38;7241:55;:::i;:::-;7321:2;7312:7;7305:19;7367:3;7360:4;7355:2;7347:6;7343:15;7339:26;7336:35;7333:55;;;7384:1;7381;7374:12;7333:55;7449:2;7442:4;7434:6;7430:17;7423:4;7414:7;7410:18;7397:55;7497:1;7472:16;;;7490:4;7468:27;7461:38;;;;7476:7;6999:531;-1:-1:-1;;;6999:531:1:o;7535:1221::-;7690:6;7698;7706;7714;7722;7730;7738;7791:3;7779:9;7770:7;7766:23;7762:33;7759:53;;;7808:1;7805;7798:12;7759:53;7847:9;7834:23;7866:31;7891:5;7866:31;:::i;:::-;7916:5;-1:-1:-1;7973:2:1;7958:18;;7945:32;7986:33;7945:32;7986:33;:::i;:::-;8038:7;-1:-1:-1;8097:2:1;8082:18;;8069:32;8110:33;8069:32;8110:33;:::i;:::-;8162:7;-1:-1:-1;8220:2:1;8205:18;;8192:32;8243:18;8273:14;;;8270:34;;;8300:1;8297;8290:12;8270:34;8323:50;8365:7;8356:6;8345:9;8341:22;8323:50;:::i;:::-;8313:60;;8426:3;8415:9;8411:19;8398:33;8382:49;;8456:2;8446:8;8443:16;8440:36;;;8472:1;8469;8462:12;8440:36;;8495:52;8539:7;8528:8;8517:9;8513:24;8495:52;:::i;:::-;8485:62;;;8599:3;8588:9;8584:19;8571:33;8648:4;8639:7;8635:18;8626:7;8623:31;8613:59;;8668:1;8665;8658:12;8613:59;8691:7;8681:17;;;8745:3;8734:9;8730:19;8717:33;8707:43;;7535:1221;;;;;;;;;;:::o;8761:385::-;8847:6;8855;8863;8871;8924:3;8912:9;8903:7;8899:23;8895:33;8892:53;;;8941:1;8938;8931:12;8892:53;-1:-1:-1;;8964:23:1;;;9034:2;9019:18;;9006:32;;-1:-1:-1;9085:2:1;9070:18;;9057:32;;9136:2;9121:18;9108:32;;-1:-1:-1;8761:385:1;-1:-1:-1;8761:385:1:o;9151:380::-;9230:1;9226:12;;;;9273;;;9294:61;;9348:4;9340:6;9336:17;9326:27;;9294:61;9401:2;9393:6;9390:14;9370:18;9367:38;9364:161;;;9447:10;9442:3;9438:20;9435:1;9428:31;9482:4;9479:1;9472:15;9510:4;9507:1;9500:15;9364:161;;9151:380;;;:::o;9536:356::-;9738:2;9720:21;;;9757:18;;;9750:30;9816:34;9811:2;9796:18;;9789:62;9883:2;9868:18;;9536:356::o;10238:127::-;10299:10;10294:3;10290:20;10287:1;10280:31;10330:4;10327:1;10320:15;10354:4;10351:1;10344:15;10370:168;10410:7;10476:1;10472;10468:6;10464:14;10461:1;10458:21;10453:1;10446:9;10439:17;10435:45;10432:71;;;10483:18;;:::i;:::-;-1:-1:-1;10523:9:1;;10370:168::o;10896:128::-;10936:3;10967:1;10963:6;10960:1;10957:13;10954:39;;;10973:18;;:::i;:::-;-1:-1:-1;11009:9:1;;10896:128::o;11743:127::-;11804:10;11799:3;11795:20;11792:1;11785:31;11835:4;11832:1;11825:15;11859:4;11856:1;11849:15;11875:125;11915:4;11943:1;11940;11937:8;11934:34;;;11948:18;;:::i;:::-;-1:-1:-1;11985:9:1;;11875:125::o;12005:127::-;12066:10;12061:3;12057:20;12054:1;12047:31;12097:4;12094:1;12087:15;12121:4;12118:1;12111:15;12137:135;12176:3;-1:-1:-1;;12197:17:1;;12194:43;;;12217:18;;:::i;:::-;-1:-1:-1;12264:1:1;12253:13;;12137:135::o;12277:127::-;12338:10;12333:3;12329:20;12326:1;12319:31;12369:4;12366:1;12359:15;12393:4;12390:1;12383:15;12409:120;12449:1;12475;12465:35;;12480:18;;:::i;:::-;-1:-1:-1;12514:9:1;;12409:120::o;13789:425::-;13991:2;13973:21;;;14030:2;14010:18;;;14003:30;14069:34;14064:2;14049:18;;14042:62;14140:31;14135:2;14120:18;;14113:59;14204:3;14189:19;;13789:425::o;14580:251::-;14650:6;14703:2;14691:9;14682:7;14678:23;14674:32;14671:52;;;14719:1;14716;14709:12;14671:52;14751:9;14745:16;14770:31;14795:5;14770:31;:::i;15504:422::-;15593:1;15636:5;15593:1;15650:270;15671:7;15661:8;15658:21;15650:270;;;15730:4;15726:1;15722:6;15718:17;15712:4;15709:27;15706:53;;;15739:18;;:::i;:::-;15789:7;15779:8;15775:22;15772:55;;;15809:16;;;;15772:55;15888:22;;;;15848:15;;;;15650:270;;;15654:3;15504:422;;;;;:::o;15931:806::-;15980:5;16010:8;16000:80;;-1:-1:-1;16051:1:1;16065:5;;16000:80;16099:4;16089:76;;-1:-1:-1;16136:1:1;16150:5;;16089:76;16181:4;16199:1;16194:59;;;;16267:1;16262:130;;;;16174:218;;16194:59;16224:1;16215:10;;16238:5;;;16262:130;16299:3;16289:8;16286:17;16283:43;;;16306:18;;:::i;:::-;-1:-1:-1;;16362:1:1;16348:16;;16377:5;;16174:218;;16476:2;16466:8;16463:16;16457:3;16451:4;16448:13;16444:36;16438:2;16428:8;16425:16;16420:2;16414:4;16411:12;16407:35;16404:77;16401:159;;;-1:-1:-1;16513:19:1;;;16545:5;;16401:159;16592:34;16617:8;16611:4;16592:34;:::i;:::-;16662:6;16658:1;16654:6;16650:19;16641:7;16638:32;16635:58;;;16673:18;;:::i;:::-;16711:20;;15931:806;-1:-1:-1;;;15931:806:1:o;16742:131::-;16802:5;16831:36;16858:8;16852:4;16831:36;:::i;16878:112::-;16910:1;16936;16926:35;;16941:18;;:::i;:::-;-1:-1:-1;16975:9:1;;16878:112::o;16995:607::-;-1:-1:-1;;;;;17354:15:1;;;17336:34;;17401:2;17386:18;;17379:34;;;;17444:2;17429:18;;17422:34;;;;17487:2;17472:18;;17465:34;;;;17536:15;;;17530:3;17515:19;;17508:44;17316:3;17568:19;;17561:35;;;;17285:3;17270:19;;16995:607::o;17607:306::-;17695:6;17703;17711;17764:2;17752:9;17743:7;17739:23;17735:32;17732:52;;;17780:1;17777;17770:12;17732:52;17809:9;17803:16;17793:26;;17859:2;17848:9;17844:18;17838:25;17828:35;;17903:2;17892:9;17888:18;17882:25;17872:35;;17607:306;;;;;:::o;21829:980::-;22091:4;22139:3;22128:9;22124:19;22170:6;22159:9;22152:25;22196:2;22234:6;22229:2;22218:9;22214:18;22207:34;22277:3;22272:2;22261:9;22257:18;22250:31;22301:6;22336;22330:13;22367:6;22359;22352:22;22405:3;22394:9;22390:19;22383:26;;22444:2;22436:6;22432:15;22418:29;;22465:1;22475:195;22489:6;22486:1;22483:13;22475:195;;;22554:13;;-1:-1:-1;;;;;22550:39:1;22538:52;;22645:15;;;;22610:12;;;;22586:1;22504:9;22475:195;;;-1:-1:-1;;;;;;;22726:32:1;;;;22721:2;22706:18;;22699:60;-1:-1:-1;;;22790:3:1;22775:19;22768:35;22687:3;21829:980;-1:-1:-1;;;21829:980:1:o

Swarm Source

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