Token FABWELT

 

Overview ERC-20

Price
$0.00 @ 0.001455 MATIC (-0.24%)
Fully Diluted Market Cap
Total Supply:
500,000,000 WELT

Holders:
7,166 addresses

Transfers:
-

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

OVERVIEW

FABWELT creates a gaming platform that brings blockchain technology into games of all types or genres.

Market

Volume (24H):$488,510.00
Market Capitalization:$283,274.00
Circulating Supply:215,068,939.00 WELT
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
1
BitMart
WELT-USDT$0.0013
0.0000001 Btc
$312,882.00
236,971,226.000 WELT
64.0514%
2
Bitrue
WELT-USDT$0.0013
0.0000001 Btc
$172,372.00
130,948,382.280 WELT
35.3943%
3
PancakeSwap (v2)
0X1785113910847770290F5F840B4C74FC46451201-0X8AC76A51CC950D9822D68B83FE1AD97B32CD580D$0.0013
0.0000001 Btc
$2,023.40
1,516,048.898 0X1785113910847770290F5F840B4C74FC46451201
0.4098%
4
Quickswap
0X23E8B6A3F6891254988B84DA3738D2BFE5E703B9-0X2791BCA1F2DE4661ED88A30C99A7A9449AA84174$0.0013
0.0000001 Btc
$704.29
533,301.518 0X23E8B6A3F6891254988B84DA3738D2BFE5E703B9
0.1441%
5
Quickswap
0X23E8B6A3F6891254988B84DA3738D2BFE5E703B9-0X0D500B1D8E8EF31E21C99D1DB9A6444D3ADF1270$0.0013
0.0000001 Btc
$2.16
1,632.597 0X23E8B6A3F6891254988B84DA3738D2BFE5E703B9
0.0004%
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FabweltToken

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-09-25
*/

/**
 *Official Fabwelt Token WELT - NFT, Gaming & DEFI
*/

