ETH Price: $2,537.33 (+4.11%)

Token

GROKI (GROKI)
 

Overview

Max Total Supply

690,420,000,000 GROKI

Holders

87

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
Groki

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-07
*/

/*            
     .,-:::::/ :::::::..       ...      :::  .   :::
   ,;;-'````'  ;;;;``;;;;   .;;;;;;;.   ;;; .;;,.;;;
   [[[   [[[[[[/[[[,/[[['  ,[[     \[[, [[[[[/'  [[[
   "$$c.    "$$ $$$$$$c    $$$,     $$$_$$$$,    $$$
    `Y8bo,,,o88o888b "88bo,"888,_ _,88P"888"88o, 888
      `'YMUP"YMMMMMM   "W"   "YMMMMMP"  MMM "MMP"MMM     
                                   
Renounced 1/1 Ethereum Token for the Groki Ecosystem 

Telegram: https://t.me/GROKI_TOKEN
Twitter: https://twitter.com/groki_eth
Website: https://groki.world


*/
// SPDX-License-Identifier: MIT

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/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);
}

pragma solidity ^0.8.4;
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.4;
/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.4;

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

pragma solidity ^0.8.4;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.4;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

pragma solidity ^0.8.4;

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

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

pragma solidity ^0.8.4;

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () public {
        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;
    }
}

pragma solidity ^0.8.4;

