ETH Price: $2,791.20 (+6.34%)

Token

TETHEREUM (T99)
 

Overview

Max Total Supply

9,999,999,999 T99

Holders

185

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
2,008.257839 T99

Value
$0.00
0xab9580Cb53c887069e02BE2BDA1d425e846956bC
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TETHEREUM

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-06-16
*/

/**

████████ ███████ ████████ ██   ██ ███████ ██████  ███████ ██    ██ ███    ███ 
   ██    ██         ██    ██   ██ ██      ██   ██ ██      ██    ██ ████  ████ 
   ██    █████      ██    ███████ █████   ██████  █████   ██    ██ ██ ████ ██ 
   ██    ██         ██    ██   ██ ██      ██   ██ ██      ██    ██ ██  ██  ██ 
   ██    ███████    ██    ██   ██ ███████ ██   ██ ███████  ██████  ██      ██ 
                                                                              
                                                                              
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.6.0;


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

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



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

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

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

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

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

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

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

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



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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender; // if you want to make owner someone else then put 
                            //his address here like this. _owner = 0x123454.......;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
/**
 * 
 * NAME - TETHEREUM
SYMBOL - T99/ if not available; then please let me know i can ask for what the client wants
TOTAL SUPPLY - 9,999,999,999 (1 LESS IN 10 BILLION)
DECIMAL PLACES - 6
OWNERS WALLET ADDRESS - 0xA8dd49B0EFD71913F0E6958c087c398514De9eFf
 * 
 */
contract TETHEREUM is Context, IBEP20, 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 _tTotal = 9999999999 * 10**6;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnAuto;
    uint256 private _tBurnManual;

    string private _name = 'TETHEREUM'; // change this token name
    string private _symbol = 'T99';  // change this Symbol
    uint8 private _decimals = 6;   // change this decimal
    
    uint256 private _taxFee = 2;
    uint256 private _burnFee = 0;
    uint256 private _maxTxAmount = 100000000 * 10**6;  // max trx amount. i also gave a setter function
    
    address public burnAccount;

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    
        function TaxFee() public view returns (uint256) {
        return _taxFee;
    }
    
        function BurnFee() public view returns (uint256) {
        return _burnFee;
    }
    
    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, "BEP20: 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, "BEP20: decreased allowance below zero"));
        return true;
    }

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function totalBurn() public view returns (uint256) {
        return _tBurnAuto + _tBurnManual;
    }

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

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

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

    function excludeAccount(address account) external onlyOwner() {
        require(account != 0xD3ce6898eC2252713F96FC21921cEBfca27501d2, 'We can not exclude Uniswap router.');
        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), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: 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), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        if(sender != owner() && recipient != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

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

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

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

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _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, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 burnFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tBurn = tAmount.mul(burnFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn);
        return (tTransferAmount, tFee, tBurn);
    }

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

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() public view returns(uint256) {
        return _maxTxAmount;
    }
    
    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 0 && taxFee <= 10, 'taxFee should be in 0 - 10');
        _taxFee = taxFee;
    }

    function _setBurnFee(uint256 burnFee) external onlyOwner() {
        require(burnFee >= 0 && burnFee <= 10, 'burnFee should be in 0 - 10');
        _burnFee = burnFee;
    }
    
    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 0 , 'maxTxAmount should be greater than 0');
        _maxTxAmount = maxTxAmount;
    }
    
    event Burn(address indexed _from, uint256 _amount);
    
     /**
     * @dev Destroys `amount` tokens from the caller.
     *
     */
     
     function burn(uint256 amount) public virtual {
        _burn(msg.sender, amount);
    }
     
     
    function _burn(address account, uint256 amount) internal virtual {
        require(account != burnAccount, "ERC20: burn from the burn address");

        uint256 accountBalance = balanceOf(account);
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

        uint256 rAmount =  _getRate();

        // Transfer from account to the burnAccount
        _rOwned[account] -= rAmount;

        _tOwned[burnAccount] += amount;
        _rOwned[burnAccount] += rAmount;

        _tTotal -= amount;

        _tBurnManual += amount;
        
         emit Transfer(account, burnAccount, amount);

    }
        
    }

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":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getMaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"_setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"}]