// SPDX-License-Identifier: MIT

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 BEP20 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 FabweltToken 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;
    address public StakeAddress;
   
    uint256 private _MAX = ~uint256(0);
    uint256 private _DECIMALFACTOR;
    uint256 private _GRANULARITY = 100;
    
    uint256 private _tTotal;
    uint256 private _rTotal;
    
    uint256 private _tFeeTotal;
    uint256 private _tCharityTotal;
    uint256 private _tStakeTotal;
    
    uint256 public     _TAX_FEE;
    uint256 public _CHARITY_FEE;
    uint256 public _STAKE_FEE;

    // Track original fees
    uint256 private ORIG_TAX_FEE;
    uint256 private ORIG_CHARITY_FEE;
    uint256 private ORIG_STAKE_FEE;

    constructor (string memory _name, string memory _symbol, uint256 _decimals, uint256 _supply, uint256 _txFee,uint256 _stakeFee,uint256 _charityFee,address _FeeAddress,address _StakeAddress,address tokenOwner)  {
		_NAME = _name;
		_SYMBOL = _symbol;
		_DECIMALS = _decimals;
		_DECIMALFACTOR = 10 ** _DECIMALS;
		_tTotal =_supply * _DECIMALFACTOR;
		_rTotal = (_MAX - (_MAX % _tTotal));
		_TAX_FEE = _txFee* 100; 
		_CHARITY_FEE = _charityFee* 100;
		_STAKE_FEE = _stakeFee* 100;
		ORIG_TAX_FEE = _TAX_FEE;
		ORIG_CHARITY_FEE = _CHARITY_FEE;
		ORIG_STAKE_FEE = _STAKE_FEE;
		FeeAddress = _FeeAddress;
		StakeAddress = _StakeAddress;
		_owner = tokenOwner;
        _rOwned[tokenOwner] = _rTotal;
        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 totalCharity() public view returns (uint256) {
        return _tCharityTotal;
    }
    
        function totalStake() public view returns (uint256) {
        return _tStakeTotal;
    }

    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 _stakeFee,uint256 _charityFee) onlyOwner() public{
		require(_txFee < 100 && _stakeFee < 100 && _charityFee < 100);
                _TAX_FEE = _txFee* 100; 
		_CHARITY_FEE = _charityFee* 100;
		_STAKE_FEE = _stakeFee* 100;
		ORIG_TAX_FEE = _TAX_FEE;
		ORIG_CHARITY_FEE = _CHARITY_FEE;
		ORIG_STAKE_FEE = _STAKE_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 & stake account or to excluded account
        bool takeFee = true;
        if (FeeAddress == sender || FeeAddress == recipient || _isExcluded[recipient]) {
            takeFee = false;
        }
        
        if (StakeAddress == sender || StakeAddress == 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 tStake, uint256 tCharity) = _getValues(tAmount);
        _standardTransferContent(sender, recipient, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _sendToStake(tStake, sender);
        _reflectFee(rFee, tFee, tStake, 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 tStake, uint256 tCharity) = _getValues(tAmount);
        _excludedFromTransferContent(sender, recipient, tTransferAmount, rAmount, rTransferAmount);        
        _sendToCharity(tCharity, sender);
        _sendToStake(tStake, sender);
        _reflectFee(rFee, tFee, tStake, 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 tStake, uint256 tCharity) = _getValues(tAmount);
        _excludedToTransferContent(sender, recipient, tAmount, rAmount, rTransferAmount);
        _sendToCharity(tCharity, sender);
        _sendToStake(tStake, sender);
        _reflectFee(rFee, tFee, tStake, 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 tStake, uint256 tCharity) = _getValues(tAmount);
        _bothTransferContent(sender, recipient, tAmount, rAmount, tTransferAmount, rTransferAmount);  
        _sendToCharity(tCharity, sender);
        _sendToStake(tStake, sender);
        _reflectFee(rFee, tFee, tStake, 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 tFee, uint256 tStake, uint256 tCharity) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
        _tCharityTotal = _tCharityTotal.add(tCharity);
        _tStakeTotal = _tStakeTotal.add(tStake);
        _tTotal = _tTotal;
    }
    
    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tFee, uint256 tStake, uint256 tCharity) = _getTBasics(tAmount, _TAX_FEE, _STAKE_FEE, _CHARITY_FEE);
        uint256 tTransferAmount = getTTransferAmount(tAmount, tFee, tStake, tCharity);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rFee) = _getRBasics(tAmount, tFee, currentRate);
        uint256 rTransferAmount = _getRTransferAmount(rAmount, rFee, tStake, tCharity, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tStake, tCharity);
    }
    
    function _getTBasics(uint256 tAmount, uint256 taxFee, uint256 stakeFee, uint256 charityFee) private view returns (uint256, uint256, uint256) {
        uint256 tFee = ((tAmount.mul(taxFee)).div(_GRANULARITY)).div(100);
        uint256 tStake = ((tAmount.mul(stakeFee)).div(_GRANULARITY)).div(100);
        uint256 tCharity = ((tAmount.mul(charityFee)).div(_GRANULARITY)).div(100);
        return (tFee, tStake, tCharity);
    }
    
    function getTTransferAmount(uint256 tAmount, uint256 tFee, uint256 tStake, uint256 tCharity) private pure returns (uint256) {
        return tAmount.sub(tFee).sub(tStake).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 tStake, uint256 tCharity, uint256 currentRate) private pure returns (uint256) {
        uint256 rStake = tStake.mul(currentRate);
        uint256 rCharity = tCharity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rStake).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 _sendToStake(uint256 tStake, address sender) private {
        uint256 currentRate = _getRate();
        uint256 rStake = tStake.mul(currentRate);
        _rOwned[StakeAddress] = _rOwned[StakeAddress].add(rStake);
        _tOwned[StakeAddress] = _tOwned[StakeAddress].add(tStake);
        emit Transfer(sender, StakeAddress, tStake);
    }

    function removeAllFee() private {
        if(_TAX_FEE == 0 && _STAKE_FEE == 0 && _CHARITY_FEE == 0) return;
        
        ORIG_TAX_FEE = _TAX_FEE;
        ORIG_STAKE_FEE = _STAKE_FEE;
        ORIG_CHARITY_FEE = _CHARITY_FEE;
        
        _TAX_FEE = 0;
        _STAKE_FEE = 0;
        _CHARITY_FEE = 0;
    }
    
    function restoreAllFee() private {
        _TAX_FEE = ORIG_TAX_FEE;
        _STAKE_FEE = ORIG_STAKE_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":"_stakeFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"address","name":"_FeeAddress","type":"address"},{"internalType":"address","name":"_StakeAddress","type":"address"},{"internalType":"address","name":"tokenOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"StakeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_CHARITY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_STAKE_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":"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":"totalStake","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":"_stakeFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600019600b556064600d553480156200001c57600080fd5b506040516200520f3803806200520f833981810160405281019062000042919062000407565b89600690805190602001906200005a929190620002ab565b50886007908051906020019062000073929190620002ab565b5087600881905550600854600a6200008c919062000623565b600c81905550600c5487620000a2919062000760565b600e81905550600e54600b54620000ba9190620008dc565b600b54620000c99190620007c1565b600f81905550606486620000de919062000760565b601381905550606484620000f3919062000760565b60148190555060648562000108919062000760565b60158190555060135460168190555060145460178190555060155460188190555082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f54600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040516200029391906200054c565b60405180910390a35050505050505050505062000a36565b828054620002b99062000870565b90600052602060002090601f016020900481019282620002dd576000855562000329565b82601f10620002f857805160ff191683800117855562000329565b8280016001018555821562000329579182015b82811115620003285782518255916020019190600101906200030b565b5b5090506200033891906200033c565b5090565b5b80821115620003575760008160009055506001016200033d565b5090565b6000620003726200036c8462000592565b62000569565b905082815260208101848484011115620003915762000390620009d5565b5b6200039e8482856200083a565b509392505050565b600081519050620003b78162000a02565b92915050565b600082601f830112620003d557620003d4620009d0565b5b8151620003e78482602086016200035b565b91505092915050565b600081519050620004018162000a1c565b92915050565b6000806000806000806000806000806101408b8d0312156200042e576200042d620009df565b5b60008b015167ffffffffffffffff8111156200044f576200044e620009da565b5b6200045d8d828e01620003bd565b9a505060208b015167ffffffffffffffff811115620004815762000480620009da565b5b6200048f8d828e01620003bd565b9950506040620004a28d828e01620003f0565b9850506060620004b58d828e01620003f0565b9750506080620004c88d828e01620003f0565b96505060a0620004db8d828e01620003f0565b95505060c0620004ee8d828e01620003f0565b94505060e0620005018d828e01620003a6565b935050610100620005158d828e01620003a6565b925050610120620005298d828e01620003a6565b9150509295989b9194979a5092959850565b620005468162000830565b82525050565b60006020820190506200056360008301846200053b565b92915050565b60006200057562000588565b9050620005838282620008a6565b919050565b6000604051905090565b600067ffffffffffffffff821115620005b057620005af620009a1565b5b620005bb82620009e4565b9050602081019050919050565b6000808291508390505b60018511156200061a57808604811115620005f257620005f162000914565b5b6001851615620006025780820291505b80810290506200061285620009f5565b9450620005d2565b94509492505050565b6000620006308262000830565b91506200063d8362000830565b92506200066c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000674565b905092915050565b60008262000686576001905062000759565b8162000696576000905062000759565b8160018114620006af5760028114620006ba57620006f0565b600191505062000759565b60ff841115620006cf57620006ce62000914565b5b8360020a915084821115620006e957620006e862000914565b5b5062000759565b5060208310610133831016604e8410600b84101617156200072a5782820a90508381111562000724576200072362000914565b5b62000759565b620007398484846001620005c8565b9250905081840481111562000753576200075262000914565b5b81810290505b9392505050565b60006200076d8262000830565b91506200077a8362000830565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007b657620007b562000914565b5b828202905092915050565b6000620007ce8262000830565b9150620007db8362000830565b925082821015620007f157620007f062000914565b5b828203905092915050565b6000620008098262000810565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200085a5780820151818401526020810190506200083d565b838111156200086a576000848401525b50505050565b600060028204905060018216806200088957607f821691505b60208210811415620008a0576200089f62000972565b5b50919050565b620008b182620009e4565b810181811067ffffffffffffffff82111715620008d357620008d2620009a1565b5b80604052505050565b6000620008e98262000830565b9150620008f68362000830565b92508262000909576200090862000943565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b62000a0d81620007fc565b811462000a1957600080fd5b50565b62000a278162000830565b811462000a3357600080fd5b50565b6147c98062000a466000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637b7e8bac1161010f578063b5862428116100a2578063f2cc0c1811610071578063f2cc0c18146105b0578063f2fde38b146105cc578063f84354f1146105e8578063fc061a4f14610604576101e5565b8063b586242814610514578063cba0e99614610532578063d608b3b214610562578063dd62ed3e14610580576101e5565b8063a457c2d7116100de578063a457c2d714610478578063a9059cbb146104a8578063ae9dd5e0146104d8578063b2bdfa7b146104f6576101e5565b80637b7e8bac146104005780638b0e9f3f1461041e5780638da5cb5b1461043c57806395d89b411461045a576101e5565b8063395093511161018757806345ce7db91161015657806345ce7db91461038a5780635d4f8328146103a857806370a08231146103c6578063715018a6146103f6576101e5565b806339509351146102f25780633bd5d173146103225780634549b0391461033e578063457bdf6c1461036e576101e5565b806318160ddd116101c357806318160ddd1461025657806323b872dd146102745780632d838119146102a4578063313ce567146102d4576101e5565b806306fdde03146101ea578063095ea7b31461020857806313114a9d14610238575b600080fd5b6101f2610620565b6040516101ff9190613e1c565b60405180910390f35b610222600480360381019061021d9190613a87565b6106b2565b60405161022f9190613e01565b60405180910390f35b6102406106d0565b60405161024d9190613ffe565b60405180910390f35b61025e6106da565b60405161026b9190613ffe565b60405180910390f35b61028e60048036038101906102899190613a34565b6106e4565b60405161029b9190613e01565b60405180910390f35b6102be60048036038101906102b99190613ac7565b6107bd565b6040516102cb9190613ffe565b60405180910390f35b6102dc61082b565b6040516102e99190614019565b60405180910390f35b61030c60048036038101906103079190613a87565b610835565b6040516103199190613e01565b60405180910390f35b61033c60048036038101906103379190613ac7565b6108e8565b005b61035860048036038101906103539190613af4565b610a64565b6040516103659190613ffe565b60405180910390f35b610388600480360381019061038391906139c7565b610aea565b005b610392610bc3565b60405161039f9190613de6565b60405180910390f35b6103b0610be9565b6040516103bd9190613ffe565b60405180910390f35b6103e060048036038101906103db91906139c7565b610bef565b6040516103ed9190613ffe565b60405180910390f35b6103fe610cda565b005b610408610e2d565b6040516104159190613de6565b60405180910390f35b610426610e53565b6040516104339190613ffe565b60405180910390f35b610444610e5d565b6040516104519190613de6565b60405180910390f35b610462610e86565b60405161046f9190613e1c565b60405180910390f35b610492600480360381019061048d9190613a87565b610f18565b60405161049f9190613e01565b60405180910390f35b6104c260048036038101906104bd9190613a87565b610fe5565b6040516104cf9190613e01565b60405180910390f35b6104e0611003565b6040516104ed9190613ffe565b60405180910390f35b6104fe611009565b60405161050b9190613de6565b60405180910390f35b61051c61102d565b6040516105299190613ffe565b60405180910390f35b61054c600480360381019061054791906139c7565b611033565b6040516105599190613e01565b60405180910390f35b61056a611089565b6040516105779190613ffe565b60405180910390f35b61059a600480360381019061059591906139f4565b611093565b6040516105a79190613ffe565b60405180910390f35b6105ca60048036038101906105c591906139c7565b61111a565b005b6105e660048036038101906105e191906139c7565b6113ce565b005b61060260048036038101906105fd91906139c7565b611590565b005b61061e60048036038101906106199190613b34565b6118df565b005b60606006805461062f906141ed565b80601f016020809104026020016040519081016040528092919081815260200182805461065b906141ed565b80156106a85780601f1061067d576101008083540402835291602001916106a8565b820191906000526020600020905b81548152906001019060200180831161068b57829003601f168201915b5050505050905090565b60006106c66106bf6119f2565b84846119fa565b6001905092915050565b6000601054905090565b6000600e54905090565b60006106f1848484611bc5565b6107b2846106fd6119f2565b6107ad856040518060600160405280602a815260200161476a602a9139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107636119f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461220d9092919063ffffffff16565b6119fa565b600190509392505050565b6000600f54821115610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb90613e7e565b60405180910390fd5b600061080e612271565b9050610823818461229c90919063ffffffff16565b915050919050565b6000600854905090565b60006108de6108426119f2565b846108d985600360006108536119f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b6119fa565b6001905092915050565b60006108f26119f2565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890613fde565b60405180910390fd5b600061098c83612344565b50505050505090506109e681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d290919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a3e81600f546123d290919063ffffffff16565b600f81905550610a59836010546122e690919063ffffffff16565b601081905550505050565b6000600e54831115610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290613f1e565b60405180910390fd5b81610acc576000610abb84612344565b505050505050905080915050610ae4565b6000610ad784612344565b5050505050915050809150505b92915050565b610af26119f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7690613f5e565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c8a57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610cd5565b610cd2600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107bd565b90505b919050565b610ce26119f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6690613f5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601254905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610e95906141ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec1906141ed565b8015610f0e5780601f10610ee357610100808354040283529160200191610f0e565b820191906000526020600020905b815481529060010190602001808311610ef157829003601f168201915b5050505050905090565b6000610fdb610f256119f2565b84610fd6856040518060600160405280602781526020016147436027913960036000610f4f6119f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461220d9092919063ffffffff16565b6119fa565b6001905092915050565b6000610ff9610ff26119f2565b8484611bc5565b6001905092915050565b60145481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601154905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111226119f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a690613f5e565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390613ede565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611310576112cc600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107bd565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d66119f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145a90613f5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ca90613e9e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115986119f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90613f5e565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890613efe565b60405180910390fd5b60005b6005805490508110156118db578173ffffffffffffffffffffffffffffffffffffffff16600582815481106116ec576116eb614324565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156118c857600560016005805490506117479190614131565b8154811061175857611757614324565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811061179757611796614324565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061188e5761188d6142f5565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556118db565b80806118d39061421f565b9150506116b4565b5050565b6118e76119f2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90613f5e565b60405180910390fd5b6064831080156119845750606482105b80156119905750606481105b61199957600080fd5b6064836119a691906140d7565b6013819055506064816119b991906140d7565b6014819055506064826119cc91906140d7565b601581905550601354601681905550601454601781905550601554601881905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6190613fbe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613f9e565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bb89190613ffe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c90613e5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613e3e565b60405180910390fd5b60008111611ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdf90613f7e565b60405180910390fd5b6000600190508373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611d9757508273ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611deb5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611df557600090505b8373ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611e9e57508273ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611ef25750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611efc57600090505b80611f0a57611f0961241c565b5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fad5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fc257611fbd84848461247e565b6121f9565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120655750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561207a5761207584848461254b565b6121f8565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561211e5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121335761212e848484612618565b6121f7565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121d55750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121ea576121e58484846126e4565b6121f6565b6121f5848484612618565b5b5b5b5b80612207576122066127b2565b5b50505050565b6000838311158290612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c9190613e1c565b60405180910390fd5b50600083856122649190614131565b9050809150509392505050565b600080600061227e6127cf565b91509150612295818361229c90919063ffffffff16565b9250505090565b60006122de83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a82565b905092915050565b60008082846122f59190614050565b90508381101561233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233190613ebe565b60405180910390fd5b8091505092915050565b6000806000806000806000806000806123658b601354601554601454612ae5565b92509250925060006123798c858585612bb9565b90506000612385612271565b90506000806123958f8885612bfc565b9150915060006123a88383898988612c3d565b9050828183878b8b8b9e509e509e509e509e509e509e505050505050505050919395979092949650565b600061241483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061220d565b905092915050565b600060135414801561243057506000601554145b801561243e57506000601454145b156124485761247c565b6013546016819055506015546018819055506014546017819055506000601381905550600060158190555060006014819055505b565b6000612488612271565b9050600080600080600080600061249e89612344565b96509650965096509650965096506124b98b8b8b8a8a612cb6565b6124c3818c612e7c565b6124cd828c6130de565b6124d985848484613340565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516125369190613ffe565b60405180910390a35050505050505050505050565b6000612555612271565b9050600080600080600080600061256b89612344565b96509650965096509650965096506125868b8b868a8a6133bb565b612590818c612e7c565b61259a828c6130de565b6125a685848484613340565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516126039190613ffe565b60405180910390a35050505050505050505050565b6000612622612271565b9050600080600080600080600061263889612344565b96509650965096509650965096506126528b8b8989613581565b61265c818c612e7c565b612666828c6130de565b61267285848484613340565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516126cf9190613ffe565b60405180910390a35050505050505050505050565b60006126ee612271565b9050600080600080600080600061270489612344565b96509650965096509650965096506127208b8b8b8a888b6136b1565b61272a818c612e7c565b612734828c6130de565b61274085848484613340565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161279d9190613ffe565b60405180910390a35050505050505050505050565b601654601381905550601854601581905550601754601481905550565b6000806000600f5490506000600e54905060005b600580549050811015612a455782600160006005848154811061280957612808614324565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806128f7575081600260006005848154811061288f5761288e614324565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561290e57600f54600e5494509450505050612a7e565b61299e600160006005848154811061292957612928614324565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846123d290919063ffffffff16565b9250612a3060026000600584815481106129bb576129ba614324565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836123d290919063ffffffff16565b91508080612a3d9061421f565b9150506127e3565b50612a5d600e54600f5461229c90919063ffffffff16565b821015612a7557600f54600e54935093505050612a7e565b81819350935050505b9091565b60008083118290612ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac09190613e1c565b60405180910390fd5b5060008385612ad891906140a6565b9050809150509392505050565b600080600080612b256064612b17600d54612b098b8d61390d90919063ffffffff16565b61229c90919063ffffffff16565b61229c90919063ffffffff16565b90506000612b636064612b55600d54612b478b8e61390d90919063ffffffff16565b61229c90919063ffffffff16565b61229c90919063ffffffff16565b90506000612ba16064612b93600d54612b858b8f61390d90919063ffffffff16565b61229c90919063ffffffff16565b61229c90919063ffffffff16565b90508282829550955095505050509450945094915050565b6000612bf282612be485612bd6888a6123d290919063ffffffff16565b6123d290919063ffffffff16565b6123d290919063ffffffff16565b9050949350505050565b6000806000612c14848761390d90919063ffffffff16565b90506000612c2b858761390d90919063ffffffff16565b90508181935093505050935093915050565b600080612c53838661390d90919063ffffffff16565b90506000612c6a848661390d90919063ffffffff16565b90506000612ca582612c9785612c898c8e6123d290919063ffffffff16565b6123d290919063ffffffff16565b6123d290919063ffffffff16565b905080935050505095945050505050565b612d0883600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d9d82600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d290919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e3281600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6000612e86612271565b90506000612e9d828561390d90919063ffffffff16565b9050612f138160016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b60016000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fec8460026000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b60026000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516130d09190613ffe565b60405180910390a350505050565b60006130e8612271565b905060006130ff828561390d90919063ffffffff16565b90506131758160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061324e8460026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b60026000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516133329190613ffe565b60405180910390a350505050565b61335584600f546123d290919063ffffffff16565b600f81905550613370836010546122e690919063ffffffff16565b60108190555061338b816011546122e690919063ffffffff16565b6011819055506133a6826012546122e690919063ffffffff16565b601281905550600e54600e8190555050505050565b61340d82600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d290919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134a283600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061353781600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b6135d382600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d290919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061366881600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b61370384600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d290919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379883600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123d290919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061382d82600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138c281600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e690919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050505050565b6000808314156139205760009050613982565b6000828461392e91906140d7565b905082848261393d91906140a6565b1461397d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397490613f3e565b60405180910390fd5b809150505b92915050565b600081359050613997816146fd565b92915050565b6000813590506139ac81614714565b92915050565b6000813590506139c18161472b565b92915050565b6000602082840312156139dd576139dc614353565b5b60006139eb84828501613988565b91505092915050565b60008060408385031215613a0b57613a0a614353565b5b6000613a1985828601613988565b9250506020613a2a85828601613988565b9150509250929050565b600080600060608486031215613a4d57613a4c614353565b5b6000613a5b86828701613988565b9350506020613a6c86828701613988565b9250506040613a7d868287016139b2565b9150509250925092565b60008060408385031215613a9e57613a9d614353565b5b6000613aac85828601613988565b9250506020613abd858286016139b2565b9150509250929050565b600060208284031215613add57613adc614353565b5b6000613aeb848285016139b2565b91505092915050565b60008060408385031215613b0b57613b0a614353565b5b6000613b19858286016139b2565b9250506020613b2a8582860161399d565b9150509250929050565b600080600060608486031215613b4d57613b4c614353565b5b6000613b5b868287016139b2565b9350506020613b6c868287016139b2565b9250506040613b7d868287016139b2565b9150509250925092565b613b9081614165565b82525050565b613b9f81614177565b82525050565b6000613bb082614034565b613bba818561403f565b9350613bca8185602086016141ba565b613bd381614358565b840191505092915050565b6000613beb60258361403f565b9150613bf682614369565b604082019050919050565b6000613c0e60278361403f565b9150613c19826143b8565b604082019050919050565b6000613c31602a8361403f565b9150613c3c82614407565b604082019050919050565b6000613c5460268361403f565b9150613c5f82614456565b604082019050919050565b6000613c77601b8361403f565b9150613c82826144a5565b602082019050919050565b6000613c9a601b8361403f565b9150613ca5826144ce565b602082019050919050565b6000613cbd601b8361403f565b9150613cc8826144f7565b602082019050919050565b6000613ce0601f8361403f565b9150613ceb82614520565b602082019050919050565b6000613d0360218361403f565b9150613d0e82614549565b604082019050919050565b6000613d2660208361403f565b9150613d3182614598565b602082019050919050565b6000613d4960298361403f565b9150613d54826145c1565b604082019050919050565b6000613d6c60248361403f565b9150613d7782614610565b604082019050919050565b6000613d8f60268361403f565b9150613d9a8261465f565b604082019050919050565b6000613db2602c8361403f565b9150613dbd826146ae565b604082019050919050565b613dd1816141a3565b82525050565b613de0816141ad565b82525050565b6000602082019050613dfb6000830184613b87565b92915050565b6000602082019050613e166000830184613b96565b92915050565b60006020820190508181036000830152613e368184613ba5565b905092915050565b60006020820190508181036000830152613e5781613bde565b9050919050565b60006020820190508181036000830152613e7781613c01565b9050919050565b60006020820190508181036000830152613e9781613c24565b9050919050565b60006020820190508181036000830152613eb781613c47565b9050919050565b60006020820190508181036000830152613ed781613c6a565b9050919050565b60006020820190508181036000830152613ef781613c8d565b9050919050565b60006020820190508181036000830152613f1781613cb0565b9050919050565b60006020820190508181036000830152613f3781613cd3565b9050919050565b60006020820190508181036000830152613f5781613cf6565b9050919050565b60006020820190508181036000830152613f7781613d19565b9050919050565b60006020820190508181036000830152613f9781613d3c565b9050919050565b60006020820190508181036000830152613fb781613d5f565b9050919050565b60006020820190508181036000830152613fd781613d82565b9050919050565b60006020820190508181036000830152613ff781613da5565b9050919050565b60006020820190506140136000830184613dc8565b92915050565b600060208201905061402e6000830184613dd7565b92915050565b600081519050919050565b600082825260208201905092915050565b600061405b826141a3565b9150614066836141a3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561409b5761409a614268565b5b828201905092915050565b60006140b1826141a3565b91506140bc836141a3565b9250826140cc576140cb614297565b5b828204905092915050565b60006140e2826141a3565b91506140ed836141a3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561412657614125614268565b5b828202905092915050565b600061413c826141a3565b9150614147836141a3565b92508282101561415a57614159614268565b5b828203905092915050565b600061417082614183565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156141d85780820151818401526020810190506141bd565b838111156141e7576000848401525b50505050565b6000600282049050600182168061420557607f821691505b60208210811415614219576142186142c6565b5b50919050565b600061422a826141a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561425d5761425c614268565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f544f4b454e32303a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a207472616e736665722066726f6d20746865207a65726f2060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a20617070726f766520746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e32303a20617070726f76652066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61470681614165565b811461471157600080fd5b50565b61471d81614177565b811461472857600080fd5b50565b614734816141a3565b811461473f57600080fd5b5056fe544f4b454e32303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f544f4b454e32303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220ab8f19bdce6f42a6b0b76decf3bc0ec8cd4b2db5b3c89862545657db3530f8ae64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000001dcd65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af442835d9d4947efec4b55603836a2f9366a5a000000000000000000000000f19264347efd3b5f11242e3d63e7287379df5c0000000000000000000000000063401aac2469bfe676d134571defe64839c35a61000000000000000000000000000000000000000000000000000000000000000746414257454c5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457454c5400000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000001dcd65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af442835d9d4947efec4b55603836a2f9366a5a000000000000000000000000f19264347efd3b5f11242e3d63e7287379df5c0000000000000000000000000063401aac2469bfe676d134571defe64839c35a61000000000000000000000000000000000000000000000000000000000000000746414257454c5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457454c5400000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): FABWELT
