ETH Price: $3,156.87 (-1.16%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Liquidate Unclos...105397512020-07-27 5:41:081645 days ago1595828468IN
Synthetix: Old Ether Collateral
0 ETH0.0502992795
Liquidate Unclos...105397042020-07-27 5:29:141645 days ago1595827754IN
Synthetix: Old Ether Collateral
0 ETH0.0054561395
Liquidate Unclos...105396712020-07-27 5:21:221645 days ago1595827282IN
Synthetix: Old Ether Collateral
0 ETH0.0397656795
Liquidate Unclos...105396262020-07-27 5:11:521645 days ago1595826712IN
Synthetix: Old Ether Collateral
0 ETH0.0352865291
Liquidate Unclos...105396112020-07-27 5:08:461645 days ago1595826526IN
Synthetix: Old Ether Collateral
0 ETH0.0427834890
Close Loan104498962020-07-13 7:43:001659 days ago1594626180IN
Synthetix: Old Ether Collateral
0 ETH0.0155071138.8
Close Loan103435152020-06-26 20:15:261676 days ago1593202526IN
Synthetix: Old Ether Collateral
0 ETH0.0088419122
Close Loan103142452020-06-22 7:39:101680 days ago1592811550IN
Synthetix: Old Ether Collateral
0 ETH0.0129493531
Close Loan103141612020-06-22 7:18:091680 days ago1592810289IN
Synthetix: Old Ether Collateral
0 ETH0.0125273730
Close Loan102987152020-06-19 21:48:211683 days ago1592603301IN
Synthetix: Old Ether Collateral
0 ETH0.0070334417.5
Close Loan102511602020-06-12 13:29:381690 days ago1591968578IN
Synthetix: Old Ether Collateral
0 ETH0.0102417725
Close Loan101770522020-06-01 1:26:121702 days ago1590974772IN
Synthetix: Old Ether Collateral
0 ETH0.0068628117
Close Loan101672542020-05-30 12:54:451703 days ago1590843285IN
Synthetix: Old Ether Collateral
0 ETH0.0117071529
Close Loan101374552020-05-25 21:53:471708 days ago1590443627IN
Synthetix: Old Ether Collateral
0 ETH0.0066702215.9
Close Loan101184002020-05-22 22:43:571711 days ago1590187437IN
Synthetix: Old Ether Collateral
0 ETH0.0060554215
Close Loan100910792020-05-18 16:32:461715 days ago1589819566IN
Synthetix: Old Ether Collateral
0 ETH0.009960421
Close Loan100910672020-05-18 16:29:501715 days ago1589819390IN
Synthetix: Old Ether Collateral
0 ETH0.0156165922
Close Loan100399022020-05-10 17:53:071723 days ago1589133187IN
Synthetix: Old Ether Collateral
0 ETH0.0080686220
Close Loan99502682020-04-26 20:31:311737 days ago1587933091IN
Synthetix: Old Ether Collateral
0 ETH0.000070432
Close Loan99502682020-04-26 20:31:311737 days ago1587933091IN
Synthetix: Old Ether Collateral
0 ETH0.00096322
Close Loan99353922020-04-24 13:07:291739 days ago1587733649IN
Synthetix: Old Ether Collateral
0 ETH0.0060849311.1
Close Loan99350032020-04-24 11:37:451739 days ago1587728265IN
Synthetix: Old Ether Collateral
0 ETH0.004221498.9
Close Loan99349682020-04-24 11:27:351739 days ago1587727655IN
Synthetix: Old Ether Collateral
0 ETH0.005498948.9
Close Loan99098052020-04-20 14:23:591743 days ago1587392639IN
Synthetix: Old Ether Collateral
0 ETH0.0048840312
Close Loan99097502020-04-20 14:09:321743 days ago1587391772IN
Synthetix: Old Ether Collateral
0 ETH0.0058004612
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
105397512020-07-27 5:41:081645 days ago1595828468
Synthetix: Old Ether Collateral
98.30419689 ETH
105397512020-07-27 5:41:081645 days ago1595828468
Synthetix: Old Ether Collateral
1.6958031 ETH
105396712020-07-27 5:21:221645 days ago1595827282
Synthetix: Old Ether Collateral
49.15219532 ETH
105396712020-07-27 5:21:221645 days ago1595827282
Synthetix: Old Ether Collateral
0.84780467 ETH
105396262020-07-27 5:11:521645 days ago1595826712
Synthetix: Old Ether Collateral
1.47495944 ETH
105396262020-07-27 5:11:521645 days ago1595826712
Synthetix: Old Ether Collateral
0.02504055 ETH
105396112020-07-27 5:08:461645 days ago1595826526
Synthetix: Old Ether Collateral
0.98366491 ETH
105396112020-07-27 5:08:461645 days ago1595826526
Synthetix: Old Ether Collateral
0.01633508 ETH
104498962020-07-13 7:43:001659 days ago1594626180
Synthetix: Old Ether Collateral
147.69083856 ETH
104498962020-07-13 7:43:001659 days ago1594626180
Synthetix: Old Ether Collateral
2.30916143 ETH
103435152020-06-26 20:15:261676 days ago1593202526
Synthetix: Old Ether Collateral
0.89165712 ETH
103435152020-06-26 20:15:261676 days ago1593202526
Synthetix: Old Ether Collateral
0.10834287 ETH
103142452020-06-22 7:39:101680 days ago1592811550
Synthetix: Old Ether Collateral
8.81107113 ETH
103142452020-06-22 7:39:101680 days ago1592811550
Synthetix: Old Ether Collateral
0.18892886 ETH
103141612020-06-22 7:18:091680 days ago1592810289
Synthetix: Old Ether Collateral
14.67419552 ETH
103141612020-06-22 7:18:091680 days ago1592810289
Synthetix: Old Ether Collateral
0.32580447 ETH
102987152020-06-19 21:48:211683 days ago1592603301
Synthetix: Old Ether Collateral
7.7977466 ETH
102987152020-06-19 21:48:211683 days ago1592603301
Synthetix: Old Ether Collateral
0.20225339 ETH
102511602020-06-12 13:29:381690 days ago1591968578
Synthetix: Old Ether Collateral
1.57848285 ETH
102511602020-06-12 13:29:381690 days ago1591968578
Synthetix: Old Ether Collateral
0.02151714 ETH
101770522020-06-01 1:26:121702 days ago1590974772
Synthetix: Old Ether Collateral
2.96283995 ETH
101770522020-06-01 1:26:121702 days ago1590974772
Synthetix: Old Ether Collateral
0.03716004 ETH
101672542020-05-30 12:54:451703 days ago1590843285
Synthetix: Old Ether Collateral
0.98760587 ETH
101672542020-05-30 12:54:451703 days ago1590843285
Synthetix: Old Ether Collateral
0.01239412 ETH
101374552020-05-25 21:53:471708 days ago1590443627
Synthetix: Old Ether Collateral
0.99064273 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EtherCollateral

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-20
*/

/*
* Synthetix - EtherCollateral.sol
*
* https://github.com/Synthetixio/synthetix
* https://synthetix.io
*
* MIT License
* ===========
*
* Copyright (c) 2020 Synthetix
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,	
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
    
/* ===============================================
* Flattened with Solidifier by Coinage
* 
* https://solidifier.coina.ge
* ===============================================
*/


pragma solidity ^0.4.24;

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

  /// @dev counter to allow mutex lock with only one SSTORE operation
  uint256 private _guardCounter;

  constructor() internal {
    // The counter starts at one to prevent changing it from zero to a non-zero
    // value, which is a more expensive operation.
    _guardCounter = 1;
  }

  /**
   * @dev Prevents a contract from calling itself, directly or indirectly.
   * Calling a `nonReentrant` function from another `nonReentrant`
   * function is not supported. It is possible to prevent this from happening
   * by making the `nonReentrant` function external, and make it call a
   * `private` function that does the actual work.
   */
  modifier nonReentrant() {
    _guardCounter += 1;
    uint256 localCounter = _guardCounter;
    _;
    require(localCounter == _guardCounter);
  }

}


/*
-----------------------------------------------------------------
FILE INFORMATION
-----------------------------------------------------------------

file:       Owned.sol
version:    1.1
author:     Anton Jurisevic
            Dominic Romanowski

date:       2018-2-26

-----------------------------------------------------------------
MODULE DESCRIPTION
-----------------------------------------------------------------

An Owned contract, to be inherited by other contracts.
Requires its owner to be explicitly set in the constructor.
Provides an onlyOwner access modifier.

To change owner, the current owner must nominate the next owner,
who then has to accept the nomination. The nomination can be
cancelled before it is accepted by the new owner by having the
previous owner change the nomination (setting it to 0).

-----------------------------------------------------------------
*/


/**
 * @title A contract with an owner.
 * @notice Contract ownership can be transferred by first nominating the new owner,
 * who must then accept the ownership, which prevents accidental incorrect ownership transfers.
 */
contract Owned {
    address public owner;
    address public nominatedOwner;

    /**
     * @dev Owned Constructor
     */
    constructor(address _owner) public {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    /**
     * @notice Nominate a new owner of this contract.
     * @dev Only the current owner may nominate a new owner.
     */
    function nominateNewOwner(address _owner) external onlyOwner {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    /**
     * @notice Accept the nomination to be owner.
     */
    function acceptOwnership() external {
        require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner {
        require(msg.sender == owner, "Only the contract owner may perform this action");
        _;
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}


/*
-----------------------------------------------------------------
FILE INFORMATION
-----------------------------------------------------------------

file:       Pausable.sol
version:    1.0
author:     Kevin Brown

date:       2018-05-22

-----------------------------------------------------------------
MODULE DESCRIPTION
-----------------------------------------------------------------

This contract allows an inheriting contract to be marked as
paused. It also defines a modifier which can be used by the
inheriting contract to prevent actions while paused.

-----------------------------------------------------------------
*/


/**
 * @title A contract that can be paused by its owner
 */
contract Pausable is Owned {
    uint public lastPauseTime;
    bool public paused;

    /**
     * @dev Constructor
     * @param _owner The account which controls this contract.
     */
    constructor(address _owner) public Owned(_owner) {
        // Paused will be false, and lastPauseTime will be 0 upon initialisation
    }

    /**
     * @notice Change the paused state of the contract
     * @dev Only the contract owner may call this.
     */
    function setPaused(bool _paused) external onlyOwner {
        // Ensure we're actually changing the state before we do anything
        if (_paused == paused) {
            return;
        }

        // Set our paused state.
        paused = _paused;

        // If applicable, set the last pause time.
        if (paused) {
            lastPauseTime = now;
        }

        // Let everyone know that our pause state has changed.
        emit PauseChanged(paused);
    }

    event PauseChanged(bool isPaused);

    modifier notPaused {
        require(!paused, "This action cannot be performed while the contract is paused");
        _;
    }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on 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-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, "SafeMath.mul Error");

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0, "SafeMath.div Error"); // Solidity only automatically asserts when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a, "SafeMath.sub Error");
    uint256 c = a - b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath.add Error");

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0, "SafeMath.mod Error");
    return a % b;
  }
}