6080604052662386f26fb1bdc0600655600654600019816200001d57fe5b06600019036007556040518060400160405280600981526020017f54455448455245554d0000000000000000000000000000000000000000000000815250600b90805190602001906200007292919062000289565b506040518060400160405280600381526020017f5439390000000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000c092919062000289565b506006600d60006101000a81548160ff021916908360ff1602179055506002600e556000600f55655af3107a4000601055348015620000fe57600080fd5b506000620001116200028160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060075460016000620001c66200028160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002146200028160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6006546040518082815260200191505060405180910390a36200032f565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002cc57805160ff1916838001178555620002fd565b82800160010185558215620002fd579182015b82811115620002fc578251825591602001919060010190620002df565b5b5090506200030c919062000310565b5090565b5b808211156200032b57600081600090555060010162000311565b5090565b613ffd806200033f6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80635880b87311610104578063b7ee3d03116100a2578063f2fde38b11610071578063f2fde38b146108e8578063f7a915911461092c578063f84354f11461094a578063ffa9aa181461098e576101da565b8063b7ee3d03146107b4578063cba0e996146107d2578063dd62ed3e1461082c578063f2cc0c18146108a4576101da565b80638da5cb5b116100de5780638da5cb5b1461063557806395d89b4114610669578063a457c2d7146106ec578063a9059cbb14610750576101da565b80635880b873146105a557806370a08231146105d3578063715018a61461062b576101da565b8063313ce5671161017c5780633bd5d1731161014b5780633bd5d173146104dd5780633c9f861d1461050b57806342966c68146105295780634549b03914610557576101da565b8063313ce567146103f6578063327b32b814610417578063395093511461044b5780633b6b1961146104af576101da565b806318160ddd116101b857806318160ddd146102e45780631bbae6e01461030257806323b872dd146103305780632d838119146103b4576101da565b806306fdde03146101df578063095ea7b31461026257806313114a9d146102c6575b600080fd5b6101e76109ac565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a4e565b60405180821515815260200191505060405180910390f35b6102ce610a6c565b6040518082815260200191505060405180910390f35b6102ec610a76565b6040518082815260200191505060405180910390f35b61032e6004803603602081101561031857600080fd5b8101908080359060200190929190505050610a80565b005b61039c6004803603606081101561034657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bac565b60405180821515815260200191505060405180910390f35b6103e0600480360360208110156103ca57600080fd5b8101908080359060200190929190505050610c85565b6040518082815260200191505060405180910390f35b6103fe610d09565b604051808260ff16815260200191505060405180910390f35b61041f610d20565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104976004803603604081101561046157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d46565b60405180821515815260200191505060405180910390f35b6104db600480360360208110156104c557600080fd5b8101908080359060200190929190505050610df9565b005b610509600480360360208110156104f357600080fd5b8101908080359060200190929190505050610f4f565b005b6105136110e0565b6040518082815260200191505060405180910390f35b6105556004803603602081101561053f57600080fd5b81019080803590602001909291905050506110ee565b005b61058f6004803603604081101561056d57600080fd5b81019080803590602001909291908035151590602001909291905050506110fb565b6040518082815260200191505060405180910390f35b6105d1600480360360208110156105bb57600080fd5b81019080803590602001909291905050506111b2565b005b610615600480360360208110156105e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611308565b6040518082815260200191505060405180910390f35b6106336113f3565b005b61063d611579565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716115a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106b1578082015181840152602081019050610696565b50505050905090810190601f1680156106de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603604081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611644565b60405180821515815260200191505060405180910390f35b61079c6004803603604081101561076657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611711565b60405180821515815260200191505060405180910390f35b6107bc61172f565b6040518082815260200191505060405180910390f35b610814600480360360208110156107e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611739565b60405180821515815260200191505060405180910390f35b61088e6004803603604081101561084257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061178f565b6040518082815260200191505060405180910390f35b6108e6600480360360208110156108ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611816565b005b61092a600480360360208110156108fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc9565b005b610934611dd4565b6040518082815260200191505060405180910390f35b61098c6004803603602081101561096057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dde565b005b610996612168565b6040518082815260200191505060405180910390f35b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a445780601f10610a1957610100808354040283529160200191610a44565b820191906000526020600020905b815481529060010190602001808311610a2757829003601f168201915b5050505050905090565b6000610a62610a5b612172565b848461217a565b6001905092915050565b6000600854905090565b6000600654905090565b610a88612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811015610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613de56024913960400191505060405180910390fd5b8060108190555050565b6000610bb9848484612371565b610c7a84610bc5612172565b610c7585604051806060016040528060288152602001613e2f60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c2b612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a19092919063ffffffff16565b61217a565b600190509392505050565b6000600754821115610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e7f6026913960400191505060405180910390fd5b6000610cec612961565b9050610d01818461298c90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610def610d53612172565b84610dea8560036000610d64612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b61217a565b6001905092915050565b610e01612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008110158015610ed35750600a8111155b610f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6275726e4665652073686f756c6420626520696e2030202d203130000000000081525060200191505060405180910390fd5b80600f8190555050565b6000610f59612172565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613f7a602c913960400191505060405180910390fd5b600061100983612a5e565b5050505050905061106281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110ba81600754612ac690919063ffffffff16565b6007819055506110d5836008546129d690919063ffffffff16565b600881905550505050565b6000600a5460095401905090565b6110f83382612b10565b50565b6000600654831115611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161119557600061118584612a5e565b50505050509050809150506111ac565b60006111a084612a5e565b50505050915050809150505b92915050565b6111ba612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811015801561128c5750600a8111155b6112fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2030202d20313000000000000081525060200191505060405180910390fd5b80600e8190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113a357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113ee565b6113eb600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c85565b90505b919050565b6113fb612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561163a5780601f1061160f5761010080835404028352916020019161163a565b820191906000526020600020905b81548152906001019060200180831161161d57829003601f168201915b5050505050905090565b6000611707611651612172565b8461170285604051806060016040528060258152602001613f33602591396003600061167b612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a19092919063ffffffff16565b61217a565b6001905092915050565b600061172561171e612172565b8484612371565b6001905092915050565b6000600e54905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61181e612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b73d3ce6898ec2252713f96fc21921cebfca27501d273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611977576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613f586022913960400191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b0b57611ac7600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c85565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bd1612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e096026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601054905090565b611de6612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600580549050811015612164578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611f9957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561215757600560016005805490500381548110611ff557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811061202d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061211d57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612164565b8080600101915050611f68565b5050565b6000600f54905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612200576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d9f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612286576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613fa66022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d7a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561247d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613f106023913960400191505060405180910390fd5b600081116124d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613ee76029913960400191505060405180910390fd5b6124de611579565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561254c575061251c611579565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125ad576010548111156125ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e576028913960400191505060405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126505750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561266557612660838383612e01565b61289c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127085750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561271d5761271883838361307f565b61289b565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127c15750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127d6576127d18383836132fd565b61289a565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128785750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561288d576128888383836134e6565b612899565b6128988383836132fd565b5b5b5b5b505050565b600083831115829061294e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129135780820151818401526020810190506128f8565b50505050905090810190601f1680156129405780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061296e6137f9565b91509150612985818361298c90919063ffffffff16565b9250505090565b60006129ce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a8a565b905092915050565b600080828401905083811015612a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612a7b8a600e54600f54613b50565b9250925092506000612a8b612961565b90506000806000612a9e8e878787613be6565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000612b0883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128a1565b905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ec66021913960400191505060405180910390fd5b6000612bc283611308565b905081811015612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613dc36022913960400191505060405180910390fd5b6000612c27612961565b905080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508260026000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508060016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508260066000828254039250508190555082600a60008282540192505081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350505050565b6000612e0b612961565b9050600080600080600080612e1f88612a5e565b9550955095509550955095506000612e408883613c6f90919063ffffffff16565b9050612e9489600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f2987600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fbe86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300d85828585613cf5565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000613089612961565b905060008060008060008061309d88612a5e565b95509550955095509550955060006130be8883613c6f90919063ffffffff16565b905061311287600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131a784600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323c86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061328b85828585613cf5565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000613307612961565b905060008060008060008061331b88612a5e565b955095509550955095509550600061333c8883613c6f90919063ffffffff16565b905061339087600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061342586600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061347485828585613cf5565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006134f0612961565b905060008060008060008061350488612a5e565b95509550955095509550955060006135258883613c6f90919063ffffffff16565b905061357989600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360e87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136a384600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373886600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061378785828585613cf5565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600080600060075490506000600654905060005b600580549050811015613a4d5782600160006005848154811061382c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061391357508160026000600584815481106138ab57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561392a5760075460065494509450505050613a86565b6139b3600160006005848154811061393e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612ac690919063ffffffff16565b9250613a3e60026000600584815481106139c957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ac690919063ffffffff16565b9150808060010191505061380d565b50613a6560065460075461298c90919063ffffffff16565b821015613a7d57600754600654935093505050613a86565b81819350935050505b9091565b60008083118290613b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613afb578082015181840152602081019050613ae0565b50505050905090810190601f168015613b285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613b4257fe5b049050809150509392505050565b600080600080613b7c6064613b6e888a613c6f90919063ffffffff16565b61298c90919063ffffffff16565b90506000613ba66064613b98888b613c6f90919063ffffffff16565b61298c90919063ffffffff16565b90506000613bcf82613bc1858c612ac690919063ffffffff16565b612ac690919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080613bff8589613c6f90919063ffffffff16565b90506000613c168689613c6f90919063ffffffff16565b90506000613c2d8789613c6f90919063ffffffff16565b90506000613c5682613c488587612ac690919063ffffffff16565b612ac690919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080831415613c825760009050613cef565b6000828402905082848281613c9357fe5b0414613cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ea56021913960400191505060405180910390fd5b809150505b92915050565b613d1c83613d0e86600754612ac690919063ffffffff16565b612ac690919063ffffffff16565b600781905550613d37826008546129d690919063ffffffff16565b600881905550613d52816009546129d690919063ffffffff16565b600981905550613d6d81600654612ac690919063ffffffff16565b6006819055505050505056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63656d61785478416d6f756e742073686f756c642062652067726561746572207468616e20304f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737342455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e416d6f756e74206d757374206265206c657373207468616e20746f74616c2054657374657233536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865206275726e20616464726573735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f42455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f57652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e42455032303a20617070726f766520746f20746865207a65726f2061646472657373a264697066735822122046b8125be6f54bd4bf6c0d2948d930d14007b5dc649b1ffc077b863b31a8065b64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80635880b87311610104578063b7ee3d03116100a2578063f2fde38b11610071578063f2fde38b146108e8578063f7a915911461092c578063f84354f11461094a578063ffa9aa181461098e576101da565b8063b7ee3d03146107b4578063cba0e996146107d2578063dd62ed3e1461082c578063f2cc0c18146108a4576101da565b80638da5cb5b116100de5780638da5cb5b1461063557806395d89b4114610669578063a457c2d7146106ec578063a9059cbb14610750576101da565b80635880b873146105a557806370a08231146105d3578063715018a61461062b576101da565b8063313ce5671161017c5780633bd5d1731161014b5780633bd5d173146104dd5780633c9f861d1461050b57806342966c68146105295780634549b03914610557576101da565b8063313ce567146103f6578063327b32b814610417578063395093511461044b5780633b6b1961146104af576101da565b806318160ddd116101b857806318160ddd146102e45780631bbae6e01461030257806323b872dd146103305780632d838119146103b4576101da565b806306fdde03146101df578063095ea7b31461026257806313114a9d146102c6575b600080fd5b6101e76109ac565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a4e565b60405180821515815260200191505060405180910390f35b6102ce610a6c565b6040518082815260200191505060405180910390f35b6102ec610a76565b6040518082815260200191505060405180910390f35b61032e6004803603602081101561031857600080fd5b8101908080359060200190929190505050610a80565b005b61039c6004803603606081101561034657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610bac565b60405180821515815260200191505060405180910390f35b6103e0600480360360208110156103ca57600080fd5b8101908080359060200190929190505050610c85565b6040518082815260200191505060405180910390f35b6103fe610d09565b604051808260ff16815260200191505060405180910390f35b61041f610d20565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104976004803603604081101561046157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d46565b60405180821515815260200191505060405180910390f35b6104db600480360360208110156104c557600080fd5b8101908080359060200190929190505050610df9565b005b610509600480360360208110156104f357600080fd5b8101908080359060200190929190505050610f4f565b005b6105136110e0565b6040518082815260200191505060405180910390f35b6105556004803603602081101561053f57600080fd5b81019080803590602001909291905050506110ee565b005b61058f6004803603604081101561056d57600080fd5b81019080803590602001909291908035151590602001909291905050506110fb565b6040518082815260200191505060405180910390f35b6105d1600480360360208110156105bb57600080fd5b81019080803590602001909291905050506111b2565b005b610615600480360360208110156105e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611308565b6040518082815260200191505060405180910390f35b6106336113f3565b005b61063d611579565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106716115a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106b1578082015181840152602081019050610696565b50505050905090810190601f1680156106de5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107386004803603604081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611644565b60405180821515815260200191505060405180910390f35b61079c6004803603604081101561076657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611711565b60405180821515815260200191505060405180910390f35b6107bc61172f565b6040518082815260200191505060405180910390f35b610814600480360360208110156107e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611739565b60405180821515815260200191505060405180910390f35b61088e6004803603604081101561084257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061178f565b6040518082815260200191505060405180910390f35b6108e6600480360360208110156108ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611816565b005b61092a600480360360208110156108fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc9565b005b610934611dd4565b6040518082815260200191505060405180910390f35b61098c6004803603602081101561096057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dde565b005b610996612168565b6040518082815260200191505060405180910390f35b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a445780601f10610a1957610100808354040283529160200191610a44565b820191906000526020600020905b815481529060010190602001808311610a2757829003601f168201915b5050505050905090565b6000610a62610a5b612172565b848461217a565b6001905092915050565b6000600854905090565b6000600654905090565b610a88612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811015610ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613de56024913960400191505060405180910390fd5b8060108190555050565b6000610bb9848484612371565b610c7a84610bc5612172565b610c7585604051806060016040528060288152602001613e2f60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c2b612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a19092919063ffffffff16565b61217a565b600190509392505050565b6000600754821115610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e7f6026913960400191505060405180910390fd5b6000610cec612961565b9050610d01818461298c90919063ffffffff16565b915050919050565b6000600d60009054906101000a900460ff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610def610d53612172565b84610dea8560036000610d64612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b61217a565b6001905092915050565b610e01612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008110158015610ed35750600a8111155b610f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6275726e4665652073686f756c6420626520696e2030202d203130000000000081525060200191505060405180910390fd5b80600f8190555050565b6000610f59612172565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ffe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613f7a602c913960400191505060405180910390fd5b600061100983612a5e565b5050505050905061106281600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110ba81600754612ac690919063ffffffff16565b6007819055506110d5836008546129d690919063ffffffff16565b600881905550505050565b6000600a5460095401905090565b6110f83382612b10565b50565b6000600654831115611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161119557600061118584612a5e565b50505050509050809150506111ac565b60006111a084612a5e565b50505050915050809150505b92915050565b6111ba612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000811015801561128c5750600a8111155b6112fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2030202d20313000000000000081525060200191505060405180910390fd5b80600e8190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113a357600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506113ee565b6113eb600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c85565b90505b919050565b6113fb612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561163a5780601f1061160f5761010080835404028352916020019161163a565b820191906000526020600020905b81548152906001019060200180831161161d57829003601f168201915b5050505050905090565b6000611707611651612172565b8461170285604051806060016040528060258152602001613f33602591396003600061167b612172565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a19092919063ffffffff16565b61217a565b6001905092915050565b600061172561171e612172565b8484612371565b6001905092915050565b6000600e54905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61181e612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b73d3ce6898ec2252713f96fc21921cebfca27501d273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611977576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613f586022913960400191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611a37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b0b57611ac7600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c85565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bd1612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e096026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601054905090565b611de6612172565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600580549050811015612164578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611f9957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561215757600560016005805490500381548110611ff557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811061202d57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600580548061211d57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612164565b8080600101915050611f68565b5050565b6000600f54905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612200576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d9f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612286576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613fa66022913960400191505060405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d7a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561247d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613f106023913960400191505060405180910390fd5b600081116124d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613ee76029913960400191505060405180910390fd5b6124de611579565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561254c575061251c611579565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125ad576010548111156125ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613e576028913960400191505060405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126505750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561266557612660838383612e01565b61289c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127085750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561271d5761271883838361307f565b61289b565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127c15750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127d6576127d18383836132fd565b61289a565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128785750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561288d576128888383836134e6565b612899565b6128988383836132fd565b5b5b5b5b505050565b600083831115829061294e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129135780820151818401526020810190506128f8565b50505050905090810190601f1680156129405780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061296e6137f9565b91509150612985818361298c90919063ffffffff16565b9250505090565b60006129ce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a8a565b905092915050565b600080828401905083811015612a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612a7b8a600e54600f54613b50565b9250925092506000612a8b612961565b90506000806000612a9e8e878787613be6565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000612b0883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128a1565b905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ec66021913960400191505060405180910390fd5b6000612bc283611308565b905081811015612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613dc36022913960400191505060405180910390fd5b6000612c27612961565b905080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508260026000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508060016000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508260066000828254039250508190555082600a60008282540192505081905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350505050565b6000612e0b612961565b9050600080600080600080612e1f88612a5e565b9550955095509550955095506000612e408883613c6f90919063ffffffff16565b9050612e9489600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f2987600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fbe86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061300d85828585613cf5565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000613089612961565b905060008060008060008061309d88612a5e565b95509550955095509550955060006130be8883613c6f90919063ffffffff16565b905061311287600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131a784600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061323c86600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061328b85828585613cf5565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000613307612961565b905060008060008060008061331b88612a5e565b955095509550955095509550600061333c8883613c6f90919063ffffffff16565b905061339087600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061342586600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061347485828585613cf5565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006134f0612961565b905060008060008060008061350488612a5e565b95509550955095509550955060006135258883613c6f90919063ffffffff16565b905061357989600260008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061360e87600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac690919063ffffffff16565b600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136a384600260008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373886600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d690919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061378785828585613cf5565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600080600060075490506000600654905060005b600580549050811015613a4d5782600160006005848154811061382c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061391357508160026000600584815481106138ab57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561392a5760075460065494509450505050613a86565b6139b3600160006005848154811061393e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612ac690919063ffffffff16565b9250613a3e60026000600584815481106139c957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612ac690919063ffffffff16565b9150808060010191505061380d565b50613a6560065460075461298c90919063ffffffff16565b821015613a7d57600754600654935093505050613a86565b81819350935050505b9091565b60008083118290613b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613afb578082015181840152602081019050613ae0565b50505050905090810190601f168015613b285780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613b4257fe5b049050809150509392505050565b600080600080613b7c6064613b6e888a613c6f90919063ffffffff16565b61298c90919063ffffffff16565b90506000613ba66064613b98888b613c6f90919063ffffffff16565b61298c90919063ffffffff16565b90506000613bcf82613bc1858c612ac690919063ffffffff16565b612ac690919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080613bff8589613c6f90919063ffffffff16565b90506000613c168689613c6f90919063ffffffff16565b90506000613c2d8789613c6f90919063ffffffff16565b90506000613c5682613c488587612ac690919063ffffffff16565b612ac690919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080831415613c825760009050613cef565b6000828402905082848281613c9357fe5b0414613cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ea56021913960400191505060405180910390fd5b809150505b92915050565b613d1c83613d0e86600754612ac690919063ffffffff16565b612ac690919063ffffffff16565b600781905550613d37826008546129d690919063ffffffff16565b600881905550613d52816009546129d690919063ffffffff16565b600981905550613d6d81600654612ac690919063ffffffff16565b6006819055505050505056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63656d61785478416d6f756e742073686f756c642062652067726561746572207468616e20304f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737342455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e416d6f756e74206d757374206265206c657373207468616e20746f74616c2054657374657233536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865206275726e20616464726573735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f42455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f57652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e42455032303a20617070726f766520746f20746865207a65726f2061646472657373a264697066735822122046b8125be6f54bd4bf6c0d2948d930d14007b5dc649b1ffc077b863b31a8065b64736f6c634300060c0033

