Contract 0xF6a0690f22da5464924A28a8198E8ecA69ffc47e

Contract Overview

Balance:
0 Ether

Token:
Txn Hash Method
Block
From
To
Value
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bfBorrow249100112021-05-18 9:22:5611 hrs 27 mins ago0xd3bbf6afc5286d245acc947f4c5bcff4ff3726e2 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0143252420
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7Borrow249099232021-05-18 9:17:0411 hrs 33 mins ago0xd3bbf6afc5286d245acc947f4c5bcff4ff3726e2 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0071611610
0x783980235aa36f8f983464eb4fae2812ae43675748c926de10d31a5621304b34Borrow249099012021-05-18 9:15:3611 hrs 35 mins ago0xd3bbf6afc5286d245acc947f4c5bcff4ff3726e2 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0071626810
0x25793b4a3cd1c0f0ce1706304850546b16067f66d2a5d546d9b5d975c7dd450eBorrow249098742021-05-18 9:13:4811 hrs 36 mins ago0xd3bbf6afc5286d245acc947f4c5bcff4ff3726e2 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0071641410
0xad7a16cafa3e8eae1f9d949d8968c49c4d4d1bc711cecdb3fe42a75d48c5bc68Borrow249088502021-05-18 8:05:2012 hrs 45 mins ago0xaf9e002a4e71f886e1082c40322181f022d338d8 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.000716251
0x04cb08772138271d8cf42ab59abf296fdb1685777401ae43959ba5ea9b427a98Borrow248935042021-05-17 15:01:441 day 5 hrs ago0xaf9e002a4e71f886e1082c40322181f022d338d8 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.000716251
0x6dc2db02a32ef2e7b04d0b85d868c44379c7cac2c72e2abf544c0fff91ca5e2fBurn247677812021-05-10 11:22:568 days 9 hrs ago0x55aaf5708707c7c6d404f11abc739296a2e28ef8 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.000239282
0x9bf54126080bd376d576d920e3c3f8695ea95a9c0bd9fee15f30b3e16db02cf6Mint247677622021-05-10 11:21:088 days 9 hrs ago0x55aaf5708707c7c6d404f11abc739296a2e28ef8 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0003488482
0x8232472c487b2df5716fbcb836e33802e6b40d27c04662078c5084eeffc688cdBorrow246355362021-05-03 20:37:4815 days 12 mins ago0xaf9e002a4e71f886e1082c40322181f022d338d8 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.000699551
0x3d724d372b2f3f38a483d448dc5a84955f01d0d3c6d55ed80707e02ea3ce9eb8Borrow245403562021-04-29 9:33:2419 days 11 hrs ago0xd3bbf6afc5286d245acc947f4c5bcff4ff3726e2 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0142914820
0x0c23c7a182931e51a697b83dc8879a76372a5f1d0c76e913638d944eaa44566cBorrow244795502021-04-26 12:49:0822 days 8 hrs ago0x389b4bbeafd11a90e25824f3057b92db5cd6e796 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.020987430
0x68381563399a694e4401e3ebf8e3a21f137243a8f3e73a7d118330b4fdfb13feBorrow244791932021-04-26 12:24:5222 days 8 hrs ago0x389b4bbeafd11a90e25824f3057b92db5cd6e796 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.013991620
0x417661ad69c82b14cdc2cd4e15aa26af576ae3456534b500d36c234189eac86aBorrow244790432021-04-26 12:14:4422 days 8 hrs ago0x389b4bbeafd11a90e25824f3057b92db5cd6e796 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0139918420
0x2e9691785e90f11d9a6931f561a47fa3c781a2d9af7af5731efbdedd7a289cebBorrow244785092021-04-26 11:38:1622 days 9 hrs ago0x389b4bbeafd11a90e25824f3057b92db5cd6e796 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0069959210
0x681981d7f2474b18e202188c74deeb4bc269986cb3a77705d0c13f3c652ff72eBorrow243892532021-04-22 6:37:2826 days 14 hrs ago0x67672700f2e86b19f76fd507e46d032a5df9dc73 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0020975133
0x5530dc0efe090cd9f5a900e9c69c3257bcd5049c0de137ba7a7285a155724677Borrow243742152021-04-21 13:40:1227 days 7 hrs ago0x67672700f2e86b19f76fd507e46d032a5df9dc73 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0006991831
0x096762d7e4190fc4256762c473c0795c7265351a413e5f33fb7eb470cacf64b4Borrow243739522021-04-21 13:22:0827 days 7 hrs ago0x67672700f2e86b19f76fd507e46d032a5df9dc73 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0006991951
0xcccc7451d529e1638c0ff55ce954eb90a02bef7ddc418ca1f4db0f1c131ba298Borrow243707422021-04-21 9:45:1227 days 11 hrs ago0xab2e112c21b498ed5c017d742b0deac6e09e8fd1 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0069942810
0xedccd0651dedb708778a4b4b8f2754a32775496b740bdb7e8877f8a8329f3d54Borrow243703442021-04-21 9:18:3227 days 11 hrs ago0xab2e112c21b498ed5c017d742b0deac6e09e8fd1 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.0069941610
0xac65360d3888e9246ff2742ab0af86a96ea56ce4c0f80be6a5118b8598afdd98Borrow243533922021-04-20 14:13:1228 days 6 hrs ago0xab2e112c21b498ed5c017d742b0deac6e09e8fd1 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.003497845
0x79b9e8a12f4fa94b1ac56f1959a72f8afa7fe4978eb5b20677f71df45b2bccf2Borrow243523662021-04-20 13:03:4828 days 7 hrs ago0x67672700f2e86b19f76fd507e46d032a5df9dc73 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.003498515
0x09888c80c5295991fa66ea9521754848145e7e2634d207fa2f1ad2f2baee377dBorrow243519612021-04-20 12:36:3628 days 8 hrs ago0xab2e112c21b498ed5c017d742b0deac6e09e8fd1 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.003497845
0x99070aa4abfacefa3382cb4fc8deff75790da400939339134a787aa6f9ee6074Borrow243518452021-04-20 12:28:3228 days 8 hrs ago0x67672700f2e86b19f76fd507e46d032a5df9dc73 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.003498395
0xba275ba45a7c23d7630d3b28a3e075e08b856233d8c97b428bb7cb97ca29b540Borrow243511422021-04-20 11:40:4828 days 9 hrs ago0x183cb110148d9fba53e4e2961ff6eacbaeeb4dcf IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.034979650
0xf59c26449ee537d645b86eaa7a5f07822a6c894de46b4ae4515a96b611129d8fBorrow243313962021-04-19 13:28:3229 days 7 hrs ago0x67672700f2e86b19f76fd507e46d032a5df9dc73 IN  0xf6a0690f22da5464924a28a8198e8eca69ffc47e0 Ether0.001398392
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0xb443f30cdd6076b1a5269dbc08b774f222d4db4e0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0xb53ee14f15c3424143c4faddd12b098dbf59ee20e6a34a0c7e1b49767d34f2bf249100112021-05-18 9:22:5611 hrs 27 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0xaa8808901261deaf574ac925ea60ef57b783bf1f0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0xfbe16ba4e8029b759d3c5ef8844124893f3ae4700 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0xe769a1c3ec92593179be95c2a9227715ddf7cae6b2701a3863cbdb67306f5ed7249099232021-05-18 9:17:0411 hrs 33 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0xaa8808901261deaf574ac925ea60ef57b783bf1f0 Ether
0x783980235aa36f8f983464eb4fae2812ae43675748c926de10d31a5621304b34249099012021-05-18 9:15:3611 hrs 35 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5cfba2639a3db0d9cc264aa27b2e6d134eea486a0 Ether
0x783980235aa36f8f983464eb4fae2812ae43675748c926de10d31a5621304b34249099012021-05-18 9:15:3611 hrs 35 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0xfbe16ba4e8029b759d3c5ef8844124893f3ae4700 Ether
0x783980235aa36f8f983464eb4fae2812ae43675748c926de10d31a5621304b34249099012021-05-18 9:15:3611 hrs 35 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0x783980235aa36f8f983464eb4fae2812ae43675748c926de10d31a5621304b34249099012021-05-18 9:15:3611 hrs 35 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
0x783980235aa36f8f983464eb4fae2812ae43675748c926de10d31a5621304b34249099012021-05-18 9:15:3611 hrs 35 mins ago 0xf6a0690f22da5464924a28a8198e8eca69ffc47e 0x5ae55494ccda82f1f7c653bc2b6ebb4ad3c77dac0 Ether
[ Download CSV Export 
Loading

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

Contract Name:
LoanToken

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-19
*/

/**
 * Copyright 2017-2020, bZeroX, LLC <https://bzx.network/>. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0.
 */

pragma solidity 0.5.17;


interface IWeth {
    function deposit() external payable;
    function withdraw(uint256 wad) external;
}

contract IERC20 {
    string public name;
    uint8 public decimals;
    string public symbol;
    function totalSupply() public view returns (uint256);
    function balanceOf(address _who) public view returns (uint256);
    function allowance(address _owner, address _spender) public view returns (uint256);
    function approve(address _spender, uint256 _value) public returns (bool);
    function transfer(address _to, uint256 _value) public returns (bool);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract IWethERC20 is IWeth, IERC20 {}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

    /**
    * @dev Integer division of two numbers, rounding up and truncating the quotient
    */
    function divCeil(uint256 a, uint256 b) internal pure returns (uint256) {
        return divCeil(a, b, "SafeMath: division by zero");
    }

    /**
    * @dev Integer division of two numbers, rounding up and truncating the quotient
    */
    function divCeil(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b != 0, errorMessage);

        if (a == 0) {
            return 0;
        }
        uint256 c = ((a - 1) / b) + 1;

        return c;
    }

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

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

    function min256(uint256 _a, uint256 _b) internal pure returns (uint256) {
        return _a < _b ? _a : _b;
    }
}

