ETH Price: $2,525.32 (+2.63%)

Contract

0xc1697d340807324200e26e4617Ce9c0070488E23
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Pause124777542021-05-21 12:43:221195 days ago1621601002IN
0xc1697d34...070488E23
0 ETH0.0022008647
Disable Auction124777342021-05-21 12:39:131195 days ago1621600753IN
0xc1697d34...070488E23
0 ETH0.0018050347
Disable Auction124772592021-05-21 10:48:591195 days ago1621594139IN
0xc1697d34...070488E23
0 ETH0.0019202550
Disable Auction124768612021-05-21 9:19:231195 days ago1621588763IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124768602021-05-21 9:19:081195 days ago1621588748IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124768482021-05-21 9:17:281195 days ago1621588648IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124768482021-05-21 9:17:281195 days ago1621588648IN
0xc1697d34...070488E23
0 ETH0.0017276845
Disable Auction124768482021-05-21 9:17:281195 days ago1621588648IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124768482021-05-21 9:17:281195 days ago1621588648IN
0xc1697d34...070488E23
0 ETH0.0017276845
Disable Auction124768482021-05-21 9:17:281195 days ago1621588648IN
0xc1697d34...070488E23
0 ETH0.0015741141
Disable Auction124767912021-05-21 9:03:231195 days ago1621587803IN
0xc1697d34...070488E23
0 ETH0.0017276845
Disable Auction124767852021-05-21 9:02:141195 days ago1621587734IN
0xc1697d34...070488E23
0 ETH0.0017276845
Disable Auction124767822021-05-21 9:01:151195 days ago1621587675IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124767792021-05-21 9:00:051195 days ago1621587605IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124767752021-05-21 8:59:231195 days ago1621587563IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124767662021-05-21 8:58:341195 days ago1621587514IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124767572021-05-21 8:56:011195 days ago1621587361IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124767502021-05-21 8:54:361195 days ago1621587276IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124767392021-05-21 8:53:011195 days ago1621587181IN
0xc1697d34...070488E23
0 ETH0.0017282245
Disable Auction124767262021-05-21 8:50:351195 days ago1621587035IN
0xc1697d34...070488E23
0 ETH0.0017666346
Withdraw Bid121318012021-03-29 3:55:161248 days ago1616990116IN
0xc1697d34...070488E23
0 ETH0.00269121109
Withdraw Bid121318002021-03-29 3:55:111248 days ago1616990111IN
0xc1697d34...070488E23
0 ETH0.00269121109
Withdraw Bid120800422021-03-21 4:34:571256 days ago1616301297IN
0xc1697d34...070488E23
0 ETH0.002321194.01
Withdraw Bid120777732021-03-20 20:05:091257 days ago1616270709IN
0xc1697d34...070488E23
0 ETH0.00311094126
Withdraw Bid118835852021-02-18 22:44:291287 days ago1613688269IN
0xc1697d34...070488E23
0 ETH0.00296526120.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
124777342021-05-21 12:39:131195 days ago1621600753
0xc1697d34...070488E23
0.1 ETH
124772592021-05-21 10:48:591195 days ago1621594139
0xc1697d34...070488E23
2.2 ETH
124768612021-05-21 9:19:231195 days ago1621588763
0xc1697d34...070488E23
0.1 ETH
124768602021-05-21 9:19:081195 days ago1621588748
0xc1697d34...070488E23
0.2 ETH
124768482021-05-21 9:17:281195 days ago1621588648
0xc1697d34...070488E23
0.15 ETH
124768482021-05-21 9:17:281195 days ago1621588648
0xc1697d34...070488E23
0.06 ETH
124768482021-05-21 9:17:281195 days ago1621588648
0xc1697d34...070488E23
0.2 ETH
124768482021-05-21 9:17:281195 days ago1621588648
0xc1697d34...070488E23
0.05 ETH
124768482021-05-21 9:17:281195 days ago1621588648
0xc1697d34...070488E23
0.05 ETH
124767912021-05-21 9:03:231195 days ago1621587803
0xc1697d34...070488E23
0.05 ETH
124767852021-05-21 9:02:141195 days ago1621587734
0xc1697d34...070488E23
0.04 ETH
124767822021-05-21 9:01:151195 days ago1621587675
0xc1697d34...070488E23
0.15 ETH
124767792021-05-21 9:00:051195 days ago1621587605
0xc1697d34...070488E23
0.1 ETH
124767752021-05-21 8:59:231195 days ago1621587563
0xc1697d34...070488E23
0.2 ETH
124767662021-05-21 8:58:341195 days ago1621587514
0xc1697d34...070488E23
0.31 ETH
124767572021-05-21 8:56:011195 days ago1621587361
0xc1697d34...070488E23
0.09 ETH
124767502021-05-21 8:54:361195 days ago1621587276
0xc1697d34...070488E23
0.075 ETH
124767392021-05-21 8:53:011195 days ago1621587181
0xc1697d34...070488E23
0.1 ETH
124767262021-05-21 8:50:351195 days ago1621587035
0xc1697d34...070488E23
0.08 ETH
121318012021-03-29 3:55:161248 days ago1616990116
0xc1697d34...070488E23
0.3 ETH
121318002021-03-29 3:55:111248 days ago1616990111
0xc1697d34...070488E23
0.3 ETH
120800422021-03-21 4:34:571256 days ago1616301297
0xc1697d34...070488E23
0.11 ETH
120777732021-03-20 20:05:091257 days ago1616270709
0xc1697d34...070488E23
0.5 ETH
118835852021-02-18 22:44:291287 days ago1613688269
0xc1697d34...070488E23
0.1 ETH
117155262021-01-24 1:59:201313 days ago1611453560
0xc1697d34...070488E23
0.04 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenMarketplace

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-04-23
*/

// File: openzeppelin-solidity/contracts/access/rbac/Roles.sol

pragma solidity ^0.4.24;


/**
 * @title Roles
 * @author Francisco Giordano (@frangio)
 * @dev Library for managing addresses assigned to a Role.
 * See RBAC.sol for example usage.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an address access to this role
   */
  function add(Role storage _role, address _addr)
    internal
  {
    _role.bearer[_addr] = true;
  }

  /**
   * @dev remove an address' access to this role
   */
  function remove(Role storage _role, address _addr)
    internal
  {
    _role.bearer[_addr] = false;
  }

  /**
   * @dev check if an address has this role
   * // reverts
   */
  function check(Role storage _role, address _addr)
    internal
    view
  {
    require(has(_role, _addr));
  }

  /**
   * @dev check if an address has this role
   * @return bool
   */
  function has(Role storage _role, address _addr)
    internal
    view
    returns (bool)
  {
    return _role.bearer[_addr];
  }
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

pragma solidity ^0.4.24;


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() 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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @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 {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: openzeppelin-solidity/contracts/lifecycle/Pausable.sol

pragma solidity ^0.4.24;



/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
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() public onlyOwner whenNotPaused {
    paused = true;
    emit Pause();
  }

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

// File: openzeppelin-solidity/contracts/access/rbac/RBAC.sol

pragma solidity ^0.4.24;



/**
 * @title RBAC (Role-Based Access Control)
 * @author Matt Condon (@Shrugs)
 * @dev Stores and provides setters and getters for roles and addresses.
 * Supports unlimited numbers of roles and addresses.
 * See //contracts/mocks/RBACMock.sol for an example of usage.
 * This RBAC method uses strings to key roles. It may be beneficial
 * for you to write your own implementation of this interface using Enums or similar.
 */
contract RBAC {
  using Roles for Roles.Role;

  mapping (string => Roles.Role) private roles;

  event RoleAdded(address indexed operator, string role);
  event RoleRemoved(address indexed operator, string role);

  /**
   * @dev reverts if addr does not have role
   * @param _operator address
   * @param _role the name of the role
   * // reverts
   */
  function checkRole(address _operator, string _role)
    public
    view
  {
    roles[_role].check(_operator);
  }

  /**
   * @dev determine if addr has role
   * @param _operator address
   * @param _role the name of the role
   * @return bool
   */
  function hasRole(address _operator, string _role)
    public
    view
    returns (bool)
  {
    return roles[_role].has(_operator);
  }

  /**
   * @dev add a role to an address
   * @param _operator address
   * @param _role the name of the role
   */
  function addRole(address _operator, string _role)
    internal
  {
    roles[_role].add(_operator);
    emit RoleAdded(_operator, _role);
  }

  /**
   * @dev remove a role from an address
   * @param _operator address
   * @param _role the name of the role
   */
  function removeRole(address _operator, string _role)
    internal
  {
    roles[_role].remove(_operator);
    emit RoleRemoved(_operator, _role);
  }

  /**
   * @dev modifier to scope access to a single role (uses msg.sender as addr)
   * @param _role the name of the role
   * // reverts
   */
  modifier onlyRole(string _role)
  {
    checkRole(msg.sender, _role);
    _;
  }

  /**
   * @dev modifier to scope access to a set of roles (uses msg.sender as addr)
   * @param _roles the names of the roles to scope access to
   * // reverts
   *
   * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
   *  see: https://github.com/ethereum/solidity/issues/2467
   */
  // modifier onlyRoles(string[] _roles) {
  //     bool hasAnyRole = false;
  //     for (uint8 i = 0; i < _roles.length; i++) {
  //         if (hasRole(msg.sender, _roles[i])) {
  //             hasAnyRole = true;
  //             break;
  //         }
  //     }

  //     require(hasAnyRole);

  //     _;
  // }
}

// File: openzeppelin-solidity/contracts/access/Whitelist.sol

pragma solidity ^0.4.24;




/**
 * @title Whitelist
 * @dev The Whitelist contract has a whitelist of addresses, and provides basic authorization control functions.
 * This simplifies the implementation of "user permissions".
 */
contract Whitelist is Ownable, RBAC {
  string public constant ROLE_WHITELISTED = "whitelist";

  /**
   * @dev Throws if operator is not whitelisted.
   * @param _operator address
   */
  modifier onlyIfWhitelisted(address _operator) {
    checkRole(_operator, ROLE_WHITELISTED);
    _;
  }

  /**
   * @dev add an address to the whitelist
   * @param _operator address
   * @return true if the address was added to the whitelist, false if the address was already in the whitelist
   */
  function addAddressToWhitelist(address _operator)
    public
    onlyOwner
  {
    addRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev getter to determine if address is in whitelist
   */
  function whitelist(address _operator)
    public
    view
    returns (bool)
  {
    return hasRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev add addresses to the whitelist
   * @param _operators addresses
   * @return true if at least one address was added to the whitelist,
   * false if all addresses were already in the whitelist
   */
  function addAddressesToWhitelist(address[] _operators)
    public
    onlyOwner
  {
    for (uint256 i = 0; i < _operators.length; i++) {
      addAddressToWhitelist(_operators[i]);
    }
  }

  /**
   * @dev remove an address from the whitelist
   * @param _operator address
   * @return true if the address was removed from the whitelist,
   * false if the address wasn't in the whitelist in the first place
   */
  function removeAddressFromWhitelist(address _operator)
    public
    onlyOwner
  {
    removeRole(_operator, ROLE_WHITELISTED);
  }

  /**
   * @dev remove addresses from the whitelist
   * @param _operators addresses
   * @return true if at least one address was removed from the whitelist,
   * false if all addresses weren't in the whitelist in the first place
   */
  function removeAddressesFromWhitelist(address[] _operators)
    public
    onlyOwner
  {
    for (uint256 i = 0; i < _operators.length; i++) {
      removeAddressFromWhitelist(_operators[i]);
    }
  }

}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.4.24;


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

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting '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;
    }

    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 c) {
    c = _a + _b;
    assert(c >= _a);
    return c;
  }
}

