ETH Price: $3,382.93 (+0.23%)

Token

Ethereum Heart (ETHH)
 

Overview

Max Total Supply

10,000,000,000 ETHH

Holders

72 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Stake.com
Balance
3,280.740425936847101221 ETHH

Value
$0.00
0x974CaA59e49682CdA0AD2bbe82983419A2ECC400
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

An Ethereum ERC-20 token that enables it's holders to gain farming rewards; developijng a decentralised platform for token holders.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
REFLECT

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 6: ETHH.sol
/**
 * SPDX-License-Identifier: MIT
 */ 
pragma solidity ^0.8.0;

import "Context.sol";
import "IERC20.sol";
import "SafeMath.sol";
import "Address.sol";
import "Ownable.sol";

contract REFLECT 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 = 10_000_000_000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'Ethereum Heart';
    string private _symbol = 'ETHH';
    uint8 private _decimals = 18;

    bool private takeFee = true;
    
    uint256 private _charityFee = 1;
    address private charityWallet = 0xA3eEB98140e9Ba8960e55e722ad2275bd135f80B;
    

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
        
    }
    
    function changeCharity(address newCharity) public onlyOwner() {
        charityWallet = newCharity;
    }
    
    function viewCharity() public view returns (address) {
        return charityWallet;
    }
    
    function viewCharityFee() public view returns (uint256) {
        return _charityFee;
    }


    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 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, "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");

        uint256 charityAmt = amount.mul(_charityFee).div(100);

        amount = amount.sub(charityAmt);

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

        // Temporarily remove re-distribution fee for charity transfer
        takeFee = false;

        _transferStandard(sender, charityWallet, charityAmt);

        takeFee = true;
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _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) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _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) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _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) = _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);        
        _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 tTransferAmount, uint256 tFee) = _getTValues(tAmount);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256) {
        if (takeFee) {
            uint256 tFee = tAmount.div(100);
            uint256 tTransferAmount = tAmount.sub(tFee);
            return (tTransferAmount, tFee);
        } else {
            return (tAmount, 0);
        }
        
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        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);
    }
}

File 1 of 6: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @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) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 6: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 6: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 5 of 6: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "Context.sol";

/**
 * @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.
 */