/**
 * @title SignedSafeMath
 * @dev Signed math operations with safety checks that revert on error.
 */
library SignedSafeMath {
    int256 constant private _INT256_MIN = -2**255;

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

        require(!(a == -1 && b == _INT256_MIN), "SignedSafeMath: multiplication overflow");

        int256 c = a * b;
        require(c / a == b, "SignedSafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two signed integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0, "SignedSafeMath: division by zero");
        require(!(b == -1 && a == _INT256_MIN), "SignedSafeMath: division overflow");

        int256 c = a / b;

        return c;
    }

    /**
     * @dev Returns the subtraction of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow");

        return c;
    }

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow");

        return c;
    }
}

/**
 * @title Helps contracts guard against reentrancy attacks.
 * @author Remco Bloemen <[email protected]π.com>, Eenae <[email protected]>
 * @dev If you mark a function `nonReentrant`, you should also
 * mark it `external`.
 */
contract ReentrancyGuard {

    /// @dev Constant for unlocked guard state - non-zero to prevent extra gas costs.
    /// See: https://github.com/OpenZeppelin/openzeppelin-solidity/issues/1056
    uint256 internal constant REENTRANCY_GUARD_FREE = 1;

    /// @dev Constant for locked guard state
    uint256 internal constant REENTRANCY_GUARD_LOCKED = 2;

    /**
    * @dev We use a single lock for the whole contract.
    */
    uint256 internal reentrancyLock = REENTRANCY_GUARD_FREE;

    /**
    * @dev Prevents a contract from calling itself, directly or indirectly.
    * If you mark a function `nonReentrant`, you should also
    * mark it `external`. Calling one `nonReentrant` function from
    * another is not supported. Instead, you can implement a
    * `private` function doing the actual work, and an `external`
    * wrapper marked as `nonReentrant`.
    */
    modifier nonReentrant() {
        require(reentrancyLock == REENTRANCY_GUARD_FREE, "nonReentrant");
        reentrancyLock = REENTRANCY_GUARD_LOCKED;
        _;
        reentrancyLock = REENTRANCY_GUARD_FREE;
    }
}

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

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

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

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

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

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

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

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "unauthorized");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract Pausable {

    // keccak256("Pausable_FunctionPause")
    bytes32 internal constant Pausable_FunctionPause = 0xa7143c84d793a15503da6f19bf9119a2dac94448ca45d77c8bf08f57b2e91047;

    modifier pausable(bytes4 sig) {
        require(!_isPaused(sig), "unauthorized");
        _;
    }

    function _isPaused(
        bytes4 sig)
        internal
        view
        returns (bool isPaused)
    {
        bytes32 slot = keccak256(abi.encodePacked(sig, Pausable_FunctionPause));
        assembly {
            isPaused := sload(slot)
        }
    }
}