// File: contracts/v2/marketplace/ITokenMarketplace.sol

pragma solidity ^0.4.24;

interface ITokenMarketplace {

  event BidPlaced(
    uint256 indexed _tokenId,
    address indexed _currentOwner,
    address indexed _bidder,
    uint256 _amount
  );

  event BidWithdrawn(
    uint256 indexed _tokenId,
    address indexed _bidder
  );

  event BidAccepted(
    uint256 indexed _tokenId,
    address indexed _currentOwner,
    address indexed _bidder,
    uint256 _amount
  );

  event BidRejected(
    uint256 indexed _tokenId,
    address indexed _currentOwner,
    address indexed _bidder,
    uint256 _amount
  );

  event AuctionEnabled(
    uint256 indexed _tokenId,
    address indexed _auctioneer
  );

  event AuctionDisabled(
    uint256 indexed _tokenId,
    address indexed _auctioneer
  );

  function placeBid(uint256 _tokenId) payable external returns (bool success);

  function withdrawBid(uint256 _tokenId) external returns (bool success);

  function acceptBid(uint256 _tokenId) external returns (uint256 tokenId);

  function rejectBid(uint256 _tokenId) external returns (bool success);

  function enableAuction(uint256 _tokenId) external returns (bool success);

  function disableAuction(uint256 _tokenId) external returns (bool success);
}

// File: contracts/v2/marketplace/TokenMarketplace.sol

pragma solidity ^0.4.24;






interface IKODAV2 {
  function ownerOf(uint256 _tokenId) external view returns (address _owner);

  function exists(uint256 _tokenId) external view returns (bool _exists);

  function editionOfTokenId(uint256 _tokenId) external view returns (uint256 tokenId);

  function artistCommission(uint256 _tokenId) external view returns (address _artistAccount, uint256 _artistCommission);

  function editionOptionalCommission(uint256 _tokenId) external view returns (uint256 _rate, address _recipient);

  function safeTransferFrom(address _from, address _to, uint256 _tokenId) external;
}