/*

-----------------------------------------------------------------
FILE INFORMATION
-----------------------------------------------------------------

file:       SafeDecimalMath.sol
version:    2.0
author:     Kevin Brown
            Gavin Conway
date:       2018-10-18

-----------------------------------------------------------------
MODULE DESCRIPTION
-----------------------------------------------------------------

A library providing safe mathematical operations for division and
multiplication with the capability to round or truncate the results
to the nearest increment. Operations can return a standard precision
or high precision decimal. High precision decimals are useful for
example when attempting to calculate percentages or fractions
accurately.

-----------------------------------------------------------------
*/


/**
 * @title Safely manipulate unsigned fixed-point decimals at a given precision level.
 * @dev Functions accepting uints in this contract and derived contracts
 * are taken to be such fixed point decimals of a specified precision (either standard
 * or high).
 */
library SafeDecimalMath {
    using SafeMath for uint;

    /* Number of decimal places in the representations. */
    uint8 public constant decimals = 18;
    uint8 public constant highPrecisionDecimals = 27;

    /* The number representing 1.0. */
    uint public constant UNIT = 10**uint(decimals);

    /* The number representing 1.0 for higher fidelity numbers. */
    uint public constant PRECISE_UNIT = 10**uint(highPrecisionDecimals);
    uint private constant UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR = 10**uint(highPrecisionDecimals - decimals);

    /** 
     * @return Provides an interface to UNIT.
     */
    function unit() external pure returns (uint) {
        return UNIT;
    }

    /** 
     * @return Provides an interface to PRECISE_UNIT.
     */
    function preciseUnit() external pure returns (uint) {
        return PRECISE_UNIT;
    }

    /**
     * @return The result of multiplying x and y, interpreting the operands as fixed-point
     * decimals.
     * 
     * @dev A unit factor is divided out after the product of x and y is evaluated,
     * so that product must be less than 2**256. As this is an integer division,
     * the internal division always rounds down. This helps save on gas. Rounding
     * is more expensive on gas.
     */
    function multiplyDecimal(uint x, uint y) internal pure returns (uint) {
        /* Divide by UNIT to remove the extra factor introduced by the product. */
        return x.mul(y) / UNIT;
    }

    /**
     * @return The result of safely multiplying x and y, interpreting the operands
     * as fixed-point decimals of the specified precision unit.
     *
     * @dev The operands should be in the form of a the specified unit factor which will be
     * divided out after the product of x and y is evaluated, so that product must be
     * less than 2**256.
     *
     * Unlike multiplyDecimal, this function rounds the result to the nearest increment.
     * Rounding is useful when you need to retain fidelity for small decimal numbers
     * (eg. small fractions or percentages).
     */
    function _multiplyDecimalRound(uint x, uint y, uint precisionUnit) private pure returns (uint) {
        /* Divide by UNIT to remove the extra factor introduced by the product. */
        uint quotientTimesTen = x.mul(y) / (precisionUnit / 10);

        if (quotientTimesTen % 10 >= 5) {
            quotientTimesTen += 10;
        }

        return quotientTimesTen / 10;
    }

    /**
     * @return The result of safely multiplying x and y, interpreting the operands
     * as fixed-point decimals of a precise unit.
     *
     * @dev The operands should be in the precise unit factor which will be
     * divided out after the product of x and y is evaluated, so that product must be
     * less than 2**256.
     *
     * Unlike multiplyDecimal, this function rounds the result to the nearest increment.
     * Rounding is useful when you need to retain fidelity for small decimal numbers
     * (eg. small fractions or percentages).
     */
    function multiplyDecimalRoundPrecise(uint x, uint y) internal pure returns (uint) {
        return _multiplyDecimalRound(x, y, PRECISE_UNIT);
    }

    /**
     * @return The result of safely multiplying x and y, interpreting the operands
     * as fixed-point decimals of a standard unit.
     *
     * @dev The operands should be in the standard unit factor which will be
     * divided out after the product of x and y is evaluated, so that product must be
     * less than 2**256.
     *
     * Unlike multiplyDecimal, this function rounds the result to the nearest increment.
     * Rounding is useful when you need to retain fidelity for small decimal numbers
     * (eg. small fractions or percentages).
     */
    function multiplyDecimalRound(uint x, uint y) internal pure returns (uint) {
        return _multiplyDecimalRound(x, y, UNIT);
    }

    /**
     * @return The result of safely dividing x and y. The return value is a high
     * precision decimal.
     * 
     * @dev y is divided after the product of x and the standard precision unit
     * is evaluated, so the product of x and UNIT must be less than 2**256. As
     * this is an integer division, the result is always rounded down.
     * This helps save on gas. Rounding is more expensive on gas.
     */
    function divideDecimal(uint x, uint y) internal pure returns (uint) {
        /* Reintroduce the UNIT factor that will be divided out by y. */
        return x.mul(UNIT).div(y);
    }

    /**
     * @return The result of safely dividing x and y. The return value is as a rounded
     * decimal in the precision unit specified in the parameter.
     *
     * @dev y is divided after the product of x and the specified precision unit
     * is evaluated, so the product of x and the specified precision unit must
     * be less than 2**256. The result is rounded to the nearest increment.
     */
    function _divideDecimalRound(uint x, uint y, uint precisionUnit) private pure returns (uint) {
        uint resultTimesTen = x.mul(precisionUnit * 10).div(y);

        if (resultTimesTen % 10 >= 5) {
            resultTimesTen += 10;
        }

        return resultTimesTen / 10;
    }

    /**
     * @return The result of safely dividing x and y. The return value is as a rounded
     * standard precision decimal.
     *
     * @dev y is divided after the product of x and the standard precision unit
     * is evaluated, so the product of x and the standard precision unit must
     * be less than 2**256. The result is rounded to the nearest increment.
     */
    function divideDecimalRound(uint x, uint y) internal pure returns (uint) {
        return _divideDecimalRound(x, y, UNIT);
    }

    /**
     * @return The result of safely dividing x and y. The return value is as a rounded
     * high precision decimal.
     *
     * @dev y is divided after the product of x and the high precision unit
     * is evaluated, so the product of x and the high precision unit must
     * be less than 2**256. The result is rounded to the nearest increment.
     */
    function divideDecimalRoundPrecise(uint x, uint y) internal pure returns (uint) {
        return _divideDecimalRound(x, y, PRECISE_UNIT);
    }

    /**
     * @dev Convert a standard decimal representation to a high precision one.
     */
    function decimalToPreciseDecimal(uint i) internal pure returns (uint) {
        return i.mul(UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR);
    }

    /**
     * @dev Convert a high precision decimal to a standard decimal representation.
     */
    function preciseDecimalToDecimal(uint i) internal pure returns (uint) {
        uint quotientTimesTen = i / (UNIT_TO_HIGH_PRECISION_CONVERSION_FACTOR / 10);

        if (quotientTimesTen % 10 >= 5) {
            quotientTimesTen += 10;
        }

        return quotientTimesTen / 10;
    }
}


/**
 * @title FeePool Interface
 * @notice Abstract contract to hold public getters
 */
contract IFeePool {
    address public FEE_ADDRESS;
    uint public exchangeFeeRate;

    function amountReceivedFromExchange(uint value) external view returns (uint);

    function amountReceivedFromTransfer(uint value) external view returns (uint);

    function recordFeePaid(uint sUSDAmount) external;

    function appendAccountIssuanceRecord(address account, uint lockedAmount, uint debtEntryIndex) external;

    function setRewardsToDistribute(uint amount) external;
}


interface ISynth {
    function burn(address account, uint amount) external;

    function issue(address account, uint amount) external;

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(address from, address to, uint value) external returns (bool);

    function transferFromAndSettle(address from, address to, uint value) external returns (bool);

    function balanceOf(address owner) external view returns (uint);
}


/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract IERC20 {
    function totalSupply() public view returns (uint);

    function balanceOf(address owner) public view returns (uint);

    function allowance(address owner, address spender) public view returns (uint);

    function transfer(address to, uint value) public returns (bool);

    function approve(address spender, uint value) public returns (bool);

    function transferFrom(address from, address to, uint value) public returns (bool);

    // ERC20 Optional
    function name() public view returns (string);

    function symbol() public view returns (string);

    function decimals() public view returns (uint8);

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

    event Approval(address indexed owner, address indexed spender, uint value);
}


/**
 * @title Synthetix Depot interface
 */
contract IDepot {
    function exchangeEtherForSynths() public payable returns (uint);

    function exchangeEtherForSynthsAtRate(uint guaranteedRate) external payable returns (uint);

    function depositSynths(uint amount) external;

    function withdrawMyDepositedSynths() external;

    // Deprecated ABI for MAINNET. Only used on Testnets
    function exchangeEtherForSNX() external payable returns (uint);

    function exchangeEtherForSNXAtRate(uint guaranteedRate) external payable returns (uint);

    function exchangeSynthsForSNX() external payable returns (uint);
}


contract AddressResolver is Owned {
    mapping(bytes32 => address) public repository;

    constructor(address _owner) public Owned(_owner) {}

    /* ========== MUTATIVE FUNCTIONS ========== */

    function importAddresses(bytes32[] names, address[] destinations) public onlyOwner {
        require(names.length == destinations.length, "Input lengths must match");

        for (uint i = 0; i < names.length; i++) {
            repository[names[i]] = destinations[i];
        }
    }

    /* ========== VIEWS ========== */

    function getAddress(bytes32 name) public view returns (address) {
        return repository[name];
    }

    function requireAndGetAddress(bytes32 name, string reason) public view returns (address) {
        address _foundAddress = repository[name];
        require(_foundAddress != address(0), reason);
        return _foundAddress;
    }
}


