Contract 0x151b1e2635a717bcdc836ecd6fbb62b674fe3e1d

 

Contract Overview

Venus: vXVS Token
Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x860a7755a674e0a2772c6a6d7c0a95d02a291ae322520a86435e6e3df0c3d1ef84287772021-06-19 9:24:258 mins ago0x5fee8d0b6fd0b9073a03137db1dd025c03aaf52a IN  Venus: vXVS Token0 BNB0.000999645
0x4f2150e3d91ba25c6085f4603d0fd688a557a189b2d6268faeeacff05ce3815784287652021-06-19 9:23:498 mins ago0xb5d017a955562d95bf140ed5506d1a6f765a6786 IN  Venus: vXVS Token0 BNB0.00105328
0x6c3224870726dcdb28db1234c4d3ba20398426ffcf407b2330f0ca8c6bcb71d084286422021-06-19 9:17:4014 mins ago0x79269c79e84ad6d9ed1b913e1fb30b26c8384629 IN  Venus: vXVS Token0 BNB0.0010534
0x2593d730013260fd7cfc306bbd70c7af6a323c94e8bb20d330ed05dba6537c8284286352021-06-19 9:17:1915 mins ago0xf2eaeb6a0c248bcd69fd314180d69907b9be7491 IN  Venus: vXVS Token0 BNB0.000903635
0x90485ea7bd3956e4af1e436e4c307f4ed4db55afbe7e7d71d4e6addc51bb2d6684282552021-06-19 8:58:1934 mins ago0x503fe210191a80b1d3bf9a77b489e821729c5c95 IN  Venus: vXVS Token0 BNB0.000999585
0xb10a29d6ca2e3aab37ccc1639afb7e2f339504ced0be0b1256e7f93b048ee1cc84282202021-06-19 8:56:3436 mins ago0x7f6910d1ebd34c6533aa802a0f703337740c6e32 IN  Venus: vXVS Token0 BNB0.000828635
0xf9514e934d0015a96338a664f2c0d8cb0d5e0e1b3d3214a5cb2631e86b10344784281612021-06-19 8:53:3739 mins ago0x7f6910d1ebd34c6533aa802a0f703337740c6e32 IN  Venus: vXVS Token0 BNB0.000828695
0xe3193ab4d18cefbbde3dc5c3c4a4151b932e829c35b5cc9c704e11f1905133bf84281102021-06-19 8:51:0441 mins ago0x76637b9e8edd5c74df16fe57f9b3b9b8dc27c722 IN  Venus: vXVS Token0 BNB0.000865158
0xb882841efd96b84c9b75bb40718c20a29914d4bd8ed0be299d47f801e850c17384280312021-06-19 8:47:0745 mins ago0xcf948e013eb0dc235f9161ec343d58028e23160a IN  Venus: vXVS Token0 BNB0.000957445
0x60bb62f143e14c6b28d7e78b30118e5705729615f83615d1a687fb841f6b86fc84280242021-06-19 8:46:4645 mins ago0xcf948e013eb0dc235f9161ec343d58028e23160a IN  Venus: vXVS Token0 BNB0.00098668
0x1452cd8cd52033a55c889777910fff6e762cc9c7378e072c0df92e8df694dcea84278552021-06-19 8:38:1954 mins ago0x17a7349921396e16c2af28414d7ebf39121c6a3b IN  Venus: vXVS Token0 BNB0.001058724
0x986b1cb42831756453b9ba753febc343c6b343221514efb733255735969569fd84277742021-06-19 8:34:1658 mins ago0x76637b9e8edd5c74df16fe57f9b3b9b8dc27c722 IN  Venus: vXVS Token0 BNB0.000865158
0x6fa09fbad5f5bbf02f7b7e4fe3c2cdad8eeb2353e79dc1d44a0e2e8a5deb93bb84277592021-06-19 8:33:3159 mins ago0x76637b9e8edd5c74df16fe57f9b3b9b8dc27c722 IN  Venus: vXVS Token0 BNB0.001729344
0x40b12d5147c61997ddc0726b84f379c3110f443b5a231ad0053296b31b154a8684277472021-06-19 8:32:5559 mins ago0x2d248e70aa5845a4fb10906616d125de576728fd IN  Venus: vXVS Token0 BNB0.0010884267
0xd447ed78556e1726490248148f44aaccaec828116140a3692544adcfadc48cf184275762021-06-19 8:24:221 hr 8 mins ago0x1d6f55d8cbfc2bb8a915089b4f24fafb86f890aa IN  Venus: vXVS Token0 BNB0.000828695
0x47f6ba7806b35653bcdbc794a18a9645cb187ffe40c7b7670cbf5b2c7c2bfbad84274962021-06-19 8:20:221 hr 12 mins ago0xb6c59502b5b94b7c5dd36b85354438126aa165e5 IN  Venus: vXVS Token0 BNB0.000903635
0x64df448589ccdc49b856e92eeb7c604ddb293bcde00fb19a0d4fd6b54c5f107684273812021-06-19 8:14:371 hr 18 mins ago0x75c6ae741ac4c169418050c719b2a48f2049b805 IN  Venus: vXVS Token0 BNB0.00105334
0xca7ee74eec02e9419730fdb860ef92aa93c0bc8111425526614462e90804bf0b84273792021-06-19 8:14:311 hr 18 mins ago0x47429253ed6d1c0ee4d057f70003cf692d39cf74 IN  Venus: vXVS Token0 BNB0.00023225
0x111c63d96f2544f763f2614a48a328d9d3aaed70d8f5fe8aad5a79c7d8fa157184273442021-06-19 8:12:461 hr 19 mins ago0x47429253ed6d1c0ee4d057f70003cf692d39cf74 IN  Venus: vXVS Token0 BNB0.000760005
0x9592ea2f9598365123b8d8dcfea8eb030091077db3002d99dae4fe1636520ea784272832021-06-19 8:09:431 hr 22 mins ago0xc94e3dfb7c9253d6f01589116fc1f543d98ec0a1 IN  Venus: vXVS Token0 BNB0.000999645
0xbce951acf3b0665f71263b0ace09e03b15b2f52341e7b43996f33581c08015d284272682021-06-19 8:08:551 hr 23 mins ago0xcf3eca8935ed9c82639370d7767a00527843d2da IN  Venus: vXVS Token0 BNB0.00128043
0x66644c58e8293ec1c212448d88a337c0836db52cfeb3ed55393a3b38dfeb124384271342021-06-19 8:02:131 hr 30 mins ago0xf3e2994b6561083b5b91d61725c3116b41ef2cec IN  Venus: vXVS Token0 BNB0.000903575
0x8d0e0a1fca8ac9eebc299e2fbad3cee9c1cf44a9887644746e67a96afbfef13884270722021-06-19 7:59:071 hr 33 mins ago0xb0332a3bbce859b6a5421690eb1765720ec792ab IN  Venus: vXVS Token0 BNB0.0020746545
0x3aa79971481b9d97fc87c7f9386d03de157ec2b606615d5d8af5f7e70e0154de84269962021-06-19 7:55:191 hr 37 mins ago0xc8728ae130381eb77fc9a8b715564b00e83e19df IN  Venus: vXVS Token0 BNB0.000903635
0x7dc45c05c39ce51cff638a86c1dec80c1bc2491ba10de623ce2e3c8834d790f084267432021-06-19 7:42:401 hr 49 mins ago0x80433bbc9df0d73374d1480f528f4dd09a8575aa IN  Venus: vXVS Token0 BNB0.000828635
[ Download CSV Export 

OVERVIEW

Venus is an algorithmic money market and synthetic stablecoin decentralized finance protocol.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: vXVS Token 0xf9f48874050264664bf3d383c7289a0a5bd988960 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: vXVS Token Venus: vXVS Token0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: vXVS Token 0xf9f48874050264664bf3d383c7289a0a5bd988960 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: vXVS Token Venus: vXVS Token0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x719b4887befc48f81b2cf6a1b993b4fb82381b222c296bd617d0b212fab7e5c154713292021-03-07 11:59:24103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0xada82d27c3f847709c1c70603fe165e8a973fff8efb4601bf10f7979bf253aae54713242021-03-07 11:59:09103 days 21 hrs ago 0x516c18dc440f107f12619a6d2cc320622807d0ee Venus: vXVS Token0 BNB
0xada82d27c3f847709c1c70603fe165e8a973fff8efb4601bf10f7979bf253aae54713242021-03-07 11:59:09103 days 21 hrs ago 0x516c18dc440f107f12619a6d2cc320622807d0ee Venus: vXVS Token0 BNB
0xada82d27c3f847709c1c70603fe165e8a973fff8efb4601bf10f7979bf253aae54713242021-03-07 11:59:09103 days 21 hrs ago 0x516c18dc440f107f12619a6d2cc320622807d0ee Venus: vXVS Token0 BNB
0xada82d27c3f847709c1c70603fe165e8a973fff8efb4601bf10f7979bf253aae54713242021-03-07 11:59:09103 days 21 hrs ago Venus: vXVS Token Venus: XVS Token0 BNB
0xada82d27c3f847709c1c70603fe165e8a973fff8efb4601bf10f7979bf253aae54713242021-03-07 11:59:09103 days 21 hrs ago Venus: vXVS Token 0xf9f48874050264664bf3d383c7289a0a5bd988960 BNB
0xada82d27c3f847709c1c70603fe165e8a973fff8efb4601bf10f7979bf253aae54713242021-03-07 11:59:09103 days 21 hrs ago Venus: vXVS Token Venus: vXVS Token0 BNB
0xada82d27c3f847709c1c70603fe165e8a973fff8efb4601bf10f7979bf253aae54713242021-03-07 11:59:09103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: vXVS Token 0xf9f48874050264664bf3d383c7289a0a5bd988960 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: vXVS Token Venus: vXVS Token0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: vXVS Token 0xf9f48874050264664bf3d383c7289a0a5bd988960 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: vXVS Token Venus: vXVS Token0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
0x94f52b8bca93283fc16c7d89628e7053a79e5464085b04d20fd2aa0e1a134e2754713212021-03-07 11:59:00103 days 21 hrs ago Venus: Distribution Venus: vXVS Token0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xeca88125a5adbe82614ffc12d0db554e2e2867c8

Contract Name:
VBep20Delegator

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: VBep20Delegator.sol
pragma solidity ^0.5.16;

import "./VTokenInterfaces.sol";

/**
 * @title Venus's VBep20Delegator Contract
 * @notice VTokens which wrap an EIP-20 underlying and delegate to an implementation
 * @author Venus
 */
contract VBep20Delegator is VTokenInterface, VBep20Interface, VDelegatorInterface {
    /**
     * @notice Construct a new money market
     * @param underlying_ The address of the underlying asset
     * @param comptroller_ The address of the Comptroller
     * @param interestRateModel_ The address of the interest rate model
     * @param initialExchangeRateMantissa_ The initial exchange rate, scaled by 1e18
     * @param name_ BEP-20 name of this token
     * @param symbol_ BEP-20 symbol of this token
     * @param decimals_ BEP-20 decimal precision of this token
     * @param admin_ Address of the administrator of this token
     * @param implementation_ The address of the implementation the contract delegates to
     * @param becomeImplementationData The encoded args for becomeImplementation
     */
    constructor(address underlying_,
                ComptrollerInterface comptroller_,
                InterestRateModel interestRateModel_,
                uint initialExchangeRateMantissa_,
                string memory name_,
                string memory symbol_,
                uint8 decimals_,
                address payable admin_,
                address implementation_,
                bytes memory becomeImplementationData) public {
        // Creator of the contract is admin during initialization
        admin = msg.sender;

        // First delegate gets to initialize the delegator (i.e. storage contract)
        delegateTo(implementation_, abi.encodeWithSignature("initialize(address,address,address,uint256,string,string,uint8)",
                                                            underlying_,
                                                            comptroller_,
                                                            interestRateModel_,
                                                            initialExchangeRateMantissa_,
                                                            name_,
                                                            symbol_,
                                                            decimals_));

        // New implementations always get set via the settor (post-initialize)
        _setImplementation(implementation_, false, becomeImplementationData);

        // Set the proper admin now that initialization is done
        admin = admin_;
    }

    /**
     * @notice Called by the admin to update the implementation of the delegator
     * @param implementation_ The address of the new implementation for delegation
     * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
     * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
     */
    function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public {
        require(msg.sender == admin, "VBep20Delegator::_setImplementation: Caller must be admin");

        if (allowResign) {
            delegateToImplementation(abi.encodeWithSignature("_resignImplementation()"));
        }

        address oldImplementation = implementation;
        implementation = implementation_;

        delegateToImplementation(abi.encodeWithSignature("_becomeImplementation(bytes)", becomeImplementationData));

        emit NewImplementation(oldImplementation, implementation);
    }

    /**
     * @notice Sender supplies assets into the market and receives vTokens in exchange
     * @dev Accrues interest whether or not the operation succeeds, unless reverted
     * @param mintAmount The amount of the underlying asset to supply
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function mint(uint mintAmount) external returns (uint) {
        mintAmount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Sender redeems vTokens in exchange for the underlying asset
     * @dev Accrues interest whether or not the operation succeeds, unless reverted
     * @param redeemTokens The number of vTokens to redeem into underlying
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function redeem(uint redeemTokens) external returns (uint) {
        redeemTokens; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Sender redeems vTokens in exchange for a specified amount of underlying asset
     * @dev Accrues interest whether or not the operation succeeds, unless reverted
     * @param redeemAmount The amount of underlying to redeem
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function redeemUnderlying(uint redeemAmount) external returns (uint) {
        redeemAmount; // Shh
        delegateAndReturn();
    }

    /**
      * @notice Sender borrows assets from the protocol to their own address
      * @param borrowAmount The amount of the underlying asset to borrow
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function borrow(uint borrowAmount) external returns (uint) {
        borrowAmount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Sender repays their own borrow
     * @param repayAmount The amount to repay
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function repayBorrow(uint repayAmount) external returns (uint) {
        repayAmount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Sender repays a borrow belonging to borrower
     * @param borrower the account with the debt being payed off
     * @param repayAmount The amount to repay
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function repayBorrowBehalf(address borrower, uint repayAmount) external returns (uint) {
        borrower; repayAmount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice The sender liquidates the borrowers collateral.
     *  The collateral seized is transferred to the liquidator.
     * @param borrower The borrower of this vToken to be liquidated
     * @param vTokenCollateral The market in which to seize collateral from the borrower
     * @param repayAmount The amount of the underlying borrowed asset to repay
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function liquidateBorrow(address borrower, uint repayAmount, VTokenInterface vTokenCollateral) external returns (uint) {
        borrower; repayAmount; vTokenCollateral; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint amount) external returns (bool) {
        dst; amount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param amount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(address src, address dst, uint256 amount) external returns (bool) {
        src; dst; amount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param amount The number of tokens that are approved (-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint256 amount) external returns (bool) {
        spender; amount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Get the current allowance from `owner` for `spender`
     * @param owner The address of the account which owns the tokens to be spent
     * @param spender The address of the account which may transfer tokens
     * @return The number of tokens allowed to be spent (-1 means infinite)
     */
    function allowance(address owner, address spender) external view returns (uint) {
        owner; spender; // Shh
        delegateToViewAndReturn();
    }

    /**
     * @notice Get the token balance of the `owner`
     * @param owner The address of the account to query
     * @return The number of tokens owned by `owner`
     */
    function balanceOf(address owner) external view returns (uint) {
        owner; // Shh
        delegateToViewAndReturn();
    }

    /**
     * @notice Get the underlying balance of the `owner`
     * @dev This also accrues interest in a transaction
     * @param owner The address of the account to query
     * @return The amount of underlying owned by `owner`
     */
    function balanceOfUnderlying(address owner) external returns (uint) {
        owner; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Get a snapshot of the account's balances, and the cached exchange rate
     * @dev This is used by comptroller to more efficiently perform liquidity checks.
     * @param account Address of the account to snapshot
     * @return (possible error, token balance, borrow balance, exchange rate mantissa)
     */
    function getAccountSnapshot(address account) external view returns (uint, uint, uint, uint) {
        account; // Shh
        delegateToViewAndReturn();
    }

    /**
     * @notice Returns the current per-block borrow interest rate for this vToken
     * @return The borrow interest rate per block, scaled by 1e18
     */
    function borrowRatePerBlock() external view returns (uint) {
        delegateToViewAndReturn();
    }

    /**
     * @notice Returns the current per-block supply interest rate for this vToken
     * @return The supply interest rate per block, scaled by 1e18
     */
    function supplyRatePerBlock() external view returns (uint) {
        delegateToViewAndReturn();
    }

    /**
     * @notice Returns the current total borrows plus accrued interest
     * @return The total borrows with interest
     */
    function totalBorrowsCurrent() external returns (uint) {
        delegateAndReturn();
    }

    /**
     * @notice Accrue interest to updated borrowIndex and then calculate account's borrow balance using the updated borrowIndex
     * @param account The address whose balance should be calculated after updating borrowIndex
     * @return The calculated balance
     */
    function borrowBalanceCurrent(address account) external returns (uint) {
        account; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Return the borrow balance of account based on stored data
     * @param account The address whose balance should be calculated
     * @return The calculated balance
     */
    function borrowBalanceStored(address account) public view returns (uint) {
        account; // Shh
        delegateToViewAndReturn();
    }

   /**
     * @notice Accrue interest then return the up-to-date exchange rate
     * @return Calculated exchange rate scaled by 1e18
     */
    function exchangeRateCurrent() public returns (uint) {
        delegateAndReturn();
    }

    /**
     * @notice Calculates the exchange rate from the underlying to the VToken
     * @dev This function does not accrue interest before calculating the exchange rate
     * @return Calculated exchange rate scaled by 1e18
     */
    function exchangeRateStored() public view returns (uint) {
        delegateToViewAndReturn();
    }

    /**
     * @notice Get cash balance of this vToken in the underlying asset
     * @return The quantity of underlying asset owned by this contract
     */
    function getCash() external view returns (uint) {
        delegateToViewAndReturn();
    }

    /**
      * @notice Applies accrued interest to total borrows and reserves.
      * @dev This calculates interest accrued from the last checkpointed block
      *      up to the current block and writes new checkpoint to storage.
      */
    function accrueInterest() public returns (uint) {
        delegateAndReturn();
    }

    /**
     * @notice Transfers collateral tokens (this market) to the liquidator.
     * @dev Will fail unless called by another vToken during the process of liquidation.
     *  Its absolutely critical to use msg.sender as the borrowed vToken and not a parameter.
     * @param liquidator The account receiving seized collateral
     * @param borrower The account having collateral seized
     * @param seizeTokens The number of vTokens to seize
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function seize(address liquidator, address borrower, uint seizeTokens) external returns (uint) {
        liquidator; borrower; seizeTokens; // Shh
        delegateAndReturn();
    }

    /*** Admin Functions ***/

    /**
      * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer.
      * @param newPendingAdmin New pending admin.
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _setPendingAdmin(address payable newPendingAdmin) external returns (uint) {
        newPendingAdmin; // Shh
        delegateAndReturn();
    }

    /**
      * @notice Sets a new comptroller for the market
      * @dev Admin function to set a new comptroller
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _setComptroller(ComptrollerInterface newComptroller) public returns (uint) {
        newComptroller; // Shh
        delegateAndReturn();
    }

    /**
      * @notice accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh
      * @dev Admin function to accrue interest and set a new reserve factor
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _setReserveFactor(uint newReserveFactorMantissa) external returns (uint) {
        newReserveFactorMantissa; // Shh
        delegateAndReturn();
    }

    /**
      * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin
      * @dev Admin function for pending admin to accept role and update admin
      * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
      */
    function _acceptAdmin() external returns (uint) {
        delegateAndReturn();
    }

    /**
     * @notice Accrues interest and adds reserves by transferring from admin
     * @param addAmount Amount of reserves to add
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function _addReserves(uint addAmount) external returns (uint) {
        addAmount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Accrues interest and reduces reserves by transferring to admin
     * @param reduceAmount Amount of reduction to reserves
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function _reduceReserves(uint reduceAmount) external returns (uint) {
        reduceAmount; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Accrues interest and updates the interest rate model using _setInterestRateModelFresh
     * @dev Admin function to accrue interest and update the interest rate model
     * @param newInterestRateModel the new interest rate model to use
     * @return uint 0=success, otherwise a failure (see ErrorReporter.sol for details)
     */
    function _setInterestRateModel(InterestRateModel newInterestRateModel) public returns (uint) {
        newInterestRateModel; // Shh
        delegateAndReturn();
    }

    /**
     * @notice Internal method to delegate execution to another contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     * @param callee The contract to delegatecall
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateTo(address callee, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returnData) = callee.delegatecall(data);
        assembly {
            if eq(success, 0) {
                revert(add(returnData, 0x20), returndatasize)
            }
        }
        return returnData;
    }

    /**
     * @notice Delegates execution to the implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateToImplementation(bytes memory data) public returns (bytes memory) {
        return delegateTo(implementation, data);
    }

    /**
     * @notice Delegates execution to an implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     *  There are an additional 2 prefix uints from the wrapper returndata, which we ignore since we make an extra hop.
     * @param data The raw data to delegatecall
     * @return The returned bytes from the delegatecall
     */
    function delegateToViewImplementation(bytes memory data) public view returns (bytes memory) {
        (bool success, bytes memory returnData) = address(this).staticcall(abi.encodeWithSignature("delegateToImplementation(bytes)", data));
        assembly {
            if eq(success, 0) {
                revert(add(returnData, 0x20), returndatasize)
            }
        }
        return abi.decode(returnData, (bytes));
    }

    function delegateToViewAndReturn() private view returns (bytes memory) {
        (bool success, ) = address(this).staticcall(abi.encodeWithSignature("delegateToImplementation(bytes)", msg.data));

        assembly {
            let free_mem_ptr := mload(0x40)
            returndatacopy(free_mem_ptr, 0, returndatasize)

            switch success
            case 0 { revert(free_mem_ptr, returndatasize) }
            default { return(add(free_mem_ptr, 0x40), returndatasize) }
        }
    }

    function delegateAndReturn() private returns (bytes memory) {
        (bool success, ) = implementation.delegatecall(msg.data);

        assembly {
            let free_mem_ptr := mload(0x40)
            returndatacopy(free_mem_ptr, 0, returndatasize)

            switch success
            case 0 { revert(free_mem_ptr, returndatasize) }
            default { return(free_mem_ptr, returndatasize) }
        }
    }

    /**
     * @notice Delegates execution to an implementation contract
     * @dev It returns to the external caller whatever the implementation returns or forwards reverts
     */
    function () external payable {
        require(msg.value == 0,"VBep20Delegator:fallback: cannot send value to fallback");

        // delegate all other functions to current implementation
        delegateAndReturn();
    }
}

File 2 of 4: ComptrollerInterface.sol
pragma solidity ^0.5.16;

contract ComptrollerInterface {
    /// @notice Indicator that this is a Comptroller contract (for inspection)
    bool public constant isComptroller = true;

    /*** Assets You Are In ***/

    function enterMarkets(address[] calldata vTokens) external returns (uint[] memory);
    function exitMarket(address vToken) external returns (uint);

    /*** Policy Hooks ***/

    function mintAllowed(address vToken, address minter, uint mintAmount) external returns (uint);
    function mintVerify(address vToken, address minter, uint mintAmount, uint mintTokens) external;

    function redeemAllowed(address vToken, address redeemer, uint redeemTokens) external returns (uint);
    function redeemVerify(address vToken, address redeemer, uint redeemAmount, uint redeemTokens) external;

    function borrowAllowed(address vToken, address borrower, uint borrowAmount) external returns (uint);
    function borrowVerify(address vToken, address borrower, uint borrowAmount) external;

    function repayBorrowAllowed(
        address vToken,
        address payer,
        address borrower,
        uint repayAmount) external returns (uint);
    function repayBorrowVerify(
        address vToken,
        address payer,
        address borrower,
        uint repayAmount,
        uint borrowerIndex) external;

    function liquidateBorrowAllowed(
        address vTokenBorrowed,
        address vTokenCollateral,
        address liquidator,
        address borrower,
        uint repayAmount) external returns (uint);
    function liquidateBorrowVerify(
        address vTokenBorrowed,
        address vTokenCollateral,
        address liquidator,
        address borrower,
        uint repayAmount,
        uint seizeTokens) external;

    function seizeAllowed(
        address vTokenCollateral,
        address vTokenBorrowed,
        address liquidator,
        address borrower,
        uint seizeTokens) external returns (uint);
    function seizeVerify(
        address vTokenCollateral,
        address vTokenBorrowed,
        address liquidator,
        address borrower,
        uint seizeTokens) external;

    function transferAllowed(address vToken, address src, address dst, uint transferTokens) external returns (uint);
    function transferVerify(address vToken, address src, address dst, uint transferTokens) external;

    /*** Liquidity/Liquidation Calculations ***/

    function liquidateCalculateSeizeTokens(
        address vTokenBorrowed,
        address vTokenCollateral,
        uint repayAmount) external view returns (uint, uint);

    function mintedVAIOf(address owner) external view returns (uint);
    function setMintedVAIOf(address owner, uint amount) external returns (uint);
    function getVAIMintRate() external view returns (uint);
}

File 3 of 4: InterestRateModel.sol
pragma solidity ^0.5.16;

/**
  * @title Venus's InterestRateModel Interface
  * @author Venus
  */
contract InterestRateModel {
    /// @notice Indicator that this is an InterestRateModel contract (for inspection)
    bool public constant isInterestRateModel = true;

    /**
      * @notice Calculates the current borrow interest rate per block
      * @param cash The total amount of cash the market has
      * @param borrows The total amount of borrows the market has outstanding
      * @param reserves The total amnount of reserves the market has
      * @return The borrow rate per block (as a percentage, and scaled by 1e18)
      */
    function getBorrowRate(uint cash, uint borrows, uint reserves) external view returns (uint);

    /**
      * @notice Calculates the current supply interest rate per block
      * @param cash The total amount of cash the market has
      * @param borrows The total amount of borrows the market has outstanding
      * @param reserves The total amnount of reserves the market has
      * @param reserveFactorMantissa The current reserve factor the market has
      * @return The supply rate per block (as a percentage, and scaled by 1e18)
      */
    function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) external view returns (uint);

}

File 4 of 4: VTokenInterfaces.sol
pragma solidity ^0.5.16;

import "./ComptrollerInterface.sol";
import "./InterestRateModel.sol";

contract VTokenStorage {
    /**
     * @dev Guard variable for re-entrancy checks
     */
    bool internal _notEntered;

    /**
     * @notice EIP-20 token name for this token
     */
    string public name;

    /**
     * @notice EIP-20 token symbol for this token
     */
    string public symbol;

    /**
     * @notice EIP-20 token decimals for this token
     */
    uint8 public decimals;

    /**
     * @notice Maximum borrow rate that can ever be applied (.0005% / block)
     */

    uint internal constant borrowRateMaxMantissa = 0.0005e16;

    /**
     * @notice Maximum fraction of interest that can be set aside for reserves
     */
    uint internal constant reserveFactorMaxMantissa = 1e18;

    /**
     * @notice Administrator for this contract
     */
    address payable public admin;

    /**
     * @notice Pending administrator for this contract
     */
    address payable public pendingAdmin;

    /**
     * @notice Contract which oversees inter-vToken operations
     */
    ComptrollerInterface public comptroller;

    /**
     * @notice Model which tells what the current interest rate should be
     */
    InterestRateModel public interestRateModel;

    /**
     * @notice Initial exchange rate used when minting the first VTokens (used when totalSupply = 0)
     */
    uint internal initialExchangeRateMantissa;

    /**
     * @notice Fraction of interest currently set aside for reserves
     */
    uint public reserveFactorMantissa;

    /**
     * @notice Block number that interest was last accrued at
     */
    uint public accrualBlockNumber;

    /**
     * @notice Accumulator of the total earned interest rate since the opening of the market
     */
    uint public borrowIndex;

    /**
     * @notice Total amount of outstanding borrows of the underlying in this market
     */
    uint public totalBorrows;

    /**
     * @notice Total amount of reserves of the underlying held in this market
     */
    uint public totalReserves;

    /**
     * @notice Total number of tokens in circulation
     */
    uint public totalSupply;

    /**
     * @notice Official record of token balances for each account
     */
    mapping (address => uint) internal accountTokens;

    /**
     * @notice Approved token transfer amounts on behalf of others
     */
    mapping (address => mapping (address => uint)) internal transferAllowances;

    /**
     * @notice Container for borrow balance information
     * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action
     * @member interestIndex Global borrowIndex as of the most recent balance-changing action
     */
    struct BorrowSnapshot {
        uint principal;
        uint interestIndex;
    }

    /**
     * @notice Mapping of account addresses to outstanding borrow balances
     */
    mapping(address => BorrowSnapshot) internal accountBorrows;
}

contract VTokenInterface is VTokenStorage {
    /**
     * @notice Indicator that this is a VToken contract (for inspection)
     */
    bool public constant isVToken = true;


    /*** Market Events ***/

    /**
     * @notice Event emitted when interest is accrued
     */
    event AccrueInterest(uint cashPrior, uint interestAccumulated, uint borrowIndex, uint totalBorrows);

    /**
     * @notice Event emitted when tokens are minted
     */
    event Mint(address minter, uint mintAmount, uint mintTokens);

    /**
     * @notice Event emitted when tokens are redeemed
     */
    event Redeem(address redeemer, uint redeemAmount, uint redeemTokens);

    /**
     * @notice Event emitted when underlying is borrowed
     */
    event Borrow(address borrower, uint borrowAmount, uint accountBorrows, uint totalBorrows);

    /**
     * @notice Event emitted when a borrow is repaid
     */
    event RepayBorrow(address payer, address borrower, uint repayAmount, uint accountBorrows, uint totalBorrows);

    /**
     * @notice Event emitted when a borrow is liquidated
     */
    event LiquidateBorrow(address liquidator, address borrower, uint repayAmount, address vTokenCollateral, uint seizeTokens);


    /*** Admin Events ***/

    /**
     * @notice Event emitted when pendingAdmin is changed
     */
    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);

    /**
     * @notice Event emitted when pendingAdmin is accepted, which means admin is updated
     */
    event NewAdmin(address oldAdmin, address newAdmin);

    /**
     * @notice Event emitted when comptroller is changed
     */
    event NewComptroller(ComptrollerInterface oldComptroller, ComptrollerInterface newComptroller);

    /**
     * @notice Event emitted when interestRateModel is changed
     */
    event NewMarketInterestRateModel(InterestRateModel oldInterestRateModel, InterestRateModel newInterestRateModel);

    /**
     * @notice Event emitted when the reserve factor is changed
     */
    event NewReserveFactor(uint oldReserveFactorMantissa, uint newReserveFactorMantissa);

    /**
     * @notice Event emitted when the reserves are added
     */
    event ReservesAdded(address benefactor, uint addAmount, uint newTotalReserves);

    /**
     * @notice Event emitted when the reserves are reduced
     */
    event ReservesReduced(address admin, uint reduceAmount, uint newTotalReserves);

    /**
     * @notice EIP20 Transfer event
     */
    event Transfer(address indexed from, address indexed to, uint amount);

    /**
     * @notice EIP20 Approval event
     */
    event Approval(address indexed owner, address indexed spender, uint amount);

    /**
     * @notice Failure event
     */
    event Failure(uint error, uint info, uint detail);


    /*** User Interface ***/

    function transfer(address dst, uint amount) external returns (bool);
    function transferFrom(address src, address dst, uint amount) external returns (bool);
    function approve(address spender, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function balanceOfUnderlying(address owner) external returns (uint);
    function getAccountSnapshot(address account) external view returns (uint, uint, uint, uint);
    function borrowRatePerBlock() external view returns (uint);
    function supplyRatePerBlock() external view returns (uint);
    function totalBorrowsCurrent() external returns (uint);
    function borrowBalanceCurrent(address account) external returns (uint);
    function borrowBalanceStored(address account) public view returns (uint);
    function exchangeRateCurrent() public returns (uint);
    function exchangeRateStored() public view returns (uint);
    function getCash() external view returns (uint);
    function accrueInterest() public returns (uint);
    function seize(address liquidator, address borrower, uint seizeTokens) external returns (uint);


    /*** Admin Functions ***/

    function _setPendingAdmin(address payable newPendingAdmin) external returns (uint);
    function _acceptAdmin() external returns (uint);
    function _setComptroller(ComptrollerInterface newComptroller) public returns (uint);
    function _setReserveFactor(uint newReserveFactorMantissa) external returns (uint);
    function _reduceReserves(uint reduceAmount) external returns (uint);
    function _setInterestRateModel(InterestRateModel newInterestRateModel) public returns (uint);
}

contract VBep20Storage {
    /**
     * @notice Underlying asset for this VToken
     */
    address public underlying;
}

contract VBep20Interface is VBep20Storage {

    /*** User Interface ***/

    function mint(uint mintAmount) external returns (uint);
    function redeem(uint redeemTokens) external returns (uint);
    function redeemUnderlying(uint redeemAmount) external returns (uint);
    function borrow(uint borrowAmount) external returns (uint);
    function repayBorrow(uint repayAmount) external returns (uint);
    function repayBorrowBehalf(address borrower, uint repayAmount) external returns (uint);
    function liquidateBorrow(address borrower, uint repayAmount, VTokenInterface vTokenCollateral) external returns (uint);


    /*** Admin Functions ***/

    function _addReserves(uint addAmount) external returns (uint);
}

contract VDelegationStorage {
    /**
     * @notice Implementation address for this contract
     */
    address public implementation;
}

contract VDelegatorInterface is VDelegationStorage {
    /**
     * @notice Emitted when implementation is changed
     */
    event NewImplementation(address oldImplementation, address newImplementation);

    /**
     * @notice Called by the admin to update the implementation of the delegator
     * @param implementation_ The address of the new implementation for delegation
     * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation
     * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation
     */
    function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public;
}

contract VDelegateInterface is VDelegationStorage {
    /**
     * @notice Called by the delegator on a delegate to initialize it for duty
     * @dev Should revert if any issues arise which make it unfit for delegation
     * @param data The encoded bytes data for any initialization
     */
    function _becomeImplementation(bytes memory data) public;

    /**
     * @notice Called by the delegator on a delegate to forfeit its responsibility
     */
    function _resignImplementation() public;
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"underlying_","type":"address"},{"internalType":"contract ComptrollerInterface","name":"comptroller_","type":"address"},{"internalType":"contract InterestRateModel","name":"interestRateModel_","type":"address"},{"internalType":"uint256","name":"initialExchangeRateMantissa_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address payable","name":"admin_","type":"address"},{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cashPrior","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"interestAccumulated","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"borrowIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"AccrueInterest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"borrowAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"Borrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"error","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"info","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"detail","type":"uint256"}],"name":"Failure","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidator","type":"address"},{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"vTokenCollateral","type":"address"},{"indexed":false,"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"LiquidateBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintTokens","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract ComptrollerInterface","name":"oldComptroller","type":"address"},{"indexed":false,"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"NewComptroller","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract InterestRateModel","name":"oldInterestRateModel","type":"address"},{"indexed":false,"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"NewMarketInterestRateModel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldReserveFactorMantissa","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"NewReserveFactor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"borrower","type":"address"},{"indexed":false,"internalType":"uint256","name":"repayAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accountBorrows","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBorrows","type":"uint256"}],"name":"RepayBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"benefactor","type":"address"},{"indexed":false,"internalType":"uint256","name":"addAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"uint256","name":"reduceAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalReserves","type":"uint256"}],"name":"ReservesReduced","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"addAmount","type":"uint256"}],"name":"_addReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"reduceAmount","type":"uint256"}],"name":"_reduceReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ComptrollerInterface","name":"newComptroller","type":"address"}],"name":"_setComptroller","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"bool","name":"allowResign","type":"bool"},{"internalType":"bytes","name":"becomeImplementationData","type":"bytes"}],"name":"_setImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract InterestRateModel","name":"newInterestRateModel","type":"address"}],"name":"_setInterestRateModel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newReserveFactorMantissa","type":"uint256"}],"name":"_setReserveFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"accrualBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"accrueInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"borrowAmount","type":"uint256"}],"name":"borrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"borrowBalanceStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"borrowIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"borrowRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"comptroller","outputs":[{"internalType":"contract ComptrollerInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"delegateToViewImplementation","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"exchangeRateCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"exchangeRateStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"interestRateModel","outputs":[{"internalType":"contract InterestRateModel","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isVToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"},{"internalType":"contract VTokenInterface","name":"vTokenCollateral","type":"address"}],"name":"liquidateBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"redeemTokens","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"redeemAmount","type":"uint256"}],"name":"redeemUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"repayAmount","type":"uint256"}],"name":"repayBorrowBehalf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reserveFactorMantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"liquidator","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"seizeTokens","type":"uint256"}],"name":"seize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"supplyRatePerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalBorrows","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"totalBorrowsCurrent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620019eb380380620019eb83398181016040526101408110156200003857600080fd5b81516020830151604080850151606086015160808701805193519597949692959194919392820192846401000000008211156200007457600080fd5b9083019060208201858111156200008a57600080fd5b8251640100000000811182820188101715620000a557600080fd5b82525081516020918201929091019080838360005b83811015620000d4578181015183820152602001620000ba565b50505050905090810190601f168015620001025780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200012657600080fd5b9083019060208201858111156200013c57600080fd5b82516401000000008111828201881017156200015757600080fd5b82525081516020918201929091019080838360005b83811015620001865781810151838201526020016200016c565b50505050905090810190601f168015620001b45780820380516001836020036101000a031916815260200191505b50604081815260208301519083015160608401516080909401805192969195919284640100000000821115620001e957600080fd5b908301906020820185811115620001ff57600080fd5b82516401000000008111828201881017156200021a57600080fd5b82525081516020918201929091019080838360005b83811015620002495781810151838201526020016200022f565b50505050905090810190601f168015620002775780820380516001836020036101000a031916815260200191505b5060405250505033600360016101000a8154816001600160a01b0302191690836001600160a01b0316021790555062000424828b8b8b8b8b8b8b60405160240180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b0316815260200185815260200180602001806020018460ff1660ff168152602001838103835286818151815260200191508051906020019080838360005b838110156200035157818101518382015260200162000337565b50505050905090810190601f1680156200037f5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015620003b45781810151838201526020016200039a565b50505050905090810190601f168015620003e25780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116631a31d46560e01b17909152909a50620004721698505050505050505050565b506200043c826000836001600160e01b036200053916565b5050600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200071a95505050505050565b606060006060846001600160a01b0316846040518082805190602001908083835b60208310620004b45780518252601f19909201916020918201910162000493565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811462000516576040519150601f19603f3d011682016040523d82523d6000602084013e6200051b565b606091505b5091509150600082141562000531573d60208201fd5b949350505050565b60035461010090046001600160a01b03163314620005895760405162461bcd60e51b8152600401808060200182810382526039815260200180620019b26039913960400191505060405180910390fd5b8115620005cb576040805160048152602481019091526020810180516001600160e01b0390811663153ab50560e01b17909152620005c99190620006f016565b505b601280546001600160a01b038581166001600160a01b03198316179092556040516020602482018181528551604484015285519490931693620006a1938693909283926064909201919085019080838360005b83811015620006385781810151838201526020016200061e565b50505050905090810190601f168015620006665780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116630adccee560e31b17909152909350620006f016915050565b50601254604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b60125460609062000714906001600160a01b0316836001600160e01b036200047216565b92915050565b611288806200072a6000396000f3fe6080604052600436106102c95760003560e01c806370a0823111610175578063b71d1a0c116100dc578063e9c714f211610095578063f5e3c4621161006f578063f5e3c46214610955578063f851a44014610998578063f8f9da2814610532578063fca7820b14610499576102c9565b8063e9c714f214610835578063f2b3abbd146104ea578063f3fdb15a14610940576102c9565b8063b71d1a0c146104ea578063bd6d894d14610835578063c37f68e2146108ac578063c5ebeaec14610499578063db006a7514610499578063dd62ed3e14610905576102c9565b8063a0712d681161012e578063a0712d6814610499578063a6afed9514610835578063a9059cbb1461044c578063aa5af0fd14610874578063ae9d70b014610532578063b2a02ff114610889576102c9565b806370a082311461080257806373acee9814610835578063852a12e3146104995780638f840ddd1461084a57806395d89b411461085f57806395dd919314610802576102c9565b80633af9e6691161023457806347bd3718116101ed5780635fe3b567116101c75780635fe3b567146107c3578063601a0bf1146104995780636c540baf146107d85780636f307dc3146107ed576102c9565b806347bd3718146106cf578063555bcc40146106e45780635c60da1b146107ae576102c9565b80633af9e669146104ea5780633b1d21a2146105325780633d9ea3a1146106095780633e941010146104995780634487152f1461061e5780634576b5db146104ea576102c9565b806318160ddd1161028657806318160ddd1461051d578063182df0f51461053257806323b872dd146105475780632608f8181461058a57806326782247146105ad578063313ce567146105de576102c9565b806306fdde03146103115780630933c1ed1461039b578063095ea7b31461044c5780630e75270214610499578063173b9904146104d557806317bfdfbc146104ea575b34156103065760405162461bcd60e51b815260040180806020018281038252603781526020018061121d6037913960400191505060405180910390fd5b61030e6109ad565b50005b34801561031d57600080fd5b50610326610a35565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610360578181015183820152602001610348565b50505050905090810190601f16801561038d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103a757600080fd5b50610326600480360360208110156103be57600080fd5b810190602081018135600160201b8111156103d857600080fd5b8201836020820111156103ea57600080fd5b803590602001918460018302840111600160201b8311171561040b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ac2945050505050565b34801561045857600080fd5b506104856004803603604081101561046f57600080fd5b506001600160a01b038135169060200135610ae1565b604080519115158252519081900360200190f35b3480156104a557600080fd5b506104c3600480360360208110156104bc57600080fd5b5035610af2565b60408051918252519081900360200190f35b3480156104e157600080fd5b506104c3610b02565b3480156104f657600080fd5b506104c36004803603602081101561050d57600080fd5b50356001600160a01b0316610af2565b34801561052957600080fd5b506104c3610b08565b34801561053e57600080fd5b506104c3610b0e565b34801561055357600080fd5b506104856004803603606081101561056a57600080fd5b506001600160a01b03813581169160208101359091169060400135610b1c565b34801561059657600080fd5b506104c36004803603604081101561046f57600080fd5b3480156105b957600080fd5b506105c2610b2e565b604080516001600160a01b039092168252519081900360200190f35b3480156105ea57600080fd5b506105f3610b3d565b6040805160ff9092168252519081900360200190f35b34801561061557600080fd5b50610485610b46565b34801561062a57600080fd5b506103266004803603602081101561064157600080fd5b810190602081018135600160201b81111561065b57600080fd5b82018360208201111561066d57600080fd5b803590602001918460018302840111600160201b8311171561068e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b4b945050505050565b3480156106db57600080fd5b506104c3610d6a565b3480156106f057600080fd5b506107ac6004803603606081101561070757600080fd5b6001600160a01b03823516916020810135151591810190606081016040820135600160201b81111561073857600080fd5b82018360208201111561074a57600080fd5b803590602001918460018302840111600160201b8311171561076b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610d70945050505050565b005b3480156107ba57600080fd5b506105c2610f13565b3480156107cf57600080fd5b506105c2610f22565b3480156107e457600080fd5b506104c3610f31565b3480156107f957600080fd5b506105c2610f37565b34801561080e57600080fd5b506104c36004803603602081101561082557600080fd5b50356001600160a01b0316610f46565b34801561084157600080fd5b506104c3610f50565b34801561085657600080fd5b506104c3610f5a565b34801561086b57600080fd5b50610326610f60565b34801561088057600080fd5b506104c3610fb8565b34801561089557600080fd5b506104c36004803603606081101561056a57600080fd5b3480156108b857600080fd5b506108df600480360360208110156108cf57600080fd5b50356001600160a01b0316610fbe565b604080519485526020850193909352838301919091526060830152519081900360800190f35b34801561091157600080fd5b506104c36004803603604081101561092857600080fd5b506001600160a01b0381358116916020013516610fd4565b34801561094c57600080fd5b506105c2610fde565b34801561096157600080fd5b506104c36004803603606081101561097857600080fd5b506001600160a01b03813581169160208101359160409091013516610b1c565b3480156109a457600080fd5b506105c2610fed565b6012546040516060916000916001600160a01b0390911690829036908083838082843760405192019450600093509091505080830381855af49150503d8060008114610a15576040519150601f19603f3d011682016040523d82523d6000602084013e610a1a565b606091505b505090506040513d6000823e818015610a31573d82f35b3d82fd5b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610aba5780601f10610a8f57610100808354040283529160200191610aba565b820191906000526020600020905b815481529060010190602001808311610a9d57829003601f168201915b505050505081565b601254606090610adb906001600160a01b031683611001565b92915050565b6000610aeb6109ad565b5092915050565b6000610afc6109ad565b50919050565b60085481565b600d5481565b6000610b186110c3565b5090565b6000610b266109ad565b509392505050565b6004546001600160a01b031681565b60035460ff1681565b600181565b606060006060306001600160a01b0316846040516024018080602001828103825283818151815260200191508051906020019080838360005b83811015610b9c578181015183820152602001610b84565b50505050905090810190601f168015610bc95780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b0316630933c1ed60e01b178152905182519295509350839250908083835b60208310610c245780518252601f199092019160209182019101610c05565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610c84576040519150601f19603f3d011682016040523d82523d6000602084013e610c89565b606091505b50915091506000821415610c9e573d60208201fd5b808060200190516020811015610cb357600080fd5b8101908080516040519392919084600160201b821115610cd257600080fd5b908301906020820185811115610ce757600080fd5b8251600160201b811182820188101715610d0057600080fd5b82525081516020918201929091019080838360005b83811015610d2d578181015183820152602001610d15565b50505050905090810190601f168015610d5a5780820380516001836020036101000a031916815260200191505b5060405250505092505050919050565b600b5481565b60035461010090046001600160a01b03163314610dbe5760405162461bcd60e51b81526004018080602001828103825260398152602001806111e46039913960400191505060405180910390fd5b8115610df8576040805160048152602481019091526020810180516001600160e01b031663153ab50560e01b179052610df690610ac2565b505b601280546001600160a01b038581166001600160a01b03198316179092556040516020602482018181528551604484015285519490931693610ec4938693909283926064909201919085019080838360005b83811015610e62578181015183820152602001610e4a565b50505050905090810190601f168015610e8f5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0316630adccee560e31b1790529250610ac2915050565b50601254604080516001600160a01b038085168252909216602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a150505050565b6012546001600160a01b031681565b6005546001600160a01b031681565b60095481565b6011546001600160a01b031681565b6000610afc6110c3565b6000610b186109ad565b600c5481565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610aba5780601f10610a8f57610100808354040283529160200191610aba565b600a5481565b600080600080610fcc6110c3565b509193509193565b6000610aeb6110c3565b6006546001600160a01b031681565b60035461010090046001600160a01b031681565b606060006060846001600160a01b0316846040518082805190602001908083835b602083106110415780518252601f199092019160209182019101611022565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146110a1576040519150601f19603f3d011682016040523d82523d6000602084013e6110a6565b606091505b509150915060008214156110bb573d60208201fd5b949350505050565b60606000306001600160a01b03166000366040516024018080602001828103825284848281815260200192508082843760008382015260408051601f909201601f1990811690940182810390940182529283526020810180516001600160e01b0316630933c1ed60e01b17815292518151919750955085945091925081905083835b602083106111645780518252601f199092019160209182019101611145565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146111c4576040519150601f19603f3d011682016040523d82523d6000602084013e6111c9565b606091505b505090506040513d6000823e818015610a31573d60408301f3fe56426570323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696e56426570323044656c656761746f723a66616c6c6261636b3a2063616e6e6f742073656e642076616c756520746f2066616c6c6261636ba265627a7a72315820f76198fce4f6ce47315ef097a3e79ac8147a52771429049461549f9b5f73fd0664736f6c6343000511003256426570323044656c656761746f723a3a5f736574496d706c656d656e746174696f6e3a2043616c6c6572206d7573742062652061646d696e0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000fd36e2c2a6789db23113685031d7f1632915838400000000000000000000000049fade95f94e5ec7c1f4ae13a6d6f9ca18b2f430000000000000000000000000000000000000000000a56fa5b99019a5c80000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000080000000000000000000000001ca3ac3686071be692be7f1fbecd668641476d7e000000000000000000000000f9f48874050264664bf3d383c7289a0a5bd9889600000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000a56656e75732055534443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005765553444300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000

