ETH Price: $3,688.08 (+2.42%)

Contract

0x4f5704D9D2cbCcAf11e70B34048d41A0d572993F
 

Overview

ETH Balance

6.99922729473246814 ETH

Eth Value

$25,813.69 (@ $3,688.08/ETH)

Multichain Info

No addresses found
Amount:Between 1-100k
Reset Filter
Transaction Hash
Method
Block
From
To
Deposit To132477472021-09-18 5:17:261169 days ago1631942246IN
0x4f5704D9...0d572993F
1.11070343 ETH0.0016188356.51754035
Deposit119503842021-03-01 5:13:001370 days ago1614575580IN
0x4f5704D9...0d572993F
1 ETH0.00584814133.00000145
Deposit119229722021-02-25 0:05:221374 days ago1614211522IN
0x4f5704D9...0d572993F
2 ETH0.00628785143
Deposit119058342021-02-22 8:47:101377 days ago1613983630IN
0x4f5704D9...0d572993F
1 ETH0.0034939120.6
Deposit119058272021-02-22 8:45:431377 days ago1613983543IN
0x4f5704D9...0d572993F
1 ETH0.00540843123
Deposit119058202021-02-22 8:44:031377 days ago1613983443IN
0x4f5704D9...0d572993F
1.24 ETH0.00593608135.00000134
Deposit119058162021-02-22 8:43:081377 days ago1613983388IN
0x4f5704D9...0d572993F
1 ETH0.0053029120.6
Deposit119056812021-02-22 8:11:261377 days ago1613981486IN
0x4f5704D9...0d572993F
5 ETH0.00518857118
Deposit119056482021-02-22 8:02:231377 days ago1613980943IN
0x4f5704D9...0d572993F
1 ETH0.00589211134
Deposit119027732021-02-21 21:31:101377 days ago1613943070IN
0x4f5704D9...0d572993F
1.1 ETH0.00668359152
VIEW ADVANCED FILTER

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
211680242024-11-12 0:28:1118 days ago1731371291
0x4f5704D9...0d572993F
6.9 ETH
211680242024-11-12 0:28:1118 days ago1731371291
0x4f5704D9...0d572993F
6.9 ETH
211032682024-11-02 23:35:1127 days ago1730590511
0x4f5704D9...0d572993F
6.9 ETH
211032682024-11-02 23:35:1127 days ago1730590511
0x4f5704D9...0d572993F
6.9 ETH
210885792024-10-31 22:21:4729 days ago1730413307
0x4f5704D9...0d572993F
6.9 ETH
210885792024-10-31 22:21:4729 days ago1730413307
0x4f5704D9...0d572993F
6.9 ETH
207860932024-09-19 17:20:2372 days ago1726766423
0x4f5704D9...0d572993F
0.29756313 ETH
202934172024-07-12 22:29:23140 days ago1720823363
0x4f5704D9...0d572993F
0.40335543 ETH
197489472024-04-27 20:07:47216 days ago1714248467
0x4f5704D9...0d572993F
0.00648986 ETH
197041302024-04-21 13:39:11223 days ago1713706751
0x4f5704D9...0d572993F
0.07 ETH
196831052024-04-18 15:01:47226 days ago1713452507
0x4f5704D9...0d572993F
0.15 ETH
196613002024-04-15 13:46:59229 days ago1713188819
0x4f5704D9...0d572993F
0.1 ETH
196464952024-04-13 11:57:11231 days ago1713009431
0x4f5704D9...0d572993F
0.01607536 ETH
196444002024-04-13 4:53:59231 days ago1712984039
0x4f5704D9...0d572993F
0.21421129 ETH
196439662024-04-13 3:26:11231 days ago1712978771
0x4f5704D9...0d572993F
0.05385502 ETH
196437602024-04-13 2:44:35231 days ago1712976275
0x4f5704D9...0d572993F
0.05953524 ETH
196437582024-04-13 2:44:11231 days ago1712976251
0x4f5704D9...0d572993F
0.05953524 ETH
196437392024-04-13 2:40:23231 days ago1712976023
0x4f5704D9...0d572993F
0.015 ETH
196437362024-04-13 2:39:47231 days ago1712975987
0x4f5704D9...0d572993F
0.00468653 ETH
196437322024-04-13 2:38:59231 days ago1712975939
0x4f5704D9...0d572993F
0.00312636 ETH
196437242024-04-13 2:37:23231 days ago1712975843
0x4f5704D9...0d572993F
0.00156564 ETH
196436262024-04-13 2:17:23231 days ago1712974643
0x4f5704D9...0d572993F
0.32844363 ETH
196436262024-04-13 2:17:23231 days ago1712974643
0x4f5704D9...0d572993F
0.00000103 ETH
196436262024-04-13 2:17:23231 days ago1712974643
0x4f5704D9...0d572993F
0.00000103 ETH
196436262024-04-13 2:17:23231 days ago1712974643
0x4f5704D9...0d572993F
0.00000172 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WETH10

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-22
*/

// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2015, 2016, 2017 Dapphub
// Adapted by Ethereum Community 2020
pragma solidity 0.7.6;



interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function decimals() external returns (uint8);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}



interface IERC2612 {
    /**
     * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
}

interface IERC3156FlashBorrower {

    /**
     * @dev Receive a flash loan.
     * @param initiator The initiator of the loan.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @param fee The additional amount of tokens to repay.
     * @param data Arbitrary data structure, intended to contain user-defined parameters.
     * @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan"
     */
    function onFlashLoan(
        address initiator,
        address token,
        uint256 amount,
        uint256 fee,
        bytes calldata data
    ) external returns (bytes32);
}


interface IERC3156FlashLender {

    /**
     * @dev The amount of currency available to be lended.
     * @param token The loan currency.
     * @return The amount of `token` that can be borrowed.
     */
    function maxFlashLoan(
        address token
    ) external view returns (uint256);

    /**
     * @dev The fee to be charged for a given loan.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @return The amount of `token` to be charged for the loan, on top of the returned principal.
     */
    function flashFee(
        address token,
        uint256 amount
    ) external view returns (uint256);

    /**
     * @dev Initiate a flash loan.
     * @param receiver The receiver of the tokens in the loan, and the receiver of the callback.
     * @param token The loan currency.
     * @param amount The amount of tokens lent.
     * @param data Arbitrary data structure, intended to contain user-defined parameters.
     */
    function flashLoan(
        IERC3156FlashBorrower receiver,
        address token,
        uint256 amount,
        bytes calldata data
    ) external returns (bool);
}

/// @dev Wrapped Ether v10 (WETH10) is an Ether (ETH) ERC-20 wrapper. You can `deposit` ETH and obtain an WETH10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ETH from WETH10, which will then burn WETH10 token in your wallet. The amount of WETH10 token in any wallet is always identical to the
/// balance of ETH deposited minus the ETH withdrawn with that specific wallet.
interface IWETH10 is IERC20, IERC2612, IERC3156FlashLender {

    /// @dev Returns current amount of flash-minted WETH10 token.
    function flashMinted() external view returns(uint256);

    /// @dev `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account.
    function deposit() external payable;

    /// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to `to` account.
    function depositTo(address to) external payable;

    /// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to the same.
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account. 
    /// Requirements:
    ///   - caller account must have at least `value` balance of WETH10 token.
    function withdraw(uint256 value) external;

    /// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to account (`to`).
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account.
    /// Requirements:
    ///   - caller account must have at least `value` balance of WETH10 token.
    function withdrawTo(address payable to, uint256 value) external;