contract MixinResolver is Owned {
    AddressResolver public resolver;

    constructor(address _owner, address _resolver) public Owned(_owner) {
        resolver = AddressResolver(_resolver);
    }

    /* ========== SETTERS ========== */

    function setResolver(AddressResolver _resolver) public onlyOwner {
        resolver = _resolver;
    }
}


contract EtherCollateral is Owned, Pausable, ReentrancyGuard, MixinResolver {
    using SafeMath for uint256;
    using SafeDecimalMath for uint256;

    // ========== CONSTANTS ==========

    uint256 constant ONE_THOUSAND = SafeDecimalMath.unit() * 1000;
    uint256 constant ONE_HUNDRED = SafeDecimalMath.unit() * 100;

    uint256 constant SECONDS_IN_A_YEAR = 31536000; // Common Year

    // Where fees are pooled in sUSD.
    address constant FEE_ADDRESS = 0xfeEFEEfeefEeFeefEEFEEfEeFeefEEFeeFEEFEeF;

    // ========== SETTER STATE VARIABLES ==========

    // The ratio of Collateral to synths issued
    uint256 public collateralizationRatio = SafeDecimalMath.unit() * 150;

    // If updated, all outstanding loans will pay this interest rate in on closure of the loan. Default 5%
    uint256 public interestRate = (5 * SafeDecimalMath.unit()) / 100;
    uint256 public interestPerSecond = interestRate.div(SECONDS_IN_A_YEAR);

    // Minting fee for issuing the synths. Default 50 bips.
    uint256 public issueFeeRate = (5 * SafeDecimalMath.unit()) / 1000;

    // Maximum amount of sETH that can be issued by the EtherCollateral contract. Default 5000
    uint256 public issueLimit = SafeDecimalMath.unit() * 5000;

    // Minimum amount of ETH to create loan preventing griefing and gas consumption. Min 1ETH = 0.6666666667 sETH
    uint256 public minLoanSize = SafeDecimalMath.unit() * 1;

    // Maximum number of loans an account can create
    uint256 public accountLoanLimit = 50;

    // If true then any wallet addres can close a loan not just the loan creator.
    bool public loanLiquidationOpen = false;

    // Time when remaining loans can be liquidated
    uint256 public liquidationDeadline;

    // ========== STATE VARIABLES ==========

    // The total number of synths issued by the collateral in this contract
    uint256 public totalIssuedSynths;

    // Total number of loans ever created
    uint256 public totalLoansCreated;

    // Total number of open loans
    uint256 public totalOpenLoanCount;

    // Synth loan storage struct
    struct synthLoanStruct {
        //  Acccount that created the loan
        address account;
        //  Amount (in collateral token ) that they deposited
        uint256 collateralAmount;
        //  Amount (in synths) that they issued to borrow
        uint256 loanAmount;
        // When the loan was created
        uint256 timeCreated;
        // ID for the loan
        uint256 loanID;
        // When the loan was paidback (closed)
        uint256 timeClosed;
    }

    // Users Loans by address
    mapping(address => synthLoanStruct[]) public accountsSynthLoans;

    // Account Open Loan Counter
    mapping(address => uint256) public accountOpenLoanCounter;

    // ========== CONSTRUCTOR ==========
    constructor(address _owner, address _resolver) public Owned(_owner) Pausable(_owner) MixinResolver(_owner, _resolver) {
        liquidationDeadline = now + 92 days; // Time before loans can be liquidated
    }

    // ========== SETTERS ==========

    function setCollateralizationRatio(uint256 ratio) external onlyOwner {
        require(ratio <= ONE_THOUSAND, "Too high");
        require(ratio >= ONE_HUNDRED, "Too low");
        collateralizationRatio = ratio;
        emit CollateralizationRatioUpdated(ratio);
    }

    function setInterestRate(uint256 _interestRate) external onlyOwner {
        require(_interestRate > SECONDS_IN_A_YEAR, "Interest rate cannot be less that the SECONDS_IN_A_YEAR");
        require(_interestRate <= SafeDecimalMath.unit(), "Interest cannot be more than 100% APR");
        interestRate = _interestRate;
        interestPerSecond = _interestRate.div(SECONDS_IN_A_YEAR);
        emit InterestRateUpdated(interestRate);
    }

    function setIssueFeeRate(uint256 _issueFeeRate) external onlyOwner {
        issueFeeRate = _issueFeeRate;
        emit IssueFeeRateUpdated(issueFeeRate);
    }

    function setIssueLimit(uint256 _issueLimit) external onlyOwner {
        issueLimit = _issueLimit;
        emit IssueLimitUpdated(issueLimit);
    }

    function setMinLoanSize(uint256 _minLoanSize) external onlyOwner {
        minLoanSize = _minLoanSize;
        emit MinLoanSizeUpdated(minLoanSize);
    }

    function setAccountLoanLimit(uint256 _loanLimit) external onlyOwner {
        uint256 HARD_CAP = 1000;
        require(_loanLimit < HARD_CAP, "Owner cannot set higher than HARD_CAP");
        accountLoanLimit = _loanLimit;
        emit AccountLoanLimitUpdated(accountLoanLimit);
    }

    function setLoanLiquidationOpen(bool _loanLiquidationOpen) external onlyOwner {
        require(now > liquidationDeadline, "Before liquidation deadline");
        loanLiquidationOpen = _loanLiquidationOpen;
        emit LoanLiquidationOpenUpdated(loanLiquidationOpen);
    }

    // ========== PUBLIC VIEWS ==========

    function getContractInfo()
        external
        view
        returns (
            uint256 _collateralizationRatio,
            uint256 _issuanceRatio,
            uint256 _interestRate,
            uint256 _interestPerSecond,
            uint256 _issueFeeRate,
            uint256 _issueLimit,
            uint256 _minLoanSize,
            uint256 _totalIssuedSynths,
            uint256 _totalLoansCreated,
            uint256 _totalOpenLoanCount,
            uint256 _ethBalance,
            uint256 _liquidationDeadline,
            bool _loanLiquidationOpen
        )
    {
        _collateralizationRatio = collateralizationRatio;
        _issuanceRatio = issuanceRatio();
        _interestRate = interestRate;
        _interestPerSecond = interestPerSecond;
        _issueFeeRate = issueFeeRate;
        _issueLimit = issueLimit;
        _minLoanSize = minLoanSize;
        _totalIssuedSynths = totalIssuedSynths;
        _totalLoansCreated = totalLoansCreated;
        _totalOpenLoanCount = totalOpenLoanCount;
        _ethBalance = address(this).balance;
        _liquidationDeadline = liquidationDeadline;
        _loanLiquidationOpen = loanLiquidationOpen;
    }

    // returns value of 100 / collateralizationRatio.
    // e.g. 100/150 = 0.666666666666666667
    // or in wei 100000000000000000000/150000000000000000000 = 666666666666666667
    function issuanceRatio() public view returns (uint256) {
        // this Rounds so you get slightly more rather than slightly less
        // 4999999999999999995000
        return ONE_HUNDRED.divideDecimalRound(collateralizationRatio);
    }

    function loanAmountFromCollateral(uint256 collateralAmount) public view returns (uint256) {
        return collateralAmount.multiplyDecimal(issuanceRatio());
    }

    function collateralAmountForLoan(uint256 loanAmount) external view returns (uint256) {
        return loanAmount.multiplyDecimal(collateralizationRatio.divideDecimalRound(ONE_HUNDRED));
    }

    function currentInterestOnLoan(address _account, uint256 _loanID) external view returns (uint256) {
        // Get the loan from storage
        synthLoanStruct memory synthLoan = _getLoanFromStorage(_account, _loanID);
        uint256 loanLifeSpan = _loanLifeSpan(synthLoan);
        return accruedInterestOnLoan(synthLoan.loanAmount, loanLifeSpan);
    }

    function accruedInterestOnLoan(uint256 _loanAmount, uint256 _seconds) public view returns (uint256 interestAmount) {
        // Simple interest calculated per second
        // Interest = Principal * rate * time
        interestAmount = _loanAmount.multiplyDecimalRound(interestPerSecond.mul(_seconds));
    }

    function calculateMintingFee(address _account, uint256 _loanID) external view returns (uint256) {
        // Get the loan from storage
        synthLoanStruct memory synthLoan = _getLoanFromStorage(_account, _loanID);
        return _calculateMintingFee(synthLoan);
    }

    function openLoanIDsByAccount(address _account) external view returns (uint256[]) {
        uint256[] _openLoanIDs;
        uint256 _counter = 0;

        synthLoanStruct[] memory synthLoans = accountsSynthLoans[_account];

        for (uint256 i = 0; i < synthLoans.length; i++) {
            if (synthLoans[i].timeClosed == 0) {
                _openLoanIDs[_counter] = synthLoans[i].loanID;
                _counter++;
            }
        }
        // Create the fixed size array to return
        uint256[] memory _result = new uint256[](_counter);

        // Copy loanIDs from dynamic array to fixed array
        for (uint256 j = 0; j < _counter; j++) {
            _result[j] = _openLoanIDs[j];
        }
        // Return an array with list of open Loan IDs
        return _result;
    }

    function getLoan(address _account, uint256 _loanID)
        external
        view
        returns (
            address account,
            uint256 collateralAmount,
            uint256 loanAmount,
            uint256 timeCreated,
            uint256 loanID,
            uint256 timeClosed,
            uint256 interest,
            uint256 totalFees
        )
    {
        synthLoanStruct memory synthLoan = _getLoanFromStorage(_account, _loanID);
        account = synthLoan.account;
        collateralAmount = synthLoan.collateralAmount;
        loanAmount = synthLoan.loanAmount;
        timeCreated = synthLoan.timeCreated;
        loanID = synthLoan.loanID;
        timeClosed = synthLoan.timeClosed;
        interest = accruedInterestOnLoan(synthLoan.loanAmount, _loanLifeSpan(synthLoan));
        totalFees = interest.add(_calculateMintingFee(synthLoan));
    }

    function loanLifeSpan(address _account, uint256 _loanID) external view returns (uint256 loanLifeSpan) {
        synthLoanStruct memory synthLoan = _getLoanFromStorage(_account, _loanID);
        loanLifeSpan = _loanLifeSpan(synthLoan);
    }

    // ========== PUBLIC FUNCTIONS ==========

    function openLoan() external payable notPaused nonReentrant returns (uint256 loanID) {
        // Require ETH sent to be greater than minLoanSize
        require(msg.value >= minLoanSize, "Not enough ETH to create this loan. Please see the minLoanSize");

        // Require loanLiquidationOpen to be false or we are in liquidation phase
        require(loanLiquidationOpen == false, "Loans are now being liquidated");

        // Each account is limted to creating 50 (accountLoanLimit) loans
        require(accountsSynthLoans[msg.sender].length < accountLoanLimit, "Each account is limted to 50 loans");

        // Calculate issuance amount
        uint256 loanAmount = loanAmountFromCollateral(msg.value);

        // Require sETH to mint does not exceed cap
        require(totalIssuedSynths.add(loanAmount) < issueLimit, "Loan Amount exceeds the supply cap. ");

        // Get a Loan ID
        loanID = _incrementTotalLoansCounter();

        // Create Loan storage object
        synthLoanStruct memory synthLoan = synthLoanStruct({
            account: msg.sender,
            collateralAmount: msg.value,
            loanAmount: loanAmount,
            timeCreated: now,
            loanID: loanID,
            timeClosed: 0
        });

        // Record loan in mapping to account in an array of the accounts open loans
        accountsSynthLoans[msg.sender].push(synthLoan);

        // Increment totalIssuedSynths
        totalIssuedSynths = totalIssuedSynths.add(loanAmount);

        // Issue the synth
        synthsETH().issue(msg.sender, loanAmount);

        // Tell the Dapps a loan was created
        emit LoanCreated(msg.sender, loanID, loanAmount);
    }

    function closeLoan(uint256 loanID) external nonReentrant {
        _closeLoan(msg.sender, loanID);
    }

    // Liquidation of an open loan available for anyone
    function liquidateUnclosedLoan(address _loanCreatorsAddress, uint256 _loanID) external nonReentrant {
        require(loanLiquidationOpen, "Liquidation is not open");
        // Close the creators loan and send collateral to the closer.
        _closeLoan(_loanCreatorsAddress, _loanID);
        // Tell the Dapps this loan was liquidated
        emit LoanLiquidated(_loanCreatorsAddress, _loanID, msg.sender);
    }

    // ========== PRIVATE FUNCTIONS ==========

    function _closeLoan(address account, uint256 loanID) private {
        // Get the loan from storage
        synthLoanStruct memory synthLoan = _getLoanFromStorage(account, loanID);

        require(synthLoan.loanID > 0, "Loan does not exist");
        require(synthLoan.timeClosed == 0, "Loan already closed");
        require(
            synthsETH().balanceOf(msg.sender) >= synthLoan.loanAmount,
            "You do not have the required Synth balance to close this loan."
        );

        // Record loan as closed
        _recordLoanClosure(synthLoan);

        // Decrement totalIssuedSynths
        totalIssuedSynths = totalIssuedSynths.sub(synthLoan.loanAmount);

        // Calculate and deduct interest(5%) and minting fee(50 bips) in ETH
        uint256 interestAmount = accruedInterestOnLoan(synthLoan.loanAmount, _loanLifeSpan(synthLoan));
        uint256 mintingFee = _calculateMintingFee(synthLoan);
        uint256 totalFees = interestAmount.add(mintingFee);

        // Burn all Synths issued for the loan
        synthsETH().burn(account, synthLoan.loanAmount);

        // Fee Distribution. Purchase sUSD with ETH from Depot
        require(synthsUSD().balanceOf(depot()) >= totalFees, "The sUSD Depot does not have enough sUSD to buy for fees");
        depot().exchangeEtherForSynths.value(totalFees)();

        // Transfer the sUSD to distribute to SNX holders.
        synthsUSD().transfer(FEE_ADDRESS, synthsUSD().balanceOf(this));

        // Send remainder ETH to caller
        address(msg.sender).transfer(synthLoan.collateralAmount.sub(totalFees));

        // Tell the Dapps
        emit LoanClosed(account, loanID, totalFees);
    }

    function _getLoanFromStorage(address account, uint256 loanID) private view returns (synthLoanStruct) {
        synthLoanStruct[] memory synthLoans = accountsSynthLoans[account];
        for (uint256 i = 0; i < synthLoans.length; i++) {
            if (synthLoans[i].loanID == loanID) {
                return synthLoans[i];
            }
        }
    }

    function _recordLoanClosure(synthLoanStruct synthLoan) private {
        // Get storage pointer to the accounts array of loans
        synthLoanStruct[] storage synthLoans = accountsSynthLoans[synthLoan.account];
        for (uint256 i = 0; i < synthLoans.length; i++) {
            if (synthLoans[i].loanID == synthLoan.loanID) {
                // Record the time the loan was closed
                synthLoans[i].timeClosed = now;
            }
        }

        // Reduce Total Open Loans Count
        totalOpenLoanCount = totalOpenLoanCount.sub(1);
    }

    function _incrementTotalLoansCounter() private returns (uint256) {
        // Increase the total Open loan count
        totalOpenLoanCount = totalOpenLoanCount.add(1);
        // Increase the total Loans Created count
        totalLoansCreated = totalLoansCreated.add(1);
        // Return total count to be used as a unique ID.
        return totalLoansCreated;
    }

    function _calculateMintingFee(synthLoanStruct synthLoan) private view returns (uint256 mintingFee) {
        mintingFee = synthLoan.loanAmount.multiplyDecimalRound(issueFeeRate);
    }

    function _loanLifeSpan(synthLoanStruct synthLoan) private view returns (uint256 loanLifeSpan) {
        // Get time loan is open for, and if closed from the timeClosed
        bool loanClosed = synthLoan.timeClosed > 0;
        // Calculate loan life span in seconds as (Now - Loan creation time)
        loanLifeSpan = loanClosed ? synthLoan.timeClosed.sub(synthLoan.timeCreated) : now.sub(synthLoan.timeCreated);
    }

    /* ========== INTERNAL VIEWS ========== */

    function synthsETH() internal view returns (ISynth) {
        return ISynth(resolver.requireAndGetAddress("SynthsETH", "Missing SynthsETH address"));
    }

    function synthsUSD() internal view returns (ISynth) {
        return ISynth(resolver.requireAndGetAddress("SynthsUSD", "Missing SynthsUSD address"));
    }

    function depot() internal view returns (IDepot) {
        return IDepot(resolver.requireAndGetAddress("Depot", "Missing Depot address"));
    }

    // ========== EVENTS ==========

    event CollateralizationRatioUpdated(uint256 ratio);
    event InterestRateUpdated(uint256 interestRate);
    event IssueFeeRateUpdated(uint256 issueFeeRate);
    event IssueLimitUpdated(uint256 issueLimit);
    event MinLoanSizeUpdated(uint256 minLoanSize);
    event AccountLoanLimitUpdated(uint256 loanLimit);
    event LoanLiquidationOpenUpdated(bool loanLiquidationOpen);
    event LoanCreated(address indexed account, uint256 loanID, uint256 amount);
    event LoanClosed(address indexed account, uint256 loanID, uint256 feesPaid);
    event LoanLiquidated(address indexed account, uint256 loanID, address liquidator);
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"resolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountOpenLoanCounter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"accountLoanLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalLoansCreated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_loanID","type":"uint256"}],"name":"calculateMintingFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"openLoanIDsByAccount","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"issueFeeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalOpenLoanCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_issueLimit","type":"uint256"}],"name":"setIssueLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_minLoanSize","type":"uint256"}],"name":"setMinLoanSize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_loanLimit","type":"uint256"}],"name":"setAccountLoanLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_interestRate","type":"uint256"}],"name":"setInterestRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"openLoan","outputs":[{"name":"loanID","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"interestRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getContractInfo","outputs":[{"name":"_collateralizationRatio","type":"uint256"},{"name":"_issuanceRatio","type":"uint256"},{"name":"_interestRate","type":"uint256"},{"name":"_interestPerSecond","type":"uint256"},{"name":"_issueFeeRate","type":"uint256"},{"name":"_issueLimit","type":"uint256"},{"name":"_minLoanSize","type":"uint256"},{"name":"_totalIssuedSynths","type":"uint256"},{"name":"_totalLoansCreated","type":"uint256"},{"name":"_totalOpenLoanCount","type":"uint256"},{"name":"_ethBalance","type":"uint256"},{"name":"_liquidationDeadline","type":"uint256"},{"name":"_loanLiquidationOpen","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_loanID","type":"uint256"}],"name":"currentInterestOnLoan","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_loanID","type":"uint256"}],"name":"loanLifeSpan","outputs":[{"name":"loanLifeSpan","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"collateralAmount","type":"uint256"}],"name":"loanAmountFromCollateral","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastPauseTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"liquidationDeadline","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"},{"name":"_loanID","type":"uint256"}],"name":"getLoan","outputs":[{"name":"account","type":"address"},{"name":"collateralAmount","type":"uint256"},{"name":"loanAmount","type":"uint256"},{"name":"timeCreated","type":"uint256"},{"name":"loanID","type":"uint256"},{"name":"timeClosed","type":"uint256"},{"name":"interest","type":"uint256"},{"name":"totalFees","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_loanAmount","type":"uint256"},{"name":"_seconds","type":"uint256"}],"name":"accruedInterestOnLoan","outputs":[{"name":"interestAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_issueFeeRate","type":"uint256"}],"name":"setIssueFeeRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"accountsSynthLoans","outputs":[{"name":"account","type":"address"},{"name":"collateralAmount","type":"uint256"},{"name":"loanAmount","type":"uint256"},{"name":"timeCreated","type":"uint256"},{"name":"loanID","type":"uint256"},{"name":"timeClosed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"issuanceRatio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_loanLiquidationOpen","type":"bool"}],"name":"setLoanLiquidationOpen","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minLoanSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"loanID","type":"uint256"}],"name":"closeLoan","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"collateralizationRatio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_loanCreatorsAddress","type":"address"},{"name":"_loanID","type":"uint256"}],"name":"liquidateUnclosedLoan","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"loanLiquidationOpen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"interestPerSecond","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ratio","type":"uint256"}],"name":"setCollateralizationRatio","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalIssuedSynths","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"issueLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"loanAmount","type":"uint256"}],"name":"collateralAmountForLoan","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_resolver","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ratio","type":"uint256"}],"name":"CollateralizationRatioUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"interestRate","type":"uint256"}],"name":"InterestRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"issueFeeRate","type":"uint256"}],"name":"IssueFeeRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"issueLimit","type":"uint256"}],"name":"IssueLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minLoanSize","type":"uint256"}],"name":"MinLoanSizeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"loanLimit","type":"uint256"}],"name":"AccountLoanLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"loanLiquidationOpen","type":"bool"}],"name":"LoanLiquidationOpenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"loanID","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"LoanCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"loanID","type":"uint256"},{"indexed":false,"name":"feesPaid","type":"uint256"}],"name":"LoanClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"loanID","type":"uint256"},{"indexed":false,"name":"liquidator","type":"address"}],"name":"LoanLiquidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"isPaused","type":"bool"}],"name":"PauseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"}]

