ETH Price: $2,631.66 (+1.69%)

Contract

0x7da47CA0dE0797fFeDfEa9194cAc9A8A5d0cD0CC
 

Overview

ETH Balance

12.249190660836277848 ETH

Eth Value

$32,235.69 (@ $2,631.66/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Safe Transfer Fr...166532142023-02-18 4:40:59721 days ago1676695259IN
0x7da47CA0...A5d0cD0CC
0 ETH0.0004645520.03085283
Withdraw118301652021-02-10 17:40:411459 days ago1612978841IN
0x7da47CA0...A5d0cD0CC
0 ETH0.00916115271
Approve110489432020-10-13 18:33:201579 days ago1602614000IN
0x7da47CA0...A5d0cD0CC
0 ETH0.0008900733
Approve109593212020-09-29 19:47:481593 days ago1601408868IN
0x7da47CA0...A5d0cD0CC
0 ETH0.0024471153
Approve109593002020-09-29 19:44:101593 days ago1601408650IN
0x7da47CA0...A5d0cD0CC
0 ETH0.0030935267
Withdraw99491732020-04-26 16:26:351749 days ago1587918395IN
0x7da47CA0...A5d0cD0CC
0 ETH0.0003955412
Appropriate99490922020-04-26 16:09:591749 days ago1587917399IN
0x7da47CA0...A5d0cD0CC
0.85126572 ETH0.0017129112
Withdraw99447282020-04-25 23:59:331749 days ago1587859173IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000065922
Appropriate99444952020-04-25 23:09:371749 days ago1587856177IN
0x7da47CA0...A5d0cD0CC
0.675 ETH0.000277082
Withdraw99444492020-04-25 22:58:491749 days ago1587855529IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000065922
Appropriate99443882020-04-25 22:44:041749 days ago1587854644IN
0x7da47CA0...A5d0cD0CC
0.54 ETH0.000277082
Withdraw76174282019-04-22 12:32:262119 days ago1555936346IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000036431
Appropriate75941332019-04-18 21:36:162122 days ago1555623376IN
0x7da47CA0...A5d0cD0CC
0.40213111 ETH0.00099576
Withdraw75941302019-04-18 21:35:052122 days ago1555623305IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000036431
Withdraw69912732019-01-01 11:09:342230 days ago1546340974IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000072862
Withdraw69200032018-12-20 9:32:122242 days ago1545298332IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000327879
Appropriate69194732018-12-20 7:15:472242 days ago1545290147IN
0x7da47CA0...A5d0cD0CC
0.54 ETH0.00049923
Withdraw69194462018-12-20 7:08:432242 days ago1545289723IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000127383
Withdraw69194442018-12-20 7:08:152242 days ago1545289695IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000109293
Appropriate69159772018-12-19 16:59:062243 days ago1545238746IN
0x7da47CA0...A5d0cD0CC
0.542877 ETH0.001497629
Withdraw69159682018-12-19 16:56:282243 days ago1545238588IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000327879
Appropriate69045742018-12-17 18:15:092245 days ago1545070509IN
0x7da47CA0...A5d0cD0CC
0.40213111 ETH0.00066384
Withdraw69043502018-12-17 17:18:522245 days ago1545067132IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000382149
Withdraw69043182018-12-17 17:12:312245 days ago1545066751IN
0x7da47CA0...A5d0cD0CC
0 ETH0.000291448
Appropriate69041452018-12-17 16:27:452245 days ago1545064065IN
0x7da47CA0...A5d0cD0CC
0.675 ETH0.000998416
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
118301652021-02-10 17:40:411459 days ago1612978841
0x7da47CA0...A5d0cD0CC
8.2944 ETH
99491732020-04-26 16:26:351749 days ago1587918395
0x7da47CA0...A5d0cD0CC
0.82572775 ETH
99447282020-04-25 23:59:331749 days ago1587859173
0x7da47CA0...A5d0cD0CC
0.65475 ETH
99444492020-04-25 22:58:491749 days ago1587855529
0x7da47CA0...A5d0cD0CC
0.5238 ETH
76174282019-04-22 12:32:262119 days ago1555936346
0x7da47CA0...A5d0cD0CC
0.38604587 ETH
75941302019-04-18 21:35:052122 days ago1555623305
0x7da47CA0...A5d0cD0CC
0.78013436 ETH
69912732019-01-01 11:09:342230 days ago1546340974
0x7da47CA0...A5d0cD0CC
0.2859599 ETH
69200032018-12-20 9:32:122242 days ago1545298332
0x7da47CA0...A5d0cD0CC
0.5238 ETH
69194442018-12-20 7:08:152242 days ago1545289695
0x7da47CA0...A5d0cD0CC
0.52659069 ETH
69159682018-12-19 16:56:282243 days ago1545238588
0x7da47CA0...A5d0cD0CC
0.38604587 ETH
69043182018-12-17 17:12:312245 days ago1545066751
0x7da47CA0...A5d0cD0CC
0.65475 ETH
69041172018-12-17 16:22:462245 days ago1545063766
0x7da47CA0...A5d0cD0CC
0.91263657 ETH
68908562018-12-15 11:32:022247 days ago1544873522
0x7da47CA0...A5d0cD0CC
0.38604587 ETH
68742182018-12-12 17:31:232250 days ago1544635883
0x7da47CA0...A5d0cD0CC
0.57191981 ETH
66451262018-11-05 1:10:012287 days ago1541380201
0x7da47CA0...A5d0cD0CC
0.21182215 ETH
66364652018-11-03 15:02:172289 days ago1541257337
0x7da47CA0...A5d0cD0CC
0.15690529 ETH
66266072018-11-02 0:15:172290 days ago1541117717
0x7da47CA0...A5d0cD0CC
0.21182215 ETH
66237672018-11-01 13:06:052291 days ago1541077565
0x7da47CA0...A5d0cD0CC
0.15690529 ETH
66097952018-10-30 6:06:482293 days ago1540879608
0x7da47CA0...A5d0cD0CC
0.5238 ETH
65891602018-10-26 21:06:242296 days ago1540587984
0x7da47CA0...A5d0cD0CC
0.11622614 ETH
65643162018-10-22 19:48:212301 days ago1540237701
0x7da47CA0...A5d0cD0CC
0.15690529 ETH
65454332018-10-19 17:38:162304 days ago1539970696
0x7da47CA0...A5d0cD0CC
0.02592 ETH
65451002018-10-19 16:20:122304 days ago1539966012
0x7da47CA0...A5d0cD0CC
0.2859599 ETH
65335152018-10-17 18:49:582306 days ago1539802198
0x7da47CA0...A5d0cD0CC
0.32804829 ETH
64224942018-09-29 17:23:092324 days ago1538241789
0x7da47CA0...A5d0cD0CC
0.08609344 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FactbarDeed

Compiler Version
v0.4.23+commit.124ca40d

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-04-30
*/

pragma solidity ^0.4.13;

interface ERC721Metadata {

    /// @dev ERC-165 (draft) interface signature for ERC721
    // bytes4 internal constant INTERFACE_SIGNATURE_ERC721Metadata = // 0x2a786f11
    //     bytes4(keccak256('name()')) ^
    //     bytes4(keccak256('symbol()')) ^
    //     bytes4(keccak256('deedUri(uint256)'));

    /// @notice A descriptive name for a collection of deeds managed by this
    ///  contract
    /// @dev Wallets and exchanges MAY display this to the end user.
    function name() external pure returns (string _name);

    /// @notice An abbreviated name for deeds managed by this contract
    /// @dev Wallets and exchanges MAY display this to the end user.
    function symbol() external pure returns (string _symbol);

    /// @notice A distinct name for a deed managed by this contract
    /// @dev Wallets and exchanges MAY display this to the end user.
    function deedName(uint256 _deedId) external pure returns (string _deedName);

    /// @notice A distinct URI (RFC 3986) for a given token.
    /// @dev If:
    ///  * The URI is a URL
    ///  * The URL is accessible
    ///  * The URL points to a valid JSON file format (ECMA-404 2nd ed.)
    ///  * The JSON base element is an object
    ///  then these names of the base element SHALL have special meaning:
    ///  * "name": A string identifying the item to which `_deedId` grants
    ///    ownership
    ///  * "description": A string detailing the item to which `_deedId` grants
    ///    ownership
    ///  * "image": A URI pointing to a file of image/* mime type representing
    ///    the item to which `_deedId` grants ownership
    ///  Wallets and exchanges MAY display this to the end user.
    ///  Consider making any images at a width between 320 and 1080 pixels and
    ///  aspect ratio between 1.91:1 and 4:5 inclusive.
    function deedUri(uint256 _deedId) external view returns (string _deedUri);
}

contract ReentrancyGuard {

  /**
   * @dev We use a single lock for the whole contract.
   */
  bool private reentrancy_lock = false;

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

}

library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws 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 a / b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

interface ERC721 {

    // COMPLIANCE WITH ERC-165 (DRAFT) /////////////////////////////////////////

    /// @dev ERC-165 (draft) interface signature for itself
    // bytes4 internal constant INTERFACE_SIGNATURE_ERC165 = // 0x01ffc9a7
    //     bytes4(keccak256('supportsInterface(bytes4)'));

    /// @dev ERC-165 (draft) interface signature for ERC721
    // bytes4 internal constant INTERFACE_SIGNATURE_ERC721 = // 0xda671b9b
    //     bytes4(keccak256('ownerOf(uint256)')) ^
    //     bytes4(keccak256('countOfDeeds()')) ^
    //     bytes4(keccak256('countOfDeedsByOwner(address)')) ^
    //     bytes4(keccak256('deedOfOwnerByIndex(address,uint256)')) ^
    //     bytes4(keccak256('approve(address,uint256)')) ^
    //     bytes4(keccak256('takeOwnership(uint256)'));

    /// @notice Query a contract to see if it supports a certain interface
    /// @dev Returns `true` the interface is supported and `false` otherwise,
    ///  returns `true` for INTERFACE_SIGNATURE_ERC165 and
    ///  INTERFACE_SIGNATURE_ERC721, see ERC-165 for other interface signatures.
    function supportsInterface(bytes4 _interfaceID) external pure returns (bool);

    // PUBLIC QUERY FUNCTIONS //////////////////////////////////////////////////

    /// @notice Find the owner of a deed
    /// @param _deedId The identifier for a deed we are inspecting
    /// @dev Deeds assigned to zero address are considered invalid, and
    ///  queries about them do throw.
    /// @return The non-zero address of the owner of deed `_deedId`, or `throw`
    ///  if deed `_deedId` is not tracked by this contract
    function ownerOf(uint256 _deedId) external view returns (address _owner);

    /// @notice Count deeds tracked by this contract
    /// @return A count of valid deeds tracked by this contract, where each one of
    ///  them has an assigned and queryable owner not equal to the zero address
    function countOfDeeds() external view returns (uint256 _count);

    /// @notice Count all deeds assigned to an owner
    /// @dev Throws if `_owner` is the zero address, representing invalid deeds.
    /// @param _owner An address where we are interested in deeds owned by them
    /// @return The number of deeds owned by `_owner`, possibly zero
    function countOfDeedsByOwner(address _owner) external view returns (uint256 _count);

    /// @notice Enumerate deeds assigned to an owner
    /// @dev Throws if `_index` >= `countOfDeedsByOwner(_owner)` or if
    ///  `_owner` is the zero address, representing invalid deeds.
    /// @param _owner An address where we are interested in deeds owned by them
    /// @param _index A counter less than `countOfDeedsByOwner(_owner)`
    /// @return The identifier for the `_index`th deed assigned to `_owner`,
    ///   (sort order not specified)
    function deedOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 _deedId);

    // TRANSFER MECHANISM //////////////////////////////////////////////////////

    /// @dev This event emits when ownership of any deed changes by any
    ///  mechanism. This event emits when deeds are created (`from` == 0) and
    ///  destroyed (`to` == 0). Exception: during contract creation, any
    ///  transfers may occur without emitting `Transfer`. At the time of any transfer,
    ///  the "approved taker" is implicitly reset to the zero address.
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _deedId);

    /// @dev The Approve event emits to log the "approved taker" for a deed -- whether
    ///  set for the first time, reaffirmed by setting the same value, or setting to
    ///  a new value. The "approved taker" is the zero address if nobody can take the
    ///  deed now or it is an address if that address can call `takeOwnership` to attempt
    ///  taking the deed. Any change to the "approved taker" for a deed SHALL cause
    ///  Approve to emit. However, an exception, the Approve event will not emit when
    ///  Transfer emits, this is because Transfer implicitly denotes the "approved taker"
    ///  is reset to the zero address.
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _deedId);

    /// @notice Set the "approved taker" for your deed, or revoke approval by
    ///  setting the zero address. You may `approve` any number of times while
    ///  the deed is assigned to you, only the most recent approval matters. Emits
    ///  an Approval event.
    /// @dev Throws if `msg.sender` does not own deed `_deedId` or if `_to` ==
    ///  `msg.sender` or if `_deedId` is not a valid deed.
    /// @param _deedId The deed for which you are granting approval
    function approve(address _to, uint256 _deedId) external payable;

    /// @notice Become owner of a deed for which you are currently approved
    /// @dev Throws if `msg.sender` is not approved to become the owner of
    ///  `deedId` or if `msg.sender` currently owns `_deedId` or if `_deedId is not a
    ///  valid deed.
    /// @param _deedId The deed that is being transferred
    function takeOwnership(uint256 _deedId) external payable;
}

