ETH Price: $3,367.64 (-2.22%)
Gas: 2 Gwei

Token

Big Bard AI (BARD)
 

Overview

Max Total Supply

1,000,000,000,000 BARD

Holders

122

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.206581966 BARD

Value
$0.00
0x55f2e85fd0c6fb9f6ccfbd9294c08c9171df13f7
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:
BB

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-09
*/

/**
 *
 *
 * One AI Will Rule Them All
 *
 *
 *
 * SPDX-License-Identifier: UNLICENSED 
 * 
*/

pragma solidity ^0.8.7;

interface IERC20 {

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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);
}

contract BB is Context, IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "Big Bard AI";
    string private constant _symbol = "BARD";
    uint8 private constant _decimals = 9;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e12 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private minContractTokensToSwap = 8e8 * 10**9;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMaxWallet;
    mapping (address => bool) private _bots;
    
    uint256 private _taxFee = 0;
    uint256 private _teamFee = 5;
    uint256 private _maxWalletSize = 1e10 * 10**9;
    uint256 private _liquidityFeePercentage = 0;
    uint256 private _buyFee = 5;
    uint256 private _sellFee = 25;
    uint256 private _transferFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousteamFee = _teamFee;

    address payable private _treasury;
    address payable private _marketingWallet;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen = false;
    bool private _swapAll = false;
    bool private _takeFeeFromTransfer = false;
    bool private inSwap = false;

    mapping(address => bool) private automatedMarketMakerPairs;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event Response(bool treasury, bool marketing);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
        constructor () {

        _treasury = payable(0xf10a59782F638B76ff31972091466e86083Aa4Ee);
        _marketingWallet = payable(0x8F4c958d8114D036Cf67d68c3452c64453068Eef);
        
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromFee[_treasury] = true;
        _isExcludedFromFee[_marketingWallet] = true;

        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[address(this)] = true;
        _isExcludedFromMaxWallet[_treasury] = true;
        _isExcludedFromMaxWallet[_marketingWallet] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }
    
    function _transfer(address from, address to, uint256 amount) private {
        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");

        if(from != owner() && to != owner()) {
            
            require(!_bots[from] && !_bots[to]);

            if(to != uniswapV2Pair && !_isExcludedFromMaxWallet[to]) {
                require(balanceOf(address(to)) + amount <= _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }
            
            if(from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
                require(tradingOpen, "Trading not yet enabled.");
                _teamFee = _buyFee;
            }
            uint256 contractTokenBalance = balanceOf(address(this));

            if(!inSwap && from != uniswapV2Pair && tradingOpen) {

                _teamFee = _sellFee;

                if(contractTokenBalance > minContractTokensToSwap) {
                    if(!_swapAll) {
                        contractTokenBalance = minContractTokensToSwap;
                    }

                    if (_liquidityFeePercentage > 0) {
                        swapAndLiquify(contractTokenBalance);
                    } else {
                        swapWithoutLiquify(contractTokenBalance);
                    }                         
                }
            }
        }
        bool takeFee = true;

        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        if(!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) {
            if (_takeFeeFromTransfer) {
                _teamFee = _transferFee;
            } else {
                takeFee = false;
            }
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 teamFeePercentage = 100 - _liquidityFeePercentage;
        uint256 amtForLiquidity = contractTokenBalance.mul(_liquidityFeePercentage).div(100);
        uint256 halfLiq = amtForLiquidity.div(2);

        uint256 amountToSwapForETH = contractTokenBalance.sub(halfLiq);
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 feeBalance = ethBalance.mul(teamFeePercentage).div(100);
        sendETHToFee(feeBalance);

        uint256 ethForLiquidity = ethBalance - feeBalance;

        if (halfLiq > 0 && ethForLiquidity > 0) {
            // add liquidity
            addLiquidity(halfLiq, ethForLiquidity);

            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, amtForLiquidity);
        }
    }

    function swapWithoutLiquify(uint256 contractTokenBalance) private lockTheSwap {
        
        swapTokensForEth(contractTokenBalance);

        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(address(this).balance);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function manualSwapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        (bool treasury, ) = _treasury.call{value: amount.div(2)}("");
        (bool marketing, ) = _marketingWallet.call{value: amount.div(2)}("");

        emit Response(treasury, marketing);
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        _transferStandard(sender, recipient, amount);
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); 

        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, _taxFee, _teamFee);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tTeam, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 TeamFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tTeam = tAmount.mul(TeamFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if(rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate =  _getRate();
        uint256 rTeam = tTeam.mul(currentRate);

        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}
    
    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        tradingOpen = true;
        automatedMarketMakerPairs[uniswapV2Pair] = true;
    }
    
    function setMarketingWallet (address payable marketing) external onlyOwner {
        _isExcludedFromFee[_marketingWallet] = false;
        _marketingWallet = marketing;
        _isExcludedFromFee[marketing] = true;
    }

    function setTreasury (address payable treasury) external onlyOwner() {
        _isExcludedFromFee[_treasury] = false;
        _treasury = treasury;
        _isExcludedFromFee[treasury] = true;
    }

    function excludeFromFee (address payable ad) external onlyOwner {
        _isExcludedFromFee[ad] = true;
    }
    
    function includeToFee (address payable ad) external onlyOwner {
        _isExcludedFromFee[ad] = false;
    }

    function isExcludedToFee(address ad) public view returns (bool) {
        return _isExcludedFromFee[ad];
    }

    function excludeFromMaxWallet(address[] calldata ads, bool onoff) public onlyOwner {
        for (uint i = 0; i < ads.length; i++) {
            _isExcludedFromMaxWallet[ads[i]] = onoff;
        }
    }
    
    function isExcludedMaxWallet(address ad) public view returns (bool) {
        return _isExcludedFromMaxWallet[ad];
    }

    function setTakeFeeFromTransfer(bool onoff) external onlyOwner {
        _takeFeeFromTransfer = onoff;
    }
    
    function setBuyFee(uint256 buy) external onlyOwner {
        require(buy <= 5);
        _buyFee = buy;
    }

    function setSellFee(uint256 sell) external onlyOwner {
        require(sell <= 5);
        _sellFee = sell;
    }

    function setTransferFee(uint256 fee) external onlyOwner {
        require(fee <= 5);
        _transferFee = fee;
    }
        
    function setTaxFee(uint256 tax) external onlyOwner {
        require(tax <= 5);
        _taxFee = tax;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner {
		require(_liquidityFeePercentage >= 0 && _liquidityFeePercentage <= 100, "liquidity fee percentage must be between 0 to 100");
        _liquidityFeePercentage = liquidityFee;
    }

    function setMinContractTokensToSwap(uint256 numToken) external onlyOwner {
        minContractTokensToSwap = numToken * 10**9;
    }

    function setMaxWallet(uint256 amt) external onlyOwner {
        _maxWalletSize = amt * 10**9;
    }

    function setSwapAll(bool onoff) external onlyOwner {
        _swapAll = onoff;
    }
    
    function setBots(address[] calldata bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            if (bots_[i] != uniswapV2Pair && bots_[i] != address(uniswapV2Router)) {
                _bots[bots_[i]] = true;
            }
        }
    }
    
    function delBot(address notbot) public onlyOwner {
        _bots[notbot] = false;
    }
    
    function isBot(address ad) public view returns (bool) {
        return _bots[ad];
    }
    
    function manualswap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        manualSwapTokensForEth(contractBalance);
    }
    
    function manualsend() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function thisBalance() public view returns (uint) {
        return balanceOf(address(this));
    }

    function amountInPool() public view returns (uint) {
        return balanceOf(uniswapV2Pair);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }

     function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function removeAllFee() private {
        if(_taxFee == 0 && _teamFee == 0) return;
        _previousTaxFee = _taxFee;
        _previousteamFee = _teamFee;
        _taxFee = 0;
        _teamFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _teamFee = _previousteamFee;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","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":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":"bool","name":"treasury","type":"bool"},{"indexed":false,"internalType":"bool","name":"marketing","type":"bool"}],"name":"Response","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":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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountInPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"ad","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"ads","type":"address[]"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"ad","type":"address"}],"name":"includeToFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isExcludedMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isExcludedToFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToken","type":"uint256"}],"name":"setMinContractTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setTakeFeeFromTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thisBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052683635c9adc5dea000006000196200001d91906200072a565b6000196200002c9190620006e5565b600355670b1a2bc2ec5000006005556000600c556005600d55678ac7230489e80000600e556000600f55600560105560196011556000601255600c54601355600d546014556000601860146101000a81548160ff0219169083151502179055506000601860156101000a81548160ff0219169083151502179055506000601860166101000a81548160ff0219169083151502179055506000601860176101000a81548160ff021916908315150217905550348015620000ea57600080fd5b506000620000fd6200068660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35073f10a59782f638b76ff31972091466e86083aa4ee601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738f4c958d8114d036cf67d68c3452c64453068eef601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600354600660006200025c6200068660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160096000620002b06200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620004636200068e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006106200068660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef683635c9adc5dea00000604051620006789190620006c8565b60405180910390a3620007c0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006c28162000720565b82525050565b6000602082019050620006df6000830184620006b7565b92915050565b6000620006f28262000720565b9150620006ff8362000720565b92508282101562000715576200071462000762565b5b828203905092915050565b6000819050919050565b6000620007378262000720565b9150620007448362000720565b92508262000757576200075662000791565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b615a8680620007d06000396000f3fe60806040526004361061023f5760003560e01c80638f02bb5b1161012e578063c9567bf9116100ab578063dd62ed3e1161006f578063dd62ed3e14610814578063de30aad114610851578063e1ab04c91461087a578063f0f44260146108b7578063f2fde38b146108e057610246565b8063c9567bf914610757578063cf0848f71461076e578063db8aeab114610797578063db92dbb6146107c0578063dd467064146107eb57610246565b8063b515566a116100f2578063b515566a1461069a578063b6c52324146106c3578063c1187569146106ee578063c3c8cd8014610717578063c4081a4c1461072e57610246565b80638f02bb5b146105c957806395d89b41146105f25780639a7a23d61461061d578063a69df4b514610646578063a9059cbb1461065d57610246565b8063437823ec116101bc578063715018a611610180578063715018a6146104f8578063844f30fb1461050f5780638b4cee081461054c5780638da5cb5b146105755780638ee88c53146105a057610246565b8063437823ec146104295780635d0044ca146104525780635d098b381461047b5780636fc3eaec146104a457806370a08231146104bb57610246565b806323b872dd1161020357806323b872dd14610330578063273123b71461036d57806327f3a72a14610396578063313ce567146103c15780633bbac579146103ec57610246565b806306fdde031461024b578063095ea7b3146102765780630cc835a3146102b357806312dfbd33146102dc57806318160ddd1461030557610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610909565b60405161026d9190614eef565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190614882565b610946565b6040516102aa9190614eab565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906149c9565b610964565b005b3480156102e857600080fd5b5061030360048036038101906102fe91906149c9565b610a11565b005b34801561031157600080fd5b5061031a610abf565b6040516103279190615131565b60405180910390f35b34801561033c57600080fd5b50610357600480360381019061035291906147ef565b610ad0565b6040516103649190614eab565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190614728565b610ba9565b005b3480156103a257600080fd5b506103ab610c99565b6040516103b89190615131565b60405180910390f35b3480156103cd57600080fd5b506103d6610ca9565b6040516103e391906151dd565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190614728565b610cb2565b6040516104209190614eab565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190614782565b610d08565b005b34801561045e57600080fd5b50610479600480360381019061047491906149c9565b610df8565b005b34801561048757600080fd5b506104a2600480360381019061049d9190614782565b610ea6565b005b3480156104b057600080fd5b506104b9611051565b005b3480156104c757600080fd5b506104e260048036038101906104dd9190614728565b6110f7565b6040516104ef9190615131565b60405180910390f35b34801561050457600080fd5b5061050d611148565b005b34801561051b57600080fd5b5061053660048036038101906105319190614728565b61129b565b6040516105439190614eab565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e91906149c9565b6112f1565b005b34801561058157600080fd5b5061058a61139e565b6040516105979190614ddd565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c291906149c9565b6113c7565b005b3480156105d557600080fd5b506105f060048036038101906105eb91906149c9565b6114bb565b005b3480156105fe57600080fd5b50610607611568565b6040516106149190614eef565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190614842565b6115a5565b005b34801561065257600080fd5b5061065b6116d9565b005b34801561066957600080fd5b50610684600480360381019061067f9190614882565b6118ad565b6040516106919190614eab565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc91906148c2565b6118cb565b005b3480156106cf57600080fd5b506106d8611b05565b6040516106e59190615131565b60405180910390f35b3480156106fa57600080fd5b506107156004803603810190610710919061496f565b611b0f565b005b34801561072357600080fd5b5061072c611bc1565b005b34801561073a57600080fd5b50610755600480360381019061075091906149c9565b611c6f565b005b34801561076357600080fd5b5061076c611d1c565b005b34801561077a57600080fd5b5061079560048036038101906107909190614782565b6122ad565b005b3480156107a357600080fd5b506107be60048036038101906107b9919061490f565b61239d565b005b3480156107cc57600080fd5b506107d56124d7565b6040516107e29190615131565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d91906149c9565b612509565b005b34801561082057600080fd5b5061083b600480360381019061083691906147af565b6126d0565b6040516108489190615131565b60405180910390f35b34801561085d57600080fd5b506108786004803603810190610873919061496f565b612757565b005b34801561088657600080fd5b506108a1600480360381019061089c9190614728565b612809565b6040516108ae9190614eab565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d99190614782565b61285f565b005b3480156108ec57600080fd5b5061090760048036038101906109029190614728565b612a0a565b005b60606040518060400160405280600b81526020017f4269672042617264204149000000000000000000000000000000000000000000815250905090565b600061095a610953612bcc565b8484612bd4565b6001905092915050565b61096c612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090615011565b60405180910390fd5b6005811115610a0757600080fd5b8060108190555050565b610a19612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90615011565b60405180910390fd5b633b9aca0081610ab691906152df565b60058190555050565b6000683635c9adc5dea00000905090565b6000610add848484612d9f565b610b9e84610ae9612bcc565b610b9985604051806060016040528060288152602001615a2960289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4f612bcc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134cd9092919063ffffffff16565b612bd4565b600190509392505050565b610bb1612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590615011565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000610ca4306110f7565b905090565b60006009905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d10612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490615011565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e00612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490615011565b60405180910390fd5b633b9aca0081610e9d91906152df565b600e8190555050565b610eae612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290615011565b60405180910390fd5b600060096000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611059612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90615011565b60405180910390fd5b60004790506110f481613531565b50565b6000611141600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136b1565b9050919050565b611150612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490615011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112f9612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90615011565b60405180910390fd5b600581111561139457600080fd5b8060118190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113cf612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390615011565b60405180910390fd5b6000600f541015801561147257506064600f5411155b6114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890614fd1565b60405180910390fd5b80600f8190555050565b6114c3612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790615011565b60405180910390fd5b600581111561155e57600080fd5b8060128190555050565b60606040518060400160405280600481526020017f4241524400000000000000000000000000000000000000000000000000000000815250905090565b6115ad612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190615011565b60405180910390fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290614fb1565b60405180910390fd5b6116d5828261371f565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090615111565b60405180910390fd5b60025442116117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906150d1565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006118c16118ba612bcc565b8484612d9f565b6001905092915050565b6118d3612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790615011565b60405180910390fd5b60005b82829050811015611b0057601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168383838181106119ba576119b96154c0565b5b90506020020160208101906119cf9190614728565b73ffffffffffffffffffffffffffffffffffffffff1614158015611a685750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838383818110611a3a57611a396154c0565b5b9050602002016020810190611a4f9190614728565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611aed576001600b6000858585818110611a8657611a856154c0565b5b9050602002016020810190611a9b9190614728565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611af890615419565b915050611963565b505050565b6000600254905090565b611b17612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90615011565b60405180910390fd5b80601860166101000a81548160ff02191690831515021790555050565b611bc9612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90615011565b60405180910390fd5b6000611c61306110f7565b9050611c6c8161377a565b50565b611c77612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90615011565b60405180910390fd5b6005811115611d1257600080fd5b80600c8190555050565b611d24612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da890615011565b60405180910390fd5b601860149054906101000a900460ff1615611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df8906150b1565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e9130601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16683635c9adc5dea00000612bd4565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ed757600080fd5b505afa158015611eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0f9190614755565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f7157600080fd5b505afa158015611f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa99190614755565b6040518363ffffffff1660e01b8152600401611fc6929190614df8565b602060405180830381600087803b158015611fe057600080fd5b505af1158015611ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120189190614755565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306120a1306110f7565b6000806120ac61139e565b426040518863ffffffff1660e01b81526004016120ce96959493929190614e4a565b6060604051808303818588803b1580156120e757600080fd5b505af11580156120fb573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061212091906149f6565b505050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121c2929190614e21565b602060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612214919061499c565b506001601860146101000a81548160ff021916908315150217905550600160196000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122b5612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233990615011565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123a5612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242990615011565b60405180910390fd5b60005b838390508110156124d15781600a6000868685818110612458576124576154c0565b5b905060200201602081019061246d9190614728565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806124c990615419565b915050612435565b50505050565b6000612504601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110f7565b905090565b612511612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590615011565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261264c9190615258565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61275f612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390615011565b60405180910390fd5b80601860156101000a81548160ff02191690831515021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612867612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128eb90615011565b60405180910390fd5b600060096000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612a12612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9690615011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0690614f51565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b90615091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cab90614f71565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d929190615131565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0690615051565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7690614f11565b60405180910390fd5b60008111612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb990615031565b60405180910390fd5b612eca61139e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f385750612f0861139e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561333857600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fe15750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612fea57600080fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130925750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130f057600e54816130a4846110f7565b6130ae9190615258565b11156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e690615071565b60405180910390fd5b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561319b5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131f15750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324f57601860149054906101000a900460ff16613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323c906150f1565b60405180910390fd5b601054600d819055505b600061325a306110f7565b9050601860179054906101000a900460ff161580156132c75750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132df5750601860149054906101000a900460ff165b1561333657601154600d8190555060055481111561333557601860159054906101000a900460ff166133115760055490505b6000600f54111561332a5761332581613a02565b613334565b61333381613b74565b5b5b5b505b600060019050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133df5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133e957600090505b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561348d5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134bb57601860169054906101000a900460ff16156134b557601254600d819055506134ba565b600090505b5b6134c784848484613bcf565b50505050565b6000838311158290613515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350c9190614eef565b60405180910390fd5b50600083856135249190615339565b9050809150509392505050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613580600284613bfc90919063ffffffff16565b60405161358c90614dc8565b60006040518083038185875af1925050503d80600081146135c9576040519150601f19603f3d011682016040523d82523d6000602084013e6135ce565b606091505b505090506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613621600285613bfc90919063ffffffff16565b60405161362d90614dc8565b60006040518083038185875af1925050503d806000811461366a576040519150601f19603f3d011682016040523d82523d6000602084013e61366f565b606091505b505090507fc45e9b3ac19bf635feaed560109cb8931031fbbc86809d50d65d41a2cf2fe8b982826040516136a4929190614ec6565b60405180910390a1505050565b60006003548211156136f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ef90614f31565b60405180910390fd5b6000613702613c46565b90506137178184613bfc90919063ffffffff16565b915050919050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6001601860176101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156137b2576137b16154ef565b5b6040519080825280602002602001820160405280156137e05781602001602082028036833780820191505090505b50905030816000815181106137f8576137f76154c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561389a57600080fd5b505afa1580156138ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d29190614755565b816001815181106138e6576138e56154c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394d30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612bd4565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b195949392919061514c565b600060405180830381600087803b1580156139cb57600080fd5b505af11580156139df573d6000803e3d6000fd5b50505050506000601860176101000a81548160ff02191690831515021790555050565b6001601860176101000a81548160ff0219169083151502179055506000600f546064613a2e9190615339565b90506000613a5a6064613a4c600f5486613c7190919063ffffffff16565b613bfc90919063ffffffff16565b90506000613a72600283613bfc90919063ffffffff16565b90506000613a898286613cec90919063ffffffff16565b90506000479050613a9982613d36565b6000613aae8247613cec90919063ffffffff16565b90506000613ad86064613aca8985613c7190919063ffffffff16565b613bfc90919063ffffffff16565b9050613ae381613531565b60008183613af19190615339565b9050600086118015613b035750600081115b15613b4e57613b128682613f88565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858289604051613b45939291906151a6565b60405180910390a15b50505050505050506000601860176101000a81548160ff02191690831515021790555050565b6001601860176101000a81548160ff021916908315150217905550613b9881613d36565b60004790506000811115613bb057613baf47613531565b5b506000601860176101000a81548160ff02191690831515021790555050565b80613bdd57613bdc61407c565b5b613be88484846140bf565b80613bf657613bf561428a565b5b50505050565b6000613c3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061429e565b905092915050565b6000806000613c53614301565b91509150613c6a8183613bfc90919063ffffffff16565b9250505090565b600080831415613c845760009050613ce6565b60008284613c9291906152df565b9050828482613ca191906152ae565b14613ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd890614ff1565b60405180910390fd5b809150505b92915050565b6000613d2e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134cd565b905092915050565b6000600267ffffffffffffffff811115613d5357613d526154ef565b5b604051908082528060200260200182016040528015613d815781602001602082028036833780820191505090505b5090503081600081518110613d9957613d986154c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e3b57600080fd5b505afa158015613e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e739190614755565b81600181518110613e8757613e866154c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613eee30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612bd4565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f5295949392919061514c565b600060405180830381600087803b158015613f6c57600080fd5b505af1158015613f80573d6000803e3d6000fd5b505050505050565b613fb530601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612bd4565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061400161139e565b426040518863ffffffff1660e01b815260040161402396959493929190614e4a565b6060604051808303818588803b15801561403c57600080fd5b505af1158015614050573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061407591906149f6565b5050505050565b6000600c5414801561409057506000600d54145b1561409a576140bd565b600c54601381905550600d546014819055506000600c819055506000600d819055505b565b6000806000806000806140d187614363565b95509550955095509550955061412f86600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cec90919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141c485600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143cb90919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061421081614429565b61421a84836144e6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142779190615131565b60405180910390a3505050505050505050565b601354600c81905550601454600d81905550565b600080831182906142e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142dc9190614eef565b60405180910390fd5b50600083856142f491906152ae565b9050809150509392505050565b600080600060035490506000683635c9adc5dea000009050614337683635c9adc5dea00000600354613bfc90919063ffffffff16565b82101561435657600354683635c9adc5dea0000093509350505061435f565b81819350935050505b9091565b60008060008060008060008060006143808a600c54600d54614520565b9250925092506000614390613c46565b905060008060006143a38e8787876145b6565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008082846143da9190615258565b90508381101561441f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441690614f91565b60405180910390fd5b8091505092915050565b6000614433613c46565b9050600061444a8284613c7190919063ffffffff16565b905061449e81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143cb90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6144fb82600354613cec90919063ffffffff16565b600381905550614516816004546143cb90919063ffffffff16565b6004819055505050565b60008060008061454c606461453e888a613c7190919063ffffffff16565b613bfc90919063ffffffff16565b905060006145766064614568888b613c7190919063ffffffff16565b613bfc90919063ffffffff16565b9050600061459f82614591858c613cec90919063ffffffff16565b613cec90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806145cf8589613c7190919063ffffffff16565b905060006145e68689613c7190919063ffffffff16565b905060006145fd8789613c7190919063ffffffff16565b90506000614626826146188587613cec90919063ffffffff16565b613cec90919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008135905061464e816159cc565b92915050565b600081519050614663816159cc565b92915050565b600081359050614678816159e3565b92915050565b60008083601f84011261469457614693615523565b5b8235905067ffffffffffffffff8111156146b1576146b061551e565b5b6020830191508360208202830111156146cd576146cc615528565b5b9250929050565b6000813590506146e3816159fa565b92915050565b6000815190506146f8816159fa565b92915050565b60008135905061470d81615a11565b92915050565b60008151905061472281615a11565b92915050565b60006020828403121561473e5761473d615532565b5b600061474c8482850161463f565b91505092915050565b60006020828403121561476b5761476a615532565b5b600061477984828501614654565b91505092915050565b60006020828403121561479857614797615532565b5b60006147a684828501614669565b91505092915050565b600080604083850312156147c6576147c5615532565b5b60006147d48582860161463f565b92505060206147e58582860161463f565b9150509250929050565b60008060006060848603121561480857614807615532565b5b60006148168682870161463f565b93505060206148278682870161463f565b9250506040614838868287016146fe565b9150509250925092565b6000806040838503121561485957614858615532565b5b60006148678582860161463f565b9250506020614878858286016146d4565b9150509250929050565b6000806040838503121561489957614898615532565b5b60006148a78582860161463f565b92505060206148b8858286016146fe565b9150509250929050565b600080602083850312156148d9576148d8615532565b5b600083013567ffffffffffffffff8111156148f7576148f661552d565b5b6149038582860161467e565b92509250509250929050565b60008060006040848603121561492857614927615532565b5b600084013567ffffffffffffffff8111156149465761494561552d565b5b6149528682870161467e565b93509350506020614965868287016146d4565b9150509250925092565b60006020828403121561498557614984615532565b5b6000614993848285016146d4565b91505092915050565b6000602082840312156149b2576149b1615532565b5b60006149c0848285016146e9565b91505092915050565b6000602082840312156149df576149de615532565b5b60006149ed848285016146fe565b91505092915050565b600080600060608486031215614a0f57614a0e615532565b5b6000614a1d86828701614713565b9350506020614a2e86828701614713565b9250506040614a3f86828701614713565b9150509250925092565b6000614a558383614a61565b60208301905092915050565b614a6a8161536d565b82525050565b614a798161536d565b82525050565b6000614a8a82615208565b614a94818561522b565b9350614a9f836151f8565b8060005b83811015614ad0578151614ab78882614a49565b9750614ac28361521e565b925050600181019050614aa3565b5085935050505092915050565b614ae681615391565b82525050565b614af5816153d4565b82525050565b6000614b0682615213565b614b108185615247565b9350614b208185602086016153e6565b614b2981615537565b840191505092915050565b6000614b41602383615247565b9150614b4c82615548565b604082019050919050565b6000614b64602a83615247565b9150614b6f82615597565b604082019050919050565b6000614b87602683615247565b9150614b92826155e6565b604082019050919050565b6000614baa602283615247565b9150614bb582615635565b604082019050919050565b6000614bcd601b83615247565b9150614bd882615684565b602082019050919050565b6000614bf0603983615247565b9150614bfb826156ad565b604082019050919050565b6000614c13603183615247565b9150614c1e826156fc565b604082019050919050565b6000614c36602183615247565b9150614c418261574b565b604082019050919050565b6000614c59602083615247565b9150614c648261579a565b602082019050919050565b6000614c7c602983615247565b9150614c87826157c3565b604082019050919050565b6000614c9f602583615247565b9150614caa82615812565b604082019050919050565b6000614cc2602383615247565b9150614ccd82615861565b604082019050919050565b6000614ce560008361523c565b9150614cf0826158b0565b600082019050919050565b6000614d08602483615247565b9150614d13826158b3565b604082019050919050565b6000614d2b601783615247565b9150614d3682615902565b602082019050919050565b6000614d4e601f83615247565b9150614d598261592b565b602082019050919050565b6000614d71601883615247565b9150614d7c82615954565b602082019050919050565b6000614d94602383615247565b9150614d9f8261597d565b604082019050919050565b614db3816153bd565b82525050565b614dc2816153c7565b82525050565b6000614dd382614cd8565b9150819050919050565b6000602082019050614df26000830184614a70565b92915050565b6000604082019050614e0d6000830185614a70565b614e1a6020830184614a70565b9392505050565b6000604082019050614e366000830185614a70565b614e436020830184614daa565b9392505050565b600060c082019050614e5f6000830189614a70565b614e6c6020830188614daa565b614e796040830187614aec565b614e866060830186614aec565b614e936080830185614a70565b614ea060a0830184614daa565b979650505050505050565b6000602082019050614ec06000830184614add565b92915050565b6000604082019050614edb6000830185614add565b614ee86020830184614add565b9392505050565b60006020820190508181036000830152614f098184614afb565b905092915050565b60006020820190508181036000830152614f2a81614b34565b9050919050565b60006020820190508181036000830152614f4a81614b57565b9050919050565b60006020820190508181036000830152614f6a81614b7a565b9050919050565b60006020820190508181036000830152614f8a81614b9d565b9050919050565b60006020820190508181036000830152614faa81614bc0565b9050919050565b60006020820190508181036000830152614fca81614be3565b9050919050565b60006020820190508181036000830152614fea81614c06565b9050919050565b6000602082019050818103600083015261500a81614c29565b9050919050565b6000602082019050818103600083015261502a81614c4c565b9050919050565b6000602082019050818103600083015261504a81614c6f565b9050919050565b6000602082019050818103600083015261506a81614c92565b9050919050565b6000602082019050818103600083015261508a81614cb5565b9050919050565b600060208201905081810360008301526150aa81614cfb565b9050919050565b600060208201905081810360008301526150ca81614d1e565b9050919050565b600060208201905081810360008301526150ea81614d41565b9050919050565b6000602082019050818103600083015261510a81614d64565b9050919050565b6000602082019050818103600083015261512a81614d87565b9050919050565b60006020820190506151466000830184614daa565b92915050565b600060a0820190506151616000830188614daa565b61516e6020830187614aec565b81810360408301526151808186614a7f565b905061518f6060830185614a70565b61519c6080830184614daa565b9695505050505050565b60006060820190506151bb6000830186614daa565b6151c86020830185614daa565b6151d56040830184614daa565b949350505050565b60006020820190506151f26000830184614db9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615263826153bd565b915061526e836153bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152a3576152a2615462565b5b828201905092915050565b60006152b9826153bd565b91506152c4836153bd565b9250826152d4576152d3615491565b5b828204905092915050565b60006152ea826153bd565b91506152f5836153bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561532e5761532d615462565b5b828202905092915050565b6000615344826153bd565b915061534f836153bd565b92508282101561536257615361615462565b5b828203905092915050565b60006153788261539d565b9050919050565b600061538a8261539d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006153df826153bd565b9050919050565b60005b838110156154045780820151818401526020810190506153e9565b83811115615413576000848401525b50505050565b6000615424826153bd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561545757615456615462565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f6c6971756964697479206665652070657263656e74616765206d75737420626560008201527f206265747765656e203020746f20313030000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6159d58161536d565b81146159e057600080fd5b50565b6159ec8161537f565b81146159f757600080fd5b50565b615a0381615391565b8114615a0e57600080fd5b50565b615a1a816153bd565b8114615a2557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f3e9bc82e323e77aa6b744adff1db968ebca80459d4e6cc4299ff3d02af5633064736f6c63430008070033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80638f02bb5b1161012e578063c9567bf9116100ab578063dd62ed3e1161006f578063dd62ed3e14610814578063de30aad114610851578063e1ab04c91461087a578063f0f44260146108b7578063f2fde38b146108e057610246565b8063c9567bf914610757578063cf0848f71461076e578063db8aeab114610797578063db92dbb6146107c0578063dd467064146107eb57610246565b8063b515566a116100f2578063b515566a1461069a578063b6c52324146106c3578063c1187569146106ee578063c3c8cd8014610717578063c4081a4c1461072e57610246565b80638f02bb5b146105c957806395d89b41146105f25780639a7a23d61461061d578063a69df4b514610646578063a9059cbb1461065d57610246565b8063437823ec116101bc578063715018a611610180578063715018a6146104f8578063844f30fb1461050f5780638b4cee081461054c5780638da5cb5b146105755780638ee88c53146105a057610246565b8063437823ec146104295780635d0044ca146104525780635d098b381461047b5780636fc3eaec146104a457806370a08231146104bb57610246565b806323b872dd1161020357806323b872dd14610330578063273123b71461036d57806327f3a72a14610396578063313ce567146103c15780633bbac579146103ec57610246565b806306fdde031461024b578063095ea7b3146102765780630cc835a3146102b357806312dfbd33146102dc57806318160ddd1461030557610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610909565b60405161026d9190614eef565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190614882565b610946565b6040516102aa9190614eab565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906149c9565b610964565b005b3480156102e857600080fd5b5061030360048036038101906102fe91906149c9565b610a11565b005b34801561031157600080fd5b5061031a610abf565b6040516103279190615131565b60405180910390f35b34801561033c57600080fd5b50610357600480360381019061035291906147ef565b610ad0565b6040516103649190614eab565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190614728565b610ba9565b005b3480156103a257600080fd5b506103ab610c99565b6040516103b89190615131565b60405180910390f35b3480156103cd57600080fd5b506103d6610ca9565b6040516103e391906151dd565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190614728565b610cb2565b6040516104209190614eab565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190614782565b610d08565b005b34801561045e57600080fd5b50610479600480360381019061047491906149c9565b610df8565b005b34801561048757600080fd5b506104a2600480360381019061049d9190614782565b610ea6565b005b3480156104b057600080fd5b506104b9611051565b005b3480156104c757600080fd5b506104e260048036038101906104dd9190614728565b6110f7565b6040516104ef9190615131565b60405180910390f35b34801561050457600080fd5b5061050d611148565b005b34801561051b57600080fd5b5061053660048036038101906105319190614728565b61129b565b6040516105439190614eab565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e91906149c9565b6112f1565b005b34801561058157600080fd5b5061058a61139e565b6040516105979190614ddd565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c291906149c9565b6113c7565b005b3480156105d557600080fd5b506105f060048036038101906105eb91906149c9565b6114bb565b005b3480156105fe57600080fd5b50610607611568565b6040516106149190614eef565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190614842565b6115a5565b005b34801561065257600080fd5b5061065b6116d9565b005b34801561066957600080fd5b50610684600480360381019061067f9190614882565b6118ad565b6040516106919190614eab565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc91906148c2565b6118cb565b005b3480156106cf57600080fd5b506106d8611b05565b6040516106e59190615131565b60405180910390f35b3480156106fa57600080fd5b506107156004803603810190610710919061496f565b611b0f565b005b34801561072357600080fd5b5061072c611bc1565b005b34801561073a57600080fd5b50610755600480360381019061075091906149c9565b611c6f565b005b34801561076357600080fd5b5061076c611d1c565b005b34801561077a57600080fd5b5061079560048036038101906107909190614782565b6122ad565b005b3480156107a357600080fd5b506107be60048036038101906107b9919061490f565b61239d565b005b3480156107cc57600080fd5b506107d56124d7565b6040516107e29190615131565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d91906149c9565b612509565b005b34801561082057600080fd5b5061083b600480360381019061083691906147af565b6126d0565b6040516108489190615131565b60405180910390f35b34801561085d57600080fd5b506108786004803603810190610873919061496f565b612757565b005b34801561088657600080fd5b506108a1600480360381019061089c9190614728565b612809565b6040516108ae9190614eab565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d99190614782565b61285f565b005b3480156108ec57600080fd5b5061090760048036038101906109029190614728565b612a0a565b005b60606040518060400160405280600b81526020017f4269672042617264204149000000000000000000000000000000000000000000815250905090565b600061095a610953612bcc565b8484612bd4565b6001905092915050565b61096c612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090615011565b60405180910390fd5b6005811115610a0757600080fd5b8060108190555050565b610a19612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d90615011565b60405180910390fd5b633b9aca0081610ab691906152df565b60058190555050565b6000683635c9adc5dea00000905090565b6000610add848484612d9f565b610b9e84610ae9612bcc565b610b9985604051806060016040528060288152602001615a2960289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4f612bcc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134cd9092919063ffffffff16565b612bd4565b600190509392505050565b610bb1612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590615011565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000610ca4306110f7565b905090565b60006009905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d10612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490615011565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610e00612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490615011565b60405180910390fd5b633b9aca0081610e9d91906152df565b600e8190555050565b610eae612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3290615011565b60405180910390fd5b600060096000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611059612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90615011565b60405180910390fd5b60004790506110f481613531565b50565b6000611141600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136b1565b9050919050565b611150612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490615011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112f9612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90615011565b60405180910390fd5b600581111561139457600080fd5b8060118190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113cf612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390615011565b60405180910390fd5b6000600f541015801561147257506064600f5411155b6114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a890614fd1565b60405180910390fd5b80600f8190555050565b6114c3612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790615011565b60405180910390fd5b600581111561155e57600080fd5b8060128190555050565b60606040518060400160405280600481526020017f4241524400000000000000000000000000000000000000000000000000000000815250905090565b6115ad612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190615011565b60405180910390fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290614fb1565b60405180910390fd5b6116d5828261371f565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090615111565b60405180910390fd5b60025442116117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906150d1565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006118c16118ba612bcc565b8484612d9f565b6001905092915050565b6118d3612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790615011565b60405180910390fd5b60005b82829050811015611b0057601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168383838181106119ba576119b96154c0565b5b90506020020160208101906119cf9190614728565b73ffffffffffffffffffffffffffffffffffffffff1614158015611a685750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838383818110611a3a57611a396154c0565b5b9050602002016020810190611a4f9190614728565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611aed576001600b6000858585818110611a8657611a856154c0565b5b9050602002016020810190611a9b9190614728565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611af890615419565b915050611963565b505050565b6000600254905090565b611b17612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90615011565b60405180910390fd5b80601860166101000a81548160ff02191690831515021790555050565b611bc9612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90615011565b60405180910390fd5b6000611c61306110f7565b9050611c6c8161377a565b50565b611c77612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfb90615011565b60405180910390fd5b6005811115611d1257600080fd5b80600c8190555050565b611d24612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da890615011565b60405180910390fd5b601860149054906101000a900460ff1615611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df8906150b1565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e9130601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16683635c9adc5dea00000612bd4565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611ed757600080fd5b505afa158015611eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0f9190614755565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f7157600080fd5b505afa158015611f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa99190614755565b6040518363ffffffff1660e01b8152600401611fc6929190614df8565b602060405180830381600087803b158015611fe057600080fd5b505af1158015611ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120189190614755565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306120a1306110f7565b6000806120ac61139e565b426040518863ffffffff1660e01b81526004016120ce96959493929190614e4a565b6060604051808303818588803b1580156120e757600080fd5b505af11580156120fb573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061212091906149f6565b505050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121c2929190614e21565b602060405180830381600087803b1580156121dc57600080fd5b505af11580156121f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612214919061499c565b506001601860146101000a81548160ff021916908315150217905550600160196000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122b5612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233990615011565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6123a5612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242990615011565b60405180910390fd5b60005b838390508110156124d15781600a6000868685818110612458576124576154c0565b5b905060200201602081019061246d9190614728565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806124c990615419565b915050612435565b50505050565b6000612504601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110f7565b905090565b612511612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461259e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259590615011565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261264c9190615258565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61275f612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e390615011565b60405180910390fd5b80601860156101000a81548160ff02191690831515021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612867612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128eb90615011565b60405180910390fd5b600060096000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612a12612bcc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9690615011565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0690614f51565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3b90615091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cab90614f71565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d929190615131565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0690615051565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7690614f11565b60405180910390fd5b60008111612ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb990615031565b60405180910390fd5b612eca61139e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f385750612f0861139e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561333857600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fe15750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612fea57600080fd5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130925750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130f057600e54816130a4846110f7565b6130ae9190615258565b11156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e690615071565b60405180910390fd5b5b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561319b5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131f15750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324f57601860149054906101000a900460ff16613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323c906150f1565b60405180910390fd5b601054600d819055505b600061325a306110f7565b9050601860179054906101000a900460ff161580156132c75750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132df5750601860149054906101000a900460ff165b1561333657601154600d8190555060055481111561333557601860159054906101000a900460ff166133115760055490505b6000600f54111561332a5761332581613a02565b613334565b61333381613b74565b5b5b5b505b600060019050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133df5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133e957600090505b601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561348d5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134bb57601860169054906101000a900460ff16156134b557601254600d819055506134ba565b600090505b5b6134c784848484613bcf565b50505050565b6000838311158290613515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350c9190614eef565b60405180910390fd5b50600083856135249190615339565b9050809150509392505050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613580600284613bfc90919063ffffffff16565b60405161358c90614dc8565b60006040518083038185875af1925050503d80600081146135c9576040519150601f19603f3d011682016040523d82523d6000602084013e6135ce565b606091505b505090506000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613621600285613bfc90919063ffffffff16565b60405161362d90614dc8565b60006040518083038185875af1925050503d806000811461366a576040519150601f19603f3d011682016040523d82523d6000602084013e61366f565b606091505b505090507fc45e9b3ac19bf635feaed560109cb8931031fbbc86809d50d65d41a2cf2fe8b982826040516136a4929190614ec6565b60405180910390a1505050565b60006003548211156136f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ef90614f31565b60405180910390fd5b6000613702613c46565b90506137178184613bfc90919063ffffffff16565b915050919050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6001601860176101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156137b2576137b16154ef565b5b6040519080825280602002602001820160405280156137e05781602001602082028036833780820191505090505b50905030816000815181106137f8576137f76154c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561389a57600080fd5b505afa1580156138ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d29190614755565b816001815181106138e6576138e56154c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394d30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612bd4565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b195949392919061514c565b600060405180830381600087803b1580156139cb57600080fd5b505af11580156139df573d6000803e3d6000fd5b50505050506000601860176101000a81548160ff02191690831515021790555050565b6001601860176101000a81548160ff0219169083151502179055506000600f546064613a2e9190615339565b90506000613a5a6064613a4c600f5486613c7190919063ffffffff16565b613bfc90919063ffffffff16565b90506000613a72600283613bfc90919063ffffffff16565b90506000613a898286613cec90919063ffffffff16565b90506000479050613a9982613d36565b6000613aae8247613cec90919063ffffffff16565b90506000613ad86064613aca8985613c7190919063ffffffff16565b613bfc90919063ffffffff16565b9050613ae381613531565b60008183613af19190615339565b9050600086118015613b035750600081115b15613b4e57613b128682613f88565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858289604051613b45939291906151a6565b60405180910390a15b50505050505050506000601860176101000a81548160ff02191690831515021790555050565b6001601860176101000a81548160ff021916908315150217905550613b9881613d36565b60004790506000811115613bb057613baf47613531565b5b506000601860176101000a81548160ff02191690831515021790555050565b80613bdd57613bdc61407c565b5b613be88484846140bf565b80613bf657613bf561428a565b5b50505050565b6000613c3e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061429e565b905092915050565b6000806000613c53614301565b91509150613c6a8183613bfc90919063ffffffff16565b9250505090565b600080831415613c845760009050613ce6565b60008284613c9291906152df565b9050828482613ca191906152ae565b14613ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cd890614ff1565b60405180910390fd5b809150505b92915050565b6000613d2e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134cd565b905092915050565b6000600267ffffffffffffffff811115613d5357613d526154ef565b5b604051908082528060200260200182016040528015613d815781602001602082028036833780820191505090505b5090503081600081518110613d9957613d986154c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e3b57600080fd5b505afa158015613e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e739190614755565b81600181518110613e8757613e866154c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613eee30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612bd4565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f5295949392919061514c565b600060405180830381600087803b158015613f6c57600080fd5b505af1158015613f80573d6000803e3d6000fd5b505050505050565b613fb530601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612bd4565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061400161139e565b426040518863ffffffff1660e01b815260040161402396959493929190614e4a565b6060604051808303818588803b15801561403c57600080fd5b505af1158015614050573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061407591906149f6565b5050505050565b6000600c5414801561409057506000600d54145b1561409a576140bd565b600c54601381905550600d546014819055506000600c819055506000600d819055505b565b6000806000806000806140d187614363565b95509550955095509550955061412f86600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cec90919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141c485600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143cb90919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061421081614429565b61421a84836144e6565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516142779190615131565b60405180910390a3505050505050505050565b601354600c81905550601454600d81905550565b600080831182906142e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142dc9190614eef565b60405180910390fd5b50600083856142f491906152ae565b9050809150509392505050565b600080600060035490506000683635c9adc5dea000009050614337683635c9adc5dea00000600354613bfc90919063ffffffff16565b82101561435657600354683635c9adc5dea0000093509350505061435f565b81819350935050505b9091565b60008060008060008060008060006143808a600c54600d54614520565b9250925092506000614390613c46565b905060008060006143a38e8787876145b6565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008082846143da9190615258565b90508381101561441f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441690614f91565b60405180910390fd5b8091505092915050565b6000614433613c46565b9050600061444a8284613c7190919063ffffffff16565b905061449e81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546143cb90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6144fb82600354613cec90919063ffffffff16565b600381905550614516816004546143cb90919063ffffffff16565b6004819055505050565b60008060008061454c606461453e888a613c7190919063ffffffff16565b613bfc90919063ffffffff16565b905060006145766064614568888b613c7190919063ffffffff16565b613bfc90919063ffffffff16565b9050600061459f82614591858c613cec90919063ffffffff16565b613cec90919063ffffffff16565b905080838395509550955050505093509350939050565b6000806000806145cf8589613c7190919063ffffffff16565b905060006145e68689613c7190919063ffffffff16565b905060006145fd8789613c7190919063ffffffff16565b90506000614626826146188587613cec90919063ffffffff16565b613cec90919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008135905061464e816159cc565b92915050565b600081519050614663816159cc565b92915050565b600081359050614678816159e3565b92915050565b60008083601f84011261469457614693615523565b5b8235905067ffffffffffffffff8111156146b1576146b061551e565b5b6020830191508360208202830111156146cd576146cc615528565b5b9250929050565b6000813590506146e3816159fa565b92915050565b6000815190506146f8816159fa565b92915050565b60008135905061470d81615a11565b92915050565b60008151905061472281615a11565b92915050565b60006020828403121561473e5761473d615532565b5b600061474c8482850161463f565b91505092915050565b60006020828403121561476b5761476a615532565b5b600061477984828501614654565b91505092915050565b60006020828403121561479857614797615532565b5b60006147a684828501614669565b91505092915050565b600080604083850312156147c6576147c5615532565b5b60006147d48582860161463f565b92505060206147e58582860161463f565b9150509250929050565b60008060006060848603121561480857614807615532565b5b60006148168682870161463f565b93505060206148278682870161463f565b9250506040614838868287016146fe565b9150509250925092565b6000806040838503121561485957614858615532565b5b60006148678582860161463f565b9250506020614878858286016146d4565b9150509250929050565b6000806040838503121561489957614898615532565b5b60006148a78582860161463f565b92505060206148b8858286016146fe565b9150509250929050565b600080602083850312156148d9576148d8615532565b5b600083013567ffffffffffffffff8111156148f7576148f661552d565b5b6149038582860161467e565b92509250509250929050565b60008060006040848603121561492857614927615532565b5b600084013567ffffffffffffffff8111156149465761494561552d565b5b6149528682870161467e565b93509350506020614965868287016146d4565b9150509250925092565b60006020828403121561498557614984615532565b5b6000614993848285016146d4565b91505092915050565b6000602082840312156149b2576149b1615532565b5b60006149c0848285016146e9565b91505092915050565b6000602082840312156149df576149de615532565b5b60006149ed848285016146fe565b91505092915050565b600080600060608486031215614a0f57614a0e615532565b5b6000614a1d86828701614713565b9350506020614a2e86828701614713565b9250506040614a3f86828701614713565b9150509250925092565b6000614a558383614a61565b60208301905092915050565b614a6a8161536d565b82525050565b614a798161536d565b82525050565b6000614a8a82615208565b614a94818561522b565b9350614a9f836151f8565b8060005b83811015614ad0578151614ab78882614a49565b9750614ac28361521e565b925050600181019050614aa3565b5085935050505092915050565b614ae681615391565b82525050565b614af5816153d4565b82525050565b6000614b0682615213565b614b108185615247565b9350614b208185602086016153e6565b614b2981615537565b840191505092915050565b6000614b41602383615247565b9150614b4c82615548565b604082019050919050565b6000614b64602a83615247565b9150614b6f82615597565b604082019050919050565b6000614b87602683615247565b9150614b92826155e6565b604082019050919050565b6000614baa602283615247565b9150614bb582615635565b604082019050919050565b6000614bcd601b83615247565b9150614bd882615684565b602082019050919050565b6000614bf0603983615247565b9150614bfb826156ad565b604082019050919050565b6000614c13603183615247565b9150614c1e826156fc565b604082019050919050565b6000614c36602183615247565b9150614c418261574b565b604082019050919050565b6000614c59602083615247565b9150614c648261579a565b602082019050919050565b6000614c7c602983615247565b9150614c87826157c3565b604082019050919050565b6000614c9f602583615247565b9150614caa82615812565b604082019050919050565b6000614cc2602383615247565b9150614ccd82615861565b604082019050919050565b6000614ce560008361523c565b9150614cf0826158b0565b600082019050919050565b6000614d08602483615247565b9150614d13826158b3565b604082019050919050565b6000614d2b601783615247565b9150614d3682615902565b602082019050919050565b6000614d4e601f83615247565b9150614d598261592b565b602082019050919050565b6000614d71601883615247565b9150614d7c82615954565b602082019050919050565b6000614d94602383615247565b9150614d9f8261597d565b604082019050919050565b614db3816153bd565b82525050565b614dc2816153c7565b82525050565b6000614dd382614cd8565b9150819050919050565b6000602082019050614df26000830184614a70565b92915050565b6000604082019050614e0d6000830185614a70565b614e1a6020830184614a70565b9392505050565b6000604082019050614e366000830185614a70565b614e436020830184614daa565b9392505050565b600060c082019050614e5f6000830189614a70565b614e6c6020830188614daa565b614e796040830187614aec565b614e866060830186614aec565b614e936080830185614a70565b614ea060a0830184614daa565b979650505050505050565b6000602082019050614ec06000830184614add565b92915050565b6000604082019050614edb6000830185614add565b614ee86020830184614add565b9392505050565b60006020820190508181036000830152614f098184614afb565b905092915050565b60006020820190508181036000830152614f2a81614b34565b9050919050565b60006020820190508181036000830152614f4a81614b57565b9050919050565b60006020820190508181036000830152614f6a81614b7a565b9050919050565b60006020820190508181036000830152614f8a81614b9d565b9050919050565b60006020820190508181036000830152614faa81614bc0565b9050919050565b60006020820190508181036000830152614fca81614be3565b9050919050565b60006020820190508181036000830152614fea81614c06565b9050919050565b6000602082019050818103600083015261500a81614c29565b9050919050565b6000602082019050818103600083015261502a81614c4c565b9050919050565b6000602082019050818103600083015261504a81614c6f565b9050919050565b6000602082019050818103600083015261506a81614c92565b9050919050565b6000602082019050818103600083015261508a81614cb5565b9050919050565b600060208201905081810360008301526150aa81614cfb565b9050919050565b600060208201905081810360008301526150ca81614d1e565b9050919050565b600060208201905081810360008301526150ea81614d41565b9050919050565b6000602082019050818103600083015261510a81614d64565b9050919050565b6000602082019050818103600083015261512a81614d87565b9050919050565b60006020820190506151466000830184614daa565b92915050565b600060a0820190506151616000830188614daa565b61516e6020830187614aec565b81810360408301526151808186614a7f565b905061518f6060830185614a70565b61519c6080830184614daa565b9695505050505050565b60006060820190506151bb6000830186614daa565b6151c86020830185614daa565b6151d56040830184614daa565b949350505050565b60006020820190506151f26000830184614db9565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615263826153bd565b915061526e836153bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152a3576152a2615462565b5b828201905092915050565b60006152b9826153bd565b91506152c4836153bd565b9250826152d4576152d3615491565b5b828204905092915050565b60006152ea826153bd565b91506152f5836153bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561532e5761532d615462565b5b828202905092915050565b6000615344826153bd565b915061534f836153bd565b92508282101561536257615361615462565b5b828203905092915050565b60006153788261539d565b9050919050565b600061538a8261539d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006153df826153bd565b9050919050565b60005b838110156154045780820151818401526020810190506153e9565b83811115615413576000848401525b50505050565b6000615424826153bd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561545757615456615462565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f6c6971756964697479206665652070657263656e74616765206d75737420626560008201527f206265747765656e203020746f20313030000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6159d58161536d565b81146159e057600080fd5b50565b6159ec8161537f565b81146159f757600080fd5b50565b615a0381615391565b8114615a0e57600080fd5b50565b615a1a816153bd565b8114615a2557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f3e9bc82e323e77aa6b744adff1db968ebca80459d4e6cc4299ff3d02af5633064736f6c63430008070033