contract TokenMarketplace is Whitelist, Pausable, ITokenMarketplace {
  using SafeMath for uint256;

  event UpdatePlatformPercentageFee(uint256 _oldPercentage, uint256 _newPercentage);
  event UpdateRoyaltyPercentageFee(uint256 _oldPercentage, uint256 _newPercentage);

  struct Offer {
    address bidder;
    uint256 offer;
  }

  // Min increase in bid amount
  uint256 public minBidAmount = 0.04 ether;

  // Interface into the KODA world
  IKODAV2 public kodaAddress;

  // KO account which can receive commission
  address public koCommissionAccount;

  uint256 public artistRoyaltyPercentage = 50;
  uint256 public platformFeePercentage = 30;

  // Token ID to Offer mapping
  mapping(uint256 => Offer) offers;

  // Explicitly disable sales for specific tokens
  mapping(uint256 => bool) disabledTokens;

  ///////////////
  // Modifiers //
  ///////////////

  modifier onlyWhenOfferOwner(uint256 _tokenId) {
    require(offers[_tokenId].bidder == msg.sender, "Not offer maker");
    _;
  }

  modifier onlyWhenTokenExists(uint256 _tokenId) {
    require(kodaAddress.exists(_tokenId), "Token does not exist");
    _;
  }

  modifier onlyWhenBidOverMinAmount(uint256 _tokenId) {
    require(msg.value >= offers[_tokenId].offer.add(minBidAmount), "Offer not enough");
    _;
  }

  modifier onlyWhenTokenAuctionEnabled(uint256 _tokenId) {
    require(!disabledTokens[_tokenId], "Token not enabled for offers");
    _;
  }

  /////////////////
  // Constructor //
  /////////////////

  // Set the caller as the default KO account
  constructor(IKODAV2 _kodaAddress, address _koCommissionAccount) public {
    kodaAddress = _kodaAddress;
    koCommissionAccount = _koCommissionAccount;
    super.addAddressToWhitelist(msg.sender);
  }

  //////////////////
  // User Actions //
  //////////////////

  function placeBid(uint256 _tokenId)
  public
  payable
  whenNotPaused
  onlyWhenTokenExists(_tokenId)
  onlyWhenBidOverMinAmount(_tokenId)
  onlyWhenTokenAuctionEnabled(_tokenId)
  {
    _refundHighestBidder(_tokenId);

    offers[_tokenId] = Offer(msg.sender, msg.value);

    address currentOwner = kodaAddress.ownerOf(_tokenId);

    emit BidPlaced(_tokenId, currentOwner, msg.sender, msg.value);
  }

  function withdrawBid(uint256 _tokenId)
  public
  whenNotPaused
  onlyWhenTokenExists(_tokenId)
  onlyWhenOfferOwner(_tokenId)
  {
    _refundHighestBidder(_tokenId);

    emit BidWithdrawn(_tokenId, msg.sender);
  }

  function rejectBid(uint256 _tokenId)
  public
  whenNotPaused
  {
    address currentOwner = kodaAddress.ownerOf(_tokenId);
    require(currentOwner == msg.sender, "Not token owner");

    uint256 currentHighestBiddersAmount = offers[_tokenId].offer;
    require(currentHighestBiddersAmount > 0, "No offer open");

    address currentHighestBidder = offers[_tokenId].bidder;

    _refundHighestBidder(_tokenId);

    emit BidRejected(_tokenId, currentOwner, currentHighestBidder, currentHighestBiddersAmount);
  }

  function acceptBid(uint256 _tokenId)
  public
  whenNotPaused
  {
    address currentOwner = kodaAddress.ownerOf(_tokenId);
    require(currentOwner == msg.sender, "Not token owner");

    uint256 winningOffer = offers[_tokenId].offer;
    require(winningOffer > 0, "No offer open");

    address winningBidder = offers[_tokenId].bidder;

    delete offers[_tokenId];

    // Get edition no.
    uint256 editionNumber = kodaAddress.editionOfTokenId(_tokenId);

    _handleFunds(editionNumber, winningOffer, currentOwner);

    kodaAddress.safeTransferFrom(msg.sender, winningBidder, _tokenId);

    emit BidAccepted(_tokenId, currentOwner, winningBidder, winningOffer);

  }

  function _refundHighestBidder(uint256 _tokenId) internal {
    // Get current highest bidder
    address currentHighestBidder = offers[_tokenId].bidder;

    // Get current highest bid amount
    uint256 currentHighestBiddersAmount = offers[_tokenId].offer;

    if (currentHighestBidder != address(0) && currentHighestBiddersAmount > 0) {

      // Clear out highest bidder
      delete offers[_tokenId];

      // Refund it
      currentHighestBidder.transfer(currentHighestBiddersAmount);
    }
  }

  function _handleFunds(uint256 _editionNumber, uint256 _offer, address _currentOwner) internal {

    // Get existing artist commission
    (address artistAccount, uint256 artistCommissionRate) = kodaAddress.artistCommission(_editionNumber);

    // Get existing optional commission
    (uint256 optionalCommissionRate, address optionalCommissionRecipient) = kodaAddress.editionOptionalCommission(_editionNumber);

    _splitFunds(artistAccount, artistCommissionRate, optionalCommissionRecipient, optionalCommissionRate, _offer, _currentOwner);
  }

  function _splitFunds(
    address _artistAccount,
    uint256 _artistCommissionRate,
    address _optionalCommissionRecipient,
    uint256 _optionalCommissionRate,
    uint256 _offer,
    address _currentOwner
  ) internal {

    // Work out total % of royalties to payout = creator royalties + KO commission
    uint256 totalCommissionPercentageToPay = platformFeePercentage.add(artistRoyaltyPercentage);

    // Send current owner majority share of the offer
    uint256 totalToSendToOwner = _offer.sub(
      _offer.div(1000).mul(totalCommissionPercentageToPay)
    );
    _currentOwner.transfer(totalToSendToOwner);

    // Send % to KO
    uint256 koCommission = _offer.div(1000).mul(platformFeePercentage);
    koCommissionAccount.transfer(koCommission);

    // Send to seller minus royalties and commission
    uint256 remainingRoyalties = _offer.sub(koCommission).sub(totalToSendToOwner);

    if (_optionalCommissionRecipient == address(0)) {
      // After KO and Seller - send the rest to the original artist
      _artistAccount.transfer(remainingRoyalties);
    } else {
      _handleOptionalSplits(_artistAccount, _artistCommissionRate, _optionalCommissionRecipient, _optionalCommissionRate, remainingRoyalties);
    }
  }

  function _handleOptionalSplits(
    address _artistAccount,
    uint256 _artistCommissionRate,
    address _optionalCommissionRecipient,
    uint256 _optionalCommissionRate,
    uint256 _remainingRoyalties
  ) internal {
    uint256 _totalCollaboratorsRate = _artistCommissionRate.add(_optionalCommissionRate);
    uint256 _scaledUpCommission = _artistCommissionRate.mul(10 ** 18);

    // work out % of royalties total to split e.g. 43 / 85 = 50.5882353%
    uint256 primaryArtistPercentage = _scaledUpCommission.div(_totalCollaboratorsRate);

    uint256 totalPrimaryRoyaltiesToArtist = _remainingRoyalties.mul(primaryArtistPercentage).div(10 ** 18);
    _artistAccount.transfer(totalPrimaryRoyaltiesToArtist);

    uint256 remainingRoyaltiesToCollaborator = _remainingRoyalties.sub(totalPrimaryRoyaltiesToArtist);
    _optionalCommissionRecipient.transfer(remainingRoyaltiesToCollaborator);
  }

  ///////////////////
  // Query Methods //
  ///////////////////

  function tokenOffer(uint256 _tokenId) external view returns (address _bidder, uint256 _offer, address _owner, bool _enabled, bool _paused) {
    Offer memory offer = offers[_tokenId];
    return (
    offer.bidder,
    offer.offer,
    kodaAddress.ownerOf(_tokenId),
    !disabledTokens[_tokenId],
    paused
    );
  }

  function determineSaleValues(uint256 _tokenId) external view returns (uint256 _sellerTotal, uint256 _platformFee, uint256 _royaltyFee) {
    Offer memory offer = offers[_tokenId];
    uint256 offerValue = offer.offer;
    uint256 fee = offerValue.div(1000).mul(platformFeePercentage);
    uint256 royalties = offerValue.div(1000).mul(artistRoyaltyPercentage);

    return (
    offer.offer.sub(fee).sub(royalties),
    fee,
    royalties
    );
  }

  ///////////////////
  // Admin Actions //
  ///////////////////

  function disableAuction(uint256 _tokenId)
  public
  onlyIfWhitelisted(msg.sender)
  {
    _refundHighestBidder(_tokenId);

    disabledTokens[_tokenId] = true;

    emit AuctionDisabled(_tokenId, msg.sender);
  }

  function enableAuction(uint256 _tokenId)
  public
  onlyIfWhitelisted(msg.sender)
  {
    _refundHighestBidder(_tokenId);

    disabledTokens[_tokenId] = false;

    emit AuctionEnabled(_tokenId, msg.sender);
  }

  function setMinBidAmount(uint256 _minBidAmount) onlyIfWhitelisted(msg.sender) public {
    minBidAmount = _minBidAmount;
  }

  function setKodavV2(IKODAV2 _kodaAddress) onlyIfWhitelisted(msg.sender) public {
    kodaAddress = _kodaAddress;
  }

  function setKoCommissionAccount(address _koCommissionAccount) public onlyIfWhitelisted(msg.sender) {
    require(_koCommissionAccount != address(0), "Invalid address");
    koCommissionAccount = _koCommissionAccount;
  }

  function setArtistRoyaltyPercentage(uint256 _artistRoyaltyPercentage) public onlyIfWhitelisted(msg.sender) {
    emit UpdateRoyaltyPercentageFee(artistRoyaltyPercentage, _artistRoyaltyPercentage);
    artistRoyaltyPercentage = _artistRoyaltyPercentage;
  }

  function setPlatformPercentage(uint256 _platformFeePercentage) public onlyIfWhitelisted(msg.sender) {
    emit UpdatePlatformPercentageFee(platformFeePercentage, _platformFeePercentage);
    platformFeePercentage = _platformFeePercentage;
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"enableAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"withdrawBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_platformFeePercentage","type":"uint256"}],"name":"setPlatformPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_WHITELISTED","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operators","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"determineSaleValues","outputs":[{"name":"_sellerTotal","type":"uint256"},{"name":"_platformFee","type":"uint256"},{"name":"_royaltyFee","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"acceptBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_minBidAmount","type":"uint256"}],"name":"setMinBidAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minBidAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"artistRoyaltyPercentage","outputs":[{"name":"","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":"_tokenId","type":"uint256"}],"name":"rejectBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"koCommissionAccount","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"}],"name":"addAddressToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenOffer","outputs":[{"name":"_bidder","type":"address"},{"name":"_offer","type":"uint256"},{"name":"_owner","type":"address"},{"name":"_enabled","type":"bool"},{"name":"_paused","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_koCommissionAccount","type":"address"}],"name":"setKoCommissionAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_artistRoyaltyPercentage","type":"uint256"}],"name":"setArtistRoyaltyPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"placeBid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"disableAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kodaAddress","type":"address"}],"name":"setKodavV2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"platformFeePercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kodaAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operators","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_kodaAddress","type":"address"},{"name":"_koCommissionAccount","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_oldPercentage","type":"uint256"},{"indexed":false,"name":"_newPercentage","type":"uint256"}],"name":"UpdatePlatformPercentageFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_oldPercentage","type":"uint256"},{"indexed":false,"name":"_newPercentage","type":"uint256"}],"name":"UpdateRoyaltyPercentageFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_currentOwner","type":"address"},{"indexed":true,"name":"_bidder","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"BidPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_bidder","type":"address"}],"name":"BidWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_currentOwner","type":"address"},{"indexed":true,"name":"_bidder","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"BidAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_currentOwner","type":"address"},{"indexed":true,"name":"_bidder","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"BidRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_auctioneer","type":"address"}],"name":"AuctionEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_auctioneer","type":"address"}],"name":"AuctionDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040526002805460ff19169055668e1bc9bf0400006003556032600655601e6007553480156200003057600080fd5b50604051604080620022f78339810160405280516020909101516000805433600160a060020a03199182168117909255600480548216600160a060020a0380871691909117909155600580549092169084161790556200009e90640100000000620000a68102620011a31704565b50506200025c565b600054600160a060020a03163314620000be57600080fd5b6200010e816040805190810160405280600981526020017f77686974656c697374000000000000000000000000000000000000000000000081525062000111640100000000026401000000009004565b50565b6200018d826001836040518082805190602001908083835b602083106200014a5780518252601f19909201916020918201910162000129565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209291505064010000000062000237810262001f071704565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620001f8578181015183820152602001620001de565b50505050905090810190601f168015620002265780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b61208b806200026c6000396000f3006080604052600436106101955763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630872ef6e811461019a5780630988ca8c146101b45780630eaaf4c81461021b57806314d39bad1461023357806318b919e91461024b578063217fe6c6146102d557806324953eaa1461035057806326aa5942146103a5578063286dd3f5146103db5780632b1fd58a146103fc5780633f4ba83a14610414578063417fd6b61461042957806349751788146104415780635c06d0e0146104685780635c975abb1461047d5780636e3341b3146104925780636e93dbdc146104aa578063715018a6146104db5780637b9417c8146104f05780638456cb59146105115780638795dcff146105265780638da5cb5b1461057a578063953e474a1461058f5780639841ee39146105b05780639979ef45146105c85780639b19251a146105d3578063bb435c8d146105f4578063bbee17a31461060c578063cdd78cfc1461062d578063e0758c9d14610642578063e2ec6ec314610657578063f2fde38b146106ac575b600080fd5b3480156101a657600080fd5b506101b26004356106cd565b005b3480156101c057600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101b2958335600160a060020a03169536956044949193909101919081908401838280828437509497506107489650505050505050565b34801561022757600080fd5b506101b26004356107b6565b34801561023f57600080fd5b506101b260043561095a565b34801561025757600080fd5b506102606109cb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029a578181015183820152602001610282565b50505050905090810190601f1680156102c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e157600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261033c958335600160a060020a03169536956044949193909101919081908401838280828437509497506109f09650505050505050565b604080519115158252519081900360200190f35b34801561035c57600080fd5b50604080516020600480358082013583810280860185019096528085526101b295369593946024949385019291829185019084908082843750949750610a659650505050505050565b3480156103b157600080fd5b506103bd600435610ab2565b60408051938452602084019290925282820152519081900360600190f35b3480156103e757600080fd5b506101b2600160a060020a0360043516610b6c565b34801561040857600080fd5b506101b2600435610bb3565b34801561042057600080fd5b506101b2610ebd565b34801561043557600080fd5b506101b2600435610f1a565b34801561044d57600080fd5b50610456610f4e565b60408051918252519081900360200190f35b34801561047457600080fd5b50610456610f54565b34801561048957600080fd5b5061033c610f5a565b34801561049e57600080fd5b506101b2600435610f63565b3480156104b657600080fd5b506104bf611135565b60408051600160a060020a039092168252519081900360200190f35b3480156104e757600080fd5b506101b2611144565b3480156104fc57600080fd5b506101b2600160a060020a03600435166111a3565b34801561051d57600080fd5b506101b26111e7565b34801561053257600080fd5b5061053e600435611246565b60408051600160a060020a0396871681526020810195909552929094168383015215156060830152911515608082015290519081900360a00190f35b34801561058657600080fd5b506104bf61132d565b34801561059b57600080fd5b506101b2600160a060020a036004351661133c565b3480156105bc57600080fd5b506101b26004356113ed565b6101b260043561145e565b3480156105df57600080fd5b5061033c600160a060020a036004351661174c565b34801561060057600080fd5b506101b260043561177b565b34801561061857600080fd5b506101b2600160a060020a03600435166117f9565b34801561063957600080fd5b5061045661184a565b34801561064e57600080fd5b506104bf611850565b34801561066357600080fd5b50604080516020600480358082013583810280860185019096528085526101b29536959394602494938501929182918501908490808284375094975061185f9650505050505050565b3480156106b857600080fd5b506101b2600160a060020a03600435166118ac565b336106fb81604080519081016040528060098152602001600080516020612040833981519152815250610748565b610704826118cc565b600082815260096020526040808220805460ff1916905551339184917fdeb115d202a55795fb5e47cee9ce6c0bd792a016a2d1251f937b1bb24e92332e9190a35050565b6107b2826001836040518082805190602001908083835b6020831061077e5780518252601f19909201916020918201910161075f565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209291505061195e565b5050565b60025460ff16156107c657600080fd5b60048054604080517f4f558e79000000000000000000000000000000000000000000000000000000008152928301849052518392600160a060020a0390921691634f558e799160248083019260209291908290030181600087803b15801561082d57600080fd5b505af1158015610841573d6000803e3d6000fd5b505050506040513d602081101561085757600080fd5b505115156108af576040805160e560020a62461bcd02815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b6000828152600860205260409020548290600160a060020a0316331461091f576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f74206f66666572206d616b65720000000000000000000000000000000000604482015290519081900360640190fd5b610928836118cc565b604051339084907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a90600090a3505050565b3361098881604080519081016040528060098152602001600080516020612040833981519152815250610748565b600754604080519182526020820184905280517feacf709830352fe1a96d6837caea6476163d682a42a64eb621b34d9b901b50009281900390910190a150600755565b6040805180820190915260098152600080516020612040833981519152602082015281565b6000610a5c836001846040518082805190602001908083835b60208310610a285780518252601f199092019160209182019101610a09565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611973565b90505b92915050565b60008054600160a060020a03163314610a7d57600080fd5b5060005b81518110156107b257610aaa8282815181101515610a9b57fe5b90602001906020020151610b6c565b600101610a81565b6000806000610abf612028565b50600084815260086020908152604080832081518083019092528054600160a060020a03168252600101549181018290526007549092908190610b1a90610b0e856103e863ffffffff61199216565b9063ffffffff6119a716565b600654909250610b3690610b0e856103e863ffffffff61199216565b9050610b5f81610b538487602001516119d090919063ffffffff16565b9063ffffffff6119d016565b9891975095509350505050565b600054600160a060020a03163314610b8357600080fd5b610bb0816040805190810160405280600981526020016000805160206120408339815191528152506119e2565b50565b60025460009081908190819060ff1615610bcc57600080fd5b600480546040805160e160020a6331a9108f02815292830188905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b158015610c1b57600080fd5b505af1158015610c2f573d6000803e3d6000fd5b505050506040513d6020811015610c4557600080fd5b50519350600160a060020a0384163314610ca9576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b60008581526008602052604081206001015493508311610d13576040805160e560020a62461bcd02815260206004820152600d60248201527f4e6f206f66666572206f70656e00000000000000000000000000000000000000604482015290519081900360640190fd5b60008581526008602090815260408083208054600160a060020a03198116825560019091018490556004805483517f824eec3b0000000000000000000000000000000000000000000000000000000081529182018b90529251600160a060020a039283169750919092169363824eec3b93602480850194919392918390030190829087803b158015610da457600080fd5b505af1158015610db8573d6000803e3d6000fd5b505050506040513d6020811015610dce57600080fd5b50519050610ddd818486611af3565b60048054604080517f42842e0e0000000000000000000000000000000000000000000000000000000081523393810193909352600160a060020a0385811660248501526044840189905290519116916342842e0e91606480830192600092919082900301818387803b158015610e5257600080fd5b505af1158015610e66573d6000803e3d6000fd5b5050505081600160a060020a031684600160a060020a0316867fe6d56779a392535d3a591e92b65ba36f2ecc424bbf5220d0176a7da29385b504866040518082815260200191505060405180910390a45050505050565b600054600160a060020a03163314610ed457600080fd5b60025460ff161515610ee557600080fd5b6002805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b33610f4881604080519081016040528060098152602001600080516020612040833981519152815250610748565b50600355565b60035481565b60065481565b60025460ff1681565b6002546000908190819060ff1615610f7a57600080fd5b600480546040805160e160020a6331a9108f02815292830187905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b158015610fc957600080fd5b505af1158015610fdd573d6000803e3d6000fd5b505050506040513d6020811015610ff357600080fd5b50519250600160a060020a0383163314611057576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b600084815260086020526040812060010154925082116110c1576040805160e560020a62461bcd02815260206004820152600d60248201527f4e6f206f66666572206f70656e00000000000000000000000000000000000000604482015290519081900360640190fd5b50600083815260086020526040902054600160a060020a03166110e3846118cc565b80600160a060020a031683600160a060020a0316857f6d699e170cc72516120ba19fe48e744504798d1afc2ffb65ff1154a6f4fa4d15856040518082815260200191505060405180910390a450505050565b600554600160a060020a031681565b600054600160a060020a0316331461115b57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b600054600160a060020a031633146111ba57600080fd5b610bb081604080519081016040528060098152602001600080516020612040833981519152815250611c47565b600054600160a060020a031633146111fe57600080fd5b60025460ff161561120e57600080fd5b6002805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6000806000806000611256612028565b506000868152600860209081526040808320815180830183528154600160a060020a0390811680835260019093015482860181905260048054865160e160020a6331a9108f0281529182018f9052955193979496919590921693636352211e936024808501949192918390030190829087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b505050506040513d60208110156112ff57600080fd5b50516000998a526009602052604090992054600254929a9199985060ff908116159750909116945092505050565b600054600160a060020a031681565b3361136a81604080519081016040528060098152602001600080516020612040833981519152815250610748565b600160a060020a03821615156113ca576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b5060058054600160a060020a031916600160a060020a0392909216919091179055565b3361141b81604080519081016040528060098152602001600080516020612040833981519152815250610748565b600654604080519182526020820184905280517f3d843ef224be86afeee7f914f0fa9ddae84d6d9df67ca5edcb781900ee88bff49281900390910190a150600655565b60025460009060ff161561147157600080fd5b60048054604080517f4f558e79000000000000000000000000000000000000000000000000000000008152928301859052518492600160a060020a0390921691634f558e799160248083019260209291908290030181600087803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b505050506040513d602081101561150257600080fd5b5051151561155a576040805160e560020a62461bcd02815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b6003546000848152600860205260409020600101548491611581919063ffffffff611d1916565b3410156115d8576040805160e560020a62461bcd02815260206004820152601060248201527f4f66666572206e6f7420656e6f75676800000000000000000000000000000000604482015290519081900360640190fd5b600084815260096020526040902054849060ff1615611641576040805160e560020a62461bcd02815260206004820152601c60248201527f546f6b656e206e6f7420656e61626c656420666f72206f666665727300000000604482015290519081900360640190fd5b61164a856118cc565b60408051808201825233815234602080830191825260008981526008825284812093518454600160a060020a031916600160a060020a03918216178555925160019094019390935560048054855160e160020a6331a9108f0281529182018b905294519490921693636352211e936024808501948390030190829087803b1580156116d457600080fd5b505af11580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b50516040805134815290519195503391600160a060020a0387169188917f3d87e1d02e187b9fe1095bc12567b7485b6cf54c47eea3dc9b5fd64d03cb67509181900360200190a45050505050565b6000610a5f826040805190810160405280600981526020016000805160206120408339815191528152506109f0565b336117a981604080519081016040528060098152602001600080516020612040833981519152815250610748565b6117b2826118cc565b600082815260096020526040808220805460ff1916600117905551339184917fe0c56951f00a75f5139f9af608a2ae603fe7c340a8f4b4b3125e9a7018041b609190a35050565b3361182781604080519081016040528060098152602001600080516020612040833981519152815250610748565b5060048054600160a060020a031916600160a060020a0392909216919091179055565b60075481565b600454600160a060020a031681565b60008054600160a060020a0316331461187757600080fd5b5060005b81518110156107b2576118a4828281518110151561189557fe5b906020019060200201516111a3565b60010161187b565b600054600160a060020a031633146118c357600080fd5b610bb081611d26565b60008181526008602052604090208054600190910154600160a060020a039091169081158015906118fd5750600081115b15611959576000838152600860205260408082208054600160a060020a031916815560010182905551600160a060020a0384169183156108fc02918491818181858888f19350505050158015611957573d6000803e3d6000fd5b505b505050565b6119688282611973565b15156107b257600080fd5b600160a060020a03166000908152602091909152604090205460ff1690565b6000818381151561199f57fe5b049392505050565b60008215156119b857506000610a5f565b508181028183828115156119c857fe5b0414610a5f57fe5b6000828211156119dc57fe5b50900390565b611a4c826001836040518082805190602001908083835b60208310611a185780518252601f1990920191602091820191016119f9565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611d96565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015611ab5578181015183820152602001611a9d565b50505050905090810190601f168015611ae25780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60048054604080517f32fd84780000000000000000000000000000000000000000000000000000000081529283018690528051600093849384938493600160a060020a03909216926332fd8478926024808301939282900301818787803b158015611b5d57600080fd5b505af1158015611b71573d6000803e3d6000fd5b505050506040513d6040811015611b8757600080fd5b50805160209091015160048054604080517fde56a2450000000000000000000000000000000000000000000000000000000081529283018c90528051949850929650600160a060020a03169263de56a245926024808401939192918290030181600087803b158015611bf857600080fd5b505af1158015611c0c573d6000803e3d6000fd5b505050506040513d6040811015611c2257600080fd5b5080516020909101519092509050611c3e848483858a8a611db8565b50505050505050565b611cb1826001836040518082805190602001908083835b60208310611c7d5780518252601f199092019160209182019101611c5e565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611f07565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898260405180806020018281038252838181518152602001915080519060200190808383600083811015611ab5578181015183820152602001611a9d565b81810182811015610a5f57fe5b600160a060020a0381161515611d3b57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600080600080611dd5600654600754611d1990919063ffffffff16565b9350611dfd611df085610b0e896103e863ffffffff61199216565b879063ffffffff6119d016565b604051909350600160a060020a0386169084156108fc029085906000818181858888f19350505050158015611e36573d6000803e3d6000fd5b50600754611e5090610b0e886103e863ffffffff61199216565b600554604051919350600160a060020a03169083156108fc029084906000818181858888f19350505050158015611e8b573d6000803e3d6000fd5b50611ea083610b53888563ffffffff6119d016565b9050600160a060020a0388161515611eee57604051600160a060020a038b169082156108fc029083906000818181858888f19350505050158015611ee8573d6000803e3d6000fd5b50611efb565b611efb8a8a8a8a85611f2c565b50505050505050505050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600080808080611f42898863ffffffff611d1916565b9450611f5c89670de0b6b3a764000063ffffffff6119a716565b9350611f6e848663ffffffff61199216565b9250611f98670de0b6b3a7640000611f8c888663ffffffff6119a716565b9063ffffffff61199216565b604051909250600160a060020a038b169083156108fc029084906000818181858888f19350505050158015611fd1573d6000803e3d6000fd5b50611fe2868363ffffffff6119d016565b604051909150600160a060020a0389169082156108fc029083906000818181858888f1935050505015801561201b573d6000803e3d6000fd5b5050505050505050505050565b604080518082019091526000808252602082015290560077686974656c6973740000000000000000000000000000000000000000000000a165627a7a723058208d4d7fd32ed4eca24d9a1d29d11672740b9d925a07c7be20199d74510bb6f4840029000000000000000000000000fbeef911dc5821886e1dda71586d90ed28174b7d0000000000000000000000003f8c962eb167ad2f80c72b5f933511ccdf0719d4

Deployed Bytecode

0x6080604052600436106101955763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630872ef6e811461019a5780630988ca8c146101b45780630eaaf4c81461021b57806314d39bad1461023357806318b919e91461024b578063217fe6c6146102d557806324953eaa1461035057806326aa5942146103a5578063286dd3f5146103db5780632b1fd58a146103fc5780633f4ba83a14610414578063417fd6b61461042957806349751788146104415780635c06d0e0146104685780635c975abb1461047d5780636e3341b3146104925780636e93dbdc146104aa578063715018a6146104db5780637b9417c8146104f05780638456cb59146105115780638795dcff146105265780638da5cb5b1461057a578063953e474a1461058f5780639841ee39146105b05780639979ef45146105c85780639b19251a146105d3578063bb435c8d146105f4578063bbee17a31461060c578063cdd78cfc1461062d578063e0758c9d14610642578063e2ec6ec314610657578063f2fde38b146106ac575b600080fd5b3480156101a657600080fd5b506101b26004356106cd565b005b3480156101c057600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101b2958335600160a060020a03169536956044949193909101919081908401838280828437509497506107489650505050505050565b34801561022757600080fd5b506101b26004356107b6565b34801561023f57600080fd5b506101b260043561095a565b34801561025757600080fd5b506102606109cb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029a578181015183820152602001610282565b50505050905090810190601f1680156102c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e157600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261033c958335600160a060020a03169536956044949193909101919081908401838280828437509497506109f09650505050505050565b604080519115158252519081900360200190f35b34801561035c57600080fd5b50604080516020600480358082013583810280860185019096528085526101b295369593946024949385019291829185019084908082843750949750610a659650505050505050565b3480156103b157600080fd5b506103bd600435610ab2565b60408051938452602084019290925282820152519081900360600190f35b3480156103e757600080fd5b506101b2600160a060020a0360043516610b6c565b34801561040857600080fd5b506101b2600435610bb3565b34801561042057600080fd5b506101b2610ebd565b34801561043557600080fd5b506101b2600435610f1a565b34801561044d57600080fd5b50610456610f4e565b60408051918252519081900360200190f35b34801561047457600080fd5b50610456610f54565b34801561048957600080fd5b5061033c610f5a565b34801561049e57600080fd5b506101b2600435610f63565b3480156104b657600080fd5b506104bf611135565b60408051600160a060020a039092168252519081900360200190f35b3480156104e757600080fd5b506101b2611144565b3480156104fc57600080fd5b506101b2600160a060020a03600435166111a3565b34801561051d57600080fd5b506101b26111e7565b34801561053257600080fd5b5061053e600435611246565b60408051600160a060020a0396871681526020810195909552929094168383015215156060830152911515608082015290519081900360a00190f35b34801561058657600080fd5b506104bf61132d565b34801561059b57600080fd5b506101b2600160a060020a036004351661133c565b3480156105bc57600080fd5b506101b26004356113ed565b6101b260043561145e565b3480156105df57600080fd5b5061033c600160a060020a036004351661174c565b34801561060057600080fd5b506101b260043561177b565b34801561061857600080fd5b506101b2600160a060020a03600435166117f9565b34801561063957600080fd5b5061045661184a565b34801561064e57600080fd5b506104bf611850565b34801561066357600080fd5b50604080516020600480358082013583810280860185019096528085526101b29536959394602494938501929182918501908490808284375094975061185f9650505050505050565b3480156106b857600080fd5b506101b2600160a060020a03600435166118ac565b336106fb81604080519081016040528060098152602001600080516020612040833981519152815250610748565b610704826118cc565b600082815260096020526040808220805460ff1916905551339184917fdeb115d202a55795fb5e47cee9ce6c0bd792a016a2d1251f937b1bb24e92332e9190a35050565b6107b2826001836040518082805190602001908083835b6020831061077e5780518252601f19909201916020918201910161075f565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209291505061195e565b5050565b60025460ff16156107c657600080fd5b60048054604080517f4f558e79000000000000000000000000000000000000000000000000000000008152928301849052518392600160a060020a0390921691634f558e799160248083019260209291908290030181600087803b15801561082d57600080fd5b505af1158015610841573d6000803e3d6000fd5b505050506040513d602081101561085757600080fd5b505115156108af576040805160e560020a62461bcd02815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b6000828152600860205260409020548290600160a060020a0316331461091f576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f74206f66666572206d616b65720000000000000000000000000000000000604482015290519081900360640190fd5b610928836118cc565b604051339084907f5e9c7ae3229b2cda5065d7058fcc05765c695c29ce05313fbe96cb2ca639231a90600090a3505050565b3361098881604080519081016040528060098152602001600080516020612040833981519152815250610748565b600754604080519182526020820184905280517feacf709830352fe1a96d6837caea6476163d682a42a64eb621b34d9b901b50009281900390910190a150600755565b6040805180820190915260098152600080516020612040833981519152602082015281565b6000610a5c836001846040518082805190602001908083835b60208310610a285780518252601f199092019160209182019101610a09565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611973565b90505b92915050565b60008054600160a060020a03163314610a7d57600080fd5b5060005b81518110156107b257610aaa8282815181101515610a9b57fe5b90602001906020020151610b6c565b600101610a81565b6000806000610abf612028565b50600084815260086020908152604080832081518083019092528054600160a060020a03168252600101549181018290526007549092908190610b1a90610b0e856103e863ffffffff61199216565b9063ffffffff6119a716565b600654909250610b3690610b0e856103e863ffffffff61199216565b9050610b5f81610b538487602001516119d090919063ffffffff16565b9063ffffffff6119d016565b9891975095509350505050565b600054600160a060020a03163314610b8357600080fd5b610bb0816040805190810160405280600981526020016000805160206120408339815191528152506119e2565b50565b60025460009081908190819060ff1615610bcc57600080fd5b600480546040805160e160020a6331a9108f02815292830188905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b158015610c1b57600080fd5b505af1158015610c2f573d6000803e3d6000fd5b505050506040513d6020811015610c4557600080fd5b50519350600160a060020a0384163314610ca9576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b60008581526008602052604081206001015493508311610d13576040805160e560020a62461bcd02815260206004820152600d60248201527f4e6f206f66666572206f70656e00000000000000000000000000000000000000604482015290519081900360640190fd5b60008581526008602090815260408083208054600160a060020a03198116825560019091018490556004805483517f824eec3b0000000000000000000000000000000000000000000000000000000081529182018b90529251600160a060020a039283169750919092169363824eec3b93602480850194919392918390030190829087803b158015610da457600080fd5b505af1158015610db8573d6000803e3d6000fd5b505050506040513d6020811015610dce57600080fd5b50519050610ddd818486611af3565b60048054604080517f42842e0e0000000000000000000000000000000000000000000000000000000081523393810193909352600160a060020a0385811660248501526044840189905290519116916342842e0e91606480830192600092919082900301818387803b158015610e5257600080fd5b505af1158015610e66573d6000803e3d6000fd5b5050505081600160a060020a031684600160a060020a0316867fe6d56779a392535d3a591e92b65ba36f2ecc424bbf5220d0176a7da29385b504866040518082815260200191505060405180910390a45050505050565b600054600160a060020a03163314610ed457600080fd5b60025460ff161515610ee557600080fd5b6002805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b33610f4881604080519081016040528060098152602001600080516020612040833981519152815250610748565b50600355565b60035481565b60065481565b60025460ff1681565b6002546000908190819060ff1615610f7a57600080fd5b600480546040805160e160020a6331a9108f02815292830187905251600160a060020a0390911691636352211e9160248083019260209291908290030181600087803b158015610fc957600080fd5b505af1158015610fdd573d6000803e3d6000fd5b505050506040513d6020811015610ff357600080fd5b50519250600160a060020a0383163314611057576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746f6b656e206f776e65720000000000000000000000000000000000604482015290519081900360640190fd5b600084815260086020526040812060010154925082116110c1576040805160e560020a62461bcd02815260206004820152600d60248201527f4e6f206f66666572206f70656e00000000000000000000000000000000000000604482015290519081900360640190fd5b50600083815260086020526040902054600160a060020a03166110e3846118cc565b80600160a060020a031683600160a060020a0316857f6d699e170cc72516120ba19fe48e744504798d1afc2ffb65ff1154a6f4fa4d15856040518082815260200191505060405180910390a450505050565b600554600160a060020a031681565b600054600160a060020a0316331461115b57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a260008054600160a060020a0319169055565b600054600160a060020a031633146111ba57600080fd5b610bb081604080519081016040528060098152602001600080516020612040833981519152815250611c47565b600054600160a060020a031633146111fe57600080fd5b60025460ff161561120e57600080fd5b6002805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6000806000806000611256612028565b506000868152600860209081526040808320815180830183528154600160a060020a0390811680835260019093015482860181905260048054865160e160020a6331a9108f0281529182018f9052955193979496919590921693636352211e936024808501949192918390030190829087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b505050506040513d60208110156112ff57600080fd5b50516000998a526009602052604090992054600254929a9199985060ff908116159750909116945092505050565b600054600160a060020a031681565b3361136a81604080519081016040528060098152602001600080516020612040833981519152815250610748565b600160a060020a03821615156113ca576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b5060058054600160a060020a031916600160a060020a0392909216919091179055565b3361141b81604080519081016040528060098152602001600080516020612040833981519152815250610748565b600654604080519182526020820184905280517f3d843ef224be86afeee7f914f0fa9ddae84d6d9df67ca5edcb781900ee88bff49281900390910190a150600655565b60025460009060ff161561147157600080fd5b60048054604080517f4f558e79000000000000000000000000000000000000000000000000000000008152928301859052518492600160a060020a0390921691634f558e799160248083019260209291908290030181600087803b1580156114d857600080fd5b505af11580156114ec573d6000803e3d6000fd5b505050506040513d602081101561150257600080fd5b5051151561155a576040805160e560020a62461bcd02815260206004820152601460248201527f546f6b656e20646f6573206e6f74206578697374000000000000000000000000604482015290519081900360640190fd5b6003546000848152600860205260409020600101548491611581919063ffffffff611d1916565b3410156115d8576040805160e560020a62461bcd02815260206004820152601060248201527f4f66666572206e6f7420656e6f75676800000000000000000000000000000000604482015290519081900360640190fd5b600084815260096020526040902054849060ff1615611641576040805160e560020a62461bcd02815260206004820152601c60248201527f546f6b656e206e6f7420656e61626c656420666f72206f666665727300000000604482015290519081900360640190fd5b61164a856118cc565b60408051808201825233815234602080830191825260008981526008825284812093518454600160a060020a031916600160a060020a03918216178555925160019094019390935560048054855160e160020a6331a9108f0281529182018b905294519490921693636352211e936024808501948390030190829087803b1580156116d457600080fd5b505af11580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b50516040805134815290519195503391600160a060020a0387169188917f3d87e1d02e187b9fe1095bc12567b7485b6cf54c47eea3dc9b5fd64d03cb67509181900360200190a45050505050565b6000610a5f826040805190810160405280600981526020016000805160206120408339815191528152506109f0565b336117a981604080519081016040528060098152602001600080516020612040833981519152815250610748565b6117b2826118cc565b600082815260096020526040808220805460ff1916600117905551339184917fe0c56951f00a75f5139f9af608a2ae603fe7c340a8f4b4b3125e9a7018041b609190a35050565b3361182781604080519081016040528060098152602001600080516020612040833981519152815250610748565b5060048054600160a060020a031916600160a060020a0392909216919091179055565b60075481565b600454600160a060020a031681565b60008054600160a060020a0316331461187757600080fd5b5060005b81518110156107b2576118a4828281518110151561189557fe5b906020019060200201516111a3565b60010161187b565b600054600160a060020a031633146118c357600080fd5b610bb081611d26565b60008181526008602052604090208054600190910154600160a060020a039091169081158015906118fd5750600081115b15611959576000838152600860205260408082208054600160a060020a031916815560010182905551600160a060020a0384169183156108fc02918491818181858888f19350505050158015611957573d6000803e3d6000fd5b505b505050565b6119688282611973565b15156107b257600080fd5b600160a060020a03166000908152602091909152604090205460ff1690565b6000818381151561199f57fe5b049392505050565b60008215156119b857506000610a5f565b508181028183828115156119c857fe5b0414610a5f57fe5b6000828211156119dc57fe5b50900390565b611a4c826001836040518082805190602001908083835b60208310611a185780518252601f1990920191602091820191016119f9565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611d96565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015611ab5578181015183820152602001611a9d565b50505050905090810190601f168015611ae25780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60048054604080517f32fd84780000000000000000000000000000000000000000000000000000000081529283018690528051600093849384938493600160a060020a03909216926332fd8478926024808301939282900301818787803b158015611b5d57600080fd5b505af1158015611b71573d6000803e3d6000fd5b505050506040513d6040811015611b8757600080fd5b50805160209091015160048054604080517fde56a2450000000000000000000000000000000000000000000000000000000081529283018c90528051949850929650600160a060020a03169263de56a245926024808401939192918290030181600087803b158015611bf857600080fd5b505af1158015611c0c573d6000803e3d6000fd5b505050506040513d6040811015611c2257600080fd5b5080516020909101519092509050611c3e848483858a8a611db8565b50505050505050565b611cb1826001836040518082805190602001908083835b60208310611c7d5780518252601f199092019160209182019101611c5e565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050611f07565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898260405180806020018281038252838181518152602001915080519060200190808383600083811015611ab5578181015183820152602001611a9d565b81810182811015610a5f57fe5b600160a060020a0381161515611d3b57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b600160a060020a0316600090815260209190915260409020805460ff19169055565b600080600080611dd5600654600754611d1990919063ffffffff16565b9350611dfd611df085610b0e896103e863ffffffff61199216565b879063ffffffff6119d016565b604051909350600160a060020a0386169084156108fc029085906000818181858888f19350505050158015611e36573d6000803e3d6000fd5b50600754611e5090610b0e886103e863ffffffff61199216565b600554604051919350600160a060020a03169083156108fc029084906000818181858888f19350505050158015611e8b573d6000803e3d6000fd5b50611ea083610b53888563ffffffff6119d016565b9050600160a060020a0388161515611eee57604051600160a060020a038b169082156108fc029083906000818181858888f19350505050158015611ee8573d6000803e3d6000fd5b50611efb565b611efb8a8a8a8a85611f2c565b50505050505050505050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600080808080611f42898863ffffffff611d1916565b9450611f5c89670de0b6b3a764000063ffffffff6119a716565b9350611f6e848663ffffffff61199216565b9250611f98670de0b6b3a7640000611f8c888663ffffffff6119a716565b9063ffffffff61199216565b604051909250600160a060020a038b169083156108fc029084906000818181858888f19350505050158015611fd1573d6000803e3d6000fd5b50611fe2868363ffffffff6119d016565b604051909150600160a060020a0389169082156108fc029083906000818181858888f1935050505015801561201b573d6000803e3d6000fd5b5050505050505050505050565b604080518082019091526000808252602082015290560077686974656c6973740000000000000000000000000000000000000000000000a165627a7a723058208d4d7fd32ed4eca24d9a1d29d11672740b9d925a07c7be20199d74510bb6f4840029

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

000000000000000000000000fbeef911dc5821886e1dda71586d90ed28174b7d0000000000000000000000003f8c962eb167ad2f80c72b5f933511ccdf0719d4

-----Decoded View---------------
Arg [0] : _kodaAddress (address): 0xFBeef911Dc5821886e1dda71586d90eD28174B7d
Arg [1] : _koCommissionAccount (address): 0x3f8C962eb167aD2f80C72b5F933511CcDF0719D4

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fbeef911dc5821886e1dda71586d90ed28174b7d
Arg [1] : 0000000000000000000000003f8c962eb167ad2f80c72b5f933511ccdf0719d4


Deployed Bytecode Sourcemap

12650:9443:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20868:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20868:221:0;;;;;;;4847:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4847:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4847:119:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4847:119:0;;-1:-1:-1;4847:119:0;;-1:-1:-1;;;;;;;4847:119:0;14952:225;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14952:225:0;;;;;21845:245;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21845:245:0;;;;;7074:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7074:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7074:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5114:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5114:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5114:142:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5114:142:0;;-1:-1:-1;5114:142:0;;-1:-1:-1;;;;;;;5114:142:0;;;;;;;;;;;;;;;;;;;8931:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8931:208:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8931:208:0;;-1:-1:-1;8931:208:0;;-1:-1:-1;;;;;;;8931:208:0;20104:459;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20104:459:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8545:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8545:137:0;-1:-1:-1;;;;;8545:137:0;;;;;15717:697;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15717:697:0;;;;;3838:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3838:95:0;;;;21095:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21095:126:0;;;;;13028:40;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13028:40:0;;;;;;;;;;;;;;;;;;;;13231:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13231:43:0;;;;3217:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3217:26:0;;;;15183:528;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15183:528:0;;;;;13190:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13190:34:0;;;;;;;;-1:-1:-1;;;;;13190:34:0;;;;;;;;;;;;;;2217:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2217:114:0;;;;7540:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7540:129:0;-1:-1:-1;;;;;7540:129:0;;;;;3658:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3658:93:0;;;;19770:328;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19770:328:0;;;;;;;;;-1:-1:-1;;;;;19770:328:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1422:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1422:20:0;;;;21351:223;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21351:223:0;-1:-1:-1;;;;;21351:223:0;;;;;21580:259;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21580:259:0;;;;;14527:419;;;;;;7747:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7747:139:0;-1:-1:-1;;;;;7747:139:0;;;;;20640:222;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20640:222:0;;;;;21227:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21227:118:0;-1:-1:-1;;;;;21227:118:0;;;;;13279:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13279:41:0;;;;13111:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13111:26:0;;;;8112:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8112:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8112:198:0;;-1:-1:-1;8112:198:0;;-1:-1:-1;;;;;;;8112:198:0;2499:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2499:105:0;-1:-1:-1;;;;;2499:105:0;;;;;20868:221;20940:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;20962:30;20983:8;20962:20;:30::i;:::-;21028:5;21001:24;;;:14;:24;;;;;;:32;;-1:-1:-1;;21001:32:0;;;21047:36;21072:10;;21016:8;;21047:36;;21028:5;21047:36;20868:221;;:::o;4847:119::-;4931:29;4950:9;4931:5;4937;4931:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;4931:12:0;;;;;-1:-1:-1;4931:12:0;;;;;;;;;;;;-1:-1:-1;;4931:18:0;:29::i;:::-;4847:119;;:::o;14952:225::-;3393:6;;;;3392:7;3384:16;;;;;;13754:11;;;:28;;;;;;;;;;;;;15041:8;;-1:-1:-1;;;;;13754:11:0;;;;:18;;:28;;;;;;;;;;;;;;:11;;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;13754:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13754:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13754:28:0;13746:61;;;;;;;-1:-1:-1;;;;;13746:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13615:16;;;;:6;:16;;;;;:23;15073:8;;-1:-1:-1;;;;;13615:23:0;13642:10;13615:37;13607:65;;;;;-1:-1:-1;;;;;13607:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15093:30;15114:8;15093:20;:30::i;:::-;15137:34;;15160:10;;15150:8;;15137:34;;;;;13814:1;3407;14952:225;:::o;21845:245::-;21933:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;21985:21;;21957:74;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22038:21:0;:46;21845:245::o;7074:53::-;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7074:53:0;;;;;:::o;5114:142::-;5200:4;5223:27;5240:9;5223:5;5229;5223:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5223:12:0;;;;;-1:-1:-1;5223:12:0;;;;;;;;;;;;-1:-1:-1;;5223:16:0;:27::i;:::-;5216:34;;5114:142;;;;;:::o;8931:208::-;9033:9;1925:5;;-1:-1:-1;;;;;1925:5:0;1911:10;:19;1903:28;;;;;;-1:-1:-1;9045:1:0;9028:106;9052:10;:17;9048:1;:21;9028:106;;;9085:41;9112:10;9123:1;9112:13;;;;;;;;;;;;;;;;;;9085:26;:41::i;:::-;9071:3;;9028:106;;20104:459;20174:20;20196;20218:19;20246:18;;:::i;:::-;-1:-1:-1;20290:18:0;20267:16;;;:6;:16;;;;;;;;20246:37;;;;;;;;;;-1:-1:-1;;;;;20246:37:0;;;;;;;;;;;;20368:21;;20246:37;;20290:18;;;20343:47;;:20;20246:37;20358:4;20343:20;:14;:20;:::i;:::-;:24;:47;:24;:47;:::i;:::-;20442:23;;20329:61;;-1:-1:-1;20417:49:0;;:20;:10;20432:4;20417:20;:14;:20;:::i;:49::-;20397:69;;20489:35;20514:9;20489:20;20505:3;20489:5;:11;;;:15;;:20;;;;:::i;:::-;:24;:35;:24;:35;:::i;:::-;20475:82;20531:3;;-1:-1:-1;20541:9:0;-1:-1:-1;20104:459:0;-1:-1:-1;;;;20104:459:0:o;8545:137::-;1925:5;;-1:-1:-1;;;;;1925:5:0;1911:10;:19;1903:28;;;;;;8637:39;8648:9;8659:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8659:16:0;;;8637:10;:39::i;:::-;8545:137;:::o;15717:697::-;3393:6;;15791:20;;;;;;;;3393:6;;3392:7;3384:16;;;;;;15814:11;;;:29;;;-1:-1:-1;;;;;15814:29:0;;;;;;;;;-1:-1:-1;;;;;15814:11:0;;;;:19;;:29;;;;;;;;;;;;;;:11;;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;15814:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15814:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15814:29:0;;-1:-1:-1;;;;;;15858:26:0;;15874:10;15858:26;15850:54;;;;;-1:-1:-1;;;;;15850:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15936:16;;;;:6;:16;;;;;:22;;;;-1:-1:-1;15973:16:0;;15965:42;;;;;-1:-1:-1;;;;;15965:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16040:16;;;;:6;:16;;;;;;;;:23;;-1:-1:-1;;;;;;16072:23:0;;;;-1:-1:-1;16072:23:0;;;;;;16152:11;;;:38;;;;;;;;;;;;;-1:-1:-1;;;;;16040:23:0;;;;-1:-1:-1;16152:11:0;;;;;:28;;:38;;;;;16040:16;;16152:38;;;;;;;;;:11;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;16152:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16152:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16152:38:0;;-1:-1:-1;16199:55:0;16152:38;16227:12;16241;16199;:55::i;:::-;16263:11;;;:65;;;;;;16292:10;16263:65;;;;;;;-1:-1:-1;;;;;16263:65:0;;;;;;;;;;;;;;;:11;;;:28;;:65;;;;;:11;;:65;;;;;;;:11;;:65;;;5:2:-1;;;;30:1;27;20:12;5:2;16263:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16263:65:0;;;;16378:13;-1:-1:-1;;;;;16342:64:0;16364:12;-1:-1:-1;;;;;16342:64:0;16354:8;16342:64;16393:12;16342:64;;;;;;;;;;;;;;;;;;15717:697;;;;;:::o;3838:95::-;1925:5;;-1:-1:-1;;;;;1925:5:0;1911:10;:19;1903:28;;;;;;3553:6;;;;3545:15;;;;;;;;3892:6;:14;;-1:-1:-1;;3892:14:0;;;3918:9;;;;3901:5;;3918:9;3838:95::o;21095:126::-;21161:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;-1:-1:-1;21187:12:0;:28;21095:126::o;13028:40::-;;;;:::o;13231:43::-;;;;:::o;3217:26::-;;;;;;:::o;15183:528::-;3393:6;;15257:20;;;;;;3393:6;;3392:7;3384:16;;;;;;15280:11;;;:29;;;-1:-1:-1;;;;;15280:29:0;;;;;;;;;-1:-1:-1;;;;;15280:11:0;;;;:19;;:29;;;;;;;;;;;;;;:11;;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;15280:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15280:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15280:29:0;;-1:-1:-1;;;;;;15324:26:0;;15340:10;15324:26;15316:54;;;;;-1:-1:-1;;;;;15316:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15417:16;;;;:6;:16;;;;;:22;;;;-1:-1:-1;15454:31:0;;15446:57;;;;;-1:-1:-1;;;;;15446:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15543:16:0;;;;:6;:16;;;;;:23;-1:-1:-1;;;;;15543:23:0;15575:30;15550:8;15575:20;:30::i;:::-;15655:20;-1:-1:-1;;;;;15619:86:0;15641:12;-1:-1:-1;;;;;15619:86:0;15631:8;15619:86;15677:27;15619:86;;;;;;;;;;;;;;;;;;15183:528;;;;:::o;13190:34::-;;;-1:-1:-1;;;;;13190:34:0;;:::o;2217:114::-;1925:5;;-1:-1:-1;;;;;1925:5:0;1911:10;:19;1903:28;;;;;;2294:5;;;2275:25;;-1:-1:-1;;;;;2294:5:0;;;;2275:25;;;2323:1;2307:18;;-1:-1:-1;;;;;;2307:18:0;;;2217:114::o;7540:129::-;1925:5;;-1:-1:-1;;;;;1925:5:0;1911:10;:19;1903:28;;;;;;7627:36;7635:9;7646:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7646:16:0;;;7627:7;:36::i;3658:93::-;1925:5;;-1:-1:-1;;;;;1925:5:0;1911:10;:19;1903:28;;;;;;3393:6;;;;3392:7;3384:16;;;;;;3713:6;:13;;-1:-1:-1;;3713:13:0;3722:4;3713:13;;;3738:7;;;;3713:6;;3738:7;3658:93::o;19770:328::-;19831:15;19848:14;19864;19880:13;19895:12;19916:18;;:::i;:::-;-1:-1:-1;19937:16:0;;;;:6;:16;;;;;;;;19916:37;;;;;;;;;-1:-1:-1;;;;;19916:37:0;;;;;;;;;;;;;;;;;20011:11;;;:29;;-1:-1:-1;;;;;20011:29:0;;;;;;;;;;19916:37;;;;;;20011:11;;;;:19;;:29;;;;;;;;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;20011:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20011:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20011:29:0;20048:24;;;;:14;20011:29;20048:24;;;;;;20079:6;;19960:132;;;;20011:29;-1:-1:-1;20048:24:0;;;;20047:25;;-1:-1:-1;20079:6:0;;;;-1:-1:-1;19770:328:0;-1:-1:-1;;;19770:328:0:o;1422:20::-;;;-1:-1:-1;;;;;1422:20:0;;:::o;21351:223::-;21438:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;-1:-1:-1;;;;;21465:34:0;;;;21457:62;;;;;-1:-1:-1;;;;;21457:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21526:19:0;:42;;-1:-1:-1;;;;;;21526:42:0;-1:-1:-1;;;;;21526:42:0;;;;;;;;;;21351:223::o;21580:259::-;21675:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;21726:23;;21699:77;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21783:23:0;:50;21580:259::o;14527:419::-;3393:6;;14818:20;;3393:6;;3392:7;3384:16;;;;;;13754:11;;;:28;;;;;;;;;;;;;14624:8;;-1:-1:-1;;;;;13754:11:0;;;;:18;;:28;;;;;;;;;;;;;;:11;;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;13754:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13754:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13754:28:0;13746:61;;;;;;;-1:-1:-1;;;;;13746:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13934:12;;13907:16;;;;:6;:16;;;;;:22;;;14662:8;;13907:40;;:22;:40;:26;:40;:::i;:::-;13894:9;:53;;13886:82;;;;;-1:-1:-1;;;;;13886:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14059:24;;;;:14;:24;;;;;;14703:8;;14059:24;;14058:25;14050:66;;;;;-1:-1:-1;;;;;14050:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14723:30;14744:8;14723:20;:30::i;:::-;14781:28;;;;;;;;14787:10;14781:28;;14799:9;14781:28;;;;;;;-1:-1:-1;14762:16:0;;;:6;:16;;;;;:47;;;;-1:-1:-1;;;;;;14762:47:0;-1:-1:-1;;;;;14762:47:0;;;;;;;;-1:-1:-1;14762:47:0;;;;;;;14841:11;;;:29;;-1:-1:-1;;;;;14841:29:0;;;;;;;;;;:11;;;;;:19;;:29;;;;;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;14841:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14841:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14841:29:0;14884:56;;;14930:9;14884:56;;;;14841:29;;-1:-1:-1;14918:10:0;;-1:-1:-1;;;;;14884:56:0;;;14894:8;;14884:56;;;;;14841:29;14884:56;;;13975:1;13814;3407;14527:419;;:::o;7747:139::-;7821:4;7844:36;7852:9;7863:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7863:16:0;;;7844:7;:36::i;20640:222::-;20713:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;20735:30;20756:8;20735:20;:30::i;:::-;20774:24;;;;:14;:24;;;;;;:31;;-1:-1:-1;;20774:31:0;20801:4;20774:31;;;20819:37;20845:10;;20789:8;;20819:37;;20774:24;20819:37;20640:222;;:::o;21227:118::-;21287:10;7282:38;7292:9;7303:16;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7303:16:0;;;7282:9;:38::i;:::-;-1:-1:-1;21313:11:0;:26;;-1:-1:-1;;;;;;21313:26:0;-1:-1:-1;;;;;21313:26:0;;;;;;;;;;21227:118::o;13279:41::-;;;;:::o;13111:26::-;;;-1:-1:-1;;;;;13111:26:0;;:::o;8112:198::-;8209:9;1925:5;;-1:-1:-1;;;;;1925:5:0;1911:10;:19;1903:28;;;;;;-1:-1:-1;8221:1:0;8204:101;8228:10;:17;8224:1;:21;8204:101;;;8261:36;8283:10;8294:1;8283:13;;;;;;;;;;;;;;;;;;8261:21;:36::i;:::-;8247:3;;8204:101;;2499:105;1925:5;;-1:-1:-1;;;;;1925:5:0;1911:10;:19;1903:28;;;;;;2569:29;2588:9;2569:18;:29::i;16420:516::-;16519:28;16550:16;;;:6;:16;;;;;:23;;;16659:22;;;;-1:-1:-1;;;;;16550:23:0;;;;16694:34;;;;;:69;;;16762:1;16732:27;:31;16694:69;16690:241;;;16818:16;;;;:6;:16;;;;;;16811:23;;-1:-1:-1;;;;;;16811:23:0;;;;;;;;16865:58;-1:-1:-1;;;;;16865:29:0;;;:58;;;;;16895:27;;16865:58;16818:16;16865:58;16895:27;16865:29;:58;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16865:58:0;16690:241;16420:516;;;:::o;768:116::-;860:17;864:5;871;860:3;:17::i;:::-;852:26;;;;;;;968:134;-1:-1:-1;;;;;1077:19:0;1054:4;1077:19;;;;;;;;;;;;;;;968:134::o;9903:288::-;9963:7;10183:2;10178;:7;;;;;;;;;9903:288;-1:-1:-1;;;9903:288:0:o;9425:391::-;9485:9;9715:7;;9711:38;;;-1:-1:-1;9740:1:0;9733:8;;9711:38;-1:-1:-1;9761:7:0;;;9766:2;9761;:7;9782:6;;;;;;;;:12;9775:20;;;10308:119;10368:7;10391:8;;;;10384:16;;;;-1:-1:-1;10414:7:0;;;10308:119::o;5661:154::-;5738:30;5758:9;5738:5;5744;5738:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5738:12:0;;;;;-1:-1:-1;5738:12:0;;;;;;;;;;;;-1:-1:-1;;5738:19:0;:30::i;:::-;5792:9;-1:-1:-1;;;;;5780:29:0;;5803:5;5780:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5780:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5661:154;;:::o;16942:556::-;17140:11;;;:44;;;;;;;;;;;;;;17085:21;;;;;;;;-1:-1:-1;;;;;17140:11:0;;;;:28;;:44;;;;;;;;;;;17085:21;17140:11;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;17140:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17140:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17140:44:0;;;;;;;17306:11;;;17140:44;17306:53;;;;;;;;;;;;;17140:44;;-1:-1:-1;17140:44:0;;-1:-1:-1;;;;;;17306:11:0;;:37;;:53;;;;;17140:44;;17306:53;;;;;;:11;;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;17306:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17306:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17306:53:0;;;;;;;;;-1:-1:-1;17306:53:0;-1:-1:-1;17368:124:0;17380:13;17395:20;17306:53;;17470:6;17478:13;17368:11;:124::i;:::-;16942:556;;;;;;;:::o;5383:146::-;5457:27;5474:9;5457:5;5463;5457:12;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;5457:12:0;;;;;-1:-1:-1;5457:12:0;;;;;;;;;;;;-1:-1:-1;;5457:16:0;:27::i;:::-;5506:9;-1:-1:-1;;;;;5496:27:0;;5517:5;5496:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;10494:132:0;10576:7;;;10597;;;;10590:15;;;2745:175;-1:-1:-1;;;;;2816:23:0;;;;2808:32;;;;;;2873:5;;;2852:38;;-1:-1:-1;;;;;2852:38:0;;;;2873:5;;;2852:38;;;2897:5;:17;;-1:-1:-1;;;;;;2897:17:0;-1:-1:-1;;;;;2897:17:0;;;;;;;;;;2745:175::o;578:108::-;-1:-1:-1;;;;;653:19:0;675:5;653:19;;;;;;;;;;;:27;;-1:-1:-1;;653:27:0;;;578:108::o;17504:1268::-;17827:38;17982:26;18168:20;18346:26;17868:50;17894:23;;17868:21;;:25;;:50;;;;:::i;:::-;17827:91;-1:-1:-1;18011:78:0;18030:52;17827:91;18030:16;:6;18041:4;18030:16;:10;:16;:::i;:52::-;18011:6;;:78;:10;:78;:::i;:::-;18096:42;;17982:107;;-1:-1:-1;;;;;;18096:22:0;;;:42;;;;;17982:107;;18096:42;;;;17982:107;18096:22;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;18212:21:0;;18191:43;;:16;:6;18202:4;18191:16;:10;:16;:::i;:43::-;18241:19;;:42;;18168:66;;-1:-1:-1;;;;;;18241:19:0;;:42;;;;;18168:66;;18241:19;:42;:19;:42;18168:66;18241:19;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;18375:48:0;18404:18;18375:24;:6;18386:12;18375:24;:10;:24;:::i;:48::-;18346:77;-1:-1:-1;;;;;;18436:42:0;;;18432:335;;;18558:43;;-1:-1:-1;;;;;18558:23:0;;;:43;;;;;18582:18;;18558:43;;;;18582:18;18558:23;:43;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18558:43:0;18432:335;;;18624:135;18646:14;18662:21;18685:28;18715:23;18740:18;18624:21;:135::i;:::-;17504:1268;;;;;;;;;;:::o;404:104::-;-1:-1:-1;;;;;476:19:0;:12;:19;;;;;;;;;;;:26;;-1:-1:-1;;476:26:0;498:4;476:26;;;404:104::o;18778:915::-;19010:31;;;;;19044:50;:21;19070:23;19044:50;:25;:50;:::i;:::-;19010:84;-1:-1:-1;19131:35:0;:21;19157:8;19131:35;:25;:35;:::i;:::-;19101:65;-1:-1:-1;19283:48:0;19101:65;19307:23;19283:48;:23;:48;:::i;:::-;19249:82;-1:-1:-1;19380:62:0;19433:8;19380:48;:19;19249:82;19380:48;:23;:48;:::i;:::-;:52;:62;:52;:62;:::i;:::-;19449:54;;19340:102;;-1:-1:-1;;;;;;19449:23:0;;;:54;;;;;19340:102;;19449:54;;;;19340:102;19449:23;:54;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;19555:54:0;:19;19579:29;19555:54;:23;:54;:::i;:::-;19616:71;;19512:97;;-1:-1:-1;;;;;;19616:37:0;;;:71;;;;;19512:97;;19616:71;;;;19512:97;19616:37;:71;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19616:71:0;18778:915;;;;;;;;;;:::o;12650:9443::-;;;;;;;;;;-1:-1:-1;12650:9443:0;;;;;;;;:::o

Swarm Source

bzzr://8d4d7fd32ed4eca24d9a1d29d11672740b9d925a07c7be20199d74510bb6f484

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.