contract Groki is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    mapping (address => uint256) public _rOwned;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromFee;
    mapping(address => bool) public _isBlacklisted;

    address public _PresaleAddress = 0x000000000000000000000000000000000000dEaD;
    bool public tradingEnabled = false;
    bool public liquidityLaunched = false;
    bool public isFirstLaunch = true;
    uint256 public lastSnipeTaxBlock;
    uint8 public snipeBlocks = 1;

    modifier whenTradingEnabled() {
    require(tradingEnabled || _msgSender() == owner(), "Trading is not yet enabled");
    _;
    }
    

    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 690420000000000000000;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 1;
    
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 1;
    
    uint256 private _redisFee;
    uint256 private _taxFee;
    
    string private constant _name = "GROKI";
    string private constant _symbol = "GROKI";
    uint8 private constant _decimals = 9;
    
    address payable private _appAddress = payable(0xD53b945827ff0c7a06EE6bF64ae6673CaD897B07);
    address payable private _marketingAddress = payable(0xD53b945827ff0c7a06EE6bF64ae6673CaD897B07);
    address payable private _buybackAddress = payable(0xD53b945827ff0c7a06EE6bF64ae6673CaD897B07);
    address payable private _burnAddress = payable(0xD53b945827ff0c7a06EE6bF64ae6673CaD897B07);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private inSwap = false;
    bool private swapEnabled = true;
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_appAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;
        _isExcludedFromFee[_buybackAddress] = true;
        _isExcludedFromFee[_burnAddress] = true;

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

    function setSnipeBlocks(uint8 _blocks) external onlyOwner {
        require(!tradingEnabled);
        snipeBlocks = _blocks;
    }

    function setPresaleContract(address payable wallet) external onlyOwner{
        _PresaleAddress = wallet;
        excludeFromFees(_PresaleAddress, true);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

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

    function enableTrading() external onlyOwner {
    require(!tradingEnabled, "Trading is already enabled");
    lastSnipeTaxBlock = block.number + snipeBlocks;
    tradingEnabled = true;
}

    function _transfer(address from, address to, uint256 amount) private {
        if (from != owner())
        require(tradingEnabled == true);
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlacklisted[from], 'Blacklisted address');

        _redisFee = 0;
        _taxFee = 0;

        if (!liquidityLaunched) {
            if (to == uniswapV2Pair) {
                liquidityLaunched = true;
                // high tax ends in x blocks
            }
        }

        //antibot block
        if (from != address(_PresaleAddress)) {
            if(tradingEnabled && block.number <= lastSnipeTaxBlock && !isFirstLaunch){
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
                _tokenTransfer(from,to,amount);
                if (to != address(uniswapV2Pair)) {
                    _isBlacklisted[to]=true;
                }
                return;
            }
        }

        if (tradingEnabled && isFirstLaunch){
            isFirstLaunch = false;
        }
        
        if (from != owner() && to != owner()) {
            
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && from != uniswapV2Pair && swapEnabled && contractTokenBalance > 0) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
            
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }
    
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
            
            if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
                _redisFee = 0;
                _taxFee = 0;
            }
            
        }

        _tokenTransfer(from,to,amount);
    }

    function swapTokensForEth(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 {
        uint256 devAmount = amount.mul(2).div(7);
        uint256 mktAmount = amount.mul(2).div(7);
        uint256 buybackAmount = amount.mul(2).div(7);
        uint256 burnAmount = amount.sub(devAmount).sub(mktAmount).sub(buybackAmount);
        _appAddress.transfer(devAmount);
        _marketingAddress.transfer(mktAmount);
        _buybackAddress.transfer(buybackAmount);
        _burnAddress.transfer(burnAmount);
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        _transferStandard(sender, recipient, amount);
    }

    event tokensRescued(address indexed token, address indexed to, uint amount);
    function rescueForeignTokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        emit tokensRescued(_tokenAddr, _to, _amount);	
        IERC20(_tokenAddr).transfer(_to, _amount);
    }
    
    event appAddressUpdated(address indexed previous, address indexed adr);
    function setNewAppAddress(address payable appaddr) public onlyOwner {
        emit appAddressUpdated(_appAddress, appaddr);	
        _appAddress = appaddr;
        _isExcludedFromFee[_appAddress] = true;
    }
    
    event marketingAddressUpdated(address indexed previous, address indexed adr);
    function setNewMarketingAddress(address payable markt) public onlyOwner {
        emit marketingAddressUpdated(_marketingAddress, markt);	
        _marketingAddress = markt;
        _isExcludedFromFee[_marketingAddress] = true;
    }

    event burnAddressUpdated(address indexed previous, address indexed adr);
    function setNewBurnAddress(address payable burnaddr) public onlyOwner {
        emit burnAddressUpdated(_burnAddress, burnaddr);	
        _burnAddress = burnaddr;
        _isExcludedFromFee[_burnAddress] = true;
    }

    event buybackAddressUpdated(address indexed previous, address indexed adr);
    function setNewBuybackAddress(address payable buybackaddr) public onlyOwner {
        emit buybackAddressUpdated(_buybackAddress, buybackaddr);	
        _buybackAddress = buybackaddr;
        _isExcludedFromFee[_buybackAddress] = true;
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        uint256 tTransferAmount = tAmount.sub(tAmount.mul(_redisFee).div(100)).sub(tAmount.mul(_taxFee).div(100));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tAmount.mul(_redisFee).div(100).mul(currentRate);
        uint256 rTeam = tAmount.mul(_taxFee).div(100).mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    /**
     * only thing to change _rTotal
     */
    function _reflectFee(uint256 rFee) private {
        _rTotal = _rTotal.sub(rFee);
    }

    receive() external payable {}

	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 manualswap() external {
        require(_msgSender() == owner());
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == owner());
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }
    
    function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
	    require(redisFeeOnBuy < 1, "Redis cannot be more than 1.");
	    require(redisFeeOnSell < 1, "Redis cannot be more than 1.");
        require(taxFeeOnBuy < 1, "Redis cannot be more than 1.");
        require(taxFeeOnSell < 1, "Redis cannot be more than 1.");
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }
    
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    event ExcludeFromFees(address indexed account, bool isExcluded);
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    event BlacklistAddress(address indexed account, bool value);
    function blacklistAddress(address account, bool value) public onlyOwner{
        _isBlacklisted[account] = value;
        emit BlacklistAddress(account, value);
    }

    event BlacklistMultiAddresses(address[] accounts, bool value);
    function blacklistMultiAddresses(address[] calldata accounts, bool value) public onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = value;
        }
        emit BlacklistMultiAddresses(accounts, value);
    }

}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistMultiAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"appAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"burnAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"buybackAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"marketingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensRescued","type":"event"},{"inputs":[],"name":"_PresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMultiAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isFirstLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSnipeTaxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueForeignTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"appaddr","type":"address"}],"name":"setNewAppAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"burnaddr","type":"address"}],"name":"setNewBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"buybackaddr","type":"address"}],"name":"setNewBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"markt","type":"address"}],"name":"setNewMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setPresaleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_blocks","type":"uint8"}],"name":"setSnipeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBlocks","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff0219169083151502179055506000600560156101000a81548160ff0219169083151502179055506001600560166101000a81548160ff0219169083151502179055506001600760006101000a81548160ff021916908360ff16021790555068256d8093ff81320000600019620000cd919062000926565b600019620000dc91906200098d565b60085560006009556001600a556000600b556001600c5573d53b945827ff0c7a06ee6bf64ae6673cad897b07600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d53b945827ff0c7a06ee6bf64ae6673cad897b07601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d53b945827ff0c7a06ee6bf64ae6673cad897b07601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d53b945827ff0c7a06ee6bf64ae6673cad897b07601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006014806101000a81548160ff0219169083151502179055506001601460156101000a81548160ff0219169083151502179055503480156200028957600080fd5b5060006200029c620008bc60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506008546001600062000351620008bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045b919062000a32565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e9919062000a32565b6040518363ffffffff1660e01b81526004016200050892919062000a75565b6020604051808303816000875af115801562000528573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054e919062000a32565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000620005a4620008c460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000845620008bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef68256d8093ff81320000604051620008ad919062000ab3565b60405180910390a35062000ad0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200093382620008ed565b91506200094083620008ed565b925082620009535762000952620008f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200099a82620008ed565b9150620009a783620008ed565b9250828203905081811115620009c257620009c16200095e565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009fa82620009cd565b9050919050565b62000a0c81620009ed565b811462000a1857600080fd5b50565b60008151905062000a2c8162000a01565b92915050565b60006020828403121562000a4b5762000a4a620009c8565b5b600062000a5b8482850162000a1b565b91505092915050565b62000a6f81620009ed565b82525050565b600060408201905062000a8c600083018562000a64565b62000a9b602083018462000a64565b9392505050565b62000aad81620008ed565b82525050565b600060208201905062000aca600083018462000aa2565b92915050565b614bd58062000ae06000396000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063a9bbd114116100ab578063c492f0461161006f578063c492f04614610810578063dd62ed3e14610839578063e293d31614610876578063f2fde38b1461089f578063fca419ae146108c85761023b565b8063a9bbd11414610755578063a9f615181461077e578063aa77ed67146107a7578063c0246668146107d0578063c3c8cd80146107f95761023b565b806395d89b41116100f257806395d89b41146106725780639f3d13601461069d578063a2a957bb146106c6578063a2fff114146106ef578063a9059cbb146107185761023b565b8063715018a6146105b3578063758dbe03146105ca578063768dc710146105f35780638a8c523c146106305780638da5cb5b146106475761023b565b806323b872dd116101bc5780634ada218b116101805780634ada218b146104e05780636a1961c41461050b5780636d8aa8f8146105365780636fc3eaec1461055f57806370a08231146105765761023b565b806323b872dd146103f95780632be29fa814610436578063313ce56714610461578063455a43961461048c57806349bd5a5e146104b55761023b565b80631694505e116102035780631694505e14610310578063181281291461033b57806318160ddd146103665780631cdd3be3146103915780631eb147d5146103ce5761023b565b8063032bba6a1461024057806306fdde031461026b578063095ea7b3146102965780630cfc15f9146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102556108f1565b6040516102629190613a5c565b60405180910390f35b34801561027757600080fd5b50610280610917565b60405161028d9190613b07565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190613b95565b610954565b6040516102ca9190613bf0565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190613c0b565b610972565b6040516103079190613c47565b60405180910390f35b34801561031c57600080fd5b5061032561098a565b6040516103329190613cc1565b60405180910390f35b34801561034757600080fd5b506103506109b0565b60405161035d9190613bf0565b60405180910390f35b34801561037257600080fd5b5061037b6109c3565b6040516103889190613c47565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613c0b565b6109d4565b6040516103c59190613bf0565b60405180910390f35b3480156103da57600080fd5b506103e36109f4565b6040516103f09190613bf0565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613cdc565b610a07565b60405161042d9190613bf0565b60405180910390f35b34801561044257600080fd5b5061044b610ae0565b6040516104589190613d4b565b60405180910390f35b34801561046d57600080fd5b50610476610af3565b6040516104839190613d4b565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613d92565b610afc565b005b3480156104c157600080fd5b506104ca610c3a565b6040516104d79190613a5c565b60405180910390f35b3480156104ec57600080fd5b506104f5610c60565b6040516105029190613bf0565b60405180910390f35b34801561051757600080fd5b50610520610c73565b60405161052d9190613c47565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613dd2565b610c79565b005b34801561056b57600080fd5b50610574610d2b565b005b34801561058257600080fd5b5061059d60048036038101906105989190613c0b565b610d82565b6040516105aa9190613c47565b60405180910390f35b3480156105bf57600080fd5b506105c8610dd3565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613e3d565b610f26565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190613c0b565b6110f5565b6040516106279190613bf0565b60405180910390f35b34801561063c57600080fd5b50610645611115565b005b34801561065357600080fd5b5061065c61123b565b6040516106699190613a5c565b60405180910390f35b34801561067e57600080fd5b50610687611264565b6040516106949190613b07565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190613e3d565b6112a1565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190613e6a565b611470565b005b3480156106fb57600080fd5b5061071660048036038101906107119190613e3d565b611633565b005b34801561072457600080fd5b5061073f600480360381019061073a9190613b95565b611802565b60405161074c9190613bf0565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190613e3d565b611820565b005b34801561078a57600080fd5b506107a560048036038101906107a09190613efd565b611926565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190613e3d565b6119f3565b005b3480156107dc57600080fd5b506107f760048036038101906107f29190613d92565b611bc2565b005b34801561080557600080fd5b5061080e611d00565b005b34801561081c57600080fd5b5061083760048036038101906108329190613f8f565b611d5f565b005b34801561084557600080fd5b50610860600480360381019061085b9190613fef565b611ed4565b60405161086d9190613c47565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190613cdc565b611f5b565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613c0b565b6120d9565b005b3480156108d457600080fd5b506108ef60048036038101906108ea9190613f8f565b61229a565b005b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600581526020017f47524f4b49000000000000000000000000000000000000000000000000000000815250905090565b600061096861096161240f565b8484612417565b6001905092915050565b60016020528060005260406000206000915090505481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560169054906101000a900460ff1681565b600068256d8093ff81320000905090565b60046020528060005260406000206000915054906101000a900460ff1681565b600560159054906101000a900460ff1681565b6000610a148484846125e0565b610ad584610a2061240f565b610ad085604051806060016040528060288152602001614b7860289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a8661240f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6a9092919063ffffffff16565b612417565b600190509392505050565b600760009054906101000a900460ff1681565b60006009905090565b610b0461240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b889061407b565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72582604051610c2e9190613bf0565b60405180910390a25050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b60065481565b610c8161240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d059061407b565b60405180910390fd5b80601460156101000a81548160ff02191690831515021790555050565b610d3361123b565b73ffffffffffffffffffffffffffffffffffffffff16610d5161240f565b73ffffffffffffffffffffffffffffffffffffffff1614610d7157600080fd5b6000479050610d7f81612ece565b50565b6000610dcc600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613135565b9050919050565b610ddb61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061407b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f2e61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb29061407b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b60405160405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60036020528060005260406000206000915054906101000a900460ff1681565b61111d61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a19061407b565b60405180910390fd5b600560149054906101000a900460ff16156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f1906140e7565b60405180910390fd5b600760009054906101000a900460ff1660ff16436112189190614136565b6006819055506001600560146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f47524f4b49000000000000000000000000000000000000000000000000000000815250905090565b6112a961240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061407b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c3960405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61147861240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc9061407b565b60405180910390fd5b60018410611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906141b6565b60405180910390fd5b6001831061158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906141b6565b60405180910390fd5b600182106115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c5906141b6565b60405180910390fd5b60018110611611576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611608906141b6565b60405180910390fd5b8360098190555082600b8190555081600a8190555080600c8190555050505050565b61163b61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf9061407b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc60405160405180910390a380601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061181661180f61240f565b84846125e0565b6001905092915050565b61182861240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac9061407b565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611923600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611bc2565b50565b61192e61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b29061407b565b60405180910390fd5b600560149054906101000a900460ff16156119d557600080fd5b80600760006101000a81548160ff021916908360ff16021790555050565b6119fb61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f9061407b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f4060405160405180910390a380601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611bca61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e9061407b565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cf49190613bf0565b60405180910390a25050565b611d0861123b565b73ffffffffffffffffffffffffffffffffffffffff16611d2661240f565b73ffffffffffffffffffffffffffffffffffffffff1614611d4657600080fd5b6000611d5130610d82565b9050611d5c816131a3565b50565b611d6761240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb9061407b565b60405180910390fd5b60005b83839050811015611e93578160036000868685818110611e1a57611e196141d6565b5b9050602002016020810190611e2f9190613c0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e8b90614205565b915050611df7565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611ec793929190614310565b60405180910390a1505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f6361240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe79061407b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161204d9190613c47565b60405180910390a38273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612090929190614342565b6020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190614380565b50505050565b6120e161240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121659061407b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d49061441f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a261240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123269061407b565b60405180910390fd5b60005b838390508110156123ce578160046000868685818110612355576123546141d6565b5b905060200201602081019061236a9190613c0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123c690614205565b915050612332565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf683838360405161240293929190614310565b60405180910390a1505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d906144b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90614543565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125d39190613c47565b60405180910390a3505050565b6125e861123b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461263b5760011515600560149054906101000a900460ff1615151461263a57600080fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a1906145d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614667565b60405180910390fd5b6000811161275c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612753906146f9565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e090614765565b60405180910390fd5b6000600d819055506000600e81905550600560159054906101000a900460ff1661287f57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361287e576001600560156101000a81548160ff0219169083151502179055505b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129e157600560149054906101000a900460ff1680156128f257506006544311155b801561290b5750600560169054906101000a900460ff16155b156129e057600954600d81905550600a54600e8190555061292d83838361341a565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129db576001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b612e65565b5b600560149054906101000a900460ff168015612a095750600560169054906101000a900460ff165b15612a2a576000600560166101000a81548160ff0219169083151502179055505b612a3261123b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aa05750612a7061123b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e59576000612ab030610d82565b905060148054906101000a900460ff16158015612b1b5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b335750601460159054906101000a900460ff165b8015612b3f5750600081115b15612b6757612b4d816131a3565b60004790506000811115612b6557612b6447612ece565b5b505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c125750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612c2a57600954600d81905550600a54600e819055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612cd55750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612ced57600b54600d81905550600c54600e819055505b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d8e5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612e415750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612e405750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15612e57576000600d819055506000600e819055505b505b612e6483838361341a565b5b505050565b6000838311158290612eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea99190613b07565b60405180910390fd5b5060008385612ec19190614785565b9050809150509392505050565b6000612ef76007612ee960028561342a90919063ffffffff16565b6134a490919063ffffffff16565b90506000612f226007612f1460028661342a90919063ffffffff16565b6134a490919063ffffffff16565b90506000612f4d6007612f3f60028761342a90919063ffffffff16565b6134a490919063ffffffff16565b90506000612f8882612f7a85612f6c888a6134ee90919063ffffffff16565b6134ee90919063ffffffff16565b6134ee90919063ffffffff16565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015612ff2573d6000803e3d6000fd5b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561305b573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156130c4573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561312d573d6000803e3d6000fd5b505050505050565b600060085482111561317c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131739061482b565b60405180910390fd5b6000613186613538565b905061319b81846134a490919063ffffffff16565b915050919050565b60016014806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156131da576131d961484b565b5b6040519080825280602002602001820160405280156132085781602001602082028036833780820191505090505b50905030816000815181106132205761321f6141d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132eb919061488f565b816001815181106132ff576132fe6141d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061336630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612417565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133ca95949392919061497d565b600060405180830381600087803b1580156133e457600080fd5b505af11580156133f8573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b613425838383613563565b505050565b600080830361343c576000905061349e565b6000828461344a91906149d7565b90508284826134599190614a48565b14613499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349090614aeb565b60405180910390fd5b809150505b92915050565b60006134e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138da565b905092915050565b600061353083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e6a565b905092915050565b600080600061354561393d565b9150915061355c81836134a490919063ffffffff16565b9250505090565b600061356d613538565b905060006135e461359c606461358e600e548761342a90919063ffffffff16565b6134a490919063ffffffff16565b6135d66135c760646135b9600d548961342a90919063ffffffff16565b6134a490919063ffffffff16565b866134ee90919063ffffffff16565b6134ee90919063ffffffff16565b905060006135fb838561342a90919063ffffffff16565b905060006136398461362b606461361d600d548a61342a90919063ffffffff16565b6134a490919063ffffffff16565b61342a90919063ffffffff16565b9050600061367785613669606461365b600e548b61342a90919063ffffffff16565b6134a490919063ffffffff16565b61342a90919063ffffffff16565b905060006136a08261369285876134ee90919063ffffffff16565b6134ee90919063ffffffff16565b90506136f484600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ee90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061378981600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381e82600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061386a836139fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516138c79190613c47565b60405180910390a3505050505050505050565b60008083118290613921576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139189190613b07565b60405180910390fd5b50600083856139309190614a48565b9050809150509392505050565b60008060006008549050600068256d8093ff81320000905061397368256d8093ff813200006008546134a490919063ffffffff16565b8210156139925760085468256d8093ff8132000093509350505061399b565b81819350935050505b9091565b60008082846139ae9190614136565b9050838110156139f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ea90614b57565b60405180910390fd5b8091505092915050565b613a12816008546134ee90919063ffffffff16565b60088190555050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a4682613a1b565b9050919050565b613a5681613a3b565b82525050565b6000602082019050613a716000830184613a4d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ab1578082015181840152602081019050613a96565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ad982613a77565b613ae38185613a82565b9350613af3818560208601613a93565b613afc81613abd565b840191505092915050565b60006020820190508181036000830152613b218184613ace565b905092915050565b600080fd5b600080fd5b613b3c81613a3b565b8114613b4757600080fd5b50565b600081359050613b5981613b33565b92915050565b6000819050919050565b613b7281613b5f565b8114613b7d57600080fd5b50565b600081359050613b8f81613b69565b92915050565b60008060408385031215613bac57613bab613b29565b5b6000613bba85828601613b4a565b9250506020613bcb85828601613b80565b9150509250929050565b60008115159050919050565b613bea81613bd5565b82525050565b6000602082019050613c056000830184613be1565b92915050565b600060208284031215613c2157613c20613b29565b5b6000613c2f84828501613b4a565b91505092915050565b613c4181613b5f565b82525050565b6000602082019050613c5c6000830184613c38565b92915050565b6000819050919050565b6000613c87613c82613c7d84613a1b565b613c62565b613a1b565b9050919050565b6000613c9982613c6c565b9050919050565b6000613cab82613c8e565b9050919050565b613cbb81613ca0565b82525050565b6000602082019050613cd66000830184613cb2565b92915050565b600080600060608486031215613cf557613cf4613b29565b5b6000613d0386828701613b4a565b9350506020613d1486828701613b4a565b9250506040613d2586828701613b80565b9150509250925092565b600060ff82169050919050565b613d4581613d2f565b82525050565b6000602082019050613d606000830184613d3c565b92915050565b613d6f81613bd5565b8114613d7a57600080fd5b50565b600081359050613d8c81613d66565b92915050565b60008060408385031215613da957613da8613b29565b5b6000613db785828601613b4a565b9250506020613dc885828601613d7d565b9150509250929050565b600060208284031215613de857613de7613b29565b5b6000613df684828501613d7d565b91505092915050565b6000613e0a82613a1b565b9050919050565b613e1a81613dff565b8114613e2557600080fd5b50565b600081359050613e3781613e11565b92915050565b600060208284031215613e5357613e52613b29565b5b6000613e6184828501613e28565b91505092915050565b60008060008060808587031215613e8457613e83613b29565b5b6000613e9287828801613b80565b9450506020613ea387828801613b80565b9350506040613eb487828801613b80565b9250506060613ec587828801613b80565b91505092959194509250565b613eda81613d2f565b8114613ee557600080fd5b50565b600081359050613ef781613ed1565b92915050565b600060208284031215613f1357613f12613b29565b5b6000613f2184828501613ee8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613f4f57613f4e613f2a565b5b8235905067ffffffffffffffff811115613f6c57613f6b613f2f565b5b602083019150836020820283011115613f8857613f87613f34565b5b9250929050565b600080600060408486031215613fa857613fa7613b29565b5b600084013567ffffffffffffffff811115613fc657613fc5613b2e565b5b613fd286828701613f39565b93509350506020613fe586828701613d7d565b9150509250925092565b6000806040838503121561400657614005613b29565b5b600061401485828601613b4a565b925050602061402585828601613b4a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614065602083613a82565b91506140708261402f565b602082019050919050565b6000602082019050818103600083015261409481614058565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b60006140d1601a83613a82565b91506140dc8261409b565b602082019050919050565b60006020820190508181036000830152614100816140c4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061414182613b5f565b915061414c83613b5f565b925082820190508082111561416457614163614107565b5b92915050565b7f52656469732063616e6e6f74206265206d6f7265207468616e20312e00000000600082015250565b60006141a0601c83613a82565b91506141ab8261416a565b602082019050919050565b600060208201905081810360008301526141cf81614193565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061421082613b5f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361424257614241614107565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b61427181613a3b565b82525050565b60006142838383614268565b60208301905092915050565b600061429e6020840184613b4a565b905092915050565b6000602082019050919050565b60006142bf838561424d565b93506142ca8261425e565b8060005b85811015614303576142e0828461428f565b6142ea8882614277565b97506142f5836142a6565b9250506001810190506142ce565b5085925050509392505050565b6000604082019050818103600083015261432b8185876142b3565b905061433a6020830184613be1565b949350505050565b60006040820190506143576000830185613a4d565b6143646020830184613c38565b9392505050565b60008151905061437a81613d66565b92915050565b60006020828403121561439657614395613b29565b5b60006143a48482850161436b565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614409602683613a82565b9150614414826143ad565b604082019050919050565b60006020820190508181036000830152614438816143fc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061449b602483613a82565b91506144a68261443f565b604082019050919050565b600060208201905081810360008301526144ca8161448e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061452d602283613a82565b9150614538826144d1565b604082019050919050565b6000602082019050818103600083015261455c81614520565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145bf602583613a82565b91506145ca82614563565b604082019050919050565b600060208201905081810360008301526145ee816145b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614651602383613a82565b915061465c826145f5565b604082019050919050565b6000602082019050818103600083015261468081614644565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146e3602983613a82565b91506146ee82614687565b604082019050919050565b60006020820190508181036000830152614712816146d6565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b600061474f601383613a82565b915061475a82614719565b602082019050919050565b6000602082019050818103600083015261477e81614742565b9050919050565b600061479082613b5f565b915061479b83613b5f565b92508282039050818111156147b3576147b2614107565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614815602a83613a82565b9150614820826147b9565b604082019050919050565b6000602082019050818103600083015261484481614808565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061488981613b33565b92915050565b6000602082840312156148a5576148a4613b29565b5b60006148b38482850161487a565b91505092915050565b6000819050919050565b60006148e16148dc6148d7846148bc565b613c62565b613b5f565b9050919050565b6148f1816148c6565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b600061492a826148f7565b614934818561424d565b935061493f83614902565b8060005b838110156149705781516149578882614277565b975061496283614912565b925050600181019050614943565b5085935050505092915050565b600060a0820190506149926000830188613c38565b61499f60208301876148e8565b81810360408301526149b1818661491f565b90506149c06060830185613a4d565b6149cd6080830184613c38565b9695505050505050565b60006149e282613b5f565b91506149ed83613b5f565b92508282026149fb81613b5f565b91508282048414831517614a1257614a11614107565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a5382613b5f565b9150614a5e83613b5f565b925082614a6e57614a6d614a19565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ad5602183613a82565b9150614ae082614a79565b604082019050919050565b60006020820190508181036000830152614b0481614ac8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b41601b83613a82565b9150614b4c82614b0b565b602082019050919050565b60006020820190508181036000830152614b7081614b34565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f3cd29cf6e1b4ad59a94a8cbb0534114ea301c84e2e8fe52278af9cb75536b1164736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063a9bbd114116100ab578063c492f0461161006f578063c492f04614610810578063dd62ed3e14610839578063e293d31614610876578063f2fde38b1461089f578063fca419ae146108c85761023b565b8063a9bbd11414610755578063a9f615181461077e578063aa77ed67146107a7578063c0246668146107d0578063c3c8cd80146107f95761023b565b806395d89b41116100f257806395d89b41146106725780639f3d13601461069d578063a2a957bb146106c6578063a2fff114146106ef578063a9059cbb146107185761023b565b8063715018a6146105b3578063758dbe03146105ca578063768dc710146105f35780638a8c523c146106305780638da5cb5b146106475761023b565b806323b872dd116101bc5780634ada218b116101805780634ada218b146104e05780636a1961c41461050b5780636d8aa8f8146105365780636fc3eaec1461055f57806370a08231146105765761023b565b806323b872dd146103f95780632be29fa814610436578063313ce56714610461578063455a43961461048c57806349bd5a5e146104b55761023b565b80631694505e116102035780631694505e14610310578063181281291461033b57806318160ddd146103665780631cdd3be3146103915780631eb147d5146103ce5761023b565b8063032bba6a1461024057806306fdde031461026b578063095ea7b3146102965780630cfc15f9146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102556108f1565b6040516102629190613a5c565b60405180910390f35b34801561027757600080fd5b50610280610917565b60405161028d9190613b07565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190613b95565b610954565b6040516102ca9190613bf0565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190613c0b565b610972565b6040516103079190613c47565b60405180910390f35b34801561031c57600080fd5b5061032561098a565b6040516103329190613cc1565b60405180910390f35b34801561034757600080fd5b506103506109b0565b60405161035d9190613bf0565b60405180910390f35b34801561037257600080fd5b5061037b6109c3565b6040516103889190613c47565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190613c0b565b6109d4565b6040516103c59190613bf0565b60405180910390f35b3480156103da57600080fd5b506103e36109f4565b6040516103f09190613bf0565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613cdc565b610a07565b60405161042d9190613bf0565b60405180910390f35b34801561044257600080fd5b5061044b610ae0565b6040516104589190613d4b565b60405180910390f35b34801561046d57600080fd5b50610476610af3565b6040516104839190613d4b565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613d92565b610afc565b005b3480156104c157600080fd5b506104ca610c3a565b6040516104d79190613a5c565b60405180910390f35b3480156104ec57600080fd5b506104f5610c60565b6040516105029190613bf0565b60405180910390f35b34801561051757600080fd5b50610520610c73565b60405161052d9190613c47565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613dd2565b610c79565b005b34801561056b57600080fd5b50610574610d2b565b005b34801561058257600080fd5b5061059d60048036038101906105989190613c0b565b610d82565b6040516105aa9190613c47565b60405180910390f35b3480156105bf57600080fd5b506105c8610dd3565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613e3d565b610f26565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190613c0b565b6110f5565b6040516106279190613bf0565b60405180910390f35b34801561063c57600080fd5b50610645611115565b005b34801561065357600080fd5b5061065c61123b565b6040516106699190613a5c565b60405180910390f35b34801561067e57600080fd5b50610687611264565b6040516106949190613b07565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190613e3d565b6112a1565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190613e6a565b611470565b005b3480156106fb57600080fd5b5061071660048036038101906107119190613e3d565b611633565b005b34801561072457600080fd5b5061073f600480360381019061073a9190613b95565b611802565b60405161074c9190613bf0565b60405180910390f35b34801561076157600080fd5b5061077c60048036038101906107779190613e3d565b611820565b005b34801561078a57600080fd5b506107a560048036038101906107a09190613efd565b611926565b005b3480156107b357600080fd5b506107ce60048036038101906107c99190613e3d565b6119f3565b005b3480156107dc57600080fd5b506107f760048036038101906107f29190613d92565b611bc2565b005b34801561080557600080fd5b5061080e611d00565b005b34801561081c57600080fd5b5061083760048036038101906108329190613f8f565b611d5f565b005b34801561084557600080fd5b50610860600480360381019061085b9190613fef565b611ed4565b60405161086d9190613c47565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190613cdc565b611f5b565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613c0b565b6120d9565b005b3480156108d457600080fd5b506108ef60048036038101906108ea9190613f8f565b61229a565b005b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600581526020017f47524f4b49000000000000000000000000000000000000000000000000000000815250905090565b600061096861096161240f565b8484612417565b6001905092915050565b60016020528060005260406000206000915090505481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560169054906101000a900460ff1681565b600068256d8093ff81320000905090565b60046020528060005260406000206000915054906101000a900460ff1681565b600560159054906101000a900460ff1681565b6000610a148484846125e0565b610ad584610a2061240f565b610ad085604051806060016040528060288152602001614b7860289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a8661240f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e6a9092919063ffffffff16565b612417565b600190509392505050565b600760009054906101000a900460ff1681565b60006009905090565b610b0461240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b889061407b565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72582604051610c2e9190613bf0565b60405180910390a25050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900460ff1681565b60065481565b610c8161240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d059061407b565b60405180910390fd5b80601460156101000a81548160ff02191690831515021790555050565b610d3361123b565b73ffffffffffffffffffffffffffffffffffffffff16610d5161240f565b73ffffffffffffffffffffffffffffffffffffffff1614610d7157600080fd5b6000479050610d7f81612ece565b50565b6000610dcc600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613135565b9050919050565b610ddb61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061407b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f2e61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb29061407b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b60405160405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60036020528060005260406000206000915054906101000a900460ff1681565b61111d61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a19061407b565b60405180910390fd5b600560149054906101000a900460ff16156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f1906140e7565b60405180910390fd5b600760009054906101000a900460ff1660ff16436112189190614136565b6006819055506001600560146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f47524f4b49000000000000000000000000000000000000000000000000000000815250905090565b6112a961240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d9061407b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c3960405160405180910390a380600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61147861240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc9061407b565b60405180910390fd5b60018410611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906141b6565b60405180910390fd5b6001831061158b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611582906141b6565b60405180910390fd5b600182106115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c5906141b6565b60405180910390fd5b60018110611611576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611608906141b6565b60405180910390fd5b8360098190555082600b8190555081600a8190555080600c8190555050505050565b61163b61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bf9061407b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc60405160405180910390a380601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061181661180f61240f565b84846125e0565b6001905092915050565b61182861240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ac9061407b565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611923600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611bc2565b50565b61192e61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b29061407b565b60405180910390fd5b600560149054906101000a900460ff16156119d557600080fd5b80600760006101000a81548160ff021916908360ff16021790555050565b6119fb61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f9061407b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f4060405160405180910390a380601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160036000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611bca61240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e9061407b565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cf49190613bf0565b60405180910390a25050565b611d0861123b565b73ffffffffffffffffffffffffffffffffffffffff16611d2661240f565b73ffffffffffffffffffffffffffffffffffffffff1614611d4657600080fd5b6000611d5130610d82565b9050611d5c816131a3565b50565b611d6761240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb9061407b565b60405180910390fd5b60005b83839050811015611e93578160036000868685818110611e1a57611e196141d6565b5b9050602002016020810190611e2f9190613c0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e8b90614205565b915050611df7565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611ec793929190614310565b60405180910390a1505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611f6361240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe79061407b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161204d9190613c47565b60405180910390a38273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612090929190614342565b6020604051808303816000875af11580156120af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d39190614380565b50505050565b6120e161240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461216e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121659061407b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d49061441f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a261240f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123269061407b565b60405180910390fd5b60005b838390508110156123ce578160046000868685818110612355576123546141d6565b5b905060200201602081019061236a9190613c0b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123c690614205565b915050612332565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf683838360405161240293929190614310565b60405180910390a1505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d906144b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec90614543565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125d39190613c47565b60405180910390a3505050565b6125e861123b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461263b5760011515600560149054906101000a900460ff1615151461263a57600080fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a1906145d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271090614667565b60405180910390fd5b6000811161275c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612753906146f9565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e090614765565b60405180910390fd5b6000600d819055506000600e81905550600560159054906101000a900460ff1661287f57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361287e576001600560156101000a81548160ff0219169083151502179055505b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129e157600560149054906101000a900460ff1680156128f257506006544311155b801561290b5750600560169054906101000a900460ff16155b156129e057600954600d81905550600a54600e8190555061292d83838361341a565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129db576001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b612e65565b5b600560149054906101000a900460ff168015612a095750600560169054906101000a900460ff165b15612a2a576000600560166101000a81548160ff0219169083151502179055505b612a3261123b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612aa05750612a7061123b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e59576000612ab030610d82565b905060148054906101000a900460ff16158015612b1b5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b335750601460159054906101000a900460ff165b8015612b3f5750600081115b15612b6757612b4d816131a3565b60004790506000811115612b6557612b6447612ece565b5b505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c125750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612c2a57600954600d81905550600a54600e819055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612cd55750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612ced57600b54600d81905550600c54600e819055505b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d8e5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612e415750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612e405750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15612e57576000600d819055506000600e819055505b505b612e6483838361341a565b5b505050565b6000838311158290612eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea99190613b07565b60405180910390fd5b5060008385612ec19190614785565b9050809150509392505050565b6000612ef76007612ee960028561342a90919063ffffffff16565b6134a490919063ffffffff16565b90506000612f226007612f1460028661342a90919063ffffffff16565b6134a490919063ffffffff16565b90506000612f4d6007612f3f60028761342a90919063ffffffff16565b6134a490919063ffffffff16565b90506000612f8882612f7a85612f6c888a6134ee90919063ffffffff16565b6134ee90919063ffffffff16565b6134ee90919063ffffffff16565b9050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015612ff2573d6000803e3d6000fd5b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561305b573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156130c4573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561312d573d6000803e3d6000fd5b505050505050565b600060085482111561317c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131739061482b565b60405180910390fd5b6000613186613538565b905061319b81846134a490919063ffffffff16565b915050919050565b60016014806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156131da576131d961484b565b5b6040519080825280602002602001820160405280156132085781602001602082028036833780820191505090505b50905030816000815181106132205761321f6141d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132eb919061488f565b816001815181106132ff576132fe6141d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061336630601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612417565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133ca95949392919061497d565b600060405180830381600087803b1580156133e457600080fd5b505af11580156133f8573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b613425838383613563565b505050565b600080830361343c576000905061349e565b6000828461344a91906149d7565b90508284826134599190614a48565b14613499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349090614aeb565b60405180910390fd5b809150505b92915050565b60006134e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138da565b905092915050565b600061353083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e6a565b905092915050565b600080600061354561393d565b9150915061355c81836134a490919063ffffffff16565b9250505090565b600061356d613538565b905060006135e461359c606461358e600e548761342a90919063ffffffff16565b6134a490919063ffffffff16565b6135d66135c760646135b9600d548961342a90919063ffffffff16565b6134a490919063ffffffff16565b866134ee90919063ffffffff16565b6134ee90919063ffffffff16565b905060006135fb838561342a90919063ffffffff16565b905060006136398461362b606461361d600d548a61342a90919063ffffffff16565b6134a490919063ffffffff16565b61342a90919063ffffffff16565b9050600061367785613669606461365b600e548b61342a90919063ffffffff16565b6134a490919063ffffffff16565b61342a90919063ffffffff16565b905060006136a08261369285876134ee90919063ffffffff16565b6134ee90919063ffffffff16565b90506136f484600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ee90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061378981600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061381e82600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461399f90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061386a836139fd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516138c79190613c47565b60405180910390a3505050505050505050565b60008083118290613921576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139189190613b07565b60405180910390fd5b50600083856139309190614a48565b9050809150509392505050565b60008060006008549050600068256d8093ff81320000905061397368256d8093ff813200006008546134a490919063ffffffff16565b8210156139925760085468256d8093ff8132000093509350505061399b565b81819350935050505b9091565b60008082846139ae9190614136565b9050838110156139f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ea90614b57565b60405180910390fd5b8091505092915050565b613a12816008546134ee90919063ffffffff16565b60088190555050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a4682613a1b565b9050919050565b613a5681613a3b565b82525050565b6000602082019050613a716000830184613a4d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ab1578082015181840152602081019050613a96565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ad982613a77565b613ae38185613a82565b9350613af3818560208601613a93565b613afc81613abd565b840191505092915050565b60006020820190508181036000830152613b218184613ace565b905092915050565b600080fd5b600080fd5b613b3c81613a3b565b8114613b4757600080fd5b50565b600081359050613b5981613b33565b92915050565b6000819050919050565b613b7281613b5f565b8114613b7d57600080fd5b50565b600081359050613b8f81613b69565b92915050565b60008060408385031215613bac57613bab613b29565b5b6000613bba85828601613b4a565b9250506020613bcb85828601613b80565b9150509250929050565b60008115159050919050565b613bea81613bd5565b82525050565b6000602082019050613c056000830184613be1565b92915050565b600060208284031215613c2157613c20613b29565b5b6000613c2f84828501613b4a565b91505092915050565b613c4181613b5f565b82525050565b6000602082019050613c5c6000830184613c38565b92915050565b6000819050919050565b6000613c87613c82613c7d84613a1b565b613c62565b613a1b565b9050919050565b6000613c9982613c6c565b9050919050565b6000613cab82613c8e565b9050919050565b613cbb81613ca0565b82525050565b6000602082019050613cd66000830184613cb2565b92915050565b600080600060608486031215613cf557613cf4613b29565b5b6000613d0386828701613b4a565b9350506020613d1486828701613b4a565b9250506040613d2586828701613b80565b9150509250925092565b600060ff82169050919050565b613d4581613d2f565b82525050565b6000602082019050613d606000830184613d3c565b92915050565b613d6f81613bd5565b8114613d7a57600080fd5b50565b600081359050613d8c81613d66565b92915050565b60008060408385031215613da957613da8613b29565b5b6000613db785828601613b4a565b9250506020613dc885828601613d7d565b9150509250929050565b600060208284031215613de857613de7613b29565b5b6000613df684828501613d7d565b91505092915050565b6000613e0a82613a1b565b9050919050565b613e1a81613dff565b8114613e2557600080fd5b50565b600081359050613e3781613e11565b92915050565b600060208284031215613e5357613e52613b29565b5b6000613e6184828501613e28565b91505092915050565b60008060008060808587031215613e8457613e83613b29565b5b6000613e9287828801613b80565b9450506020613ea387828801613b80565b9350506040613eb487828801613b80565b9250506060613ec587828801613b80565b91505092959194509250565b613eda81613d2f565b8114613ee557600080fd5b50565b600081359050613ef781613ed1565b92915050565b600060208284031215613f1357613f12613b29565b5b6000613f2184828501613ee8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613f4f57613f4e613f2a565b5b8235905067ffffffffffffffff811115613f6c57613f6b613f2f565b5b602083019150836020820283011115613f8857613f87613f34565b5b9250929050565b600080600060408486031215613fa857613fa7613b29565b5b600084013567ffffffffffffffff811115613fc657613fc5613b2e565b5b613fd286828701613f39565b93509350506020613fe586828701613d7d565b9150509250925092565b6000806040838503121561400657614005613b29565b5b600061401485828601613b4a565b925050602061402585828601613b4a565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614065602083613a82565b91506140708261402f565b602082019050919050565b6000602082019050818103600083015261409481614058565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b60006140d1601a83613a82565b91506140dc8261409b565b602082019050919050565b60006020820190508181036000830152614100816140c4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061414182613b5f565b915061414c83613b5f565b925082820190508082111561416457614163614107565b5b92915050565b7f52656469732063616e6e6f74206265206d6f7265207468616e20312e00000000600082015250565b60006141a0601c83613a82565b91506141ab8261416a565b602082019050919050565b600060208201905081810360008301526141cf81614193565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061421082613b5f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361424257614241614107565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b61427181613a3b565b82525050565b60006142838383614268565b60208301905092915050565b600061429e6020840184613b4a565b905092915050565b6000602082019050919050565b60006142bf838561424d565b93506142ca8261425e565b8060005b85811015614303576142e0828461428f565b6142ea8882614277565b97506142f5836142a6565b9250506001810190506142ce565b5085925050509392505050565b6000604082019050818103600083015261432b8185876142b3565b905061433a6020830184613be1565b949350505050565b60006040820190506143576000830185613a4d565b6143646020830184613c38565b9392505050565b60008151905061437a81613d66565b92915050565b60006020828403121561439657614395613b29565b5b60006143a48482850161436b565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614409602683613a82565b9150614414826143ad565b604082019050919050565b60006020820190508181036000830152614438816143fc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061449b602483613a82565b91506144a68261443f565b604082019050919050565b600060208201905081810360008301526144ca8161448e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061452d602283613a82565b9150614538826144d1565b604082019050919050565b6000602082019050818103600083015261455c81614520565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145bf602583613a82565b91506145ca82614563565b604082019050919050565b600060208201905081810360008301526145ee816145b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614651602383613a82565b915061465c826145f5565b604082019050919050565b6000602082019050818103600083015261468081614644565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146e3602983613a82565b91506146ee82614687565b604082019050919050565b60006020820190508181036000830152614712816146d6565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b600061474f601383613a82565b915061475a82614719565b602082019050919050565b6000602082019050818103600083015261477e81614742565b9050919050565b600061479082613b5f565b915061479b83613b5f565b92508282039050818111156147b3576147b2614107565b5b92915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614815602a83613a82565b9150614820826147b9565b604082019050919050565b6000602082019050818103600083015261484481614808565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061488981613b33565b92915050565b6000602082840312156148a5576148a4613b29565b5b60006148b38482850161487a565b91505092915050565b6000819050919050565b60006148e16148dc6148d7846148bc565b613c62565b613b5f565b9050919050565b6148f1816148c6565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b600061492a826148f7565b614934818561424d565b935061493f83614902565b8060005b838110156149705781516149578882614277565b975061496283614912565b925050600181019050614943565b5085935050505092915050565b600060a0820190506149926000830188613c38565b61499f60208301876148e8565b81810360408301526149b1818661491f565b90506149c06060830185613a4d565b6149cd6080830184613c38565b9695505050505050565b60006149e282613b5f565b91506149ed83613b5f565b92508282026149fb81613b5f565b91508282048414831517614a1257614a11614107565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a5382613b5f565b9150614a5e83613b5f565b925082614a6e57614a6d614a19565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ad5602183613a82565b9150614ae082614a79565b604082019050919050565b60006020820190508181036000830152614b0481614ac8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614b41601b83613a82565b9150614b4c82614b0b565b602082019050919050565b60006020820190508181036000830152614b7081614b34565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f3cd29cf6e1b4ad59a94a8cbb0534114ea301c84e2e8fe52278af9cb75536b1164736f6c63430008130033

Deployed Bytecode Sourcemap

16937:14114:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17267:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20022:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20874:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17026:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18658:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17434:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20299:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17212:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17390:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21043:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17512:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20208:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30530:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18706:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17349:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17473:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29706:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28937:186;;;;;;;;;;;;;:::i;:::-;;20402:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16356:148;;;;;;;;;;;;;:::i;:::-;;26416:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17154:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21969:190;;;;;;;;;;;;;:::i;:::-;;15714:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20113:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26108:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29135:559;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27049:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20548:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19852:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19711:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26739:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30275:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28742:187;;;;;;;;;;;;;:::i;:::-;;29896:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20723:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25810:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16659:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30775:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17267:75;;;;;;;;;;;;;:::o;20022:83::-;20059:13;20092:5;;;;;;;;;;;;;;;;;20085:12;;20022:83;:::o;20874:161::-;20949:4;20966:39;20975:12;:10;:12::i;:::-;20989:7;20998:6;20966:8;:39::i;:::-;21023:4;21016:11;;20874:161;;;;:::o;17026:43::-;;;;;;;;;;;;;;;;;:::o;18658:41::-;;;;;;;;;;;;;:::o;17434:32::-;;;;;;;;;;;;;:::o;20299:95::-;20352:7;17786:21;20372:14;;20299:95;:::o;17212:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;17390:37::-;;;;;;;;;;;;;:::o;21043:313::-;21141:4;21158:36;21168:6;21176:9;21187:6;21158:9;:36::i;:::-;21205:121;21214:6;21222:12;:10;:12::i;:::-;21236:89;21274:6;21236:89;;;;;;;;;;;;;;;;;:11;:19;21248:6;21236:19;;;;;;;;;;;;;;;:33;21256:12;:10;:12::i;:::-;21236:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21205:8;:121::i;:::-;21344:4;21337:11;;21043:313;;;;;:::o;17512:28::-;;;;;;;;;;;;;:::o;20208:83::-;20249:5;18247:1;20267:16;;20208:83;:::o;30530:169::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30638:5:::1;30612:14;:23;30627:7;30612:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;30676:7;30659:32;;;30685:5;30659:32;;;;;;:::i;:::-;;;;;;;;30530:169:::0;;:::o;18706:28::-;;;;;;;;;;;;;:::o;17349:34::-;;;;;;;;;;;;;:::o;17473:32::-;;;;:::o;29706:101::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29787:12:::1;29773:11;;:26;;;;;;;;;;;;;;;;;;29706:101:::0;:::o;28937:186::-;29003:7;:5;:7::i;:::-;28987:23;;:12;:10;:12::i;:::-;:23;;;28979:32;;;;;;29022:26;29051:21;29022:50;;29083:32;29096:18;29083:12;:32::i;:::-;28968:155;28937:186::o;20402:138::-;20468:7;20495:37;20515:7;:16;20523:7;20515:16;;;;;;;;;;;;;;;;20495:19;:37::i;:::-;20488:44;;20402:138;;;:::o;16356:148::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16463:1:::1;16426:40;;16447:6;::::0;::::1;;;;;;;;16426:40;;;;;;;;;;;;16494:1;16477:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16356:148::o:0;26416:237::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26547:5:::1;26504:49;;26528:17;;;;;;;;;;;26504:49;;;;;;;;;;;;26585:5;26565:17;;:25;;;;;;;;;;;;;;;;;;26641:4;26601:18;:37;26620:17;;;;;;;;;;;26601:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;26416:237:::0;:::o;17154:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;21969:190::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22029:14:::1;;;;;;;;;;;22028:15;22020:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22116:11;;;;;;;;;;;22101:26;;:12;:26;;;;:::i;:::-;22081:17;:46;;;;22151:4;22134:14;;:21;;;;;;;;;;;;;;;;;;21969:190::o:0;15714:79::-;15752:7;15779:6;;;;;;;;;;;15772:13;;15714:79;:::o;20113:87::-;20152:13;20185:7;;;;;;;;;;;;;;;;;20178:14;;20113:87;:::o;26108:213::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26223:7:::1;26192:39;;26210:11;;;;;;;;;;;26192:39;;;;;;;;;;;;26257:7;26243:11;;:21;;;;;;;;;;;;;;;;;;26309:4;26275:18;:31;26294:11;;;;;;;;;;;26275:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;26108:213:::0;:::o;29135:559::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29290:1:::1;29274:13;:17;29266:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29357:1;29340:14;:18;29332:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;29424:1;29410:11;:15;29402:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29492:1;29477:12;:16;29469:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29554:13;29537:14;:30;;;;29596:14;29578:15;:32;;;;29636:11;29621:12;:26;;;;29674:12;29658:13;:28;;;;29135:559:::0;;;;:::o;27049:245::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27180:11:::1;27141:51;;27163:15;;;;;;;;;;;27141:51;;;;;;;;;;;;27222:11;27204:15;;:29;;;;;;;;;;;;;;;;;;27282:4;27244:18;:35;27263:15;;;;;;;;;;;27244:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;27049:245:::0;:::o;20548:167::-;20626:4;20643:42;20653:12;:10;:12::i;:::-;20667:9;20678:6;20643:9;:42::i;:::-;20703:4;20696:11;;20548:167;;;;:::o;19852:162::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19951:6:::1;19933:15;;:24;;;;;;;;;;;;;;;;;;19968:38;19984:15;;;;;;;;;;;20001:4;19968:15;:38::i;:::-;19852:162:::0;:::o;19711:133::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19789:14:::1;;;;;;;;;;;19788:15;19780:24;;;::::0;::::1;;19829:7;19815:11;;:21;;;;;;;;;;;;;;;;;;19711:133:::0;:::o;26739:221::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26858:8:::1;26825:42;;26844:12;;;;;;;;;;;26825:42;;;;;;;;;;;;26894:8;26879:12;;:23;;;;;;;;;;;;;;;;;;26948:4;26913:18;:32;26932:12;;;;;;;;;;;26913:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26739:221:::0;:::o;30275:181::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30390:8:::1;30360:18;:27;30379:7;30360:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;30430:7;30414:34;;;30439:8;30414:34;;;;;;:::i;:::-;;;;;;;;30275:181:::0;;:::o;28742:187::-;28808:7;:5;:7::i;:::-;28792:23;;:12;:10;:12::i;:::-;:23;;;28784:32;;;;;;28827:23;28853:24;28871:4;28853:9;:24::i;:::-;28827:50;;28888:33;28905:15;28888:16;:33::i;:::-;28773:156;28742:187::o;29896:301::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30013:9:::1;30009:114;30032:8;;:15;;30028:1;:19;30009:114;;;30103:8;30069:18;:31;30088:8;;30097:1;30088:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30069:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;30049:3;;;;;:::i;:::-;;;;30009:114;;;;30138:51;30170:8;;30180;30138:51;;;;;;;;:::i;:::-;;;;;;;;29896:301:::0;;;:::o;20723:143::-;20804:7;20831:11;:18;20843:5;20831:18;;;;;;;;;;;;;;;:27;20850:7;20831:27;;;;;;;;;;;;;;;;20824:34;;20723:143;;;;:::o;25810:209::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25945:3:::1;25919:39;;25933:10;25919:39;;;25950:7;25919:39;;;;;;:::i;:::-;;;;;;;;25977:10;25970:27;;;25998:3;26003:7;25970:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25810:209:::0;;;:::o;16659:244::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16768:1:::1;16748:22;;:8;:22;;::::0;16740:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16858:8;16829:38;;16850:6;::::0;::::1;;;;;;;;16829:38;;;;;;;;;;;;16887:8;16878:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16659:244:::0;:::o;30775:271::-;15936:12;:10;:12::i;:::-;15926:22;;:6;;;;;;;;;;:22;;;15918:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30880:9:::1;30876:107;30899:8;;:15;;30895:1;:19;30876:107;;;30966:5;30936:14;:27;30951:8;;30960:1;30951:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30936:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30916:3;;;;;:::i;:::-;;;;30876:107;;;;30998:40;31022:8;;31032:5;30998:40;;;;;;;;:::i;:::-;;;;;;;;30775:271:::0;;;:::o;3925:98::-;3978:7;4005:10;3998:17;;3925:98;:::o;21626:335::-;21736:1;21719:19;;:5;:19;;;21711:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21817:1;21798:21;;:7;:21;;;21790:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21899:6;21869:11;:18;21881:5;21869:18;;;;;;;;;;;;;;;:27;21888:7;21869:27;;;;;;;;;;;;;;;:36;;;;21937:7;21921:32;;21930:5;21921:32;;;21946:6;21921:32;;;;;;:::i;:::-;;;;;;;;21626:335;;;:::o;22167:2406::-;22259:7;:5;:7::i;:::-;22251:15;;:4;:15;;;22247:61;;22303:4;22285:22;;:14;;;;;;;;;;;:22;;;22277:31;;;;;;22247:61;22343:1;22327:18;;:4;:18;;;22319:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22420:1;22406:16;;:2;:16;;;22398:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22490:1;22481:6;:10;22473:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22557:14;:20;22572:4;22557:20;;;;;;;;;;;;;;;;;;;;;;;;;22556:21;22548:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;22626:1;22614:9;:13;;;;22648:1;22638:7;:11;;;;22667:17;;;;;;;;;;;22662:180;;22711:13;;;;;;;;;;;22705:19;;:2;:19;;;22701:130;;22765:4;22745:17;;:24;;;;;;;;;;;;;;;;;;22701:130;22662:180;22899:15;;;;;;;;;;;22883:32;;:4;:32;;;22879:431;;22935:14;;;;;;;;;;;:51;;;;;22969:17;;22953:12;:33;;22935:51;:69;;;;;22991:13;;;;;;;;;;;22990:14;22935:69;22932:367;;;23036:14;;23024:9;:26;;;;23079:12;;23069:7;:22;;;;23110:30;23125:4;23130:2;23133:6;23110:14;:30::i;:::-;23177:13;;;;;;;;;;;23163:28;;:2;:28;;;23159:100;;23235:4;23216:14;:18;23231:2;23216:18;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;23159:100;23277:7;;22932:367;22879:431;23326:14;;;;;;;;;;;:31;;;;;23344:13;;;;;;;;;;;23326:31;23322:84;;;23389:5;23373:13;;:21;;;;;;;;;;;;;;;;;;23322:84;23438:7;:5;:7::i;:::-;23430:15;;:4;:15;;;;:32;;;;;23455:7;:5;:7::i;:::-;23449:13;;:2;:13;;;;23430:32;23426:1097;;;23493:28;23524:24;23542:4;23524:9;:24::i;:::-;23493:55;;23568:6;;;;;;;;;;23567:7;:32;;;;;23586:13;;;;;;;;;;;23578:21;;:4;:21;;;;23567:32;:47;;;;;23603:11;;;;;;;;;;;23567:47;:75;;;;;23641:1;23618:20;:24;23567:75;23563:346;;;23663:38;23680:20;23663:16;:38::i;:::-;23720:26;23749:21;23720:50;;23813:1;23792:18;:22;23789:105;;;23839:35;23852:21;23839:12;:35::i;:::-;23789:105;23644:265;23563:346;23948:13;;;;;;;;;;;23940:21;;:4;:21;;;:55;;;;;23979:15;;;;;;;;;;;23965:30;;:2;:30;;;;23940:55;23937:162;;;24028:14;;24016:9;:26;;;;24071:12;;24061:7;:22;;;;23937:162;24129:13;;;;;;;;;;;24123:19;;:2;:19;;;:55;;;;;24162:15;;;;;;;;;;;24146:32;;:4;:32;;;;24123:55;24119:165;;;24211:15;;24199:9;:27;;;;24255:13;;24245:7;:23;;;;24119:165;24317:18;:24;24336:4;24317:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;24345:18;:22;24364:2;24345:22;;;;;;;;;;;;;;;;;;;;;;;;;24317:50;24316:102;;;;24381:13;;;;;;;;;;;24373:21;;:4;:21;;;;:44;;;;;24404:13;;;;;;;;;;;24398:19;;:2;:19;;;;24373:44;24316:102;24312:186;;;24451:1;24439:9;:13;;;;24481:1;24471:7;:11;;;;24312:186;23464:1059;23426:1097;24535:30;24550:4;24555:2;24558:6;24535:14;:30::i;:::-;22167:2406;;;;:::o;6037:192::-;6123:7;6156:1;6151;:6;;6159:12;6143:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6183:9;6199:1;6195;:5;;;;:::i;:::-;6183:17;;6220:1;6213:8;;;6037:192;;;;;:::o;25080:482::-;25137:17;25157:20;25175:1;25157:13;25168:1;25157:6;:10;;:13;;;;:::i;:::-;:17;;:20;;;;:::i;:::-;25137:40;;25188:17;25208:20;25226:1;25208:13;25219:1;25208:6;:10;;:13;;;;:::i;:::-;:17;;:20;;;;:::i;:::-;25188:40;;25239:21;25263:20;25281:1;25263:13;25274:1;25263:6;:10;;:13;;;;:::i;:::-;:17;;:20;;;;:::i;:::-;25239:44;;25294:18;25315:55;25356:13;25315:36;25341:9;25315:21;25326:9;25315:6;:10;;:21;;;;:::i;:::-;:25;;:36;;;;:::i;:::-;:40;;:55;;;;:::i;:::-;25294:76;;25381:11;;;;;;;;;;;:20;;:31;25402:9;25381:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25423:17;;;;;;;;;;;:26;;:37;25450:9;25423:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25471:15;;;;;;;;;;;:24;;:39;25496:13;25471:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25521:12;;;;;;;;;;;:21;;:33;25543:10;25521:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25126:436;;;;25080:482;:::o;21364:254::-;21431:7;21470;;21459;:18;;21451:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21535:19;21558:10;:8;:10::i;:::-;21535:33;;21586:24;21598:11;21586:7;:11;;:24;;;;:::i;:::-;21579:31;;;21364:254;;;:::o;24581:483::-;18866:4;18857:6;;:13;;;;;;;;;;;;;;;;;;24659:21:::1;24697:1;24683:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24659:40;;24728:4;24710;24715:1;24710:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;24754:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24744:4;24749:1;24744:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;24787:62;24804:4;24819:15;;;;;;;;;;;24837:11;24787:8;:62::i;:::-;24860:15;;;;;;;;;;;:66;;;24941:11;24967:1;24983:4;25010;25030:15;24860:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24648:416;18902:5:::0;18893:6;;:14;;;;;;;;;;;;;;;;;;24581:483;:::o;25574:146::-;25668:44;25686:6;25694:9;25705:6;25668:17;:44::i;:::-;25574:146;;;:::o;6488:471::-;6546:7;6796:1;6791;:6;6787:47;;6821:1;6814:8;;;;6787:47;6846:9;6862:1;6858;:5;;;;:::i;:::-;6846:17;;6891:1;6886;6882;:5;;;;:::i;:::-;:10;6874:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6950:1;6943:8;;;6488:471;;;;;:::o;7435:132::-;7493:7;7520:39;7524:1;7527;7520:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7513:46;;7435:132;;;;:::o;5598:136::-;5656:7;5683:43;5687:1;5690;5683:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5676:50;;5598:136;;;;:::o;28301:163::-;28342:7;28363:15;28380;28399:19;:17;:19::i;:::-;28362:56;;;;28436:20;28448:7;28436;:11;;:20;;;;:::i;:::-;28429:27;;;;28301:163;:::o;27302:805::-;27400:19;27423:10;:8;:10::i;:::-;27400:33;;27444:23;27470:79;27519:29;27544:3;27519:20;27531:7;;27519;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;27470:44;27482:31;27509:3;27482:22;27494:9;;27482:7;:11;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;27470:7;:11;;:44;;;;:::i;:::-;:48;;:79;;;;:::i;:::-;27444:105;;27560:15;27578:24;27590:11;27578:7;:11;;:24;;;;:::i;:::-;27560:42;;27613:12;27628:48;27664:11;27628:31;27655:3;27628:22;27640:9;;27628:7;:11;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;:35;;:48;;;;:::i;:::-;27613:63;;27687:13;27703:46;27737:11;27703:29;27728:3;27703:20;27715:7;;27703;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;:33;;:46;;;;:::i;:::-;27687:62;;27760:23;27786:28;27808:5;27786:17;27798:4;27786:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;27760:54;;27843:28;27863:7;27843;:15;27851:6;27843:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27825:7;:15;27833:6;27825:15;;;;;;;;;;;;;;;:46;;;;27903:39;27926:15;27903:7;:18;27911:9;27903:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27882:7;:18;27890:9;27882:18;;;;;;;;;;;;;;;:60;;;;27978:33;28005:5;27978:7;:22;27994:4;27978:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;27953:7;:22;27969:4;27953:22;;;;;;;;;;;;;;;:58;;;;28022:17;28034:4;28022:11;:17::i;:::-;28072:9;28055:44;;28064:6;28055:44;;;28083:15;28055:44;;;;;;:::i;:::-;;;;;;;;27389:718;;;;;;27302:805;;;:::o;8063:278::-;8149:7;8181:1;8177;:5;8184:12;8169:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8208:9;8224:1;8220;:5;;;;:::i;:::-;8208:17;;8332:1;8325:8;;;8063:278;;;;;:::o;28472:262::-;28522:7;28531;28551:15;28569:7;;28551:25;;28587:15;17786:21;28587:25;;28643:20;17786:21;28643:7;;:11;;:20;;;;:::i;:::-;28633:7;:30;28629:61;;;28673:7;;17786:21;28665:25;;;;;;;;28629:61;28709:7;28718;28701:25;;;;;;28472:262;;;:::o;5134:181::-;5192:7;5212:9;5228:1;5224;:5;;;;:::i;:::-;5212:17;;5253:1;5248;:6;;5240:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5306:1;5299:8;;;5134:181;;;;:::o;28170:89::-;28234:17;28246:4;28234:7;;:11;;:17;;;;:::i;:::-;28224:7;:27;;;;28170:89;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2139:117;2248:1;2245;2238:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:60::-;4513:3;4534:5;4527:12;;4485:60;;;:::o;4551:142::-;4601:9;4634:53;4652:34;4661:24;4679:5;4661:24;:::i;:::-;4652:34;:::i;:::-;4634:53;:::i;:::-;4621:66;;4551:142;;;:::o;4699:126::-;4749:9;4782:37;4813:5;4782:37;:::i;:::-;4769:50;;4699:126;;;:::o;4831:152::-;4907:9;4940:37;4971:5;4940:37;:::i;:::-;4927:50;;4831:152;;;:::o;4989:183::-;5102:63;5159:5;5102:63;:::i;:::-;5097:3;5090:76;4989:183;;:::o;5178:274::-;5297:4;5335:2;5324:9;5320:18;5312:26;;5348:97;5442:1;5431:9;5427:17;5418:6;5348:97;:::i;:::-;5178:274;;;;:::o;5458:619::-;5535:6;5543;5551;5600:2;5588:9;5579:7;5575:23;5571:32;5568:119;;;5606:79;;:::i;:::-;5568:119;5726:1;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5697:117;5853:2;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5824:118;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;5458:619;;;;;:::o;6083:86::-;6118:7;6158:4;6151:5;6147:16;6136:27;;6083:86;;;:::o;6175:112::-;6258:22;6274:5;6258:22;:::i;:::-;6253:3;6246:35;6175:112;;:::o;6293:214::-;6382:4;6420:2;6409:9;6405:18;6397:26;;6433:67;6497:1;6486:9;6482:17;6473:6;6433:67;:::i;:::-;6293:214;;;;:::o;6513:116::-;6583:21;6598:5;6583:21;:::i;:::-;6576:5;6573:32;6563:60;;6619:1;6616;6609:12;6563:60;6513:116;:::o;6635:133::-;6678:5;6716:6;6703:20;6694:29;;6732:30;6756:5;6732:30;:::i;:::-;6635:133;;;;:::o;6774:468::-;6839:6;6847;6896:2;6884:9;6875:7;6871:23;6867:32;6864:119;;;6902:79;;:::i;:::-;6864:119;7022:1;7047:53;7092:7;7083:6;7072:9;7068:22;7047:53;:::i;:::-;7037:63;;6993:117;7149:2;7175:50;7217:7;7208:6;7197:9;7193:22;7175:50;:::i;:::-;7165:60;;7120:115;6774:468;;;;;:::o;7248:323::-;7304:6;7353:2;7341:9;7332:7;7328:23;7324:32;7321:119;;;7359:79;;:::i;:::-;7321:119;7479:1;7504:50;7546:7;7537:6;7526:9;7522:22;7504:50;:::i;:::-;7494:60;;7450:114;7248:323;;;;:::o;7577:104::-;7622:7;7651:24;7669:5;7651:24;:::i;:::-;7640:35;;7577:104;;;:::o;7687:138::-;7768:32;7794:5;7768:32;:::i;:::-;7761:5;7758:43;7748:71;;7815:1;7812;7805:12;7748:71;7687:138;:::o;7831:155::-;7885:5;7923:6;7910:20;7901:29;;7939:41;7974:5;7939:41;:::i;:::-;7831:155;;;;:::o;7992:345::-;8059:6;8108:2;8096:9;8087:7;8083:23;8079:32;8076:119;;;8114:79;;:::i;:::-;8076:119;8234:1;8259:61;8312:7;8303:6;8292:9;8288:22;8259:61;:::i;:::-;8249:71;;8205:125;7992:345;;;;:::o;8343:765::-;8429:6;8437;8445;8453;8502:3;8490:9;8481:7;8477:23;8473:33;8470:120;;;8509:79;;:::i;:::-;8470:120;8629:1;8654:53;8699:7;8690:6;8679:9;8675:22;8654:53;:::i;:::-;8644:63;;8600:117;8756:2;8782:53;8827:7;8818:6;8807:9;8803:22;8782:53;:::i;:::-;8772:63;;8727:118;8884:2;8910:53;8955:7;8946:6;8935:9;8931:22;8910:53;:::i;:::-;8900:63;;8855:118;9012:2;9038:53;9083:7;9074:6;9063:9;9059:22;9038:53;:::i;:::-;9028:63;;8983:118;8343:765;;;;;;;:::o;9114:118::-;9185:22;9201:5;9185:22;:::i;:::-;9178:5;9175:33;9165:61;;9222:1;9219;9212:12;9165:61;9114:118;:::o;9238:135::-;9282:5;9320:6;9307:20;9298:29;;9336:31;9361:5;9336:31;:::i;:::-;9238:135;;;;:::o;9379:325::-;9436:6;9485:2;9473:9;9464:7;9460:23;9456:32;9453:119;;;9491:79;;:::i;:::-;9453:119;9611:1;9636:51;9679:7;9670:6;9659:9;9655:22;9636:51;:::i;:::-;9626:61;;9582:115;9379:325;;;;:::o;9710:117::-;9819:1;9816;9809:12;9833:117;9942:1;9939;9932:12;9956:117;10065:1;10062;10055:12;10096:568;10169:8;10179:6;10229:3;10222:4;10214:6;10210:17;10206:27;10196:122;;10237:79;;:::i;:::-;10196:122;10350:6;10337:20;10327:30;;10380:18;10372:6;10369:30;10366:117;;;10402:79;;:::i;:::-;10366:117;10516:4;10508:6;10504:17;10492:29;;10570:3;10562:4;10554:6;10550:17;10540:8;10536:32;10533:41;10530:128;;;10577:79;;:::i;:::-;10530:128;10096:568;;;;;:::o;10670:698::-;10762:6;10770;10778;10827:2;10815:9;10806:7;10802:23;10798:32;10795:119;;;10833:79;;:::i;:::-;10795:119;10981:1;10970:9;10966:17;10953:31;11011:18;11003:6;11000:30;10997:117;;;11033:79;;:::i;:::-;10997:117;11146:80;11218:7;11209:6;11198:9;11194:22;11146:80;:::i;:::-;11128:98;;;;10924:312;11275:2;11301:50;11343:7;11334:6;11323:9;11319:22;11301:50;:::i;:::-;11291:60;;11246:115;10670:698;;;;;:::o;11374:474::-;11442:6;11450;11499:2;11487:9;11478:7;11474:23;11470:32;11467:119;;;11505:79;;:::i;:::-;11467:119;11625:1;11650:53;11695:7;11686:6;11675:9;11671:22;11650:53;:::i;:::-;11640:63;;11596:117;11752:2;11778:53;11823:7;11814:6;11803:9;11799:22;11778:53;:::i;:::-;11768:63;;11723:118;11374:474;;;;;:::o;11854:182::-;11994:34;11990:1;11982:6;11978:14;11971:58;11854:182;:::o;12042:366::-;12184:3;12205:67;12269:2;12264:3;12205:67;:::i;:::-;12198:74;;12281:93;12370:3;12281:93;:::i;:::-;12399:2;12394:3;12390:12;12383:19;;12042:366;;;:::o;12414:419::-;12580:4;12618:2;12607:9;12603:18;12595:26;;12667:9;12661:4;12657:20;12653:1;12642:9;12638:17;12631:47;12695:131;12821:4;12695:131;:::i;:::-;12687:139;;12414:419;;;:::o;12839:176::-;12979:28;12975:1;12967:6;12963:14;12956:52;12839:176;:::o;13021:366::-;13163:3;13184:67;13248:2;13243:3;13184:67;:::i;:::-;13177:74;;13260:93;13349:3;13260:93;:::i;:::-;13378:2;13373:3;13369:12;13362:19;;13021:366;;;:::o;13393:419::-;13559:4;13597:2;13586:9;13582:18;13574:26;;13646:9;13640:4;13636:20;13632:1;13621:9;13617:17;13610:47;13674:131;13800:4;13674:131;:::i;:::-;13666:139;;13393:419;;;:::o;13818:180::-;13866:77;13863:1;13856:88;13963:4;13960:1;13953:15;13987:4;13984:1;13977:15;14004:191;14044:3;14063:20;14081:1;14063:20;:::i;:::-;14058:25;;14097:20;14115:1;14097:20;:::i;:::-;14092:25;;14140:1;14137;14133:9;14126:16;;14161:3;14158:1;14155:10;14152:36;;;14168:18;;:::i;:::-;14152:36;14004:191;;;;:::o;14201:178::-;14341:30;14337:1;14329:6;14325:14;14318:54;14201:178;:::o;14385:366::-;14527:3;14548:67;14612:2;14607:3;14548:67;:::i;:::-;14541:74;;14624:93;14713:3;14624:93;:::i;:::-;14742:2;14737:3;14733:12;14726:19;;14385:366;;;:::o;14757:419::-;14923:4;14961:2;14950:9;14946:18;14938:26;;15010:9;15004:4;15000:20;14996:1;14985:9;14981:17;14974:47;15038:131;15164:4;15038:131;:::i;:::-;15030:139;;14757:419;;;:::o;15182:180::-;15230:77;15227:1;15220:88;15327:4;15324:1;15317:15;15351:4;15348:1;15341:15;15368:233;15407:3;15430:24;15448:5;15430:24;:::i;:::-;15421:33;;15476:66;15469:5;15466:77;15463:103;;15546:18;;:::i;:::-;15463:103;15593:1;15586:5;15582:13;15575:20;;15368:233;;;:::o;15607:184::-;15706:11;15740:6;15735:3;15728:19;15780:4;15775:3;15771:14;15756:29;;15607:184;;;;:::o;15797:102::-;15866:4;15889:3;15881:11;;15797:102;;;:::o;15905:108::-;15982:24;16000:5;15982:24;:::i;:::-;15977:3;15970:37;15905:108;;:::o;16019:179::-;16088:10;16109:46;16151:3;16143:6;16109:46;:::i;:::-;16187:4;16182:3;16178:14;16164:28;;16019:179;;;;:::o;16204:122::-;16256:5;16281:39;16316:2;16311:3;16307:12;16302:3;16281:39;:::i;:::-;16272:48;;16204:122;;;;:::o;16332:115::-;16404:4;16436;16431:3;16427:14;16419:22;;16332:115;;;:::o;16483:699::-;16612:3;16635:86;16714:6;16709:3;16635:86;:::i;:::-;16628:93;;16745:58;16797:5;16745:58;:::i;:::-;16826:7;16857:1;16842:315;16867:6;16864:1;16861:13;16842:315;;;16937:42;16972:6;16963:7;16937:42;:::i;:::-;16999:63;17058:3;17043:13;16999:63;:::i;:::-;16992:70;;17085:62;17140:6;17085:62;:::i;:::-;17075:72;;16902:255;16889:1;16886;16882:9;16877:14;;16842:315;;;16846:14;17173:3;17166:10;;16617:565;;16483:699;;;;;:::o;17188:491::-;17363:4;17401:2;17390:9;17386:18;17378:26;;17450:9;17444:4;17440:20;17436:1;17425:9;17421:17;17414:47;17478:118;17591:4;17582:6;17574;17478:118;:::i;:::-;17470:126;;17606:66;17668:2;17657:9;17653:18;17644:6;17606:66;:::i;:::-;17188:491;;;;;;:::o;17685:332::-;17806:4;17844:2;17833:9;17829:18;17821:26;;17857:71;17925:1;17914:9;17910:17;17901:6;17857:71;:::i;:::-;17938:72;18006:2;17995:9;17991:18;17982:6;17938:72;:::i;:::-;17685:332;;;;;:::o;18023:137::-;18077:5;18108:6;18102:13;18093:22;;18124:30;18148:5;18124:30;:::i;:::-;18023:137;;;;:::o;18166:345::-;18233:6;18282:2;18270:9;18261:7;18257:23;18253:32;18250:119;;;18288:79;;:::i;:::-;18250:119;18408:1;18433:61;18486:7;18477:6;18466:9;18462:22;18433:61;:::i;:::-;18423:71;;18379:125;18166:345;;;;:::o;18517:225::-;18657:34;18653:1;18645:6;18641:14;18634:58;18726:8;18721:2;18713:6;18709:15;18702:33;18517:225;:::o;18748:366::-;18890:3;18911:67;18975:2;18970:3;18911:67;:::i;:::-;18904:74;;18987:93;19076:3;18987:93;:::i;:::-;19105:2;19100:3;19096:12;19089:19;;18748:366;;;:::o;19120:419::-;19286:4;19324:2;19313:9;19309:18;19301:26;;19373:9;19367:4;19363:20;19359:1;19348:9;19344:17;19337:47;19401:131;19527:4;19401:131;:::i;:::-;19393:139;;19120:419;;;:::o;19545:223::-;19685:34;19681:1;19673:6;19669:14;19662:58;19754:6;19749:2;19741:6;19737:15;19730:31;19545:223;:::o;19774:366::-;19916:3;19937:67;20001:2;19996:3;19937:67;:::i;:::-;19930:74;;20013:93;20102:3;20013:93;:::i;:::-;20131:2;20126:3;20122:12;20115:19;;19774:366;;;:::o;20146:419::-;20312:4;20350:2;20339:9;20335:18;20327:26;;20399:9;20393:4;20389:20;20385:1;20374:9;20370:17;20363:47;20427:131;20553:4;20427:131;:::i;:::-;20419:139;;20146:419;;;:::o;20571:221::-;20711:34;20707:1;20699:6;20695:14;20688:58;20780:4;20775:2;20767:6;20763:15;20756:29;20571:221;:::o;20798:366::-;20940:3;20961:67;21025:2;21020:3;20961:67;:::i;:::-;20954:74;;21037:93;21126:3;21037:93;:::i;:::-;21155:2;21150:3;21146:12;21139:19;;20798:366;;;:::o;21170:419::-;21336:4;21374:2;21363:9;21359:18;21351:26;;21423:9;21417:4;21413:20;21409:1;21398:9;21394:17;21387:47;21451:131;21577:4;21451:131;:::i;:::-;21443:139;;21170:419;;;:::o;21595:224::-;21735:34;21731:1;21723:6;21719:14;21712:58;21804:7;21799:2;21791:6;21787:15;21780:32;21595:224;:::o;21825:366::-;21967:3;21988:67;22052:2;22047:3;21988:67;:::i;:::-;21981:74;;22064:93;22153:3;22064:93;:::i;:::-;22182:2;22177:3;22173:12;22166:19;;21825:366;;;:::o;22197:419::-;22363:4;22401:2;22390:9;22386:18;22378:26;;22450:9;22444:4;22440:20;22436:1;22425:9;22421:17;22414:47;22478:131;22604:4;22478:131;:::i;:::-;22470:139;;22197:419;;;:::o;22622:222::-;22762:34;22758:1;22750:6;22746:14;22739:58;22831:5;22826:2;22818:6;22814:15;22807:30;22622:222;:::o;22850:366::-;22992:3;23013:67;23077:2;23072:3;23013:67;:::i;:::-;23006:74;;23089:93;23178:3;23089:93;:::i;:::-;23207:2;23202:3;23198:12;23191:19;;22850:366;;;:::o;23222:419::-;23388:4;23426:2;23415:9;23411:18;23403:26;;23475:9;23469:4;23465:20;23461:1;23450:9;23446:17;23439:47;23503:131;23629:4;23503:131;:::i;:::-;23495:139;;23222:419;;;:::o;23647:228::-;23787:34;23783:1;23775:6;23771:14;23764:58;23856:11;23851:2;23843:6;23839:15;23832:36;23647:228;:::o;23881:366::-;24023:3;24044:67;24108:2;24103:3;24044:67;:::i;:::-;24037:74;;24120:93;24209:3;24120:93;:::i;:::-;24238:2;24233:3;24229:12;24222:19;;23881:366;;;:::o;24253:419::-;24419:4;24457:2;24446:9;24442:18;24434:26;;24506:9;24500:4;24496:20;24492:1;24481:9;24477:17;24470:47;24534:131;24660:4;24534:131;:::i;:::-;24526:139;;24253:419;;;:::o;24678:169::-;24818:21;24814:1;24806:6;24802:14;24795:45;24678:169;:::o;24853:366::-;24995:3;25016:67;25080:2;25075:3;25016:67;:::i;:::-;25009:74;;25092:93;25181:3;25092:93;:::i;:::-;25210:2;25205:3;25201:12;25194:19;;24853:366;;;:::o;25225:419::-;25391:4;25429:2;25418:9;25414:18;25406:26;;25478:9;25472:4;25468:20;25464:1;25453:9;25449:17;25442:47;25506:131;25632:4;25506:131;:::i;:::-;25498:139;;25225:419;;;:::o;25650:194::-;25690:4;25710:20;25728:1;25710:20;:::i;:::-;25705:25;;25744:20;25762:1;25744:20;:::i;:::-;25739:25;;25788:1;25785;25781:9;25773:17;;25812:1;25806:4;25803:11;25800:37;;;25817:18;;:::i;:::-;25800:37;25650:194;;;;:::o;25850:229::-;25990:34;25986:1;25978:6;25974:14;25967:58;26059:12;26054:2;26046:6;26042:15;26035:37;25850:229;:::o;26085:366::-;26227:3;26248:67;26312:2;26307:3;26248:67;:::i;:::-;26241:74;;26324:93;26413:3;26324:93;:::i;:::-;26442:2;26437:3;26433:12;26426:19;;26085:366;;;:::o;26457:419::-;26623:4;26661:2;26650:9;26646:18;26638:26;;26710:9;26704:4;26700:20;26696:1;26685:9;26681:17;26674:47;26738:131;26864:4;26738:131;:::i;:::-;26730:139;;26457:419;;;:::o;26882:180::-;26930:77;26927:1;26920:88;27027:4;27024:1;27017:15;27051:4;27048:1;27041:15;27068:143;27125:5;27156:6;27150:13;27141:22;;27172:33;27199:5;27172:33;:::i;:::-;27068:143;;;;:::o;27217:351::-;27287:6;27336:2;27324:9;27315:7;27311:23;27307:32;27304:119;;;27342:79;;:::i;:::-;27304:119;27462:1;27487:64;27543:7;27534:6;27523:9;27519:22;27487:64;:::i;:::-;27477:74;;27433:128;27217:351;;;;:::o;27574:85::-;27619:7;27648:5;27637:16;;27574:85;;;:::o;27665:158::-;27723:9;27756:61;27774:42;27783:32;27809:5;27783:32;:::i;:::-;27774:42;:::i;:::-;27756:61;:::i;:::-;27743:74;;27665:158;;;:::o;27829:147::-;27924:45;27963:5;27924:45;:::i;:::-;27919:3;27912:58;27829:147;;:::o;27982:114::-;28049:6;28083:5;28077:12;28067:22;;27982:114;;;:::o;28102:132::-;28169:4;28192:3;28184:11;;28222:4;28217:3;28213:14;28205:22;;28102:132;;;:::o;28240:113::-;28310:4;28342;28337:3;28333:14;28325:22;;28240:113;;;:::o;28389:732::-;28508:3;28537:54;28585:5;28537:54;:::i;:::-;28607:86;28686:6;28681:3;28607:86;:::i;:::-;28600:93;;28717:56;28767:5;28717:56;:::i;:::-;28796:7;28827:1;28812:284;28837:6;28834:1;28831:13;28812:284;;;28913:6;28907:13;28940:63;28999:3;28984:13;28940:63;:::i;:::-;28933:70;;29026:60;29079:6;29026:60;:::i;:::-;29016:70;;28872:224;28859:1;28856;28852:9;28847:14;;28812:284;;;28816:14;29112:3;29105:10;;28513:608;;;28389:732;;;;:::o;29127:831::-;29390:4;29428:3;29417:9;29413:19;29405:27;;29442:71;29510:1;29499:9;29495:17;29486:6;29442:71;:::i;:::-;29523:80;29599:2;29588:9;29584:18;29575:6;29523:80;:::i;:::-;29650:9;29644:4;29640:20;29635:2;29624:9;29620:18;29613:48;29678:108;29781:4;29772:6;29678:108;:::i;:::-;29670:116;;29796:72;29864:2;29853:9;29849:18;29840:6;29796:72;:::i;:::-;29878:73;29946:3;29935:9;29931:19;29922:6;29878:73;:::i;:::-;29127:831;;;;;;;;:::o;29964:410::-;30004:7;30027:20;30045:1;30027:20;:::i;:::-;30022:25;;30061:20;30079:1;30061:20;:::i;:::-;30056:25;;30116:1;30113;30109:9;30138:30;30156:11;30138:30;:::i;:::-;30127:41;;30317:1;30308:7;30304:15;30301:1;30298:22;30278:1;30271:9;30251:83;30228:139;;30347:18;;:::i;:::-;30228:139;30012:362;29964:410;;;;:::o;30380:180::-;30428:77;30425:1;30418:88;30525:4;30522:1;30515:15;30549:4;30546:1;30539:15;30566:185;30606:1;30623:20;30641:1;30623:20;:::i;:::-;30618:25;;30657:20;30675:1;30657:20;:::i;:::-;30652:25;;30696:1;30686:35;;30701:18;;:::i;:::-;30686:35;30743:1;30740;30736:9;30731:14;;30566:185;;;;:::o;30757:220::-;30897:34;30893:1;30885:6;30881:14;30874:58;30966:3;30961:2;30953:6;30949:15;30942:28;30757:220;:::o;30983:366::-;31125:3;31146:67;31210:2;31205:3;31146:67;:::i;:::-;31139:74;;31222:93;31311:3;31222:93;:::i;:::-;31340:2;31335:3;31331:12;31324:19;;30983:366;;;:::o;31355:419::-;31521:4;31559:2;31548:9;31544:18;31536:26;;31608:9;31602:4;31598:20;31594:1;31583:9;31579:17;31572:47;31636:131;31762:4;31636:131;:::i;:::-;31628:139;;31355:419;;;:::o;31780:177::-;31920:29;31916:1;31908:6;31904:14;31897:53;31780:177;:::o;31963:366::-;32105:3;32126:67;32190:2;32185:3;32126:67;:::i;:::-;32119:74;;32202:93;32291:3;32202:93;:::i;:::-;32320:2;32315:3;32311:12;32304:19;;31963:366;;;:::o;32335:419::-;32501:4;32539:2;32528:9;32524:18;32516:26;;32588:9;32582:4;32578:20;32574:1;32563:9;32559:17;32552:47;32616:131;32742:4;32616:131;:::i;:::-;32608:139;;32335:419;;;:::o

Swarm Source

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