Deployed Bytecode Sourcemap

11949:17453:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14573:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27967:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24664:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25430:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27392:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28136:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26063:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26598:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27301:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26164:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23831:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25572:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23389:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26437:153;;;;;;;;;;;;;:::i;:::-;;27495:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9853:148;;;;;;;;;;;;;:::i;:::-;;24074:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24783:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9210:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25163:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24907:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27206:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26815:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10875:305;;;;;;;;;;;;;:::i;:::-;;27641:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25779:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10408:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24542:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26265:160;;;;;;;;;;;;;:::i;:::-;;25044:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22610:767;;;;;;;;;;;;;:::i;:::-;;23955:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24194:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26706:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10573:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27816:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25681:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24412:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23621:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10156:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14573:83;14610:13;14643:5;;;;;;;;;;;;;;;;;14636:12;;14573:83;:::o;27967:161::-;28042:4;28059:39;28068:12;:10;:12::i;:::-;28082:7;28091:6;28059:8;:39::i;:::-;28116:4;28109:11;;27967:161;;;;:::o;24664:111::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24741:1:::1;24734:3;:8;;24726:17;;;::::0;::::1;;24764:3;24754:7;:13;;;;24664:111:::0;:::o;25430:134::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25551:5:::1;25540:8;:16;;;;:::i;:::-;25514:23;:42;;;;25430:134:::0;:::o;27392:95::-;27445:7;12259:12;27465:14;;27392:95;:::o;28136:313::-;28234:4;28251:36;28261:6;28269:9;28280:6;28251:9;:36::i;:::-;28298:121;28307:6;28315:12;:10;:12::i;:::-;28329:89;28367:6;28329:89;;;;;;;;;;;;;;;;;:11;:19;28341:6;28329:19;;;;;;;;;;;;;;;:33;28349:12;:10;:12::i;:::-;28329:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;28298:8;:121::i;:::-;28437:4;28430:11;;28136:313;;;;;:::o;26063:89::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26139:5:::1;26123;:13;26129:6;26123:13;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26063:89:::0;:::o;26598:100::-;26642:4;26666:24;26684:4;26666:9;:24::i;:::-;26659:31;;26598:100;:::o;27301:83::-;27342:5;12165:1;27360:16;;27301:83;:::o;26164:89::-;26212:4;26236:5;:9;26242:2;26236:9;;;;;;;;;;;;;;;;;;;;;;;;;26229:16;;26164:89;;;:::o;23831:112::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23931:4:::1;23906:18;:22;23925:2;23906:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23831:112:::0;:::o;25572:101::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25660:5:::1;25654:3;:11;;;;:::i;:::-;25637:14;:28;;;;25572:101:::0;:::o;23389:224::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23514:5:::1;23475:18;:36;23494:16;;;;;;;;;;;23475:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;23549:9;23530:16;;:28;;;;;;;;;;;;;;;;;;23601:4;23569:18;:29;23588:9;23569:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23389:224:::0;:::o;26437:153::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26489:26:::1;26518:21;26489:50;;26550:32;26563:18;26550:12;:32::i;:::-;26478:112;26437:153::o:0;27495:138::-;27561:7;27588:37;27608:7;:16;27616:7;27608:16;;;;;;;;;;;;;;;;27588:19;:37::i;:::-;27581:44;;27495:138;;;:::o;9853:148::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9960:1:::1;9923:40;;9944:6;::::0;::::1;;;;;;;;9923:40;;;;;;;;;;;;9991:1;9974:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9853:148::o:0;24074:112::-;24132:4;24156:18;:22;24175:2;24156:22;;;;;;;;;;;;;;;;;;;;;;;;;24149:29;;24074:112;;;:::o;24783:116::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24863:1:::1;24855:4;:9;;24847:18;;;::::0;::::1;;24887:4;24876:8;:15;;;;24783:116:::0;:::o;9210:79::-;9248:7;9275:6;;;;;;;;;;;9268:13;;9210:79;:::o;25163:259::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25276:1:::1;25249:23;;:28;;:62;;;;;25308:3;25281:23;;:30;;25249:62;25241:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;25402:12;25376:23;:38;;;;25163:259:::0;:::o;24907:121::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24989:1:::1;24982:3;:8;;24974:17;;;::::0;::::1;;25017:3;25002:12;:18;;;;24907:121:::0;:::o;27206:87::-;27245:13;27278:7;;;;;;;;;;;;;;;;;27271:14;;27206:87;:::o;26815:244::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26924:13:::1;;;;;;;;;;;26916:21;;:4;:21;;;;26908:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;27010:41;27039:4;27045:5;27010:28;:41::i;:::-;26815:244:::0;;:::o;10875:305::-;10945:10;10927:28;;:14;;;;;;;;;;;:28;;;10919:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;11032:9;;11014:15;:27;11006:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11123:14;;;;;;;;;;;11094:44;;11115:6;;;;;;;;;;11094:44;;;;;;;;;;;;11158:14;;;;;;;;;;;11149:6;;:23;;;;;;;;;;;;;;;;;;10875:305::o;27641:167::-;27719:4;27736:42;27746:12;:10;:12::i;:::-;27760:9;27771:6;27736:9;:42::i;:::-;27796:4;27789:11;;27641:167;;;;:::o;25779:272::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25855:6:::1;25850:194;25871:5;;:12;;25867:1;:16;25850:194;;;25921:13;;;;;;;;;;;25909:25;;:5;;25915:1;25909:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:25;;;;:65;;;;;25958:15;;;;;;;;;;;25938:36;;:5;;25944:1;25938:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:36;;;;25909:65;25905:128;;;26013:4;25995:5;:15;26001:5;;26007:1;26001:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25995:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;25905:128;25885:3;;;;;:::i;:::-;;;;25850:194;;;;25779:272:::0;;:::o;10408:89::-;10453:7;10480:9;;10473:16;;10408:89;:::o;24542:110::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24639:5:::1;24616:20;;:28;;;;;;;;;;;;;;;;;;24542:110:::0;:::o;26265:160::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26317:23:::1;26343:24;26361:4;26343:9;:24::i;:::-;26317:50;;26378:39;26401:15;26378:22;:39::i;:::-;26306:119;26265:160::o:0;25044:111::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25121:1:::1;25114:3;:8;;25106:17;;;::::0;::::1;;25144:3;25134:7;:13;;;;25044:111:::0;:::o;22610:767::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22674:11:::1;;;;;;;;;;;22673:12;22665:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22723:35;22780:42;22723:100;;22852:16;22834:15;;:34;;;;;;;;;;;;;;;;;;22879:58;22896:4;22911:15;;;;;;;;;;;12259:12;22879:8;:58::i;:::-;22982:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22964:56;;;23029:4;23036:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22964:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22948:13;;:112;;;;;;;;;;;;;;;;;;23071:15;;;;;;;;;;;:31;;;23110:21;23141:4;23147:24;23165:4;23147:9;:24::i;:::-;23172:1;23174::::0;23176:7:::1;:5;:7::i;:::-;23184:15;23071:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23218:13;;;;;;;;;;;23211:29;;;23249:15;;;;;;;;;;;23267:14;23211:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23307:4;23293:11;;:18;;;;;;;;;;;;;;;;;;23365:4;23322:25;:40;23348:13;;;;;;;;;;;23322:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;22654:723;22610:767::o:0;23955:111::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24053:5:::1;24028:18;:22;24047:2;24028:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;23955:111:::0;:::o;24194:206::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24293:6:::1;24288:105;24309:3;;:10;;24305:1;:14;24288:105;;;24376:5;24341:24;:32;24366:3;;24370:1;24366:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24341:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;24321:3;;;;;:::i;:::-;;;;24288:105;;;;24194:206:::0;;;:::o;26706:101::-;26751:4;26775:24;26785:13;;;;;;;;;;;26775:9;:24::i;:::-;26768:31;;26706:101;:::o;10573:226::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10654:6:::1;::::0;::::1;;;;;;;;10637:14;;:23;;;;;;;;;;;;;;;;;;10688:1;10671:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;10731:4;10713:15;:22;;;;:::i;:::-;10701:9;:34;;;;10788:1;10751:40;;10772:6;::::0;::::1;;;;;;;;10751:40;;;;;;;;;;;;10573:226:::0;:::o;27816:143::-;27897:7;27924:11;:18;27936:5;27924:18;;;;;;;;;;;;;;;:27;27943:7;27924:27;;;;;;;;;;;;;;;;27917:34;;27816:143;;;;:::o;25681:86::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25754:5:::1;25743:8;;:16;;;;;;;;;;;;;;;;;;25681:86:::0;:::o;24412:122::-;24474:4;24498:24;:28;24523:2;24498:28;;;;;;;;;;;;;;;;;;;;;;;;;24491:35;;24412:122;;;:::o;23621:202::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23733:5:::1;23701:18;:29;23720:9;;;;;;;;;;;23701:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;23761:8;23749:9;;:20;;;;;;;;;;;;;;;;;;23811:4;23780:18;:28;23799:8;23780:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;23621:202:::0;:::o;10156:244::-;9432:12;:10;:12::i;:::-;9422:22;;:6;;;;;;;;;;:22;;;9414:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10265:1:::1;10245:22;;:8;:22;;;;10237:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10355:8;10326:38;;10347:6;::::0;::::1;;;;;;;;10326:38;;;;;;;;;;;;10384:8;10375:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;10156:244:::0;:::o;8037:98::-;8090:7;8117:10;8110:17;;8037:98;:::o;29064:335::-;29174:1;29157:19;;:5;:19;;;;29149:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29255:1;29236:21;;:7;:21;;;;29228:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29337:6;29307:11;:18;29319:5;29307:18;;;;;;;;;;;;;;;:27;29326:7;29307:27;;;;;;;;;;;;;;;:36;;;;29375:7;29359:32;;29368:5;29359:32;;;29384:6;29359:32;;;;;;:::i;:::-;;;;;;;;29064:335;;;:::o;14668:2002::-;14772:1;14756:18;;:4;:18;;;;14748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14849:1;14835:16;;:2;:16;;;;14827:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14919:1;14910:6;:10;14902:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14990:7;:5;:7::i;:::-;14982:15;;:4;:15;;;;:32;;;;;15007:7;:5;:7::i;:::-;15001:13;;:2;:13;;;;14982:32;14979:1237;;;15054:5;:11;15060:4;15054:11;;;;;;;;;;;;;;;;;;;;;;;;;15053:12;:26;;;;;15070:5;:9;15076:2;15070:9;;;;;;;;;;;;;;;;;;;;;;;;;15069:10;15053:26;15045:35;;;;;;15106:13;;;;;;;;;;;15100:19;;:2;:19;;;;:52;;;;;15124:24;:28;15149:2;15124:28;;;;;;;;;;;;;;;;;;;;;;;;;15123:29;15100:52;15097:189;;;15216:14;;15206:6;15181:22;15199:2;15181:9;:22::i;:::-;:31;;;;:::i;:::-;:49;;15173:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;15097:189;15325:13;;;;;;;;;;;15317:21;;:4;:21;;;:55;;;;;15356:15;;;;;;;;;;;15342:30;;:2;:30;;;;15317:55;:82;;;;;15377:18;:22;15396:2;15377:22;;;;;;;;;;;;;;;;;;;;;;;;;15376:23;15317:82;15314:207;;;15428:11;;;;;;;;;;;15420:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;15498:7;;15487:8;:18;;;;15314:207;15535:28;15566:24;15584:4;15566:9;:24::i;:::-;15535:55;;15611:6;;;;;;;;;;;15610:7;:32;;;;;15629:13;;;;;;;;;;;15621:21;;:4;:21;;;;15610:32;:47;;;;;15646:11;;;;;;;;;;;15610:47;15607:598;;;15691:8;;15680;:19;;;;15746:23;;15723:20;:46;15720:470;;;15798:8;;;;;;;;;;;15794:111;;15858:23;;15835:46;;15794:111;15959:1;15933:23;;:27;15929:217;;;15989:36;16004:20;15989:14;:36::i;:::-;15929:217;;;16082:40;16101:20;16082:18;:40::i;:::-;15929:217;15720:470;15607:598;15016:1200;14979:1237;16226:12;16241:4;16226:19;;16261:18;:24;16280:4;16261:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;16289:18;:22;16308:2;16289:22;;;;;;;;;;;;;;;;;;;;;;;;;16261:50;16258:97;;;16338:5;16328:15;;16258:97;16371:25;:31;16397:4;16371:31;;;;;;;;;;;;;;;;;;;;;;;;;16370:32;:66;;;;;16407:25;:29;16433:2;16407:29;;;;;;;;;;;;;;;;;;;;;;;;;16406:30;16370:66;16367:237;;;16457:20;;;;;;;;;;;16453:140;;;16509:12;;16498:8;:23;;;;16453:140;;;16572:5;16562:15;;16453:140;16367:237;16624:38;16639:4;16644:2;16647:6;16654:7;16624:14;:38::i;:::-;14737:1933;14668:2002;;;:::o;4447:192::-;4533:7;4566:1;4561;:6;;4569:12;4553:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4593:9;4609:1;4605;:5;;;;:::i;:::-;4593:17;;4630:1;4623:8;;;4447:192;;;;;:::o;19474:251::-;19532:13;19551:9;;;;;;;;;;;:14;;19573:13;19584:1;19573:6;:10;;:13;;;;:::i;:::-;19551:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19531:60;;;19603:14;19623:16;;;;;;;;;;;:21;;19652:13;19663:1;19652:6;:10;;:13;;;;:::i;:::-;19623:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19602:68;;;19688:29;19697:8;19707:9;19688:29;;;;;;;:::i;:::-;;;;;;;;19520:205;;19474:251;:::o;28457:254::-;28524:7;28563;;28552;:18;;28544:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28628:19;28651:10;:8;:10::i;:::-;28628:33;;28679:24;28691:11;28679:7;:11;;:24;;;;:::i;:::-;28672:31;;;28457:254;;;:::o;27067:130::-;27184:5;27150:25;:31;27176:4;27150:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27067:130;;:::o;18969:489::-;13791:4;13782:6;;:13;;;;;;;;;;;;;;;;;;19053:21:::1;19091:1;19077:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19053:40;;19122:4;19104;19109:1;19104:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;19148:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19138:4;19143:1;19138:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;19181:62;19198:4;19213:15;;;;;;;;;;;19231:11;19181:8;:62::i;:::-;19254:15;;;;;;;;;;;:66;;;19335:11;19361:1;19377:4;19404;19424:15;19254:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19042:416;13827:5:::0;13818:6;;:14;;;;;;;;;;;;;;;;;;18969:489;:::o;17199:968::-;13791:4;13782:6;;:13;;;;;;;;;;;;;;;;;;17284:25:::1;17318:23;;17312:3;:29;;;;:::i;:::-;17284:57;;17352:23;17378:58;17432:3;17378:49;17403:23;;17378:20;:24;;:49;;;;:::i;:::-;:53;;:58;;;;:::i;:::-;17352:84;;17447:15;17465:22;17485:1;17465:15;:19;;:22;;;;:::i;:::-;17447:40;;17500:26;17529:33;17554:7;17529:20;:24;;:33;;;;:::i;:::-;17500:62;;17573:25;17601:21;17573:49;;17635:36;17652:18;17635:16;:36::i;:::-;17684:18;17705:44;17731:17;17705:21;:25;;:44;;;;:::i;:::-;17684:65;;17762:18;17783:42;17821:3;17783:33;17798:17;17783:10;:14;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;17762:63;;17836:24;17849:10;17836:12;:24::i;:::-;17873:23;17912:10;17899;:23;;;;:::i;:::-;17873:49;;17949:1;17939:7;:11;:34;;;;;17972:1;17954:15;:19;17939:34;17935:225;;;18020:38;18033:7;18042:15;18020:12;:38::i;:::-;18080:68;18095:18;18115:15;18132;18080:68;;;;;;;;:::i;:::-;;;;;;;;17935:225;17273:894;;;;;;;;13827:5:::0;13818:6;;:14;;;;;;;;;;;;;;;;;;17199:968;:::o;18175:307::-;13791:4;13782:6;;:13;;;;;;;;;;;;;;;;;;18274:38:::1;18291:20;18274:16;:38::i;:::-;18325:26;18354:21;18325:50;;18410:1;18389:18;:22;18386:89;;;18428:35;18441:21;18428:12;:35::i;:::-;18386:89;18253:229;13827:5:::0;13818:6;;:14;;;;;;;;;;;;;;;;;;18175:307;:::o;19737:263::-;19849:7;19845:40;;19871:14;:12;:14::i;:::-;19845:40;19896:44;19914:6;19922:9;19933:6;19896:17;:44::i;:::-;19955:7;19951:41;;19977:15;:13;:15::i;:::-;19951:41;19737:263;;;;:::o;5845:132::-;5903:7;5930:39;5934:1;5937;5930:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5923:46;;5845:132;;;;:::o;21341:163::-;21382:7;21403:15;21420;21439:19;:17;:19::i;:::-;21402:56;;;;21476:20;21488:7;21476;:11;;:20;;;;:::i;:::-;21469:27;;;;21341:163;:::o;4898:471::-;4956:7;5206:1;5201;:6;5197:47;;;5231:1;5224:8;;;;5197:47;5256:9;5272:1;5268;:5;;;;:::i;:::-;5256:17;;5301:1;5296;5292;:5;;;;:::i;:::-;:10;5284:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5360:1;5353:8;;;4898:471;;;;;:::o;4008:136::-;4066:7;4093:43;4097:1;4100;4093:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4086:50;;4008:136;;;;:::o;18490:471::-;18556:21;18594:1;18580:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18556:40;;18625:4;18607;18612:1;18607:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;18651:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18641:4;18646:1;18641:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;18684:62;18701:4;18716:15;;;;;;;;;;;18734:11;18684:8;:62::i;:::-;18757:15;;;;;;;;;;;:66;;;18838:11;18864:1;18880:4;18907;18927:15;18757:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18545:416;18490:471;:::o;16678:513::-;16826:62;16843:4;16858:15;;;;;;;;;;;16876:11;16826:8;:62::i;:::-;16931:15;;;;;;;;;;;:31;;;16970:9;17003:4;17023:11;17049:1;17092;17135:7;:5;:7::i;:::-;17157:15;16931:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16678:513;;:::o;28719:210::-;28776:1;28765:7;;:12;:29;;;;;28793:1;28781:8;;:13;28765:29;28762:41;;;28796:7;;28762:41;28831:7;;28813:15;:25;;;;28868:8;;28849:16;:27;;;;28897:1;28887:7;:11;;;;28920:1;28909:8;:12;;;;28719:210;:::o;20008:490::-;20107:15;20124:23;20149:12;20163:23;20188:12;20202:13;20219:19;20230:7;20219:10;:19::i;:::-;20106:132;;;;;;;;;;;;20267:28;20287:7;20267;:15;20275:6;20267:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20249:7;:15;20257:6;20249:15;;;;;;;;;;;;;;;:46;;;;20327:39;20350:15;20327:7;:18;20335:9;20327:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20306:7;:18;20314:9;20306:18;;;;;;;;;;;;;;;:60;;;;20380:16;20390:5;20380:9;:16::i;:::-;20407:23;20419:4;20425;20407:11;:23::i;:::-;20463:9;20446:44;;20455:6;20446:44;;;20474:15;20446:44;;;;;;:::i;:::-;;;;;;;;20095:403;;;;;;20008:490;;;:::o;28941:115::-;28995:15;;28985:7;:25;;;;29032:16;;29021:8;:27;;;;28941:115::o;6473:278::-;6559:7;6591:1;6587;:5;6594:12;6579:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6618:9;6634:1;6630;:5;;;;:::i;:::-;6618:17;;6742:1;6735:8;;;6473:278;;;;;:::o;21512:255::-;21562:7;21571;21591:15;21609:7;;21591:25;;21627:15;12259:12;21627:25;;21676:20;12259:12;21676:7;;:11;;:20;;;;:::i;:::-;21666:7;:30;21663:60;;;21706:7;;12259:12;21698:25;;;;;;;;21663:60;21742:7;21751;21734:25;;;;;;21512:255;;;:::o;20506:468::-;20565:7;20574;20583;20592;20601;20610;20631:23;20656:12;20670:13;20687:39;20699:7;20708;;20717:8;;20687:11;:39::i;:::-;20630:96;;;;;;20737:19;20760:10;:8;:10::i;:::-;20737:33;;20782:15;20799:23;20824:12;20840:46;20852:7;20861:4;20867:5;20874:11;20840;:46::i;:::-;20781:105;;;;;;20905:7;20914:15;20931:4;20937:15;20954:4;20960:5;20897:69;;;;;;;;;;;;;;;;;;;20506:468;;;;;;;:::o;3544:181::-;3602:7;3622:9;3638:1;3634;:5;;;;:::i;:::-;3622:17;;3663:1;3658;:6;;3650:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3716:1;3709:8;;;3544:181;;;;:::o;22192:214::-;22245:19;22268:10;:8;:10::i;:::-;22245:33;;22289:13;22305:22;22315:11;22305:5;:9;;:22;;;;:::i;:::-;22289:38;;22365:33;22392:5;22365:7;:22;22381:4;22365:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;22340:7;:22;22356:4;22340:22;;;;;;;;;;;;;;;:58;;;;22234:172;;22192:214;:::o;22414:147::-;22492:17;22504:4;22492:7;;:11;;:17;;;;:::i;:::-;22482:7;:27;;;;22533:20;22548:4;22533:10;;:14;;:20;;;;:::i;:::-;22520:10;:33;;;;22414:147;;:::o;20982:351::-;21075:7;21084;21093;21113:12;21128:28;21152:3;21128:19;21140:6;21128:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;21113:43;;21167:13;21183:29;21208:3;21183:20;21195:7;21183;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;21167:45;;21223:23;21249:28;21271:5;21249:17;21261:4;21249:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;21223:54;;21296:15;21313:4;21319:5;21288:37;;;;;;;;;20982:351;;;;;;;:::o;21775:409::-;21885:7;21894;21903;21923:15;21941:24;21953:11;21941:7;:11;;:24;;;;:::i;:::-;21923:42;;21976:12;21991:21;22000:11;21991:4;:8;;:21;;;;:::i;:::-;21976:36;;22023:13;22039:22;22049:11;22039:5;:9;;:22;;;;:::i;:::-;22023:38;;22072:23;22098:28;22120:5;22098:17;22110:4;22098:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;22072:54;;22145:7;22154:15;22171:4;22137:39;;;;;;;;;;21775:409;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;301:155;;;;:::o;479:568::-;552:8;562:6;612:3;605:4;597:6;593:17;589:27;579:122;;620:79;;:::i;:::-;579:122;733:6;720:20;710:30;;763:18;755:6;752:30;749:117;;;785:79;;:::i;:::-;749:117;899:4;891:6;887:17;875:29;;953:3;945:4;937:6;933:17;923:8;919:32;916:41;913:128;;;960:79;;:::i;:::-;913:128;479:568;;;;;:::o;1053:133::-;1096:5;1134:6;1121:20;1112:29;;1150:30;1174:5;1150:30;:::i;:::-;1053:133;;;;:::o;1192:137::-;1246:5;1277:6;1271:13;1262:22;;1293:30;1317:5;1293:30;:::i;:::-;1192:137;;;;:::o;1335:139::-;1381:5;1419:6;1406:20;1397:29;;1435:33;1462:5;1435:33;:::i;:::-;1335:139;;;;:::o;1480:143::-;1537:5;1568:6;1562:13;1553:22;;1584:33;1611:5;1584:33;:::i;:::-;1480:143;;;;:::o;1629:329::-;1688:6;1737:2;1725:9;1716:7;1712:23;1708:32;1705:119;;;1743:79;;:::i;:::-;1705:119;1863:1;1888:53;1933:7;1924:6;1913:9;1909:22;1888:53;:::i;:::-;1878:63;;1834:117;1629:329;;;;:::o;1964:351::-;2034:6;2083:2;2071:9;2062:7;2058:23;2054:32;2051:119;;;2089:79;;:::i;:::-;2051:119;2209:1;2234:64;2290:7;2281:6;2270:9;2266:22;2234:64;:::i;:::-;2224:74;;2180:128;1964:351;;;;:::o;2321:345::-;2388:6;2437:2;2425:9;2416:7;2412:23;2408:32;2405:119;;;2443:79;;:::i;:::-;2405:119;2563:1;2588:61;2641:7;2632:6;2621:9;2617:22;2588:61;:::i;:::-;2578:71;;2534:125;2321:345;;;;:::o;2672:474::-;2740:6;2748;2797:2;2785:9;2776:7;2772:23;2768:32;2765:119;;;2803:79;;:::i;:::-;2765:119;2923:1;2948:53;2993:7;2984:6;2973:9;2969:22;2948:53;:::i;:::-;2938:63;;2894:117;3050:2;3076:53;3121:7;3112:6;3101:9;3097:22;3076:53;:::i;:::-;3066:63;;3021:118;2672:474;;;;;:::o;3152:619::-;3229:6;3237;3245;3294:2;3282:9;3273:7;3269:23;3265:32;3262:119;;;3300:79;;:::i;:::-;3262:119;3420:1;3445:53;3490:7;3481:6;3470:9;3466:22;3445:53;:::i;:::-;3435:63;;3391:117;3547:2;3573:53;3618:7;3609:6;3598:9;3594:22;3573:53;:::i;:::-;3563:63;;3518:118;3675:2;3701:53;3746:7;3737:6;3726:9;3722:22;3701:53;:::i;:::-;3691:63;;3646:118;3152:619;;;;;:::o;3777:468::-;3842:6;3850;3899:2;3887:9;3878:7;3874:23;3870:32;3867:119;;;3905:79;;:::i;:::-;3867:119;4025:1;4050:53;4095:7;4086:6;4075:9;4071:22;4050:53;:::i;:::-;4040:63;;3996:117;4152:2;4178:50;4220:7;4211:6;4200:9;4196:22;4178:50;:::i;:::-;4168:60;;4123:115;3777:468;;;;;:::o;4251:474::-;4319:6;4327;4376:2;4364:9;4355:7;4351:23;4347:32;4344:119;;;4382:79;;:::i;:::-;4344:119;4502:1;4527:53;4572:7;4563:6;4552:9;4548:22;4527:53;:::i;:::-;4517:63;;4473:117;4629:2;4655:53;4700:7;4691:6;4680:9;4676:22;4655:53;:::i;:::-;4645:63;;4600:118;4251:474;;;;;:::o;4731:559::-;4817:6;4825;4874:2;4862:9;4853:7;4849:23;4845:32;4842:119;;;4880:79;;:::i;:::-;4842:119;5028:1;5017:9;5013:17;5000:31;5058:18;5050:6;5047:30;5044:117;;;5080:79;;:::i;:::-;5044:117;5193:80;5265:7;5256:6;5245:9;5241:22;5193:80;:::i;:::-;5175:98;;;;4971:312;4731:559;;;;;:::o;5296:698::-;5388:6;5396;5404;5453:2;5441:9;5432:7;5428:23;5424:32;5421:119;;;5459:79;;:::i;:::-;5421:119;5607:1;5596:9;5592:17;5579:31;5637:18;5629:6;5626:30;5623:117;;;5659:79;;:::i;:::-;5623:117;5772:80;5844:7;5835:6;5824:9;5820:22;5772:80;:::i;:::-;5754:98;;;;5550:312;5901:2;5927:50;5969:7;5960:6;5949:9;5945:22;5927:50;:::i;:::-;5917:60;;5872:115;5296:698;;;;;:::o;6000:323::-;6056:6;6105:2;6093:9;6084:7;6080:23;6076:32;6073:119;;;6111:79;;:::i;:::-;6073:119;6231:1;6256:50;6298:7;6289:6;6278:9;6274:22;6256:50;:::i;:::-;6246:60;;6202:114;6000:323;;;;:::o;6329:345::-;6396:6;6445:2;6433:9;6424:7;6420:23;6416:32;6413:119;;;6451:79;;:::i;:::-;6413:119;6571:1;6596:61;6649:7;6640:6;6629:9;6625:22;6596:61;:::i;:::-;6586:71;;6542:125;6329:345;;;;:::o;6680:329::-;6739:6;6788:2;6776:9;6767:7;6763:23;6759:32;6756:119;;;6794:79;;:::i;:::-;6756:119;6914:1;6939:53;6984:7;6975:6;6964:9;6960:22;6939:53;:::i;:::-;6929:63;;6885:117;6680:329;;;;:::o;7015:663::-;7103:6;7111;7119;7168:2;7156:9;7147:7;7143:23;7139:32;7136:119;;;7174:79;;:::i;:::-;7136:119;7294:1;7319:64;7375:7;7366:6;7355:9;7351:22;7319:64;:::i;:::-;7309:74;;7265:128;7432:2;7458:64;7514:7;7505:6;7494:9;7490:22;7458:64;:::i;:::-;7448:74;;7403:129;7571:2;7597:64;7653:7;7644:6;7633:9;7629:22;7597:64;:::i;:::-;7587:74;;7542:129;7015:663;;;;;:::o;7684:179::-;7753:10;7774:46;7816:3;7808:6;7774:46;:::i;:::-;7852:4;7847:3;7843:14;7829:28;;7684:179;;;;:::o;7869:108::-;7946:24;7964:5;7946:24;:::i;:::-;7941:3;7934:37;7869:108;;:::o;7983:118::-;8070:24;8088:5;8070:24;:::i;:::-;8065:3;8058:37;7983:118;;:::o;8137:732::-;8256:3;8285:54;8333:5;8285:54;:::i;:::-;8355:86;8434:6;8429:3;8355:86;:::i;:::-;8348:93;;8465:56;8515:5;8465:56;:::i;:::-;8544:7;8575:1;8560:284;8585:6;8582:1;8579:13;8560:284;;;8661:6;8655:13;8688:63;8747:3;8732:13;8688:63;:::i;:::-;8681:70;;8774:60;8827:6;8774:60;:::i;:::-;8764:70;;8620:224;8607:1;8604;8600:9;8595:14;;8560:284;;;8564:14;8860:3;8853:10;;8261:608;;;8137:732;;;;:::o;8875:109::-;8956:21;8971:5;8956:21;:::i;:::-;8951:3;8944:34;8875:109;;:::o;8990:147::-;9085:45;9124:5;9085:45;:::i;:::-;9080:3;9073:58;8990:147;;:::o;9143:364::-;9231:3;9259:39;9292:5;9259:39;:::i;:::-;9314:71;9378:6;9373:3;9314:71;:::i;:::-;9307:78;;9394:52;9439:6;9434:3;9427:4;9420:5;9416:16;9394:52;:::i;:::-;9471:29;9493:6;9471:29;:::i;:::-;9466:3;9462:39;9455:46;;9235:272;9143:364;;;;:::o;9513:366::-;9655:3;9676:67;9740:2;9735:3;9676:67;:::i;:::-;9669:74;;9752:93;9841:3;9752:93;:::i;:::-;9870:2;9865:3;9861:12;9854:19;;9513:366;;;:::o;9885:::-;10027:3;10048:67;10112:2;10107:3;10048:67;:::i;:::-;10041:74;;10124:93;10213:3;10124:93;:::i;:::-;10242:2;10237:3;10233:12;10226:19;;9885:366;;;:::o;10257:::-;10399:3;10420:67;10484:2;10479:3;10420:67;:::i;:::-;10413:74;;10496:93;10585:3;10496:93;:::i;:::-;10614:2;10609:3;10605:12;10598:19;;10257:366;;;:::o;10629:::-;10771:3;10792:67;10856:2;10851:3;10792:67;:::i;:::-;10785:74;;10868:93;10957:3;10868:93;:::i;:::-;10986:2;10981:3;10977:12;10970:19;;10629:366;;;:::o;11001:::-;11143:3;11164:67;11228:2;11223:3;11164:67;:::i;:::-;11157:74;;11240:93;11329:3;11240:93;:::i;:::-;11358:2;11353:3;11349:12;11342:19;;11001:366;;;:::o;11373:::-;11515:3;11536:67;11600:2;11595:3;11536:67;:::i;:::-;11529:74;;11612:93;11701:3;11612:93;:::i;:::-;11730:2;11725:3;11721:12;11714:19;;11373:366;;;:::o;11745:::-;11887:3;11908:67;11972:2;11967:3;11908:67;:::i;:::-;11901:74;;11984:93;12073:3;11984:93;:::i;:::-;12102:2;12097:3;12093:12;12086:19;;11745:366;;;:::o;12117:::-;12259:3;12280:67;12344:2;12339:3;12280:67;:::i;:::-;12273:74;;12356:93;12445:3;12356:93;:::i;:::-;12474:2;12469:3;12465:12;12458:19;;12117:366;;;:::o;12489:::-;12631:3;12652:67;12716:2;12711:3;12652:67;:::i;:::-;12645:74;;12728:93;12817:3;12728:93;:::i;:::-;12846:2;12841:3;12837:12;12830:19;;12489:366;;;:::o;12861:::-;13003:3;13024:67;13088:2;13083:3;13024:67;:::i;:::-;13017:74;;13100:93;13189:3;13100:93;:::i;:::-;13218:2;13213:3;13209:12;13202:19;;12861:366;;;:::o;13233:::-;13375:3;13396:67;13460:2;13455:3;13396:67;:::i;:::-;13389:74;;13472:93;13561:3;13472:93;:::i;:::-;13590:2;13585:3;13581:12;13574:19;;13233:366;;;:::o;13605:::-;13747:3;13768:67;13832:2;13827:3;13768:67;:::i;:::-;13761:74;;13844:93;13933:3;13844:93;:::i;:::-;13962:2;13957:3;13953:12;13946:19;;13605:366;;;:::o;13977:398::-;14136:3;14157:83;14238:1;14233:3;14157:83;:::i;:::-;14150:90;;14249:93;14338:3;14249:93;:::i;:::-;14367:1;14362:3;14358:11;14351:18;;13977:398;;;:::o;14381:366::-;14523:3;14544:67;14608:2;14603:3;14544:67;:::i;:::-;14537:74;;14620:93;14709:3;14620:93;:::i;:::-;14738:2;14733:3;14729:12;14722:19;;14381:366;;;:::o;14753:::-;14895:3;14916:67;14980:2;14975:3;14916:67;:::i;:::-;14909:74;;14992:93;15081:3;14992:93;:::i;:::-;15110:2;15105:3;15101:12;15094:19;;14753:366;;;:::o;15125:::-;15267:3;15288:67;15352:2;15347:3;15288:67;:::i;:::-;15281:74;;15364:93;15453:3;15364:93;:::i;:::-;15482:2;15477:3;15473:12;15466:19;;15125:366;;;:::o;15497:::-;15639:3;15660:67;15724:2;15719:3;15660:67;:::i;:::-;15653:74;;15736:93;15825:3;15736:93;:::i;:::-;15854:2;15849:3;15845:12;15838:19;;15497:366;;;:::o;15869:::-;16011:3;16032:67;16096:2;16091:3;16032:67;:::i;:::-;16025:74;;16108:93;16197:3;16108:93;:::i;:::-;16226:2;16221:3;16217:12;16210:19;;15869:366;;;:::o;16241:118::-;16328:24;16346:5;16328:24;:::i;:::-;16323:3;16316:37;16241:118;;:::o;16365:112::-;16448:22;16464:5;16448:22;:::i;:::-;16443:3;16436:35;16365:112;;:::o;16483:379::-;16667:3;16689:147;16832:3;16689:147;:::i;:::-;16682:154;;16853:3;16846:10;;16483:379;;;:::o;16868:222::-;16961:4;16999:2;16988:9;16984:18;16976:26;;17012:71;17080:1;17069:9;17065:17;17056:6;17012:71;:::i;:::-;16868:222;;;;:::o;17096:332::-;17217:4;17255:2;17244:9;17240:18;17232:26;;17268:71;17336:1;17325:9;17321:17;17312:6;17268:71;:::i;:::-;17349:72;17417:2;17406:9;17402:18;17393:6;17349:72;:::i;:::-;17096:332;;;;;:::o;17434:::-;17555:4;17593:2;17582:9;17578:18;17570:26;;17606:71;17674:1;17663:9;17659:17;17650:6;17606:71;:::i;:::-;17687:72;17755:2;17744:9;17740:18;17731:6;17687:72;:::i;:::-;17434:332;;;;;:::o;17772:807::-;18021:4;18059:3;18048:9;18044:19;18036:27;;18073:71;18141:1;18130:9;18126:17;18117:6;18073:71;:::i;:::-;18154:72;18222:2;18211:9;18207:18;18198:6;18154:72;:::i;:::-;18236:80;18312:2;18301:9;18297:18;18288:6;18236:80;:::i;:::-;18326;18402:2;18391:9;18387:18;18378:6;18326:80;:::i;:::-;18416:73;18484:3;18473:9;18469:19;18460:6;18416:73;:::i;:::-;18499;18567:3;18556:9;18552:19;18543:6;18499:73;:::i;:::-;17772:807;;;;;;;;;:::o;18585:210::-;18672:4;18710:2;18699:9;18695:18;18687:26;;18723:65;18785:1;18774:9;18770:17;18761:6;18723:65;:::i;:::-;18585:210;;;;:::o;18801:308::-;18910:4;18948:2;18937:9;18933:18;18925:26;;18961:65;19023:1;19012:9;19008:17;18999:6;18961:65;:::i;:::-;19036:66;19098:2;19087:9;19083:18;19074:6;19036:66;:::i;:::-;18801:308;;;;;:::o;19115:313::-;19228:4;19266:2;19255:9;19251:18;19243:26;;19315:9;19309:4;19305:20;19301:1;19290:9;19286:17;19279:47;19343:78;19416:4;19407:6;19343:78;:::i;:::-;19335:86;;19115:313;;;;:::o;19434:419::-;19600:4;19638:2;19627:9;19623:18;19615:26;;19687:9;19681:4;19677:20;19673:1;19662:9;19658:17;19651:47;19715:131;19841:4;19715:131;:::i;:::-;19707:139;;19434:419;;;:::o;19859:::-;20025:4;20063:2;20052:9;20048:18;20040:26;;20112:9;20106:4;20102:20;20098:1;20087:9;20083:17;20076:47;20140:131;20266:4;20140:131;:::i;:::-;20132:139;;19859:419;;;:::o;20284:::-;20450:4;20488:2;20477:9;20473:18;20465:26;;20537:9;20531:4;20527:20;20523:1;20512:9;20508:17;20501:47;20565:131;20691:4;20565:131;:::i;:::-;20557:139;;20284:419;;;:::o;20709:::-;20875:4;20913:2;20902:9;20898:18;20890:26;;20962:9;20956:4;20952:20;20948:1;20937:9;20933:17;20926:47;20990:131;21116:4;20990:131;:::i;:::-;20982:139;;20709:419;;;:::o;21134:::-;21300:4;21338:2;21327:9;21323:18;21315:26;;21387:9;21381:4;21377:20;21373:1;21362:9;21358:17;21351:47;21415:131;21541:4;21415:131;:::i;:::-;21407:139;;21134:419;;;:::o;21559:::-;21725:4;21763:2;21752:9;21748:18;21740:26;;21812:9;21806:4;21802:20;21798:1;21787:9;21783:17;21776:47;21840:131;21966:4;21840:131;:::i;:::-;21832:139;;21559:419;;;:::o;21984:::-;22150:4;22188:2;22177:9;22173:18;22165:26;;22237:9;22231:4;22227:20;22223:1;22212:9;22208:17;22201:47;22265:131;22391:4;22265:131;:::i;:::-;22257:139;;21984:419;;;:::o;22409:::-;22575:4;22613:2;22602:9;22598:18;22590:26;;22662:9;22656:4;22652:20;22648:1;22637:9;22633:17;22626:47;22690:131;22816:4;22690:131;:::i;:::-;22682:139;;22409:419;;;:::o;22834:::-;23000:4;23038:2;23027:9;23023:18;23015:26;;23087:9;23081:4;23077:20;23073:1;23062:9;23058:17;23051:47;23115:131;23241:4;23115:131;:::i;:::-;23107:139;;22834:419;;;:::o;23259:::-;23425:4;23463:2;23452:9;23448:18;23440:26;;23512:9;23506:4;23502:20;23498:1;23487:9;23483:17;23476:47;23540:131;23666:4;23540:131;:::i;:::-;23532:139;;23259:419;;;:::o;23684:::-;23850:4;23888:2;23877:9;23873:18;23865:26;;23937:9;23931:4;23927:20;23923:1;23912:9;23908:17;23901:47;23965:131;24091:4;23965:131;:::i;:::-;23957:139;;23684:419;;;:::o;24109:::-;24275:4;24313:2;24302:9;24298:18;24290:26;;24362:9;24356:4;24352:20;24348:1;24337:9;24333:17;24326:47;24390:131;24516:4;24390:131;:::i;:::-;24382:139;;24109:419;;;:::o;24534:::-;24700:4;24738:2;24727:9;24723:18;24715:26;;24787:9;24781:4;24777:20;24773:1;24762:9;24758:17;24751:47;24815:131;24941:4;24815:131;:::i;:::-;24807:139;;24534:419;;;:::o;24959:::-;25125:4;25163:2;25152:9;25148:18;25140:26;;25212:9;25206:4;25202:20;25198:1;25187:9;25183:17;25176:47;25240:131;25366:4;25240:131;:::i;:::-;25232:139;;24959:419;;;:::o;25384:::-;25550:4;25588:2;25577:9;25573:18;25565:26;;25637:9;25631:4;25627:20;25623:1;25612:9;25608:17;25601:47;25665:131;25791:4;25665:131;:::i;:::-;25657:139;;25384:419;;;:::o;25809:::-;25975:4;26013:2;26002:9;25998:18;25990:26;;26062:9;26056:4;26052:20;26048:1;26037:9;26033:17;26026:47;26090:131;26216:4;26090:131;:::i;:::-;26082:139;;25809:419;;;:::o;26234:::-;26400:4;26438:2;26427:9;26423:18;26415:26;;26487:9;26481:4;26477:20;26473:1;26462:9;26458:17;26451:47;26515:131;26641:4;26515:131;:::i;:::-;26507:139;;26234:419;;;:::o;26659:222::-;26752:4;26790:2;26779:9;26775:18;26767:26;;26803:71;26871:1;26860:9;26856:17;26847:6;26803:71;:::i;:::-;26659:222;;;;:::o;26887:831::-;27150:4;27188:3;27177:9;27173:19;27165:27;;27202:71;27270:1;27259:9;27255:17;27246:6;27202:71;:::i;:::-;27283:80;27359:2;27348:9;27344:18;27335:6;27283:80;:::i;:::-;27410:9;27404:4;27400:20;27395:2;27384:9;27380:18;27373:48;27438:108;27541:4;27532:6;27438:108;:::i;:::-;27430:116;;27556:72;27624:2;27613:9;27609:18;27600:6;27556:72;:::i;:::-;27638:73;27706:3;27695:9;27691:19;27682:6;27638:73;:::i;:::-;26887:831;;;;;;;;:::o;27724:442::-;27873:4;27911:2;27900:9;27896:18;27888:26;;27924:71;27992:1;27981:9;27977:17;27968:6;27924:71;:::i;:::-;28005:72;28073:2;28062:9;28058:18;28049:6;28005:72;:::i;:::-;28087;28155:2;28144:9;28140:18;28131:6;28087:72;:::i;:::-;27724:442;;;;;;:::o;28172:214::-;28261:4;28299:2;28288:9;28284:18;28276:26;;28312:67;28376:1;28365:9;28361:17;28352:6;28312:67;:::i;:::-;28172:214;;;;:::o;28473:132::-;28540:4;28563:3;28555:11;;28593:4;28588:3;28584:14;28576:22;;28473:132;;;:::o;28611:114::-;28678:6;28712:5;28706:12;28696:22;;28611:114;;;:::o;28731:99::-;28783:6;28817:5;28811:12;28801:22;;28731:99;;;:::o;28836:113::-;28906:4;28938;28933:3;28929:14;28921:22;;28836:113;;;:::o;28955:184::-;29054:11;29088:6;29083:3;29076:19;29128:4;29123:3;29119:14;29104:29;;28955:184;;;;:::o;29145:147::-;29246:11;29283:3;29268:18;;29145:147;;;;:::o;29298:169::-;29382:11;29416:6;29411:3;29404:19;29456:4;29451:3;29447:14;29432:29;;29298:169;;;;:::o;29473:305::-;29513:3;29532:20;29550:1;29532:20;:::i;:::-;29527:25;;29566:20;29584:1;29566:20;:::i;:::-;29561:25;;29720:1;29652:66;29648:74;29645:1;29642:81;29639:107;;;29726:18;;:::i;:::-;29639:107;29770:1;29767;29763:9;29756:16;;29473:305;;;;:::o;29784:185::-;29824:1;29841:20;29859:1;29841:20;:::i;:::-;29836:25;;29875:20;29893:1;29875:20;:::i;:::-;29870:25;;29914:1;29904:35;;29919:18;;:::i;:::-;29904:35;29961:1;29958;29954:9;29949:14;;29784:185;;;;:::o;29975:348::-;30015:7;30038:20;30056:1;30038:20;:::i;:::-;30033:25;;30072:20;30090:1;30072:20;:::i;:::-;30067:25;;30260:1;30192:66;30188:74;30185:1;30182:81;30177:1;30170:9;30163:17;30159:105;30156:131;;;30267:18;;:::i;:::-;30156:131;30315:1;30312;30308:9;30297:20;;29975:348;;;;:::o;30329:191::-;30369:4;30389:20;30407:1;30389:20;:::i;:::-;30384:25;;30423:20;30441:1;30423:20;:::i;:::-;30418:25;;30462:1;30459;30456:8;30453:34;;;30467:18;;:::i;:::-;30453:34;30512:1;30509;30505:9;30497:17;;30329:191;;;;:::o;30526:96::-;30563:7;30592:24;30610:5;30592:24;:::i;:::-;30581:35;;30526:96;;;:::o;30628:104::-;30673:7;30702:24;30720:5;30702:24;:::i;:::-;30691:35;;30628:104;;;:::o;30738:90::-;30772:7;30815:5;30808:13;30801:21;30790:32;;30738:90;;;:::o;30834:126::-;30871:7;30911:42;30904:5;30900:54;30889:65;;30834:126;;;:::o;30966:77::-;31003:7;31032:5;31021:16;;30966:77;;;:::o;31049:86::-;31084:7;31124:4;31117:5;31113:16;31102:27;;31049:86;;;:::o;31141:121::-;31199:9;31232:24;31250:5;31232:24;:::i;:::-;31219:37;;31141:121;;;:::o;31268:307::-;31336:1;31346:113;31360:6;31357:1;31354:13;31346:113;;;31445:1;31440:3;31436:11;31430:18;31426:1;31421:3;31417:11;31410:39;31382:2;31379:1;31375:10;31370:15;;31346:113;;;31477:6;31474:1;31471:13;31468:101;;;31557:1;31548:6;31543:3;31539:16;31532:27;31468:101;31317:258;31268:307;;;:::o;31581:233::-;31620:3;31643:24;31661:5;31643:24;:::i;:::-;31634:33;;31689:66;31682:5;31679:77;31676:103;;;31759:18;;:::i;:::-;31676:103;31806:1;31799:5;31795:13;31788:20;;31581:233;;;:::o;31820:180::-;31868:77;31865:1;31858:88;31965:4;31962:1;31955:15;31989:4;31986:1;31979:15;32006:180;32054:77;32051:1;32044:88;32151:4;32148:1;32141:15;32175:4;32172:1;32165:15;32192:180;32240:77;32237:1;32230:88;32337:4;32334:1;32327:15;32361:4;32358:1;32351:15;32378:180;32426:77;32423:1;32416:88;32523:4;32520:1;32513:15;32547:4;32544:1;32537:15;32564:117;32673:1;32670;32663:12;32687:117;32796:1;32793;32786:12;32810:117;32919:1;32916;32909:12;32933:117;33042:1;33039;33032:12;33056:117;33165:1;33162;33155:12;33179:102;33220:6;33271:2;33267:7;33262:2;33255:5;33251:14;33247:28;33237:38;;33179:102;;;:::o;33287:222::-;33427:34;33423:1;33415:6;33411:14;33404:58;33496:5;33491:2;33483:6;33479:15;33472:30;33287:222;:::o;33515:229::-;33655:34;33651:1;33643:6;33639:14;33632:58;33724:12;33719:2;33711:6;33707:15;33700:37;33515:229;:::o;33750:225::-;33890:34;33886:1;33878:6;33874:14;33867:58;33959:8;33954:2;33946:6;33942:15;33935:33;33750:225;:::o;33981:221::-;34121:34;34117:1;34109:6;34105:14;34098:58;34190:4;34185:2;34177:6;34173:15;34166:29;33981:221;:::o;34208:177::-;34348:29;34344:1;34336:6;34332:14;34325:53;34208:177;:::o;34391:244::-;34531:34;34527:1;34519:6;34515:14;34508:58;34600:27;34595:2;34587:6;34583:15;34576:52;34391:244;:::o;34641:236::-;34781:34;34777:1;34769:6;34765:14;34758:58;34850:19;34845:2;34837:6;34833:15;34826:44;34641:236;:::o;34883:220::-;35023:34;35019:1;35011:6;35007:14;35000:58;35092:3;35087:2;35079:6;35075:15;35068:28;34883:220;:::o;35109:182::-;35249:34;35245:1;35237:6;35233:14;35226:58;35109:182;:::o;35297:228::-;35437:34;35433:1;35425:6;35421:14;35414:58;35506:11;35501:2;35493:6;35489:15;35482:36;35297:228;:::o;35531:224::-;35671:34;35667:1;35659:6;35655:14;35648:58;35740:7;35735:2;35727:6;35723:15;35716:32;35531:224;:::o;35761:222::-;35901:34;35897:1;35889:6;35885:14;35878:58;35970:5;35965:2;35957:6;35953:15;35946:30;35761:222;:::o;35989:114::-;;:::o;36109:223::-;36249:34;36245:1;36237:6;36233:14;36226:58;36318:6;36313:2;36305:6;36301:15;36294:31;36109:223;:::o;36338:173::-;36478:25;36474:1;36466:6;36462:14;36455:49;36338:173;:::o;36517:181::-;36657:33;36653:1;36645:6;36641:14;36634:57;36517:181;:::o;36704:174::-;36844:26;36840:1;36832:6;36828:14;36821:50;36704:174;:::o;36884:222::-;37024:34;37020:1;37012:6;37008:14;37001:58;37093:5;37088:2;37080:6;37076:15;37069:30;36884:222;:::o;37112:122::-;37185:24;37203:5;37185:24;:::i;:::-;37178:5;37175:35;37165:63;;37224:1;37221;37214:12;37165:63;37112:122;:::o;37240:138::-;37321:32;37347:5;37321:32;:::i;:::-;37314:5;37311:43;37301:71;;37368:1;37365;37358:12;37301:71;37240:138;:::o;37384:116::-;37454:21;37469:5;37454:21;:::i;:::-;37447:5;37444:32;37434:60;;37490:1;37487;37480:12;37434:60;37384:116;:::o;37506:122::-;37579:24;37597:5;37579:24;:::i;:::-;37572:5;37569:35;37559:63;;37618:1;37615;37608:12;37559:63;37506:122;:::o

Swarm Source

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