Arg [1] : _symbol (string): WELT
Arg [2] : _decimals (uint256): 18
Arg [3] : _supply (uint256): 500000000
Arg [4] : _txFee (uint256): 0
Arg [5] : _stakeFee (uint256): 0
Arg [6] : _charityFee (uint256): 0
Arg [7] : _FeeAddress (address): 0x0af442835d9d4947efec4b55603836a2f9366a5a
Arg [8] : _StakeAddress (address): 0xf19264347efd3b5f11242e3d63e7287379df5c00
Arg [9] : tokenOwner (address): 0x63401aac2469bfe676d134571defe64839c35a61

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000000000000000000000000000000000001dcd6500
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000af442835d9d4947efec4b55603836a2f9366a5a
Arg [8] : 000000000000000000000000f19264347efd3b5f11242e3d63e7287379df5c00
Arg [9] : 00000000000000000000000063401aac2469bfe676d134571defe64839c35a61
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [11] : 46414257454c5400000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [13] : 57454c5400000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

16627:16623:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18510:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19429:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20546:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18794:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19598:315;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21685:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18696:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19921:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20853:378;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21239:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22772:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17146:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17555:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18897:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16073:148;;;:::i;:::-;;17114:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20755:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15431:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18601:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20147:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19103:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17521:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15236:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17487:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20426:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20645:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19278:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21946:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16376:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22286:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22880:368;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18510:83;18547:13;18580:5;18573:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18510:83;:::o;19429:161::-;19504:4;19521:39;19530:12;:10;:12::i;:::-;19544:7;19553:6;19521:8;:39::i;:::-;19578:4;19571:11;;19429:161;;;;:::o;20546:87::-;20588:7;20615:10;;20608:17;;20546:87;:::o;18794:95::-;18847:7;18874;;18867:14;;18794:95;:::o;19598:315::-;19696:4;19713:36;19723:6;19731:9;19742:6;19713:9;:36::i;:::-;19760:123;19769:6;19777:12;:10;:12::i;:::-;19791:91;19829:6;19791:91;;;;;;;;;;;;;;;;;:11;:19;19803:6;19791:19;;;;;;;;;;;;;;;:33;19811:12;:10;:12::i;:::-;19791:33;;;;;;;;;;;;;;;;:37;;:91;;;;;:::i;:::-;19760:8;:123::i;:::-;19901:4;19894:11;;19598:315;;;;;:::o;21685:253::-;21751:7;21790;;21779;:18;;21771:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21855:19;21878:10;:8;:10::i;:::-;21855:33;;21906:24;21918:11;21906:7;:11;;:24;;;;:::i;:::-;21899:31;;;21685:253;;;:::o;18696:90::-;18737:5;18768:9;;18755:23;;18696:90;:::o;19921:218::-;20009:4;20026:83;20035:12;:10;:12::i;:::-;20049:7;20058:50;20097:10;20058:11;:25;20070:12;:10;:12::i;:::-;20058:25;;;;;;;;;;;;;;;:34;20084:7;20058:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20026:8;:83::i;:::-;20127:4;20120:11;;19921:218;;;;:::o;20853:378::-;20905:14;20922:12;:10;:12::i;:::-;20905:29;;20954:11;:19;20966:6;20954:19;;;;;;;;;;;;;;;;;;;;;;;;;20953:20;20945:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21034:15;21059:19;21070:7;21059:10;:19::i;:::-;21033:45;;;;;;;;21107:28;21127:7;21107;:15;21115:6;21107:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21089:7;:15;21097:6;21089:15;;;;;;;;;;;;;;;:46;;;;21156:20;21168:7;21156;;:11;;:20;;;;:::i;:::-;21146:7;:30;;;;21200:23;21215:7;21200:10;;:14;;:23;;;;:::i;:::-;21187:10;:36;;;;20894:337;;20853:378;:::o;21239:438::-;21329:7;21368;;21357;:18;;21349:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21427:17;21422:248;;21462:15;21487:19;21498:7;21487:10;:19::i;:::-;21461:45;;;;;;;;21528:7;21521:14;;;;;21422:248;21570:23;21602:19;21613:7;21602:10;:19::i;:::-;21568:53;;;;;;;;21643:15;21636:22;;;21239:438;;;;;:::o;22772:100::-;15653:12;:10;:12::i;:::-;15643:22;;:6;;;;;;;;;;:22;;;15635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22857:7:::1;22844:10;;:20;;;;;;;;;;;;;;;;;;22772:100:::0;:::o;17146:27::-;;;;;;;;;;;;;:::o;17555:25::-;;;;:::o;18897:198::-;18963:7;18987:11;:20;18999:7;18987:20;;;;;;;;;;;;;;;;;;;;;;;;;18983:49;;;19016:7;:16;19024:7;19016:16;;;;;;;;;;;;;;;;19009:23;;;;18983:49;19050:37;19070:7;:16;19078:7;19070:16;;;;;;;;;;;;;;;;19050:19;:37::i;:::-;19043:44;;18897:198;;;;:::o;16073:148::-;15653:12;:10;:12::i;:::-;15643:22;;:6;;;;;;;;;;:22;;;15635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16180:1:::1;16143:40;;16164:6;::::0;::::1;;;;;;;;16143:40;;;;;;;;;;;;16211:1;16194:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16073:148::o:0;17114:25::-;;;;;;;;;;;;;:::o;20755:90::-;20798:7;20825:12;;20818:19;;20755:90;:::o;15431:79::-;15469:7;15496:6;;;;;;;;;;;15489:13;;15431:79;:::o;18601:87::-;18640:13;18673:7;18666:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18601:87;:::o;20147:271::-;20240:4;20257:131;20266:12;:10;:12::i;:::-;20280:7;20289:98;20328:15;20289:98;;;;;;;;;;;;;;;;;:11;:25;20301:12;:10;:12::i;:::-;20289:25;;;;;;;;;;;;;;;:34;20315:7;20289:34;;;;;;;;;;;;;;;;:38;;:98;;;;;:::i;:::-;20257:8;:131::i;:::-;20406:4;20399:11;;20147:271;;;;:::o;19103:167::-;19181:4;19198:42;19208:12;:10;:12::i;:::-;19222:9;19233:6;19198:9;:42::i;:::-;19258:4;19251:11;;19103:167;;;;:::o;17521:27::-;;;;:::o;15236:21::-;;;;;;;;;;;;:::o;17487:27::-;;;;:::o;20426:110::-;20484:4;20508:11;:20;20520:7;20508:20;;;;;;;;;;;;;;;;;;;;;;;;;20501:27;;20426:110;;;:::o;20645:94::-;20690:7;20717:14;;20710:21;;20645:94;:::o;19278:143::-;19359:7;19386:11;:18;19398:5;19386:18;;;;;;;;;;;;;;;:27;19405:7;19386:27;;;;;;;;;;;;;;;;19379:34;;19278:143;;;;:::o;21946:332::-;15653:12;:10;:12::i;:::-;15643:22;;:6;;;;;;;;;;:22;;;15635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22028:11:::1;:20;22040:7;22028:20;;;;;;;;;;;;;;;;;;;;;;;;;22027:21;22019:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;22113:1;22094:7;:16;22102:7;22094:16;;;;;;;;;;;;;;;;:20;22091:108;;;22150:37;22170:7;:16;22178:7;22170:16;;;;;;;;;;;;;;;;22150:19;:37::i;:::-;22131:7;:16;22139:7;22131:16;;;;;;;;;;;;;;;:56;;;;22091:108;22232:4;22209:11;:20;22221:7;22209:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22247:9;22262:7;22247:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21946:332:::0;:::o;16376:244::-;15653:12;:10;:12::i;:::-;15643:22;;:6;;;;;;;;;;:22;;;15635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16485:1:::1;16465:22;;:8;:22;;;;16457:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16575:8;16546:38;;16567:6;::::0;::::1;;;;;;;;16546:38;;;;;;;;;;;;16604:8;16595:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16376:244:::0;:::o;22286:478::-;15653:12;:10;:12::i;:::-;15643:22;;:6;;;;;;;;;;:22;;;15635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22367:11:::1;:20;22379:7;22367:20;;;;;;;;;;;;;;;;;;;;;;;;;22359:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22435:9;22430:327;22454:9;:16;;;;22450:1;:20;22430:327;;;22512:7;22496:23;;:9;22506:1;22496:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;22492:254;;;22555:9;22584:1;22565:9;:16;;;;:20;;;;:::i;:::-;22555:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22540:9;22550:1;22540:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22624:1;22605:7;:16;22613:7;22605:16;;;;;;;;;;;;;;;:20;;;;22667:5;22644:11;:20;22656:7;22644:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22691:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;22725:5;;22492:254;22472:3;;;;;:::i;:::-;;;;22430:327;;;;22286:478:::0;:::o;22880:368::-;15653:12;:10;:12::i;:::-;15643:22;;:6;;;;;;;;;;:22;;;15635:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22993:3:::1;22984:6;:12;:31;;;;;23012:3;23000:9;:15;22984:31;:52;;;;;23033:3;23019:11;:17;22984:52;22976:61;;;::::0;::::1;;23075:3;23067:6;:11;;;;:::i;:::-;23056:8;:22;;;;23112:3;23099:11;:16;;;;:::i;:::-;23084:12;:31;;;;23144:3;23133:9;:14;;;;:::i;:::-;23120:10;:27;;;;23167:8;;23152:12;:23;;;;23199:12;;23180:16;:31;;;;23233:10;;23216:14;:27;;;;22880:368:::0;;;:::o;160:115::-;213:15;256:10;241:26;;160:115;:::o;23257:341::-;23367:1;23350:19;;:5;:19;;;;23342:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23450:1;23431:21;;:7;:21;;;;23423:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23536:6;23506:11;:18;23518:5;23506:18;;;;;;;;;;;;;;;:27;23525:7;23506:27;;;;;;;;;;;;;;;:36;;;;23574:7;23558:32;;23567:5;23558:32;;;23583:6;23558:32;;;;;;:::i;:::-;;;;;;;;23257:341;;;:::o;23606:1443::-;23721:1;23703:20;;:6;:20;;;;23695:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23807:1;23786:23;;:9;:23;;;;23778:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23879:1;23870:6;:10;23862:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24036:12;24051:4;24036:19;;24084:6;24070:20;;:10;;;;;;;;;;;:20;;;:47;;;;24108:9;24094:23;;:10;;;;;;;;;;;:23;;;24070:47;:73;;;;24121:11;:22;24133:9;24121:22;;;;;;;;;;;;;;;;;;;;;;;;;24070:73;24066:121;;;24170:5;24160:15;;24066:121;24227:6;24211:22;;:12;;;;;;;;;;;:22;;;:51;;;;24253:9;24237:25;;:12;;;;;;;;;;;:25;;;24211:51;:77;;;;24266:11;:22;24278:9;24266:22;;;;;;;;;;;;;;;;;;;;;;;;;24211:77;24207:125;;;24315:5;24305:15;;24207:125;24349:7;24344:28;;24358:14;:12;:14::i;:::-;24344:28;24407:11;:19;24419:6;24407:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;24431:11;:22;24443:9;24431:22;;;;;;;;;;;;;;;;;;;;;;;;;24430:23;24407:46;24403:597;;;24470:48;24492:6;24500:9;24511:6;24470:21;:48::i;:::-;24403:597;;;24541:11;:19;24553:6;24541:19;;;;;;;;;;;;;;;;;;;;;;;;;24540:20;:46;;;;;24564:11;:22;24576:9;24564:22;;;;;;;;;;;;;;;;;;;;;;;;;24540:46;24536:464;;;24603:46;24623:6;24631:9;24642:6;24603:19;:46::i;:::-;24536:464;;;24672:11;:19;24684:6;24672:19;;;;;;;;;;;;;;;;;;;;;;;;;24671:20;:47;;;;;24696:11;:22;24708:9;24696:22;;;;;;;;;;;;;;;;;;;;;;;;;24695:23;24671:47;24667:333;;;24735:44;24753:6;24761:9;24772:6;24735:17;:44::i;:::-;24667:333;;;24801:11;:19;24813:6;24801:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;24824:11;:22;24836:9;24824:22;;;;;;;;;;;;;;;;;;;;;;;;;24801:45;24797:203;;;24863:48;24885:6;24893:9;24904:6;24863:21;:48::i;:::-;24797:203;;;24944:44;24962:6;24970:9;24981:6;24944:17;:44::i;:::-;24797:203;24667:333;24536:464;24403:597;25017:7;25012:29;;25026:15;:13;:15::i;:::-;25012:29;23684:1365;23606:1443;;;:::o;4978:192::-;5064:7;5097:1;5092;:6;;5100:12;5084:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5124:9;5140:1;5136;:5;;;;:::i;:::-;5124:17;;5161:1;5154:8;;;4978:192;;;;;:::o;31182:163::-;31223:7;31244:15;31261;31280:19;:17;:19::i;:::-;31243:56;;;;31317:20;31329:7;31317;:11;;:20;;;;:::i;:::-;31310:27;;;;31182:163;:::o;6376:132::-;6434:7;6461:39;6465:1;6468;6461:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6454:46;;6376:132;;;;:::o;4075:181::-;4133:7;4153:9;4169:1;4165;:5;;;;:::i;:::-;4153:17;;4194:1;4189;:6;;4181:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4247:1;4240:8;;;4075:181;;;;:::o;29218:657::-;29277:7;29286;29295;29304;29313;29322;29331;29352:12;29366:14;29382:16;29402:56;29414:7;29423:8;;29433:10;;29445:12;;29402:11;:56::i;:::-;29351:107;;;;;;29469:23;29495:51;29514:7;29523:4;29529:6;29537:8;29495:18;:51::i;:::-;29469:77;;29557:19;29580:10;:8;:10::i;:::-;29557:33;;29602:15;29619:12;29635:39;29647:7;29656:4;29662:11;29635;:39::i;:::-;29601:73;;;;29685:23;29711:65;29731:7;29740:4;29746:6;29754:8;29764:11;29711:19;:65::i;:::-;29685:91;;29795:7;29804:15;29821:4;29827:15;29844:4;29850:6;29858:8;29787:80;;;;;;;;;;;;;;;;;;;;;;29218:657;;;;;;;;;:::o;4539:136::-;4597:7;4624:43;4628:1;4631;4624:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4617:50;;4539:136;;;;:::o;32654:324::-;32712:1;32700:8;;:13;:32;;;;;32731:1;32717:10;;:15;32700:32;:53;;;;;32752:1;32736:12;;:17;32700:53;32697:65;;;32755:7;;32697:65;32797:8;;32782:12;:23;;;;32833:10;;32816:14;:27;;;;32873:12;;32854:16;:31;;;;32917:1;32906:8;:12;;;;32942:1;32929:10;:14;;;;32969:1;32954:12;:16;;;;32654:324;:::o;26902:590::-;27004:19;27027:10;:8;:10::i;:::-;27004:33;;27049:15;27066:23;27091:12;27105:23;27130:12;27144:14;27160:16;27180:19;27191:7;27180:10;:19::i;:::-;27048:151;;;;;;;;;;;;;;27210:80;27237:6;27245:9;27256:7;27265;27274:15;27210:26;:80::i;:::-;27301:32;27316:8;27326:6;27301:14;:32::i;:::-;27344:28;27357:6;27365;27344:12;:28::i;:::-;27383:41;27395:4;27401;27407:6;27415:8;27383:11;:41::i;:::-;27457:9;27440:44;;27449:6;27440:44;;;27468:15;27440:44;;;;;;:::i;:::-;;;;;;;;26993:499;;;;;;;;26902:590;;;:::o;25911:606::-;26011:19;26034:10;:8;:10::i;:::-;26011:33;;26056:15;26073:23;26098:12;26112:23;26137:12;26151:14;26167:16;26187:19;26198:7;26187:10;:19::i;:::-;26055:151;;;;;;;;;;;;;;26217:90;26246:6;26254:9;26265:15;26282:7;26291:15;26217:28;:90::i;:::-;26326:32;26341:8;26351:6;26326:14;:32::i;:::-;26369:28;26382:6;26390;26369:12;:28::i;:::-;26408:41;26420:4;26426;26432:6;26440:8;26408:11;:41::i;:::-;26482:9;26465:44;;26474:6;26465:44;;;26493:15;26465:44;;;;;;:::i;:::-;;;;;;;;26000:517;;;;;;;;25911:606;;;:::o;25057:575::-;25155:19;25178:10;:8;:10::i;:::-;25155:33;;25200:15;25217:23;25242:12;25256:23;25281:12;25295:14;25311:16;25331:19;25342:7;25331:10;:19::i;:::-;25199:151;;;;;;;;;;;;;;25361:69;25386:6;25394:9;25405:7;25414:15;25361:24;:69::i;:::-;25441:32;25456:8;25466:6;25441:14;:32::i;:::-;25484:28;25497:6;25505;25484:12;:28::i;:::-;25523:41;25535:4;25541;25547:6;25555:8;25523:11;:41::i;:::-;25597:9;25580:44;;25589:6;25580:44;;;25608:15;25580:44;;;;;;:::i;:::-;;;;;;;;25144:488;;;;;;;;25057:575;;;:::o;27845:603::-;27947:19;27970:10;:8;:10::i;:::-;27947:33;;27992:15;28009:23;28034:12;28048:23;28073:12;28087:14;28103:16;28123:19;28134:7;28123:10;:19::i;:::-;27991:151;;;;;;;;;;;;;;28153:91;28174:6;28182:9;28193:7;28202;28211:15;28228;28153:20;:91::i;:::-;28257:32;28272:8;28282:6;28257:14;:32::i;:::-;28300:28;28313:6;28321;28300:12;:28::i;:::-;28339:41;28351:4;28357;28363:6;28371:8;28339:11;:41::i;:::-;28413:9;28396:44;;28405:6;28396:44;;;28424:15;28396:44;;;;;;:::i;:::-;;;;;;;;27936:512;;;;;;;;27845:603;;;:::o;32990:155::-;33045:12;;33034:8;:23;;;;33081:14;;33068:10;:27;;;;33121:16;;33106:12;:31;;;;32990:155::o;31353:561::-;31403:7;31412;31432:15;31450:7;;31432:25;;31468:15;31486:7;;31468:25;;31515:9;31510:289;31534:9;:16;;;;31530:1;:20;31510:289;;;31600:7;31576;:21;31584:9;31594:1;31584:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31576:21;;;;;;;;;;;;;;;;:31;:66;;;;31635:7;31611;:21;31619:9;31629:1;31619:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31611:21;;;;;;;;;;;;;;;;:31;31576:66;31572:97;;;31652:7;;31661;;31644:25;;;;;;;;;31572:97;31694:34;31706:7;:21;31714:9;31724:1;31714:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31706:21;;;;;;;;;;;;;;;;31694:7;:11;;:34;;;;:::i;:::-;31684:44;;31753:34;31765:7;:21;31773:9;31783:1;31773:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31765:21;;;;;;;;;;;;;;;;31753:7;:11;;:34;;;;:::i;:::-;31743:44;;31552:3;;;;;:::i;:::-;;;;31510:289;;;;31823:20;31835:7;;31823;;:11;;:20;;;;:::i;:::-;31813:7;:30;31809:61;;;31853:7;;31862;;31845:25;;;;;;;;31809:61;31889:7;31898;31881:25;;;;;;31353:561;;;:::o;7004:278::-;7090:7;7122:1;7118;:5;7125:12;7110:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7149:9;7165:1;7161;:5;;;;:::i;:::-;7149:17;;7273:1;7266:8;;;7004:278;;;;;:::o;29887:431::-;30001:7;30010;30019;30039:12;30054:50;30100:3;30055:39;30081:12;;30056:19;30068:6;30056:7;:11;;:19;;;;:::i;:::-;30055:25;;:39;;;;:::i;:::-;30054:45;;:50;;;;:::i;:::-;30039:65;;30115:14;30132:52;30180:3;30133:41;30161:12;;30134:21;30146:8;30134:7;:11;;:21;;;;:::i;:::-;30133:27;;:41;;;;:::i;:::-;30132:47;;:52;;;;:::i;:::-;30115:69;;30195:16;30214:54;30264:3;30215:43;30245:12;;30216:23;30228:10;30216:7;:11;;:23;;;;:::i;:::-;30215:29;;:43;;;;:::i;:::-;30214:49;;:54;;;;:::i;:::-;30195:73;;30287:4;30293:6;30301:8;30279:31;;;;;;;;;29887:431;;;;;;;;:::o;30330:193::-;30445:7;30472:43;30506:8;30472:29;30494:6;30472:17;30484:4;30472:7;:11;;:17;;;;:::i;:::-;:21;;:29;;;;:::i;:::-;:33;;:43;;;;:::i;:::-;30465:50;;30330:193;;;;;;:::o;30535:254::-;30630:7;30639;30659:15;30677:24;30689:11;30677:7;:11;;:24;;;;:::i;:::-;30659:42;;30712:12;30727:21;30736:11;30727:4;:8;;:21;;;;:::i;:::-;30712:36;;30767:7;30776:4;30759:22;;;;;;30535:254;;;;;;:::o;30801:373::-;30938:7;30958:14;30975:23;30986:11;30975:6;:10;;:23;;;;:::i;:::-;30958:40;;31009:16;31028:25;31041:11;31028:8;:12;;:25;;;;:::i;:::-;31009:44;;31064:23;31090:43;31124:8;31090:29;31112:6;31090:17;31102:4;31090:7;:11;;:17;;;;:::i;:::-;:21;;:29;;;;:::i;:::-;:33;;:43;;;;:::i;:::-;31064:69;;31151:15;31144:22;;;;;30801:373;;;;;;;:::o;27504:333::-;27671:28;27691:7;27671;:15;27679:6;27671:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27653:7;:15;27661:6;27653:15;;;;;;;;;;;;;;;:46;;;;27728:28;27748:7;27728;:15;27736:6;27728:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27710:7;:15;27718:6;27710:15;;;;;;;;;;;;;;;:46;;;;27788:39;27811:15;27788:7;:18;27796:9;27788:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27767:7;:18;27775:9;27767:18;;;;;;;;;;;;;;;:60;;;;27504:333;;;;;:::o;31922:358::-;31999:19;32021:10;:8;:10::i;:::-;31999:32;;32042:16;32061:25;32074:11;32061:8;:12;;:25;;;;:::i;:::-;32042:44;;32119:33;32143:8;32119:7;:19;32127:10;;;;;;;;;;;32119:19;;;;;;;;;;;;;;;;:23;;:33;;;;:::i;:::-;32097:7;:19;32105:10;;;;;;;;;;;32097:19;;;;;;;;;;;;;;;:55;;;;32185:33;32209:8;32185:7;:19;32193:10;;;;;;;;;;;32185:19;;;;;;;;;;;;;;;;:23;;:33;;;;:::i;:::-;32163:7;:19;32171:10;;;;;;;;;;;32163:19;;;;;;;;;;;;;;;:55;;;;32251:10;;;;;;;;;;;32234:38;;32243:6;32234:38;;;32263:8;32234:38;;;;;;:::i;:::-;;;;;;;;31988:292;;31922:358;;:::o;32292:354::-;32365:19;32387:10;:8;:10::i;:::-;32365:32;;32408:14;32425:23;32436:11;32425:6;:10;;:23;;;;:::i;:::-;32408:40;;32483:33;32509:6;32483:7;:21;32491:12;;;;;;;;;;;32483:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;32459:7;:21;32467:12;;;;;;;;;;;32459:21;;;;;;;;;;;;;;;:57;;;;32551:33;32577:6;32551:7;:21;32559:12;;;;;;;;;;;32551:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;32527:7;:21;32535:12;;;;;;;;;;;32527:21;;;;;;;;;;;;;;;:57;;;;32617:12;;;;;;;;;;;32600:38;;32609:6;32600:38;;;32631:6;32600:38;;;;;;:::i;:::-;;;;;;;;32354:292;;32292:354;;:::o;28891:315::-;29003:17;29015:4;29003:7;;:11;;:17;;;;:::i;:::-;28993:7;:27;;;;29044:20;29059:4;29044:10;;:14;;:20;;;;:::i;:::-;29031:10;:33;;;;29092:28;29111:8;29092:14;;:18;;:28;;;;:::i;:::-;29075:14;:45;;;;29146:24;29163:6;29146:12;;:16;;:24;;;;:::i;:::-;29131:12;:39;;;;29191:7;;29181;:17;;;;28891:315;;;;:::o;26529:359::-;26706:28;26726:7;26706;:15;26714:6;26706:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26688:7;:15;26696:6;26688:15;;;;;;;;;;;;;;;:46;;;;26766:39;26789:15;26766:7;:18;26774:9;26766:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26745:7;:18;26753:9;26745:18;;;;;;;;;;;;;;;:60;;;;26837:39;26860:15;26837:7;:18;26845:9;26837:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26816:7;:18;26824:9;26816:18;;;;;;;;;;;;;;;:60;;;;26529:359;;;;;:::o;25644:255::-;25792:28;25812:7;25792;:15;25800:6;25792:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25774:7;:15;25782:6;25774:15;;;;;;;;;;;;;;;:46;;;;25852:39;25875:15;25852:7;:18;25860:9;25852:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25831:7;:18;25839:9;25831:18;;;;;;;;;;;;;;;:60;;;;25644:255;;;;:::o;28460:423::-;28646:28;28666:7;28646;:15;28654:6;28646:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28628:7;:15;28636:6;28628:15;;;;;;;;;;;;;;;:46;;;;28703:28;28723:7;28703;:15;28711:6;28703:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28685:7;:15;28693:6;28685:15;;;;;;;;;;;;;;;:46;;;;28763:39;28786:15;28763:7;:18;28771:9;28763:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28742:7;:18;28750:9;28742:18;;;;;;;;;;;;;;;:60;;;;28834:39;28857:15;28834:7;:18;28842:9;28834:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28813:7;:18;28821:9;28813:18;;;;;;;;;;;;;;;:60;;;;28460:423;;;;;;:::o;5429:471::-;5487:7;5737:1;5732;:6;5728:47;;;5762:1;5755:8;;;;5728:47;5787:9;5803:1;5799;:5;;;;:::i;:::-;5787:17;;5832:1;5827;5823;:5;;;;:::i;:::-;:10;5815:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5891:1;5884:8;;;5429:471;;;;;:::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://ab8f19bdce6f42a6b0b76decf3bc0ec8cd4b2db5b3c89862545657db3530f8ae
Loading