608060408190527f907af6c00000000000000000000000000000000000000000000000000000000081527384d626b2bb4d0f064067e4bf80fce7055d8f3e7b9063907af6c09060849060209060048186803b1580156200005e57600080fd5b505af415801562000073573d6000803e3d6000fd5b505050506040513d60208110156200008a57600080fd5b5051609602600655604080517f907af6c000000000000000000000000000000000000000000000000000000000815290516064917384d626b2bb4d0f064067e4bf80fce7055d8f3e7b9163907af6c091600480820192602092909190829003018186803b158015620000fb57600080fd5b505af415801562000110573d6000803e3d6000fd5b505050506040513d60208110156200012757600080fd5b50516005028115156200013657fe5b0460078190556200015a906301e1338064010000000062001f396200046f82021704565b6008556103e87384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015620001c157600080fd5b505af4158015620001d6573d6000803e3d6000fd5b505050506040513d6020811015620001ed57600080fd5b5051600502811515620001fc57fe5b046009557384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200026157600080fd5b505af415801562000276573d6000803e3d6000fd5b505050506040513d60208110156200028d57600080fd5b505161138802600a55604080517f907af6c000000000000000000000000000000000000000000000000000000000815290517384d626b2bb4d0f064067e4bf80fce7055d8f3e7b9163907af6c0916004808301926020929190829003018186803b158015620002fb57600080fd5b505af415801562000310573d6000803e3d6000fd5b505050506040513d60208110156200032757600080fd5b5051600b556032600c55600d805460ff191690553480156200034857600080fd5b50604051604080620030c783398101604052805160209091015181818180600160a060020a0381161515620003de57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015290519081900360640190fd5b60008054600160a060020a031916600160a060020a038316908117825560408051928352602083019190915280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a15050600160045560058054600160a060020a031916600160a060020a03929092169190911790555050504262794a0001600e55620004f6565b600080808311620004e157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f536166654d6174682e646976204572726f720000000000000000000000000000604482015290519081900360640190fd5b8284811515620004ed57fe5b04949350505050565b612bc180620005066000396000f3006080604052600436106101f55763ffffffff60e060020a60003504166304f3bcec81146101fa578063089f7fb41461022b5780631474b2791461025e5780631627540c1461027357806316c38b3c1461029657806323aa7f0f146102b057806327cff2e5146102c55780632f2bf15b146102e9578063361e20861461035a5780634189bb491461036f5780634e543b26146103845780634f069f66146103a557806350e3b2e7146103bd57806353a47bb7146103d55780635c975abb146103ea5780635d1a2229146104135780635f84f3021461042b5780636b2319381461044357806379ba50971461044b5780637c3a00fd146104605780637cc1f8671461047557806389c937de146104f15780638c463869146105155780638da5cb5b146105395780638fdc8f3b1461054e57806391b4ded9146105665780639f7d56881461057b578063a1c5158614610590578063a2e17342146105ff578063a76cdfa51461061a578063aa754a2a14610632578063b410a03414610693578063bb8c6d6c146106a8578063cf09b4ae146106c2578063d05951a0146106d7578063dcaf9c44146106ef578063e220a81114610704578063e3c1e58c14610728578063e40108ed1461073d578063e5829d2014610752578063ee5f3f5c1461076a578063eea8f5da1461077f578063f53dfb8414610794575b600080fd5b34801561020657600080fd5b5061020f6107ac565b60408051600160a060020a039092168252519081900360200190f35b34801561023757600080fd5b5061024c600160a060020a03600435166107bb565b60408051918252519081900360200190f35b34801561026a57600080fd5b5061024c6107cd565b34801561027f57600080fd5b50610294600160a060020a03600435166107d3565b005b3480156102a257600080fd5b506102946004351515610898565b3480156102bc57600080fd5b5061024c61096e565b3480156102d157600080fd5b5061024c600160a060020a0360043516602435610974565b3480156102f557600080fd5b5061030a600160a060020a036004351661099d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561034657818101518382015260200161032e565b505050509050019250505060405180910390f35b34801561036657600080fd5b5061024c610b61565b34801561037b57600080fd5b5061024c610b67565b34801561039057600080fd5b50610294600160a060020a0360043516610b6d565b3480156103b157600080fd5b50610294600435610c00565b3480156103c957600080fd5b50610294600435610c9f565b3480156103e157600080fd5b5061020f610d3e565b3480156103f657600080fd5b506103ff610d4d565b604080519115158252519081900360200190f35b34801561041f57600080fd5b50610294600435610d56565b34801561043757600080fd5b50610294600435610e78565b61024c6110a1565b34801561045757600080fd5b506102946114d5565b34801561046c57600080fd5b5061024c6115dd565b34801561048157600080fd5b5061048a6115e3565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e0880152610100870152610120860152610140850152610160840152151561018083015251908190036101a00190f35b3480156104fd57600080fd5b5061024c600160a060020a0360043516602435611658565b34801561052157600080fd5b5061024c600160a060020a0360043516602435611694565b34801561054557600080fd5b5061020f6116b3565b34801561055a57600080fd5b5061024c6004356116c2565b34801561057257600080fd5b5061024c6116e2565b34801561058757600080fd5b5061024c6116e8565b34801561059c57600080fd5b506105b4600160a060020a03600435166024356116ee565b60408051600160a060020a0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561060b57600080fd5b5061024c600435602435611775565b34801561062657600080fd5b506102946004356117a3565b34801561063e57600080fd5b50610656600160a060020a0360043516602435611842565b60408051600160a060020a0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561069f57600080fd5b5061024c61189f565b3480156106b457600080fd5b50610294600435151561192e565b3480156106ce57600080fd5b5061024c611a37565b3480156106e357600080fd5b50610294600435611a3d565b3480156106fb57600080fd5b5061024c611a64565b34801561071057600080fd5b50610294600160a060020a0360043516602435611a6a565b34801561073457600080fd5b506103ff611b30565b34801561074957600080fd5b5061024c611b39565b34801561075e57600080fd5b50610294600435611b3f565b34801561077657600080fd5b5061024c611d79565b34801561078b57600080fd5b5061024c611d7f565b3480156107a057600080fd5b5061024c600435611d85565b600554600160a060020a031681565b60136020526000908152604090205481565b600c5481565b600054600160a060020a03163314610837576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b60018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b600054600160a060020a031633146108fc576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b60035460ff16151581151514156109125761096b565b6003805460ff1916821515179081905560ff161561092f57426002555b6003546040805160ff90921615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59181900360200190a15b50565b60105481565b600061097e612b15565b6109888484611e12565b905061099381611f1e565b91505b5092915050565b606060008060606000606060008094506012600089600160a060020a0316600160a060020a03168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a635760008481526020908190206040805160c081018252600686029092018054600160a060020a031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a083015290835290920191016109f2565b505050509350600092505b8351831015610ae3578383815181101515610a8557fe5b9060200190602002015160a0015160001415610ad8578383815181101515610aa957fe5b90602001906020020151608001518686815481101515610ac557fe5b6000918252602090912001556001909401935b600190920191610a6e565b84604051908082528060200260200182016040528015610b0d578160200160208202803883390190505b509150600090505b84811015610b56578581815481101515610b2b57fe5b90600052602060002001548282815181101515610b4457fe5b60209081029091010152600101610b15565b509695505050505050565b60095481565b60115481565b600054600160a060020a03163314610bd1576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610c64576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b600a8190556040805182815290517fbb72ce8874020b3b98429d653df927cac6618ac1932384b1446bf04bf9a1b7e59181900360200190a150565b600054600160a060020a03163314610d03576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b600b8190556040805182815290517f8640e538c9503bd8d11554fc26280efe867c12195c0eee0aeede5f4a8d5288399181900360200190a150565b600154600160a060020a031681565b60035460ff1681565b60008054600160a060020a03163314610dbb576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b506103e8808210610e3c576040805160e560020a62461bcd02815260206004820152602560248201527f4f776e65722063616e6e6f742073657420686967686572207468616e2048415260448201527f445f434150000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600c8290556040805183815290517f59822dc2d999f6f0618e8b0db5cfc8496084574c769b09609d9b5f4394a310b69181900360200190a15050565b600054600160a060020a03163314610edc576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b6301e133808111610f5d576040805160e560020a62461bcd02815260206004820152603760248201527f496e74657265737420726174652063616e6e6f74206265206c6573732074686160448201527f7420746865205345434f4e44535f494e5f415f59454152000000000000000000606482015290519081900360840190fd5b7384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610fa457600080fd5b505af4158015610fb8573d6000803e3d6000fd5b505050506040513d6020811015610fce57600080fd5b505181111561104d576040805160e560020a62461bcd02815260206004820152602560248201527f496e7465726573742063616e6e6f74206265206d6f7265207468616e2031303060448201527f2520415052000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6007819055611066816301e1338063ffffffff611f3916565b60085560075460408051918252517fa90e14be5aa57b910aa6dc16c31ff1b5cda380ae25a793b0d3f74df6131a7d749181900360200190a150565b6000806110ac612b15565b60035460ff161561112d576040805160e560020a62461bcd02815260206004820152603c60248201527f5468697320616374696f6e2063616e6e6f7420626520706572666f726d65642060448201527f7768696c652074686520636f6e74726163742069732070617573656400000000606482015290519081900360840190fd5b6004805460010190819055600b543410156111b8576040805160e560020a62461bcd02815260206004820152603e60248201527f4e6f7420656e6f7567682045544820746f206372656174652074686973206c6f60448201527f616e2e20506c656173652073656520746865206d696e4c6f616e53697a650000606482015290519081900360840190fd5b600d5460ff1615611213576040805160e560020a62461bcd02815260206004820152601e60248201527f4c6f616e7320617265206e6f77206265696e67206c6971756964617465640000604482015290519081900360640190fd5b600c5433600090815260126020526040902054106112a1576040805160e560020a62461bcd02815260206004820152602260248201527f45616368206163636f756e74206973206c696d74656420746f203530206c6f6160448201527f6e73000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6112aa346116c2565b9250600a546112c484600f54611fa790919063ffffffff16565b1061133e576040805160e560020a62461bcd028152602060048201526024808201527f4c6f616e20416d6f756e7420657863656564732074686520737570706c79206360448201527f61702e2000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611346612004565b6040805160c08101825233808252346020808401918252838501898152426060860190815260808601888152600060a0880181815296815260128552978820805460018082018355918a52949098208751600690950201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039095169490941784559351968301969096555160028201559351600385015551600484015551600590920191909155600f5491955092506113ff9084611fa7565b600f5561140a61203c565b600160a060020a031663867904b433856040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b5050604080518781526020810187905281513394507f58d170de3a12438e22d81380f353b2fcac86f0a708a1374deaa5c6322a95992f93509081900390910190a260045481146114cf57600080fd5b50505090565b600154600160a060020a0316331461155d576040805160e560020a62461bcd02815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527f2063616e20616363657074206f776e6572736869700000000000000000000000606482015290519081900360840190fd5b60005460015460408051600160a060020a03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a1600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b60075481565b600654600080808080808080808080806115fb61189f565b9b506007549a5060085499506009549850600a549750600b549650600f5495506010549450601154935030600160a060020a0316319250600e549150600d60009054906101000a900460ff169050909192939495969798999a9b9c565b6000611662612b15565b600061166e8585611e12565b915061167982612126565b9050611689826040015182611775565b92505b505092915050565b600061169e612b15565b6116a88484611e12565b905061099381612126565b600054600160a060020a031681565b60006116dc6116cf61189f565b839063ffffffff61216916565b92915050565b60025481565b600e5481565b600080600080600080600080611702612b15565b61170c8b8b611e12565b8051602082015160408301516060840151608085015160a0860151949e50929c50909a50985096509450905061174a8761174583612126565b611775565b925061176561175882611f1e565b849063ffffffff611fa716565b9150509295985092959890939650565b600061179c61178f8360085461219590919063ffffffff16565b849063ffffffff61220e16565b9392505050565b600054600160a060020a03163314611807576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b60098190556040805182815290517fe7bd72551c54d568cd97b00dc52d2787b5c5d4f0070d3582c1e8ba25141f799c9181900360200190a150565b60126020528160005260406000208181548110151561185d57fe5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154600160a060020a03909416965091945092909186565b60006119296006547384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156118ee57600080fd5b505af4158015611902573d6000803e3d6000fd5b505050506040513d602081101561191857600080fd5b50516064029063ffffffff61222316565b905090565b600054600160a060020a03163314611992576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b600e5442116119eb576040805160e560020a62461bcd02815260206004820152601b60248201527f4265666f7265206c69717569646174696f6e20646561646c696e650000000000604482015290519081900360640190fd5b600d805460ff191682151517908190556040805160ff90921615158252517faa52cf15c1fbb778214c66f64726e141551158858d1c06ca0392c6c5869c8567916020908290030190a150565b600b5481565b6004805460010190819055611a523383612238565b6004548114611a6057600080fd5b5050565b60065481565b6004805460010190819055600d5460ff161515611ad1576040805160e560020a62461bcd02815260206004820152601760248201527f4c69717569646174696f6e206973206e6f74206f70656e000000000000000000604482015290519081900360640190fd5b611adb8383612238565b604080518381523360208201528151600160a060020a038616927fde21b2a43b0a2c2109c049fb1e4bb8653fd67d0ffd74fdcb662db381f1eeab38928290030190a26004548114611b2b57600080fd5b505050565b600d5460ff1681565b60085481565b600054600160a060020a03163314611ba3576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b7384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611bea57600080fd5b505af4158015611bfe573d6000803e3d6000fd5b505050506040513d6020811015611c1457600080fd5b50516103e802811115611c71576040805160e560020a62461bcd02815260206004820152600860248201527f546f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b7384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611cb857600080fd5b505af4158015611ccc573d6000803e3d6000fd5b505050506040513d6020811015611ce257600080fd5b5051606402811015611d3e576040805160e560020a62461bcd02815260206004820152600760248201527f546f6f206c6f7700000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60068190556040805182815290517ffb0ebe8c7316e6a251494c38876d13d9a3a029273fce7964c12aa2ce078695309181900360200190a150565b600f5481565b600a5481565b60006116dc6116cf7384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611dd457600080fd5b505af4158015611de8573d6000803e3d6000fd5b505050506040513d6020811015611dfe57600080fd5b50516006549060640263ffffffff61222316565b611e1a612b15565b600160a060020a0383166000908152601260209081526040808320805482518185028101850190935280835260609493849084015b82821015611ec05760008481526020908190206040805160c081018252600686029092018054600160a060020a031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a08301529083529092019101611e4f565b505050509150600090505b815181101561168c57838282815181101515611ee357fe5b90602001906020020151608001511415611f16578181815181101515611f0557fe5b90602001906020020151925061168c565b600101611ecb565b60006116dc600954836040015161220e90919063ffffffff16565b600080808311611f93576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d6174682e646976204572726f720000000000000000000000000000604482015290519081900360640190fd5b8284811515611f9e57fe5b04949350505050565b60008282018381101561179c576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d6174682e616464204572726f720000000000000000000000000000604482015290519081900360640190fd5b60115460009061201b90600163ffffffff611fa716565b60115560105461203290600163ffffffff611fa716565b6010819055905090565b600554604080517fdacb2d010000000000000000000000000000000000000000000000000000000081527f53796e7468734554480000000000000000000000000000000000000000000000600482015260248101829052601960448201527f4d697373696e672053796e74687345544820616464726573730000000000000060648201529051600092600160a060020a03169163dacb2d0191608480830192602092919082900301818787803b1580156120f557600080fd5b505af1158015612109573d6000803e3d6000fd5b505050506040513d602081101561211f57600080fd5b5051905090565b60a081015160009081108061215057606083015161214b90429063ffffffff61283816565b61179c565b606083015160a084015161179c9163ffffffff61283816565b6000670de0b6b3a7640000612184848463ffffffff61219516565b81151561218d57fe5b049392505050565b6000808315156121a85760009150610996565b508282028284828115156121b857fe5b041461179c576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d6174682e6d756c204572726f720000000000000000000000000000604482015290519081900360640190fd5b600061179c8383670de0b6b3a764000061289a565b600061179c8383670de0b6b3a76400006128d9565b612240612b15565b600080600061224f8686611e12565b9350600084608001511115156122af576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f616e20646f6573206e6f7420657869737400000000000000000000000000604482015290519081900360640190fd5b60a084015115612309576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f616e20616c726561647920636c6f73656400000000000000000000000000604482015290519081900360640190fd5b836040015161231661203c565b600160a060020a03166370a08231336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b505050506040513d602081101561239a57600080fd5b50511015612418576040805160e560020a62461bcd02815260206004820152603e60248201527f596f7520646f206e6f742068617665207468652072657175697265642053796e60448201527f74682062616c616e636520746f20636c6f73652074686973206c6f616e2e0000606482015290519081900360840190fd5b6124218461290b565b6040840151600f546124389163ffffffff61283816565b600f55604084015161244d9061174586612126565b925061245884611f1e565b915061246a838363ffffffff611fa716565b905061247461203c565b600160a060020a0316639dc29fac8786604001516040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156124da57600080fd5b505af11580156124ee573d6000803e3d6000fd5b50505050806124fb6129a3565b600160a060020a03166370a08231612511612a5c565b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561255c57600080fd5b505af1158015612570573d6000803e3d6000fd5b505050506040513d602081101561258657600080fd5b50511015612604576040805160e560020a62461bcd02815260206004820152603860248201527f5468652073555344204465706f7420646f6573206e6f74206861766520656e6f60448201527f756768207355534420746f2062757920666f7220666565730000000000000000606482015290519081900360840190fd5b61260c612a5c565b600160a060020a0316631f930115826040518263ffffffff1660e060020a0281526004016020604051808303818588803b15801561264957600080fd5b505af115801561265d573d6000803e3d6000fd5b50505050506040513d602081101561267457600080fd5b5061267f90506129a3565b600160a060020a031663a9059cbb73feefeefeefeefeefeefeefeefeefeefeefeefeef6126aa6129a3565b600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561270457600080fd5b505af1158015612718573d6000803e3d6000fd5b505050506040513d602081101561272e57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561277d57600080fd5b505af1158015612791573d6000803e3d6000fd5b505050506040513d60208110156127a757600080fd5b5050602084015133906108fc906127c4908463ffffffff61283816565b6040518115909202916000818181858888f193505050501580156127ec573d6000803e3d6000fd5b5060408051868152602081018390528151600160a060020a038916927f3cc9f5d298758bad94536f27fa6a3033c2793e0a387a2d78e72550a3b8dacf1e928290030190a2505050505050565b60008083831115612893576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d6174682e737562204572726f720000000000000000000000000000604482015290519081900360640190fd5b5050900390565b600080600a83046128b1868663ffffffff61219516565b8115156128ba57fe5b0490506005600a825b06106128cd57600a015b600a9004949350505050565b6000806128ff846128f387600a870263ffffffff61219516565b9063ffffffff611f3916565b90506005600a826128c3565b8051600160a060020a03166000908152601260205260408120905b8154811015612987578260800151828281548110151561294257fe5b906000526020600020906006020160040154141561297f5742828281548110151561296957fe5b9060005260206000209060060201600501819055505b600101612926565b60115461299b90600163ffffffff61283816565b601155505050565b600554604080517fdacb2d010000000000000000000000000000000000000000000000000000000081527f53796e7468735553440000000000000000000000000000000000000000000000600482015260248101829052601960448201527f4d697373696e672053796e74687355534420616464726573730000000000000060648201529051600092600160a060020a03169163dacb2d0191608480830192602092919082900301818787803b1580156120f557600080fd5b600554604080517fdacb2d010000000000000000000000000000000000000000000000000000000081527f4465706f74000000000000000000000000000000000000000000000000000000600482015260248101829052601560448201527f4d697373696e67204465706f742061646472657373000000000000000000000060648201529051600092600160a060020a03169163dacb2d0191608480830192602092919082900301818787803b1580156120f557600080fd5b60c0604051908101604052806000600160a060020a031681526020016000815260200160008152602001600081526020016000815260200160008152509056004f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e0000000000000000000000000000000000a165627a7a7230582040d2449b2ae046e4dbf8f34e6f0aeaf7b2951fd17bd8c9f8442e0215f43c64950029000000000000000000000000b64ff7a4a33acdf48d97dab0d764afd0f6176882000000000000000000000000fbb6526ed92da8915d4843a86166020d0b7baad0