abstract 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() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 6: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

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

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newCharity","type":"address"}],"name":"changeCharity","outputs":[],"stateMutability":"nonpayable","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewCharity","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526b204fce5e3e2502611000000060001962000020919062000490565b6000196200002f919062000415565b6006556040518060400160405280600e81526020017f457468657265756d204865617274000000000000000000000000000000000000815250600890805190602001906200007f92919062000337565b506040518060400160405280600481526020017f455448480000000000000000000000000000000000000000000000000000000081525060099080519060200190620000cd92919062000337565b506012600a60006101000a81548160ff021916908360ff1602179055506001600a60016101000a81548160ff0219169083151502179055506001600b5573a3eeb98140e9ba8960e55e722ad2275bd135f80b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200016c57600080fd5b506200018d620001816200026b60201b60201c565b6200027360201b60201c565b60065460016000620001a46200026b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001f26200026b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b204fce5e3e250261100000006040516200025d9190620003f8565b60405180910390a362000555565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000345906200045a565b90600052602060002090601f016020900481019282620003695760008555620003b5565b82601f106200038457805160ff1916838001178555620003b5565b82800160010185558215620003b5579182015b82811115620003b457825182559160200191906001019062000397565b5b509050620003c49190620003c8565b5090565b5b80821115620003e3576000816000905550600101620003c9565b5090565b620003f28162000450565b82525050565b60006020820190506200040f6000830184620003e7565b92915050565b6000620004228262000450565b91506200042f8362000450565b925082821015620004455762000444620004c8565b5b828203905092915050565b6000819050919050565b600060028204905060018216806200047357607f821691505b602082108114156200048a576200048962000526565b5b50919050565b60006200049d8262000450565b9150620004aa8362000450565b925082620004bd57620004bc620004f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6137af80620005656000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063c9577b751161007c578063c9577b75146103f3578063cba0e9961461040f578063dd62ed3e1461043f578063f2cc0c181461046f578063f2fde38b1461048b578063f84354f1146104a757610158565b8063715018a61461032f5780638b879992146103395780638da5cb5b1461035757806395d89b4114610375578063a457c2d714610393578063a9059cbb146103c357610158565b80632d838119116101155780632d83811914610233578063313ce5671461026357806339509351146102815780634375aa18146102b15780634549b039146102cf57806370a08231146102ff57610158565b8063053ab1821461015d57806306fdde0314610179578063095ea7b31461019757806313114a9d146101c757806318160ddd146101e557806323b872dd14610203575b600080fd5b61017760048036038101906101729190612d5d565b6104c3565b005b61018161063d565b60405161018e919061325d565b60405180910390f35b6101b160048036038101906101ac9190612d21565b6106cf565b6040516101be9190613242565b60405180910390f35b6101cf6106ed565b6040516101dc91906133df565b60405180910390f35b6101ed6106f7565b6040516101fa91906133df565b60405180910390f35b61021d60048036038101906102189190612cd2565b61070b565b60405161022a9190613242565b60405180910390f35b61024d60048036038101906102489190612d5d565b6107e4565b60405161025a91906133df565b60405180910390f35b61026b610852565b60405161027891906133fa565b60405180910390f35b61029b60048036038101906102969190612d21565b610869565b6040516102a89190613242565b60405180910390f35b6102b961091c565b6040516102c691906133df565b60405180910390f35b6102e960048036038101906102e49190612d86565b610926565b6040516102f691906133df565b60405180910390f35b61031960048036038101906103149190612c6d565b6109b2565b60405161032691906133df565b60405180910390f35b610337610a9d565b005b610341610b25565b60405161034e9190613227565b60405180910390f35b61035f610b4f565b60405161036c9190613227565b60405180910390f35b61037d610b78565b60405161038a919061325d565b60405180910390f35b6103ad60048036038101906103a89190612d21565b610c0a565b6040516103ba9190613242565b60405180910390f35b6103dd60048036038101906103d89190612d21565b610cd7565b6040516103ea9190613242565b60405180910390f35b61040d60048036038101906104089190612c6d565b610cf5565b005b61042960048036038101906104249190612c6d565b610db5565b6040516104369190613242565b60405180910390f35b61045960048036038101906104549190612c96565b610e0b565b60405161046691906133df565b60405180910390f35b61048960048036038101906104849190612c6d565b610e92565b005b6104a560048036038101906104a09190612c6d565b61112d565b005b6104c160048036038101906104bc9190612c6d565b611225565b005b60006104cd6115f3565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561055c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610553906133bf565b60405180910390fd5b6000610567836115fb565b5050505090506105bf81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106178160065461165390919063ffffffff16565b6006819055506106328360075461166990919063ffffffff16565b600781905550505050565b60606008805461064c906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610678906135ce565b80156106c55780601f1061069a576101008083540402835291602001916106c5565b820191906000526020600020905b8154815290600101906020018083116106a857829003601f168201915b5050505050905090565b60006106e36106dc6115f3565b848461167f565b6001905092915050565b6000600754905090565b60006b204fce5e3e25026110000000905090565b600061071884848461184a565b6107d9846107246115f3565b6107d48560405180606001604052806028815260200161372d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061078a6115f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d069092919063ffffffff16565b61167f565b600190509392505050565b600060065482111561082b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108229061329f565b60405180910390fd5b6000610835611d5b565b905061084a8184611d8690919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b60006109126108766115f3565b8461090d85600360006108876115f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b61167f565b6001905092915050565b6000600b54905090565b60006b204fce5e3e25026110000000831115610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e9061331f565b60405180910390fd5b81610996576000610987846115fb565b505050509050809150506109ac565b60006109a1846115fb565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a4d57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610a98565b610a95600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107e4565b90505b919050565b610aa56115f3565b73ffffffffffffffffffffffffffffffffffffffff16610ac3610b4f565b73ffffffffffffffffffffffffffffffffffffffff1614610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b109061333f565b60405180910390fd5b610b236000611d9c565b565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610b87906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb3906135ce565b8015610c005780601f10610bd557610100808354040283529160200191610c00565b820191906000526020600020905b815481529060010190602001808311610be357829003601f168201915b5050505050905090565b6000610ccd610c176115f3565b84610cc8856040518060600160405280602581526020016137556025913960036000610c416115f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d069092919063ffffffff16565b61167f565b6001905092915050565b6000610ceb610ce46115f3565b848461184a565b6001905092915050565b610cfd6115f3565b73ffffffffffffffffffffffffffffffffffffffff16610d1b610b4f565b73ffffffffffffffffffffffffffffffffffffffff1614610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d689061333f565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e9a6115f3565b73ffffffffffffffffffffffffffffffffffffffff16610eb8610b4f565b73ffffffffffffffffffffffffffffffffffffffff1614610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f059061333f565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906132ff565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561106f5761102b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107e4565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111356115f3565b73ffffffffffffffffffffffffffffffffffffffff16611153610b4f565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061333f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611210906132bf565b60405180910390fd5b61122281611d9c565b50565b61122d6115f3565b73ffffffffffffffffffffffffffffffffffffffff1661124b610b4f565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112989061333f565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906132ff565b60405180910390fd5b60005b6005805490508110156115ef578173ffffffffffffffffffffffffffffffffffffffff166005828154811061138e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115dc57600560016005805490506113e99190613512565b81548110611420577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611485577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806115a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115ef565b80806115e790613600565b915050611330565b5050565b600033905090565b600080600080600080600061160f88611e60565b91509150600061161d611d5b565b9050600080600061162f8c8686611ec1565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600081836116619190613512565b905092915050565b600081836116779190613431565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e69061339f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611756906132df565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161183d91906133df565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b19061337f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561192a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119219061327f565b60405180910390fd5b6000811161196d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119649061335f565b60405180910390fd5b60006119976064611989600b5485611f1f90919063ffffffff16565b611d8690919063ffffffff16565b90506119ac818361165390919063ffffffff16565b9150600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a515750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a6657611a61848484611f35565b611c9d565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b095750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b1e57611b19848484612188565b611c9c565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611bc25750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bd757611bd28484846123db565b611c9b565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c795750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c8e57611c89848484612599565b611c9a565b611c998484846123db565b5b5b5b5b6000600a60016101000a81548160ff021916908315150217905550611ce584600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836123db565b6001600a60016101000a81548160ff02191690831515021790555050505050565b6000838311158290611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d45919061325d565b60405180910390fd5b5082840390509392505050565b6000806000611d68612881565b91509150611d7f8183611d8690919063ffffffff16565b9250505090565b60008183611d949190613487565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600a60019054906101000a900460ff1615611eb4576000611e8e606485611d8690919063ffffffff16565b90506000611ea5828661165390919063ffffffff16565b90508082935093505050611ebc565b826000915091505b915091565b600080600080611eda8588611f1f90919063ffffffff16565b90506000611ef18688611f1f90919063ffffffff16565b90506000611f08828461165390919063ffffffff16565b905082818395509550955050505093509350939050565b60008183611f2d91906134b8565b905092915050565b6000806000806000611f46866115fb565b94509450945094509450611fa286600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120cc84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121198382612bf4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161217691906133df565b60405180910390a35050505050505050565b6000806000806000612199866115fb565b945094509450945094506121f585600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061228a82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061231f84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061236c8382612bf4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123c991906133df565b60405180910390a35050505050505050565b60008060008060006123ec866115fb565b9450945094509450945061244885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124dd84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061252a8382612bf4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161258791906133df565b60405180910390a35050505050505050565b60008060008060006125aa866115fb565b9450945094509450945061260686600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061269b85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061273082600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127c584600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128128382612bf4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161286f91906133df565b60405180910390a35050505050505050565b6000806000600654905060006b204fce5e3e25026110000000905060005b600580549050811015612ba3578260016000600584815481106128eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806129ff5750816002600060058481548110612997577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612a20576006546b204fce5e3e2502611000000094509450505050612bf0565b612ad66001600060058481548110612a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461165390919063ffffffff16565b9250612b8e6002600060058481548110612b19577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361165390919063ffffffff16565b91508080612b9b90613600565b91505061289f565b50612bc56b204fce5e3e25026110000000600654611d8690919063ffffffff16565b821015612be7576006546b204fce5e3e25026110000000935093505050612bf0565b81819350935050505b9091565b612c098260065461165390919063ffffffff16565b600681905550612c248160075461166990919063ffffffff16565b6007819055505050565b600081359050612c3d816136e7565b92915050565b600081359050612c52816136fe565b92915050565b600081359050612c6781613715565b92915050565b600060208284031215612c7f57600080fd5b6000612c8d84828501612c2e565b91505092915050565b60008060408385031215612ca957600080fd5b6000612cb785828601612c2e565b9250506020612cc885828601612c2e565b9150509250929050565b600080600060608486031215612ce757600080fd5b6000612cf586828701612c2e565b9350506020612d0686828701612c2e565b9250506040612d1786828701612c58565b9150509250925092565b60008060408385031215612d3457600080fd5b6000612d4285828601612c2e565b9250506020612d5385828601612c58565b9150509250929050565b600060208284031215612d6f57600080fd5b6000612d7d84828501612c58565b91505092915050565b60008060408385031215612d9957600080fd5b6000612da785828601612c58565b9250506020612db885828601612c43565b9150509250929050565b612dcb81613546565b82525050565b612dda81613558565b82525050565b6000612deb82613415565b612df58185613420565b9350612e0581856020860161359b565b612e0e816136d6565b840191505092915050565b6000612e26602383613420565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e8c602a83613420565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ef2602683613420565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f58602283613420565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fbe601b83613420565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000612ffe601f83613420565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b600061303e602083613420565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061307e602983613420565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006130e4602583613420565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061314a602483613420565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131b0602c83613420565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61321281613584565b82525050565b6132218161358e565b82525050565b600060208201905061323c6000830184612dc2565b92915050565b60006020820190506132576000830184612dd1565b92915050565b600060208201905081810360008301526132778184612de0565b905092915050565b6000602082019050818103600083015261329881612e19565b9050919050565b600060208201905081810360008301526132b881612e7f565b9050919050565b600060208201905081810360008301526132d881612ee5565b9050919050565b600060208201905081810360008301526132f881612f4b565b9050919050565b6000602082019050818103600083015261331881612fb1565b9050919050565b6000602082019050818103600083015261333881612ff1565b9050919050565b6000602082019050818103600083015261335881613031565b9050919050565b6000602082019050818103600083015261337881613071565b9050919050565b60006020820190508181036000830152613398816130d7565b9050919050565b600060208201905081810360008301526133b88161313d565b9050919050565b600060208201905081810360008301526133d8816131a3565b9050919050565b60006020820190506133f46000830184613209565b92915050565b600060208201905061340f6000830184613218565b92915050565b600081519050919050565b600082825260208201905092915050565b600061343c82613584565b915061344783613584565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561347c5761347b613649565b5b828201905092915050565b600061349282613584565b915061349d83613584565b9250826134ad576134ac613678565b5b828204905092915050565b60006134c382613584565b91506134ce83613584565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561350757613506613649565b5b828202905092915050565b600061351d82613584565b915061352883613584565b92508282101561353b5761353a613649565b5b828203905092915050565b600061355182613564565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156135b957808201518184015260208101905061359e565b838111156135c8576000848401525b50505050565b600060028204905060018216806135e657607f821691505b602082108114156135fa576135f96136a7565b5b50919050565b600061360b82613584565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561363e5761363d613649565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6136f081613546565b81146136fb57600080fd5b50565b61370781613558565b811461371257600080fd5b50565b61371e81613584565b811461372957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ebd74c4337f415a0e1c1e10b6e3aed8fd563b7c9595a72561c1beee81d9353cf64736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063c9577b751161007c578063c9577b75146103f3578063cba0e9961461040f578063dd62ed3e1461043f578063f2cc0c181461046f578063f2fde38b1461048b578063f84354f1146104a757610158565b8063715018a61461032f5780638b879992146103395780638da5cb5b1461035757806395d89b4114610375578063a457c2d714610393578063a9059cbb146103c357610158565b80632d838119116101155780632d83811914610233578063313ce5671461026357806339509351146102815780634375aa18146102b15780634549b039146102cf57806370a08231146102ff57610158565b8063053ab1821461015d57806306fdde0314610179578063095ea7b31461019757806313114a9d146101c757806318160ddd146101e557806323b872dd14610203575b600080fd5b61017760048036038101906101729190612d5d565b6104c3565b005b61018161063d565b60405161018e919061325d565b60405180910390f35b6101b160048036038101906101ac9190612d21565b6106cf565b6040516101be9190613242565b60405180910390f35b6101cf6106ed565b6040516101dc91906133df565b60405180910390f35b6101ed6106f7565b6040516101fa91906133df565b60405180910390f35b61021d60048036038101906102189190612cd2565b61070b565b60405161022a9190613242565b60405180910390f35b61024d60048036038101906102489190612d5d565b6107e4565b60405161025a91906133df565b60405180910390f35b61026b610852565b60405161027891906133fa565b60405180910390f35b61029b60048036038101906102969190612d21565b610869565b6040516102a89190613242565b60405180910390f35b6102b961091c565b6040516102c691906133df565b60405180910390f35b6102e960048036038101906102e49190612d86565b610926565b6040516102f691906133df565b60405180910390f35b61031960048036038101906103149190612c6d565b6109b2565b60405161032691906133df565b60405180910390f35b610337610a9d565b005b610341610b25565b60405161034e9190613227565b60405180910390f35b61035f610b4f565b60405161036c9190613227565b60405180910390f35b61037d610b78565b60405161038a919061325d565b60405180910390f35b6103ad60048036038101906103a89190612d21565b610c0a565b6040516103ba9190613242565b60405180910390f35b6103dd60048036038101906103d89190612d21565b610cd7565b6040516103ea9190613242565b60405180910390f35b61040d60048036038101906104089190612c6d565b610cf5565b005b61042960048036038101906104249190612c6d565b610db5565b6040516104369190613242565b60405180910390f35b61045960048036038101906104549190612c96565b610e0b565b60405161046691906133df565b60405180910390f35b61048960048036038101906104849190612c6d565b610e92565b005b6104a560048036038101906104a09190612c6d565b61112d565b005b6104c160048036038101906104bc9190612c6d565b611225565b005b60006104cd6115f3565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561055c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610553906133bf565b60405180910390fd5b6000610567836115fb565b5050505090506105bf81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106178160065461165390919063ffffffff16565b6006819055506106328360075461166990919063ffffffff16565b600781905550505050565b60606008805461064c906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610678906135ce565b80156106c55780601f1061069a576101008083540402835291602001916106c5565b820191906000526020600020905b8154815290600101906020018083116106a857829003601f168201915b5050505050905090565b60006106e36106dc6115f3565b848461167f565b6001905092915050565b6000600754905090565b60006b204fce5e3e25026110000000905090565b600061071884848461184a565b6107d9846107246115f3565b6107d48560405180606001604052806028815260200161372d60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061078a6115f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d069092919063ffffffff16565b61167f565b600190509392505050565b600060065482111561082b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108229061329f565b60405180910390fd5b6000610835611d5b565b905061084a8184611d8690919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b60006109126108766115f3565b8461090d85600360006108876115f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b61167f565b6001905092915050565b6000600b54905090565b60006b204fce5e3e25026110000000831115610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e9061331f565b60405180910390fd5b81610996576000610987846115fb565b505050509050809150506109ac565b60006109a1846115fb565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a4d57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610a98565b610a95600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107e4565b90505b919050565b610aa56115f3565b73ffffffffffffffffffffffffffffffffffffffff16610ac3610b4f565b73ffffffffffffffffffffffffffffffffffffffff1614610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b109061333f565b60405180910390fd5b610b236000611d9c565b565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610b87906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb3906135ce565b8015610c005780601f10610bd557610100808354040283529160200191610c00565b820191906000526020600020905b815481529060010190602001808311610be357829003601f168201915b5050505050905090565b6000610ccd610c176115f3565b84610cc8856040518060600160405280602581526020016137556025913960036000610c416115f3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d069092919063ffffffff16565b61167f565b6001905092915050565b6000610ceb610ce46115f3565b848461184a565b6001905092915050565b610cfd6115f3565b73ffffffffffffffffffffffffffffffffffffffff16610d1b610b4f565b73ffffffffffffffffffffffffffffffffffffffff1614610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d689061333f565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610e9a6115f3565b73ffffffffffffffffffffffffffffffffffffffff16610eb8610b4f565b73ffffffffffffffffffffffffffffffffffffffff1614610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f059061333f565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906132ff565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561106f5761102b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107e4565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111356115f3565b73ffffffffffffffffffffffffffffffffffffffff16611153610b4f565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061333f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611210906132bf565b60405180910390fd5b61122281611d9c565b50565b61122d6115f3565b73ffffffffffffffffffffffffffffffffffffffff1661124b610b4f565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112989061333f565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661132d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611324906132ff565b60405180910390fd5b60005b6005805490508110156115ef578173ffffffffffffffffffffffffffffffffffffffff166005828154811061138e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115dc57600560016005805490506113e99190613512565b81548110611420577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611485577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060058054806115a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115ef565b80806115e790613600565b915050611330565b5050565b600033905090565b600080600080600080600061160f88611e60565b91509150600061161d611d5b565b9050600080600061162f8c8686611ec1565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600081836116619190613512565b905092915050565b600081836116779190613431565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e69061339f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561175f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611756906132df565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161183d91906133df565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b19061337f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561192a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119219061327f565b60405180910390fd5b6000811161196d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119649061335f565b60405180910390fd5b60006119976064611989600b5485611f1f90919063ffffffff16565b611d8690919063ffffffff16565b90506119ac818361165390919063ffffffff16565b9150600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a515750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611a6657611a61848484611f35565b611c9d565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611b095750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611b1e57611b19848484612188565b611c9c565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611bc25750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bd757611bd28484846123db565b611c9b565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c795750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c8e57611c89848484612599565b611c9a565b611c998484846123db565b5b5b5b5b6000600a60016101000a81548160ff021916908315150217905550611ce584600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836123db565b6001600a60016101000a81548160ff02191690831515021790555050505050565b6000838311158290611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d45919061325d565b60405180910390fd5b5082840390509392505050565b6000806000611d68612881565b91509150611d7f8183611d8690919063ffffffff16565b9250505090565b60008183611d949190613487565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600a60019054906101000a900460ff1615611eb4576000611e8e606485611d8690919063ffffffff16565b90506000611ea5828661165390919063ffffffff16565b90508082935093505050611ebc565b826000915091505b915091565b600080600080611eda8588611f1f90919063ffffffff16565b90506000611ef18688611f1f90919063ffffffff16565b90506000611f08828461165390919063ffffffff16565b905082818395509550955050505093509350939050565b60008183611f2d91906134b8565b905092915050565b6000806000806000611f46866115fb565b94509450945094509450611fa286600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120cc84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121198382612bf4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161217691906133df565b60405180910390a35050505050505050565b6000806000806000612199866115fb565b945094509450945094506121f585600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061228a82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061231f84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061236c8382612bf4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123c991906133df565b60405180910390a35050505050505050565b60008060008060006123ec866115fb565b9450945094509450945061244885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124dd84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061252a8382612bf4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161258791906133df565b60405180910390a35050505050505050565b60008060008060006125aa866115fb565b9450945094509450945061260686600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061269b85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061273082600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127c584600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461166990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128128382612bf4565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161286f91906133df565b60405180910390a35050505050505050565b6000806000600654905060006b204fce5e3e25026110000000905060005b600580549050811015612ba3578260016000600584815481106128eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806129ff5750816002600060058481548110612997577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612a20576006546b204fce5e3e2502611000000094509450505050612bf0565b612ad66001600060058481548110612a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461165390919063ffffffff16565b9250612b8e6002600060058481548110612b19577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361165390919063ffffffff16565b91508080612b9b90613600565b91505061289f565b50612bc56b204fce5e3e25026110000000600654611d8690919063ffffffff16565b821015612be7576006546b204fce5e3e25026110000000935093505050612bf0565b81819350935050505b9091565b612c098260065461165390919063ffffffff16565b600681905550612c248160075461166990919063ffffffff16565b6007819055505050565b600081359050612c3d816136e7565b92915050565b600081359050612c52816136fe565b92915050565b600081359050612c6781613715565b92915050565b600060208284031215612c7f57600080fd5b6000612c8d84828501612c2e565b91505092915050565b60008060408385031215612ca957600080fd5b6000612cb785828601612c2e565b9250506020612cc885828601612c2e565b9150509250929050565b600080600060608486031215612ce757600080fd5b6000612cf586828701612c2e565b9350506020612d0686828701612c2e565b9250506040612d1786828701612c58565b9150509250925092565b60008060408385031215612d3457600080fd5b6000612d4285828601612c2e565b9250506020612d5385828601612c58565b9150509250929050565b600060208284031215612d6f57600080fd5b6000612d7d84828501612c58565b91505092915050565b60008060408385031215612d9957600080fd5b6000612da785828601612c58565b9250506020612db885828601612c43565b9150509250929050565b612dcb81613546565b82525050565b612dda81613558565b82525050565b6000612deb82613415565b612df58185613420565b9350612e0581856020860161359b565b612e0e816136d6565b840191505092915050565b6000612e26602383613420565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612e8c602a83613420565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ef2602683613420565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f58602283613420565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fbe601b83613420565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000612ffe601f83613420565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b600061303e602083613420565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061307e602983613420565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006130e4602583613420565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061314a602483613420565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131b0602c83613420565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61321281613584565b82525050565b6132218161358e565b82525050565b600060208201905061323c6000830184612dc2565b92915050565b60006020820190506132576000830184612dd1565b92915050565b600060208201905081810360008301526132778184612de0565b905092915050565b6000602082019050818103600083015261329881612e19565b9050919050565b600060208201905081810360008301526132b881612e7f565b9050919050565b600060208201905081810360008301526132d881612ee5565b9050919050565b600060208201905081810360008301526132f881612f4b565b9050919050565b6000602082019050818103600083015261331881612fb1565b9050919050565b6000602082019050818103600083015261333881612ff1565b9050919050565b6000602082019050818103600083015261335881613031565b9050919050565b6000602082019050818103600083015261337881613071565b9050919050565b60006020820190508181036000830152613398816130d7565b9050919050565b600060208201905081810360008301526133b88161313d565b9050919050565b600060208201905081810360008301526133d8816131a3565b9050919050565b60006020820190506133f46000830184613209565b92915050565b600060208201905061340f6000830184613218565b92915050565b600081519050919050565b600082825260208201905092915050565b600061343c82613584565b915061344783613584565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561347c5761347b613649565b5b828201905092915050565b600061349282613584565b915061349d83613584565b9250826134ad576134ac613678565b5b828204905092915050565b60006134c382613584565b91506134ce83613584565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561350757613506613649565b5b828202905092915050565b600061351d82613584565b915061352883613584565b92508282101561353b5761353a613649565b5b828203905092915050565b600061355182613564565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156135b957808201518184015260208101905061359e565b838111156135c8576000848401525b50505050565b600060028204905060018216806135e657607f821691505b602082108114156135fa576135f96136a7565b5b50919050565b600061360b82613584565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561363e5761363d613649565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6136f081613546565b81146136fb57600080fd5b50565b61370781613558565b811461371257600080fd5b50565b61371e81613584565b811461372957600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ebd74c4337f415a0e1c1e10b6e3aed8fd563b7c9595a72561c1beee81d9353cf64736f6c63430008000033

Deployed Bytecode Sourcemap

188:11089:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3678:376;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1560:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2472:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3583:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1837:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2641:313;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4504:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1746:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2962:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1457:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4062:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1940:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1648:94:4;;;:::i;:::-;;1353:92:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;997:87:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1651::2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3188:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2146:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1234:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3465:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2321:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4765:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1897:192:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5105:478:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3678:376;3730:14;3747:12;:10;:12::i;:::-;3730:29;;3779:11;:19;3791:6;3779:19;;;;;;;;;;;;;;;;;;;;;;;;;3778:20;3770:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;3859:15;3882:19;3893:7;3882:10;:19::i;:::-;3858:43;;;;;;3930:28;3950:7;3930;:15;3938:6;3930:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;3912:7;:15;3920:6;3912:15;;;;;;;;;;;;;;;:46;;;;3979:20;3991:7;3979;;:11;;:20;;;;:::i;:::-;3969:7;:30;;;;4023:23;4038:7;4023:10;;:14;;:23;;;;:::i;:::-;4010:10;:36;;;;3678:376;;;:::o;1560:83::-;1597:13;1630:5;1623:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1560:83;:::o;2472:161::-;2547:4;2564:39;2573:12;:10;:12::i;:::-;2587:7;2596:6;2564:8;:39::i;:::-;2621:4;2614:11;;2472:161;;;;:::o;3583:87::-;3625:7;3652:10;;3645:17;;3583:87;:::o;1837:95::-;1890:7;662:23;1910:14;;1837:95;:::o;2641:313::-;2739:4;2756:36;2766:6;2774:9;2785:6;2756:9;:36::i;:::-;2803:121;2812:6;2820:12;:10;:12::i;:::-;2834:89;2872:6;2834:89;;;;;;;;;;;;;;;;;:11;:19;2846:6;2834:19;;;;;;;;;;;;;;;:33;2854:12;:10;:12::i;:::-;2834:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;2803:8;:121::i;:::-;2942:4;2935:11;;2641:313;;;;;:::o;4504:253::-;4570:7;4609;;4598;:18;;4590:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4674:19;4697:10;:8;:10::i;:::-;4674:33;;4725:24;4737:11;4725:7;:11;;:24;;;;:::i;:::-;4718:31;;;4504:253;;;:::o;1746:83::-;1787:5;1812:9;;;;;;;;;;;1805:16;;1746:83;:::o;2962:218::-;3050:4;3067:83;3076:12;:10;:12::i;:::-;3090:7;3099:50;3138:10;3099:11;:25;3111:12;:10;:12::i;:::-;3099:25;;;;;;;;;;;;;;;:34;3125:7;3099:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3067:8;:83::i;:::-;3168:4;3161:11;;2962:218;;;;:::o;1457:93::-;1504:7;1531:11;;1524:18;;1457:93;:::o;4062:434::-;4152:7;662:23;4180:7;:18;;4172:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4250:17;4245:244;;4285:15;4308:19;4319:7;4308:10;:19::i;:::-;4284:43;;;;;;4349:7;4342:14;;;;;4245:244;4391:23;4421:19;4432:7;4421:10;:19::i;:::-;4389:51;;;;;;4462:15;4455:22;;;4062:434;;;;;:::o;1940:198::-;2006:7;2030:11;:20;2042:7;2030:20;;;;;;;;;;;;;;;;;;;;;;;;;2026:49;;;2059:7;:16;2067:7;2059:16;;;;;;;;;;;;;;;;2052:23;;;;2026:49;2093:37;2113:7;:16;2121:7;2113:16;;;;;;;;;;;;;;;;2093:19;:37::i;:::-;2086:44;;1940:198;;;;:::o;1648:94:4:-;1228:12;:10;:12::i;:::-;1217:23;;:7;:5;:7::i;:::-;:23;;;1209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:21:::1;1731:1;1713:9;:21::i;:::-;1648:94::o:0;1353:92:2:-;1397:7;1424:13;;;;;;;;;;;1417:20;;1353:92;:::o;997:87:4:-;1043:7;1070:6;;;;;;;;;;;1063:13;;997:87;:::o;1651::2:-;1690:13;1723:7;1716:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1651:87;:::o;3188:269::-;3281:4;3298:129;3307:12;:10;:12::i;:::-;3321:7;3330:96;3369:15;3330:96;;;;;;;;;;;;;;;;;:11;:25;3342:12;:10;:12::i;:::-;3330:25;;;;;;;;;;;;;;;:34;3356:7;3330:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3298:8;:129::i;:::-;3445:4;3438:11;;3188:269;;;;:::o;2146:167::-;2224:4;2241:42;2251:12;:10;:12::i;:::-;2265:9;2276:6;2241:9;:42::i;:::-;2301:4;2294:11;;2146:167;;;;:::o;1234:107::-;1228:12:4;:10;:12::i;:::-;1217:23;;:7;:5;:7::i;:::-;:23;;;1209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1323:10:2::1;1307:13;;:26;;;;;;;;;;;;;;;;;;1234:107:::0;:::o;3465:110::-;3523:4;3547:11;:20;3559:7;3547:20;;;;;;;;;;;;;;;;;;;;;;;;;3540:27;;3465:110;;;:::o;2321:143::-;2402:7;2429:11;:18;2441:5;2429:18;;;;;;;;;;;;;;;:27;2448:7;2429:27;;;;;;;;;;;;;;;;2422:34;;2321:143;;;;:::o;4765:332::-;1228:12:4;:10;:12::i;:::-;1217:23;;:7;:5;:7::i;:::-;:23;;;1209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4847:11:2::1;:20;4859:7;4847:20;;;;;;;;;;;;;;;;;;;;;;;;;4846:21;4838:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;4932:1;4913:7;:16;4921:7;4913:16;;;;;;;;;;;;;;;;:20;4910:108;;;4969:37;4989:7;:16;4997:7;4989:16;;;;;;;;;;;;;;;;4969:19;:37::i;:::-;4950:7;:16;4958:7;4950:16;;;;;;;;;;;;;;;:56;;;;4910:108;5051:4;5028:11;:20;5040:7;5028:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;5066:9;5081:7;5066:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4765:332:::0;:::o;1897:192:4:-;1228:12;:10;:12::i;:::-;1217:23;;:7;:5;:7::i;:::-;:23;;;1209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2006:1:::1;1986:22;;:8;:22;;;;1978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2062:19;2072:8;2062:9;:19::i;:::-;1897:192:::0;:::o;5105:478:2:-;1228:12:4;:10;:12::i;:::-;1217:23;;:7;:5;:7::i;:::-;:23;;;1209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5186:11:2::1;:20;5198:7;5186:20;;;;;;;;;;;;;;;;;;;;;;;;;5178:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5254:9;5249:327;5273:9;:16;;;;5269:1;:20;5249:327;;;5331:7;5315:23;;:9;5325:1;5315:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;5311:254;;;5374:9;5403:1;5384:9;:16;;;;:20;;;;:::i;:::-;5374:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5359:9;5369:1;5359:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;5443:1;5424:7;:16;5432:7;5424:16;;;;;;;;;;;;;;;:20;;;;5486:5;5463:11;:20;5475:7;5463:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;5510:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5544:5;;5311:254;5291:3;;;;;:::i;:::-;;;;5249:327;;;;5105:478:::0;:::o;601:98:1:-;654:7;681:10;674:17;;601:98;:::o;9441:411:2:-;9500:7;9509;9518;9527;9536;9557:23;9582:12;9598:20;9610:7;9598:11;:20::i;:::-;9556:62;;;;9629:19;9652:10;:8;:10::i;:::-;9629:33;;9674:15;9691:23;9716:12;9732:39;9744:7;9753:4;9759:11;9732;:39::i;:::-;9673:98;;;;;;9790:7;9799:15;9816:4;9822:15;9839:4;9782:62;;;;;;;;;;;;;;;;9441:411;;;;;;;:::o;3144:98:5:-;3202:7;3233:1;3229;:5;;;;:::i;:::-;3222:12;;3144:98;;;;:::o;2763:::-;2821:7;2852:1;2848;:5;;;;:::i;:::-;2841:12;;2763:98;;;;:::o;5591:337:2:-;5701:1;5684:19;;:5;:19;;;;5676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5782:1;5763:21;;:7;:21;;;;5755:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5866:6;5836:11;:18;5848:5;5836:18;;;;;;;;;;;;;;;:27;5855:7;5836:27;;;;;;;;;;;;;;;:36;;;;5904:7;5888:32;;5897:5;5888:32;;;5913:6;5888:32;;;;;;:::i;:::-;;;;;;;;5591:337;;;:::o;5936:1235::-;6051:1;6033:20;;:6;:20;;;;6025:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6135:1;6114:23;;:9;:23;;;;6106:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6205:1;6196:6;:10;6188:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;6265:18;6286:32;6314:3;6286:23;6297:11;;6286:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;6265:53;;6340:22;6351:10;6340:6;:10;;:22;;;;:::i;:::-;6331:31;;6379:11;:19;6391:6;6379:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;6403:11;:22;6415:9;6403:22;;;;;;;;;;;;;;;;;;;;;;;;;6402:23;6379:46;6375:597;;;6442:48;6464:6;6472:9;6483:6;6442:21;:48::i;:::-;6375:597;;;6513:11;:19;6525:6;6513:19;;;;;;;;;;;;;;;;;;;;;;;;;6512:20;:46;;;;;6536:11;:22;6548:9;6536:22;;;;;;;;;;;;;;;;;;;;;;;;;6512:46;6508:464;;;6575:46;6595:6;6603:9;6614:6;6575:19;:46::i;:::-;6508:464;;;6644:11;:19;6656:6;6644:19;;;;;;;;;;;;;;;;;;;;;;;;;6643:20;:47;;;;;6668:11;:22;6680:9;6668:22;;;;;;;;;;;;;;;;;;;;;;;;;6667:23;6643:47;6639:333;;;6707:44;6725:6;6733:9;6744:6;6707:17;:44::i;:::-;6639:333;;;6773:11;:19;6785:6;6773:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;6796:11;:22;6808:9;6796:22;;;;;;;;;;;;;;;;;;;;;;;;;6773:45;6769:203;;;6835:48;6857:6;6865:9;6876:6;6835:21;:48::i;:::-;6769:203;;;6916:44;6934:6;6942:9;6953:6;6916:17;:44::i;:::-;6769:203;6639:333;6508:464;6375:597;7066:5;7056:7;;:15;;;;;;;;;;;;;;;;;;7084:52;7102:6;7110:13;;;;;;;;;;;7125:10;7084:17;:52::i;:::-;7159:4;7149:7;;:14;;;;;;;;;;;;;;;;;;5936:1235;;;;:::o;5042:240:5:-;5162:7;5220:1;5215;:6;;5223:12;5207:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5262:1;5258;:5;5251:12;;5042:240;;;;;:::o;10542:163:2:-;10583:7;10604:15;10621;10640:19;:17;:19::i;:::-;10603:56;;;;10677:20;10689:7;10677;:11;;:20;;;;:::i;:::-;10670:27;;;;10542:163;:::o;3900:98:5:-;3958:7;3989:1;3985;:5;;;;:::i;:::-;3978:12;;3900:98;;;;:::o;2097:173:4:-;2153:16;2172:6;;;;;;;;;;;2153:25;;2198:8;2189:6;;:17;;;;;;;;;;;;;;;;;;2253:8;2222:40;;2243:8;2222:40;;;;;;;;;;;;2097:173;;:::o;9860:332:2:-;9920:7;9929;9953;;;;;;;;;;;9949:226;;;9977:12;9992:16;10004:3;9992:7;:11;;:16;;;;:::i;:::-;9977:31;;10023:23;10049:17;10061:4;10049:7;:11;;:17;;;;:::i;:::-;10023:43;;10089:15;10106:4;10081:30;;;;;;;;9949:226;10152:7;10161:1;10144:19;;;;9860:332;;;;:::o;10200:334::-;10295:7;10304;10313;10333:15;10351:24;10363:11;10351:7;:11;;:24;;;;:::i;:::-;10333:42;;10386:12;10401:21;10410:11;10401:4;:8;;:21;;;;:::i;:::-;10386:36;;10433:23;10459:17;10471:4;10459:7;:11;;:17;;;;:::i;:::-;10433:43;;10495:7;10504:15;10521:4;10487:39;;;;;;;;;10200:334;;;;;;;:::o;3501:98:5:-;3559:7;3590:1;3586;:5;;;;:::i;:::-;3579:12;;3501:98;;;;:::o;8176:509:2:-;8279:15;8296:23;8321:12;8335:23;8360:12;8376:19;8387:7;8376:10;:19::i;:::-;8278:117;;;;;;;;;;8424:28;8444:7;8424;:15;8432:6;8424:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;8406:7;:15;8414:6;8406:15;;;;;;;;;;;;;;;:46;;;;8481:28;8501:7;8481;:15;8489:6;8481:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;8463:7;:15;8471:6;8463:15;;;;;;;;;;;;;;;:46;;;;8541:39;8564:15;8541:7;:18;8549:9;8541:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;8520:7;:18;8528:9;8520:18;;;;;;;;;;;;;;;:60;;;;8594:23;8606:4;8612;8594:11;:23::i;:::-;8650:9;8633:44;;8642:6;8633:44;;;8661:15;8633:44;;;;;;:::i;:::-;;;;;;;;8176:509;;;;;;;;:::o;7639:529::-;7740:15;7757:23;7782:12;7796:23;7821:12;7837:19;7848:7;7837:10;:19::i;:::-;7739:117;;;;;;;;;;7885:28;7905:7;7885;:15;7893:6;7885:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;7867:7;:15;7875:6;7867:15;;;;;;;;;;;;;;;:46;;;;7945:39;7968:15;7945:7;:18;7953:9;7945:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;7924:7;:18;7932:9;7924:18;;;;;;;;;;;;;;;:60;;;;8016:39;8039:15;8016:7;:18;8024:9;8016:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;7995:7;:18;8003:9;7995:18;;;;;;;;;;;;;;;:60;;;;8077:23;8089:4;8095;8077:11;:23::i;:::-;8133:9;8116:44;;8125:6;8116:44;;;8144:15;8116:44;;;;;;:::i;:::-;;;;;;;;7639:529;;;;;;;;:::o;7179:452::-;7278:15;7295:23;7320:12;7334:23;7359:12;7375:19;7386:7;7375:10;:19::i;:::-;7277:117;;;;;;;;;;7423:28;7443:7;7423;:15;7431:6;7423:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;7405:7;:15;7413:6;7405:15;;;;;;;;;;;;;;;:46;;;;7483:39;7506:15;7483:7;:18;7491:9;7483:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;7462:7;:18;7470:9;7462:18;;;;;;;;;;;;;;;:60;;;;7540:23;7552:4;7558;7540:11;:23::i;:::-;7596:9;7579:44;;7588:6;7579:44;;;7607:15;7579:44;;;;;;:::i;:::-;;;;;;;;7179:452;;;;;;;;:::o;8693:585::-;8796:15;8813:23;8838:12;8852:23;8877:12;8893:19;8904:7;8893:10;:19::i;:::-;8795:117;;;;;;;;;;8941:28;8961:7;8941;:15;8949:6;8941:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;8923:7;:15;8931:6;8923:15;;;;;;;;;;;;;;;:46;;;;8998:28;9018:7;8998;:15;9006:6;8998:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;8980:7;:15;8988:6;8980:15;;;;;;;;;;;;;;;:46;;;;9058:39;9081:15;9058:7;:18;9066:9;9058:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;9037:7;:18;9045:9;9037:18;;;;;;;;;;;;;;;:60;;;;9129:39;9152:15;9129:7;:18;9137:9;9129:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;9108:7;:18;9116:9;9108:18;;;;;;;;;;;;;;;:60;;;;9187:23;9199:4;9205;9187:11;:23::i;:::-;9243:9;9226:44;;9235:6;9226:44;;;9254:15;9226:44;;;;;;:::i;:::-;;;;;;;;8693:585;;;;;;;;:::o;10713:561::-;10763:7;10772;10792:15;10810:7;;10792:25;;10828:15;662:23;10828:25;;10875:9;10870:289;10894:9;:16;;;;10890:1;:20;10870:289;;;10960:7;10936;:21;10944:9;10954:1;10944:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10936:21;;;;;;;;;;;;;;;;:31;:66;;;;10995:7;10971;:21;10979:9;10989:1;10979:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10971:21;;;;;;;;;;;;;;;;:31;10936:66;10932:97;;;11012:7;;662:23;11004:25;;;;;;;;;10932:97;11054:34;11066:7;:21;11074:9;11084:1;11074:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11066:21;;;;;;;;;;;;;;;;11054:7;:11;;:34;;;;:::i;:::-;11044:44;;11113:34;11125:7;:21;11133:9;11143:1;11133:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11125:21;;;;;;;;;;;;;;;;11113:7;:11;;:34;;;;:::i;:::-;11103:44;;10912:3;;;;;:::i;:::-;;;;10870:289;;;;11183:20;662:23;11183:7;;:11;;:20;;;;:::i;:::-;11173:7;:30;11169:61;;;11213:7;;662:23;11205:25;;;;;;;;11169:61;11249:7;11258;11241:25;;;;;;10713:561;;;:::o;9286:147::-;9364:17;9376:4;9364:7;;:11;;:17;;;;:::i;:::-;9354:7;:27;;;;9405:20;9420:4;9405:10;;:14;;:20;;;;:::i;:::-;9392:10;:33;;;;9286:147;;:::o;7:139:6:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:262::-;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2255:1;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2226:117;2154:196;;;;:::o;2356:401::-;;;2478:2;2466:9;2457:7;2453:23;2449:32;2446:2;;;2494:1;2491;2484:12;2446:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:50;2732:7;2723:6;2712:9;2708:22;2690:50;:::i;:::-;2680:60;;2635:115;2436:321;;;;;:::o;2763:118::-;2850:24;2868:5;2850:24;:::i;:::-;2845:3;2838:37;2828:53;;:::o;2887:109::-;2968:21;2983:5;2968:21;:::i;:::-;2963:3;2956:34;2946:50;;:::o;3002:364::-;;3118:39;3151:5;3118:39;:::i;:::-;3173:71;3237:6;3232:3;3173:71;:::i;:::-;3166:78;;3253:52;3298:6;3293:3;3286:4;3279:5;3275:16;3253:52;:::i;:::-;3330:29;3352:6;3330:29;:::i;:::-;3325:3;3321:39;3314:46;;3094:272;;;;;:::o;3372:367::-;;3535:67;3599:2;3594:3;3535:67;:::i;:::-;3528:74;;3632:34;3628:1;3623:3;3619:11;3612:55;3698:5;3693:2;3688:3;3684:12;3677:27;3730:2;3725:3;3721:12;3714:19;;3518:221;;;:::o;3745:374::-;;3908:67;3972:2;3967:3;3908:67;:::i;:::-;3901:74;;4005:34;4001:1;3996:3;3992:11;3985:55;4071:12;4066:2;4061:3;4057:12;4050:34;4110:2;4105:3;4101:12;4094:19;;3891:228;;;:::o;4125:370::-;;4288:67;4352:2;4347:3;4288:67;:::i;:::-;4281:74;;4385:34;4381:1;4376:3;4372:11;4365:55;4451:8;4446:2;4441:3;4437:12;4430:30;4486:2;4481:3;4477:12;4470:19;;4271:224;;;:::o;4501:366::-;;4664:67;4728:2;4723:3;4664:67;:::i;:::-;4657:74;;4761:34;4757:1;4752:3;4748:11;4741:55;4827:4;4822:2;4817:3;4813:12;4806:26;4858:2;4853:3;4849:12;4842:19;;4647:220;;;:::o;4873:325::-;;5036:67;5100:2;5095:3;5036:67;:::i;:::-;5029:74;;5133:29;5129:1;5124:3;5120:11;5113:50;5189:2;5184:3;5180:12;5173:19;;5019:179;;;:::o;5204:329::-;;5367:67;5431:2;5426:3;5367:67;:::i;:::-;5360:74;;5464:33;5460:1;5455:3;5451:11;5444:54;5524:2;5519:3;5515:12;5508:19;;5350:183;;;:::o;5539:330::-;;5702:67;5766:2;5761:3;5702:67;:::i;:::-;5695:74;;5799:34;5795:1;5790:3;5786:11;5779:55;5860:2;5855:3;5851:12;5844:19;;5685:184;;;:::o;5875:373::-;;6038:67;6102:2;6097:3;6038:67;:::i;:::-;6031:74;;6135:34;6131:1;6126:3;6122:11;6115:55;6201:11;6196:2;6191:3;6187:12;6180:33;6239:2;6234:3;6230:12;6223:19;;6021:227;;;:::o;6254:369::-;;6417:67;6481:2;6476:3;6417:67;:::i;:::-;6410:74;;6514:34;6510:1;6505:3;6501:11;6494:55;6580:7;6575:2;6570:3;6566:12;6559:29;6614:2;6609:3;6605:12;6598:19;;6400:223;;;:::o;6629:368::-;;6792:67;6856:2;6851:3;6792:67;:::i;:::-;6785:74;;6889:34;6885:1;6880:3;6876:11;6869:55;6955:6;6950:2;6945:3;6941:12;6934:28;6988:2;6983:3;6979:12;6972:19;;6775:222;;;:::o;7003:376::-;;7166:67;7230:2;7225:3;7166:67;:::i;:::-;7159:74;;7263:34;7259:1;7254:3;7250:11;7243:55;7329:14;7324:2;7319:3;7315:12;7308:36;7370:2;7365:3;7361:12;7354:19;;7149:230;;;:::o;7385:118::-;7472:24;7490:5;7472:24;:::i;:::-;7467:3;7460:37;7450:53;;:::o;7509:112::-;7592:22;7608:5;7592:22;:::i;:::-;7587:3;7580:35;7570:51;;:::o;7627:222::-;;7758:2;7747:9;7743:18;7735:26;;7771:71;7839:1;7828:9;7824:17;7815:6;7771:71;:::i;:::-;7725:124;;;;:::o;7855:210::-;;7980:2;7969:9;7965:18;7957:26;;7993:65;8055:1;8044:9;8040:17;8031:6;7993:65;:::i;:::-;7947:118;;;;:::o;8071:313::-;;8222:2;8211:9;8207:18;8199:26;;8271:9;8265:4;8261:20;8257:1;8246:9;8242:17;8235:47;8299:78;8372:4;8363:6;8299:78;:::i;:::-;8291:86;;8189:195;;;;:::o;8390:419::-;;8594:2;8583:9;8579:18;8571:26;;8643:9;8637:4;8633:20;8629:1;8618:9;8614:17;8607:47;8671:131;8797:4;8671:131;:::i;:::-;8663:139;;8561:248;;;:::o;8815:419::-;;9019:2;9008:9;9004:18;8996:26;;9068:9;9062:4;9058:20;9054:1;9043:9;9039:17;9032:47;9096:131;9222:4;9096:131;:::i;:::-;9088:139;;8986:248;;;:::o;9240:419::-;;9444:2;9433:9;9429:18;9421:26;;9493:9;9487:4;9483:20;9479:1;9468:9;9464:17;9457:47;9521:131;9647:4;9521:131;:::i;:::-;9513:139;;9411:248;;;:::o;9665:419::-;;9869:2;9858:9;9854:18;9846:26;;9918:9;9912:4;9908:20;9904:1;9893:9;9889:17;9882:47;9946:131;10072:4;9946:131;:::i;:::-;9938:139;;9836:248;;;:::o;10090:419::-;;10294:2;10283:9;10279:18;10271:26;;10343:9;10337:4;10333:20;10329:1;10318:9;10314:17;10307:47;10371:131;10497:4;10371:131;:::i;:::-;10363:139;;10261:248;;;:::o;10515:419::-;;10719:2;10708:9;10704:18;10696:26;;10768:9;10762:4;10758:20;10754:1;10743:9;10739:17;10732:47;10796:131;10922:4;10796:131;:::i;:::-;10788:139;;10686:248;;;:::o;10940:419::-;;11144:2;11133:9;11129:18;11121:26;;11193:9;11187:4;11183:20;11179:1;11168:9;11164:17;11157:47;11221:131;11347:4;11221:131;:::i;:::-;11213:139;;11111:248;;;:::o;11365:419::-;;11569:2;11558:9;11554:18;11546:26;;11618:9;11612:4;11608:20;11604:1;11593:9;11589:17;11582:47;11646:131;11772:4;11646:131;:::i;:::-;11638:139;;11536:248;;;:::o;11790:419::-;;11994:2;11983:9;11979:18;11971:26;;12043:9;12037:4;12033:20;12029:1;12018:9;12014:17;12007:47;12071:131;12197:4;12071:131;:::i;:::-;12063:139;;11961:248;;;:::o;12215:419::-;;12419:2;12408:9;12404:18;12396:26;;12468:9;12462:4;12458:20;12454:1;12443:9;12439:17;12432:47;12496:131;12622:4;12496:131;:::i;:::-;12488:139;;12386:248;;;:::o;12640:419::-;;12844:2;12833:9;12829:18;12821:26;;12893:9;12887:4;12883:20;12879:1;12868:9;12864:17;12857:47;12921:131;13047:4;12921:131;:::i;:::-;12913:139;;12811:248;;;:::o;13065:222::-;;13196:2;13185:9;13181:18;13173:26;;13209:71;13277:1;13266:9;13262:17;13253:6;13209:71;:::i;:::-;13163:124;;;;:::o;13293:214::-;;13420:2;13409:9;13405:18;13397:26;;13433:67;13497:1;13486:9;13482:17;13473:6;13433:67;:::i;:::-;13387:120;;;;:::o;13513:99::-;;13599:5;13593:12;13583:22;;13572:40;;;:::o;13618:169::-;;13736:6;13731:3;13724:19;13776:4;13771:3;13767:14;13752:29;;13714:73;;;;:::o;13793:305::-;;13852:20;13870:1;13852:20;:::i;:::-;13847:25;;13886:20;13904:1;13886:20;:::i;:::-;13881:25;;14040:1;13972:66;13968:74;13965:1;13962:81;13959:2;;;14046:18;;:::i;:::-;13959:2;14090:1;14087;14083:9;14076:16;;13837:261;;;;:::o;14104:185::-;;14161:20;14179:1;14161:20;:::i;:::-;14156:25;;14195:20;14213:1;14195:20;:::i;:::-;14190:25;;14234:1;14224:2;;14239:18;;:::i;:::-;14224:2;14281:1;14278;14274:9;14269:14;;14146:143;;;;:::o;14295:348::-;;14358:20;14376:1;14358:20;:::i;:::-;14353:25;;14392:20;14410:1;14392:20;:::i;:::-;14387:25;;14580:1;14512:66;14508:74;14505:1;14502:81;14497:1;14490:9;14483:17;14479:105;14476:2;;;14587:18;;:::i;:::-;14476:2;14635:1;14632;14628:9;14617:20;;14343:300;;;;:::o;14649:191::-;;14709:20;14727:1;14709:20;:::i;:::-;14704:25;;14743:20;14761:1;14743:20;:::i;:::-;14738:25;;14782:1;14779;14776:8;14773:2;;;14787:18;;:::i;:::-;14773:2;14832:1;14829;14825:9;14817:17;;14694:146;;;;:::o;14846:96::-;;14912:24;14930:5;14912:24;:::i;:::-;14901:35;;14891:51;;;:::o;14948:90::-;;15025:5;15018:13;15011:21;15000:32;;14990:48;;;:::o;15044:126::-;;15121:42;15114:5;15110:54;15099:65;;15089:81;;;:::o;15176:77::-;;15242:5;15231:16;;15221:32;;;:::o;15259:86::-;;15334:4;15327:5;15323:16;15312:27;;15302:43;;;:::o;15351:307::-;15419:1;15429:113;15443:6;15440:1;15437:13;15429:113;;;15528:1;15523:3;15519:11;15513:18;15509:1;15504:3;15500:11;15493:39;15465:2;15462:1;15458:10;15453:15;;15429:113;;;15560:6;15557:1;15554:13;15551:2;;;15640:1;15631:6;15626:3;15622:16;15615:27;15551:2;15400:258;;;;:::o;15664:320::-;;15745:1;15739:4;15735:12;15725:22;;15792:1;15786:4;15782:12;15813:18;15803:2;;15869:4;15861:6;15857:17;15847:27;;15803:2;15931;15923:6;15920:14;15900:18;15897:38;15894:2;;;15950:18;;:::i;:::-;15894:2;15715:269;;;;:::o;15990:233::-;;16052:24;16070:5;16052:24;:::i;:::-;16043:33;;16098:66;16091:5;16088:77;16085:2;;;16168:18;;:::i;:::-;16085:2;16215:1;16208:5;16204:13;16197:20;;16033:190;;;:::o;16229:180::-;16277:77;16274:1;16267:88;16374:4;16371:1;16364:15;16398:4;16395:1;16388:15;16415:180;16463:77;16460:1;16453:88;16560:4;16557:1;16550:15;16584:4;16581:1;16574:15;16601:180;16649:77;16646:1;16639:88;16746:4;16743:1;16736:15;16770:4;16767:1;16760:15;16787:102;;16879:2;16875:7;16870:2;16863:5;16859:14;16855:28;16845:38;;16835:54;;;:::o;16895:122::-;16968:24;16986:5;16968:24;:::i;:::-;16961:5;16958:35;16948:2;;17007:1;17004;16997:12;16948:2;16938:79;:::o;17023:116::-;17093:21;17108:5;17093:21;:::i;:::-;17086:5;17083:32;17073:2;;17129:1;17126;17119:12;17073:2;17063:76;:::o;17145:122::-;17218:24;17236:5;17218:24;:::i;:::-;17211:5;17208:35;17198:2;;17257:1;17254;17247:12;17198:2;17188:79;:::o

Swarm Source

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