contract ERC721Deed is ERC721 {
  using SafeMath for uint256;

  // Total amount of deeds
  uint256 private totalDeeds;

  // Mapping from deed ID to owner
  mapping (uint256 => address) private deedOwner;

  // Mapping from deed ID to approved address
  mapping (uint256 => address) private deedApprovedFor;

  // Mapping from owner to list of owned deed IDs
  mapping (address => uint256[]) private ownedDeeds;

  // Mapping from deed ID to index of the owner deeds list
  mapping(uint256 => uint256) private ownedDeedsIndex;

  /**
  * @dev Guarantees msg.sender is owner of the given deed
  * @param _deedId uint256 ID of the deed to validate its ownership belongs to msg.sender
  */
  modifier onlyOwnerOf(uint256 _deedId) {
    require(deedOwner[_deedId] == msg.sender);
    _;
  }

  /**
  * @dev Gets the owner of the specified deed ID
  * @param _deedId uint256 ID of the deed to query the owner of
  * @return owner address currently marked as the owner of the given deed ID
  */
  function ownerOf(uint256 _deedId)
  external view returns (address _owner) {
    require(deedOwner[_deedId] != address(0));
    _owner = deedOwner[_deedId];
  }

  /**
  * @dev Gets the total amount of deeds stored by the contract
  * @return uint256 representing the total amount of deeds
  */
  function countOfDeeds()
  external view returns (uint256) {
    return totalDeeds;
  }

  /**
  * @dev Gets the number of deeds of the specified address
  * @param _owner address to query the number of deeds
  * @return uint256 representing the number of deeds owned by the passed address
  */
  function countOfDeedsByOwner(address _owner)
  external view returns (uint256 _count) {
    require(_owner != address(0));
    _count = ownedDeeds[_owner].length;
  }

  /**
  * @dev Gets the deed ID of the specified address at the specified index
  * @param _owner address for the deed's owner
  * @param _index uint256 for the n-th deed in the list of deeds owned by this owner
  * @return uint256 representing the ID of the deed
  */
  function deedOfOwnerByIndex(address _owner, uint256 _index)
  external view returns (uint256 _deedId) {
    require(_owner != address(0));
    require(_index < ownedDeeds[_owner].length);
    _deedId = ownedDeeds[_owner][_index];
  }

  /**
  * @dev Gets all deed IDs of the specified address
  * @param _owner address for the deed's owner
  * @return uint256[] representing all deed IDs owned by the passed address
  */
  function deedsOf(address _owner)
  external view returns (uint256[] _ownedDeedIds) {
    require(_owner != address(0));
    _ownedDeedIds = ownedDeeds[_owner];
  }

  /**
  * @dev Approves another address to claim for the ownership of the given deed ID
  * @param _to address to be approved for the given deed ID
  * @param _deedId uint256 ID of the deed to be approved
  */
  function approve(address _to, uint256 _deedId)
  external onlyOwnerOf(_deedId) payable {
    require(msg.value == 0);
    require(_to != msg.sender);
    if(_to != address(0) || approvedFor(_deedId) != address(0)) {
      emit Approval(msg.sender, _to, _deedId);
    }
    deedApprovedFor[_deedId] = _to;
  }

  /**
  * @dev Claims the ownership of a given deed ID
  * @param _deedId uint256 ID of the deed being claimed by the msg.sender
  */
  function takeOwnership(uint256 _deedId)
  external payable {
    require(approvedFor(_deedId) == msg.sender);
    clearApprovalAndTransfer(deedOwner[_deedId], msg.sender, _deedId);
  }

  /**
   * @dev Gets the approved address to take ownership of a given deed ID
   * @param _deedId uint256 ID of the deed to query the approval of
   * @return address currently approved to take ownership of the given deed ID
   */
  function approvedFor(uint256 _deedId)
  public view returns (address) {
    return deedApprovedFor[_deedId];
  }

  /**
  * @dev Transfers the ownership of a given deed ID to another address
  * @param _to address to receive the ownership of the given deed ID
  * @param _deedId uint256 ID of the deed to be transferred
  */
  function transfer(address _to, uint256 _deedId)
  public onlyOwnerOf(_deedId) {
    clearApprovalAndTransfer(msg.sender, _to, _deedId);
  }

  /**
  * @dev Mint deed function
  * @param _to The address that will own the minted deed
  */
  function _mint(address _to, uint256 _deedId)
  internal {
    require(_to != address(0));
    addDeed(_to, _deedId);
    emit Transfer(0x0, _to, _deedId);
  }

  /**
  * @dev Burns a specific deed
  * @param _deedId uint256 ID of the deed being burned by the msg.sender
  * Removed because Factbars cannot be destroyed
  */
  // function _burn(uint256 _deedId) onlyOwnerOf(_deedId)
  // internal {
  //   if (approvedFor(_deedId) != 0) {
  //     clearApproval(msg.sender, _deedId);
  //   }
  //   removeDeed(msg.sender, _deedId);
  //   emit Transfer(msg.sender, 0x0, _deedId);
  // }

  /**
  * @dev Internal function to clear current approval and transfer the ownership of a given deed ID
  * @param _from address which you want to send deeds from
  * @param _to address which you want to transfer the deed to
  * @param _deedId uint256 ID of the deed to be transferred
  */
  function clearApprovalAndTransfer(address _from, address _to, uint256 _deedId)
  internal {
    require(_to != address(0));
    require(_to != _from);
    require(deedOwner[_deedId] == _from);

    clearApproval(_from, _deedId);
    removeDeed(_from, _deedId);
    addDeed(_to, _deedId);
    emit Transfer(_from, _to, _deedId);
  }

  /**
  * @dev Internal function to clear current approval of a given deed ID
  * @param _deedId uint256 ID of the deed to be transferred
  */
  function clearApproval(address _owner, uint256 _deedId)
  private {
    require(deedOwner[_deedId] == _owner);
    deedApprovedFor[_deedId] = 0;
    emit Approval(_owner, 0, _deedId);
  }

  /**
  * @dev Internal function to add a deed ID to the list of a given address
  * @param _to address representing the new owner of the given deed ID
  * @param _deedId uint256 ID of the deed to be added to the deeds list of the given address
  */
  function addDeed(address _to, uint256 _deedId)
  private {
    require(deedOwner[_deedId] == address(0));
    deedOwner[_deedId] = _to;
    uint256 length = ownedDeeds[_to].length;
    ownedDeeds[_to].push(_deedId);
    ownedDeedsIndex[_deedId] = length;
    totalDeeds = totalDeeds.add(1);
  }

  /**
  * @dev Internal function to remove a deed ID from the list of a given address
  * @param _from address representing the previous owner of the given deed ID
  * @param _deedId uint256 ID of the deed to be removed from the deeds list of the given address
  */
  function removeDeed(address _from, uint256 _deedId)
  private {
    require(deedOwner[_deedId] == _from);

    uint256 deedIndex = ownedDeedsIndex[_deedId];
    uint256 lastDeedIndex = ownedDeeds[_from].length.sub(1);
    uint256 lastDeed = ownedDeeds[_from][lastDeedIndex];

    deedOwner[_deedId] = 0;
    ownedDeeds[_from][deedIndex] = lastDeed;
    ownedDeeds[_from][lastDeedIndex] = 0;
    // Note that this will handle single-element arrays. In that case, both deedIndex and lastDeedIndex are going to
    // be zero. Then we can make sure that we will remove _deedId from the ownedDeeds list since we are first swapping
    // the lastDeed to the first position, and then dropping the element placed in the last position of the list

    ownedDeeds[_from].length--;
    ownedDeedsIndex[_deedId] = 0;
    ownedDeedsIndex[lastDeed] = deedIndex;
    totalDeeds = totalDeeds.sub(1);
  }
}

contract PullPayment {
  using SafeMath for uint256;

  mapping(address => uint256) public payments;
  uint256 public totalPayments;

  /**
  * @dev Withdraw accumulated balance, called by payee.
  */
  function withdrawPayments() public {
    address payee = msg.sender;
    uint256 payment = payments[payee];

    require(payment != 0);
    require(address(this).balance >= payment);

    totalPayments = totalPayments.sub(payment);
    payments[payee] = 0;

    payee.transfer(payment);
  }

  /**
  * @dev Called by the payer to store the sent amount as credit to be pulled.
  * @param dest The destination address of the funds.
  * @param amount The amount to transfer.
  */
  function asyncSend(address dest, uint256 amount) internal {
    payments[dest] = payments[dest].add(amount);
    totalPayments = totalPayments.add(amount);
  }
}

contract FactbarDeed is ERC721Deed, Pausable, PullPayment, ReentrancyGuard {

  using SafeMath for uint256;

  /* Events */
  // When a deed is created by the contract owner.
  event Creation(uint256 indexed id, bytes32 indexed name, address factTeam);

  // When a deed is appropriated, the ownership of the deed is transferred to the new owner.
  // The old owner is reimbursed, and he gets the new price minus the transfer fee.
  event Appropriation(uint256 indexed id, address indexed oldOwner, 
  address indexed newOwner, uint256 oldPrice, uint256 newPrice,
  uint256 transferFeeAmount, uint256 excess,  uint256 oldOwnerPaymentAmount );

  // Payments to the deed's fee address via PullPayment are also supported by this contract.
  event Payment(uint256 indexed id, address indexed sender, address 
  indexed factTeam, uint256 amount);

  // Factbars, like facts, cannot be destroyed. So we have removed 
  // all the deletion and desctruction features

  // The data structure of the Factbar deed
  
  struct Factbar {
    bytes32 name;
    address factTeam;
    uint256 price;
    uint256 created;
  }

  // Mapping from _deedId to Factbar
  mapping (uint256 => Factbar) private deeds;

  // Mapping from deed name to boolean indicating if the name is already taken
  mapping (bytes32 => bool) private deedNameExists;

  // Needed to make all deeds discoverable. The length of this array also serves as our deed ID.
  uint256[] private deedIds;

  // These are the admins who have the power to create deeds.
  mapping (address => bool) private admins;

  /* Variables in control of owner */

  // The contract owner can change the initial price of deeds at Creation.
  uint256 private creationPrice = 0.0005 ether; 

  // The contract owner can change the base URL, in case it becomes necessary. It is needed for Metadata.
  string public url = "https://fact-bar.org/facts/";

  // ERC-165 Metadata
  bytes4 internal constant INTERFACE_SIGNATURE_ERC165 = // 0x01ffc9a7
      bytes4(keccak256('supportsInterface(bytes4)'));

  bytes4 internal constant INTERFACE_SIGNATURE_ERC721 = // 0xda671b9b
      bytes4(keccak256('ownerOf(uint256)')) ^
      bytes4(keccak256('countOfDeeds()')) ^
      bytes4(keccak256('countOfDeedsByOwner(address)')) ^
      bytes4(keccak256('deedOfOwnerByIndex(address,uint256)')) ^
      bytes4(keccak256('approve(address,uint256)')) ^
      bytes4(keccak256('takeOwnership(uint256)'));

  bytes4 internal constant INTERFACE_SIGNATURE_ERC721Metadata = // 0x2a786f11
      bytes4(keccak256('name()')) ^
      bytes4(keccak256('symbol()')) ^
      bytes4(keccak256('deedUri(uint256)'));


  function FactbarDeed() public {}

  // payable removed from fallback function following audit
  function() public {}

  modifier onlyExistingNames(uint256 _deedId) {
    require(deedNameExists[deeds[_deedId].name]);
    _;
  }

  modifier noExistingNames(bytes32 _name) {
    require(!deedNameExists[_name]);
    _;
  }
  
  modifier onlyAdmins() {
    require(admins[msg.sender]);
    _;
  }


   /* ERC721Metadata */

  function name()
  external pure returns (string) {
    return "Factbar";
  }

  function symbol()
  external pure returns (string) {
    return "FTBR";
  }

  function supportsInterface(bytes4 _interfaceID)
  external pure returns (bool) {
    return (
      _interfaceID == INTERFACE_SIGNATURE_ERC165
      || _interfaceID == INTERFACE_SIGNATURE_ERC721
      || _interfaceID == INTERFACE_SIGNATURE_ERC721Metadata
    );
  }

  function deedUri(uint256 _deedId)
  external view onlyExistingNames(_deedId) returns (string _uri) {
    _uri = _strConcat(url, _bytes32ToString(deeds[_deedId].name));
  }

  function deedName(uint256 _deedId)
  external view onlyExistingNames(_deedId) returns (string _name) {
    _name = _bytes32ToString(deeds[_deedId].name);
  }


  // get pending payments to address, generated from appropriations
  function getPendingPaymentAmount(address _account)
  external view returns (uint256 _balance) {
     uint256 payment = payments[_account];
    _balance = payment;
  }

  // get Ids of all deeds  
  function getDeedIds()
  external view returns (uint256[]) {
    return deedIds;
  }
 
  /// Logic for pricing of deeds
  function nextPriceOf (uint256 _deedId) public view returns (uint256 _nextPrice) {
    return calculateNextPrice(priceOf(_deedId));
  }

  uint256 private increaseLimit1 = 0.02 ether;
  uint256 private increaseLimit2 = 0.5 ether;
  uint256 private increaseLimit3 = 2.0 ether;
  uint256 private increaseLimit4 = 5.0 ether;

  function calculateNextPrice (uint256 _price) public view returns (uint256 _nextPrice) {
    if (_price < increaseLimit1) {
      return _price.mul(200).div(100);
    } else if (_price < increaseLimit2) {
      return _price.mul(135).div(100);
    } else if (_price < increaseLimit3) {
      return _price.mul(125).div(100);
    } else if (_price < increaseLimit4) {
      return _price.mul(117).div(100);
    } else {
      return _price.mul(115).div(100);
    }
  }

  function calculateTransferFee (uint256 _price) public view returns (uint256 _devCut) {
    if (_price < increaseLimit1) {
      return _price.mul(5).div(100); // 5%
    } else if (_price < increaseLimit2) {
      return _price.mul(4).div(100); // 4%
    } else if (_price < increaseLimit3) {
      return _price.mul(3).div(100); // 3%
    } else if (_price < increaseLimit4) {
      return _price.mul(3).div(100); // 3%
    } else {
      return _price.mul(3).div(100); // 3%
    }
  }


  // Forces the transfer of the deed to a new owner, 
  // if a higher price was paid. This functionality can be paused by the owner.
  function appropriate(uint256 _deedId)
  external whenNotPaused nonReentrant payable {

    // Get current price of deed
    uint256 price = priceOf(_deedId);

     // The current owner is forbidden to appropriate himself.
    address oldOwner = this.ownerOf(_deedId);
    address newOwner = msg.sender;
    require(oldOwner != newOwner);
    
    // price must be more than zero
    require(priceOf(_deedId) > 0); 
    
    // offered price must be more than or equal to the current price
    require(msg.value >= price); 

    /// Any over-payment by the buyer will be sent back to him/her
    uint256 excess = msg.value.sub(price);

    // Clear any outstanding approvals and transfer the deed.*/
    clearApprovalAndTransfer(oldOwner, newOwner, _deedId);
    uint256 nextPrice = nextPriceOf(_deedId);
    deeds[_deedId].price = nextPrice;
    
    // transfer fee is calculated
    uint256 transferFee = calculateTransferFee(price);

    /// previous owner gets entire new payment minus the transfer fee
    uint256 oldOwnerPayment = price.sub(transferFee);

    /// using Pullpayment for safety
    asyncSend(factTeamOf(_deedId), transferFee);
    asyncSend(oldOwner, oldOwnerPayment);

    if (excess > 0) {
       asyncSend(newOwner, excess);
    }

    emit Appropriation(_deedId, oldOwner, newOwner, price, nextPrice,
    transferFee, excess, oldOwnerPayment);
  }

  // these events can be turned on to make up for Solidity's horrifying logging situation
  // event logUint(address add, string text, uint256 value);
  // event simpleLogUint(string text, uint256 value);

  // Send a PullPayment.
  function pay(uint256 _deedId)
  external nonReentrant payable {
    address factTeam = factTeamOf(_deedId);
    asyncSend(factTeam, msg.value);
    emit Payment(_deedId, msg.sender, factTeam, msg.value);
  }

  // The owner can only withdraw what has not been assigned to the transfer fee address as PullPayments.
  function withdraw()
  external nonReentrant {
    withdrawPayments();
    if (msg.sender == owner) {
      // The contract's balance MUST stay backing the outstanding withdrawals.
      //  Only the surplus not needed for any backing can be withdrawn by the owner.
      uint256 surplus = address(this).balance.sub(totalPayments);
      if (surplus > 0) {
        owner.transfer(surplus);
      }
    }
  }

  /* Owner Functions */

  // The contract owner creates deeds. Newly created deeds are
  // initialised with a name and a transfer fee address
  // only Admins can create deeds
  function create(bytes32 _name, address _factTeam)
  public onlyAdmins noExistingNames(_name) {
    deedNameExists[_name] = true;
    uint256 deedId = deedIds.length;
    deedIds.push(deedId);
    super._mint(owner, deedId);
    deeds[deedId] = Factbar({
      name: _name,
      factTeam: _factTeam,
      price: creationPrice,
      created: now
      // deleted: 0
    });
    emit Creation(deedId, _name, owner);
  }

  // the owner can add and remove admins as per his/her whim

  function addAdmin(address _admin)  
  public onlyOwner{
    admins[_admin] = true;
  }

  function removeAdmin (address _admin)  
  public onlyOwner{
    delete admins[_admin];
  }

  // the owner can set the creation price 

  function setCreationPrice(uint256 _price)
  public onlyOwner {
    creationPrice = _price;
  }

  function setUrl(string _url)
  public onlyOwner {
    url = _url;
  }

  /* Other publicly available functions */

  // Returns the last paid price for this deed.
  function priceOf(uint256 _deedId)
  public view returns (uint256 _price) {
    _price = deeds[_deedId].price;
  }

  // Returns the current transfer fee address
  function factTeamOf(uint256 _deedId)
  public view returns (address _factTeam) {
    _factTeam = deeds[_deedId].factTeam;
  }


  /* Private helper functions */        

  function _bytes32ToString(bytes32 _bytes32)
  private pure returns (string) {
    bytes memory bytesString = new bytes(32);
    uint charCount = 0;
    for (uint j = 0; j < 32; j++) {
      byte char = byte(bytes32(uint(_bytes32) * 2 ** (8 * j)));
      if (char != 0) {
        bytesString[charCount] = char;
        charCount++;
      }
    }
    bytes memory bytesStringTrimmed = new bytes(charCount);
    for (j = 0; j < charCount; j++) {
      bytesStringTrimmed[j] = bytesString[j];
    }

    return string(bytesStringTrimmed);
  }

  function _strConcat(string _a, string _b)
  private pure returns (string) {
    bytes memory _ba = bytes(_a);
    bytes memory _bb = bytes(_b);
    string memory ab = new string(_ba.length + _bb.length);
    bytes memory bab = bytes(ab);
    uint k = 0;
    for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i];
    for (i = 0; i < _bb.length; i++) bab[k++] = _bb[i];
    return string(bab);
  }

}