Deployed Bytecode Sourcemap

18565:13664:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19762:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20874:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21985:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20039:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31107:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21043:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23019:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19948:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19588:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21364:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30919:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22190:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22080:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31461:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22575:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30742:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20342:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17738:148;;;:::i;:::-;;17096:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19853:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21590:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20548:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20150:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21867:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20723:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23276:443;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18041:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30636:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23727:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20247:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19762;19799:13;19832:5;19825:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19762:83;:::o;20874:161::-;20949:4;20966:39;20975:12;:10;:12::i;:::-;20989:7;20998:6;20966:8;:39::i;:::-;21023:4;21016:11;;20874:161;;;;:::o;21985:87::-;22027:7;22054:10;;22047:17;;21985:87;:::o;20039:95::-;20092:7;20119;;20112:14;;20039:95;:::o;31107:189::-;17318:12;:10;:12::i;:::-;17308:22;;:6;;;;;;;;;;:22;;;17300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31208:1:::1;31193:11;:16;;31185:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31277:11;31262:12;:26;;;;31107:189:::0;:::o;21043:313::-;21141:4;21158:36;21168:6;21176:9;21187:6;21158:9;:36::i;:::-;21205:121;21214:6;21222:12;:10;:12::i;:::-;21236:89;21274:6;21236:89;;;;;;;;;;;;;;;;;:11;:19;21248:6;21236:19;;;;;;;;;;;;;;;:33;21256:12;:10;:12::i;:::-;21236:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21205:8;:121::i;:::-;21344:4;21337:11;;21043:313;;;;;:::o;23019:249::-;23085:7;23124;;23113;:18;;23105:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23185:19;23208:10;:8;:10::i;:::-;23185:33;;23236:24;23248:11;23236:7;:11;;:24;;;;:::i;:::-;23229:31;;;23019:249;;;:::o;19948:83::-;19989:5;20014:9;;;;;;;;;;;20007:16;;19948:83;:::o;19588:26::-;;;;;;;;;;;;;:::o;21364:218::-;21452:4;21469:83;21478:12;:10;:12::i;:::-;21492:7;21501:50;21540:10;21501:11;:25;21513:12;:10;:12::i;:::-;21501:25;;;;;;;;;;;;;;;:34;21527:7;21501:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;21469:8;:83::i;:::-;21570:4;21563:11;;21364:218;;;;:::o;30919:176::-;17318:12;:10;:12::i;:::-;17308:22;;:6;;;;;;;;;;:22;;;17300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31008:1:::1;30997:7;:12;;:29;;;;;31024:2;31013:7;:13;;30997:29;30989:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31080:7;31069:8;:18;;;;30919:176:::0;:::o;22190:377::-;22242:14;22259:12;:10;:12::i;:::-;22242:29;;22291:11;:19;22303:6;22291:19;;;;;;;;;;;;;;;;;;;;;;;;;22290:20;22282:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22371:15;22395:19;22406:7;22395:10;:19::i;:::-;22370:44;;;;;;;22443:28;22463:7;22443;:15;22451:6;22443:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;22425:7;:15;22433:6;22425:15;;;;;;;;;;;;;;;:46;;;;22492:20;22504:7;22492;;:11;;:20;;;;:::i;:::-;22482:7;:30;;;;22536:23;22551:7;22536:10;;:14;;:23;;;;:::i;:::-;22523:10;:36;;;;22190:377;;;:::o;22080:102::-;22122:7;22162:12;;22149:10;;:25;22142:32;;22080:102;:::o;31461:89::-;31517:25;31523:10;31535:6;31517:5;:25::i;:::-;31461:89;:::o;22575:436::-;22665:7;22704;;22693;:18;;22685:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22763:17;22758:246;;22798:15;22822:19;22833:7;22822:10;:19::i;:::-;22797:44;;;;;;;22863:7;22856:14;;;;;22758:246;22905:23;22936:19;22947:7;22936:10;:19::i;:::-;22903:52;;;;;;;22977:15;22970:22;;;22575:436;;;;;:::o;30742:169::-;17318:12;:10;:12::i;:::-;17308:22;;:6;;;;;;;;;;:22;;;17300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30828:1:::1;30818:6;:11;;:27;;;;;30843:2;30833:6;:12;;30818:27;30810:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30897:6;30887:7;:16;;;;30742:169:::0;:::o;20342:198::-;20408:7;20432:11;:20;20444:7;20432:20;;;;;;;;;;;;;;;;;;;;;;;;;20428:49;;;20461:7;:16;20469:7;20461:16;;;;;;;;;;;;;;;;20454:23;;;;20428:49;20495:37;20515:7;:16;20523:7;20515:16;;;;;;;;;;;;;;;;20495:19;:37::i;:::-;20488:44;;20342:198;;;;:::o;17738:148::-;17318:12;:10;:12::i;:::-;17308:22;;:6;;;;;;;;;;:22;;;17300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17845:1:::1;17808:40;;17829:6;::::0;::::1;;;;;;;;17808:40;;;;;;;;;;;;17876:1;17859:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17738:148::o:0;17096:79::-;17134:7;17161:6;;;;;;;;;;;17154:13;;17096:79;:::o;19853:87::-;19892:13;19925:7;19918:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19853:87;:::o;21590:269::-;21683:4;21700:129;21709:12;:10;:12::i;:::-;21723:7;21732:96;21771:15;21732:96;;;;;;;;;;;;;;;;;:11;:25;21744:12;:10;:12::i;:::-;21732:25;;;;;;;;;;;;;;;:34;21758:7;21732:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;21700:8;:129::i;:::-;21847:4;21840:11;;21590:269;;;;:::o;20548:167::-;20626:4;20643:42;20653:12;:10;:12::i;:::-;20667:9;20678:6;20643:9;:42::i;:::-;20703:4;20696:11;;20548:167;;;;:::o;20150:81::-;20189:7;20216;;20209:14;;20150:81;:::o;21867:110::-;21925:4;21949:11;:20;21961:7;21949:20;;;;;;;;;;;;;;;;;;;;;;;;;21942:27;;21867:110;;;:::o;20723:143::-;20804:7;20831:11;:18;20843:5;20831:18;;;;;;;;;;;;;;;:27;20850:7;20831:27;;;;;;;;;;;;;;;;20824:34;;20723:143;;;;:::o;23276:443::-;17318:12;:10;:12::i;:::-;17308:22;;:6;;;;;;;;;;:22;;;17300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23368:42:::1;23357:53;;:7;:53;;;;23349:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23469:11;:20;23481:7;23469:20;;;;;;;;;;;;;;;;;;;;;;;;;23468:21;23460:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23554:1;23535:7;:16;23543:7;23535:16;;;;;;;;;;;;;;;;:20;23532:108;;;23591:37;23611:7;:16;23619:7;23611:16;;;;;;;;;;;;;;;;23591:19;:37::i;:::-;23572:7;:16;23580:7;23572:16;;;;;;;;;;;;;;;:56;;;;23532:108;23673:4;23650:11;:20;23662:7;23650:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23688:9;23703:7;23688:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23276:443:::0;:::o;18041:244::-;17318:12;:10;:12::i;:::-;17308:22;;:6;;;;;;;;;;:22;;;17300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18150:1:::1;18130:22;;:8;:22;;;;18122:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18240:8;18211:38;;18232:6;::::0;::::1;;;;;;;;18211:38;;;;;;;;;;;;18269:8;18260:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18041:244:::0;:::o;30636:94::-;30683:7;30710:12;;30703:19;;30636:94;:::o;23727:478::-;17318:12;:10;:12::i;:::-;17308:22;;:6;;;;;;;;;;:22;;;17300:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23808:11:::1;:20;23820:7;23808:20;;;;;;;;;;;;;;;;;;;;;;;;;23800:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23876:9;23871:327;23895:9;:16;;;;23891:1;:20;23871:327;;;23953:7;23937:23;;:9;23947:1;23937:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;23933:254;;;23996:9;24025:1;24006:9;:16;;;;:20;23996:31;;;;;;;;;;;;;;;;;;;;;;;;;23981:9;23991:1;23981:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24065:1;24046:7;:16;24054:7;24046:16;;;;;;;;;;;;;;;:20;;;;24108:5;24085:11;:20;24097:7;24085:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24132:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24166:5;;23933:254;23913:3;;;;;;;23871:327;;;;23727:478:::0;:::o;20247:83::-;20287:7;20314:8;;20307:15;;20247:83;:::o;1417:106::-;1470:15;1505:10;1498:17;;1417:106;:::o;24213:337::-;24323:1;24306:19;;:5;:19;;;;24298:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24404:1;24385:21;;:7;:21;;;;24377:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24488:6;24458:11;:18;24470:5;24458:18;;;;;;;;;;;;;;;:27;24477:7;24458:27;;;;;;;;;;;;;;;:36;;;;24526:7;24510:32;;24519:5;24510:32;;;24535:6;24510:32;;;;;;;;;;;;;;;;;;24213:337;;;:::o;24558:1096::-;24673:1;24655:20;;:6;:20;;;;24647:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24757:1;24736:23;;:9;:23;;;;24728:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24827:1;24818:6;:10;24810:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24908:7;:5;:7::i;:::-;24898:17;;:6;:17;;;;:41;;;;;24932:7;:5;:7::i;:::-;24919:20;;:9;:20;;;;24898:41;24895:134;;;24972:12;;24962:6;:22;;24954:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24895:134;25054:11;:19;25066:6;25054:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;25078:11;:22;25090:9;25078:22;;;;;;;;;;;;;;;;;;;;;;;;;25077:23;25054:46;25050:597;;;25117:48;25139:6;25147:9;25158:6;25117:21;:48::i;:::-;25050:597;;;25188:11;:19;25200:6;25188:19;;;;;;;;;;;;;;;;;;;;;;;;;25187:20;:46;;;;;25211:11;:22;25223:9;25211:22;;;;;;;;;;;;;;;;;;;;;;;;;25187:46;25183:464;;;25250:46;25270:6;25278:9;25289:6;25250:19;:46::i;:::-;25183:464;;;25319:11;:19;25331:6;25319:19;;;;;;;;;;;;;;;;;;;;;;;;;25318:20;:47;;;;;25343:11;:22;25355:9;25343:22;;;;;;;;;;;;;;;;;;;;;;;;;25342:23;25318:47;25314:333;;;25382:44;25400:6;25408:9;25419:6;25382:17;:44::i;:::-;25314:333;;;25448:11;:19;25460:6;25448:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;25471:11;:22;25483:9;25471:22;;;;;;;;;;;;;;;;;;;;;;;;;25448:45;25444:203;;;25510:48;25532:6;25540:9;25551:6;25510:21;:48::i;:::-;25444:203;;;25591:44;25609:6;25617:9;25628:6;25591:17;:44::i;:::-;25444:203;25314:333;25183:464;25050:597;24558:1096;;;:::o;6235:192::-;6321:7;6354:1;6349;:6;;6357:12;6341:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6381:9;6397:1;6393;:5;6381:17;;6418:1;6411:8;;;6235:192;;;;;:::o;29799:163::-;29840:7;29861:15;29878;29897:19;:17;:19::i;:::-;29860:56;;;;29934:20;29946:7;29934;:11;;:20;;;;:::i;:::-;29927:27;;;;29799:163;:::o;7633:132::-;7691:7;7718:39;7722:1;7725;7718:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7711:46;;7633:132;;;;:::o;5332:181::-;5390:7;5410:9;5426:1;5422;:5;5410:17;;5451:1;5446;:6;;5438:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5504:1;5497:8;;;5332:181;;;;:::o;28547:468::-;28606:7;28615;28624;28633;28642;28651;28672:23;28697:12;28711:13;28728:39;28740:7;28749;;28758:8;;28728:11;:39::i;:::-;28671:96;;;;;;28778:19;28801:10;:8;:10::i;:::-;28778:33;;28823:15;28840:23;28865:12;28881:46;28893:7;28902:4;28908:5;28915:11;28881;:46::i;:::-;28822:105;;;;;;28946:7;28955:15;28972:4;28978:15;28995:4;29001:5;28938:69;;;;;;;;;;;;;;;;;;;28547:468;;;;;;;:::o;5796:136::-;5854:7;5881:43;5885:1;5888;5881:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5874:50;;5796:136;;;;:::o;31570:642::-;31665:11;;;;;;;;;;;31654:22;;:7;:22;;;;31646:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31727:22;31752:18;31762:7;31752:9;:18::i;:::-;31727:43;;31807:6;31789:14;:24;;31781:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31865:15;31884:10;:8;:10::i;:::-;31865:29;;31980:7;31960;:16;31968:7;31960:16;;;;;;;;;;;;;;;;:27;;;;;;;;;;;32024:6;32000:7;:20;32008:11;;;;;;;;;;;32000:20;;;;;;;;;;;;;;;;:30;;;;;;;;;;;32065:7;32041;:20;32049:11;;;;;;;;;;;32041:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;32096:6;32085:7;;:17;;;;;;;;;;;32131:6;32115:12;;:22;;;;;;;;;;;32182:11;;;;;;;;;;;32164:38;;32173:7;32164:38;;;32195:6;32164:38;;;;;;;;;;;;;;;;;;31570:642;;;;:::o;26911:632::-;27013:19;27036:10;:8;:10::i;:::-;27013:33;;27058:15;27075:23;27100:12;27114:23;27139:12;27153:13;27170:19;27181:7;27170:10;:19::i;:::-;27057:132;;;;;;;;;;;;27200:13;27217:22;27227:11;27217:5;:9;;:22;;;;:::i;:::-;27200:39;;27268:28;27288:7;27268;:15;27276:6;27268:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27250:7;:15;27258:6;27250:15;;;;;;;;;;;;;;;:46;;;;27325:28;27345:7;27325;:15;27333:6;27325:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27307:7;:15;27315:6;27307:15;;;;;;;;;;;;;;;:46;;;;27385:39;27408:15;27385:7;:18;27393:9;27385:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27364:7;:18;27372:9;27364:18;;;;;;;;;;;;;;;:60;;;;27438:37;27450:4;27456:5;27463:4;27469:5;27438:11;:37::i;:::-;27508:9;27491:44;;27500:6;27491:44;;;27519:15;27491:44;;;;;;;;;;;;;;;;;;26911:632;;;;;;;;;;;:::o;26251:652::-;26351:19;26374:10;:8;:10::i;:::-;26351:33;;26396:15;26413:23;26438:12;26452:23;26477:12;26491:13;26508:19;26519:7;26508:10;:19::i;:::-;26395:132;;;;;;;;;;;;26538:13;26555:22;26565:11;26555:5;:9;;:22;;;;:::i;:::-;26538:39;;26606:28;26626:7;26606;:15;26614:6;26606:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26588:7;:15;26596:6;26588:15;;;;;;;;;;;;;;;:46;;;;26666:39;26689:15;26666:7;:18;26674:9;26666:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26645:7;:18;26653:9;26645:18;;;;;;;;;;;;;;;:60;;;;26737:39;26760:15;26737:7;:18;26745:9;26737:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26716:7;:18;26724:9;26716:18;;;;;;;;;;;;;;;:60;;;;26798:37;26810:4;26816:5;26823:4;26829:5;26798:11;:37::i;:::-;26868:9;26851:44;;26860:6;26851:44;;;26879:15;26851:44;;;;;;;;;;;;;;;;;;26251:652;;;;;;;;;;;:::o;25668:575::-;25766:19;25789:10;:8;:10::i;:::-;25766:33;;25811:15;25828:23;25853:12;25867:23;25892:12;25906:13;25923:19;25934:7;25923:10;:19::i;:::-;25810:132;;;;;;;;;;;;25953:13;25970:22;25980:11;25970:5;:9;;:22;;;;:::i;:::-;25953:39;;26021:28;26041:7;26021;:15;26029:6;26021:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26003:7;:15;26011:6;26003:15;;;;;;;;;;;;;;;:46;;;;26081:39;26104:15;26081:7;:18;26089:9;26081:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26060:7;:18;26068:9;26060:18;;;;;;;;;;;;;;;:60;;;;26138:37;26150:4;26156:5;26163:4;26169:5;26138:11;:37::i;:::-;26208:9;26191:44;;26200:6;26191:44;;;26219:15;26191:44;;;;;;;;;;;;;;;;;;25668:575;;;;;;;;;;;:::o;27551:708::-;27653:19;27676:10;:8;:10::i;:::-;27653:33;;27698:15;27715:23;27740:12;27754:23;27779:12;27793:13;27810:19;27821:7;27810:10;:19::i;:::-;27697:132;;;;;;;;;;;;27840:13;27857:22;27867:11;27857:5;:9;;:22;;;;:::i;:::-;27840:39;;27908:28;27928:7;27908;:15;27916:6;27908:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27890:7;:15;27898:6;27890:15;;;;;;;;;;;;;;;:46;;;;27965:28;27985:7;27965;:15;27973:6;27965:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27947:7;:15;27955:6;27947:15;;;;;;;;;;;;;;;:46;;;;28025:39;28048:15;28025:7;:18;28033:9;28025:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28004:7;:18;28012:9;28004:18;;;;;;;;;;;;;;;:60;;;;28096:39;28119:15;28096:7;:18;28104:9;28096:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28075:7;:18;28083:9;28075:18;;;;;;;;;;;;;;;:60;;;;28154:37;28166:4;28172:5;28179:4;28185:5;28154:11;:37::i;:::-;28224:9;28207:44;;28216:6;28207:44;;;28235:15;28207:44;;;;;;;;;;;;;;;;;;27551:708;;;;;;;;;;;:::o;29970:561::-;30020:7;30029;30049:15;30067:7;;30049:25;;30085:15;30103:7;;30085:25;;30132:9;30127:289;30151:9;:16;;;;30147:1;:20;30127:289;;;30217:7;30193;:21;30201:9;30211:1;30201:12;;;;;;;;;;;;;;;;;;;;;;;;;30193:21;;;;;;;;;;;;;;;;:31;:66;;;;30252:7;30228;:21;30236:9;30246:1;30236:12;;;;;;;;;;;;;;;;;;;;;;;;;30228:21;;;;;;;;;;;;;;;;:31;30193:66;30189:97;;;30269:7;;30278;;30261:25;;;;;;;;;30189:97;30311:34;30323:7;:21;30331:9;30341:1;30331:12;;;;;;;;;;;;;;;;;;;;;;;;;30323:21;;;;;;;;;;;;;;;;30311:7;:11;;:34;;;;:::i;:::-;30301:44;;30370:34;30382:7;:21;30390:9;30400:1;30390:12;;;;;;;;;;;;;;;;;;;;;;;;;30382:21;;;;;;;;;;;;;;;;30370:7;:11;;:34;;;;:::i;:::-;30360:44;;30169:3;;;;;;;30127:289;;;;30440:20;30452:7;;30440;;:11;;:20;;;;:::i;:::-;30430:7;:30;30426:61;;;30470:7;;30479;;30462:25;;;;;;;;30426:61;30506:7;30515;30498:25;;;;;;29970:561;;;:::o;8261:278::-;8347:7;8379:1;8375;:5;8382:12;8367:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8406:9;8422:1;8418;:5;;;;;;8406:17;;8530:1;8523:8;;;8261:278;;;;;:::o;29023:351::-;29116:7;29125;29134;29154:12;29169:28;29193:3;29169:19;29181:6;29169:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;29154:43;;29208:13;29224:29;29249:3;29224:20;29236:7;29224;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;29208:45;;29264:23;29290:28;29312:5;29290:17;29302:4;29290:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;29264:54;;29337:15;29354:4;29360:5;29329:37;;;;;;;;;29023:351;;;;;;;:::o;29382:409::-;29492:7;29501;29510;29530:15;29548:24;29560:11;29548:7;:11;;:24;;;;:::i;:::-;29530:42;;29583:12;29598:21;29607:11;29598:4;:8;;:21;;;;:::i;:::-;29583:36;;29630:13;29646:22;29656:11;29646:5;:9;;:22;;;;:::i;:::-;29630:38;;29679:23;29705:28;29727:5;29705:17;29717:4;29705:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;29679:54;;29752:7;29761:15;29778:4;29744:39;;;;;;;;;;29382:409;;;;;;;;:::o;6686:471::-;6744:7;6994:1;6989;:6;6985:47;;;7019:1;7012:8;;;;6985:47;7044:9;7060:1;7056;:5;7044:17;;7089:1;7084;7080;:5;;;;;;:10;7072:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7148:1;7141:8;;;6686:471;;;;;:::o;28267:272::-;28375:28;28397:5;28375:17;28387:4;28375:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;28365:7;:38;;;;28427:20;28442:4;28427:10;;:14;;:20;;;;:::i;:::-;28414:10;:33;;;;28471:21;28486:5;28471:10;;:14;;:21;;;;:::i;:::-;28458:10;:34;;;;28513:18;28525:5;28513:7;;:11;;:18;;;;:::i;:::-;28503:7;:28;;;;28267:272;;;;:::o

Swarm Source

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