ETH Price: $3,604.60 (-2.17%)

Contract

0x1EB4CF3A948E7D72A198fe073cCb8C7a948cD853
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Flash Loan149670182022-06-15 10:33:02900 days ago1655289182IN
0x1EB4CF3A...a948cD853
0 ETH0.0825470276.50865286
Deny126522332021-06-17 13:29:451263 days ago1623936585IN
0x1EB4CF3A...a948cD853
0 ETH0.0003657126
Rely126522302021-06-17 13:28:191263 days ago1623936499IN
0x1EB4CF3A...a948cD853
0 ETH0.0012303226

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DssFlash

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2021-06-17
*/

// hevm: flattened sources of src/flash.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity =0.6.12 >=0.6.12;

////// src/interface/IERC3156FlashBorrower.sol
// Copyright (C) 2021 Dai Foundation
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity >=0.6.12; */

interface IERC3156FlashBorrower {

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

////// src/interface/IERC3156FlashLender.sol
// Copyright (C) 2021 Dai Foundation
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity >=0.6.12; */

/* import "./IERC3156FlashBorrower.sol"; */

interface IERC3156FlashLender {

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

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

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

////// src/interface/IVatDaiFlashBorrower.sol
// Copyright (C) 2021 Dai Foundation
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity >=0.6.12; */

interface IVatDaiFlashBorrower {

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

}

////// src/interface/IVatDaiFlashLender.sol
// Copyright (C) 2021 Dai Foundation
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity >=0.6.12; */

/* import "./IVatDaiFlashBorrower.sol"; */

interface IVatDaiFlashLender {

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

////// src/flash.sol
// Copyright (C) 2021 Dai Foundation
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

/* pragma solidity 0.6.12; */

/* import "./interface/IERC3156FlashLender.sol"; */
/* import "./interface/IERC3156FlashBorrower.sol"; */
/* import "./interface/IVatDaiFlashLender.sol"; */

interface DaiLike {
    function balanceOf(address) external returns (uint256);
    function transferFrom(address, address, uint256) external returns (bool);
    function approve(address, uint256) external returns (bool);
}

interface DaiJoinLike {
    function dai() external view returns (address);
    function vat() external view returns (address);
    function join(address, uint256) external;
    function exit(address, uint256) external;
}

interface VatLike_4 {
    function hope(address) external;
    function dai(address) external view returns (uint256);
    function move(address, address, uint256) external;
    function heal(uint256) external;
    function suck(address, address, uint256) external;
}

contract DssFlash is IERC3156FlashLender, IVatDaiFlashLender {

    // --- Auth ---
    function rely(address usr) external auth { wards[usr] = 1; emit Rely(usr); }
    function deny(address usr) external auth { wards[usr] = 0; emit Deny(usr); }
    mapping (address => uint256) public wards;
    modifier auth {
        require(wards[msg.sender] == 1, "DssFlash/not-authorized");
        _;
    }

    // --- Data ---
    VatLike_4     public immutable vat;
    DaiJoinLike public immutable daiJoin;
    DaiLike     public immutable dai;
    address     public immutable vow;       // vow intentionally set immutable to save gas

    uint256     public  max;     // Maximum borrowable Dai  [wad]
    uint256     public  toll;    // Fee                     [wad = 100%]
    uint256     private locked;  // Reentrancy guard

    bytes32 public constant CALLBACK_SUCCESS = keccak256("ERC3156FlashBorrower.onFlashLoan");
    bytes32 public constant CALLBACK_SUCCESS_VAT_DAI = keccak256("VatDaiFlashBorrower.onVatDaiFlashLoan");

    // --- Events ---
    event Rely(address indexed usr);
    event Deny(address indexed usr);
    event File(bytes32 indexed what, uint256 data);
    event FlashLoan(address indexed receiver, address token, uint256 amount, uint256 fee);
    event VatDaiFlashLoan(address indexed receiver, uint256 amount, uint256 fee);

    modifier lock {
        require(locked == 0, "DssFlash/reentrancy-guard");
        locked = 1;
        _;
        locked = 0;
    }

    // --- Init ---
    constructor(address daiJoin_, address vow_) public {
        wards[msg.sender] = 1;
        emit Rely(msg.sender);

        VatLike_4 vat_ = vat = VatLike_4(DaiJoinLike(daiJoin_).vat());
        daiJoin = DaiJoinLike(daiJoin_);
        DaiLike dai_ = dai = DaiLike(DaiJoinLike(daiJoin_).dai());
        vow = vow_;

        vat_.hope(daiJoin_);
        dai_.approve(daiJoin_, type(uint256).max);
    }

    // --- Math ---
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;
    uint256 constant RAD = 10 ** 45;
    function _add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x);
    }
    function _mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y == 0 || (z = x * y) / y == x);
    }

    // --- Administration ---
    function file(bytes32 what, uint256 data) external auth {
        if (what == "max") {
            // Add an upper limit of 10^27 DAI to avoid breaking technical assumptions of DAI << 2^256 - 1
            require((max = data) <= RAD, "DssFlash/ceiling-too-high");
        } else if (what == "toll") toll = data;
        else revert("DssFlash/file-unrecognized-param");
        emit File(what, data);
    }

    // --- ERC 3156 Spec ---
    function maxFlashLoan(
        address token
    ) external override view returns (uint256) {
        if (token == address(dai) && locked == 0) {
            return max;
        } else {
            return 0;
        }
    }
    function flashFee(
        address token,
        uint256 amount
    ) external override view returns (uint256) {
        require(token == address(dai), "DssFlash/token-unsupported");

        return _mul(amount, toll) / WAD;
    }
    function flashLoan(
        IERC3156FlashBorrower receiver,
        address token,
        uint256 amount,
        bytes calldata data
    ) external override lock returns (bool) {
        require(token == address(dai), "DssFlash/token-unsupported");
        require(amount <= max, "DssFlash/ceiling-exceeded");

        uint256 amt = _mul(amount, RAY);
        uint256 fee = _mul(amount, toll) / WAD;
        uint256 total = _add(amount, fee);

        vat.suck(address(this), address(this), amt);
        daiJoin.exit(address(receiver), amount);

        emit FlashLoan(address(receiver), token, amount, fee);

        require(
            receiver.onFlashLoan(msg.sender, token, amount, fee, data) == CALLBACK_SUCCESS,
            "DssFlash/callback-failed"
        );

        dai.transferFrom(address(receiver), address(this), total); // The fee is also enforced here
        daiJoin.join(address(this), total);
        vat.heal(amt);

        return true;
    }

    // --- Vat Dai Flash Loan ---
    function vatDaiFlashLoan(
        IVatDaiFlashBorrower receiver,          // address of conformant IVatDaiFlashBorrower
        uint256 amount,                         // amount to flash loan [rad]
        bytes calldata data                     // arbitrary data to pass to the receiver
    ) external override lock returns (bool) {
        require(amount <= _mul(max, RAY), "DssFlash/ceiling-exceeded");

        uint256 prev = vat.dai(address(this));
        uint256 fee = _mul(amount, toll) / WAD;

        vat.suck(address(this), address(receiver), amount);

        emit VatDaiFlashLoan(address(receiver), amount, fee);

        require(
            receiver.onVatDaiFlashLoan(msg.sender, amount, fee, data) == CALLBACK_SUCCESS_VAT_DAI,
            "DssFlash/callback-failed"
        );

        vat.heal(amount);
        require(vat.dai(address(this)) >= _add(prev, fee), "DssFlash/insufficient-fee");

        return true;
    }

    function convert() external lock {
        daiJoin.join(address(this), dai.balanceOf(address(this)));
    }

    function accrue() external lock {
        vat.move(address(this), vow, vat.dai(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"daiJoin_","type":"address"},{"internalType":"address","name":"vow_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"VatDaiFlashLoan","type":"event"},{"inputs":[],"name":"CALLBACK_SUCCESS","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CALLBACK_SUCCESS_VAT_DAI","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accrue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"convert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dai","outputs":[{"internalType":"contract DaiLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daiJoin","outputs":[{"internalType":"contract DaiJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"flashFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC3156FlashBorrower","name":"receiver","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"flashLoan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"maxFlashLoan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike_4","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVatDaiFlashBorrower","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"vatDaiFlashLoan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6101006040523480156200001257600080fd5b506040516200247c3803806200247c833981810160405260408110156200003857600080fd5b81019080805190602001909291908051906020019092919050505060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a260008273ffffffffffffffffffffffffffffffffffffffff166336569e776040518163ffffffff1660e01b815260040160206040518083038186803b1580156200012357600080fd5b505afa15801562000138573d6000803e3d6000fd5b505050506040513d60208110156200014f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525090508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060008373ffffffffffffffffffffffffffffffffffffffff1663f4b9fa756040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021757600080fd5b505afa1580156200022c573d6000803e3d6000fd5b505050506040513d60208110156200024357600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b81525090508273ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508173ffffffffffffffffffffffffffffffffffffffff1663a3b22fc4856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156200032c57600080fd5b505af115801562000341573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015620003d757600080fd5b505af1158015620003ec573d6000803e3d6000fd5b505050506040513d60208110156200040357600080fd5b8101908080519060200190929190505050505050505060805160601c60a05160601c60c05160601c60e05160601c611fcc620004b0600039806116f45280611ddd525080610f455280611445528061167e52806119615280611c165280611cfc52508061118e528061153052806119245280611bf052508061083152806109655280610a4a5280610ce35280610d7852806110c752806115d95280611da05280611dfe5250611fcc6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638237e538116100a2578063bf353dbb11610071578063bf353dbb146104af578063c11645bc14610507578063d9d98ce41461053b578063f4b9fa751461059d578063f8ba4cff146105d157610116565b80638237e538146104255780638878e8c71461044357806391bbdcc7146104615780639c52a7f11461046b57610116565b80635cffe9de116100e95780635cffe9de1461025e578063613255ab14610337578063626cb3c51461038f57806365fae35e146103c35780636ac5db191461040757610116565b8063285aaa201461011b57806329ae81141461013957806336569e77146101715780633f03653f146101a5575b600080fd5b6101236105db565b6040518082815260200191505060405180910390f35b61016f6004803603604081101561014f57600080fd5b8101908080359060200190929190803590602001909291905050506105e1565b005b61017961082f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610246600480360360608110156101bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561020257600080fd5b82018360208201111561021457600080fd5b8035906020019184600183028401116401000000008311171561023657600080fd5b9091929391929390505050610853565b60405180821515815260200191505060405180910390f35b61031f6004803603608081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156102db57600080fd5b8201836020820111156102ed57600080fd5b8035906020019184600183028401116401000000008311171561030f57600080fd5b9091929391929390505050610ec2565b60405180821515815260200191505060405180910390f35b6103796004803603602081101561034d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061167a565b6040518082815260200191505060405180910390f35b6103976116f2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610405600480360360208110156103d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611716565b005b61040f611854565b6040518082815260200191505060405180910390f35b61042d61185a565b6040518082815260200191505060405180910390f35b61044b61187e565b6040518082815260200191505060405180910390f35b6104696118a2565b005b6104ad6004803603602081101561048157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a98565b005b6104f1600480360360208110156104c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd6565b6040518082815260200191505060405180910390f35b61050f611bee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105876004803603604081101561055157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c12565b6040518082815260200191505060405180910390f35b6105a5611cfa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d9611d1e565b005b60025481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f447373466c6173682f6e6f742d617574686f72697a656400000000000000000081525060200191505060405180910390fd5b7f6d6178000000000000000000000000000000000000000000000000000000000082141561075057722cd76fe086b93ce2f768a00b22a00000000000816001819055111561074b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f6365696c696e672d746f6f2d686967680000000000000081525060200191505060405180910390fd5b6107f3565b7f746f6c6c0000000000000000000000000000000000000000000000000000000082141561078457806002819055506107f2565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f447373466c6173682f66696c652d756e7265636f676e697a65642d706172616d81525060200191505060405180910390fd5b5b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7826040518082815260200191505060405180910390a25050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600354146108cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f7265656e7472616e63792d67756172640000000000000081525060200191505060405180910390fd5b60016003819055506108ec6001546b033b2e3c9fd0803ce8000000611f50565b841115610961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f6365696c696e672d65786365656465640000000000000081525060200191505060405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156109ea57600080fd5b505afa1580156109fe573d6000803e3d6000fd5b505050506040513d6020811015610a1457600080fd5b810190808051906020019092919050505090506000670de0b6b3a7640000610a3e87600254611f50565b81610a4557fe5b0490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f24e23eb3089896040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fbca56acc64a74a4c131755895cf7f72fc3f9e39af64241f7ad0f77e86f41ada98783604051808381526020018281526020019250505060405180910390a27f0cceaa4ec34688ca5ae62e4ade215985d2d08dffd7fdb3eb79768a5dc372e8b18773ffffffffffffffffffffffffffffffffffffffff166342bf04b63389858a8a6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610c3357600080fd5b505af1158015610c47573d6000803e3d6000fd5b505050506040513d6020811015610c5d57600080fd5b810190808051906020019092919050505014610ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f447373466c6173682f63616c6c6261636b2d6661696c6564000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f37ac61c876040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50505050610d768282611f7c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6020811015610e2757600080fd5b81019080805190602001909291905050501015610eac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f696e73756666696369656e742d6665650000000000000081525060200191505060405180910390fd5b6001925050506000600381905550949350505050565b60008060035414610f3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f7265656e7472616e63792d67756172640000000000000081525060200191505060405180910390fd5b60016003819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f447373466c6173682f746f6b656e2d756e737570706f7274656400000000000081525060200191505060405180910390fd5b60015484111561107c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f6365696c696e672d65786365656465640000000000000081525060200191505060405180910390fd5b6000611094856b033b2e3c9fd0803ce8000000611f50565b90506000670de0b6b3a76400006110ad87600254611f50565b816110b457fe5b04905060006110c38783611f7c565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f24e23eb3030866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561117457600080fd5b505af1158015611188573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ef693bed8a896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561121d57600080fd5b505af1158015611231573d6000803e3d6000fd5b505050508873ffffffffffffffffffffffffffffffffffffffff167f0d7d75e01ab95780d3cd1c8ec0dd6c2ce19e3a20427eec8bf53283b6fb8e95f0898985604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a27f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd98973ffffffffffffffffffffffffffffffffffffffff166323e30c8b338b8b878c8c6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561139557600080fd5b505af11580156113a9573d6000803e3d6000fd5b505050506040513d60208110156113bf57600080fd5b810190808051906020019092919050505014611443576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f447373466c6173682f63616c6c6261636b2d6661696c6564000000000000000081525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd8a30846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156114f257600080fd5b505af1158015611506573d6000803e3d6000fd5b505050506040513d602081101561151c57600080fd5b8101908080519060200190929190505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633b4da69f30836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156115bf57600080fd5b505af11580156115d3573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f37ac61c846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561164a57600080fd5b505af115801561165e573d6000803e3d6000fd5b5050505060019350505050600060038190555095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156116d957506000600354145b156116e85760015490506116ed565b600090505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f447373466c6173682f6e6f742d617574686f72697a656400000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a250565b60015481565b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981565b7f0cceaa4ec34688ca5ae62e4ade215985d2d08dffd7fdb3eb79768a5dc372e8b181565b60006003541461191a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f7265656e7472616e63792d67756172640000000000000081525060200191505060405180910390fd5b60016003819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633b4da69f307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156119e857600080fd5b505af11580156119fc573d6000803e3d6000fd5b505050506040513d6020811015611a1257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a7657600080fd5b505af1158015611a8a573d6000803e3d6000fd5b505050506000600381905550565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611b4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f447373466c6173682f6e6f742d617574686f72697a656400000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b60405160405180910390a250565b60006020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f447373466c6173682f746f6b656e2d756e737570706f7274656400000000000081525060200191505060405180910390fd5b670de0b6b3a7640000611cea83600254611f50565b81611cf157fe5b04905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600060035414611d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f7265656e7472616e63792d67756172640000000000000081525060200191505060405180910390fd5b60016003819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb35783b307f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e8357600080fd5b505afa158015611e97573d6000803e3d6000fd5b505050506040513d6020811015611ead57600080fd5b81019080805190602001909291905050506040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611f2e57600080fd5b505af1158015611f42573d6000803e3d6000fd5b505050506000600381905550565b600080821480611f6d5750828283850292508281611f6a57fe5b04145b611f7657600080fd5b92915050565b6000828284019150811015611f9057600080fd5b9291505056fea26469706673582212202d33df4a3e1743c69ab21cab7f8f112a87fe7d5a66d47e439bc2b2f4419920d264736f6c634300060c00330000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000a950524441892a31ebddf91d3ceefa04bf454466

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638237e538116100a2578063bf353dbb11610071578063bf353dbb146104af578063c11645bc14610507578063d9d98ce41461053b578063f4b9fa751461059d578063f8ba4cff146105d157610116565b80638237e538146104255780638878e8c71461044357806391bbdcc7146104615780639c52a7f11461046b57610116565b80635cffe9de116100e95780635cffe9de1461025e578063613255ab14610337578063626cb3c51461038f57806365fae35e146103c35780636ac5db191461040757610116565b8063285aaa201461011b57806329ae81141461013957806336569e77146101715780633f03653f146101a5575b600080fd5b6101236105db565b6040518082815260200191505060405180910390f35b61016f6004803603604081101561014f57600080fd5b8101908080359060200190929190803590602001909291905050506105e1565b005b61017961082f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610246600480360360608110156101bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561020257600080fd5b82018360208201111561021457600080fd5b8035906020019184600183028401116401000000008311171561023657600080fd5b9091929391929390505050610853565b60405180821515815260200191505060405180910390f35b61031f6004803603608081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156102db57600080fd5b8201836020820111156102ed57600080fd5b8035906020019184600183028401116401000000008311171561030f57600080fd5b9091929391929390505050610ec2565b60405180821515815260200191505060405180910390f35b6103796004803603602081101561034d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061167a565b6040518082815260200191505060405180910390f35b6103976116f2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610405600480360360208110156103d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611716565b005b61040f611854565b6040518082815260200191505060405180910390f35b61042d61185a565b6040518082815260200191505060405180910390f35b61044b61187e565b6040518082815260200191505060405180910390f35b6104696118a2565b005b6104ad6004803603602081101561048157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a98565b005b6104f1600480360360208110156104c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bd6565b6040518082815260200191505060405180910390f35b61050f611bee565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105876004803603604081101561055157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c12565b6040518082815260200191505060405180910390f35b6105a5611cfa565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d9611d1e565b005b60025481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f447373466c6173682f6e6f742d617574686f72697a656400000000000000000081525060200191505060405180910390fd5b7f6d6178000000000000000000000000000000000000000000000000000000000082141561075057722cd76fe086b93ce2f768a00b22a00000000000816001819055111561074b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f6365696c696e672d746f6f2d686967680000000000000081525060200191505060405180910390fd5b6107f3565b7f746f6c6c0000000000000000000000000000000000000000000000000000000082141561078457806002819055506107f2565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f447373466c6173682f66696c652d756e7265636f676e697a65642d706172616d81525060200191505060405180910390fd5b5b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c7826040518082815260200191505060405180910390a25050565b7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b600080600354146108cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f7265656e7472616e63792d67756172640000000000000081525060200191505060405180910390fd5b60016003819055506108ec6001546b033b2e3c9fd0803ce8000000611f50565b841115610961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f6365696c696e672d65786365656465640000000000000081525060200191505060405180910390fd5b60007f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b73ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156109ea57600080fd5b505afa1580156109fe573d6000803e3d6000fd5b505050506040513d6020811015610a1457600080fd5b810190808051906020019092919050505090506000670de0b6b3a7640000610a3e87600254611f50565b81610a4557fe5b0490507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b73ffffffffffffffffffffffffffffffffffffffff1663f24e23eb3089896040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff167fbca56acc64a74a4c131755895cf7f72fc3f9e39af64241f7ad0f77e86f41ada98783604051808381526020018281526020019250505060405180910390a27f0cceaa4ec34688ca5ae62e4ade215985d2d08dffd7fdb3eb79768a5dc372e8b18773ffffffffffffffffffffffffffffffffffffffff166342bf04b63389858a8a6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015610c3357600080fd5b505af1158015610c47573d6000803e3d6000fd5b505050506040513d6020811015610c5d57600080fd5b810190808051906020019092919050505014610ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f447373466c6173682f63616c6c6261636b2d6661696c6564000000000000000081525060200191505060405180910390fd5b7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b73ffffffffffffffffffffffffffffffffffffffff1663f37ac61c876040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d5457600080fd5b505af1158015610d68573d6000803e3d6000fd5b50505050610d768282611f7c565b7f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b73ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610dfd57600080fd5b505afa158015610e11573d6000803e3d6000fd5b505050506040513d6020811015610e2757600080fd5b81019080805190602001909291905050501015610eac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f696e73756666696369656e742d6665650000000000000081525060200191505060405180910390fd5b6001925050506000600381905550949350505050565b60008060035414610f3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f7265656e7472616e63792d67756172640000000000000081525060200191505060405180910390fd5b60016003819055507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f447373466c6173682f746f6b656e2d756e737570706f7274656400000000000081525060200191505060405180910390fd5b60015484111561107c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f6365696c696e672d65786365656465640000000000000081525060200191505060405180910390fd5b6000611094856b033b2e3c9fd0803ce8000000611f50565b90506000670de0b6b3a76400006110ad87600254611f50565b816110b457fe5b04905060006110c38783611f7c565b90507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b73ffffffffffffffffffffffffffffffffffffffff1663f24e23eb3030866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b15801561117457600080fd5b505af1158015611188573d6000803e3d6000fd5b505050507f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2873ffffffffffffffffffffffffffffffffffffffff1663ef693bed8a896040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561121d57600080fd5b505af1158015611231573d6000803e3d6000fd5b505050508873ffffffffffffffffffffffffffffffffffffffff167f0d7d75e01ab95780d3cd1c8ec0dd6c2ce19e3a20427eec8bf53283b6fb8e95f0898985604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a27f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd98973ffffffffffffffffffffffffffffffffffffffff166323e30c8b338b8b878c8c6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050602060405180830381600087803b15801561139557600080fd5b505af11580156113a9573d6000803e3d6000fd5b505050506040513d60208110156113bf57600080fd5b810190808051906020019092919050505014611443576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f447373466c6173682f63616c6c6261636b2d6661696c6564000000000000000081525060200191505060405180910390fd5b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff166323b872dd8a30846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156114f257600080fd5b505af1158015611506573d6000803e3d6000fd5b505050506040513d602081101561151c57600080fd5b8101908080519060200190929190505050507f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2873ffffffffffffffffffffffffffffffffffffffff16633b4da69f30836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156115bf57600080fd5b505af11580156115d3573d6000803e3d6000fd5b505050507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b73ffffffffffffffffffffffffffffffffffffffff1663f37ac61c846040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561164a57600080fd5b505af115801561165e573d6000803e3d6000fd5b5050505060019350505050600060038190555095945050505050565b60007f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156116d957506000600354145b156116e85760015490506116ed565b600090505b919050565b7f000000000000000000000000a950524441892a31ebddf91d3ceefa04bf45446681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f447373466c6173682f6e6f742d617574686f72697a656400000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a250565b60015481565b7f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd981565b7f0cceaa4ec34688ca5ae62e4ade215985d2d08dffd7fdb3eb79768a5dc372e8b181565b60006003541461191a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f7265656e7472616e63792d67756172640000000000000081525060200191505060405180910390fd5b60016003819055507f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2873ffffffffffffffffffffffffffffffffffffffff16633b4da69f307f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156119e857600080fd5b505af11580156119fc573d6000803e3d6000fd5b505050506040513d6020811015611a1257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a7657600080fd5b505af1158015611a8a573d6000803e3d6000fd5b505050506000600381905550565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611b4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f447373466c6173682f6e6f742d617574686f72697a656400000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b60405160405180910390a250565b60006020528060005260406000206000915090505481565b7f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a2881565b60007f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f447373466c6173682f746f6b656e2d756e737570706f7274656400000000000081525060200191505060405180910390fd5b670de0b6b3a7640000611cea83600254611f50565b81611cf157fe5b04905092915050565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b600060035414611d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f447373466c6173682f7265656e7472616e63792d67756172640000000000000081525060200191505060405180910390fd5b60016003819055507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b73ffffffffffffffffffffffffffffffffffffffff1663bb35783b307f000000000000000000000000a950524441892a31ebddf91d3ceefa04bf4544667f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b73ffffffffffffffffffffffffffffffffffffffff16636c25b346306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e8357600080fd5b505afa158015611e97573d6000803e3d6000fd5b505050506040513d6020811015611ead57600080fd5b81019080805190602001909291905050506040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611f2e57600080fd5b505af1158015611f42573d6000803e3d6000fd5b505050506000600381905550565b600080821480611f6d5750828283850292508281611f6a57fe5b04145b611f7657600080fd5b92915050565b6000828284019150811015611f9057600080fd5b9291505056fea26469706673582212202d33df4a3e1743c69ab21cab7f8f112a87fe7d5a66d47e439bc2b2f4419920d264736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000a950524441892a31ebddf91d3ceefa04bf454466

-----Decoded View---------------
Arg [0] : daiJoin_ (address): 0x9759A6Ac90977b93B58547b4A71c78317f391A28
Arg [1] : vow_ (address): 0xA950524441892A31ebddF91d3cEEFa04Bf454466

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28
Arg [1] : 000000000000000000000000a950524441892a31ebddf91d3ceefa04bf454466


Deployed Bytecode Sourcemap

8074:5551:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8793:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10464:413;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8509:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12435:959;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11397:995;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10915:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8632:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;8165:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8726:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8923:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9018:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13402:109;;;:::i;:::-;;8247:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8329:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8550:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11153:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8593:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13519:103;;;:::i;:::-;;8793:24;;;;:::o;10464:413::-;8431:1;8410:5;:17;8416:10;8410:17;;;;;;;;;;;;;;;;:22;8402:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10535:13:::1;:4;:13;10531:306;;;10162:8;10688:4;10682:3;:10;;;10681:19;;10673:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10531:306;;;10752:14;:4;:14;10748:89;;;10775:4;10768;:11;;;;10748:89;;;10795:42;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;10748:89;10531:306;10858:4;10853:16;10864:4;10853:16;;;;;;;;;;;;;;;;;;10464:413:::0;;:::o;8509:34::-;;;:::o;12435:959::-;12765:4;9500:1;9490:6;;:11;9482:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9551:1;9542:6;:10;;;;12800:14:::1;12805:3;;10124:8;12800:4;:14::i;:::-;12790:6;:24;;12782:62;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12857:12;12872:3;:7;;;12888:4;12872:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;12857:37;;12905:11;10086:8;12919:18;12924:6;12932:4;;12919;:18::i;:::-;:24;;;;;;12905:38;;12956:3;:8;;;12973:4;12988:8;12999:6;12956:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13048:8;13024:47;;;13059:6;13067:3;13024:47;;;;;;;;;;;;;;;;;;;;;;;;9069:50;13106:8;:26;;;13133:10;13145:6;13153:3;13158:4;;13106:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:85;13084:159;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13256:3;:8;;;13265:6;13256:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13317:15;13322:4;13328:3;13317:4;:15::i;:::-;13291:3;:7;;;13307:4;13291:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:41;;13283:79;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13382:4;13375:11;;;;9584:1:::0;9575:6;:10;;;;12435:959;;;;;;:::o;11397:995::-;11575:4;9500:1;9490:6;;:11;9482:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9551:1;9542:6;:10;;;;11617:3:::1;11600:21;;:5;:21;;;11592:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11681:3;;11671:6;:13;;11663:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11727:11;11741:17;11746:6;10124:8;11741:4;:17::i;:::-;11727:31;;11769:11;10086:8;11783:18;11788:6;11796:4;;11783;:18::i;:::-;:24;;;;;;11769:38;;11818:13;11834:17;11839:6;11847:3;11834:4;:17::i;:::-;11818:33;;11864:3;:8;;;11881:4;11896;11903:3;11864:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11918:7;:12;;;11939:8;11950:6;11918:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11993:8;11975:48;;;12004:5;12011:6;12019:3;11975:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8966:45;12058:8;:20;;;12079:10;12091:5;12098:6;12106:3;12111:4;;12058:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:78;12036:152;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12201:3;:16;;;12226:8;12245:4;12252:5;12201:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;12302:7;:12;;;12323:4;12330:5;12302:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12347:3;:8;;;12356:3;12347:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12380:4;12373:11;;;;;9584:1:::0;9575:6;:10;;;;11397:995;;;;;;;:::o;10915:232::-;11000:7;11041:3;11024:21;;:5;:21;;;:36;;;;;11059:1;11049:6;;:11;11024:36;11020:120;;;11084:3;;11077:10;;;;11020:120;11127:1;11120:8;;10915:232;;;;:::o;8632:32::-;;;:::o;8165:76::-;8431:1;8410:5;:17;8416:10;8410:17;;;;;;;;;;;;;;;;:22;8402:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8221:1:::1;8208:5;:10:::0;8214:3:::1;8208:10;;;;;;;;;;;;;;;:14;;;;8234:3;8229:9;;;;;;;;;;;;8165:76:::0;:::o;8726:23::-;;;;:::o;8923:88::-;8966:45;8923:88;:::o;9018:101::-;9069:50;9018:101;:::o;13402:109::-;9500:1;9490:6;;:11;9482:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9551:1;9542:6;:10;;;;13446:7:::1;:12;;;13467:4;13474:3;:13;;;13496:4;13474:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;13446:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9584:1:::0;9575:6;:10;;;;13402:109::o;8247:76::-;8431:1;8410:5;:17;8416:10;8410:17;;;;;;;;;;;;;;;;:22;8402:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8303:1:::1;8290:5:::0;:10:::1;8296:3;8290:10;;;;;;;;;;;;;;;:14;;;;8316:3;8311:9;;;;;;;;;;;;8247:76:::0;:::o;8329:41::-;;;;;;;;;;;;;;;;;:::o;8550:36::-;;;:::o;11153:238::-;11259:7;11304:3;11287:21;;:5;:21;;;11279:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10086:8;11359:18;11364:6;11372:4;;11359;:18::i;:::-;:24;;;;;;11352:31;;11153:238;;;;:::o;8593:32::-;;;:::o;13519:103::-;9500:1;9490:6;;:11;9482:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9551:1;9542:6;:10;;;;13562:3:::1;:8;;;13579:4;13586:3;13591;:7;;;13607:4;13591:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;13562:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9584:1:::0;9575:6;:10;;;;13519:103::o;10297:128::-;10356:9;10391:1;10386;:6;:30;;;;10415:1;10410;10405;10401;:5;10397:9;;;10396:15;;;;;;:20;10386:30;10378:39;;;;;;10297:128;;;;:::o;10177:114::-;10236:9;10281:1;10275;10271;:5;10267:9;;;10266:16;;10258:25;;;;;;10177:114;;;;:::o

Swarm Source

ipfs://2d33df4a3e1743c69ab21cab7f8f112a87fe7d5a66d47e439bc2b2f4419920d2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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