    /// @dev Burn `value` WETH10 token from account (`from`) and withdraw matching ETH to account (`to`).
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from account (`from`).
    /// Requirements:
    ///   - `from` account must have at least `value` balance of WETH10 token.
    ///   - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account.
    function withdrawFrom(address from, address payable to, uint256 value) external;

    /// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on *transferAndCall* format, see https://github.com/ethereum/EIPs/issues/677.
    function depositToAndCall(address to, bytes calldata data) external payable returns (bool);

    /// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` WETH10 token from caller's account to account (`to`), 
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WETH10 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

/// @dev Wrapped Ether v10 (WETH10) is an Ether (ETH) ERC-20 wrapper. You can `deposit` ETH and obtain an WETH10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ETH from WETH10, which will then burn WETH10 token in your wallet. The amount of WETH10 token in any wallet is always identical to the
/// balance of ETH deposited minus the ETH withdrawn with that specific wallet.
contract WETH10 is IWETH10 {

    string public constant name = "WETH10";
    string public constant symbol = "WETH10";
    uint8  public override constant decimals = 18;

    bytes32 public immutable CALLBACK_SUCCESS = keccak256("ERC3156FlashBorrower.onFlashLoan");
    bytes32 public immutable PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    /// @dev Records amount of WETH10 token owned by account.
    mapping (address => uint256) public override balanceOf;

    /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
    /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
    mapping (address => uint256) public override nonces;

    /// @dev Records number of WETH10 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
    mapping (address => mapping (address => uint256)) public override allowance;

    /// @dev Current amount of flash-minted WETH10 token.
    uint256 public override flashMinted;
    
    /// @dev Returns the total supply of WETH10 token as the ETH held in this contract.
    function totalSupply() external view override returns(uint256) {
        return address(this).balance + flashMinted;
    }

    /// @dev Fallback, `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account.
    receive() external payable {
        // _mintTo(msg.sender, msg.value);
        balanceOf[msg.sender] += msg.value;
        emit Transfer(address(0), msg.sender, msg.value);
    }

    /// @dev `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account.
    function deposit() external override payable {
        // _mintTo(msg.sender, msg.value);
        balanceOf[msg.sender] += msg.value;
        emit Transfer(address(0), msg.sender, msg.value);
    }

    /// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance.
    /// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to `to` account.
    function depositTo(address to) external override payable {
        // _mintTo(to, msg.value);
        balanceOf[to] += msg.value;
        emit Transfer(address(0), to, msg.value);
    }

    /// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on *transferAndCall* format, see https://github.com/ethereum/EIPs/issues/677.
    function depositToAndCall(address to, bytes calldata data) external override payable returns (bool success) {
        // _mintTo(to, msg.value);
        balanceOf[to] += msg.value;
        emit Transfer(address(0), to, msg.value);

        return ITransferReceiver(to).onTokenTransfer(msg.sender, msg.value, data);
    }

    /// @dev Return the amount of WETH10 token that can be flash-lent.
    function maxFlashLoan(address token) external view override returns (uint256) {
        return token == address(this) ? type(uint112).max - flashMinted : 0; // Can't underflow
    }

    /// @dev Return the fee (zero) for flash-lending an amount of WETH10 token.
    function flashFee(address token, uint256) external view override returns (uint256) {
        require(token == address(this), "WETH: flash mint only WETH10");
        return 0;
    }

    /// @dev Flash lends `value` WETH10 token to the receiver address.
    /// By the end of the transaction, `value` WETH10 token will be burned from the receiver.
    /// The flash-minted WETH10 token is not backed by real ETH, but can be withdrawn as such up to the ETH balance of this contract.
    /// Arbitrary data can be passed as a bytes calldata parameter.
    /// Emits {Approval} event to reflect reduced allowance `value` for this contract to spend from receiver account (`receiver`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits two {Transfer} events for minting and burning of the flash-minted amount.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `value` must be less or equal to type(uint112).max.
    ///   - The total of all flash loans in a tx must be less or equal to type(uint112).max.
    function flashLoan(IERC3156FlashBorrower receiver, address token, uint256 value, bytes calldata data) external override returns(bool) {
        require(token == address(this), "WETH: flash mint only WETH10");
        require(value <= type(uint112).max, "WETH: individual loan limit exceeded");
        flashMinted = flashMinted + value;
        require(flashMinted <= type(uint112).max, "WETH: total loan limit exceeded");
        
        // _mintTo(address(receiver), value);
        balanceOf[address(receiver)] += value;
        emit Transfer(address(0), address(receiver), value);

        require(
            receiver.onFlashLoan(msg.sender, address(this), value, 0, data) == CALLBACK_SUCCESS,
            "WETH: flash loan failed"
        );
        
        // _decreaseAllowance(address(receiver), address(this), value);
        uint256 allowed = allowance[address(receiver)][address(this)];
        if (allowed != type(uint256).max) {
            require(allowed >= value, "WETH: request exceeds allowance");
            uint256 reduced = allowed - value;
            allowance[address(receiver)][address(this)] = reduced;
            emit Approval(address(receiver), address(this), reduced);
        }

        // _burnFrom(address(receiver), value);
        uint256 balance = balanceOf[address(receiver)];
        require(balance >= value, "WETH: burn amount exceeds balance");
        balanceOf[address(receiver)] = balance - value;
        emit Transfer(address(receiver), address(0), value);
        
        flashMinted = flashMinted - value;
        return true;
    }

    /// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to the same.
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account. 
    /// Requirements:
    ///   - caller account must have at least `value` balance of WETH10 token.
    function withdraw(uint256 value) external override {
        // _burnFrom(msg.sender, value);
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "WETH: burn amount exceeds balance");
        balanceOf[msg.sender] = balance - value;
        emit Transfer(msg.sender, address(0), value);

        // _transferEther(msg.sender, value);        
        (bool success, ) = msg.sender.call{value: value}("");
        require(success, "WETH: ETH transfer failed");
    }

    /// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to account (`to`).
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account.
    /// Requirements:
    ///   - caller account must have at least `value` balance of WETH10 token.
    function withdrawTo(address payable to, uint256 value) external override {
        // _burnFrom(msg.sender, value);
        uint256 balance = balanceOf[msg.sender];
        require(balance >= value, "WETH: burn amount exceeds balance");
        balanceOf[msg.sender] = balance - value;
        emit Transfer(msg.sender, address(0), value);

        // _transferEther(to, value);        
        (bool success, ) = to.call{value: value}("");
        require(success, "WETH: ETH transfer failed");
    }

    /// @dev Burn `value` WETH10 token from account (`from`) and withdraw matching ETH to account (`to`).
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from account (`from`).
    /// Requirements:
    ///   - `from` account must have at least `value` balance of WETH10 token.
    ///   - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account.
    function withdrawFrom(address from, address payable to, uint256 value) external override {
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "WETH: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }
        
        // _burnFrom(from, value);
        uint256 balance = balanceOf[from];
        require(balance >= value, "WETH: burn amount exceeds balance");
        balanceOf[from] = balance - value;
        emit Transfer(from, address(0), value);

        // _transferEther(to, value);        
        (bool success, ) = to.call{value: value}("");
        require(success, "WETH: Ether transfer failed");
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    function approve(address spender, uint256 value) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);