Deployed ByteCode Sourcemap

213:19475:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19510:9;:14;19502:81;;;;-1:-1:-1;;;19502:81:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19660:19;:17;:19::i;:::-;;213:19475;289:18:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;289:18:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;289:18:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17373:139:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17373:139:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17373:139:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;17373:139:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17373:139:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;17373:139:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;17373:139:2;;-1:-1:-1;17373:139:2;;-1:-1:-1;;;;;17373:139:2:i;8137:142::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8137:142:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8137:142:2;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5586:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5586:127:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5586:127:2;;:::i;:::-;;;;;;;;;;;;;;;;1541:33:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1541:33:3;;;:::i;10991:131:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10991:131:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10991:131:2;-1:-1:-1;;;;;10991:131:2;;:::i;2161:23:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2161:23:3;;;:::i;11943:99:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11943:99:2;;;:::i;7520:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7520:157:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7520:157:2;;;;;;;;;;;;;;;;;:::i;5993:161::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5993:161:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;985:35:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;985:35:3;;;:::i;:::-;;;;-1:-1:-1;;;;;985:35:3;;;;;;;;;;;;;;475:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;475:21:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3155:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3155:36:3;;;:::i;17925:426:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17925:426:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17925:426:2;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;17925:426:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17925:426:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;17925:426:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;17925:426:2;;-1:-1:-1;17925:426:2;;-1:-1:-1;;;;;17925:426:2:i;1935:24:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1935:24:3;;;:::i;2951:632:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2951:632:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;2951:632:2;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;2951:632:2;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2951:632:2;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2951:632:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;2951:632:2;;-1:-1:-1;2951:632:2;;-1:-1:-1;;;;;2951:632:2:i;:::-;;8539:29:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8539:29:3;;;:::i;1106:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1106:39:3;;;:::i;1659:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1659:30:3;;;:::i;7679:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7679:25:3;;;:::i;8937:127:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8937:127:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8937:127:2;-1:-1:-1;;;;;8937:127:2;;:::i;10616:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10616:91:2;;;:::i;2060:25:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2060:25:3;;;:::i;380:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;380:20:3;;;:::i;1805:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1805:23:3;;;:::i;13179:181:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13179:181:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;9776:158:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9776:158:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9776:158:2;-1:-1:-1;;;;;9776:158:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8601:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8601:153:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;8601:153:2;;;;;;;;;;:::i;1242:42:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1242:42:3;;;:::i;6626:211:2:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6626:211:2;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6626:211:2;;;;;;;;;;;;;;;;;:::i;879:28:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;879:28:3;;;:::i;18858:416:2:-;18947:14;;:37;;18904:12;;18929;;-1:-1:-1;;;;;18947:14:2;;;;18929:12;;18975:8;;18947:37;18929:12;18975:8;;18929:12;18947:37;1:33:-1;18947:37:2;;45:16:-1;;;-1:-1;18947:37:2;;-1:-1:-1;18947:37:2;;-1:-1:-1;;18947:37:2;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;18928:56:2;;;19044:4;19038:11;19094:14;19091:1;19077:12;19062:47;19130:7;19150:47;;;;19241:14;19227:12;19220:36;19150:47;19180:14;19166:12;19159:36;289:18:3;;;;;;;;;;;;;;;-1:-1:-1;;289:18:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17373:139:2:-;17484:14;;17442:12;;17473:32;;-1:-1:-1;;;;;17484:14:2;17500:4;17473:10;:32::i;:::-;17466:39;17373:139;-1:-1:-1;;17373:139:2:o;8137:142::-;8205:4;8253:19;:17;:19::i;:::-;;8137:142;;;;:::o;5586:127::-;5643:4;5687:19;:17;:19::i;:::-;;5586:127;;;:::o;1541:33:3:-;;;;:::o;2161:23::-;;;;:::o;11943:99:2:-;11994:4;12010:25;:23;:25::i;:::-;;11943:99;:::o;7520:157::-;7602:4;7651:19;:17;:19::i;:::-;;7520:157;;;;;:::o;985:35:3:-;;;-1:-1:-1;;;;;985:35:3;;:::o;475:21::-;;;;;;:::o;3155:36::-;3187:4;3155:36;:::o;17925:426:2:-;18003:12;18028;18042:23;18077:4;-1:-1:-1;;;;;18069:24:2;18153:4;18094:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18094:64:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18094:64:2;;;-1:-1:-1;;26:21;;;22:32;6:49;;18094:64:2;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18069:90:2;;;;18094:64;;-1:-1:-1;18069:90:2;-1:-1:-1;18069:90:2;;-1:-1:-1;25:18;18069:90:2;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18069:90:2;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;18027:132:2;;;;18207:1;18198:7;18195:14;18192:2;;;18258:14;18251:4;18239:10;18235:21;18228:45;18192:2;18324:10;18313:31;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18313:31:2;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;18313:31:2;;420:4:-1;411:14;;;;18313:31:2;;;;;411:14:-1;18313:31:2;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18313:31:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18306:38;;;;17925:426;;;:::o;1935:24:3:-;;;;:::o;2951:632:2:-;3100:5;;;;;-1:-1:-1;;;;;3100:5:2;3086:10;:19;3078:89;;;;-1:-1:-1;;;3078:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3182:11;3178:118;;;3234:50;;;22:32:-1;6:49;;3234:50:2;;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3209:76:2;;:24;:76::i;:::-;;3178:118;3334:14;;;-1:-1:-1;;;;;3358:32:2;;;-1:-1:-1;;;;;;3358:32:2;;;;;;3426:81;;;;;;;;;;;;;;;;;3334:14;;;;;3401:107;;3482:24;;3426:81;;;;;;;;;;;;;;;;3306:25;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3426:81:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3426:81:2;;;-1:-1:-1;;26:21;;;22:32;6:49;;3426:81:2;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3426:81:2;-1:-1:-1;3401:24:2;;-1:-1:-1;;3401:107:2:i;:::-;-1:-1:-1;3561:14:2;;3524:52;;;-1:-1:-1;;;;;3524:52:2;;;;;3561:14;;;3524:52;;;;;;;;;;;;;;;;2951:632;;;;:::o;8539:29:3:-;;;-1:-1:-1;;;;;8539:29:3;;:::o;1106:39::-;;;-1:-1:-1;;;;;1106:39:3;;:::o;1659:30::-;;;;:::o;7679:25::-;;;-1:-1:-1;;;;;7679:25:3;;:::o;8937:127:2:-;8994:4;9032:25;:23;:25::i;10616:91::-;10665:4;10681:19;:17;:19::i;2060:25:3:-;;;;:::o;380:20::-;;;;;;;;;;;;;;-1:-1:-1;;380:20:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1805:23;;;;:::o;9776:158:2:-;9844:4;9850;9856;9862;9902:25;:23;:25::i;:::-;;9776:158;;;;;:::o;8601:153::-;8675:4;8722:25;:23;:25::i;1242:42:3:-;;;-1:-1:-1;;;;;1242:42:3;;:::o;879:28::-;;;;;;-1:-1:-1;;;;;879:28:3;;:::o;16744:335:2:-;16817:12;16842;16856:23;16883:6;-1:-1:-1;;;;;16883:19:2;16903:4;16883:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16883:25:2;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;16841:67:2;;;;16956:1;16947:7;16944:14;16941:2;;;17007:14;17000:4;16988:10;16984:21;16977:45;16941:2;17062:10;16744:335;-1:-1:-1;;;;16744:335:2:o;18357:495::-;18414:12;18439;18465:4;-1:-1:-1;;;;;18457:24:2;18541:8;;18482:68;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;18482:68:2;;;137:4:-1;117:14;;;-1:-1;;113:30;;;157:16;;;26:21;;;22:32;;;6:49;;18482:68:2;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;18457:94:2;;;;18482:68;;-1:-1:-1;18457:94:2;-1:-1:-1;18457:94:2;;-1:-1:-1;25:18;;-1:-1;18457:94:2;;-1:-1:-1;18457:94:2;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18457:94:2;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;18438:113:2;;;18611:4;18605:11;18661:14;18658:1;18644:12;18629:47;18697:7;18717:47;;;;18819:14;18812:4;18798:12;18794:23;18787:47

Swarm Source

bzzr://f76198fce4f6ce47315ef097a3e79ac8147a52771429049461549f9b5f73fd06
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.