contract LoanTokenBase is ReentrancyGuard, Ownable, Pausable {

    uint256 internal constant WEI_PRECISION = 10**18;
    uint256 internal constant WEI_PERCENT_PRECISION = 10**20;

    int256 internal constant sWEI_PRECISION = 10**18;

    string public name;
    string public symbol;
    uint8 public decimals;

    // uint88 for tight packing -> 8 + 88 + 160 = 256
    uint88 internal lastSettleTime_;

    address public loanTokenAddress;

    uint256 public baseRate;
    uint256 public rateMultiplier;
    uint256 public lowUtilBaseRate;
    uint256 public lowUtilRateMultiplier;

    uint256 public targetLevel;
    uint256 public kinkLevel;
    uint256 public maxScaleRate;

    uint256 internal _flTotalAssetSupply;
    uint256 public checkpointSupply;
    uint256 public initialPrice;

    mapping (uint256 => bytes32) public loanParamsIds; // mapping of keccak256(collateralToken, isTorqueLoan) to loanParamsId
    mapping (address => uint256) internal checkpointPrices_; // price of token at last user checkpoint
}

contract AdvancedTokenStorage is LoanTokenBase {
    using SafeMath for uint256;

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 value
    );

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    event Mint(
        address indexed minter,
        uint256 tokenAmount,
        uint256 assetAmount,
        uint256 price
    );

    event Burn(
        address indexed burner,
        uint256 tokenAmount,
        uint256 assetAmount,
        uint256 price
    );

    mapping(address => uint256) internal balances;
    mapping (address => mapping (address => uint256)) internal allowed;
    uint256 internal totalSupply_;

    function totalSupply()
        public
        view
        returns (uint256)
    {
        return totalSupply_;
    }

    function balanceOf(
        address _owner)
        public
        view
        returns (uint256)
    {
        return balances[_owner];
    }

    function allowance(
        address _owner,
        address _spender)
        public
        view
        returns (uint256)
    {
        return allowed[_owner][_spender];
    }
}

