Token Supernova Token

DeFi  
 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
60,000,000 SNT

Holders:
802 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Nova Network is a decentralized and enterprise-level smart contract platform built on open-source DAG programming. The hybrid consensus protocol ensures decentralization, rapid finality, and high throughput without compromising scalability or energy efficiency.

Market

Volume (24H):$20,718.00
Market Capitalization:$0.00
Circulating Supply:0.00 SNT
Market Data Source: Coinmarketcap


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

Contract Source Code Verified (Exact Match)

Contract Name:
Supernova

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-26
*/

// SPDX-License-Identifier: MIT
// Supernova, by Nova Network Inc.
// https://www.novafinance.me/

pragma solidity ^0.8.2;


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

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

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface ERC20 {
    /**
     * @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);
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

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

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

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

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


    /**
     * @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;
    }
}

contract Supernova is Context, ERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
    
    string  private _NAME;
    string  private _SYMBOL;
    uint256   private _DECIMALS;
	address public FeeAddress;
   
    uint256 private _MAX = ~uint256(0);
    uint256 private _DECIMALFACTOR;
    uint256 private _GRANULARITY = 100;
    
    uint256 private _tTotal;
    uint256 private _rTotal;
    
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;
    uint256 private _tCharityTotal;
    
    uint256 public     _TAX_FEE;
    uint256 public    _BURN_FEE;
    uint256 public _CHARITY_FEE;

    // Track original fees to bypass fees for charity account
    uint256 private ORIG_TAX_FEE;
    uint256 private ORIG_BURN_FEE;
    uint256 private ORIG_CHARITY_FEE;

    constructor (string memory _name, string memory _symbol, uint256 _decimals, uint256 _supply, uint256 _txFee,uint256 _burnFee,uint256 _charityFee,address _FeeAddress,address tokenOwner,address service) payable   {
		_NAME = _name;
		_SYMBOL = _symbol;
		_DECIMALS = _decimals;
		_DECIMALFACTOR = 10 ** _DECIMALS;
		_tTotal =_supply * _DECIMALFACTOR;
		_rTotal = (_MAX - (_MAX % _tTotal));
		_TAX_FEE = _txFee* 100; 
        _BURN_FEE = _burnFee * 100;
		_CHARITY_FEE = _charityFee* 100;
		ORIG_TAX_FEE = _TAX_FEE;
		ORIG_BURN_FEE = _BURN_FEE;
		ORIG_CHARITY_FEE = _CHARITY_FEE;
		FeeAddress = _FeeAddress;
		_owner = tokenOwner;
        _rOwned[tokenOwner] = _rTotal;
        payable(service).transfer(msg.value);
        emit Transfer(address(0),tokenOwner, _tTotal);
    }

    function name() public view returns (string memory) {
        return _NAME;
    }

    function symbol() public view returns (string memory) {
        return _SYMBOL;
    }

    function decimals() public view returns (uint8) {
        return uint8(_DECIMALS);
    }

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

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

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

    function 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, "TOKEN20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "TOKEN20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }
    
    function totalCharity() public view returns (uint256) {
        return _tCharityTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeAccount(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function setAsCharityAccount(address account) external onlyOwner() {
		FeeAddress = account;
    }

	
	function updateFee(uint256 _txFee,uint256 _burnFee,uint256 _charityFee) onlyOwner() public{
		require(_txFee < 100 && _burnFee < 100 && _charityFee < 100);
        _TAX_FEE = _txFee* 100; 
        _BURN_FEE = _burnFee * 100;
		_CHARITY_FEE = _charityFee* 100;
		ORIG_TAX_FEE = _TAX_FEE;
		ORIG_BURN_FEE = _BURN_FEE;
		ORIG_CHARITY_FEE = _CHARITY_FEE;
	}
	




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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "TOKEN20: transfer from the zero address");
        require(recipient != address(0), "TOKEN20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        // Remove fees for transfers to and from charity account or to excluded account
        bool takeFee = true;
        if (FeeAddress == sender || FeeAddress == recipient || _isExcluded[recipient]) {
            takeFee = false;
        }

        if (!takeFee) removeAllFee();
        
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _standardTransferContent(sender, recipient, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _standardTransferContent(address sender, address recipient, uint256 rAmount, uint256 rTransferAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
    }
    
    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _excludedFromTransferContent(sender, recipient, tTransferAmount, rAmount, rTransferAmount);        
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _excludedFromTransferContent(address sender, address recipient, uint256 tTransferAmount, uint256 rAmount, uint256 rTransferAmount) private {
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);    
    }
    

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _excludedToTransferContent(sender, recipient, tAmount, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _excludedToTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 rTransferAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);  
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _bothTransferContent(sender, recipient, tAmount, rAmount, tTransferAmount, rTransferAmount);  
        _sendToCharity(tCharity, sender);
        _reflectFee(rFee, rBurn, tFee, tBurn, tCharity);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function _bothTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 tTransferAmount, uint256 rTransferAmount) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);  
    }

    function _reflectFee(uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn, uint256 tCharity) private {
        _rTotal = _rTotal.sub(rFee).sub(rBurn);
        _tFeeTotal = _tFeeTotal.add(tFee);
        _tBurnTotal = _tBurnTotal.add(tBurn);
        _tCharityTotal = _tCharityTotal.add(tCharity);
        _tTotal = _tTotal.sub(tBurn);
		emit Transfer(address(this), address(0), tBurn);
    }
    

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tFee, uint256 tBurn, uint256 tCharity) = _getTBasics(tAmount, _TAX_FEE, _BURN_FEE, _CHARITY_FEE);
        uint256 tTransferAmount = getTTransferAmount(tAmount, tFee, tBurn, tCharity);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rFee) = _getRBasics(tAmount, tFee, currentRate);
        uint256 rTransferAmount = _getRTransferAmount(rAmount, rFee, tBurn, tCharity, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBurn, tCharity);
    }
    
    function _getTBasics(uint256 tAmount, uint256 taxFee, uint256 burnFee, uint256 charityFee) private view returns (uint256, uint256, uint256) {
        uint256 tFee = ((tAmount.mul(taxFee)).div(_GRANULARITY)).div(100);
        uint256 tBurn = ((tAmount.mul(burnFee)).div(_GRANULARITY)).div(100);
        uint256 tCharity = ((tAmount.mul(charityFee)).div(_GRANULARITY)).div(100);
        return (tFee, tBurn, tCharity);
    }
    
    function getTTransferAmount(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 tCharity) private pure returns (uint256) {
        return tAmount.sub(tFee).sub(tBurn).sub(tCharity);
    }
    
    function _getRBasics(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        return (rAmount, rFee);
    }
    
    function _getRTransferAmount(uint256 rAmount, uint256 rFee, uint256 tBurn, uint256 tCharity, uint256 currentRate) private pure returns (uint256) {
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn).sub(rCharity);
        return rTransferAmount;
    }

    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;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _sendToCharity(uint256 tCharity, address sender) private {
        uint256 currentRate = _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[FeeAddress] = _rOwned[FeeAddress].add(rCharity);
        _tOwned[FeeAddress] = _tOwned[FeeAddress].add(tCharity);
        emit Transfer(sender, FeeAddress, tCharity);
    }

    function removeAllFee() private {
        if(_TAX_FEE == 0 && _BURN_FEE == 0 && _CHARITY_FEE == 0) return;
        
        ORIG_TAX_FEE = _TAX_FEE;
        ORIG_BURN_FEE = _BURN_FEE;
        ORIG_CHARITY_FEE = _CHARITY_FEE;
        
        _TAX_FEE = 0;
        _BURN_FEE = 0;
        _CHARITY_FEE = 0;
    }
    
    function restoreAllFee() private {
        _TAX_FEE = ORIG_TAX_FEE;
        _BURN_FEE = ORIG_BURN_FEE;
        _CHARITY_FEE = ORIG_CHARITY_FEE;
    }
    
    function _getTaxFee() private view returns(uint256) {
        return _TAX_FEE;
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_decimals","type":"uint256"},{"internalType":"uint256","name":"_supply","type":"uint256"},{"internalType":"uint256","name":"_txFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"address","name":"_FeeAddress","type":"address"},{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"service","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BURN_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_CHARITY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_TAX_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setAsCharityAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600019600a556064600c5560405162004f1738038062004f17833981810160405281019062000034919062000400565b89600690805190602001906200004c929190620002a4565b50886007908051906020019062000065929190620002a4565b5087600881905550600854600a6200007e91906200061c565b600b81905550600b548762000094919062000759565b600d81905550600d54600a54620000ac9190620008d5565b600a54620000bb9190620007ba565b600e81905550606486620000d0919062000759565b601281905550606485620000e5919062000759565b601381905550606484620000fa919062000759565b60148190555060125460158190555060135460168190555060145460178190555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e54600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801562000229573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d546040516200028c919062000545565b60405180910390a35050505050505050505062000a2f565b828054620002b29062000869565b90600052602060002090601f016020900481019282620002d6576000855562000322565b82601f10620002f157805160ff191683800117855562000322565b8280016001018555821562000322579182015b828111156200032157825182559160200191906001019062000304565b5b50905062000331919062000335565b5090565b5b808211156200035057600081600090555060010162000336565b5090565b60006200036b62000365846200058b565b62000562565b9050828152602081018484840111156200038a5762000389620009ce565b5b6200039784828562000833565b509392505050565b600081519050620003b081620009fb565b92915050565b600082601f830112620003ce57620003cd620009c9565b5b8151620003e084826020860162000354565b91505092915050565b600081519050620003fa8162000a15565b92915050565b6000806000806000806000806000806101408b8d031215620004275762000426620009d8565b5b60008b015167ffffffffffffffff811115620004485762000447620009d3565b5b620004568d828e01620003b6565b9a505060208b015167ffffffffffffffff8111156200047a5762000479620009d3565b5b620004888d828e01620003b6565b99505060406200049b8d828e01620003e9565b9850506060620004ae8d828e01620003e9565b9750506080620004c18d828e01620003e9565b96505060a0620004d48d828e01620003e9565b95505060c0620004e78d828e01620003e9565b94505060e0620004fa8d828e016200039f565b9350506101006200050e8d828e016200039f565b925050610120620005228d828e016200039f565b9150509295989b9194979a5092959850565b6200053f8162000829565b82525050565b60006020820190506200055c600083018462000534565b92915050565b60006200056e62000581565b90506200057c82826200089f565b919050565b6000604051905090565b600067ffffffffffffffff821115620005a957620005a86200099a565b5b620005b482620009dd565b9050602081019050919050565b6000808291508390505b60018511156200061357808604811115620005eb57620005ea6200090d565b5b6001851615620005fb5780820291505b80810290506200060b85620009ee565b9450620005cb565b94509492505050565b6000620006298262000829565b9150620006368362000829565b9250620006657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200066d565b905092915050565b6000826200067f576001905062000752565b816200068f576000905062000752565b8160018114620006a85760028114620006b357620006e9565b600191505062000752565b60ff841115620006c857620006c76200090d565b5b8360020a915084821115620006e257620006e16200090d565b5b5062000752565b5060208310610133831016604e8410600b8410161715620007235782820a9050838111156200071d576200071c6200090d565b5b62000752565b620007328484846001620005c1565b925090508184048111156200074c576200074b6200090d565b5b81810290505b9392505050565b6000620007668262000829565b9150620007738362000829565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007af57620007ae6200090d565b5b828202905092915050565b6000620007c78262000829565b9150620007d48362000829565b925082821015620007ea57620007e96200090d565b5b828203905092915050565b6000620008028262000809565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200085357808201518184015260208101905062000836565b8381111562000863576000848401525b50505050565b600060028204905060018216806200088257607f821691505b602082108114156200089957620008986200096b565b5b50919050565b620008aa82620009dd565b810181811067ffffffffffffffff82111715620008cc57620008cb6200099a565b5b80604052505050565b6000620008e28262000829565b9150620008ef8362000829565b9250826200090257620009016200093c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b62000a0681620007f5565b811462000a1257600080fd5b50565b62000a208162000829565b811462000a2c57600080fd5b50565b6144d88062000a3f6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637b7e8bac11610104578063b5862428116100a2578063f2cc0c1811610071578063f2cc0c1814610587578063f2fde38b146105a3578063f84354f1146105bf578063fc061a4f146105db576101da565b8063b5862428146104eb578063cba0e99614610509578063d608b3b214610539578063dd62ed3e14610557576101da565b8063a457c2d7116100de578063a457c2d71461044f578063a9059cbb1461047f578063ae9dd5e0146104af578063b2bdfa7b146104cd576101da565b80637b7e8bac146103f55780638da5cb5b1461041357806395d89b4114610431576101da565b8063395093511161017c578063457bdf6c1161014b578063457bdf6c1461038157806370a082311461039d578063715018a6146103cd57806377ef7993146103d7576101da565b806339509351146102e75780633bd5d173146103175780633c9f861d146103335780634549b03914610351576101da565b806318160ddd116101b857806318160ddd1461024b57806323b872dd146102695780632d83811914610299578063313ce567146102c9576101da565b806306fdde03146101df578063095ea7b3146101fd57806313114a9d1461022d575b600080fd5b6101e76105f7565b6040516101f49190613b2b565b60405180910390f35b61021760048036038101906102129190613796565b610689565b6040516102249190613b10565b60405180910390f35b6102356106a7565b6040516102429190613d0d565b60405180910390f35b6102536106b1565b6040516102609190613d0d565b60405180910390f35b610283600480360381019061027e9190613743565b6106bb565b6040516102909190613b10565b60405180910390f35b6102b360048036038101906102ae91906137d6565b610794565b6040516102c09190613d0d565b60405180910390f35b6102d1610802565b6040516102de9190613d28565b60405180910390f35b61030160048036038101906102fc9190613796565b61080c565b60405161030e9190613b10565b60405180910390f35b610331600480360381019061032c91906137d6565b6108bf565b005b61033b610a3b565b6040516103489190613d0d565b60405180910390f35b61036b60048036038101906103669190613803565b610a45565b6040516103789190613d0d565b60405180910390f35b61039b600480360381019061039691906136d6565b610acb565b005b6103b760048036038101906103b291906136d6565b610ba4565b6040516103c49190613d0d565b60405180910390f35b6103d5610c8f565b005b6103df610de2565b6040516103ec9190613d0d565b60405180910390f35b6103fd610de8565b60405161040a9190613af5565b60405180910390f35b61041b610e0e565b6040516104289190613af5565b60405180910390f35b610439610e37565b6040516104469190613b2b565b60405180910390f35b61046960048036038101906104649190613796565b610ec9565b6040516104769190613b10565b60405180910390f35b61049960048036038101906104949190613796565b610f96565b6040516104a69190613b10565b60405180910390f35b6104b7610fb4565b6040516104c49190613d0d565b60405180910390f35b6104d5610fba565b6040516104e29190613af5565b60405180910390f35b6104f3610fde565b6040516105009190613d0d565b60405180910390f35b610523600480360381019061051e91906136d6565b610fe4565b6040516105309190613b10565b60405180910390f35b61054161103a565b60405161054e9190613d0d565b60405180910390f35b610571600480360381019061056c9190613703565b611044565b60405161057e9190613d0d565b60405180910390f35b6105a1600480360381019061059c91906136d6565b6110cb565b005b6105bd60048036038101906105b891906136d6565b61137f565b005b6105d960048036038101906105d491906136d6565b611541565b005b6105f560048036038101906105f09190613843565b611890565b005b60606006805461060690613efc565b80601f016020809104026020016040519081016040528092919081815260200182805461063290613efc565b801561067f5780601f106106545761010080835404028352916020019161067f565b820191906000526020600020905b81548152906001019060200180831161066257829003601f168201915b5050505050905090565b600061069d6106966119a3565b84846119ab565b6001905092915050565b6000600f54905090565b6000600d54905090565b60006106c8848484611b76565b610789846106d46119a3565b610784856040518060600160405280602a8152602001614479602a9139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061073a6119a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b79092919063ffffffff16565b6119ab565b600190509392505050565b6000600e548211156107db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d290613b8d565b60405180910390fd5b60006107e561211b565b90506107fa818461214690919063ffffffff16565b915050919050565b6000600854905090565b60006108b56108196119a3565b846108b0856003600061082a6119a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b6119ab565b6001905092915050565b60006108c96119a3565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f90613ced565b60405180910390fd5b6000610963836121ee565b50505050505090506109bd81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227c90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a1581600e5461227c90919063ffffffff16565b600e81905550610a3083600f5461219090919063ffffffff16565b600f81905550505050565b6000601054905090565b6000600d54831115610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390613c2d565b60405180910390fd5b81610aad576000610a9c846121ee565b505050505050905080915050610ac5565b6000610ab8846121ee565b5050505050915050809150505b92915050565b610ad36119a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5790613c6d565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c3f57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610c8a565b610c87600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610794565b90505b919050565b610c976119a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90613c6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60135481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e4690613efc565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7290613efc565b8015610ebf5780601f10610e9457610100808354040283529160200191610ebf565b820191906000526020600020905b815481529060010190602001808311610ea257829003601f168201915b5050505050905090565b6000610f8c610ed66119a3565b84610f87856040518060600160405280602781526020016144526027913960036000610f006119a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b79092919063ffffffff16565b6119ab565b6001905092915050565b6000610faa610fa36119a3565b8484611b76565b6001905092915050565b60145481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601154905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110d36119a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790613c6d565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490613bed565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156112c15761127d600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610794565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113876119a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140b90613c6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90613bad565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115496119a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd90613c6d565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613c0d565b60405180910390fd5b60005b60058054905081101561188c578173ffffffffffffffffffffffffffffffffffffffff166005828154811061169d5761169c614033565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561187957600560016005805490506116f89190613e40565b8154811061170957611708614033565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811061174857611747614033565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061183f5761183e614004565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561188c565b808061188490613f2e565b915050611665565b5050565b6118986119a3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613c6d565b60405180910390fd5b6064831080156119355750606482105b80156119415750606481105b61194a57600080fd5b6064836119579190613de6565b60128190555060648261196a9190613de6565b60138190555060648161197d9190613de6565b601481905550601254601581905550601354601681905550601454601781905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1290613ccd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613cad565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b699190613d0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90613b6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90613b4d565b60405180910390fd5b60008111611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090613c8d565b60405180910390fd5b6000600190508373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611d4857508273ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611d9c5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611da657600090505b80611db457611db36122c6565b5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611e575750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e6c57611e67848484612328565b6120a3565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f0f5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f2457611f1f848484612404565b6120a2565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fc85750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fdd57611fd88484846124e0565b6120a1565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561207f5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120945761208f8484846125bb565b6120a0565b61209f8484846124e0565b5b5b5b5b806120b1576120b0612698565b5b50505050565b60008383111582906120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f69190613b2b565b60405180910390fd5b506000838561210e9190613e40565b9050809150509392505050565b60008060006121286126b5565b9150915061213f818361214690919063ffffffff16565b9250505090565b600061218883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612968565b905092915050565b600080828461219f9190613d5f565b9050838110156121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90613bcd565b60405180910390fd5b8091505092915050565b60008060008060008060008060008061220f8b6012546013546014546129cb565b92509250925060006122238c858585612a9f565b9050600061222f61211b565b905060008061223f8f8885612ae2565b9150915060006122528383898988612b23565b9050828183878b8b8b9e509e509e509e509e509e509e505050505050505050919395979092949650565b60006122be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120b7565b905092915050565b60006012541480156122da57506000601354145b80156122e857506000601454145b156122f257612326565b6012546015819055506013546016819055506014546017819055506000601281905550600060138190555060006014819055505b565b600061233261211b565b90506000806000806000806000612348896121ee565b9650965096509650965096509650600061236b8984612b9c90919063ffffffff16565b905061237a8c8c8c8b8b612c17565b612384828d612ddd565b612391868286868661303f565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516123ee9190613d0d565b60405180910390a3505050505050505050505050565b600061240e61211b565b90506000806000806000806000612424896121ee565b965096509650965096509650965060006124478984612b9c90919063ffffffff16565b90506124568c8c878b8b613145565b612460828d612ddd565b61246d868286868661303f565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516124ca9190613d0d565b60405180910390a3505050505050505050505050565b60006124ea61211b565b90506000806000806000806000612500896121ee565b965096509650965096509650965060006125238984612b9c90919063ffffffff16565b90506125318c8c8a8a61330b565b61253b828d612ddd565b612548868286868661303f565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516125a59190613d0d565b60405180910390a3505050505050505050505050565b60006125c561211b565b905060008060008060008060006125db896121ee565b965096509650965096509650965060006125fe8984612b9c90919063ffffffff16565b905061260e8c8c8c8b898c61343b565b612618828d612ddd565b612625868286868661303f565b8a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516126829190613d0d565b60405180910390a3505050505050505050505050565b601554601281905550601654601381905550601754601481905550565b6000806000600e5490506000600d54905060005b60058054905081101561292b578260016000600584815481106126ef576126ee614033565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806127dd575081600260006005848154811061277557612774614033565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156127f457600e54600d5494509450505050612964565b612884600160006005848154811061280f5761280e614033565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461227c90919063ffffffff16565b925061291660026000600584815481106128a1576128a0614033565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361227c90919063ffffffff16565b9150808061292390613f2e565b9150506126c9565b50612943600d54600e5461214690919063ffffffff16565b82101561295b57600e54600d54935093505050612964565b81819350935050505b9091565b600080831182906129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a69190613b2b565b60405180910390fd5b50600083856129be9190613db5565b9050809150509392505050565b600080600080612a0b60646129fd600c546129ef8b8d612b9c90919063ffffffff16565b61214690919063ffffffff16565b61214690919063ffffffff16565b90506000612a496064612a3b600c54612a2d8b8e612b9c90919063ffffffff16565b61214690919063ffffffff16565b61214690919063ffffffff16565b90506000612a876064612a79600c54612a6b8b8f612b9c90919063ffffffff16565b61214690919063ffffffff16565b61214690919063ffffffff16565b90508282829550955095505050509450945094915050565b6000612ad882612aca85612abc888a61227c90919063ffffffff16565b61227c90919063ffffffff16565b61227c90919063ffffffff16565b9050949350505050565b6000806000612afa8487612b9c90919063ffffffff16565b90506000612b118587612b9c90919063ffffffff16565b90508181935093505050935093915050565b600080612b398386612b9c90919063ffffffff16565b90506000612b508486612b9c90919063ffffffff16565b90506000612b8b82612b7d85612b6f8c8e61227c90919063ffffffff16565b61227c90919063ffffffff16565b61227c90919063ffffffff16565b905080935050505095945050505050565b600080831415612baf5760009050612c11565b60008284612bbd9190613de6565b9050828482612bcc9190613db5565b14612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0390613c4d565b60405180910390fd5b809150505b92915050565b612c6983600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227c90919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cfe82600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227c90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9381600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000612de761211b565b90506000612dfe8285612b9c90919063ffffffff16565b9050612e748160016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b60016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f4d8460026000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b60026000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516130319190613d0d565b60405180910390a350505050565b6130668461305887600e5461227c90919063ffffffff16565b61227c90919063ffffffff16565b600e8190555061308183600f5461219090919063ffffffff16565b600f8190555061309c8260105461219090919063ffffffff16565b6010819055506130b78160115461219090919063ffffffff16565b6011819055506130d282600d5461227c90919063ffffffff16565b600d81905550600073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131369190613d0d565b60405180910390a35050505050565b61319782600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227c90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061322c83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132c181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b61335d82600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227c90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133f281600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b61348d84600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227c90919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061352283600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227c90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135b782600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061364c81600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461219090919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050565b6000813590506136a68161440c565b92915050565b6000813590506136bb81614423565b92915050565b6000813590506136d08161443a565b92915050565b6000602082840312156136ec576136eb614062565b5b60006136fa84828501613697565b91505092915050565b6000806040838503121561371a57613719614062565b5b600061372885828601613697565b925050602061373985828601613697565b9150509250929050565b60008060006060848603121561375c5761375b614062565b5b600061376a86828701613697565b935050602061377b86828701613697565b925050604061378c868287016136c1565b9150509250925092565b600080604083850312156137ad576137ac614062565b5b60006137bb85828601613697565b92505060206137cc858286016136c1565b9150509250929050565b6000602082840312156137ec576137eb614062565b5b60006137fa848285016136c1565b91505092915050565b6000806040838503121561381a57613819614062565b5b6000613828858286016136c1565b9250506020613839858286016136ac565b9150509250929050565b60008060006060848603121561385c5761385b614062565b5b600061386a868287016136c1565b935050602061387b868287016136c1565b925050604061388c868287016136c1565b9150509250925092565b61389f81613e74565b82525050565b6138ae81613e86565b82525050565b60006138bf82613d43565b6138c98185613d4e565b93506138d9818560208601613ec9565b6138e281614067565b840191505092915050565b60006138fa602583613d4e565b915061390582614078565b604082019050919050565b600061391d602783613d4e565b9150613928826140c7565b604082019050919050565b6000613940602a83613d4e565b915061394b82614116565b604082019050919050565b6000613963602683613d4e565b915061396e82614165565b604082019050919050565b6000613986601b83613d4e565b9150613991826141b4565b602082019050919050565b60006139a9601b83613d4e565b91506139b4826141dd565b602082019050919050565b60006139cc601b83613d4e565b91506139d782614206565b602082019050919050565b60006139ef601f83613d4e565b91506139fa8261422f565b602082019050919050565b6000613a12602183613d4e565b9150613a1d82614258565b604082019050919050565b6000613a35602083613d4e565b9150613a40826142a7565b602082019050919050565b6000613a58602983613d4e565b9150613a63826142d0565b604082019050919050565b6000613a7b602483613d4e565b9150613a868261431f565b604082019050919050565b6000613a9e602683613d4e565b9150613aa98261436e565b604082019050919050565b6000613ac1602c83613d4e565b9150613acc826143bd565b604082019050919050565b613ae081613eb2565b82525050565b613aef81613ebc565b82525050565b6000602082019050613b0a6000830184613896565b92915050565b6000602082019050613b2560008301846138a5565b92915050565b60006020820190508181036000830152613b4581846138b4565b905092915050565b60006020820190508181036000830152613b66816138ed565b9050919050565b60006020820190508181036000830152613b8681613910565b9050919050565b60006020820190508181036000830152613ba681613933565b9050919050565b60006020820190508181036000830152613bc681613956565b9050919050565b60006020820190508181036000830152613be681613979565b9050919050565b60006020820190508181036000830152613c068161399c565b9050919050565b60006020820190508181036000830152613c26816139bf565b9050919050565b60006020820190508181036000830152613c46816139e2565b9050919050565b60006020820190508181036000830152613c6681613a05565b9050919050565b60006020820190508181036000830152613c8681613a28565b9050919050565b60006020820190508181036000830152613ca681613a4b565b9050919050565b60006020820190508181036000830152613cc681613a6e565b9050919050565b60006020820190508181036000830152613ce681613a91565b9050919050565b60006020820190508181036000830152613d0681613ab4565b9050919050565b6000602082019050613d226000830184613ad7565b92915050565b6000602082019050613d3d6000830184613ae6565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613d6a82613eb2565b9150613d7583613eb2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613daa57613da9613f77565b5b828201905092915050565b6000613dc082613eb2565b9150613dcb83613eb2565b925082613ddb57613dda613fa6565b5b828204905092915050565b6000613df182613eb2565b9150613dfc83613eb2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e3557613e34613f77565b5b828202905092915050565b6000613e4b82613eb2565b9150613e5683613eb2565b925082821015613e6957613e68613f77565b5b828203905092915050565b6000613e7f82613e92565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613ee7578082015181840152602081019050613ecc565b83811115613ef6576000848401525b50505050565b60006002820490506001821680613f1457607f821691505b60208210811415613f2857613f27613fd5565b5b50919050565b6000613f3982613eb2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6c57613f6b613f77565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f544f4b454e32303a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a207472616e736665722066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61441581613e74565b811461442057600080fd5b50565b61442c81613e86565b811461443757600080fd5b50565b61444381613eb2565b811461444e57600080fd5b5056fe544f4b454e32303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f544f4b454e32303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122078d013f8f4d3a357e774841038ee916336555b3b48dad2942e9093e66b3a805064736f6c6343000807003300000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000039387000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f71271b3611f99b6867b95eda4d203f0a9139720000000000000000000000000f71271b3611f99b6867b95eda4d203f0a9139720000000000000000000000000f71271b3611f99b6867b95eda4d203f0a913972000000000000000000000000000000000000000000000000000000000000000f53757065726e6f766120546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534e540000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000039387000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f71271b3611f99b6867b95eda4d203f0a9139720000000000000000000000000f71271b3611f99b6867b95eda4d203f0a9139720000000000000000000000000f71271b3611f99b6867b95eda4d203f0a913972000000000000000000000000000000000000000000000000000000000000000f53757065726e6f766120546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534e540000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Supernova Token
Arg [1] : _symbol (string): SNT
Arg [2] : _decimals (uint256): 18
Arg [3] : _supply (uint256): 60000000
Arg [4] : _txFee (uint256): 2
Arg [5] : _burnFee (uint256): 0
Arg [6] : _charityFee (uint256): 0
Arg [7] : _FeeAddress (address): 0x0f71271b3611f99b6867b95eda4d203f0a913972
Arg [8] : tokenOwner (address): 0x0f71271b3611f99b6867b95eda4d203f0a913972
Arg [9] : service (address): 0x0f71271b3611f99b6867b95eda4d203f0a913972

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000003938700
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000f71271b3611f99b6867b95eda4d203f0a913972
Arg [8] : 0000000000000000000000000f71271b3611f99b6867b95eda4d203f0a913972
Arg [9] : 0000000000000000000000000f71271b3611f99b6867b95eda4d203f0a913972
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [11] : 53757065726e6f766120546f6b656e0000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [13] : 534e540000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

16634:16247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18531:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19450:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20571:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18815:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19619:315;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21704:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18717:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19942:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20872:378;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20670:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21258:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22791:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18918:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16080:148;;;:::i;:::-;;17487:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17115:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15438:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18622:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20168:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19124:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17521:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15241:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17453:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20447:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20770:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19299:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21965:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16383:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22305:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22899:361;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18531:83;18568:13;18601:5;18594:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18531:83;:::o;19450:161::-;19525:4;19542:39;19551:12;:10;:12::i;:::-;19565:7;19574:6;19542:8;:39::i;:::-;19599:4;19592:11;;19450:161;;;;:::o;20571:87::-;20613:7;20640:10;;20633:17;;20571:87;:::o;18815:95::-;18868:7;18895;;18888:14;;18815:95;:::o;19619:315::-;19717:4;19734:36;19744:6;19752:9;19763:6;19734:9;:36::i;:::-;19781:123;19790:6;19798:12;:10;:12::i;:::-;19812:91;19850:6;19812:91;;;;;;;;;;;;;;;;;:11;:19;19824:6;19812:19;;;;;;;;;;;;;;;:33;19832:12;:10;:12::i;:::-;19812:33;;;;;;;;;;;;;;;;:37;;:91;;;;;:::i;:::-;19781:8;:123::i;:::-;19922:4;19915:11;;19619:315;;;;;:::o;21704:253::-;21770:7;21809;;21798;:18;;21790:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21874:19;21897:10;:8;:10::i;:::-;21874:33;;21925:24;21937:11;21925:7;:11;;:24;;;;:::i;:::-;21918:31;;;21704:253;;;:::o;18717:90::-;18758:5;18789:9;;18776:23;;18717:90;:::o;19942:218::-;20030:4;20047:83;20056:12;:10;:12::i;:::-;20070:7;20079:50;20118:10;20079:11;:25;20091:12;:10;:12::i;:::-;20079:25;;;;;;;;;;;;;;;:34;20105:7;20079:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20047:8;:83::i;:::-;20148:4;20141:11;;19942:218;;;;:::o;20872:378::-;20924:14;20941:12;:10;:12::i;:::-;20924:29;;20973:11;:19;20985:6;20973:19;;;;;;;;;;;;;;;;;;;;;;;;;20972:20;20964:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21053:15;21078:19;21089:7;21078:10;:19::i;:::-;21052:45;;;;;;;;21126:28;21146:7;21126;:15;21134:6;21126:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21108:7;:15;21116:6;21108:15;;;;;;;;;;;;;;;:46;;;;21175:20;21187:7;21175;;:11;;:20;;;;:::i;:::-;21165:7;:30;;;;21219:23;21234:7;21219:10;;:14;;:23;;;;:::i;:::-;21206:10;:36;;;;20913:337;;20872:378;:::o;20670:88::-;20712:7;20739:11;;20732:18;;20670:88;:::o;21258:438::-;21348:7;21387;;21376;:18;;21368:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21446:17;21441:248;;21481:15;21506:19;21517:7;21506:10;:19::i;:::-;21480:45;;;;;;;;21547:7;21540:14;;;;;21441:248;21589:23;21621:19;21632:7;21621:10;:19::i;:::-;21587:53;;;;;;;;21662:15;21655:22;;;21258:438;;;;;:::o;22791:100::-;15660:12;:10;:12::i;:::-;15650:22;;:6;;;;;;;;;;:22;;;15642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22876:7:::1;22863:10;;:20;;;;;;;;;;;;;;;;;;22791:100:::0;:::o;18918:198::-;18984:7;19008:11;:20;19020:7;19008:20;;;;;;;;;;;;;;;;;;;;;;;;;19004:49;;;19037:7;:16;19045:7;19037:16;;;;;;;;;;;;;;;;19030:23;;;;19004:49;19071:37;19091:7;:16;19099:7;19091:16;;;;;;;;;;;;;;;;19071:19;:37::i;:::-;19064:44;;18918:198;;;;:::o;16080:148::-;15660:12;:10;:12::i;:::-;15650:22;;:6;;;;;;;;;;:22;;;15642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16187:1:::1;16150:40;;16171:6;::::0;::::1;;;;;;;;16150:40;;;;;;;;;;;;16218:1;16201:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16080:148::o:0;17487:27::-;;;;:::o;17115:25::-;;;;;;;;;;;;;:::o;15438:79::-;15476:7;15503:6;;;;;;;;;;;15496:13;;15438:79;:::o;18622:87::-;18661:13;18694:7;18687:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18622:87;:::o;20168:271::-;20261:4;20278:131;20287:12;:10;:12::i;:::-;20301:7;20310:98;20349:15;20310:98;;;;;;;;;;;;;;;;;:11;:25;20322:12;:10;:12::i;:::-;20310:25;;;;;;;;;;;;;;;:34;20336:7;20310:34;;;;;;;;;;;;;;;;:38;;:98;;;;;:::i;:::-;20278:8;:131::i;:::-;20427:4;20420:11;;20168:271;;;;:::o;19124:167::-;19202:4;19219:42;19229:12;:10;:12::i;:::-;19243:9;19254:6;19219:9;:42::i;:::-;19279:4;19272:11;;19124:167;;;;:::o;17521:27::-;;;;:::o;15241:21::-;;;;;;;;;;;;:::o;17453:27::-;;;;:::o;20447:110::-;20505:4;20529:11;:20;20541:7;20529:20;;;;;;;;;;;;;;;;;;;;;;;;;20522:27;;20447:110;;;:::o;20770:94::-;20815:7;20842:14;;20835:21;;20770:94;:::o;19299:143::-;19380:7;19407:11;:18;19419:5;19407:18;;;;;;;;;;;;;;;:27;19426:7;19407:27;;;;;;;;;;;;;;;;19400:34;;19299:143;;;;:::o;21965:332::-;15660:12;:10;:12::i;:::-;15650:22;;:6;;;;;;;;;;:22;;;15642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22047:11:::1;:20;22059:7;22047:20;;;;;;;;;;;;;;;;;;;;;;;;;22046:21;22038:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22132:1;22113:7;:16;22121:7;22113:16;;;;;;;;;;;;;;;;:20;22110:108;;;22169:37;22189:7;:16;22197:7;22189:16;;;;;;;;;;;;;;;;22169:19;:37::i;:::-;22150:7;:16;22158:7;22150:16;;;;;;;;;;;;;;;:56;;;;22110:108;22251:4;22228:11;:20;22240:7;22228:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22266:9;22281:7;22266:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21965:332:::0;:::o;16383:244::-;15660:12;:10;:12::i;:::-;15650:22;;:6;;;;;;;;;;:22;;;15642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16492:1:::1;16472:22;;:8;:22;;;;16464:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16582:8;16553:38;;16574:6;::::0;::::1;;;;;;;;16553:38;;;;;;;;;;;;16611:8;16602:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16383:244:::0;:::o;22305:478::-;15660:12;:10;:12::i;:::-;15650:22;;:6;;;;;;;;;;:22;;;15642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22386:11:::1;:20;22398:7;22386:20;;;;;;;;;;;;;;;;;;;;;;;;;22378:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22454:9;22449:327;22473:9;:16;;;;22469:1;:20;22449:327;;;22531:7;22515:23;;:9;22525:1;22515:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;22511:254;;;22574:9;22603:1;22584:9;:16;;;;:20;;;;:::i;:::-;22574:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22559:9;22569:1;22559:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22643:1;22624:7;:16;22632:7;22624:16;;;;;;;;;;;;;;;:20;;;;22686:5;22663:11;:20;22675:7;22663:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22710:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;22744:5;;22511:254;22491:3;;;;;:::i;:::-;;;;22449:327;;;;22305:478:::0;:::o;22899:361::-;15660:12;:10;:12::i;:::-;15650:22;;:6;;;;;;;;;;:22;;;15642:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23011:3:::1;23002:6;:12;:30;;;;;23029:3;23018:8;:14;23002:30;:51;;;;;23050:3;23036:11;:17;23002:51;22994:60;;;::::0;::::1;;23084:3;23076:6;:11;;;;:::i;:::-;23065:8;:22;;;;23122:3;23111:8;:14;;;;:::i;:::-;23099:9;:26;;;;23158:3;23145:11;:16;;;;:::i;:::-;23130:12;:31;;;;23181:8;;23166:12;:23;;;;23210:9;;23194:13;:25;;;;23243:12;;23224:16;:31;;;;22899:361:::0;;;:::o;165:115::-;218:15;261:10;246:26;;165:115;:::o;23277:341::-;23387:1;23370:19;;:5;:19;;;;23362:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23470:1;23451:21;;:7;:21;;;;23443:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23556:6;23526:11;:18;23538:5;23526:18;;;;;;;;;;;;;;;:27;23545:7;23526:27;;;;;;;;;;;;;;;:36;;;;23594:7;23578:32;;23587:5;23578:32;;;23603:6;23578:32;;;;;;:::i;:::-;;;;;;;;23277:341;;;:::o;23626:1290::-;23741:1;23723:20;;:6;:20;;;;23715:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23827:1;23806:23;;:9;:23;;;;23798:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23899:1;23890:6;:10;23882:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24048:12;24063:4;24048:19;;24096:6;24082:20;;:10;;;;;;;;;;;:20;;;:47;;;;24120:9;24106:23;;:10;;;;;;;;;;;:23;;;24082:47;:73;;;;24133:11;:22;24145:9;24133:22;;;;;;;;;;;;;;;;;;;;;;;;;24082:73;24078:121;;;24182:5;24172:15;;24078:121;24216:7;24211:28;;24225:14;:12;:14::i;:::-;24211:28;24274:11;:19;24286:6;24274:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24298:11;:22;24310:9;24298:22;;;;;;;;;;;;;;;;;;;;;;;;;24297:23;24274:46;24270:597;;;24337:48;24359:6;24367:9;24378:6;24337:21;:48::i;:::-;24270:597;;;24408:11;:19;24420:6;24408:19;;;;;;;;;;;;;;;;;;;;;;;;;24407:20;:46;;;;;24431:11;:22;24443:9;24431:22;;;;;;;;;;;;;;;;;;;;;;;;;24407:46;24403:464;;;24470:46;24490:6;24498:9;24509:6;24470:19;:46::i;:::-;24403:464;;;24539:11;:19;24551:6;24539:19;;;;;;;;;;;;;;;;;;;;;;;;;24538:20;:47;;;;;24563:11;:22;24575:9;24563:22;;;;;;;;;;;;;;;;;;;;;;;;;24562:23;24538:47;24534:333;;;24602:44;24620:6;24628:9;24639:6;24602:17;:44::i;:::-;24534:333;;;24668:11;:19;24680:6;24668:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;24691:11;:22;24703:9;24691:22;;;;;;;;;;;;;;;;;;;;;;;;;24668:45;24664:203;;;24730:48;24752:6;24760:9;24771:6;24730:21;:48::i;:::-;24664:203;;;24811:44;24829:6;24837:9;24848:6;24811:17;:44::i;:::-;24664:203;24534:333;24403:464;24270:597;24884:7;24879:29;;24893:15;:13;:15::i;:::-;24879:29;23704:1212;23626:1290;;;:::o;4983:192::-;5069:7;5102:1;5097;:6;;5105:12;5089:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5129:9;5145:1;5141;:5;;;;:::i;:::-;5129:17;;5166:1;5159:8;;;4983:192;;;;;:::o;31185:163::-;31226:7;31247:15;31264;31283:19;:17;:19::i;:::-;31246:56;;;;31320:20;31332:7;31320;:11;;:20;;;;:::i;:::-;31313:27;;;;31185:163;:::o;6381:132::-;6439:7;6466:39;6470:1;6473;6466:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6459:46;;6381:132;;;;:::o;4080:181::-;4138:7;4158:9;4174:1;4170;:5;;;;:::i;:::-;4158:17;;4199:1;4194;:6;;4186:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4252:1;4245:8;;;4080:181;;;;:::o;29236:652::-;29295:7;29304;29313;29322;29331;29340;29349;29370:12;29384:13;29399:16;29419:55;29431:7;29440:8;;29450:9;;29461:12;;29419:11;:55::i;:::-;29369:105;;;;;;29485:23;29511:50;29530:7;29539:4;29545:5;29552:8;29511:18;:50::i;:::-;29485:76;;29572:19;29595:10;:8;:10::i;:::-;29572:33;;29617:15;29634:12;29650:39;29662:7;29671:4;29677:11;29650;:39::i;:::-;29616:73;;;;29700:23;29726:64;29746:7;29755:4;29761:5;29768:8;29778:11;29726:19;:64::i;:::-;29700:90;;29809:7;29818:15;29835:4;29841:15;29858:4;29864:5;29871:8;29801:79;;;;;;;;;;;;;;;;;;;;;;29236:652;;;;;;;;;:::o;4544:136::-;4602:7;4629:43;4633:1;4636;4629:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4622:50;;4544:136;;;;:::o;32291:320::-;32349:1;32337:8;;:13;:31;;;;;32367:1;32354:9;;:14;32337:31;:52;;;;;32388:1;32372:12;;:17;32337:52;32334:64;;;32391:7;;32334:64;32433:8;;32418:12;:23;;;;32468:9;;32452:13;:25;;;;32507:12;;32488:16;:31;;;;32551:1;32540:8;:12;;;;32575:1;32563:9;:13;;;;32602:1;32587:12;:16;;;;32291:320;:::o;26801:606::-;26903:19;26926:10;:8;:10::i;:::-;26903:33;;26948:15;26965:23;26990:12;27004:23;27029:12;27043:13;27058:16;27078:19;27089:7;27078:10;:19::i;:::-;26947:150;;;;;;;;;;;;;;27108:13;27125:22;27135:11;27125:5;:9;;:22;;;;:::i;:::-;27108:39;;27158:80;27185:6;27193:9;27204:7;27213;27222:15;27158:26;:80::i;:::-;27249:32;27264:8;27274:6;27249:14;:32::i;:::-;27292:47;27304:4;27310:5;27317:4;27323:5;27330:8;27292:11;:47::i;:::-;27372:9;27355:44;;27364:6;27355:44;;;27383:15;27355:44;;;;;;:::i;:::-;;;;;;;;26892:515;;;;;;;;;26801:606;;;:::o;25794:622::-;25894:19;25917:10;:8;:10::i;:::-;25894:33;;25939:15;25956:23;25981:12;25995:23;26020:12;26034:13;26049:16;26069:19;26080:7;26069:10;:19::i;:::-;25938:150;;;;;;;;;;;;;;26099:13;26116:22;26126:11;26116:5;:9;;:22;;;;:::i;:::-;26099:39;;26149:90;26178:6;26186:9;26197:15;26214:7;26223:15;26149:28;:90::i;:::-;26258:32;26273:8;26283:6;26258:14;:32::i;:::-;26301:47;26313:4;26319:5;26326:4;26332:5;26339:8;26301:11;:47::i;:::-;26381:9;26364:44;;26373:6;26364:44;;;26392:15;26364:44;;;;;;:::i;:::-;;;;;;;;25883:533;;;;;;;;;25794:622;;;:::o;24924:591::-;25022:19;25045:10;:8;:10::i;:::-;25022:33;;25067:15;25084:23;25109:12;25123:23;25148:12;25162:13;25177:16;25197:19;25208:7;25197:10;:19::i;:::-;25066:150;;;;;;;;;;;;;;25227:13;25244:22;25254:11;25244:5;:9;;:22;;;;:::i;:::-;25227:39;;25277:69;25302:6;25310:9;25321:7;25330:15;25277:24;:69::i;:::-;25357:32;25372:8;25382:6;25357:14;:32::i;:::-;25400:47;25412:4;25418:5;25425:4;25431:5;25438:8;25400:11;:47::i;:::-;25480:9;25463:44;;25472:6;25463:44;;;25491:15;25463:44;;;;;;:::i;:::-;;;;;;;;25011:504;;;;;;;;;24924:591;;;:::o;27760:619::-;27862:19;27885:10;:8;:10::i;:::-;27862:33;;27907:15;27924:23;27949:12;27963:23;27988:12;28002:13;28017:16;28037:19;28048:7;28037:10;:19::i;:::-;27906:150;;;;;;;;;;;;;;28067:13;28084:22;28094:11;28084:5;:9;;:22;;;;:::i;:::-;28067:39;;28117:91;28138:6;28146:9;28157:7;28166;28175:15;28192;28117:20;:91::i;:::-;28221:32;28236:8;28246:6;28221:14;:32::i;:::-;28264:47;28276:4;28282:5;28289:4;28295:5;28302:8;28264:11;:47::i;:::-;28344:9;28327:44;;28336:6;28327:44;;;28355:15;28327:44;;;;;;:::i;:::-;;;;;;;;27851:528;;;;;;;;;27760:619;;;:::o;32623:153::-;32678:12;;32667:8;:23;;;;32713:13;;32701:9;:25;;;;32752:16;;32737:12;:31;;;;32623:153::o;31356:561::-;31406:7;31415;31435:15;31453:7;;31435:25;;31471:15;31489:7;;31471:25;;31518:9;31513:289;31537:9;:16;;;;31533:1;:20;31513:289;;;31603:7;31579;:21;31587:9;31597:1;31587:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31579:21;;;;;;;;;;;;;;;;:31;:66;;;;31638:7;31614;:21;31622:9;31632:1;31622:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31614:21;;;;;;;;;;;;;;;;:31;31579:66;31575:97;;;31655:7;;31664;;31647:25;;;;;;;;;31575:97;31697:34;31709:7;:21;31717:9;31727:1;31717:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31709:21;;;;;;;;;;;;;;;;31697:7;:11;;:34;;;;:::i;:::-;31687:44;;31756:34;31768:7;:21;31776:9;31786:1;31776:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31768:21;;;;;;;;;;;;;;;;31756:7;:11;;:34;;;;:::i;:::-;31746:44;;31555:3;;;;;:::i;:::-;;;;31513:289;;;;31826:20;31838:7;;31826;;:11;;:20;;;;:::i;:::-;31816:7;:30;31812:61;;;31856:7;;31865;;31848:25;;;;;;;;31812:61;31892:7;31901;31884:25;;;;;;31356:561;;;:::o;7009:278::-;7095:7;7127:1;7123;:5;7130:12;7115:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7154:9;7170:1;7166;:5;;;;:::i;:::-;7154:17;;7278:1;7271:8;;;7009:278;;;;;:::o;29900:427::-;30013:7;30022;30031;30051:12;30066:50;30112:3;30067:39;30093:12;;30068:19;30080:6;30068:7;:11;;:19;;;;:::i;:::-;30067:25;;:39;;;;:::i;:::-;30066:45;;:50;;;;:::i;:::-;30051:65;;30127:13;30143:51;30190:3;30144:40;30171:12;;30145:20;30157:7;30145;:11;;:20;;;;:::i;:::-;30144:26;;:40;;;;:::i;:::-;30143:46;;:51;;;;:::i;:::-;30127:67;;30205:16;30224:54;30274:3;30225:43;30255:12;;30226:23;30238:10;30226:7;:11;;:23;;;;:::i;:::-;30225:29;;:43;;;;:::i;:::-;30224:49;;:54;;;;:::i;:::-;30205:73;;30297:4;30303:5;30310:8;30289:30;;;;;;;;;29900:427;;;;;;;;:::o;30339:191::-;30453:7;30480:42;30513:8;30480:28;30502:5;30480:17;30492:4;30480:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;30473:49;;30339:191;;;;;;:::o;30542:254::-;30637:7;30646;30666:15;30684:24;30696:11;30684:7;:11;;:24;;;;:::i;:::-;30666:42;;30719:12;30734:21;30743:11;30734:4;:8;;:21;;;;:::i;:::-;30719:36;;30774:7;30783:4;30766:22;;;;;;30542:254;;;;;;:::o;30808:369::-;30944:7;30964:13;30980:22;30990:11;30980:5;:9;;:22;;;;:::i;:::-;30964:38;;31013:16;31032:25;31045:11;31032:8;:12;;:25;;;;:::i;:::-;31013:44;;31068:23;31094:42;31127:8;31094:28;31116:5;31094:17;31106:4;31094:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:42;;;;:::i;:::-;31068:68;;31154:15;31147:22;;;;;30808:369;;;;;;;:::o;5434:471::-;5492:7;5742:1;5737;:6;5733:47;;;5767:1;5760:8;;;;5733:47;5792:9;5808:1;5804;:5;;;;:::i;:::-;5792:17;;5837:1;5832;5828;:5;;;;:::i;:::-;:10;5820:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5896:1;5889:8;;;5434:471;;;;;:::o;27419:333::-;27586:28;27606:7;27586;:15;27594:6;27586:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27568:7;:15;27576:6;27568:15;;;;;;;;;;;;;;;:46;;;;27643:28;27663:7;27643;:15;27651:6;27643:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27625:7;:15;27633:6;27625:15;;;;;;;;;;;;;;;:46;;;;27703:39;27726:15;27703:7;:18;27711:9;27703:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27682:7;:18;27690:9;27682:18;;;;;;;;;;;;;;;:60;;;;27419:333;;;;;:::o;31925:358::-;32002:19;32024:10;:8;:10::i;:::-;32002:32;;32045:16;32064:25;32077:11;32064:8;:12;;:25;;;;:::i;:::-;32045:44;;32122:33;32146:8;32122:7;:19;32130:10;;;;;;;;;;;32122:19;;;;;;;;;;;;;;;;:23;;:33;;;;:::i;:::-;32100:7;:19;32108:10;;;;;;;;;;;32100:19;;;;;;;;;;;;;;;:55;;;;32188:33;32212:8;32188:7;:19;32196:10;;;;;;;;;;;32188:19;;;;;;;;;;;;;;;;:23;;:33;;;;:::i;:::-;32166:7;:19;32174:10;;;;;;;;;;;32166:19;;;;;;;;;;;;;;;:55;;;;32254:10;;;;;;;;;;;32237:38;;32246:6;32237:38;;;32266:8;32237:38;;;;;;:::i;:::-;;;;;;;;31991:292;;31925:358;;:::o;28822:400::-;28948:28;28970:5;28948:17;28960:4;28948:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;28938:7;:38;;;;29000:20;29015:4;29000:10;;:14;;:20;;;;:::i;:::-;28987:10;:33;;;;29045:22;29061:5;29045:11;;:15;;:22;;;;:::i;:::-;29031:11;:36;;;;29095:28;29114:8;29095:14;;:18;;:28;;;;:::i;:::-;29078:14;:45;;;;29144:18;29156:5;29144:7;;:11;;:18;;;;:::i;:::-;29134:7;:28;;;;29204:1;29172:42;;29189:4;29172:42;;;29208:5;29172:42;;;;;;:::i;:::-;;;;;;;;28822:400;;;;;:::o;26428:359::-;26605:28;26625:7;26605;:15;26613:6;26605:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26587:7;:15;26595:6;26587:15;;;;;;;;;;;;;;;:46;;;;26665:39;26688:15;26665:7;:18;26673:9;26665:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26644:7;:18;26652:9;26644:18;;;;;;;;;;;;;;;:60;;;;26736:39;26759:15;26736:7;:18;26744:9;26736:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26715:7;:18;26723:9;26715:18;;;;;;;;;;;;;;;:60;;;;26428:359;;;;;:::o;25527:255::-;25675:28;25695:7;25675;:15;25683:6;25675:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25657:7;:15;25665:6;25657:15;;;;;;;;;;;;;;;:46;;;;25735:39;25758:15;25735:7;:18;25743:9;25735:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25714:7;:18;25722:9;25714:18;;;;;;;;;;;;;;;:60;;;;25527:255;;;;:::o;28391:423::-;28577:28;28597:7;28577;:15;28585:6;28577:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28559:7;:15;28567:6;28559:15;;;;;;;;;;;;;;;:46;;;;28634:28;28654:7;28634;:15;28642:6;28634:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28616:7;:15;28624:6;28616:15;;;;;;;;;;;;;;;:46;;;;28694:39;28717:15;28694:7;:18;28702:9;28694:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28673:7;:18;28681:9;28673:18;;;;;;;;;;;;;;;:60;;;;28765:39;28788:15;28765:7;:18;28773:9;28765:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28744:7;:18;28752:9;28744:18;;;;;;;;;;;;;;;:60;;;;28391:423;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;152:133;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;291:139;;;;:::o;436:329::-;495:6;544:2;532:9;523:7;519:23;515:32;512:119;;;550:79;;:::i;:::-;512:119;670:1;695:53;740:7;731:6;720:9;716:22;695:53;:::i;:::-;685:63;;641:117;436:329;;;;:::o;771:474::-;839:6;847;896:2;884:9;875:7;871:23;867:32;864:119;;;902:79;;:::i;:::-;864:119;1022:1;1047:53;1092:7;1083:6;1072:9;1068:22;1047:53;:::i;:::-;1037:63;;993:117;1149:2;1175:53;1220:7;1211:6;1200:9;1196:22;1175:53;:::i;:::-;1165:63;;1120:118;771:474;;;;;:::o;1251:619::-;1328:6;1336;1344;1393:2;1381:9;1372:7;1368:23;1364:32;1361:119;;;1399:79;;:::i;:::-;1361:119;1519:1;1544:53;1589:7;1580:6;1569:9;1565:22;1544:53;:::i;:::-;1534:63;;1490:117;1646:2;1672:53;1717:7;1708:6;1697:9;1693:22;1672:53;:::i;:::-;1662:63;;1617:118;1774:2;1800:53;1845:7;1836:6;1825:9;1821:22;1800:53;:::i;:::-;1790:63;;1745:118;1251:619;;;;;:::o;1876:474::-;1944:6;1952;2001:2;1989:9;1980:7;1976:23;1972:32;1969:119;;;2007:79;;:::i;:::-;1969:119;2127:1;2152:53;2197:7;2188:6;2177:9;2173:22;2152:53;:::i;:::-;2142:63;;2098:117;2254:2;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2225:118;1876:474;;;;;:::o;2356:329::-;2415:6;2464:2;2452:9;2443:7;2439:23;2435:32;2432:119;;;2470:79;;:::i;:::-;2432:119;2590:1;2615:53;2660:7;2651:6;2640:9;2636:22;2615:53;:::i;:::-;2605:63;;2561:117;2356:329;;;;:::o;2691:468::-;2756:6;2764;2813:2;2801:9;2792:7;2788:23;2784:32;2781:119;;;2819:79;;:::i;:::-;2781:119;2939:1;2964:53;3009:7;3000:6;2989:9;2985:22;2964:53;:::i;:::-;2954:63;;2910:117;3066:2;3092:50;3134:7;3125:6;3114:9;3110:22;3092:50;:::i;:::-;3082:60;;3037:115;2691:468;;;;;:::o;3165:619::-;3242:6;3250;3258;3307:2;3295:9;3286:7;3282:23;3278:32;3275:119;;;3313:79;;:::i;:::-;3275:119;3433:1;3458:53;3503:7;3494:6;3483:9;3479:22;3458:53;:::i;:::-;3448:63;;3404:117;3560:2;3586:53;3631:7;3622:6;3611:9;3607:22;3586:53;:::i;:::-;3576:63;;3531:118;3688:2;3714:53;3759:7;3750:6;3739:9;3735:22;3714:53;:::i;:::-;3704:63;;3659:118;3165:619;;;;;:::o;3790:118::-;3877:24;3895:5;3877:24;:::i;:::-;3872:3;3865:37;3790:118;;:::o;3914:109::-;3995:21;4010:5;3995:21;:::i;:::-;3990:3;3983:34;3914:109;;:::o;4029:364::-;4117:3;4145:39;4178:5;4145:39;:::i;:::-;4200:71;4264:6;4259:3;4200:71;:::i;:::-;4193:78;;4280:52;4325:6;4320:3;4313:4;4306:5;4302:16;4280:52;:::i;:::-;4357:29;4379:6;4357:29;:::i;:::-;4352:3;4348:39;4341:46;;4121:272;4029:364;;;;:::o;4399:366::-;4541:3;4562:67;4626:2;4621:3;4562:67;:::i;:::-;4555:74;;4638:93;4727:3;4638:93;:::i;:::-;4756:2;4751:3;4747:12;4740:19;;4399:366;;;:::o;4771:::-;4913:3;4934:67;4998:2;4993:3;4934:67;:::i;:::-;4927:74;;5010:93;5099:3;5010:93;:::i;:::-;5128:2;5123:3;5119:12;5112:19;;4771:366;;;:::o;5143:::-;5285:3;5306:67;5370:2;5365:3;5306:67;:::i;:::-;5299:74;;5382:93;5471:3;5382:93;:::i;:::-;5500:2;5495:3;5491:12;5484:19;;5143:366;;;:::o;5515:::-;5657:3;5678:67;5742:2;5737:3;5678:67;:::i;:::-;5671:74;;5754:93;5843:3;5754:93;:::i;:::-;5872:2;5867:3;5863:12;5856:19;;5515:366;;;:::o;5887:::-;6029:3;6050:67;6114:2;6109:3;6050:67;:::i;:::-;6043:74;;6126:93;6215:3;6126:93;:::i;:::-;6244:2;6239:3;6235:12;6228:19;;5887:366;;;:::o;6259:::-;6401:3;6422:67;6486:2;6481:3;6422:67;:::i;:::-;6415:74;;6498:93;6587:3;6498:93;:::i;:::-;6616:2;6611:3;6607:12;6600:19;;6259:366;;;:::o;6631:::-;6773:3;6794:67;6858:2;6853:3;6794:67;:::i;:::-;6787:74;;6870:93;6959:3;6870:93;:::i;:::-;6988:2;6983:3;6979:12;6972:19;;6631:366;;;:::o;7003:::-;7145:3;7166:67;7230:2;7225:3;7166:67;:::i;:::-;7159:74;;7242:93;7331:3;7242:93;:::i;:::-;7360:2;7355:3;7351:12;7344:19;;7003:366;;;:::o;7375:::-;7517:3;7538:67;7602:2;7597:3;7538:67;:::i;:::-;7531:74;;7614:93;7703:3;7614:93;:::i;:::-;7732:2;7727:3;7723:12;7716:19;;7375:366;;;:::o;7747:::-;7889:3;7910:67;7974:2;7969:3;7910:67;:::i;:::-;7903:74;;7986:93;8075:3;7986:93;:::i;:::-;8104:2;8099:3;8095:12;8088:19;;7747:366;;;:::o;8119:::-;8261:3;8282:67;8346:2;8341:3;8282:67;:::i;:::-;8275:74;;8358:93;8447:3;8358:93;:::i;:::-;8476:2;8471:3;8467:12;8460:19;;8119:366;;;:::o;8491:::-;8633:3;8654:67;8718:2;8713:3;8654:67;:::i;:::-;8647:74;;8730:93;8819:3;8730:93;:::i;:::-;8848:2;8843:3;8839:12;8832:19;;8491:366;;;:::o;8863:::-;9005:3;9026:67;9090:2;9085:3;9026:67;:::i;:::-;9019:74;;9102:93;9191:3;9102:93;:::i;:::-;9220:2;9215:3;9211:12;9204:19;;8863:366;;;:::o;9235:::-;9377:3;9398:67;9462:2;9457:3;9398:67;:::i;:::-;9391:74;;9474:93;9563:3;9474:93;:::i;:::-;9592:2;9587:3;9583:12;9576:19;;9235:366;;;:::o;9607:118::-;9694:24;9712:5;9694:24;:::i;:::-;9689:3;9682:37;9607:118;;:::o;9731:112::-;9814:22;9830:5;9814:22;:::i;:::-;9809:3;9802:35;9731:112;;:::o;9849:222::-;9942:4;9980:2;9969:9;9965:18;9957:26;;9993:71;10061:1;10050:9;10046:17;10037:6;9993:71;:::i;:::-;9849:222;;;;:::o;10077:210::-;10164:4;10202:2;10191:9;10187:18;10179:26;;10215:65;10277:1;10266:9;10262:17;10253:6;10215:65;:::i;:::-;10077:210;;;;:::o;10293:313::-;10406:4;10444:2;10433:9;10429:18;10421:26;;10493:9;10487:4;10483:20;10479:1;10468:9;10464:17;10457:47;10521:78;10594:4;10585:6;10521:78;:::i;:::-;10513:86;;10293:313;;;;:::o;10612:419::-;10778:4;10816:2;10805:9;10801:18;10793:26;;10865:9;10859:4;10855:20;10851:1;10840:9;10836:17;10829:47;10893:131;11019:4;10893:131;:::i;:::-;10885:139;;10612:419;;;:::o;11037:::-;11203:4;11241:2;11230:9;11226:18;11218:26;;11290:9;11284:4;11280:20;11276:1;11265:9;11261:17;11254:47;11318:131;11444:4;11318:131;:::i;:::-;11310:139;;11037:419;;;:::o;11462:::-;11628:4;11666:2;11655:9;11651:18;11643:26;;11715:9;11709:4;11705:20;11701:1;11690:9;11686:17;11679:47;11743:131;11869:4;11743:131;:::i;:::-;11735:139;;11462:419;;;:::o;11887:::-;12053:4;12091:2;12080:9;12076:18;12068:26;;12140:9;12134:4;12130:20;12126:1;12115:9;12111:17;12104:47;12168:131;12294:4;12168:131;:::i;:::-;12160:139;;11887:419;;;:::o;12312:::-;12478:4;12516:2;12505:9;12501:18;12493:26;;12565:9;12559:4;12555:20;12551:1;12540:9;12536:17;12529:47;12593:131;12719:4;12593:131;:::i;:::-;12585:139;;12312:419;;;:::o;12737:::-;12903:4;12941:2;12930:9;12926:18;12918:26;;12990:9;12984:4;12980:20;12976:1;12965:9;12961:17;12954:47;13018:131;13144:4;13018:131;:::i;:::-;13010:139;;12737:419;;;:::o;13162:::-;13328:4;13366:2;13355:9;13351:18;13343:26;;13415:9;13409:4;13405:20;13401:1;13390:9;13386:17;13379:47;13443:131;13569:4;13443:131;:::i;:::-;13435:139;;13162:419;;;:::o;13587:::-;13753:4;13791:2;13780:9;13776:18;13768:26;;13840:9;13834:4;13830:20;13826:1;13815:9;13811:17;13804:47;13868:131;13994:4;13868:131;:::i;:::-;13860:139;;13587:419;;;:::o;14012:::-;14178:4;14216:2;14205:9;14201:18;14193:26;;14265:9;14259:4;14255:20;14251:1;14240:9;14236:17;14229:47;14293:131;14419:4;14293:131;:::i;:::-;14285:139;;14012:419;;;:::o;14437:::-;14603:4;14641:2;14630:9;14626:18;14618:26;;14690:9;14684:4;14680:20;14676:1;14665:9;14661:17;14654:47;14718:131;14844:4;14718:131;:::i;:::-;14710:139;;14437:419;;;:::o;14862:::-;15028:4;15066:2;15055:9;15051:18;15043:26;;15115:9;15109:4;15105:20;15101:1;15090:9;15086:17;15079:47;15143:131;15269:4;15143:131;:::i;:::-;15135:139;;14862:419;;;:::o;15287:::-;15453:4;15491:2;15480:9;15476:18;15468:26;;15540:9;15534:4;15530:20;15526:1;15515:9;15511:17;15504:47;15568:131;15694:4;15568:131;:::i;:::-;15560:139;;15287:419;;;:::o;15712:::-;15878:4;15916:2;15905:9;15901:18;15893:26;;15965:9;15959:4;15955:20;15951:1;15940:9;15936:17;15929:47;15993:131;16119:4;15993:131;:::i;:::-;15985:139;;15712:419;;;:::o;16137:::-;16303:4;16341:2;16330:9;16326:18;16318:26;;16390:9;16384:4;16380:20;16376:1;16365:9;16361:17;16354:47;16418:131;16544:4;16418:131;:::i;:::-;16410:139;;16137:419;;;:::o;16562:222::-;16655:4;16693:2;16682:9;16678:18;16670:26;;16706:71;16774:1;16763:9;16759:17;16750:6;16706:71;:::i;:::-;16562:222;;;;:::o;16790:214::-;16879:4;16917:2;16906:9;16902:18;16894:26;;16930:67;16994:1;16983:9;16979:17;16970:6;16930:67;:::i;:::-;16790:214;;;;:::o;17091:99::-;17143:6;17177:5;17171:12;17161:22;;17091:99;;;:::o;17196:169::-;17280:11;17314:6;17309:3;17302:19;17354:4;17349:3;17345:14;17330:29;;17196:169;;;;:::o;17371:305::-;17411:3;17430:20;17448:1;17430:20;:::i;:::-;17425:25;;17464:20;17482:1;17464:20;:::i;:::-;17459:25;;17618:1;17550:66;17546:74;17543:1;17540:81;17537:107;;;17624:18;;:::i;:::-;17537:107;17668:1;17665;17661:9;17654:16;;17371:305;;;;:::o;17682:185::-;17722:1;17739:20;17757:1;17739:20;:::i;:::-;17734:25;;17773:20;17791:1;17773:20;:::i;:::-;17768:25;;17812:1;17802:35;;17817:18;;:::i;:::-;17802:35;17859:1;17856;17852:9;17847:14;;17682:185;;;;:::o;17873:348::-;17913:7;17936:20;17954:1;17936:20;:::i;:::-;17931:25;;17970:20;17988:1;17970:20;:::i;:::-;17965:25;;18158:1;18090:66;18086:74;18083:1;18080:81;18075:1;18068:9;18061:17;18057:105;18054:131;;;18165:18;;:::i;:::-;18054:131;18213:1;18210;18206:9;18195:20;;17873:348;;;;:::o;18227:191::-;18267:4;18287:20;18305:1;18287:20;:::i;:::-;18282:25;;18321:20;18339:1;18321:20;:::i;:::-;18316:25;;18360:1;18357;18354:8;18351:34;;;18365:18;;:::i;:::-;18351:34;18410:1;18407;18403:9;18395:17;;18227:191;;;;:::o;18424:96::-;18461:7;18490:24;18508:5;18490:24;:::i;:::-;18479:35;;18424:96;;;:::o;18526:90::-;18560:7;18603:5;18596:13;18589:21;18578:32;;18526:90;;;:::o;18622:126::-;18659:7;18699:42;18692:5;18688:54;18677:65;;18622:126;;;:::o;18754:77::-;18791:7;18820:5;18809:16;;18754:77;;;:::o;18837:86::-;18872:7;18912:4;18905:5;18901:16;18890:27;;18837:86;;;:::o;18929:307::-;18997:1;19007:113;19021:6;19018:1;19015:13;19007:113;;;19106:1;19101:3;19097:11;19091:18;19087:1;19082:3;19078:11;19071:39;19043:2;19040:1;19036:10;19031:15;;19007:113;;;19138:6;19135:1;19132:13;19129:101;;;19218:1;19209:6;19204:3;19200:16;19193:27;19129:101;18978:258;18929:307;;;:::o;19242:320::-;19286:6;19323:1;19317:4;19313:12;19303:22;;19370:1;19364:4;19360:12;19391:18;19381:81;;19447:4;19439:6;19435:17;19425:27;;19381:81;19509:2;19501:6;19498:14;19478:18;19475:38;19472:84;;;19528:18;;:::i;:::-;19472:84;19293:269;19242:320;;;:::o;19568:233::-;19607:3;19630:24;19648:5;19630:24;:::i;:::-;19621:33;;19676:66;19669:5;19666:77;19663:103;;;19746:18;;:::i;:::-;19663:103;19793:1;19786:5;19782:13;19775:20;;19568:233;;;:::o;19807:180::-;19855:77;19852:1;19845:88;19952:4;19949:1;19942:15;19976:4;19973:1;19966:15;19993:180;20041:77;20038:1;20031:88;20138:4;20135:1;20128:15;20162:4;20159:1;20152:15;20179:180;20227:77;20224:1;20217:88;20324:4;20321:1;20314:15;20348:4;20345:1;20338:15;20365:180;20413:77;20410:1;20403:88;20510:4;20507:1;20500:15;20534:4;20531:1;20524:15;20551:180;20599:77;20596:1;20589:88;20696:4;20693:1;20686:15;20720:4;20717:1;20710:15;20860:117;20969:1;20966;20959:12;20983:102;21024:6;21075:2;21071:7;21066:2;21059:5;21055:14;21051:28;21041:38;;20983:102;;;:::o;21091:224::-;21231:34;21227:1;21219:6;21215:14;21208:58;21300:7;21295:2;21287:6;21283:15;21276:32;21091:224;:::o;21321:226::-;21461:34;21457:1;21449:6;21445:14;21438:58;21530:9;21525:2;21517:6;21513:15;21506:34;21321:226;:::o;21553:229::-;21693:34;21689:1;21681:6;21677:14;21670:58;21762:12;21757:2;21749:6;21745:15;21738:37;21553:229;:::o;21788:225::-;21928:34;21924:1;21916:6;21912:14;21905:58;21997:8;21992:2;21984:6;21980:15;21973:33;21788:225;:::o;22019:177::-;22159:29;22155:1;22147:6;22143:14;22136:53;22019:177;:::o;22202:::-;22342:29;22338:1;22330:6;22326:14;22319:53;22202:177;:::o;22385:::-;22525:29;22521:1;22513:6;22509:14;22502:53;22385:177;:::o;22568:181::-;22708:33;22704:1;22696:6;22692:14;22685:57;22568:181;:::o;22755:220::-;22895:34;22891:1;22883:6;22879:14;22872:58;22964:3;22959:2;22951:6;22947:15;22940:28;22755:220;:::o;22981:182::-;23121:34;23117:1;23109:6;23105:14;23098:58;22981:182;:::o;23169:228::-;23309:34;23305:1;23297:6;23293:14;23286:58;23378:11;23373:2;23365:6;23361:15;23354:36;23169:228;:::o;23403:223::-;23543:34;23539:1;23531:6;23527:14;23520:58;23612:6;23607:2;23599:6;23595:15;23588:31;23403:223;:::o;23632:225::-;23772:34;23768:1;23760:6;23756:14;23749:58;23841:8;23836:2;23828:6;23824:15;23817:33;23632:225;:::o;23863:231::-;24003:34;23999:1;23991:6;23987:14;23980:58;24072:14;24067:2;24059:6;24055:15;24048:39;23863:231;:::o;24100:122::-;24173:24;24191:5;24173:24;:::i;:::-;24166:5;24163:35;24153:63;;24212:1;24209;24202:12;24153:63;24100:122;:::o;24228:116::-;24298:21;24313:5;24298:21;:::i;:::-;24291:5;24288:32;24278:60;;24334:1;24331;24324:12;24278:60;24228:116;:::o;24350:122::-;24423:24;24441:5;24423:24;:::i;:::-;24416:5;24413:35;24403:63;;24462:1;24459;24452:12;24403:63;24350:122;:::o

Swarm Source

ipfs://78d013f8f4d3a357e774841038ee916336555b3b48dad2942e9093e66b3a8050
Loading