// The MIT License (MIT)
// Copyright (c) 2018 Factbar
// Copyright (c) 2016 Smart Contract Solutions, Inc.

// 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 SOFTWARE.

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"totalPayments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_deedId","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"deedName","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_url","type":"string"}],"name":"setUrl","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"deedsOf","outputs":[{"name":"_ownedDeedIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"approvedFor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateTransferFee","outputs":[{"name":"_devCut","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"deedOfOwnerByIndex","outputs":[{"name":"_deedId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"url","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"nextPriceOf","outputs":[{"name":"_nextPrice","type":"uint256"}],"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":"withdrawPayments","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"bytes32"},{"name":"_factTeam","type":"address"}],"name":"create","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"countOfDeedsByOwner","outputs":[{"name":"_count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"getPendingPaymentAmount","outputs":[{"name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_deedId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_price","type":"uint256"}],"name":"setCreationPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"factTeamOf","outputs":[{"name":"_factTeam","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"_price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"deedUri","outputs":[{"name":"_uri","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"pay","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"countOfDeeds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateNextPrice","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"payments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_deedId","type":"uint256"}],"name":"appropriate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDeedIds","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"name","type":"bytes32"},{"indexed":false,"name":"factTeam","type":"address"}],"name":"Creation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"},{"indexed":false,"name":"oldPrice","type":"uint256"},{"indexed":false,"name":"newPrice","type":"uint256"},{"indexed":false,"name":"transferFeeAmount","type":"uint256"},{"indexed":false,"name":"excess","type":"uint256"},{"indexed":false,"name":"oldOwnerPaymentAmount","type":"uint256"}],"name":"Appropriation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":true,"name":"sender","type":"address"},{"indexed":true,"name":"factTeam","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Payment","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_deedId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":true,"name":"_deedId","type":"uint256"}],"name":"Approval","type":"event"}]

6005805460a060020a60ff02191690556008805460ff191690556601c6bf52634000600d5560c0604052601b60808190527f68747470733a2f2f666163742d6261722e6f72672f66616374732f000000000060a09081526200006591600e9190620000c4565b5066470de4df820000600f556706f05b59d3b20000601055671bc16d674ec80000601155674563918244f40000601255348015620000a257600080fd5b5060058054600160a060020a03191633600160a060020a031617905562000169565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200010757805160ff191683800117855562000137565b8280016001018555821562000137579182015b82811115620001375782518255916020019190600101906200011a565b506200014592915062000149565b5090565b6200016691905b8082111562000145576000815560010162000150565b90565b61206b80620001796000396000f3006080604052600436106101d65763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416625b448781146101e557806301ffc9a71461020c57806306fdde0314610242578063095ea7b3146102cc5780631785f53c146102e557806317c35e8814610306578063252498a21461031e57806326d3df61146103775780632a6dd48f146103e857806337800bde1461041c5780633ccfd60b146104345780633f4ba83a14610449578063532709101461045e5780635600f04f146104825780635ba9e48e146104975780635c975abb146104af5780636103d70b146104c45780636352211e146104d9578063663ff5a9146104f157806370480275146105155780638456cb59146105365780638da5cb5b1461054b57806392efd2771461056057806395d89b4114610581578063a283fd0014610596578063a9059cbb146105b7578063a9831437146105db578063ae81a54b146105f3578063b2e6ceeb1461060b578063b9186d7d14610616578063b95d2a531461062e578063c290d69114610646578063c34588ba14610651578063e08503ec14610666578063e2982c211461067e578063f07c44c21461069f578063f2fde38b146106aa578063fcc4a54c146106cb575b3480156101e257600080fd5b50005b3480156101f157600080fd5b506101fa6106e0565b60408051918252519081900360200190f35b34801561021857600080fd5b5061022e600160e060020a0319600435166106e6565b604080519115158252519081900360200190f35b34801561024e57600080fd5b50610257610941565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610291578181015183820152602001610279565b50505050905090810190601f1680156102be5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e3600160a060020a0360043516602435610979565b005b3480156102f157600080fd5b506102e3600160a060020a0360043516610a7a565b34801561031257600080fd5b50610257600435610ab6565b34801561032a57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102e3943694929360249392840191908190840183828082843750949750610b049650505050505050565b34801561038357600080fd5b50610398600160a060020a0360043516610b36565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103d45781810151838201526020016103bc565b505050509050019250505060405180910390f35b3480156103f457600080fd5b50610400600435610bb7565b60408051600160a060020a039092168252519081900360200190f35b34801561042857600080fd5b506101fa600435610bd2565b34801561044057600080fd5b506102e3610c7d565b34801561045557600080fd5b506102e3610d2e565b34801561046a57600080fd5b506101fa600160a060020a0360043516602435610dbb565b34801561048e57600080fd5b50610257610e2d565b3480156104a357600080fd5b506101fa600435610ebb565b3480156104bb57600080fd5b5061022e610ece565b3480156104d057600080fd5b506102e3610eef565b3480156104e557600080fd5b50610400600435610f8b565b3480156104fd57600080fd5b506102e3600435600160a060020a0360243516610fca565b34801561052157600080fd5b506102e3600160a060020a036004351661112e565b34801561054257600080fd5b506102e361116d565b34801561055757600080fd5b50610400611210565b34801561056c57600080fd5b506101fa600160a060020a036004351661121f565b34801561058d57600080fd5b50610257611252565b3480156105a257600080fd5b506101fa600160a060020a0360043516611289565b3480156105c357600080fd5b506102e3600160a060020a03600435166024356112a4565b3480156105e757600080fd5b506102e36004356112d8565b3480156105ff57600080fd5b506104006004356112f8565b6102e3600435611316565b34801561062257600080fd5b506101fa600435611362565b34801561063a57600080fd5b50610257600435611377565b6102e3600435611456565b34801561065d57600080fd5b506101fa6114e5565b34801561067257600080fd5b506101fa6004356114eb565b34801561068a57600080fd5b506101fa600160a060020a0360043516611583565b6102e3600435611595565b3480156106b657600080fd5b506102e3600160a060020a03600435166117af565b3480156106d757600080fd5b50610398611848565b60075481565b604080517f737570706f727473496e7465726661636528627974657334290000000000000081529051908190036019019020600090600160e060020a03198381169116148061088b5750604080517f74616b654f776e6572736869702875696e743235362900000000000000000000815281519081900360160181207f617070726f766528616464726573732c75696e74323536290000000000000000825282519182900360180182207f646565644f664f776e65724279496e64657828616464726573732c75696e743283527f3536290000000000000000000000000000000000000000000000000000000000602084015283519283900360230183207f636f756e744f66446565647342794f776e6572286164647265737329000000008452845193849003601c0184207f636f756e744f66446565647328290000000000000000000000000000000000008552855194859003600e0185207f6f776e65724f662875696e7432353629000000000000000000000000000000008652955194859003601001909420600160e060020a03198881169190961890941818181891909116145b806109395750604080517f646565645572692875696e743235362900000000000000000000000000000000815281519081900360100181207f73796d626f6c2829000000000000000000000000000000000000000000000000825282519182900360080182207f6e616d65282900000000000000000000000000000000000000000000000000008352925191829003600601909120600160e060020a03198581169190931890911891909116145b90505b919050565b60408051808201909152600781527f466163746261720000000000000000000000000000000000000000000000000060208201525b90565b600081815260016020526040902054819033600160a060020a039081169116146109a257600080fd5b34156109ad57600080fd5b33600160a060020a031683600160a060020a0316141515156109ce57600080fd5b600160a060020a0383161515806109f7575060006109eb83610bb7565b600160a060020a031614155b15610a3e578183600160a060020a031633600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b506000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60055433600160a060020a03908116911614610a9557600080fd5b600160a060020a03166000908152600c60205260409020805460ff19169055565b6000818152600960209081526040808320548352600a909152902054606090829060ff161515610ae557600080fd5b600083815260096020526040902054610afd906118a0565b9392505050565b60055433600160a060020a03908116911614610b1f57600080fd5b8051610b3290600e906020840190611f87565b5050565b6060600160a060020a0382161515610b4d57600080fd5b600160a060020a03821660009081526003602090815260409182902080548351818402810184019094528084529091830182828015610bab57602002820191906000526020600020905b815481526020019060010190808311610b97575b50505050509050919050565b600090815260026020526040902054600160a060020a031690565b6000600f54821015610c0757610c006064610bf484600563ffffffff6119e616565b9063ffffffff611a1c16565b905061093c565b601054821015610c2757610c006064610bf484600463ffffffff6119e616565b601154821015610c4757610c006064610bf484600363ffffffff6119e616565b601254821015610c6757610c006064610bf484600363ffffffff6119e616565b610c006064610bf484600363ffffffff6119e616565b60085460009060ff1615610c9057600080fd5b6008805460ff19166001179055610ca5610eef565b60055433600160a060020a0390811691161415610d2157600754610cda90600160a060020a033016319063ffffffff611a3116565b90506000811115610d2157600554604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015610d1f573d6000803e3d6000fd5b505b506008805460ff19169055565b60055433600160a060020a03908116911614610d4957600080fd5b60055474010000000000000000000000000000000000000000900460ff161515610d7257600080fd5b6005805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000600160a060020a0383161515610dd257600080fd5b600160a060020a0383166000908152600360205260409020548210610df657600080fd5b600160a060020a0383166000908152600360205260409020805483908110610e1a57fe5b9060005260206000200154905092915050565b600e805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610eb35780601f10610e8857610100808354040283529160200191610eb3565b820191906000526020600020905b815481529060010190602001808311610e9657829003601f168201915b505050505081565b6000610939610ec983611362565b6114eb565b60055474010000000000000000000000000000000000000000900460ff1681565b33600160a060020a038116600090815260066020526040902054801515610f1557600080fd5b600160a060020a03301631811115610f2c57600080fd5b600754610f3f908263ffffffff611a3116565b600755600160a060020a0382166000818152600660205260408082208290555183156108fc0291849190818181858888f19350505050158015610f86573d6000803e3d6000fd5b505050565b600081815260016020526040812054600160a060020a03161515610fae57600080fd5b50600090815260016020526040902054600160a060020a031690565b600160a060020a0333166000908152600c602052604081205460ff161515610ff157600080fd5b6000838152600a6020526040902054839060ff161561100f57600080fd5b6000848152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9810181905560055490925061107690600160a060020a031683611a43565b60408051608081018252858152600160a060020a038581166020808401918252600d54848601908152426060860190815260008981526009845287902095518655925160018601805473ffffffffffffffffffffffffffffffffffffffff191691861691909117905551600285015590516003909301929092556005548351911681529151869285927fd4f393eb55a2d59d363dabf4450dd6d6ee7a0e87e45369cc8b4baff93a0bd94b92918290030190a350505050565b60055433600160a060020a0390811691161461114957600080fd5b600160a060020a03166000908152600c60205260409020805460ff19166001179055565b60055433600160a060020a0390811691161461118857600080fd5b60055474010000000000000000000000000000000000000000900460ff16156111b057600080fd5b6005805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600554600160a060020a031681565b6000600160a060020a038216151561123657600080fd5b50600160a060020a031660009081526003602052604090205490565b60408051808201909152600481527f4654425200000000000000000000000000000000000000000000000000000000602082015290565b600160a060020a031660009081526006602052604090205490565b600081815260016020526040902054819033600160a060020a039081169116146112cd57600080fd5b610f86338484611a9f565b60055433600160a060020a039081169116146112f357600080fd5b600d55565b600090815260096020526040902060010154600160a060020a031690565b33600160a060020a031661132982610bb7565b600160a060020a03161461133c57600080fd5b60008181526001602052604090205461135f90600160a060020a03163383611a9f565b50565b60009081526009602052604090206002015490565b6000818152600960209081526040808320548352600a909152902054606090829060ff1615156113a657600080fd5b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152610afd93909290918301828280156114335780601f1061140857610100808354040283529160200191611433565b820191906000526020600020905b81548152906001019060200180831161141657829003601f168201915b505050600087815260096020526040902054611451925090506118a0565b611b57565b60085460009060ff161561146957600080fd5b6008805460ff1916600117905561147f826112f8565b905061148b8134611c76565b80600160a060020a031633600160a060020a0316837f1f6e6edd1693869ced14fb8d1968a37850172b44944bcda1a500593f7a3fa276346040518082815260200191505060405180910390a450506008805460ff19169055565b60005490565b6000600f5482101561150d57610c006064610bf48460c863ffffffff6119e616565b60105482101561152d57610c006064610bf484608763ffffffff6119e616565b60115482101561154d57610c006064610bf484607d63ffffffff6119e616565b60125482101561156d57610c006064610bf484607563ffffffff6119e616565b610c006064610bf484607363ffffffff6119e616565b60066020526000908152604090205481565b6000806000806000806000600560149054906101000a900460ff161515156115bc57600080fd5b60085460ff16156115cc57600080fd5b6008805460ff191660011790556115e288611362565b965030600160a060020a0316636352211e896040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561164657600080fd5b505af115801561165a573d6000803e3d6000fd5b505050506040513d602081101561167057600080fd5b50519550339450600160a060020a03808716908616141561169057600080fd5b600061169b89611362565b116116a557600080fd5b348711156116b257600080fd5b6116c2348863ffffffff611a3116565b93506116cf86868a611a9f565b6116d888610ebb565b600089815260096020526040902060020181905592506116f787610bd2565b9150611709878363ffffffff611a3116565b905061171d611717896112f8565b83611c76565b6117278682611c76565b600084111561173a5761173a8585611c76565b604080518881526020810185905280820184905260608101869052608081018390529051600160a060020a0380881692908916918b917f1109cf851d7077ab7bd3aa790c8d85cca0bbdcdd0d7011cc61da9e7700290c3b919081900360a00190a450506008805460ff19169055505050505050565b60055433600160a060020a039081169116146117ca57600080fd5b600160a060020a03811615156117df57600080fd5b600554604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6060600b80548060200260200160405190810160405280929190818152602001828054801561189657602002820191906000526020600020905b815481526020019060010190808311611882575b5050505050905090565b6040805160208082528183019092526060918291600091829182918591908082016104008038833901905050945060009350600092505b602083101561194c576008830260020a870291507fff000000000000000000000000000000000000000000000000000000000000008216156119415781858581518110151561192257fe5b906020010190600160f860020a031916908160001a9053506001909301925b6001909201916118d7565b836040519080825280601f01601f19166020018201604052801561197a578160200160208202803883390190505b509050600092505b838310156119dc57848381518110151561199857fe5b90602001015160f860020a900460f860020a0281848151811015156119b957fe5b906020010190600160f860020a031916908160001a905350600190920191611982565b9695505050505050565b6000808315156119f95760009150611a15565b50828202828482811515611a0957fe5b0414611a1157fe5b8091505b5092915050565b60008183811515611a2957fe5b049392505050565b600082821115611a3d57fe5b50900390565b600160a060020a0382161515611a5857600080fd5b611a628282611cd2565b8082600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600160a060020a0382161515611ab457600080fd5b600160a060020a038281169084161415611acd57600080fd5b600081815260016020526040902054600160a060020a03848116911614611af357600080fd5b611afd8382611d6a565b611b078382611df2565b611b118282611cd2565b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606080606080606060008088955087945084518651016040519080825280601f01601f191660200182016040528015611b9a578160200160208202803883390190505b50935083925060009150600090505b8551811015611c07578581815181101515611bc057fe5b90602001015160f860020a900460f860020a028383806001019450815181101515611be757fe5b906020010190600160f860020a031916908160001a905350600101611ba9565b5060005b8451811015611c69578481815181101515611c2257fe5b90602001015160f860020a900460f860020a028383806001019450815181101515611c4957fe5b906020010190600160f860020a031916908160001a905350600101611c0b565b5090979650505050505050565b600160a060020a038216600090815260066020526040902054611c9f908263ffffffff611f7816565b600160a060020a038316600090815260066020526040902055600754611ccb908263ffffffff611f7816565b6007555050565b600081815260016020526040812054600160a060020a031615611cf457600080fd5b506000818152600160208181526040808420805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038816908117909155845260038252808420805480850182559085528285208101869055858552600490925283208190559154611d6291611f78565b600055505050565b600081815260016020526040902054600160a060020a03838116911614611d9057600080fd5b600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916905551829190600160a060020a038516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45050565b60008181526001602052604081205481908190600160a060020a03868116911614611e1c57600080fd5b600084815260046020908152604080832054600160a060020a0389168452600390925290912054909350611e5790600163ffffffff611a3116565b600160a060020a038616600090815260036020526040902080549193509083908110611e7f57fe5b6000918252602080832090910154868352600182526040808420805473ffffffffffffffffffffffffffffffffffffffff19169055600160a060020a0389168452600390925291208054919250829185908110611ed857fe5b6000918252602080832090910192909255600160a060020a0387168152600390915260408120805484908110611f0a57fe5b6000918252602080832090910192909255600160a060020a0387168152600390915260409020805490611f41906000198301612005565b50600084815260046020526040808220829055828252812084905554611f6e90600163ffffffff611a3116565b6000555050505050565b600082820183811015611a1157fe5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fc857805160ff1916838001178555611ff5565b82800160010185558215611ff5579182015b82811115611ff5578251825591602001919060010190611fda565b50612001929150612025565b5090565b815481835581811115610f8657600083815260209020610f869181019083015b61097691905b80821115612001576000815560010161202b5600a165627a7a72305820e671000a63b4562fd49253ff7f7455f646e42a06fed21a41b4281d417971a65b0029

Deployed Bytecode

0x6080604052600436106101d65763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416625b448781146101e557806301ffc9a71461020c57806306fdde0314610242578063095ea7b3146102cc5780631785f53c146102e557806317c35e8814610306578063252498a21461031e57806326d3df61146103775780632a6dd48f146103e857806337800bde1461041c5780633ccfd60b146104345780633f4ba83a14610449578063532709101461045e5780635600f04f146104825780635ba9e48e146104975780635c975abb146104af5780636103d70b146104c45780636352211e146104d9578063663ff5a9146104f157806370480275146105155780638456cb59146105365780638da5cb5b1461054b57806392efd2771461056057806395d89b4114610581578063a283fd0014610596578063a9059cbb146105b7578063a9831437146105db578063ae81a54b146105f3578063b2e6ceeb1461060b578063b9186d7d14610616578063b95d2a531461062e578063c290d69114610646578063c34588ba14610651578063e08503ec14610666578063e2982c211461067e578063f07c44c21461069f578063f2fde38b146106aa578063fcc4a54c146106cb575b3480156101e257600080fd5b50005b3480156101f157600080fd5b506101fa6106e0565b60408051918252519081900360200190f35b34801561021857600080fd5b5061022e600160e060020a0319600435166106e6565b604080519115158252519081900360200190f35b34801561024e57600080fd5b50610257610941565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610291578181015183820152602001610279565b50505050905090810190601f1680156102be5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e3600160a060020a0360043516602435610979565b005b3480156102f157600080fd5b506102e3600160a060020a0360043516610a7a565b34801561031257600080fd5b50610257600435610ab6565b34801561032a57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102e3943694929360249392840191908190840183828082843750949750610b049650505050505050565b34801561038357600080fd5b50610398600160a060020a0360043516610b36565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103d45781810151838201526020016103bc565b505050509050019250505060405180910390f35b3480156103f457600080fd5b50610400600435610bb7565b60408051600160a060020a039092168252519081900360200190f35b34801561042857600080fd5b506101fa600435610bd2565b34801561044057600080fd5b506102e3610c7d565b34801561045557600080fd5b506102e3610d2e565b34801561046a57600080fd5b506101fa600160a060020a0360043516602435610dbb565b34801561048e57600080fd5b50610257610e2d565b3480156104a357600080fd5b506101fa600435610ebb565b3480156104bb57600080fd5b5061022e610ece565b3480156104d057600080fd5b506102e3610eef565b3480156104e557600080fd5b50610400600435610f8b565b3480156104fd57600080fd5b506102e3600435600160a060020a0360243516610fca565b34801561052157600080fd5b506102e3600160a060020a036004351661112e565b34801561054257600080fd5b506102e361116d565b34801561055757600080fd5b50610400611210565b34801561056c57600080fd5b506101fa600160a060020a036004351661121f565b34801561058d57600080fd5b50610257611252565b3480156105a257600080fd5b506101fa600160a060020a0360043516611289565b3480156105c357600080fd5b506102e3600160a060020a03600435166024356112a4565b3480156105e757600080fd5b506102e36004356112d8565b3480156105ff57600080fd5b506104006004356112f8565b6102e3600435611316565b34801561062257600080fd5b506101fa600435611362565b34801561063a57600080fd5b50610257600435611377565b6102e3600435611456565b34801561065d57600080fd5b506101fa6114e5565b34801561067257600080fd5b506101fa6004356114eb565b34801561068a57600080fd5b506101fa600160a060020a0360043516611583565b6102e3600435611595565b3480156106b657600080fd5b506102e3600160a060020a03600435166117af565b3480156106d757600080fd5b50610398611848565b60075481565b604080517f737570706f727473496e7465726661636528627974657334290000000000000081529051908190036019019020600090600160e060020a03198381169116148061088b5750604080517f74616b654f776e6572736869702875696e743235362900000000000000000000815281519081900360160181207f617070726f766528616464726573732c75696e74323536290000000000000000825282519182900360180182207f646565644f664f776e65724279496e64657828616464726573732c75696e743283527f3536290000000000000000000000000000000000000000000000000000000000602084015283519283900360230183207f636f756e744f66446565647342794f776e6572286164647265737329000000008452845193849003601c0184207f636f756e744f66446565647328290000000000000000000000000000000000008552855194859003600e0185207f6f776e65724f662875696e7432353629000000000000000000000000000000008652955194859003601001909420600160e060020a03198881169190961890941818181891909116145b806109395750604080517f646565645572692875696e743235362900000000000000000000000000000000815281519081900360100181207f73796d626f6c2829000000000000000000000000000000000000000000000000825282519182900360080182207f6e616d65282900000000000000000000000000000000000000000000000000008352925191829003600601909120600160e060020a03198581169190931890911891909116145b90505b919050565b60408051808201909152600781527f466163746261720000000000000000000000000000000000000000000000000060208201525b90565b600081815260016020526040902054819033600160a060020a039081169116146109a257600080fd5b34156109ad57600080fd5b33600160a060020a031683600160a060020a0316141515156109ce57600080fd5b600160a060020a0383161515806109f7575060006109eb83610bb7565b600160a060020a031614155b15610a3e578183600160a060020a031633600160a060020a03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b506000908152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60055433600160a060020a03908116911614610a9557600080fd5b600160a060020a03166000908152600c60205260409020805460ff19169055565b6000818152600960209081526040808320548352600a909152902054606090829060ff161515610ae557600080fd5b600083815260096020526040902054610afd906118a0565b9392505050565b60055433600160a060020a03908116911614610b1f57600080fd5b8051610b3290600e906020840190611f87565b5050565b6060600160a060020a0382161515610b4d57600080fd5b600160a060020a03821660009081526003602090815260409182902080548351818402810184019094528084529091830182828015610bab57602002820191906000526020600020905b815481526020019060010190808311610b97575b50505050509050919050565b600090815260026020526040902054600160a060020a031690565b6000600f54821015610c0757610c006064610bf484600563ffffffff6119e616565b9063ffffffff611a1c16565b905061093c565b601054821015610c2757610c006064610bf484600463ffffffff6119e616565b601154821015610c4757610c006064610bf484600363ffffffff6119e616565b601254821015610c6757610c006064610bf484600363ffffffff6119e616565b610c006064610bf484600363ffffffff6119e616565b60085460009060ff1615610c9057600080fd5b6008805460ff19166001179055610ca5610eef565b60055433600160a060020a0390811691161415610d2157600754610cda90600160a060020a033016319063ffffffff611a3116565b90506000811115610d2157600554604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015610d1f573d6000803e3d6000fd5b505b506008805460ff19169055565b60055433600160a060020a03908116911614610d4957600080fd5b60055474010000000000000000000000000000000000000000900460ff161515610d7257600080fd5b6005805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b6000600160a060020a0383161515610dd257600080fd5b600160a060020a0383166000908152600360205260409020548210610df657600080fd5b600160a060020a0383166000908152600360205260409020805483908110610e1a57fe5b9060005260206000200154905092915050565b600e805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610eb35780601f10610e8857610100808354040283529160200191610eb3565b820191906000526020600020905b815481529060010190602001808311610e9657829003601f168201915b505050505081565b6000610939610ec983611362565b6114eb565b60055474010000000000000000000000000000000000000000900460ff1681565b33600160a060020a038116600090815260066020526040902054801515610f1557600080fd5b600160a060020a03301631811115610f2c57600080fd5b600754610f3f908263ffffffff611a3116565b600755600160a060020a0382166000818152600660205260408082208290555183156108fc0291849190818181858888f19350505050158015610f86573d6000803e3d6000fd5b505050565b600081815260016020526040812054600160a060020a03161515610fae57600080fd5b50600090815260016020526040902054600160a060020a031690565b600160a060020a0333166000908152600c602052604081205460ff161515610ff157600080fd5b6000838152600a6020526040902054839060ff161561100f57600080fd5b6000848152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9810181905560055490925061107690600160a060020a031683611a43565b60408051608081018252858152600160a060020a038581166020808401918252600d54848601908152426060860190815260008981526009845287902095518655925160018601805473ffffffffffffffffffffffffffffffffffffffff191691861691909117905551600285015590516003909301929092556005548351911681529151869285927fd4f393eb55a2d59d363dabf4450dd6d6ee7a0e87e45369cc8b4baff93a0bd94b92918290030190a350505050565b60055433600160a060020a0390811691161461114957600080fd5b600160a060020a03166000908152600c60205260409020805460ff19166001179055565b60055433600160a060020a0390811691161461118857600080fd5b60055474010000000000000000000000000000000000000000900460ff16156111b057600080fd5b6005805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600554600160a060020a031681565b6000600160a060020a038216151561123657600080fd5b50600160a060020a031660009081526003602052604090205490565b60408051808201909152600481527f4654425200000000000000000000000000000000000000000000000000000000602082015290565b600160a060020a031660009081526006602052604090205490565b600081815260016020526040902054819033600160a060020a039081169116146112cd57600080fd5b610f86338484611a9f565b60055433600160a060020a039081169116146112f357600080fd5b600d55565b600090815260096020526040902060010154600160a060020a031690565b33600160a060020a031661132982610bb7565b600160a060020a03161461133c57600080fd5b60008181526001602052604090205461135f90600160a060020a03163383611a9f565b50565b60009081526009602052604090206002015490565b6000818152600960209081526040808320548352600a909152902054606090829060ff1615156113a657600080fd5b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152610afd93909290918301828280156114335780601f1061140857610100808354040283529160200191611433565b820191906000526020600020905b81548152906001019060200180831161141657829003601f168201915b505050600087815260096020526040902054611451925090506118a0565b611b57565b60085460009060ff161561146957600080fd5b6008805460ff1916600117905561147f826112f8565b905061148b8134611c76565b80600160a060020a031633600160a060020a0316837f1f6e6edd1693869ced14fb8d1968a37850172b44944bcda1a500593f7a3fa276346040518082815260200191505060405180910390a450506008805460ff19169055565b60005490565b6000600f5482101561150d57610c006064610bf48460c863ffffffff6119e616565b60105482101561152d57610c006064610bf484608763ffffffff6119e616565b60115482101561154d57610c006064610bf484607d63ffffffff6119e616565b60125482101561156d57610c006064610bf484607563ffffffff6119e616565b610c006064610bf484607363ffffffff6119e616565b60066020526000908152604090205481565b6000806000806000806000600560149054906101000a900460ff161515156115bc57600080fd5b60085460ff16156115cc57600080fd5b6008805460ff191660011790556115e288611362565b965030600160a060020a0316636352211e896040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561164657600080fd5b505af115801561165a573d6000803e3d6000fd5b505050506040513d602081101561167057600080fd5b50519550339450600160a060020a03808716908616141561169057600080fd5b600061169b89611362565b116116a557600080fd5b348711156116b257600080fd5b6116c2348863ffffffff611a3116565b93506116cf86868a611a9f565b6116d888610ebb565b600089815260096020526040902060020181905592506116f787610bd2565b9150611709878363ffffffff611a3116565b905061171d611717896112f8565b83611c76565b6117278682611c76565b600084111561173a5761173a8585611c76565b604080518881526020810185905280820184905260608101869052608081018390529051600160a060020a0380881692908916918b917f1109cf851d7077ab7bd3aa790c8d85cca0bbdcdd0d7011cc61da9e7700290c3b919081900360a00190a450506008805460ff19169055505050505050565b60055433600160a060020a039081169116146117ca57600080fd5b600160a060020a03811615156117df57600080fd5b600554604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6060600b80548060200260200160405190810160405280929190818152602001828054801561189657602002820191906000526020600020905b815481526020019060010190808311611882575b5050505050905090565b6040805160208082528183019092526060918291600091829182918591908082016104008038833901905050945060009350600092505b602083101561194c576008830260020a870291507fff000000000000000000000000000000000000000000000000000000000000008216156119415781858581518110151561192257fe5b906020010190600160f860020a031916908160001a9053506001909301925b6001909201916118d7565b836040519080825280601f01601f19166020018201604052801561197a578160200160208202803883390190505b509050600092505b838310156119dc57848381518110151561199857fe5b90602001015160f860020a900460f860020a0281848151811015156119b957fe5b906020010190600160f860020a031916908160001a905350600190920191611982565b9695505050505050565b6000808315156119f95760009150611a15565b50828202828482811515611a0957fe5b0414611a1157fe5b8091505b5092915050565b60008183811515611a2957fe5b049392505050565b600082821115611a3d57fe5b50900390565b600160a060020a0382161515611a5857600080fd5b611a628282611cd2565b8082600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600160a060020a0382161515611ab457600080fd5b600160a060020a038281169084161415611acd57600080fd5b600081815260016020526040902054600160a060020a03848116911614611af357600080fd5b611afd8382611d6a565b611b078382611df2565b611b118282611cd2565b8082600160a060020a031684600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606080606080606060008088955087945084518651016040519080825280601f01601f191660200182016040528015611b9a578160200160208202803883390190505b50935083925060009150600090505b8551811015611c07578581815181101515611bc057fe5b90602001015160f860020a900460f860020a028383806001019450815181101515611be757fe5b906020010190600160f860020a031916908160001a905350600101611ba9565b5060005b8451811015611c69578481815181101515611c2257fe5b90602001015160f860020a900460f860020a028383806001019450815181101515611c4957fe5b906020010190600160f860020a031916908160001a905350600101611c0b565b5090979650505050505050565b600160a060020a038216600090815260066020526040902054611c9f908263ffffffff611f7816565b600160a060020a038316600090815260066020526040902055600754611ccb908263ffffffff611f7816565b6007555050565b600081815260016020526040812054600160a060020a031615611cf457600080fd5b506000818152600160208181526040808420805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038816908117909155845260038252808420805480850182559085528285208101869055858552600490925283208190559154611d6291611f78565b600055505050565b600081815260016020526040902054600160a060020a03838116911614611d9057600080fd5b600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff1916905551829190600160a060020a038516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45050565b60008181526001602052604081205481908190600160a060020a03868116911614611e1c57600080fd5b600084815260046020908152604080832054600160a060020a0389168452600390925290912054909350611e5790600163ffffffff611a3116565b600160a060020a038616600090815260036020526040902080549193509083908110611e7f57fe5b6000918252602080832090910154868352600182526040808420805473ffffffffffffffffffffffffffffffffffffffff19169055600160a060020a0389168452600390925291208054919250829185908110611ed857fe5b6000918252602080832090910192909255600160a060020a0387168152600390915260408120805484908110611f0a57fe5b6000918252602080832090910192909255600160a060020a0387168152600390915260409020805490611f41906000198301612005565b50600084815260046020526040808220829055828252812084905554611f6e90600163ffffffff611a3116565b6000555050505050565b600082820183811015611a1157fe5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fc857805160ff1916838001178555611ff5565b82800160010185558215611ff5579182015b82811115611ff5578251825591602001919060010190611fda565b50612001929150612025565b5090565b815481835581811115610f8657600083815260209020610f869181019083015b61097691905b80821115612001576000815560010161202b5600a165627a7a72305820e671000a63b4562fd49253ff7f7455f646e42a06fed21a41b4281d417971a65b0029

Swarm Source

bzzr://e671000a63b4562fd49253ff7f7455f646e42a06fed21a41b4281d417971a65b

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.