        return true;
    }

    /// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
        // _approve(msg.sender, spender, value);
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        
        return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
    }

    /// @dev Sets `value` as allowance of `spender` account over `owner` account's WETH10 token, given `owner` account's signed approval.
    /// Emits {Approval} event.
    /// Requirements:
    ///   - `deadline` must be timestamp in future.
    ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
    ///   - the signature must use `owner` account's current nonce (see {nonces}).
    ///   - the signer cannot be zero address and must be `owner` account.
    /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
    /// WETH10 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
        require(block.timestamp <= deadline, "WETH: Expired permit");

        uint256 chainId;
        assembly {chainId := chainid()}
        bytes32 DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)));

        bytes32 hashStruct = keccak256(
            abi.encode(
                PERMIT_TYPEHASH,
                owner,
                spender,
                value,
                nonces[owner]++,
                deadline));

        bytes32 hash = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                hashStruct));

        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0) && signer == owner, "WETH: invalid permit");

        // _approve(owner, spender, value);
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /// @dev Moves `value` WETH10 token from caller's account to account (`to`).
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WETH10 token.
    function transfer(address to, uint256 value) external override returns (bool) {
        // _transferFrom(msg.sender, to, value);
        if (to != address(0)) { // Transfer
            uint256 balance = balanceOf[msg.sender];
            require(balance >= value, "WETH: transfer amount exceeds balance");

            balanceOf[msg.sender] = balance - value;
            balanceOf[to] += value;
            emit Transfer(msg.sender, to, value);
        } else { // Withdraw
            uint256 balance = balanceOf[msg.sender];
            require(balance >= value, "WETH: burn amount exceeds balance");
            balanceOf[msg.sender] = balance - value;
            emit Transfer(msg.sender, address(0), value);
            
            (bool success, ) = msg.sender.call{value: value}("");
            require(success, "WETH: ETH transfer failed");
        }
        
        return true;
    }

    /// @dev Moves `value` WETH10 token from account (`from`) to account (`to`) using allowance mechanism.
    /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller.
    /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
    /// unless allowance is set to `type(uint256).max`
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - `from` account must have at least `value` balance of WETH10 token.
    ///   - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account.
    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        if (from != msg.sender) {
            // _decreaseAllowance(from, msg.sender, value);
            uint256 allowed = allowance[from][msg.sender];
            if (allowed != type(uint256).max) {
                require(allowed >= value, "WETH: request exceeds allowance");
                uint256 reduced = allowed - value;
                allowance[from][msg.sender] = reduced;
                emit Approval(from, msg.sender, reduced);
            }
        }
        
        // _transferFrom(from, to, value);
        if (to != address(0)) { // Transfer
            uint256 balance = balanceOf[from];
            require(balance >= value, "WETH: transfer amount exceeds balance");

            balanceOf[from] = balance - value;
            balanceOf[to] += value;
            emit Transfer(from, to, value);
        } else { // Withdraw
            uint256 balance = balanceOf[from];
            require(balance >= value, "WETH: burn amount exceeds balance");
            balanceOf[from] = balance - value;
            emit Transfer(from, address(0), value);
        
            (bool success, ) = msg.sender.call{value: value}("");
            require(success, "WETH: ETH transfer failed");
        }
        
        return true;
    }

    /// @dev Moves `value` WETH10 token from caller's account to account (`to`), 
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WETH10 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
        // _transferFrom(msg.sender, to, value);
        if (to != address(0)) { // Transfer
            uint256 balance = balanceOf[msg.sender];
            require(balance >= value, "WETH: transfer amount exceeds balance");

            balanceOf[msg.sender] = balance - value;
            balanceOf[to] += value;
            emit Transfer(msg.sender, to, value);
        } else { // Withdraw
            uint256 balance = balanceOf[msg.sender];
            require(balance >= value, "WETH: burn amount exceeds balance");
            balanceOf[msg.sender] = balance - value;
            emit Transfer(msg.sender, address(0), value);
        
            (bool success, ) = msg.sender.call{value: value}("");
            require(success, "WETH: ETH transfer failed");
        }

        return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
    }
}

Contract Security Audit

Contract ABI