contract LoanToken is AdvancedTokenStorage {

    address internal target_;

    constructor(
        address _newOwner,
        address _newTarget)
        public
    {
        transferOwnership(_newOwner);
        _setTarget(_newTarget);
    }

    function()
        external
        payable
    {
        if (gasleft() <= 2300) {
            return;
        }

        address target = target_;
        bytes memory data = msg.data;
        assembly {
            let result := delegatecall(gas, target, add(data, 0x20), mload(data), 0, 0)
            let size := returndatasize
            let ptr := mload(0x40)
            returndatacopy(ptr, 0, size)
            switch result
            case 0 { revert(ptr, size) }
            default { return(ptr, size) }
        }
    }

    function setTarget(
        address _newTarget)
        public
        onlyOwner
    {
        _setTarget(_newTarget);
    }

    function _setTarget(
        address _newTarget)
        internal
    {
        require(Address.isContract(_newTarget), "target not a contract");
        target_ = _newTarget;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"address","name":"_newTarget","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"assetAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"assetAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"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":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"checkpointSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kinkLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"loanParamsIds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"loanTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lowUtilBaseRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lowUtilRateMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxScaleRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rateMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newTarget","type":"address"}],"name":"setTarget","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"targetLevel","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052600160005534801561001557600080fd5b50604051610bde380380610bde8339818101604052604081101561003857600080fd5b50805160209091015160006100546001600160e01b036100bb16565b600180546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020610bbe833981519152908290a3506100a2826001600160e01b036100bf16565b6100b4816001600160e01b0361012516565b50506102a5565b3390565b6100d06001600160e01b036101ab16565b610110576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b610122816001600160e01b036101da16565b50565b6101388161026960201b61084d1760201c565b610189576040805162461bcd60e51b815260206004820152601560248201527f746172676574206e6f74206120636f6e74726163740000000000000000000000604482015290519081900360640190fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6001546000906001600160a01b03166101cb6001600160e01b036100bb16565b6001600160a01b031614905090565b6001600160a01b03811661021f5760405162461bcd60e51b8152600401808060200182810382526026815260200180610b986026913960400191505060405180910390fd5b6001546040516001600160a01b03808416921690600080516020610bbe83398151915290600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061029d57508115155b949350505050565b6108e4806102b46000396000f3fe60806040526004361061012a5760003560e01c8063797bf385116100ab57806395d89b411161006f57806395d89b41146103ff578063ba0e43bf14610414578063d759dbeb14610429578063dd62ed3e1461043e578063ef2b0b3914610479578063f2fde38b1461048e5761012a565b8063797bf385146103665780637b7933b4146103975780637e37c08c146103ac5780638da5cb5b146103c15780638f32d59b146103d65761012a565b80633291c11a116100f25780633291c11a146102ac578063330691ac146102d657806356e07d70146102eb57806370a0823114610300578063776d1a01146103335761012a565b806306fdde03146101a657806318160ddd146102305780631d0806ae146102575780631f68f20a1461026c578063313ce56714610281575b6108fc5a11610138576101a4565b60145460408051602036601f81018290048202830182019093528282526001600160a01b039093169260609260009181908401838280828437600092018290525084519495509384935091505060208401855af43d604051816000823e8280156101a0578282f35b8282fd5b005b3480156101b257600080fd5b506101bb6104c1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101f55781810151838201526020016101dd565b50505050905090810190601f1680156102225780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561023c57600080fd5b5061024561054c565b60408051918252519081900360200190f35b34801561026357600080fd5b50610245610552565b34801561027857600080fd5b50610245610558565b34801561028d57600080fd5b5061029661055e565b6040805160ff9092168252519081900360200190f35b3480156102b857600080fd5b50610245600480360360208110156102cf57600080fd5b5035610567565b3480156102e257600080fd5b50610245610579565b3480156102f757600080fd5b5061024561057f565b34801561030c57600080fd5b506102456004803603602081101561032357600080fd5b50356001600160a01b0316610585565b34801561033f57600080fd5b506101a46004803603602081101561035657600080fd5b50356001600160a01b03166105a0565b34801561037257600080fd5b5061037b6105f4565b604080516001600160a01b039092168252519081900360200190f35b3480156103a357600080fd5b5061024561060a565b3480156103b857600080fd5b50610245610610565b3480156103cd57600080fd5b5061037b610616565b3480156103e257600080fd5b506103eb610625565b604080519115158252519081900360200190f35b34801561040b57600080fd5b506101bb61064b565b34801561042057600080fd5b506102456106a6565b34801561043557600080fd5b506102456106ac565b34801561044a57600080fd5b506102456004803603604081101561046157600080fd5b506001600160a01b03813581169160200135166106b2565b34801561048557600080fd5b506102456106dd565b34801561049a57600080fd5b506101a4600480360360208110156104b157600080fd5b50356001600160a01b03166106e3565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156105445780601f1061051957610100808354040283529160200191610544565b820191906000526020600020905b81548152906001019060200180831161052757829003601f168201915b505050505081565b60135490565b600e5481565b60055481565b60045460ff1681565b600f6020526000908152604090205481565b60065481565b600a5481565b6001600160a01b031660009081526011602052604090205490565b6105a8610625565b6105e8576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6105f181610734565b50565b600454600160601b90046001600160a01b031681565b600d5481565b60085481565b6001546001600160a01b031690565b6001546000906001600160a01b031661063c6107a8565b6001600160a01b031614905090565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105445780601f1061051957610100808354040283529160200191610544565b60095481565b60075481565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b600b5481565b6106eb610625565b61072b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6105f1816107ac565b61073d8161084d565b610786576040805162461bcd60e51b81526020600482015260156024820152741d185c99d95d081b9bdd08184818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0381166107f15760405162461bcd60e51b815260040180806020018281038252602681526020018061088a6026913960400191505060405180910390fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061088157508115155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a723158208e159523001d7b30b1641290c62dffd797f6077e0bcbf6b86ce07051a8c0caad64736f6c634300051100324f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000b78a81cd4fb3d727cd267d773491f5fc43bb3929000000000000000000000000107830c21afb4c27399f8b5dc57488618888c3cb

Deployed ByteCode Sourcemap

20280:1151:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20623:4;20610:9;:17;20606:56;;20644:7;;20606:56;20691:7;;20709:28;;;;20729:8;20709:28;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20691:7:0;;;;20709:17;;-1:-1:-1;;20729:8:0;;20709:28;;-1:-1:-1;20729:8:0;;-1:-1:-1;20709:28:0;1:33:-1;99:1;81:16;;74:27;;;-1:-1;20829:11:0;;20709:28;;-1:-1:-1;99:1;;;-1:-1;20829:11:0;-1:-1:-1;;20822:4:0;20812:15;;20804:6;20799:3;20786:61;20873:14;20918:4;20912:11;20960:4;20957:1;20952:3;20937:28;20986:6;21006:28;;;;21070:4;21065:3;21058:17;21006:28;21027:4;21022:3;21015:17;20757:331;20280:1151;18214:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18214:18:0;;;:::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;18214:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19800:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19800:123:0;;;:::i;:::-;;;;;;;;;;;;;;;;18760:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18760:27:0;;;:::i;18431:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18431:23:0;;;:::i;18266:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18266:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18796:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18796:49:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18796:49:0;;:::i;18461:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18461:29:0;;;:::i;18612:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18612:24:0;;;:::i;19931:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19931:149:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19931:149:0;-1:-1:-1;;;;;19931:149:0;;:::i;21103:130::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21103:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21103:130:0;-1:-1:-1;;;;;21103:130:0;;:::i;18391:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18391:31:0;;;:::i;:::-;;;;-1:-1:-1;;;;;18391:31:0;;;;;;;;;;;;;;18722;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18722:31:0;;;:::i;18534:36::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18534:36:0;;;:::i;16339:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16339:79:0;;;:::i;16685:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16685:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;18239:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18239:20:0;;;:::i;18579:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18579:26:0;;;:::i;18497:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18497:30:0;;;:::i;20088:185::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20088:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20088:185:0;;;;;;;;;;:::i;18643:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18643:27:0;;;:::i;16934:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16934:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16934:109:0;-1:-1:-1;;;;;16934:109:0;;:::i;18214:18::-;;;;;;;;;;;;;;-1:-1:-1;;18214:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19800:123::-;19903:12;;19800:123;:::o;18760:27::-;;;;:::o;18431:23::-;;;;:::o;18266:21::-;;;;;;:::o;18796:49::-;;;;;;;;;;;;;:::o;18461:29::-;;;;:::o;18612:24::-;;;;:::o;19931:149::-;-1:-1:-1;;;;;20056:16:0;20024:7;20056:16;;;:8;:16;;;;;;;19931:149::o;21103:130::-;16551:9;:7;:9::i;:::-;16543:34;;;;;-1:-1:-1;;;16543:34:0;;;;;;;;;;;;-1:-1:-1;;;16543:34:0;;;;;;;;;;;;;;;21203:22;21214:10;21203;:22::i;:::-;21103:130;:::o;18391:31::-;;;-1:-1:-1;;;18391:31:0;;-1:-1:-1;;;;;18391:31:0;;:::o;18722:::-;;;;:::o;18534:36::-;;;;:::o;16339:79::-;16404:6;;-1:-1:-1;;;;;16404:6:0;16339:79;:::o;16685:94::-;16765:6;;16725:4;;-1:-1:-1;;;;;16765:6:0;16749:12;:10;:12::i;:::-;-1:-1:-1;;;;;16749:22:0;;16742:29;;16685:94;:::o;18239:20::-;;;;;;;;;;;;;;;-1:-1:-1;;18239:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18579:26;;;;:::o;18497:30::-;;;;:::o;20088:185::-;-1:-1:-1;;;;;20240:15:0;;;20208:7;20240:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;20088:185::o;18643:27::-;;;;:::o;16934:109::-;16551:9;:7;:9::i;:::-;16543:34;;;;;-1:-1:-1;;;16543:34:0;;;;;;;;;;;;-1:-1:-1;;;16543:34:0;;;;;;;;;;;;;;;17007:28;17026:8;17007:18;:28::i;21241:187::-;21333:30;21352:10;21333:18;:30::i;:::-;21325:64;;;;;-1:-1:-1;;;21325:64:0;;;;;;;;;;;;-1:-1:-1;;;21325:64:0;;;;;;;;;;;;;;;21400:7;:20;;-1:-1:-1;;;;;;21400:20:0;-1:-1:-1;;;;;21400:20:0;;;;;;;;;;21241:187::o;15130:98::-;15210:10;15130:98;:::o;17149:229::-;-1:-1:-1;;;;;17223:22:0;;17215:73;;;;-1:-1:-1;;;17215:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17325:6;;17304:38;;-1:-1:-1;;;;;17304:38:0;;;;17325:6;;17304:38;;17325:6;;17304:38;17353:6;:17;;-1:-1:-1;;;;;;17353:17:0;-1:-1:-1;;;;;17353:17:0;;;;;;;;;;17149:229::o;12041:619::-;12101:4;12569:20;;12412:66;12609:23;;;;;;:42;;-1:-1:-1;12636:15:0;;;12609:42;12601:51;12041:619;-1:-1:-1;;;;12041:619:0:o

Swarm Source

bzzr://8e159523001d7b30b1641290c62dffd797f6077e0bcbf6b86ce07051a8c0caad
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading