ETH Price: $3,899.92 (+1.93%)

Token

ERC-20: SleepyETH (SleepyETH)
 

Overview

Max Total Supply

100,000,000 SleepyETH

Holders

13

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
SleepyETH

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-18
*/

/**
 *Submitted for verification at Etherscan.io on 2021-08-17
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


contract SleepyETH is Context, IERC20, 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;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100 * 10**6 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    address payable private _charityWalletAddress;

    string private _name = 'SleepyETH';
    string private _symbol = 'SleepyETH';
    uint8 private _decimals = 18;
    
    uint256 public _charityFee = 2;
    uint256 private _previousCharityFee = _charityFee;
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        _charityWalletAddress = payable(0xEa8346C7DE82AB7862002d4a62d2F4b42D483fEE);
       
        emit Transfer(address(0), _msgSender(), _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 _decimals;
    }

    function totalSupply() public pure 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, "ERC20: 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, "ERC20: 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 reflect(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 excluded");
        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 _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        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);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);  
        _takeCharity(tCharity, sender);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);  
        _takeCharity(tCharity, sender);
        _reflectFee(rFee, tFee);
      
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

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

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256,uint256) {
        uint256 tFee = (tAmount.mul(8)).div(100);
        uint256 tCharity = calculateCharityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tCharity);
        return (tTransferAmount, tFee, tCharity);
    }

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

    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 _takeCharity(uint256 tCharity, address sender) private {
        uint256 currentRate =  _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[_charityWalletAddress] = _rOwned[_charityWalletAddress].add(rCharity);
        if(_isExcluded[_charityWalletAddress])
            _tOwned[_charityWalletAddress] = _tOwned[_charityWalletAddress].add(tCharity);
        emit Transfer(sender, _charityWalletAddress, tCharity);
    }
    
     function calculateCharityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_charityFee).div(100);
    }
    
     function _setCharityWalletAddress(address payable charityWalletAddress) external onlyOwner() {
            _charityWalletAddress = charityWalletAddress;
        }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"charityWalletAddress","type":"address"}],"name":"_setCharityWalletAddress","outputs":[],"stateMutability":"nonpayable","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":"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"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526200001d6a52b7d2dcc80cd2e40000006000196200029c565b6200002b9060001962000239565b600655604080518082019091526009808252680a6d8cacae0f28aa8960bb1b60209092019182526200005e918162000193565b50604080518082019091526009808252680a6d8cacae0f28aa8960bb1b60209092019182526200009191600a9162000193565b50600b805460ff191660121790556002600c819055600d55348015620000b657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060065433600081815260016020526040902091909155600880546001600160a01b03191673ea8346c7de82ab7862002d4a62d2f4b42d483fee1790556001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a52b7d2dcc80cd2e40000006040516200018591815260200190565b60405180910390a3620002bf565b828054620001a1906200025f565b90600052602060002090601f016020900481019282620001c5576000855562000210565b82601f10620001e057805160ff191683800117855562000210565b8280016001018555821562000210579182015b8281111562000210578251825591602001919060010190620001f3565b506200021e92915062000222565b5090565b5b808211156200021e576000815560010162000223565b6000828210156200025a57634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200027457607f821691505b602082108114156200029657634e487b7160e01b600052602260045260246000fd5b50919050565b600082620002ba57634e487b7160e01b600052601260045260246000fd5b500690565b611b3f80620002cf6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063bbbaf2191161007c578063bbbaf21914610299578063cba0e996146102ac578063dd62ed3e146102d8578063f2cc0c1814610311578063f2fde38b14610324578063f84354f11461033757600080fd5b806370a0823114610235578063715018a6146102485780638da5cb5b1461025057806395d89b411461026b578063a457c2d714610273578063a9059cbb1461028657600080fd5b806323b872dd1161011557806323b872dd146101cb5780632d838119146101de578063313ce567146101f1578063395093511461020657806340f8007a146102195780634549b0391461022257600080fd5b8063053ab1821461015257806306fdde0314610167578063095ea7b31461018557806313114a9d146101a857806318160ddd146101ba575b600080fd5b6101656101603660046118cf565b61034a565b005b61016f610439565b60405161017c9190611912565b60405180910390f35b6101986101933660046118a3565b6104cb565b604051901515815260200161017c565b6007545b60405190815260200161017c565b6a52b7d2dcc80cd2e40000006101ac565b6101986101d9366004611862565b6104e2565b6101ac6101ec3660046118cf565b61054b565b600b5460405160ff909116815260200161017c565b6101986102143660046118a3565b6105cf565b6101ac600c5481565b6101ac6102303660046118e8565b610605565b6101ac61024336600461180c565b61069b565b6101656106fa565b6000546040516001600160a01b03909116815260200161017c565b61016f61076e565b6101986102813660046118a3565b61077d565b6101986102943660046118a3565b6107cc565b6101656102a736600461180c565b6107d9565b6101986102ba36600461180c565b6001600160a01b031660009081526004602052604090205460ff1690565b6101ac6102e6366004611829565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61016561031f36600461180c565b610825565b61016561033236600461180c565b610978565b61016561034536600461180c565b610a62565b3360008181526004602052604090205460ff16156103c45760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084015b60405180910390fd5b60006103cf83610c19565b505050506001600160a01b0384166000908152600160205260409020549192506103fb91905082610c70565b6001600160a01b0383166000908152600160205260409020556006546104219082610c70565b6006556007546104319084610cb2565b600755505050565b60606009805461044890611a0c565b80601f016020809104026020016040519081016040528092919081815260200182805461047490611a0c565b80156104c15780601f10610496576101008083540402835291602001916104c1565b820191906000526020600020905b8154815290600101906020018083116104a457829003601f168201915b5050505050905090565b60006104d8338484610d11565b5060015b92915050565b60006104ef848484610e35565b610541843361053c85604051806060016040528060288152602001611abd602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906110b1565b610d11565b5060019392505050565b60006006548211156105b25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016103bb565b60006105bc6110eb565b90506105c8838261110e565b9392505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916104d891859061053c9086610cb2565b60006a52b7d2dcc80cd2e40000008311156106625760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016103bb565b8161068157600061067284610c19565b509395506104dc945050505050565b600061068c84610c19565b509295506104dc945050505050565b6001600160a01b03811660009081526004602052604081205460ff16156106d857506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546104dc9061054b565b6000546001600160a01b031633146107245760405162461bcd60e51b81526004016103bb90611967565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600a805461044890611a0c565b60006104d8338461053c85604051806060016040528060258152602001611ae5602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906110b1565b60006104d8338484610e35565b6000546001600160a01b031633146108035760405162461bcd60e51b81526004016103bb90611967565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461084f5760405162461bcd60e51b81526004016103bb90611967565b6001600160a01b03811660009081526004602052604090205460ff16156108b85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016103bb565b6001600160a01b03811660009081526001602052604090205415610912576001600160a01b0381166000908152600160205260409020546108f89061054b565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6000546001600160a01b031633146109a25760405162461bcd60e51b81526004016103bb90611967565b6001600160a01b038116610a075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bb565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610a8c5760405162461bcd60e51b81526004016103bb90611967565b6001600160a01b03811660009081526004602052604090205460ff16610af45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016103bb565b60005b600554811015610c1557816001600160a01b031660058281548110610b1e57610b1e611a8e565b6000918252602090912001546001600160a01b03161415610c035760058054610b49906001906119f5565b81548110610b5957610b59611a8e565b600091825260209091200154600580546001600160a01b039092169183908110610b8557610b85611a8e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff191690556005805480610bdd57610bdd611a78565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c0d81611a47565b915050610af7565b5050565b6000806000806000806000806000610c308a611150565b9250925092506000610c406110eb565b90506000806000610c538e87878761119e565b919e509c509a509598509396509194505050505091939550919395565b60006105c883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110b1565b600080610cbf838561199c565b9050838110156105c85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103bb565b6001600160a01b038316610d735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103bb565b6001600160a01b038216610dd45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103bb565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e995760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103bb565b6001600160a01b038216610efb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103bb565b60008111610f5d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016103bb565b6001600160a01b03831660009081526004602052604090205460ff168015610f9e57506001600160a01b03821660009081526004602052604090205460ff16155b15610fb357610fae8383836111ee565b505050565b6001600160a01b03831660009081526004602052604090205460ff16158015610ff457506001600160a01b03821660009081526004602052604090205460ff165b1561100457610fae838383611315565b6001600160a01b03831660009081526004602052604090205460ff1615801561104657506001600160a01b03821660009081526004602052604090205460ff16155b1561105657610fae8383836113be565b6001600160a01b03831660009081526004602052604090205460ff16801561109657506001600160a01b03821660009081526004602052604090205460ff165b156110a657610fae838383611402565b610fae8383836113be565b600081848411156110d55760405162461bcd60e51b81526004016103bb9190611912565b5060006110e284866119f5565b95945050505050565b60008060006110f8611475565b9092509050611107828261110e565b9250505090565b60006105c883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611619565b600080808061116b6064611165876008611647565b9061110e565b90506000611178866116c6565b905060006111908261118a8986610c70565b90610c70565b979296509094509092505050565b60008080806111ad8886611647565b905060006111bb8887611647565b905060006111c98888611647565b905060006111db8261118a8686610c70565b939b939a50919850919650505050505050565b60008060008060008061120087610c19565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506112329088610c70565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546112619087610c70565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546112909086610cb2565b6001600160a01b0389166000908152600160205260409020556112b3818a6116e2565b6112bd84836117e8565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161130291815260200190565b60405180910390a3505050505050505050565b60008060008060008061132787610c19565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506113599087610c70565b6001600160a01b03808b16600090815260016020908152604080832094909455918b1681526002909152205461138f9084610cb2565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546112909086610cb2565b6000806000806000806113d087610c19565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506112619087610c70565b60008060008060008061141487610c19565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506114469088610c70565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546113599087610c70565b60065460009081906a52b7d2dcc80cd2e4000000825b6005548110156115d8578260016000600584815481106114ad576114ad611a8e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061151857508160026000600584815481106114f1576114f1611a8e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611536575050600654936a52b7d2dcc80cd2e40000009350915050565b61157c600160006005848154811061155057611550611a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610c70565b92506115c4600260006005848154811061159857611598611a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610c70565b9150806115d081611a47565b91505061148b565b506006546115f1906a52b7d2dcc80cd2e400000061110e565b821015611610575050600654926a52b7d2dcc80cd2e400000092509050565b90939092509050565b6000818361163a5760405162461bcd60e51b81526004016103bb9190611912565b5060006110e284866119b4565b600082611656575060006104dc565b600061166283856119d6565b90508261166f85836119b4565b146105c85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016103bb565b60006104dc6064611165600c548561164790919063ffffffff16565b60006116ec6110eb565b905060006116fa8483611647565b6008546001600160a01b03166000908152600160205260409020549091506117229082610cb2565b600880546001600160a01b03908116600090815260016020908152604080832095909555925490911681526004909152205460ff161561179d576008546001600160a01b03166000908152600260205260409020546117819085610cb2565b6008546001600160a01b03166000908152600260205260409020555b6008546040518581526001600160a01b03918216918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b6006546117f59083610c70565b6006556007546118059082610cb2565b6007555050565b60006020828403121561181e57600080fd5b81356105c881611aa4565b6000806040838503121561183c57600080fd5b823561184781611aa4565b9150602083013561185781611aa4565b809150509250929050565b60008060006060848603121561187757600080fd5b833561188281611aa4565b9250602084013561189281611aa4565b929592945050506040919091013590565b600080604083850312156118b657600080fd5b82356118c181611aa4565b946020939093013593505050565b6000602082840312156118e157600080fd5b5035919050565b600080604083850312156118fb57600080fd5b823591506020830135801515811461185757600080fd5b600060208083528351808285015260005b8181101561193f57858101830151858201604001528201611923565b81811115611951576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156119af576119af611a62565b500190565b6000826119d157634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156119f0576119f0611a62565b500290565b600082821015611a0757611a07611a62565b500390565b600181811c90821680611a2057607f821691505b60208210811415611a4157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611a5b57611a5b611a62565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611ab957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122092941552ce9463efe7e357c3af739862e3533753611d2954edb9d54306e51de064736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063bbbaf2191161007c578063bbbaf21914610299578063cba0e996146102ac578063dd62ed3e146102d8578063f2cc0c1814610311578063f2fde38b14610324578063f84354f11461033757600080fd5b806370a0823114610235578063715018a6146102485780638da5cb5b1461025057806395d89b411461026b578063a457c2d714610273578063a9059cbb1461028657600080fd5b806323b872dd1161011557806323b872dd146101cb5780632d838119146101de578063313ce567146101f1578063395093511461020657806340f8007a146102195780634549b0391461022257600080fd5b8063053ab1821461015257806306fdde0314610167578063095ea7b31461018557806313114a9d146101a857806318160ddd146101ba575b600080fd5b6101656101603660046118cf565b61034a565b005b61016f610439565b60405161017c9190611912565b60405180910390f35b6101986101933660046118a3565b6104cb565b604051901515815260200161017c565b6007545b60405190815260200161017c565b6a52b7d2dcc80cd2e40000006101ac565b6101986101d9366004611862565b6104e2565b6101ac6101ec3660046118cf565b61054b565b600b5460405160ff909116815260200161017c565b6101986102143660046118a3565b6105cf565b6101ac600c5481565b6101ac6102303660046118e8565b610605565b6101ac61024336600461180c565b61069b565b6101656106fa565b6000546040516001600160a01b03909116815260200161017c565b61016f61076e565b6101986102813660046118a3565b61077d565b6101986102943660046118a3565b6107cc565b6101656102a736600461180c565b6107d9565b6101986102ba36600461180c565b6001600160a01b031660009081526004602052604090205460ff1690565b6101ac6102e6366004611829565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61016561031f36600461180c565b610825565b61016561033236600461180c565b610978565b61016561034536600461180c565b610a62565b3360008181526004602052604090205460ff16156103c45760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084015b60405180910390fd5b60006103cf83610c19565b505050506001600160a01b0384166000908152600160205260409020549192506103fb91905082610c70565b6001600160a01b0383166000908152600160205260409020556006546104219082610c70565b6006556007546104319084610cb2565b600755505050565b60606009805461044890611a0c565b80601f016020809104026020016040519081016040528092919081815260200182805461047490611a0c565b80156104c15780601f10610496576101008083540402835291602001916104c1565b820191906000526020600020905b8154815290600101906020018083116104a457829003601f168201915b5050505050905090565b60006104d8338484610d11565b5060015b92915050565b60006104ef848484610e35565b610541843361053c85604051806060016040528060288152602001611abd602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906110b1565b610d11565b5060019392505050565b60006006548211156105b25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016103bb565b60006105bc6110eb565b90506105c8838261110e565b9392505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916104d891859061053c9086610cb2565b60006a52b7d2dcc80cd2e40000008311156106625760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016103bb565b8161068157600061067284610c19565b509395506104dc945050505050565b600061068c84610c19565b509295506104dc945050505050565b6001600160a01b03811660009081526004602052604081205460ff16156106d857506001600160a01b031660009081526002602052604090205490565b6001600160a01b0382166000908152600160205260409020546104dc9061054b565b6000546001600160a01b031633146107245760405162461bcd60e51b81526004016103bb90611967565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060600a805461044890611a0c565b60006104d8338461053c85604051806060016040528060258152602001611ae5602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906110b1565b60006104d8338484610e35565b6000546001600160a01b031633146108035760405162461bcd60e51b81526004016103bb90611967565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461084f5760405162461bcd60e51b81526004016103bb90611967565b6001600160a01b03811660009081526004602052604090205460ff16156108b85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016103bb565b6001600160a01b03811660009081526001602052604090205415610912576001600160a01b0381166000908152600160205260409020546108f89061054b565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b6000546001600160a01b031633146109a25760405162461bcd60e51b81526004016103bb90611967565b6001600160a01b038116610a075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bb565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610a8c5760405162461bcd60e51b81526004016103bb90611967565b6001600160a01b03811660009081526004602052604090205460ff16610af45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016103bb565b60005b600554811015610c1557816001600160a01b031660058281548110610b1e57610b1e611a8e565b6000918252602090912001546001600160a01b03161415610c035760058054610b49906001906119f5565b81548110610b5957610b59611a8e565b600091825260209091200154600580546001600160a01b039092169183908110610b8557610b85611a8e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600490925220805460ff191690556005805480610bdd57610bdd611a78565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c0d81611a47565b915050610af7565b5050565b6000806000806000806000806000610c308a611150565b9250925092506000610c406110eb565b90506000806000610c538e87878761119e565b919e509c509a509598509396509194505050505091939550919395565b60006105c883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110b1565b600080610cbf838561199c565b9050838110156105c85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103bb565b6001600160a01b038316610d735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103bb565b6001600160a01b038216610dd45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103bb565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e995760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103bb565b6001600160a01b038216610efb5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103bb565b60008111610f5d5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016103bb565b6001600160a01b03831660009081526004602052604090205460ff168015610f9e57506001600160a01b03821660009081526004602052604090205460ff16155b15610fb357610fae8383836111ee565b505050565b6001600160a01b03831660009081526004602052604090205460ff16158015610ff457506001600160a01b03821660009081526004602052604090205460ff165b1561100457610fae838383611315565b6001600160a01b03831660009081526004602052604090205460ff1615801561104657506001600160a01b03821660009081526004602052604090205460ff16155b1561105657610fae8383836113be565b6001600160a01b03831660009081526004602052604090205460ff16801561109657506001600160a01b03821660009081526004602052604090205460ff165b156110a657610fae838383611402565b610fae8383836113be565b600081848411156110d55760405162461bcd60e51b81526004016103bb9190611912565b5060006110e284866119f5565b95945050505050565b60008060006110f8611475565b9092509050611107828261110e565b9250505090565b60006105c883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611619565b600080808061116b6064611165876008611647565b9061110e565b90506000611178866116c6565b905060006111908261118a8986610c70565b90610c70565b979296509094509092505050565b60008080806111ad8886611647565b905060006111bb8887611647565b905060006111c98888611647565b905060006111db8261118a8686610c70565b939b939a50919850919650505050505050565b60008060008060008061120087610c19565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506112329088610c70565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546112619087610c70565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546112909086610cb2565b6001600160a01b0389166000908152600160205260409020556112b3818a6116e2565b6112bd84836117e8565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161130291815260200190565b60405180910390a3505050505050505050565b60008060008060008061132787610c19565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506113599087610c70565b6001600160a01b03808b16600090815260016020908152604080832094909455918b1681526002909152205461138f9084610cb2565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546112909086610cb2565b6000806000806000806113d087610c19565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506112619087610c70565b60008060008060008061141487610c19565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506114469088610c70565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546113599087610c70565b60065460009081906a52b7d2dcc80cd2e4000000825b6005548110156115d8578260016000600584815481106114ad576114ad611a8e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061151857508160026000600584815481106114f1576114f1611a8e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611536575050600654936a52b7d2dcc80cd2e40000009350915050565b61157c600160006005848154811061155057611550611a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610c70565b92506115c4600260006005848154811061159857611598611a8e565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610c70565b9150806115d081611a47565b91505061148b565b506006546115f1906a52b7d2dcc80cd2e400000061110e565b821015611610575050600654926a52b7d2dcc80cd2e400000092509050565b90939092509050565b6000818361163a5760405162461bcd60e51b81526004016103bb9190611912565b5060006110e284866119b4565b600082611656575060006104dc565b600061166283856119d6565b90508261166f85836119b4565b146105c85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016103bb565b60006104dc6064611165600c548561164790919063ffffffff16565b60006116ec6110eb565b905060006116fa8483611647565b6008546001600160a01b03166000908152600160205260409020549091506117229082610cb2565b600880546001600160a01b03908116600090815260016020908152604080832095909555925490911681526004909152205460ff161561179d576008546001600160a01b03166000908152600260205260409020546117819085610cb2565b6008546001600160a01b03166000908152600260205260409020555b6008546040518581526001600160a01b03918216918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b6006546117f59083610c70565b6006556007546118059082610cb2565b6007555050565b60006020828403121561181e57600080fd5b81356105c881611aa4565b6000806040838503121561183c57600080fd5b823561184781611aa4565b9150602083013561185781611aa4565b809150509250929050565b60008060006060848603121561187757600080fd5b833561188281611aa4565b9250602084013561189281611aa4565b929592945050506040919091013590565b600080604083850312156118b657600080fd5b82356118c181611aa4565b946020939093013593505050565b6000602082840312156118e157600080fd5b5035919050565b600080604083850312156118fb57600080fd5b823591506020830135801515811461185757600080fd5b600060208083528351808285015260005b8181101561193f57858101830151858201604001528201611923565b81811115611951576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156119af576119af611a62565b500190565b6000826119d157634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156119f0576119f0611a62565b500290565b600082821015611a0757611a07611a62565b500390565b600181811c90821680611a2057607f821691505b60208210811415611a4157634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611a5b57611a5b611a62565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611ab957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122092941552ce9463efe7e357c3af739862e3533753611d2954edb9d54306e51de064736f6c63430008070033

Deployed Bytecode Sourcemap

17391:11661:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20606:377;;;;;;:::i;:::-;;:::i;:::-;;18488:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19400:161;;;;;;:::i;:::-;;:::i;:::-;;;2604:14:1;;2597:22;2579:41;;2567:2;2552:18;19400:161:0;2439:187:1;20511:87:0;20580:10;;20511:87;;;8473:25:1;;;8461:2;8446:18;20511:87:0;8327:177:1;18765:95:0;17867:20;18765:95;;19569:313;;;;;;:::i;:::-;;:::i;21435:253::-;;;;;;:::i;:::-;;:::i;18674:83::-;18740:9;;18674:83;;18740:9;;;;8651:36:1;;8639:2;8624:18;18674:83:0;8509:184:1;19890:218:0;;;;;;:::i;:::-;;:::i;18162:30::-;;;;;;20991:436;;;;;;:::i;:::-;;:::i;18868:198::-;;;;;;:::i;:::-;;:::i;16835:148::-;;;:::i;16193:79::-;16231:7;16258:6;16193:79;;-1:-1:-1;;;;;16258:6:0;;;2377:51:1;;2365:2;2350:18;16193:79:0;2231:203:1;18579:87:0;;;:::i;20116:269::-;;;;;;:::i;:::-;;:::i;19074:167::-;;;;;;:::i;:::-;;:::i;28885:164::-;;;;;;:::i;:::-;;:::i;20393:110::-;;;;;;:::i;:::-;-1:-1:-1;;;;;20475:20:0;20451:4;20475:20;;;:11;:20;;;;;;;;;20393:110;19249:143;;;;;;:::i;:::-;-1:-1:-1;;;;;19357:18:0;;;19330:7;19357:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19249:143;21696:332;;;;;;:::i;:::-;;:::i;17138:244::-;;;;;;:::i;:::-;;:::i;22036:478::-;;;;;;:::i;:::-;;:::i;20606:377::-;756:10;20658:14;20707:19;;;:11;:19;;;;;;;;20706:20;20698:77;;;;-1:-1:-1;;;20698:77:0;;8116:2:1;20698:77:0;;;8098:21:1;8155:2;8135:18;;;8128:30;8194:34;8174:18;;;8167:62;-1:-1:-1;;;8245:18:1;;;8238:42;8297:19;;20698:77:0;;;;;;;;;20787:15;20811:19;20822:7;20811:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20859:15:0;;;;;;:7;:15;;;;;;20786:44;;-1:-1:-1;20859:28:0;;:15;-1:-1:-1;20786:44:0;20859:19;:28::i;:::-;-1:-1:-1;;;;;20841:15:0;;;;;;:7;:15;;;;;:46;20908:7;;:20;;20920:7;20908:11;:20::i;:::-;20898:7;:30;20952:10;;:23;;20967:7;20952:14;:23::i;:::-;20939:10;:36;-1:-1:-1;;;20606:377:0:o;18488:83::-;18525:13;18558:5;18551:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18488:83;:::o;19400:161::-;19475:4;19492:39;756:10;19515:7;19524:6;19492:8;:39::i;:::-;-1:-1:-1;19549:4:0;19400:161;;;;;:::o;19569:313::-;19667:4;19684:36;19694:6;19702:9;19713:6;19684:9;:36::i;:::-;19731:121;19740:6;756:10;19762:89;19800:6;19762:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19762:19:0;;;;;;:11;:19;;;;;;;;756:10;19762:33;;;;;;;;;;:37;:89::i;:::-;19731:8;:121::i;:::-;-1:-1:-1;19870:4:0;19569:313;;;;;:::o;21435:253::-;21501:7;21540;;21529;:18;;21521:73;;;;-1:-1:-1;;;21521:73:0;;3839:2:1;21521:73:0;;;3821:21:1;3878:2;3858:18;;;3851:30;3917:34;3897:18;;;3890:62;-1:-1:-1;;;3968:18:1;;;3961:40;4018:19;;21521:73:0;3637:406:1;21521:73:0;21605:19;21628:10;:8;:10::i;:::-;21605:33;-1:-1:-1;21656:24:0;:7;21605:33;21656:11;:24::i;:::-;21649:31;21435:253;-1:-1:-1;;;21435:253:0:o;19890:218::-;756:10;19978:4;20027:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20027:34:0;;;;;;;;;;19978:4;;19995:83;;20018:7;;20027:50;;20066:10;20027:38;:50::i;20991:436::-;21081:7;17867:20;21109:7;:18;;21101:62;;;;-1:-1:-1;;;21101:62:0;;5772:2:1;21101:62:0;;;5754:21:1;5811:2;5791:18;;;5784:30;5850:33;5830:18;;;5823:61;5901:18;;21101:62:0;5570:355:1;21101:62:0;21179:17;21174:246;;21214:15;21238:19;21249:7;21238:10;:19::i;:::-;-1:-1:-1;21213:44:0;;-1:-1:-1;21272:14:0;;-1:-1:-1;;;;;21272:14:0;21174:246;21321:23;21352:19;21363:7;21352:10;:19::i;:::-;-1:-1:-1;21319:52:0;;-1:-1:-1;21386:22:0;;-1:-1:-1;;;;;21386:22:0;18868:198;-1:-1:-1;;;;;18958:20:0;;18934:7;18958:20;;;:11;:20;;;;;;;;18954:49;;;-1:-1:-1;;;;;;18987:16:0;;;;;:7;:16;;;;;;;18868:198::o;18954:49::-;-1:-1:-1;;;;;19041:16:0;;;;;;:7;:16;;;;;;19021:37;;:19;:37::i;16835:148::-;16405:6;;-1:-1:-1;;;;;16405:6:0;756:10;16405:22;16397:67;;;;-1:-1:-1;;;16397:67:0;;;;;;;:::i;:::-;16942:1:::1;16926:6:::0;;16905:40:::1;::::0;-1:-1:-1;;;;;16926:6:0;;::::1;::::0;16905:40:::1;::::0;16942:1;;16905:40:::1;16973:1;16956:19:::0;;-1:-1:-1;;;;;;16956:19:0::1;::::0;;16835:148::o;18579:87::-;18618:13;18651:7;18644:14;;;;;:::i;20116:269::-;20209:4;20226:129;756:10;20249:7;20258:96;20297:15;20258:96;;;;;;;;;;;;;;;;;756:10;20258:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20258:34:0;;;;;;;;;;;;:38;:96::i;19074:167::-;19152:4;19169:42;756:10;19193:9;19204:6;19169:9;:42::i;28885:164::-;16405:6;;-1:-1:-1;;;;;16405:6:0;756:10;16405:22;16397:67;;;;-1:-1:-1;;;16397:67:0;;;;;;;:::i;:::-;28993:21:::1;:44:::0;;-1:-1:-1;;;;;;28993:44:0::1;-1:-1:-1::0;;;;;28993:44:0;;;::::1;::::0;;;::::1;::::0;;28885:164::o;21696:332::-;16405:6;;-1:-1:-1;;;;;16405:6:0;756:10;16405:22;16397:67;;;;-1:-1:-1;;;16397:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21778:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21777:21;21769:61;;;::::0;-1:-1:-1;;;21769:61:0;;5416:2:1;21769:61:0::1;::::0;::::1;5398:21:1::0;5455:2;5435:18;;;5428:30;5494:29;5474:18;;;5467:57;5541:18;;21769:61:0::1;5214:351:1::0;21769:61:0::1;-1:-1:-1::0;;;;;21844:16:0;::::1;21863:1;21844:16:::0;;;:7:::1;:16;::::0;;;;;:20;21841:108:::1;;-1:-1:-1::0;;;;;21920:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21900:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21881:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21841:108:::1;-1:-1:-1::0;;;;;21959:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21959:27:0::1;21982:4;21959:27:::0;;::::1;::::0;;;21997:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21997:23:0::1;::::0;;::::1;::::0;;21696:332::o;17138:244::-;16405:6;;-1:-1:-1;;;;;16405:6:0;756:10;16405:22;16397:67;;;;-1:-1:-1;;;16397:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17227:22:0;::::1;17219:73;;;::::0;-1:-1:-1;;;17219:73:0;;4250:2:1;17219:73:0::1;::::0;::::1;4232:21:1::0;4289:2;4269:18;;;4262:30;4328:34;4308:18;;;4301:62;-1:-1:-1;;;4379:18:1;;;4372:36;4425:19;;17219:73:0::1;4048:402:1::0;17219:73:0::1;17329:6;::::0;;17308:38:::1;::::0;-1:-1:-1;;;;;17308:38:0;;::::1;::::0;17329:6;::::1;::::0;17308:38:::1;::::0;::::1;17357:6;:17:::0;;-1:-1:-1;;;;;;17357:17:0::1;-1:-1:-1::0;;;;;17357:17:0;;;::::1;::::0;;;::::1;::::0;;17138:244::o;22036:478::-;16405:6;;-1:-1:-1;;;;;16405:6:0;756:10;16405:22;16397:67;;;;-1:-1:-1;;;16397:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22117:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22109:60;;;::::0;-1:-1:-1;;;22109:60:0;;5416:2:1;22109:60:0::1;::::0;::::1;5398:21:1::0;5455:2;5435:18;;;5428:30;5494:29;5474:18;;;5467:57;5541:18;;22109:60:0::1;5214:351:1::0;22109:60:0::1;22185:9;22180:327;22204:9;:16:::0;22200:20;::::1;22180:327;;;22262:7;-1:-1:-1::0;;;;;22246:23:0::1;:9;22256:1;22246:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22246:12:0::1;:23;22242:254;;;22305:9;22315:16:::0;;:20:::1;::::0;22334:1:::1;::::0;22315:20:::1;:::i;:::-;22305:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22290:9:::1;:12:::0;;-1:-1:-1;;;;;22305:31:0;;::::1;::::0;22300:1;;22290:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22290:46:0::1;-1:-1:-1::0;;;;;22290:46:0;;::::1;;::::0;;22355:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22394:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22394:28:0::1;::::0;;22441:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22441:15:0;;;;;-1:-1:-1;;;;;;22441:15:0::1;::::0;;;;;22180:327:::1;22036:478:::0;:::o;22242:254::-:1;22222:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22180:327;;;;22036:478:::0;:::o;26290:458::-;26349:7;26358;26367;26376;26385;26394;26415:23;26440:12;26454:16;26474:20;26486:7;26474:11;:20::i;:::-;26414:80;;;;;;26505:19;26528:10;:8;:10::i;:::-;26505:33;;26550:15;26567:23;26592:12;26608:49;26620:7;26629:4;26635:8;26645:11;26608;:49::i;:::-;26549:108;;-1:-1:-1;26549:108:0;-1:-1:-1;26549:108:0;-1:-1:-1;26708:15:0;;-1:-1:-1;26725:4:0;;-1:-1:-1;26731:8:0;;-1:-1:-1;;;;;26290:458:0;;;;;;;:::o;5039:136::-;5097:7;5124:43;5128:1;5131;5124:43;;;;;;;;;;;;;;;;;:3;:43::i;4575:181::-;4633:7;;4665:5;4669:1;4665;:5;:::i;:::-;4653:17;;4694:1;4689;:6;;4681:46;;;;-1:-1:-1;;;4681:46:0;;5060:2:1;4681:46:0;;;5042:21:1;5099:2;5079:18;;;5072:30;5138:29;5118:18;;;5111:57;5185:18;;4681:46:0;4858:351:1;22522:337:0;-1:-1:-1;;;;;22615:19:0;;22607:68;;;;-1:-1:-1;;;22607:68:0;;7711:2:1;22607:68:0;;;7693:21:1;7750:2;7730:18;;;7723:30;7789:34;7769:18;;;7762:62;-1:-1:-1;;;7840:18:1;;;7833:34;7884:19;;22607:68:0;7509:400:1;22607:68:0;-1:-1:-1;;;;;22694:21:0;;22686:68;;;;-1:-1:-1;;;22686:68:0;;4657:2:1;22686:68:0;;;4639:21:1;4696:2;4676:18;;;4669:30;4735:34;4715:18;;;4708:62;-1:-1:-1;;;4786:18:1;;;4779:32;4828:19;;22686:68:0;4455:398:1;22686:68:0;-1:-1:-1;;;;;22767:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22819:32;;8473:25:1;;;22819:32:0;;8446:18:1;22819:32:0;;;;;;;22522:337;;;:::o;22867:931::-;-1:-1:-1;;;;;22964:20:0;;22956:70;;;;-1:-1:-1;;;22956:70:0;;7305:2:1;22956:70:0;;;7287:21:1;7344:2;7324:18;;;7317:30;7383:34;7363:18;;;7356:62;-1:-1:-1;;;7434:18:1;;;7427:35;7479:19;;22956:70:0;7103:401:1;22956:70:0;-1:-1:-1;;;;;23045:23:0;;23037:71;;;;-1:-1:-1;;;23037:71:0;;3435:2:1;23037:71:0;;;3417:21:1;3474:2;3454:18;;;3447:30;3513:34;3493:18;;;3486:62;-1:-1:-1;;;3564:18:1;;;3557:33;3607:19;;23037:71:0;3233:399:1;23037:71:0;23136:1;23127:6;:10;23119:64;;;;-1:-1:-1;;;23119:64:0;;6895:2:1;23119:64:0;;;6877:21:1;6934:2;6914:18;;;6907:30;6973:34;6953:18;;;6946:62;-1:-1:-1;;;7024:18:1;;;7017:39;7073:19;;23119:64:0;6693:405:1;23119:64:0;-1:-1:-1;;;;;23198:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;23222:22:0;;;;;;:11;:22;;;;;;;;23221:23;23198:46;23194:597;;;23261:48;23283:6;23291:9;23302:6;23261:21;:48::i;:::-;22867:931;;;:::o;23194:597::-;-1:-1:-1;;;;;23332:19:0;;;;;;:11;:19;;;;;;;;23331:20;:46;;;;-1:-1:-1;;;;;;23355:22:0;;;;;;:11;:22;;;;;;;;23331:46;23327:464;;;23394:46;23414:6;23422:9;23433:6;23394:19;:46::i;23327:464::-;-1:-1:-1;;;;;23463:19:0;;;;;;:11;:19;;;;;;;;23462:20;:47;;;;-1:-1:-1;;;;;;23487:22:0;;;;;;:11;:22;;;;;;;;23486:23;23462:47;23458:333;;;23526:44;23544:6;23552:9;23563:6;23526:17;:44::i;23458:333::-;-1:-1:-1;;;;;23592:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;23615:22:0;;;;;;:11;:22;;;;;;;;23592:45;23588:203;;;23654:48;23676:6;23684:9;23695:6;23654:21;:48::i;23588:203::-;23735:44;23753:6;23761:9;23772:6;23735:17;:44::i;5478:192::-;5564:7;5600:12;5592:6;;;;5584:29;;;;-1:-1:-1;;;5584:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5624:9:0;5636:5;5640:1;5636;:5;:::i;:::-;5624:17;5478:192;-1:-1:-1;;;;;5478:192:0:o;27515:163::-;27556:7;27577:15;27594;27613:19;:17;:19::i;:::-;27576:56;;-1:-1:-1;27576:56:0;-1:-1:-1;27650:20:0;27576:56;;27650:11;:20::i;:::-;27643:27;;;;27515:163;:::o;6876:132::-;6934:7;6961:39;6965:1;6968;6961:39;;;;;;;;;;;;;;;;;:3;:39::i;26756:322::-;26816:7;;;;26868:25;26889:3;26869:14;:7;26881:1;26869:11;:14::i;:::-;26868:20;;:25::i;:::-;26853:40;;26904:16;26923:28;26943:7;26923:19;:28::i;:::-;26904:47;-1:-1:-1;26962:23:0;26988:31;26904:47;26988:17;:7;27000:4;26988:11;:17::i;:::-;:21;;:31::i;:::-;26962:57;27055:4;;-1:-1:-1;27061:8:0;;-1:-1:-1;26756:322:0;;-1:-1:-1;;;26756:322:0:o;27086:421::-;27199:7;;;;27255:24;:7;27267:11;27255;:24::i;:::-;27237:42;-1:-1:-1;27290:12:0;27305:21;:4;27314:11;27305:8;:21::i;:::-;27290:36;-1:-1:-1;27337:16:0;27356:25;:8;27369:11;27356:12;:25::i;:::-;27337:44;-1:-1:-1;27392:23:0;27418:31;27337:44;27418:17;:7;27430:4;27418:11;:17::i;:31::-;27468:7;;;;-1:-1:-1;27494:4:0;;-1:-1:-1;27086:421:0;;-1:-1:-1;;;;;;;27086:421:0:o;24915:565::-;25018:15;25035:23;25060:12;25074:23;25099:12;25113:16;25133:19;25144:7;25133:10;:19::i;:::-;-1:-1:-1;;;;;25181:15:0;;;;;;:7;:15;;;;;;25017:135;;-1:-1:-1;25017:135:0;;-1:-1:-1;25017:135:0;;-1:-1:-1;25017:135:0;-1:-1:-1;25017:135:0;-1:-1:-1;25017:135:0;-1:-1:-1;25181:28:0;;25201:7;25181:19;:28::i;:::-;-1:-1:-1;;;;;25163:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25238:7;:15;;;;:28;;25258:7;25238:19;:28::i;:::-;-1:-1:-1;;;;;25220:15:0;;;;;;;:7;:15;;;;;;:46;;;;25298:18;;;;;;;:39;;25321:15;25298:22;:39::i;:::-;-1:-1:-1;;;;;25277:18:0;;;;;;:7;:18;;;;;:60;25348:30;25361:8;25371:6;25348:12;:30::i;:::-;25389:23;25401:4;25407;25389:11;:23::i;:::-;25445:9;-1:-1:-1;;;;;25428:44:0;25437:6;-1:-1:-1;;;;;25428:44:0;;25456:15;25428:44;;;;8473:25:1;;8461:2;8446:18;;8327:177;25428:44:0;;;;;;;;25006:474;;;;;;24915:565;;;:::o;24320:587::-;24421:15;24438:23;24463:12;24477:23;24502:12;24516:16;24536:19;24547:7;24536:10;:19::i;:::-;-1:-1:-1;;;;;24584:15:0;;;;;;:7;:15;;;;;;24420:135;;-1:-1:-1;24420:135:0;;-1:-1:-1;24420:135:0;;-1:-1:-1;24420:135:0;-1:-1:-1;24420:135:0;-1:-1:-1;24420:135:0;-1:-1:-1;24584:28:0;;24420:135;24584:19;:28::i;:::-;-1:-1:-1;;;;;24566:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;24644:18;;;;;:7;:18;;;;;:39;;24667:15;24644:22;:39::i;:::-;-1:-1:-1;;;;;24623:18:0;;;;;;:7;:18;;;;;;;;:60;;;;24715:7;:18;;;;:39;;24738:15;24715:22;:39::i;23806:506::-;23905:15;23922:23;23947:12;23961:23;23986:12;24000:16;24020:19;24031:7;24020:10;:19::i;:::-;-1:-1:-1;;;;;24068:15:0;;;;;;:7;:15;;;;;;23904:135;;-1:-1:-1;23904:135:0;;-1:-1:-1;23904:135:0;;-1:-1:-1;23904:135:0;-1:-1:-1;23904:135:0;-1:-1:-1;23904:135:0;-1:-1:-1;24068:28:0;;23904:135;24068:19;:28::i;25488:639::-;25591:15;25608:23;25633:12;25647:23;25672:12;25686:16;25706:19;25717:7;25706:10;:19::i;:::-;-1:-1:-1;;;;;25754:15:0;;;;;;:7;:15;;;;;;25590:135;;-1:-1:-1;25590:135:0;;-1:-1:-1;25590:135:0;;-1:-1:-1;25590:135:0;-1:-1:-1;25590:135:0;-1:-1:-1;25590:135:0;-1:-1:-1;25754:28:0;;25774:7;25754:19;:28::i;:::-;-1:-1:-1;;;;;25736:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25811:7;:15;;;;:28;;25831:7;25811:19;:28::i;27686:561::-;27783:7;;27736;;;;17867:20;27736:7;27843:289;27867:9;:16;27863:20;;27843:289;;;27933:7;27909;:21;27917:9;27927:1;27917:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27917:12:0;27909:21;;;;;;;;;;;;;:31;;:66;;;27968:7;27944;:21;27952:9;27962:1;27952:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27952:12:0;27944:21;;;;;;;;;;;;;:31;27909:66;27905:97;;;-1:-1:-1;;27985:7:0;;;17867:20;;-1:-1:-1;27686:561:0;-1:-1:-1;;27686:561:0:o;27905:97::-;28027:34;28039:7;:21;28047:9;28057:1;28047:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28047:12:0;28039:21;;;;;;;;;;;;;28027:7;;:11;:34::i;:::-;28017:44;;28086:34;28098:7;:21;28106:9;28116:1;28106:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28106:12:0;28098:21;;;;;;;;;;;;;28086:7;;:11;:34::i;:::-;28076:44;-1:-1:-1;27885:3:0;;;;:::i;:::-;;;;27843:289;;;-1:-1:-1;28156:7:0;;:20;;17867;28156:11;:20::i;:::-;28146:7;:30;28142:61;;;-1:-1:-1;;28186:7:0;;;17867:20;;-1:-1:-1;27686:561:0;-1:-1:-1;27686:561:0:o;28142:61::-;28222:7;;28231;;-1:-1:-1;27686:561:0;-1:-1:-1;27686:561:0:o;7504:278::-;7590:7;7625:12;7618:5;7610:28;;;;-1:-1:-1;;;7610:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7649:9:0;7661:5;7665:1;7661;:5;:::i;5929:471::-;5987:7;6232:6;6228:47;;-1:-1:-1;6262:1:0;6255:8;;6228:47;6287:9;6299:5;6303:1;6299;:5;:::i;:::-;6287:17;-1:-1:-1;6332:1:0;6323:5;6327:1;6287:17;6323:5;:::i;:::-;:10;6315:56;;;;-1:-1:-1;;;6315:56:0;;6132:2:1;6315:56:0;;;6114:21:1;6171:2;6151:18;;;6144:30;6210:34;6190:18;;;6183:62;-1:-1:-1;;;6261:18:1;;;6254:31;6302:19;;6315:56:0;5930:397:1;28736:136:0;28804:7;28831:33;28860:3;28831:24;28843:11;;28831:7;:11;;:24;;;;:::i;28259:464::-;28334:19;28357:10;:8;:10::i;:::-;28334:33;-1:-1:-1;28378:16:0;28397:25;:8;28334:33;28397:12;:25::i;:::-;28474:21;;-1:-1:-1;;;;;28474:21:0;28466:30;;;;:7;:30;;;;;;28378:44;;-1:-1:-1;28466:44:0;;28378;28466:34;:44::i;:::-;28441:21;;;-1:-1:-1;;;;;28441:21:0;;;28433:30;;;;:7;:30;;;;;;;;:77;;;;28536:21;;;;;28524:34;;:11;:34;;;;;;;28521:129;;;28614:21;;-1:-1:-1;;;;;28614:21:0;28606:30;;;;:7;:30;;;;;;:44;;28641:8;28606:34;:44::i;:::-;28581:21;;-1:-1:-1;;;;;28581:21:0;28573:30;;;;:7;:30;;;;;:77;28521:129;28683:21;;28666:49;;8473:25:1;;;-1:-1:-1;;;;;28683:21:0;;;;28666:49;;;;;8461:2:1;8446:18;28666:49:0;;;;;;;28323:400;;28259:464;;:::o;26135:147::-;26213:7;;:17;;26225:4;26213:11;:17::i;:::-;26203:7;:27;26254:10;;:20;;26269:4;26254:14;:20::i;:::-;26241:10;:33;-1:-1:-1;;26135:147:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;526:388::-;594:6;602;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;710:9;697:23;729:31;754:5;729:31;:::i;:::-;779:5;-1:-1:-1;836:2:1;821:18;;808:32;849:33;808:32;849:33;:::i;:::-;901:7;891:17;;;526:388;;;;;:::o;919:456::-;996:6;1004;1012;1065:2;1053:9;1044:7;1040:23;1036:32;1033:52;;;1081:1;1078;1071:12;1033:52;1120:9;1107:23;1139:31;1164:5;1139:31;:::i;:::-;1189:5;-1:-1:-1;1246:2:1;1231:18;;1218:32;1259:33;1218:32;1259:33;:::i;:::-;919:456;;1311:7;;-1:-1:-1;;;1365:2:1;1350:18;;;;1337:32;;919:456::o;1380:315::-;1448:6;1456;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;1564:9;1551:23;1583:31;1608:5;1583:31;:::i;:::-;1633:5;1685:2;1670:18;;;;1657:32;;-1:-1:-1;;;1380:315:1:o;1700:180::-;1759:6;1812:2;1800:9;1791:7;1787:23;1783:32;1780:52;;;1828:1;1825;1818:12;1780:52;-1:-1:-1;1851:23:1;;1700:180;-1:-1:-1;1700:180:1:o;1885:341::-;1950:6;1958;2011:2;1999:9;1990:7;1986:23;1982:32;1979:52;;;2027:1;2024;2017:12;1979:52;2063:9;2050:23;2040:33;;2123:2;2112:9;2108:18;2095:32;2170:5;2163:13;2156:21;2149:5;2146:32;2136:60;;2192:1;2189;2182:12;2631:597;2743:4;2772:2;2801;2790:9;2783:21;2833:6;2827:13;2876:6;2871:2;2860:9;2856:18;2849:34;2901:1;2911:140;2925:6;2922:1;2919:13;2911:140;;;3020:14;;;3016:23;;3010:30;2986:17;;;3005:2;2982:26;2975:66;2940:10;;2911:140;;;3069:6;3066:1;3063:13;3060:91;;;3139:1;3134:2;3125:6;3114:9;3110:22;3106:31;3099:42;3060:91;-1:-1:-1;3212:2:1;3191:15;-1:-1:-1;;3187:29:1;3172:45;;;;3219:2;3168:54;;2631:597;-1:-1:-1;;;2631:597:1:o;6332:356::-;6534:2;6516:21;;;6553:18;;;6546:30;6612:34;6607:2;6592:18;;6585:62;6679:2;6664:18;;6332:356::o;8698:128::-;8738:3;8769:1;8765:6;8762:1;8759:13;8756:39;;;8775:18;;:::i;:::-;-1:-1:-1;8811:9:1;;8698:128::o;8831:217::-;8871:1;8897;8887:132;;8941:10;8936:3;8932:20;8929:1;8922:31;8976:4;8973:1;8966:15;9004:4;9001:1;8994:15;8887:132;-1:-1:-1;9033:9:1;;8831:217::o;9053:168::-;9093:7;9159:1;9155;9151:6;9147:14;9144:1;9141:21;9136:1;9129:9;9122:17;9118:45;9115:71;;;9166:18;;:::i;:::-;-1:-1:-1;9206:9:1;;9053:168::o;9226:125::-;9266:4;9294:1;9291;9288:8;9285:34;;;9299:18;;:::i;:::-;-1:-1:-1;9336:9:1;;9226:125::o;9356:380::-;9435:1;9431:12;;;;9478;;;9499:61;;9553:4;9545:6;9541:17;9531:27;;9499:61;9606:2;9598:6;9595:14;9575:18;9572:38;9569:161;;;9652:10;9647:3;9643:20;9640:1;9633:31;9687:4;9684:1;9677:15;9715:4;9712:1;9705:15;9569:161;;9356:380;;;:::o;9741:135::-;9780:3;-1:-1:-1;;9801:17:1;;9798:43;;;9821:18;;:::i;:::-;-1:-1:-1;9868:1:1;9857:13;;9741:135::o;9881:127::-;9942:10;9937:3;9933:20;9930:1;9923:31;9973:4;9970:1;9963:15;9997:4;9994:1;9987:15;10013:127;10074:10;10069:3;10065:20;10062:1;10055:31;10105:4;10102:1;10095:15;10129:4;10126:1;10119:15;10145:127;10206:10;10201:3;10197:20;10194:1;10187:31;10237:4;10234:1;10227:15;10261:4;10258:1;10251:15;10277:131;-1:-1:-1;;;;;10352:31:1;;10342:42;;10332:70;;10398:1;10395;10388:12;10332:70;10277:131;:::o

Swarm Source

ipfs://92941552ce9463efe7e357c3af739862e3533753611d2954edb9d54306e51de0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.