Deployed Bytecode

0x6080604052600436106101f55763ffffffff60e060020a60003504166304f3bcec81146101fa578063089f7fb41461022b5780631474b2791461025e5780631627540c1461027357806316c38b3c1461029657806323aa7f0f146102b057806327cff2e5146102c55780632f2bf15b146102e9578063361e20861461035a5780634189bb491461036f5780634e543b26146103845780634f069f66146103a557806350e3b2e7146103bd57806353a47bb7146103d55780635c975abb146103ea5780635d1a2229146104135780635f84f3021461042b5780636b2319381461044357806379ba50971461044b5780637c3a00fd146104605780637cc1f8671461047557806389c937de146104f15780638c463869146105155780638da5cb5b146105395780638fdc8f3b1461054e57806391b4ded9146105665780639f7d56881461057b578063a1c5158614610590578063a2e17342146105ff578063a76cdfa51461061a578063aa754a2a14610632578063b410a03414610693578063bb8c6d6c146106a8578063cf09b4ae146106c2578063d05951a0146106d7578063dcaf9c44146106ef578063e220a81114610704578063e3c1e58c14610728578063e40108ed1461073d578063e5829d2014610752578063ee5f3f5c1461076a578063eea8f5da1461077f578063f53dfb8414610794575b600080fd5b34801561020657600080fd5b5061020f6107ac565b60408051600160a060020a039092168252519081900360200190f35b34801561023757600080fd5b5061024c600160a060020a03600435166107bb565b60408051918252519081900360200190f35b34801561026a57600080fd5b5061024c6107cd565b34801561027f57600080fd5b50610294600160a060020a03600435166107d3565b005b3480156102a257600080fd5b506102946004351515610898565b3480156102bc57600080fd5b5061024c61096e565b3480156102d157600080fd5b5061024c600160a060020a0360043516602435610974565b3480156102f557600080fd5b5061030a600160a060020a036004351661099d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561034657818101518382015260200161032e565b505050509050019250505060405180910390f35b34801561036657600080fd5b5061024c610b61565b34801561037b57600080fd5b5061024c610b67565b34801561039057600080fd5b50610294600160a060020a0360043516610b6d565b3480156103b157600080fd5b50610294600435610c00565b3480156103c957600080fd5b50610294600435610c9f565b3480156103e157600080fd5b5061020f610d3e565b3480156103f657600080fd5b506103ff610d4d565b604080519115158252519081900360200190f35b34801561041f57600080fd5b50610294600435610d56565b34801561043757600080fd5b50610294600435610e78565b61024c6110a1565b34801561045757600080fd5b506102946114d5565b34801561046c57600080fd5b5061024c6115dd565b34801561048157600080fd5b5061048a6115e3565b604080519d8e5260208e019c909c528c8c019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e0880152610100870152610120860152610140850152610160840152151561018083015251908190036101a00190f35b3480156104fd57600080fd5b5061024c600160a060020a0360043516602435611658565b34801561052157600080fd5b5061024c600160a060020a0360043516602435611694565b34801561054557600080fd5b5061020f6116b3565b34801561055a57600080fd5b5061024c6004356116c2565b34801561057257600080fd5b5061024c6116e2565b34801561058757600080fd5b5061024c6116e8565b34801561059c57600080fd5b506105b4600160a060020a03600435166024356116ee565b60408051600160a060020a0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561060b57600080fd5b5061024c600435602435611775565b34801561062657600080fd5b506102946004356117a3565b34801561063e57600080fd5b50610656600160a060020a0360043516602435611842565b60408051600160a060020a0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561069f57600080fd5b5061024c61189f565b3480156106b457600080fd5b50610294600435151561192e565b3480156106ce57600080fd5b5061024c611a37565b3480156106e357600080fd5b50610294600435611a3d565b3480156106fb57600080fd5b5061024c611a64565b34801561071057600080fd5b50610294600160a060020a0360043516602435611a6a565b34801561073457600080fd5b506103ff611b30565b34801561074957600080fd5b5061024c611b39565b34801561075e57600080fd5b50610294600435611b3f565b34801561077657600080fd5b5061024c611d79565b34801561078b57600080fd5b5061024c611d7f565b3480156107a057600080fd5b5061024c600435611d85565b600554600160a060020a031681565b60136020526000908152604090205481565b600c5481565b600054600160a060020a03163314610837576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b60018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b600054600160a060020a031633146108fc576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b60035460ff16151581151514156109125761096b565b6003805460ff1916821515179081905560ff161561092f57426002555b6003546040805160ff90921615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59181900360200190a15b50565b60105481565b600061097e612b15565b6109888484611e12565b905061099381611f1e565b91505b5092915050565b606060008060606000606060008094506012600089600160a060020a0316600160a060020a03168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a635760008481526020908190206040805160c081018252600686029092018054600160a060020a031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a083015290835290920191016109f2565b505050509350600092505b8351831015610ae3578383815181101515610a8557fe5b9060200190602002015160a0015160001415610ad8578383815181101515610aa957fe5b90602001906020020151608001518686815481101515610ac557fe5b6000918252602090912001556001909401935b600190920191610a6e565b84604051908082528060200260200182016040528015610b0d578160200160208202803883390190505b509150600090505b84811015610b56578581815481101515610b2b57fe5b90600052602060002001548282815181101515610b4457fe5b60209081029091010152600101610b15565b509695505050505050565b60095481565b60115481565b600054600160a060020a03163314610bd1576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314610c64576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b600a8190556040805182815290517fbb72ce8874020b3b98429d653df927cac6618ac1932384b1446bf04bf9a1b7e59181900360200190a150565b600054600160a060020a03163314610d03576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b600b8190556040805182815290517f8640e538c9503bd8d11554fc26280efe867c12195c0eee0aeede5f4a8d5288399181900360200190a150565b600154600160a060020a031681565b60035460ff1681565b60008054600160a060020a03163314610dbb576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b506103e8808210610e3c576040805160e560020a62461bcd02815260206004820152602560248201527f4f776e65722063616e6e6f742073657420686967686572207468616e2048415260448201527f445f434150000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600c8290556040805183815290517f59822dc2d999f6f0618e8b0db5cfc8496084574c769b09609d9b5f4394a310b69181900360200190a15050565b600054600160a060020a03163314610edc576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b6301e133808111610f5d576040805160e560020a62461bcd02815260206004820152603760248201527f496e74657265737420726174652063616e6e6f74206265206c6573732074686160448201527f7420746865205345434f4e44535f494e5f415f59454152000000000000000000606482015290519081900360840190fd5b7384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b158015610fa457600080fd5b505af4158015610fb8573d6000803e3d6000fd5b505050506040513d6020811015610fce57600080fd5b505181111561104d576040805160e560020a62461bcd02815260206004820152602560248201527f496e7465726573742063616e6e6f74206265206d6f7265207468616e2031303060448201527f2520415052000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6007819055611066816301e1338063ffffffff611f3916565b60085560075460408051918252517fa90e14be5aa57b910aa6dc16c31ff1b5cda380ae25a793b0d3f74df6131a7d749181900360200190a150565b6000806110ac612b15565b60035460ff161561112d576040805160e560020a62461bcd02815260206004820152603c60248201527f5468697320616374696f6e2063616e6e6f7420626520706572666f726d65642060448201527f7768696c652074686520636f6e74726163742069732070617573656400000000606482015290519081900360840190fd5b6004805460010190819055600b543410156111b8576040805160e560020a62461bcd02815260206004820152603e60248201527f4e6f7420656e6f7567682045544820746f206372656174652074686973206c6f60448201527f616e2e20506c656173652073656520746865206d696e4c6f616e53697a650000606482015290519081900360840190fd5b600d5460ff1615611213576040805160e560020a62461bcd02815260206004820152601e60248201527f4c6f616e7320617265206e6f77206265696e67206c6971756964617465640000604482015290519081900360640190fd5b600c5433600090815260126020526040902054106112a1576040805160e560020a62461bcd02815260206004820152602260248201527f45616368206163636f756e74206973206c696d74656420746f203530206c6f6160448201527f6e73000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6112aa346116c2565b9250600a546112c484600f54611fa790919063ffffffff16565b1061133e576040805160e560020a62461bcd028152602060048201526024808201527f4c6f616e20416d6f756e7420657863656564732074686520737570706c79206360448201527f61702e2000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611346612004565b6040805160c08101825233808252346020808401918252838501898152426060860190815260808601888152600060a0880181815296815260128552978820805460018082018355918a52949098208751600690950201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039095169490941784559351968301969096555160028201559351600385015551600484015551600590920191909155600f5491955092506113ff9084611fa7565b600f5561140a61203c565b600160a060020a031663867904b433856040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b5050604080518781526020810187905281513394507f58d170de3a12438e22d81380f353b2fcac86f0a708a1374deaa5c6322a95992f93509081900390910190a260045481146114cf57600080fd5b50505090565b600154600160a060020a0316331461155d576040805160e560020a62461bcd02815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527f2063616e20616363657074206f776e6572736869700000000000000000000000606482015290519081900360840190fd5b60005460015460408051600160a060020a03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a1600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b60075481565b600654600080808080808080808080806115fb61189f565b9b506007549a5060085499506009549850600a549750600b549650600f5495506010549450601154935030600160a060020a0316319250600e549150600d60009054906101000a900460ff169050909192939495969798999a9b9c565b6000611662612b15565b600061166e8585611e12565b915061167982612126565b9050611689826040015182611775565b92505b505092915050565b600061169e612b15565b6116a88484611e12565b905061099381612126565b600054600160a060020a031681565b60006116dc6116cf61189f565b839063ffffffff61216916565b92915050565b60025481565b600e5481565b600080600080600080600080611702612b15565b61170c8b8b611e12565b8051602082015160408301516060840151608085015160a0860151949e50929c50909a50985096509450905061174a8761174583612126565b611775565b925061176561175882611f1e565b849063ffffffff611fa716565b9150509295985092959890939650565b600061179c61178f8360085461219590919063ffffffff16565b849063ffffffff61220e16565b9392505050565b600054600160a060020a03163314611807576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b60098190556040805182815290517fe7bd72551c54d568cd97b00dc52d2787b5c5d4f0070d3582c1e8ba25141f799c9181900360200190a150565b60126020528160005260406000208181548110151561185d57fe5b6000918252602090912060069091020180546001820154600283015460038401546004850154600590950154600160a060020a03909416965091945092909186565b60006119296006547384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b1580156118ee57600080fd5b505af4158015611902573d6000803e3d6000fd5b505050506040513d602081101561191857600080fd5b50516064029063ffffffff61222316565b905090565b600054600160a060020a03163314611992576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b600e5442116119eb576040805160e560020a62461bcd02815260206004820152601b60248201527f4265666f7265206c69717569646174696f6e20646561646c696e650000000000604482015290519081900360640190fd5b600d805460ff191682151517908190556040805160ff90921615158252517faa52cf15c1fbb778214c66f64726e141551158858d1c06ca0392c6c5869c8567916020908290030190a150565b600b5481565b6004805460010190819055611a523383612238565b6004548114611a6057600080fd5b5050565b60065481565b6004805460010190819055600d5460ff161515611ad1576040805160e560020a62461bcd02815260206004820152601760248201527f4c69717569646174696f6e206973206e6f74206f70656e000000000000000000604482015290519081900360640190fd5b611adb8383612238565b604080518381523360208201528151600160a060020a038616927fde21b2a43b0a2c2109c049fb1e4bb8653fd67d0ffd74fdcb662db381f1eeab38928290030190a26004548114611b2b57600080fd5b505050565b600d5460ff1681565b60085481565b600054600160a060020a03163314611ba3576040805160e560020a62461bcd02815260206004820152602f6024820152600080516020612b568339815191526044820152600080516020612b76833981519152606482015290519081900360840190fd5b7384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611bea57600080fd5b505af4158015611bfe573d6000803e3d6000fd5b505050506040513d6020811015611c1457600080fd5b50516103e802811115611c71576040805160e560020a62461bcd02815260206004820152600860248201527f546f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b7384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611cb857600080fd5b505af4158015611ccc573d6000803e3d6000fd5b505050506040513d6020811015611ce257600080fd5b5051606402811015611d3e576040805160e560020a62461bcd02815260206004820152600760248201527f546f6f206c6f7700000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60068190556040805182815290517ffb0ebe8c7316e6a251494c38876d13d9a3a029273fce7964c12aa2ce078695309181900360200190a150565b600f5481565b600a5481565b60006116dc6116cf7384d626b2bb4d0f064067e4bf80fce7055d8f3e7b63907af6c06040518163ffffffff1660e060020a02815260040160206040518083038186803b158015611dd457600080fd5b505af4158015611de8573d6000803e3d6000fd5b505050506040513d6020811015611dfe57600080fd5b50516006549060640263ffffffff61222316565b611e1a612b15565b600160a060020a0383166000908152601260209081526040808320805482518185028101850190935280835260609493849084015b82821015611ec05760008481526020908190206040805160c081018252600686029092018054600160a060020a031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a08301529083529092019101611e4f565b505050509150600090505b815181101561168c57838282815181101515611ee357fe5b90602001906020020151608001511415611f16578181815181101515611f0557fe5b90602001906020020151925061168c565b600101611ecb565b60006116dc600954836040015161220e90919063ffffffff16565b600080808311611f93576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d6174682e646976204572726f720000000000000000000000000000604482015290519081900360640190fd5b8284811515611f9e57fe5b04949350505050565b60008282018381101561179c576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d6174682e616464204572726f720000000000000000000000000000604482015290519081900360640190fd5b60115460009061201b90600163ffffffff611fa716565b60115560105461203290600163ffffffff611fa716565b6010819055905090565b600554604080517fdacb2d010000000000000000000000000000000000000000000000000000000081527f53796e7468734554480000000000000000000000000000000000000000000000600482015260248101829052601960448201527f4d697373696e672053796e74687345544820616464726573730000000000000060648201529051600092600160a060020a03169163dacb2d0191608480830192602092919082900301818787803b1580156120f557600080fd5b505af1158015612109573d6000803e3d6000fd5b505050506040513d602081101561211f57600080fd5b5051905090565b60a081015160009081108061215057606083015161214b90429063ffffffff61283816565b61179c565b606083015160a084015161179c9163ffffffff61283816565b6000670de0b6b3a7640000612184848463ffffffff61219516565b81151561218d57fe5b049392505050565b6000808315156121a85760009150610996565b508282028284828115156121b857fe5b041461179c576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d6174682e6d756c204572726f720000000000000000000000000000604482015290519081900360640190fd5b600061179c8383670de0b6b3a764000061289a565b600061179c8383670de0b6b3a76400006128d9565b612240612b15565b600080600061224f8686611e12565b9350600084608001511115156122af576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f616e20646f6573206e6f7420657869737400000000000000000000000000604482015290519081900360640190fd5b60a084015115612309576040805160e560020a62461bcd02815260206004820152601360248201527f4c6f616e20616c726561647920636c6f73656400000000000000000000000000604482015290519081900360640190fd5b836040015161231661203c565b600160a060020a03166370a08231336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b505050506040513d602081101561239a57600080fd5b50511015612418576040805160e560020a62461bcd02815260206004820152603e60248201527f596f7520646f206e6f742068617665207468652072657175697265642053796e60448201527f74682062616c616e636520746f20636c6f73652074686973206c6f616e2e0000606482015290519081900360840190fd5b6124218461290b565b6040840151600f546124389163ffffffff61283816565b600f55604084015161244d9061174586612126565b925061245884611f1e565b915061246a838363ffffffff611fa716565b905061247461203c565b600160a060020a0316639dc29fac8786604001516040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156124da57600080fd5b505af11580156124ee573d6000803e3d6000fd5b50505050806124fb6129a3565b600160a060020a03166370a08231612511612a5c565b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561255c57600080fd5b505af1158015612570573d6000803e3d6000fd5b505050506040513d602081101561258657600080fd5b50511015612604576040805160e560020a62461bcd02815260206004820152603860248201527f5468652073555344204465706f7420646f6573206e6f74206861766520656e6f60448201527f756768207355534420746f2062757920666f7220666565730000000000000000606482015290519081900360840190fd5b61260c612a5c565b600160a060020a0316631f930115826040518263ffffffff1660e060020a0281526004016020604051808303818588803b15801561264957600080fd5b505af115801561265d573d6000803e3d6000fd5b50505050506040513d602081101561267457600080fd5b5061267f90506129a3565b600160a060020a031663a9059cbb73feefeefeefeefeefeefeefeefeefeefeefeefeef6126aa6129a3565b600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561270457600080fd5b505af1158015612718573d6000803e3d6000fd5b505050506040513d602081101561272e57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561277d57600080fd5b505af1158015612791573d6000803e3d6000fd5b505050506040513d60208110156127a757600080fd5b5050602084015133906108fc906127c4908463ffffffff61283816565b6040518115909202916000818181858888f193505050501580156127ec573d6000803e3d6000fd5b5060408051868152602081018390528151600160a060020a038916927f3cc9f5d298758bad94536f27fa6a3033c2793e0a387a2d78e72550a3b8dacf1e928290030190a2505050505050565b60008083831115612893576040805160e560020a62461bcd02815260206004820152601260248201527f536166654d6174682e737562204572726f720000000000000000000000000000604482015290519081900360640190fd5b5050900390565b600080600a83046128b1868663ffffffff61219516565b8115156128ba57fe5b0490506005600a825b06106128cd57600a015b600a9004949350505050565b6000806128ff846128f387600a870263ffffffff61219516565b9063ffffffff611f3916565b90506005600a826128c3565b8051600160a060020a03166000908152601260205260408120905b8154811015612987578260800151828281548110151561294257fe5b906000526020600020906006020160040154141561297f5742828281548110151561296957fe5b9060005260206000209060060201600501819055505b600101612926565b60115461299b90600163ffffffff61283816565b601155505050565b600554604080517fdacb2d010000000000000000000000000000000000000000000000000000000081527f53796e7468735553440000000000000000000000000000000000000000000000600482015260248101829052601960448201527f4d697373696e672053796e74687355534420616464726573730000000000000060648201529051600092600160a060020a03169163dacb2d0191608480830192602092919082900301818787803b1580156120f557600080fd5b600554604080517fdacb2d010000000000000000000000000000000000000000000000000000000081527f4465706f74000000000000000000000000000000000000000000000000000000600482015260248101829052601560448201527f4d697373696e67204465706f742061646472657373000000000000000000000060648201529051600092600160a060020a03169163dacb2d0191608480830192602092919082900301818787803b1580156120f557600080fd5b60c0604051908101604052806000600160a060020a031681526020016000815260200160008152602001600081526020016000815260200160008152509056004f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e0000000000000000000000000000000000a165627a7a7230582040d2449b2ae046e4dbf8f34e6f0aeaf7b2951fd17bd8c9f8442e0215f43c64950029

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

000000000000000000000000b64ff7a4a33acdf48d97dab0d764afd0f6176882000000000000000000000000fbb6526ed92da8915d4843a86166020d0b7baad0

-----Decoded View---------------
Arg [0] : _owner (address): 0xB64fF7a4a33Acdf48d97dab0D764afD0F6176882
Arg [1] : _resolver (address): 0xFbB6526ed92DA8915d4843a86166020d0B7bAAd0

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b64ff7a4a33acdf48d97dab0d764afd0f6176882
Arg [1] : 000000000000000000000000fbb6526ed92da8915d4843a86166020d0b7baad0


Libraries Used


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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