[{"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":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CALLBACK_SUCCESS","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"depositTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"depositToAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"flashFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC3156FlashBorrower","name":"receiver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"flashLoan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flashMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"maxFlashLoan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd96080527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960a05234801561005857600080fd5b5060805160a051611feb61008660003980610d995280611c5a52508061119552806115a65250611feb6000f3fe60806040526004361061016a5760003560e01c806370a08231116100d1578063a9059cbb1161008a578063d0e30db011610064578063d0e30db014610733578063d505accf1461073b578063d9d98ce414610799578063dd62ed3e146107d2576101aa565b8063a9059cbb14610644578063b760faf91461067d578063cae9ca51146106a3576101aa565b806370a08231146105715780637ecebe00146105a45780638237e538146105d75780638b28d32f146105ec5780639555a9421461060157806395d89b41146101af576101aa565b806330adf81f1161012357806330adf81f14610355578063313ce5671461036a5780634000aea0146103955780635cffe9de146104255780635ddb7d7e146104c0578063613255ab1461053e576101aa565b806306fdde03146101af578063095ea7b31461023957806318160ddd14610286578063205c2878146102ad57806323b872dd146102e85780632e1a7d4d1461032b576101aa565b366101aa573360008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a3005b600080fd5b3480156101bb57600080fd5b506101c461080d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fe5781810151838201526020016101e6565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024557600080fd5b506102726004803603604081101561025c57600080fd5b506001600160a01b03813516906020013561082f565b604080519115158252519081900360200190f35b34801561029257600080fd5b5061029b610883565b60408051918252519081900360200190f35b3480156102b957600080fd5b506102e6600480360360408110156102d057600080fd5b506001600160a01b03813516906020013561088b565b005b3480156102f457600080fd5b506102726004803603606081101561030b57600080fd5b506001600160a01b038135811691602081013590911690604001356109ac565b34801561033757600080fd5b506102e66004803603602081101561034e57600080fd5b5035610c80565b34801561036157600080fd5b5061029b610d97565b34801561037657600080fd5b5061037f610dbb565b6040805160ff9092168252519081900360200190f35b3480156103a157600080fd5b50610272600480360360608110156103b857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156103e757600080fd5b8201836020820111156103f957600080fd5b803590602001918460018302840111600160201b8311171561041a57600080fd5b509092509050610dc0565b34801561043157600080fd5b506102726004803603608081101561044857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561048257600080fd5b82018360208201111561049457600080fd5b803590602001918460018302840111600160201b831117156104b557600080fd5b50909250905061104a565b610272600480360360408110156104d657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561050057600080fd5b82018360208201111561051257600080fd5b803590602001918460018302840111600160201b8311171561053357600080fd5b509092509050611458565b34801561054a57600080fd5b5061029b6004803603602081101561056157600080fd5b50356001600160a01b0316611554565b34801561057d57600080fd5b5061029b6004803603602081101561059457600080fd5b50356001600160a01b0316611580565b3480156105b057600080fd5b5061029b600480360360208110156105c757600080fd5b50356001600160a01b0316611592565b3480156105e357600080fd5b5061029b6115a4565b3480156105f857600080fd5b5061029b6115c8565b34801561060d57600080fd5b506102e66004803603606081101561062457600080fd5b506001600160a01b038135811691602081013590911690604001356115ce565b34801561065057600080fd5b506102726004803603604081101561066757600080fd5b506001600160a01b0381351690602001356117f7565b6102e66004803603602081101561069357600080fd5b50356001600160a01b03166119ca565b3480156106af57600080fd5b50610272600480360360608110156106c657600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156106f557600080fd5b82018360208201111561070757600080fd5b803590602001918460018302840111600160201b8311171561072857600080fd5b509092509050611a0f565b6102e6611ae4565b34801561074757600080fd5b506102e6600480360360e081101561075e57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b1f565b3480156107a557600080fd5b5061029b600480360360408110156107bc57600080fd5b506001600160a01b038135169060200135611e66565b3480156107de57600080fd5b5061029b600480360360408110156107f557600080fd5b506001600160a01b0381358116916020013516611ece565b6040518060400160405280600681526020016505745544831360d41b81525081565b3360008181526002602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020611f75833981519152928290030190a350600192915050565b600354470190565b33600090815260208190526040902054818110156108da5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a36040516000906001600160a01b0385169084908381818185875af1925050503d806000811461095d576040519150601f19603f3d011682016040523d82523d6000602084013e610962565b606091505b50509050806109a6576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505050565b60006001600160a01b0384163314610a91576001600160a01b03841660009081526002602090815260408083203384529091529020546000198114610a8f5782811015610a40576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038516600081815260026020908152604080832033808552908352928190208786039081905581518181529151909492600080516020611f75833981519152928290030190a3505b505b6001600160a01b03831615610b4f576001600160a01b03841660009081526020819052604090205482811015610af85760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b6001600160a01b03808616600081815260208181526040808320888703905593881680835291849020805488019055835187815293519193600080516020611f55833981519152929081900390910190a350610c76565b6001600160a01b03841660009081526020819052604090205482811015610ba75760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b038516600081815260208181526040808320878603905580518781529051929392600080516020611f55833981519152929181900390910190a3604051600090339085908381818185875af1925050503d8060008114610c2a576040519150601f19603f3d011682016040523d82523d6000602084013e610c2f565b606091505b5050905080610c73576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b5060019392505050565b3360009081526020819052604090205481811015610ccf5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a3604051600090339084908381818185875af1925050503d8060008114610d49576040519150601f19603f3d011682016040523d82523d6000602084013e610d4e565b606091505b5050905080610d92576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601281565b60006001600160a01b03851615610e75573360009081526020819052604090205484811015610e205760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b3360008181526020818152604080832089860390556001600160a01b038a168084529281902080548a01905580518981529051929392600080516020611f55833981519152929181900390910190a350610f8a565b3360009081526020819052604090205484811015610ec45760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320898603905580518981529051929392600080516020611f55833981519152929181900390910190a3604051600090339087908381818185875af1925050503d8060008114610f3e576040519150601f19603f3d011682016040523d82523d6000602084013e610f43565b606091505b5050905080610f87576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b846001600160a01b031663a4c0ed36338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561101557600080fd5b505af1158015611029573d6000803e3d6000fd5b505050506040513d602081101561103f57600080fd5b505195945050505050565b60006001600160a01b03851630146110a9576040805162461bcd60e51b815260206004820152601c60248201527f574554483a20666c617368206d696e74206f6e6c792057455448313000000000604482015290519081900360640190fd5b6001600160701b038411156110ef5760405162461bcd60e51b8152600401808060200182810382526024815260200180611f316024913960400191505060405180910390fd5b600380548501908190556001600160701b031015611154576040805162461bcd60e51b815260206004820152601f60248201527f574554483a20746f74616c206c6f616e206c696d697420657863656564656400604482015290519081900360640190fd5b6001600160a01b03861660008181526020818152604080832080548901905580518881529051600080516020611f55833981519152929181900390910190a37f0000000000000000000000000000000000000000000000000000000000000000866001600160a01b03166323e30c8b333088600089896040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561125957600080fd5b505af115801561126d573d6000803e3d6000fd5b505050506040513d602081101561128357600080fd5b5051146112d7576040805162461bcd60e51b815260206004820152601760248201527f574554483a20666c617368206c6f616e206661696c6564000000000000000000604482015290519081900360640190fd5b6001600160a01b038616600090815260026020908152604080832030845290915290205460001981146113a85784811015611359576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038716600081815260026020908152604080832030808552908352928190208986039081905581518181529151909492600080516020611f75833981519152928290030190a3505b6001600160a01b038716600090815260208190526040902054858110156114005760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b0388166000818152602081815260408083208a8603905580518a81529051929392600080516020611f55833981519152929181900390910190a3505060038054859003905550600195945050505050565b6001600160a01b038316600081815260208181526040808320805434908101909155815190815290519293928492600080516020611f55833981519152928290030190a3604051635260769b60e11b815233600482018181523460248401819052606060448501908152606485018790526001600160a01b0389169463a4c0ed36949389928992608401848480828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561152057600080fd5b505af1158015611534573d6000803e3d6000fd5b505050506040513d602081101561154a57600080fd5b5051949350505050565b60006001600160a01b038216301461156d57600061157a565b6003546001600160701b03035b92915050565b60006020819052908152604090205481565b60016020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b6001600160a01b03831633146116b1576001600160a01b038316600090815260026020908152604080832033845290915290205460001981146116af5781811015611660576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038416600081815260026020908152604080832033808552908352928190208686039081905581518181529151909492600080516020611f75833981519152928290030190a3505b505b6001600160a01b038316600090815260208190526040902054818110156117095760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b038416600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a36040516000906001600160a01b0385169084908381818185875af1925050503d8060008114611795576040519150601f19603f3d011682016040523d82523d6000602084013e61179a565b606091505b50509050806117f0576040805162461bcd60e51b815260206004820152601b60248201527f574554483a204574686572207472616e73666572206661696c65640000000000604482015290519081900360640190fd5b5050505050565b60006001600160a01b038316156118ac5733600090815260208190526040902054828110156118575760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b3360008181526020818152604080832087860390556001600160a01b0388168084529281902080548801905580518781529051929392600080516020611f55833981519152929181900390910190a3506119c1565b33600090815260208190526040902054828110156118fb5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320878603905580518781529051929392600080516020611f55833981519152929181900390910190a3604051600090339085908381818185875af1925050503d8060008114611975576040519150601f19603f3d011682016040523d82523d6000602084013e61197a565b606091505b50509050806119be576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b50600192915050565b6001600160a01b03811660008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a350565b3360008181526002602090815260408083206001600160a01b03891680855290835281842088905581518881529151939490939092600080516020611f75833981519152928290030190a3846001600160a01b031662ba451f338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561101557600080fd5b3360008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a3565b83421115611b6b576040805162461bcd60e51b815260206004820152601460248201527315d155120e88115e1c1a5c9959081c195c9b5a5d60621b604482015290519081900360640190fd5b604080518082018252600681526505745544831360d41b602091820152815180830183526001808252603160f81b9183019190915282517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818401527ffa1d09e0df93cff7ffb6d3d1b7ff0cd84ec4aea253cce83798281123893899d5818501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a0808401919091528551808403909101815260c0830186528051908501206001600160a01b038d8116600081815286885288812080548089019091557f000000000000000000000000000000000000000000000000000000000000000060e0880152610100870192909252918e1661012086015261014085018d90526101608501526101808085018c9052875180860390910181526101a08501885280519087012061190160f01b6101c08601526101c285018390526101e2808601829052885180870390910181526102028601808a52815191890191909120908390526102228601808a5281905260ff8c1661024287015261026286018b905261028286018a90529751939792969095929491936102a280840193601f198301929081900390910190855afa158015611d54573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611d8a57508b6001600160a01b0316816001600160a01b0316145b611dd2576040805162461bcd60e51b815260206004820152601460248201527315d155120e881a5b9d985b1a59081c195c9b5a5d60621b604482015290519081900360640190fd5b89600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055508a6001600160a01b03168c6001600160a01b0316600080516020611f758339815191528c6040518082815260200191505060405180910390a3505050505050505050505050565b60006001600160a01b0383163014611ec5576040805162461bcd60e51b815260206004820152601c60248201527f574554483a20666c617368206d696e74206f6e6c792057455448313000000000604482015290519081900360640190fd5b50600092915050565b60026020908152600092835260408084209091529082529020548156fe574554483a207472616e7366657220616d6f756e7420657863656564732062616c616e6365574554483a20455448207472616e73666572206661696c656400000000000000574554483a20696e646976696475616c206c6f616e206c696d6974206578636565646564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925574554483a206275726e20616d6f756e7420657863656564732062616c616e6365a264697066735822122007e7b41d28cce2bedfa6de35bda7588176f64aed97837af8334ee71d23369c7864736f6c63430007060033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c806370a08231116100d1578063a9059cbb1161008a578063d0e30db011610064578063d0e30db014610733578063d505accf1461073b578063d9d98ce414610799578063dd62ed3e146107d2576101aa565b8063a9059cbb14610644578063b760faf91461067d578063cae9ca51146106a3576101aa565b806370a08231146105715780637ecebe00146105a45780638237e538146105d75780638b28d32f146105ec5780639555a9421461060157806395d89b41146101af576101aa565b806330adf81f1161012357806330adf81f14610355578063313ce5671461036a5780634000aea0146103955780635cffe9de146104255780635ddb7d7e146104c0578063613255ab1461053e576101aa565b806306fdde03146101af578063095ea7b31461023957806318160ddd14610286578063205c2878146102ad57806323b872dd146102e85780632e1a7d4d1461032b576101aa565b366101aa573360008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a3005b600080fd5b3480156101bb57600080fd5b506101c461080d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fe5781810151838201526020016101e6565b50505050905090810190601f16801561022b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024557600080fd5b506102726004803603604081101561025c57600080fd5b506001600160a01b03813516906020013561082f565b604080519115158252519081900360200190f35b34801561029257600080fd5b5061029b610883565b60408051918252519081900360200190f35b3480156102b957600080fd5b506102e6600480360360408110156102d057600080fd5b506001600160a01b03813516906020013561088b565b005b3480156102f457600080fd5b506102726004803603606081101561030b57600080fd5b506001600160a01b038135811691602081013590911690604001356109ac565b34801561033757600080fd5b506102e66004803603602081101561034e57600080fd5b5035610c80565b34801561036157600080fd5b5061029b610d97565b34801561037657600080fd5b5061037f610dbb565b6040805160ff9092168252519081900360200190f35b3480156103a157600080fd5b50610272600480360360608110156103b857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156103e757600080fd5b8201836020820111156103f957600080fd5b803590602001918460018302840111600160201b8311171561041a57600080fd5b509092509050610dc0565b34801561043157600080fd5b506102726004803603608081101561044857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561048257600080fd5b82018360208201111561049457600080fd5b803590602001918460018302840111600160201b831117156104b557600080fd5b50909250905061104a565b610272600480360360408110156104d657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561050057600080fd5b82018360208201111561051257600080fd5b803590602001918460018302840111600160201b8311171561053357600080fd5b509092509050611458565b34801561054a57600080fd5b5061029b6004803603602081101561056157600080fd5b50356001600160a01b0316611554565b34801561057d57600080fd5b5061029b6004803603602081101561059457600080fd5b50356001600160a01b0316611580565b3480156105b057600080fd5b5061029b600480360360208110156105c757600080fd5b50356001600160a01b0316611592565b3480156105e357600080fd5b5061029b6115a4565b3480156105f857600080fd5b5061029b6115c8565b34801561060d57600080fd5b506102e66004803603606081101561062457600080fd5b506001600160a01b038135811691602081013590911690604001356115ce565b34801561065057600080fd5b506102726004803603604081101561066757600080fd5b506001600160a01b0381351690602001356117f7565b6102e66004803603602081101561069357600080fd5b50356001600160a01b03166119ca565b3480156106af57600080fd5b50610272600480360360608110156106c657600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156106f557600080fd5b82018360208201111561070757600080fd5b803590602001918460018302840111600160201b8311171561072857600080fd5b509092509050611a0f565b6102e6611ae4565b34801561074757600080fd5b506102e6600480360360e081101561075e57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b1f565b3480156107a557600080fd5b5061029b600480360360408110156107bc57600080fd5b506001600160a01b038135169060200135611e66565b3480156107de57600080fd5b5061029b600480360360408110156107f557600080fd5b506001600160a01b0381358116916020013516611ece565b6040518060400160405280600681526020016505745544831360d41b81525081565b3360008181526002602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020611f75833981519152928290030190a350600192915050565b600354470190565b33600090815260208190526040902054818110156108da5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a36040516000906001600160a01b0385169084908381818185875af1925050503d806000811461095d576040519150601f19603f3d011682016040523d82523d6000602084013e610962565b606091505b50509050806109a6576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505050565b60006001600160a01b0384163314610a91576001600160a01b03841660009081526002602090815260408083203384529091529020546000198114610a8f5782811015610a40576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038516600081815260026020908152604080832033808552908352928190208786039081905581518181529151909492600080516020611f75833981519152928290030190a3505b505b6001600160a01b03831615610b4f576001600160a01b03841660009081526020819052604090205482811015610af85760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b6001600160a01b03808616600081815260208181526040808320888703905593881680835291849020805488019055835187815293519193600080516020611f55833981519152929081900390910190a350610c76565b6001600160a01b03841660009081526020819052604090205482811015610ba75760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b038516600081815260208181526040808320878603905580518781529051929392600080516020611f55833981519152929181900390910190a3604051600090339085908381818185875af1925050503d8060008114610c2a576040519150601f19603f3d011682016040523d82523d6000602084013e610c2f565b606091505b5050905080610c73576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b5060019392505050565b3360009081526020819052604090205481811015610ccf5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a3604051600090339084908381818185875af1925050503d8060008114610d49576040519150601f19603f3d011682016040523d82523d6000602084013e610d4e565b606091505b5050905080610d92576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60006001600160a01b03851615610e75573360009081526020819052604090205484811015610e205760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b3360008181526020818152604080832089860390556001600160a01b038a168084529281902080548a01905580518981529051929392600080516020611f55833981519152929181900390910190a350610f8a565b3360009081526020819052604090205484811015610ec45760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320898603905580518981529051929392600080516020611f55833981519152929181900390910190a3604051600090339087908381818185875af1925050503d8060008114610f3e576040519150601f19603f3d011682016040523d82523d6000602084013e610f43565b606091505b5050905080610f87576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b846001600160a01b031663a4c0ed36338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561101557600080fd5b505af1158015611029573d6000803e3d6000fd5b505050506040513d602081101561103f57600080fd5b505195945050505050565b60006001600160a01b03851630146110a9576040805162461bcd60e51b815260206004820152601c60248201527f574554483a20666c617368206d696e74206f6e6c792057455448313000000000604482015290519081900360640190fd5b6001600160701b038411156110ef5760405162461bcd60e51b8152600401808060200182810382526024815260200180611f316024913960400191505060405180910390fd5b600380548501908190556001600160701b031015611154576040805162461bcd60e51b815260206004820152601f60248201527f574554483a20746f74616c206c6f616e206c696d697420657863656564656400604482015290519081900360640190fd5b6001600160a01b03861660008181526020818152604080832080548901905580518881529051600080516020611f55833981519152929181900390910190a37f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9866001600160a01b03166323e30c8b333088600089896040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561125957600080fd5b505af115801561126d573d6000803e3d6000fd5b505050506040513d602081101561128357600080fd5b5051146112d7576040805162461bcd60e51b815260206004820152601760248201527f574554483a20666c617368206c6f616e206661696c6564000000000000000000604482015290519081900360640190fd5b6001600160a01b038616600090815260026020908152604080832030845290915290205460001981146113a85784811015611359576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038716600081815260026020908152604080832030808552908352928190208986039081905581518181529151909492600080516020611f75833981519152928290030190a3505b6001600160a01b038716600090815260208190526040902054858110156114005760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b0388166000818152602081815260408083208a8603905580518a81529051929392600080516020611f55833981519152929181900390910190a3505060038054859003905550600195945050505050565b6001600160a01b038316600081815260208181526040808320805434908101909155815190815290519293928492600080516020611f55833981519152928290030190a3604051635260769b60e11b815233600482018181523460248401819052606060448501908152606485018790526001600160a01b0389169463a4c0ed36949389928992608401848480828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561152057600080fd5b505af1158015611534573d6000803e3d6000fd5b505050506040513d602081101561154a57600080fd5b5051949350505050565b60006001600160a01b038216301461156d57600061157a565b6003546001600160701b03035b92915050565b60006020819052908152604090205481565b60016020526000908152604090205481565b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981565b60035481565b6001600160a01b03831633146116b1576001600160a01b038316600090815260026020908152604080832033845290915290205460001981146116af5781811015611660576040805162461bcd60e51b815260206004820152601f60248201527f574554483a2072657175657374206578636565647320616c6c6f77616e636500604482015290519081900360640190fd5b6001600160a01b038416600081815260026020908152604080832033808552908352928190208686039081905581518181529151909492600080516020611f75833981519152928290030190a3505b505b6001600160a01b038316600090815260208190526040902054818110156117095760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b6001600160a01b038416600081815260208181526040808320868603905580518681529051929392600080516020611f55833981519152929181900390910190a36040516000906001600160a01b0385169084908381818185875af1925050503d8060008114611795576040519150601f19603f3d011682016040523d82523d6000602084013e61179a565b606091505b50509050806117f0576040805162461bcd60e51b815260206004820152601b60248201527f574554483a204574686572207472616e73666572206661696c65640000000000604482015290519081900360640190fd5b5050505050565b60006001600160a01b038316156118ac5733600090815260208190526040902054828110156118575760405162461bcd60e51b8152600401808060200182810382526025815260200180611eec6025913960400191505060405180910390fd5b3360008181526020818152604080832087860390556001600160a01b0388168084529281902080548801905580518781529051929392600080516020611f55833981519152929181900390910190a3506119c1565b33600090815260208190526040902054828110156118fb5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f956021913960400191505060405180910390fd5b33600081815260208181526040808320878603905580518781529051929392600080516020611f55833981519152929181900390910190a3604051600090339085908381818185875af1925050503d8060008114611975576040519150601f19603f3d011682016040523d82523d6000602084013e61197a565b606091505b50509050806119be576040805162461bcd60e51b81526020600482015260196024820152600080516020611f11833981519152604482015290519081900360640190fd5b50505b50600192915050565b6001600160a01b03811660008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a350565b3360008181526002602090815260408083206001600160a01b03891680855290835281842088905581518881529151939490939092600080516020611f75833981519152928290030190a3846001600160a01b031662ba451f338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b15801561101557600080fd5b3360008181526020818152604080832080543490810190915581519081529051600080516020611f55833981519152929181900390910190a3565b83421115611b6b576040805162461bcd60e51b815260206004820152601460248201527315d155120e88115e1c1a5c9959081c195c9b5a5d60621b604482015290519081900360640190fd5b604080518082018252600681526505745544831360d41b602091820152815180830183526001808252603160f81b9183019190915282517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818401527ffa1d09e0df93cff7ffb6d3d1b7ff0cd84ec4aea253cce83798281123893899d5818501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a0808401919091528551808403909101815260c0830186528051908501206001600160a01b038d8116600081815286885288812080548089019091557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960e0880152610100870192909252918e1661012086015261014085018d90526101608501526101808085018c9052875180860390910181526101a08501885280519087012061190160f01b6101c08601526101c285018390526101e2808601829052885180870390910181526102028601808a52815191890191909120908390526102228601808a5281905260ff8c1661024287015261026286018b905261028286018a90529751939792969095929491936102a280840193601f198301929081900390910190855afa158015611d54573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611d8a57508b6001600160a01b0316816001600160a01b0316145b611dd2576040805162461bcd60e51b815260206004820152601460248201527315d155120e881a5b9d985b1a59081c195c9b5a5d60621b604482015290519081900360640190fd5b89600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055508a6001600160a01b03168c6001600160a01b0316600080516020611f758339815191528c6040518082815260200191505060405180910390a3505050505050505050505050565b60006001600160a01b0383163014611ec5576040805162461bcd60e51b815260206004820152601c60248201527f574554483a20666c617368206d696e74206f6e6c792057455448313000000000604482015290519081900360640190fd5b50600092915050565b60026020908152600092835260408084209091529082529020548156fe574554483a207472616e7366657220616d6f756e7420657863656564732062616c616e6365574554483a20455448207472616e73666572206661696c656400000000000000574554483a20696e646976696475616c206c6f616e206c696d6974206578636565646564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925574554483a206275726e20616d6f756e7420657863656564732062616c616e6365a264697066735822122007e7b41d28cce2bedfa6de35bda7588176f64aed97837af8334ee71d23369c7864736f6c63430007060033

Deployed Bytecode Sourcemap

9310:18366:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11087:10;11077:9;:21;;;;;;;;;;;:34;;11102:9;11077:34;;;;;;11127:43;;;;;;;-1:-1:-1;;;;;;;;;;;11127:43:0;;;;;;;;;;9310:18366;;;;;9346:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19389:265;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19389:265:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10618:124;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17028:511;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17028:511:0;;;;;;;;:::i;:::-;;24703:1377;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24703:1377:0;;;;;;;;;;;;;;;;;:::i;16198:505::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16198:505:0;;:::i;9588:138::-;;;;;;;;;;;;;:::i;9438:45::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26684:989;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26684:989:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26684:989:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26684:989:0;;;;;;;;;;-1:-1:-1;26684:989:0;;-1:-1:-1;26684:989:0;-1:-1:-1;26684:989:0;:::i;14260:1618::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14260:1618:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14260:1618:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14260:1618:0;;;;;;;;;;-1:-1:-1;14260:1618:0;;-1:-1:-1;14260:1618:0;-1:-1:-1;14260:1618:0;:::i;12489:326::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12489:326:0;;;;;;;;;;;;;;;-1:-1:-1;;;12489:326:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12489:326:0;;;;;;;;;;-1:-1:-1;12489:326:0;;-1:-1:-1;12489:326:0;-1:-1:-1;12489:326:0;:::i;12895:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12895:183:0;-1:-1:-1;;;;;12895:183:0;;:::i;9798:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9798:54:0;-1:-1:-1;;;;;9798:54:0;;:::i;10125:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10125:51:0;-1:-1:-1;;;;;10125:51:0;;:::i;9492:89::-;;;;;;;;;;;;;:::i;10481:35::-;;;;;;;;;;;;;:::i;18188:992::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18188:992:0;;;;;;;;;;;;;;;;;:::i;22928:918::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22928:918:0;;;;;;;;:::i;11861:189::-;;;;;;;;;;;;;;;;-1:-1:-1;11861:189:0;-1:-1:-1;;;;;11861:189:0;;:::i;20067:364::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20067:364:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20067:364:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20067:364:0;;;;;;;;;;-1:-1:-1;20067:364:0;;-1:-1:-1;20067:364:0;-1:-1:-1;20067:364:0;:::i;11421:201::-;;;:::i;21248:1282::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21248:1282:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13167:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13167:184:0;;;;;;;;:::i;10338:75::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10338:75:0;;;;;;;;;;:::i;9346:38::-;;;;;;;;;;;;;;-1:-1:-1;;;9346:38:0;;;;:::o;19389:265::-;19542:10;19465:4;19532:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;19532:30:0;;;;;;;;;;;:38;;;19586:36;;;;;;;19465:4;;19532:30;;19542:10;;-1:-1:-1;;;;;;;;;;;19586:36:0;;;;;;;-1:-1:-1;19642:4:0;19389:265;;;;:::o;10618:124::-;10723:11;;10699:21;:35;10618:124;:::o;17028:511::-;17182:10;17154:15;17172:21;;;;;;;;;;;17212:16;;;;17204:62;;;;-1:-1:-1;;;17204:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17287:10;17277:9;:21;;;;;;;;;;;17301:15;;;17277:39;;17332;;;;;;;17277:9;;17287:10;-1:-1:-1;;;;;;;;;;;17332:39:0;;;;;;;;;;17450:25;;17432:12;;-1:-1:-1;;;;;17450:7:0;;;17465:5;;17432:12;17450:25;17432:12;17450:25;17465:5;17450:7;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17431:44;;;17494:7;17486:45;;;;;-1:-1:-1;;;17486:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17486:45:0;;;;;;;;;;;;;;;17028:511;;;;:::o;24703:1377::-;24793:4;-1:-1:-1;;;;;24814:18:0;;24822:10;24814:18;24810:467;;-1:-1:-1;;;;;24928:15:0;;24910;24928;;;:9;:15;;;;;;;;24944:10;24928:27;;;;;;;;-1:-1:-1;;24974:28:0;;24970:296;;25042:5;25031:7;:16;;25023:60;;;;;-1:-1:-1;;;25023:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25154:15:0;;25102;25154;;;:9;:15;;;;;;;;25170:10;25154:27;;;;;;;;;;25120:15;;;25154:37;;;;25215:35;;;;;;;25120:15;;25154;-1:-1:-1;;;;;;;;;;;25215:35:0;;;;;;;24970:296;;24810:467;;-1:-1:-1;;;;;25345:16:0;;;25341:700;;-1:-1:-1;;;;;25408:15:0;;25390;25408;;;;;;;;;;;25446:16;;;;25438:66;;;;-1:-1:-1;;;25438:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25521:15:0;;;:9;:15;;;;;;;;;;;25539;;;25521:33;;25569:13;;;;;;;;;;:22;;;;;;25611:25;;;;;;;25569:13;;-1:-1:-1;;;;;;;;;;;25611:25:0;;;;;;;;;;25341:700;;;;-1:-1:-1;;;;;25699:15:0;;25681;25699;;;;;;;;;;;25737:16;;;;25729:62;;;;-1:-1:-1;;;25729:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25806:15:0;;:9;:15;;;;;;;;;;;25824;;;25806:33;;25859;;;;;;;25806:9;;:15;-1:-1:-1;;;;;;;;;;;25859:33:0;;;;;;;;;;25936;;25918:12;;25936:10;;25959:5;;25918:12;25936:33;25918:12;25936:33;25959:5;25936:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25917:52;;;25992:7;25984:45;;;;;-1:-1:-1;;;25984:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25984:45:0;;;;;;;;;;;;;;;25341:700;;;-1:-1:-1;26068:4:0;24703:1377;;;;;:::o;16198:505::-;16330:10;16302:15;16320:21;;;;;;;;;;;16360:16;;;;16352:62;;;;-1:-1:-1;;;16352:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16435:10;16425:9;:21;;;;;;;;;;;16449:15;;;16425:39;;16480;;;;;;;16425:9;;16435:10;-1:-1:-1;;;;;;;;;;;16480:39:0;;;;;;;;;;16606:33;;16588:12;;16606:10;;16629:5;;16588:12;16606:33;16588:12;16606:33;16629:5;16606:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16587:52;;;16658:7;16650:45;;;;;-1:-1:-1;;;16650:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16650:45:0;;;;;;;;;;;;;;;16198:505;;;:::o;9588:138::-;;;:::o;9438:45::-;9481:2;9438:45;:::o;26684:989::-;26781:4;-1:-1:-1;;;;;26852:16:0;;;26848:736;;26925:10;26897:15;26915:21;;;;;;;;;;;26959:16;;;;26951:66;;;;-1:-1:-1;;;26951:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27044:10;27034:9;:21;;;;;;;;;;;27058:15;;;27034:39;;-1:-1:-1;;;;;27088:13:0;;;;;;;;;:22;;;;;;27130:31;;;;;;;27088:13;;27044:10;-1:-1:-1;;;;;;;;;;;27130:31:0;;;;;;;;;;26848:736;;;;27234:10;27206:15;27224:21;;;;;;;;;;;27268:16;;;;27260:62;;;;-1:-1:-1;;;27260:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27347:10;27337:9;:21;;;;;;;;;;;27361:15;;;27337:39;;27396;;;;;;;27337:9;;27347:10;-1:-1:-1;;;;;;;;;;;27396:39:0;;;;;;;;;;27479:33;;27461:12;;27479:10;;27502:5;;27461:12;27479:33;27461:12;27479:33;27502:5;27479:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27460:52;;;27535:7;27527:45;;;;;-1:-1:-1;;;27527:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;27527:45:0;;;;;;;;;;;;;;;26848:736;;;27621:2;-1:-1:-1;;;;;27603:37:0;;27641:10;27653:5;27660:4;;27603:62;;;;;;;;;;;;;-1:-1:-1;;;;;27603:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27603:62:0;;26684:989;-1:-1:-1;;;;;26684:989:0:o;14260:1618::-;14388:4;-1:-1:-1;;;;;14413:22:0;;14430:4;14413:22;14405:63;;;;;-1:-1:-1;;;14405:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14487:26:0;;;14479:75;;;;-1:-1:-1;;;14479:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14579:11;;;:19;;14565:33;;;;-1:-1:-1;;;;;;14617:32:0;14609:76;;;;;-1:-1:-1;;;14609:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14753:28:0;;:9;:28;;;;;;;;;;;:37;;;;;;14806:46;;;;;;;-1:-1:-1;;;;;;;;;;;14806:46:0;;;;;;;;;;14954:16;14887:8;-1:-1:-1;;;;;14887:20:0;;14908:10;14928:4;14935:5;14942:1;14945:4;;14887:63;;;;;;;;;;;;;-1:-1:-1;;;;;14887:63:0;;;;;;-1:-1:-1;;;;;14887:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14887:63:0;:83;14865:156;;;;;-1:-1:-1;;;14865:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15133:28:0;;15115:15;15133:28;;;:9;:28;;;;;;;;15170:4;15133:43;;;;;;;;-1:-1:-1;;15191:28:0;;15187:308;;15255:5;15244:7;:16;;15236:60;;;;;-1:-1:-1;;;15236:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15359:28:0;;15311:15;15359:28;;;:9;:28;;;;;;;;15396:4;15359:43;;;;;;;;;;15329:15;;;15359:53;;;;15432:51;;;;;;;15329:15;;15359:28;-1:-1:-1;;;;;;;;;;;15432:51:0;;;;;;;15187:308;;-1:-1:-1;;;;;15574:28:0;;15556:15;15574:28;;;;;;;;;;;15621:16;;;;15613:62;;;;-1:-1:-1;;;15613:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15686:28:0;;:9;:28;;;;;;;;;;;15717:15;;;15686:46;;15748;;;;;;;15686:9;;:28;-1:-1:-1;;;;;;;;;;;15748:46:0;;;;;;;;;;-1:-1:-1;;15829:11:0;;;:19;;;15815:33;;-1:-1:-1;;14260:1618:0;;;;;;;:::o;12489:326::-;-1:-1:-1;;;;;12644:13:0;;12583:12;12644:13;;;;;;;;;;;:26;;12661:9;12644:26;;;;;;12686:35;;;;;;;12583:12;;12644:13;12583:12;;-1:-1:-1;;;;;;;;;;;12686:35:0;;;;;;;12741:66;;-1:-1:-1;;;12741:66:0;;12779:10;12741:66;;;;;;12791:9;12741:66;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12741:37:0;;;;;12779:10;12802:4;;;;12741:66;;12802:4;;;;12741:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12741:66:0;;12489:326;-1:-1:-1;;;;12489:326:0:o;12895:183::-;12964:7;-1:-1:-1;;;;;12991:22:0;;13008:4;12991:22;:60;;13050:1;12991:60;;;13036:11;;-1:-1:-1;;;;;13016:31:0;12991:60;12984:67;12895:183;-1:-1:-1;;12895:183:0:o;9798:54::-;;;;;;;;;;;;;;:::o;10125:51::-;;;;;;;;;;;;;:::o;9492:89::-;;;:::o;10481:35::-;;;;:::o;18188:992::-;-1:-1:-1;;;;;18292:18:0;;18300:10;18292:18;18288:467;;-1:-1:-1;;;;;18406:15:0;;18388;18406;;;:9;:15;;;;;;;;18422:10;18406:27;;;;;;;;-1:-1:-1;;18452:28:0;;18448:296;;18520:5;18509:7;:16;;18501:60;;;;;-1:-1:-1;;;18501:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18632:15:0;;18580;18632;;;:9;:15;;;;;;;;18648:10;18632:27;;;;;;;;;;18598:15;;;18632:37;;;;18693:35;;;;;;;18598:15;;18632;-1:-1:-1;;;;;;;;;;;18693:35:0;;;;;;;18448:296;;18288:467;;-1:-1:-1;;;;;18829:15:0;;18811;18829;;;;;;;;;;;18863:16;;;;18855:62;;;;-1:-1:-1;;;18855:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18928:15:0;;:9;:15;;;;;;;;;;;18946;;;18928:33;;18977;;;;;;;18928:9;;:15;-1:-1:-1;;;;;;;;;;;18977:33:0;;;;;;;;;;19089:25;;19071:12;;-1:-1:-1;;;;;19089:7:0;;;19104:5;;19071:12;19089:25;19071:12;19089:25;19104:5;19089:7;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19070:44;;;19133:7;19125:47;;;;;-1:-1:-1;;;19125:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18188:992;;;;;:::o;22928:918::-;23000:4;-1:-1:-1;;;;;23071:16:0;;;23067:740;;23144:10;23116:15;23134:21;;;;;;;;;;;23178:16;;;;23170:66;;;;-1:-1:-1;;;23170:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23263:10;23253:9;:21;;;;;;;;;;;23277:15;;;23253:39;;-1:-1:-1;;;;;23307:13:0;;;;;;;;;:22;;;;;;23349:31;;;;;;;23307:13;;23263:10;-1:-1:-1;;;;;;;;;;;23349:31:0;;;;;;;;;;23067:740;;;;23453:10;23425:15;23443:21;;;;;;;;;;;23487:16;;;;23479:62;;;;-1:-1:-1;;;23479:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23566:10;23556:9;:21;;;;;;;;;;;23580:15;;;23556:39;;23615;;;;;;;23556:9;;23566:10;-1:-1:-1;;;;;;;;;;;23615:39:0;;;;;;;;;;23702:33;;23684:12;;23702:10;;23725:5;;23684:12;23702:33;23684:12;23702:33;23725:5;23702:10;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23683:52;;;23758:7;23750:45;;;;;-1:-1:-1;;;23750:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23750:45:0;;;;;;;;;;;;;;;23067:740;;;-1:-1:-1;23834:4:0;22928:918;;;;:::o;11861:189::-;-1:-1:-1;;;;;11965:13:0;;:9;:13;;;;;;;;;;;:26;;11982:9;11965:26;;;;;;12007:35;;;;;;;-1:-1:-1;;;;;;;;;;;12007:35:0;;;;;;;;;;11861:189;:::o;20067:364::-;20248:10;20171:4;20238:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;20238:30:0;;;;;;;;;;;:38;;;20292:36;;;;;;;20171:4;;20238:30;;20248:10;;-1:-1:-1;;;;;;;;;;;20292:36:0;;;;;;;20374:7;-1:-1:-1;;;;;20356:42:0;;20399:10;20411:5;20418:4;;20356:67;;;;;;;;;;;;;-1:-1:-1;;;;;20356:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11421:201;11531:10;11521:9;:21;;;;;;;;;;;:34;;11546:9;11521:34;;;;;;11571:43;;;;;;;-1:-1:-1;;;;;;;;;;;11571:43:0;;;;;;;;;;11421:201::o;21248:1282::-;21416:8;21397:15;:27;;21389:60;;;;;-1:-1:-1;;;21389:60:0;;;;;;;;;;;;-1:-1:-1;;;21389:60:0;;;;;;;;;;;;;;;21739:4;;;;;;;;;;;-1:-1:-1;;;21739:4:0;;;;;21774:10;;;;;;;;;;;-1:-1:-1;;;21774:10:0;;;;;;;21580:264;;21609:95;21580:264;;;;21723:22;21580:264;;;;21764:21;21580:264;;;;21509:9;21580:264;;;;;;21838:4;21580:264;;;;;;;;;;;;;;;;;;;;;;;21556:289;;;;;;-1:-1:-1;;;;;22040:13:0;;;21462:15;22040:13;;;;;;;;;:15;;;;;;;;21932;21903:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21879:205;;;;;;-1:-1:-1;;;22136:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22112:135;;;;;;;;;22277:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21509:9;;21556:289;;21879:205;;22112:135;;21462:15;;22277:24;;;;;-1:-1:-1;;22277:24:0;;;;;;;;;;;21774:10;22277:24;;;;;;;;;;;;;;;-1:-1:-1;;22277:24:0;;-1:-1:-1;;22277:24:0;;;-1:-1:-1;;;;;;;22320:20:0;;;;;;:39;;;22354:5;-1:-1:-1;;;;;22344:15:0;:6;-1:-1:-1;;;;;22344:15:0;;22320:39;22312:72;;;;;-1:-1:-1;;;22312:72:0;;;;;;;;;;;;-1:-1:-1;;;22312:72:0;;;;;;;;;;;;;;;22470:5;22442:9;:16;22452:5;-1:-1:-1;;;;;22442:16:0;-1:-1:-1;;;;;22442:16:0;;;;;;;;;;;;:25;22459:7;-1:-1:-1;;;;;22442:25:0;-1:-1:-1;;;;;22442:25:0;;;;;;;;;;;;:33;;;;22507:7;-1:-1:-1;;;;;22491:31:0;22500:5;-1:-1:-1;;;;;22491:31:0;-1:-1:-1;;;;;;;;;;;22516:5:0;22491:31;;;;;;;;;;;;;;;;;;21248:1282;;;;;;;;;;;;:::o;13167:184::-;13241:7;-1:-1:-1;;;;;13269:22:0;;13286:4;13269:22;13261:63;;;;;-1:-1:-1;;;13261:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13342:1:0;13167:184;;;;:::o;10338:75::-;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://07e7b41d28cce2bedfa6de35bda7588176f64aed97837af8334ee71d23369c78

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.