ETH Price: $3,451.67 (+1.56%)

Token

Star Card (CARD)
 

Overview

Max Total Supply

11 CARD

Holders

8

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
1 CARD

Value
$0.00
0xd6E8D52Be82550B230176b6E9bA49BC3fAF43E4a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoThingWithDescendants

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-11
*/

pragma solidity ^0.4.19;

/**
 * @title Ownable
 */
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));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
}

/**
 * @title SafeMath Library
 */
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 c;
  }

  /**
  * @dev Substracts 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;
  }
}

/**
 * @title ERC721 interface
 * @dev see https://github.com/ethereum/eips/issues/721
 */
contract ERC721 {
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function transfer(address _to, uint256 _tokenId) public;
  function approve(address _to, uint256 _tokenId) public;
  function takeOwnership(uint256 _tokenId) public;
}

/**
 * @title ERC721Token
 * Generic implementation for the required functionality of the ERC721 standard
 */
contract ERC721Token is ERC721 {
  using SafeMath for uint256;

  // Total amount of tokens
  uint256 private totalTokens;

  // Mapping from token ID to owner
  mapping (uint256 => address) private tokenOwner;

  // Mapping from token ID to approved address
  mapping (uint256 => address) private tokenApprovals;

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

  // Mapping from token ID to index of the owner tokens list
  mapping(uint256 => uint256) private ownedTokensIndex;

  /**
  * @dev Guarantees msg.sender is owner of the given token
  * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender
  */
  modifier onlyOwnerOf(uint256 _tokenId) {
    require(ownerOf(_tokenId) == msg.sender);
    _;
  }

  /**
  * @dev Gets the total amount of tokens stored by the contract
  * @return uint256 representing the total amount of tokens
  */
  function totalSupply() public view returns (uint256) {
    return totalTokens;
  }

  /**
  * @dev Gets the balance of the specified address
  * @param _owner address to query the balance of
  * @return uint256 representing the amount owned by the passed address
  */
  function balanceOf(address _owner) public view returns (uint256) {
    return ownedTokens[_owner].length;
  }

  /**
  * @dev Gets the list of tokens owned by a given address
  * @param _owner address to query the tokens of
  * @return uint256[] representing the list of tokens owned by the passed address
  */
  function tokensOf(address _owner) public view returns (uint256[]) {
    return ownedTokens[_owner];
  }

  /**
  * @dev Gets the owner of the specified token ID
  * @param _tokenId uint256 ID of the token to query the owner of
  * @return owner address currently marked as the owner of the given token ID
  */
  function ownerOf(uint256 _tokenId) public view returns (address) {
    address owner = tokenOwner[_tokenId];
    require(owner != address(0));
    return owner;
  }

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

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

  /**
  * @dev Approves another address to claim for the ownership of the given token ID
  * @param _to address to be approved for the given token ID
  * @param _tokenId uint256 ID of the token to be approved
  */
  function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
    address owner = ownerOf(_tokenId);
    require(_to != owner);
    if (approvedFor(_tokenId) != 0 || _to != 0) {
      tokenApprovals[_tokenId] = _to;
      Approval(owner, _to, _tokenId);
    }
  }

  /**
  * @dev Claims the ownership of a given token ID
  * @param _tokenId uint256 ID of the token being claimed by the msg.sender
  */
  function takeOwnership(uint256 _tokenId) public {
    require(isApprovedFor(msg.sender, _tokenId));
    clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId);
  }

  /**
  * @dev Mint token function
  * @param _to The address that will own the minted token
  * @param _tokenId uint256 ID of the token to be minted by the msg.sender
  */
  function _mint(address _to, uint256 _tokenId) internal {
    require(_to != address(0));
    addToken(_to, _tokenId);
    Transfer(0x0, _to, _tokenId);
  }

  /**
  * @dev Burns a specific token
  * @param _tokenId uint256 ID of the token being burned by the msg.sender
  */
  function _burn(uint256 _tokenId) onlyOwnerOf(_tokenId) internal {
    if (approvedFor(_tokenId) != 0) {
      clearApproval(msg.sender, _tokenId);
    }
    removeToken(msg.sender, _tokenId);
    Transfer(msg.sender, 0x0, _tokenId);
  }

  /**
   * @dev Tells whether the msg.sender is approved for the given token ID or not
   * This function is not private so it can be extended in further implementations like the operatable ERC721
   * @param _owner address of the owner to query the approval of
   * @param _tokenId uint256 ID of the token to query the approval of
   * @return bool whether the msg.sender is approved for the given token ID or not
   */
  function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) {
    return approvedFor(_tokenId) == _owner;
  }

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

    clearApproval(_from, _tokenId);
    removeToken(_from, _tokenId);
    addToken(_to, _tokenId);
    Transfer(_from, _to, _tokenId);
  }

  /**
  * @dev Internal function to clear current approval of a given token ID
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function clearApproval(address _owner, uint256 _tokenId) private {
    require(ownerOf(_tokenId) == _owner);
    tokenApprovals[_tokenId] = 0;
    Approval(_owner, 0, _tokenId);
  }

  /**
  * @dev Internal function to add a token ID to the list of a given address
  * @param _to address representing the new owner of the given token ID
  * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
  */
  function addToken(address _to, uint256 _tokenId) private {
    require(tokenOwner[_tokenId] == address(0));
    tokenOwner[_tokenId] = _to;
    uint256 length = balanceOf(_to);
    ownedTokens[_to].push(_tokenId);
    ownedTokensIndex[_tokenId] = length;
    totalTokens = totalTokens.add(1);
  }

  /**
  * @dev Internal function to remove a token ID from the list of a given address
  * @param _from address representing the previous owner of the given token ID
  * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
  */
  function removeToken(address _from, uint256 _tokenId) private {
    require(ownerOf(_tokenId) == _from);

    uint256 tokenIndex = ownedTokensIndex[_tokenId];
    uint256 lastTokenIndex = balanceOf(_from).sub(1);
    uint256 lastToken = ownedTokens[_from][lastTokenIndex];

    tokenOwner[_tokenId] = 0;
    ownedTokens[_from][tokenIndex] = lastToken;
    ownedTokens[_from][lastTokenIndex] = 0;
    // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to
    // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping
    // the lastToken to the first position, and then dropping the element placed in the last position of the list

    ownedTokens[_from].length--;
    ownedTokensIndex[_tokenId] = 0;
    ownedTokensIndex[lastToken] = tokenIndex;
    totalTokens = totalTokens.sub(1);
  }
}

/**
 * @title CryptoThingWithDescendants
 */
contract CryptoThingWithDescendants is Ownable, ERC721Token {
  using SafeMath for uint256;

  struct Thing {
    uint256 id;
    uint256 parentId;
    uint256 purchasePrice;
    uint256 growthRate;
    uint256 dividendRate;
    uint256 dividendsPaid;
    uint256 lastAction;
    bytes32 displayName;
  }

  uint256 public gameCost = 10 ether;
  uint256 public floorPrice = 10 finney;
  uint256 public standardGrowthRate = 150;
  uint256 public numThings;
  mapping (uint256 => Thing) public things;
  mapping (uint256 => uint256[]) public descendantsOfThing;

  string constant public NAME = 'Star Card';
  string constant public SYMBOL = 'CARD';

  event DividendPaid(address indexed recipient, uint256 amount);
  event OverpaymentRefunded(uint256 amountExpected, uint256 excessFunds);
  event ThingBorn(uint256 indexed thingId, uint256 initialPrice);
  event ThingDestroyed(uint256 indexed thingId);
  event ThingSold(
    uint256 indexed thingId,
    uint256 oldPrice,
    uint256 newPrice,
    address oldOwner,
    address newOwner
  );

  function () payable public {
    // someone sent a gift! yay!
    owner.transfer(msg.value);
  }

  function name() constant public returns (string) {
    return NAME;
  }

  function symbol() constant public returns (string) {
    return SYMBOL;
  }

  function addThing(
    uint256 _parentId,
    uint256 _purchasePrice,
    uint256 _growthRate,
    uint256 _dividendRate,
    bytes32 _displayName
  ) public onlyOwner returns (uint256 thingId) {
    thingId = ++numThings;
    things[thingId] = Thing({
      id: thingId,
      parentId: _parentId,
      purchasePrice: _purchasePrice == 0 ? floorPrice : _purchasePrice,
      growthRate: _growthRate == 0 ? standardGrowthRate : _growthRate,
      dividendRate: _dividendRate,
      dividendsPaid: 0,
      lastAction: block.timestamp,
      displayName: _displayName
    });

    if (_parentId != 0) descendantsOfThing[_parentId].push(thingId);

    _mint(msg.sender, thingId);
    ThingBorn(thingId, things[thingId].purchasePrice);
  }

  function purchase(uint256 _thingId) public payable {
    require(_thingId != 0 && _thingId <= numThings);

    address previousOwner = ownerOf(_thingId);
    require(previousOwner != msg.sender);

    Thing storage thing = things[_thingId];
    uint256[] storage descendants = descendantsOfThing[_thingId];

    uint256 currentPrice = getCurrentPrice(_thingId);
    require(msg.value >= currentPrice);
    if (msg.value > currentPrice) {
      OverpaymentRefunded(currentPrice, msg.value.sub(currentPrice));
      msg.sender.transfer(msg.value.sub(currentPrice));
    }

    if (thing.dividendRate != 0 && (thing.parentId != 0 || descendants.length > 0)) {
      uint256 numDividends = thing.parentId == 0 ? descendants.length : descendants.length.add(1);
      uint256 dividendPerRecipient = getDividendPayout(
        currentPrice,
        thing.dividendRate,
        numDividends
      );

      address dividendRecipient = address(this);
      for (uint256 i = 0; i < numDividends; i++) {
        dividendRecipient = ownerOf(
          i == descendants.length ? thing.parentId : descendants[i]
        );
        dividendRecipient.transfer(dividendPerRecipient);
        DividendPaid(dividendRecipient, dividendPerRecipient);
      }

      thing.dividendsPaid = thing.dividendsPaid.add(dividendPerRecipient.mul(numDividends));
    }

    uint256 previousHolderShare = currentPrice.sub(
      dividendPerRecipient.mul(numDividends)
    );

    uint256 fee = previousHolderShare.div(20);
    owner.transfer(fee);

    previousOwner.transfer(previousHolderShare.sub(fee));
    thing.purchasePrice = thing.purchasePrice.mul(thing.growthRate).div(100);
    thing.lastAction = block.timestamp;

    clearApprovalAndTransfer(previousOwner, msg.sender, _thingId);
    ThingSold(_thingId, currentPrice, thing.purchasePrice, previousOwner, msg.sender);
  }

  function purchaseGame() public payable {
    require(msg.sender != owner);
    require(msg.value >= gameCost);
    owner.transfer(msg.value);
    owner = msg.sender;
    OwnershipTransferred(owner, msg.sender);
  }

  function setGameCost(uint256 newCost) public onlyOwner {
    gameCost = newCost;
  }

  function getDescendantsOfThing(uint256 _thingId) public view returns (uint256[]) {
    return descendantsOfThing[_thingId];
  }

  function getCurrentPrice(
    uint256 _thingId
  ) public view returns (uint256 currentPrice) {
    require(_thingId != 0 && _thingId <= numThings);
    Thing storage thing = things[_thingId];
    currentPrice = getPurchasePrice(thing.purchasePrice, thing.growthRate);
  }

  function getPurchasePrice(
    uint256 _currentPrice,
    uint256 _priceIncrease
  ) internal pure returns (uint256 currentPrice) {
    currentPrice = _currentPrice.mul(_priceIncrease).div(100);
  }

  function getDividendPayout(
    uint256 _purchasePrice,
    uint256 _dividendRate,
    uint256 _numDividends
  ) public pure returns (uint256 dividend) {
    dividend = _purchasePrice.mul(
      _dividendRate
    ).div(
      100
    ).sub(
      _purchasePrice
    ).div(
      _numDividends
    );
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_thingId","type":"uint256"}],"name":"getDescendantsOfThing","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"standardGrowthRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_purchasePrice","type":"uint256"},{"name":"_dividendRate","type":"uint256"},{"name":"_numDividends","type":"uint256"}],"name":"getDividendPayout","outputs":[{"name":"dividend","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"approvedFor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOf","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newCost","type":"uint256"}],"name":"setGameCost","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":"floorPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numThings","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"descendantsOfThing","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_thingId","type":"uint256"}],"name":"getCurrentPrice","outputs":[{"name":"currentPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"purchaseGame","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_parentId","type":"uint256"},{"name":"_purchasePrice","type":"uint256"},{"name":"_growthRate","type":"uint256"},{"name":"_dividendRate","type":"uint256"},{"name":"_displayName","type":"bytes32"}],"name":"addThing","outputs":[{"name":"thingId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_thingId","type":"uint256"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"things","outputs":[{"name":"id","type":"uint256"},{"name":"parentId","type":"uint256"},{"name":"purchasePrice","type":"uint256"},{"name":"growthRate","type":"uint256"},{"name":"dividendRate","type":"uint256"},{"name":"dividendsPaid","type":"uint256"},{"name":"lastAction","type":"uint256"},{"name":"displayName","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"DividendPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amountExpected","type":"uint256"},{"indexed":false,"name":"excessFunds","type":"uint256"}],"name":"OverpaymentRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"thingId","type":"uint256"},{"indexed":false,"name":"initialPrice","type":"uint256"}],"name":"ThingBorn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"thingId","type":"uint256"}],"name":"ThingDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"thingId","type":"uint256"},{"indexed":false,"name":"oldPrice","type":"uint256"},{"indexed":false,"name":"newPrice","type":"uint256"},{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"ThingSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6060604052678ac7230489e80000600655662386f26fc100006007556096600855336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122fc8061006f6000396000f30060606040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101c257806307a7465f14610250578063095ea7b3146102c8578063169853491461030a57806318160ddd14610333578063269aacc81461035c5780632a6dd48f146103a55780635a3f2672146104085780636352211e1461049657806370a08231146104f95780637f17b79d146105465780638da5cb5b146105695780639363c812146105be57806395d89b41146105e757806398123528146106755780639e1d52011461069e578063a3f4df7e146106de578063a9059cbb1461076c578063b2e6ceeb146107ae578063c55d0f56146107d1578063cab896dc14610808578063de65da2014610831578063e534a34b1461083b578063efef39a11461089a578063f2e23168146108b2578063f2fde38b14610922578063f76f8d781461095b575b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156101c057600080fd5b005b34156101cd57600080fd5b6101d56109e9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102155780820151818401526020810190506101fa565b50505050905090810190601f1680156102425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561025b57600080fd5b6102716004808035906020019091905050610a2c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102b4578082015181840152602081019050610299565b505050509050019250505060405180910390f35b34156102d357600080fd5b610308600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610a9d565b005b341561031557600080fd5b61031d610c30565b6040518082815260200191505060405180910390f35b341561033e57600080fd5b610346610c36565b6040518082815260200191505060405180910390f35b341561036757600080fd5b61038f6004808035906020019091908035906020019091908035906020019091905050610c40565b6040518082815260200191505060405180910390f35b34156103b057600080fd5b6103c66004808035906020019091905050610c95565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cd2565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610482578082015181840152602081019050610467565b505050509050019250505060405180910390f35b34156104a157600080fd5b6104b76004808035906020019091905050610d6f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050457600080fd5b610530600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ded565b6040518082815260200191505060405180910390f35b341561055157600080fd5b6105676004808035906020019091905050610e39565b005b341561057457600080fd5b61057c610e9e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105c957600080fd5b6105d1610ec3565b6040518082815260200191505060405180910390f35b34156105f257600080fd5b6105fa610ec9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561063a57808201518184015260208101905061061f565b50505050905090810190601f1680156106675780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068057600080fd5b610688610f0c565b6040518082815260200191505060405180910390f35b34156106a957600080fd5b6106c86004808035906020019091908035906020019091905050610f12565b6040518082815260200191505060405180910390f35b34156106e957600080fd5b6106f1610f43565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610731578082015181840152602081019050610716565b50505050905090810190601f16801561075e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561077757600080fd5b6107ac600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f7c565b005b34156107b957600080fd5b6107cf6004808035906020019091905050610fcf565b005b34156107dc57600080fd5b6107f26004808035906020019091905050610ffa565b6040518082815260200191505060405180910390f35b341561081357600080fd5b61081b61104a565b6040518082815260200191505060405180910390f35b610839611050565b005b341561084657600080fd5b6108846004808035906020019091908035906020019091908035906020019091908035906020019091908035600019169060200190919050506111db565b6040518082815260200191505060405180910390f35b6108b060048080359060200190919050506113bd565b005b34156108bd57600080fd5b6108d3600480803590602001909190505061189a565b6040518089815260200188815260200187815260200186815260200185815260200184815260200183815260200182600019166000191681526020019850505050505050505060405180910390f35b341561092d57600080fd5b610959600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506118e2565b005b341561096657600080fd5b61096e611a37565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109ae578082015181840152602081019050610993565b50505050905090810190601f1680156109db5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109f161222b565b6040805190810160405280600981526020017f5374617220436172640000000000000000000000000000000000000000000000815250905090565b610a3461223f565b600b6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a9157602002820191906000526020600020905b815481526020019060010190808311610a7d575b50505050509050919050565b6000813373ffffffffffffffffffffffffffffffffffffffff16610ac082610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515610ae257600080fd5b610aeb83610d6f565b91508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610b2857600080fd5b6000610b3384610c95565b73ffffffffffffffffffffffffffffffffffffffff16141580610b6d575060008473ffffffffffffffffffffffffffffffffffffffff1614155b15610c2a57836003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a35b50505050565b60085481565b6000600154905090565b6000610c8c82610c7e86610c706064610c62898b611a7090919063ffffffff16565b611aab90919063ffffffff16565b611ac690919063ffffffff16565b611aab90919063ffffffff16565b90509392505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610cda61223f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610d6357602002820191906000526020600020905b815481526020019060010190808311610d4f575b50505050509050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610de457600080fd5b80915050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e9457600080fd5b8060068190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b610ed161222b565b6040805190810160405280600481526020017f4341524400000000000000000000000000000000000000000000000000000000815250905090565b60095481565b600b60205281600052604060002081815481101515610f2d57fe5b9060005260206000209001600091509150505481565b6040805190810160405280600981526020017f537461722043617264000000000000000000000000000000000000000000000081525081565b803373ffffffffffffffffffffffffffffffffffffffff16610f9d82610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515610fbf57600080fd5b610fca338484611adf565b505050565b610fd93382611c28565b1515610fe457600080fd5b610ff7610ff082610d6f565b3383611adf565b50565b6000806000831415801561101057506009548311155b151561101b57600080fd5b600a6000848152602001908152602001600020905061104281600201548260030154611c69565b915050919050565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156110ac57600080fd5b60065434101515156110bd57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050151561111e57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561123857600080fd5b600960008154600101919050819055905061010060405190810160405280828152602001878152602001600087146112705786611274565b6007545b815260200160008614611287578561128b565b6008545b8152602001848152602001600081526020014281526020018360001916815250600a6000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007019060001916905590505060008614151561135c57600b600087815260200190815260200160002080548060010182816113469190612253565b9160005260206000209001600083909190915055505b6113663382611c99565b807faa0cf86995e6b19e7fbbb6ac5cffc44c081faf206059e153ac441ea7f7e82148600a6000848152602001908152602001600020600201546040518082815260200191505060405180910390a295945050505050565b60008060008060008060008060008060008b141580156113df57506009548b11155b15156113ea57600080fd5b6113f38b610d6f565b99503373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415151561143057600080fd5b600a60008c81526020019081526020016000209850600b60008c815260200190815260200160002097506114638b610ffa565b965086341015151561147457600080fd5b86341115611520577ff3c131ad7e14b0819d605186af670423716e4ddeb85d45547c9cb910c57af708876114b18934611ac690919063ffffffff16565b604051808381526020018281526020019250505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc6114fa8934611ac690919063ffffffff16565b9081150290604051600060405180830381858888f19350505050151561151f57600080fd5b5b6000896004015414158015611549575060008960010154141580611548575060008880549050115b5b156116a75760008960010154146115775761157260018980549050611d3390919063ffffffff16565b61157d565b87805490505b955061158e878a6004015488610c40565b9450309350600092505b85831015611675576115d8888054905084146115cd5788848154811015156115bc57fe5b9060005260206000209001546115d3565b89600101545b610d6f565b93508373ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050151561161a57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff167fb70dbf0e62ac2891fc0dccea9117219168105932d8f1537152476ad5e9f7a19d866040518082815260200191505060405180910390a28280600101935050611598565b61169e61168b8787611a7090919063ffffffff16565b8a60050154611d3390919063ffffffff16565b89600501819055505b6116cc6116bd8787611a7090919063ffffffff16565b88611ac690919063ffffffff16565b91506116e2601483611aab90919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561174557600080fd5b8973ffffffffffffffffffffffffffffffffffffffff166108fc6117728385611ac690919063ffffffff16565b9081150290604051600060405180830381858888f19350505050151561179757600080fd5b6117c560646117b78b600301548c60020154611a7090919063ffffffff16565b611aab90919063ffffffff16565b89600201819055504289600601819055506117e18a338d611adf565b8a7f0282563bd47b4d3d190c4e341daf0441684e1d78088c1ab272bf4d9699b82f70888b600201548d33604051808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a25050505050505050505050565b600a6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561193d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561197957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040805190810160405280600481526020017f434152440000000000000000000000000000000000000000000000000000000081525081565b6000806000841415611a855760009150611aa4565b8284029050828482811515611a9657fe5b04141515611aa057fe5b8091505b5092915050565b6000808284811515611ab957fe5b0490508091505092915050565b6000828211151515611ad457fe5b818303905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b1b57600080fd5b611b2481610d6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b5e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff16611b7e82610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515611ba057600080fd5b611baa8382611d51565b611bb48382611e3a565b611bbe82826120c1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008273ffffffffffffffffffffffffffffffffffffffff16611c4a83610c95565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000611c916064611c838486611a7090919063ffffffff16565b611aab90919063ffffffff16565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611cd557600080fd5b611cdf82826120c1565b8173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110151515611d4757fe5b8091505092915050565b8173ffffffffffffffffffffffffffffffffffffffff16611d7182610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515611d9357600080fd5b60006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b60008060008473ffffffffffffffffffffffffffffffffffffffff16611e5f85610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515611e8157600080fd5b60056000858152602001908152602001600020549250611eb36001611ea587610ded565b611ac690919063ffffffff16565b9150600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515611f0157fe5b906000526020600020900154905060006002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481101515611faf57fe5b9060005260206000209001819055506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561200c57fe5b906000526020600020900181905550600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361206d919061227f565b50600060056000868152602001908152602001600020819055508260056000838152602001908152602001600020819055506120b460018054611ac690919063ffffffff16565b6001819055505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561213057600080fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061218b83610ded565b9050600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816121de9190612253565b91600052602060002090016000849091909150555080600560008481526020019081526020016000208190555061222060018054611d3390919063ffffffff16565b600181905550505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b81548183558181151161227a5781836000526020600020918201910161227991906122ab565b5b505050565b8154818355818115116122a6578183600052602060002091820191016122a591906122ab565b5b505050565b6122cd91905b808211156122c95760008160009055506001016122b1565b5090565b905600a165627a7a7230582079153c95be2a735f5463d3c01cc00f21070fee797235e10c16e2d0340deabb910029

Deployed Bytecode

0x60606040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101c257806307a7465f14610250578063095ea7b3146102c8578063169853491461030a57806318160ddd14610333578063269aacc81461035c5780632a6dd48f146103a55780635a3f2672146104085780636352211e1461049657806370a08231146104f95780637f17b79d146105465780638da5cb5b146105695780639363c812146105be57806395d89b41146105e757806398123528146106755780639e1d52011461069e578063a3f4df7e146106de578063a9059cbb1461076c578063b2e6ceeb146107ae578063c55d0f56146107d1578063cab896dc14610808578063de65da2014610831578063e534a34b1461083b578063efef39a11461089a578063f2e23168146108b2578063f2fde38b14610922578063f76f8d781461095b575b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156101c057600080fd5b005b34156101cd57600080fd5b6101d56109e9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102155780820151818401526020810190506101fa565b50505050905090810190601f1680156102425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561025b57600080fd5b6102716004808035906020019091905050610a2c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102b4578082015181840152602081019050610299565b505050509050019250505060405180910390f35b34156102d357600080fd5b610308600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610a9d565b005b341561031557600080fd5b61031d610c30565b6040518082815260200191505060405180910390f35b341561033e57600080fd5b610346610c36565b6040518082815260200191505060405180910390f35b341561036757600080fd5b61038f6004808035906020019091908035906020019091908035906020019091905050610c40565b6040518082815260200191505060405180910390f35b34156103b057600080fd5b6103c66004808035906020019091905050610c95565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561041357600080fd5b61043f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cd2565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610482578082015181840152602081019050610467565b505050509050019250505060405180910390f35b34156104a157600080fd5b6104b76004808035906020019091905050610d6f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050457600080fd5b610530600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ded565b6040518082815260200191505060405180910390f35b341561055157600080fd5b6105676004808035906020019091905050610e39565b005b341561057457600080fd5b61057c610e9e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105c957600080fd5b6105d1610ec3565b6040518082815260200191505060405180910390f35b34156105f257600080fd5b6105fa610ec9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561063a57808201518184015260208101905061061f565b50505050905090810190601f1680156106675780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561068057600080fd5b610688610f0c565b6040518082815260200191505060405180910390f35b34156106a957600080fd5b6106c86004808035906020019091908035906020019091905050610f12565b6040518082815260200191505060405180910390f35b34156106e957600080fd5b6106f1610f43565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610731578082015181840152602081019050610716565b50505050905090810190601f16801561075e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561077757600080fd5b6107ac600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610f7c565b005b34156107b957600080fd5b6107cf6004808035906020019091905050610fcf565b005b34156107dc57600080fd5b6107f26004808035906020019091905050610ffa565b6040518082815260200191505060405180910390f35b341561081357600080fd5b61081b61104a565b6040518082815260200191505060405180910390f35b610839611050565b005b341561084657600080fd5b6108846004808035906020019091908035906020019091908035906020019091908035906020019091908035600019169060200190919050506111db565b6040518082815260200191505060405180910390f35b6108b060048080359060200190919050506113bd565b005b34156108bd57600080fd5b6108d3600480803590602001909190505061189a565b6040518089815260200188815260200187815260200186815260200185815260200184815260200183815260200182600019166000191681526020019850505050505050505060405180910390f35b341561092d57600080fd5b610959600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506118e2565b005b341561096657600080fd5b61096e611a37565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109ae578082015181840152602081019050610993565b50505050905090810190601f1680156109db5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109f161222b565b6040805190810160405280600981526020017f5374617220436172640000000000000000000000000000000000000000000000815250905090565b610a3461223f565b600b6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a9157602002820191906000526020600020905b815481526020019060010190808311610a7d575b50505050509050919050565b6000813373ffffffffffffffffffffffffffffffffffffffff16610ac082610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515610ae257600080fd5b610aeb83610d6f565b91508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515610b2857600080fd5b6000610b3384610c95565b73ffffffffffffffffffffffffffffffffffffffff16141580610b6d575060008473ffffffffffffffffffffffffffffffffffffffff1614155b15610c2a57836003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a35b50505050565b60085481565b6000600154905090565b6000610c8c82610c7e86610c706064610c62898b611a7090919063ffffffff16565b611aab90919063ffffffff16565b611ac690919063ffffffff16565b611aab90919063ffffffff16565b90509392505050565b60006003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610cda61223f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610d6357602002820191906000526020600020905b815481526020019060010190808311610d4f575b50505050509050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610de457600080fd5b80915050919050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e9457600080fd5b8060068190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b610ed161222b565b6040805190810160405280600481526020017f4341524400000000000000000000000000000000000000000000000000000000815250905090565b60095481565b600b60205281600052604060002081815481101515610f2d57fe5b9060005260206000209001600091509150505481565b6040805190810160405280600981526020017f537461722043617264000000000000000000000000000000000000000000000081525081565b803373ffffffffffffffffffffffffffffffffffffffff16610f9d82610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515610fbf57600080fd5b610fca338484611adf565b505050565b610fd93382611c28565b1515610fe457600080fd5b610ff7610ff082610d6f565b3383611adf565b50565b6000806000831415801561101057506009548311155b151561101b57600080fd5b600a6000848152602001908152602001600020905061104281600201548260030154611c69565b915050919050565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156110ac57600080fd5b60065434101515156110bd57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050151561111e57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561123857600080fd5b600960008154600101919050819055905061010060405190810160405280828152602001878152602001600087146112705786611274565b6007545b815260200160008614611287578561128b565b6008545b8152602001848152602001600081526020014281526020018360001916815250600a6000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007019060001916905590505060008614151561135c57600b600087815260200190815260200160002080548060010182816113469190612253565b9160005260206000209001600083909190915055505b6113663382611c99565b807faa0cf86995e6b19e7fbbb6ac5cffc44c081faf206059e153ac441ea7f7e82148600a6000848152602001908152602001600020600201546040518082815260200191505060405180910390a295945050505050565b60008060008060008060008060008060008b141580156113df57506009548b11155b15156113ea57600080fd5b6113f38b610d6f565b99503373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415151561143057600080fd5b600a60008c81526020019081526020016000209850600b60008c815260200190815260200160002097506114638b610ffa565b965086341015151561147457600080fd5b86341115611520577ff3c131ad7e14b0819d605186af670423716e4ddeb85d45547c9cb910c57af708876114b18934611ac690919063ffffffff16565b604051808381526020018281526020019250505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166108fc6114fa8934611ac690919063ffffffff16565b9081150290604051600060405180830381858888f19350505050151561151f57600080fd5b5b6000896004015414158015611549575060008960010154141580611548575060008880549050115b5b156116a75760008960010154146115775761157260018980549050611d3390919063ffffffff16565b61157d565b87805490505b955061158e878a6004015488610c40565b9450309350600092505b85831015611675576115d8888054905084146115cd5788848154811015156115bc57fe5b9060005260206000209001546115d3565b89600101545b610d6f565b93508373ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050151561161a57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff167fb70dbf0e62ac2891fc0dccea9117219168105932d8f1537152476ad5e9f7a19d866040518082815260200191505060405180910390a28280600101935050611598565b61169e61168b8787611a7090919063ffffffff16565b8a60050154611d3390919063ffffffff16565b89600501819055505b6116cc6116bd8787611a7090919063ffffffff16565b88611ac690919063ffffffff16565b91506116e2601483611aab90919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561174557600080fd5b8973ffffffffffffffffffffffffffffffffffffffff166108fc6117728385611ac690919063ffffffff16565b9081150290604051600060405180830381858888f19350505050151561179757600080fd5b6117c560646117b78b600301548c60020154611a7090919063ffffffff16565b611aab90919063ffffffff16565b89600201819055504289600601819055506117e18a338d611adf565b8a7f0282563bd47b4d3d190c4e341daf0441684e1d78088c1ab272bf4d9699b82f70888b600201548d33604051808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a25050505050505050505050565b600a6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561193d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561197957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040805190810160405280600481526020017f434152440000000000000000000000000000000000000000000000000000000081525081565b6000806000841415611a855760009150611aa4565b8284029050828482811515611a9657fe5b04141515611aa057fe5b8091505b5092915050565b6000808284811515611ab957fe5b0490508091505092915050565b6000828211151515611ad457fe5b818303905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b1b57600080fd5b611b2481610d6f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b5e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff16611b7e82610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515611ba057600080fd5b611baa8382611d51565b611bb48382611e3a565b611bbe82826120c1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008273ffffffffffffffffffffffffffffffffffffffff16611c4a83610c95565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000611c916064611c838486611a7090919063ffffffff16565b611aab90919063ffffffff16565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611cd557600080fd5b611cdf82826120c1565b8173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808284019050838110151515611d4757fe5b8091505092915050565b8173ffffffffffffffffffffffffffffffffffffffff16611d7182610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515611d9357600080fd5b60006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b60008060008473ffffffffffffffffffffffffffffffffffffffff16611e5f85610d6f565b73ffffffffffffffffffffffffffffffffffffffff16141515611e8157600080fd5b60056000858152602001908152602001600020549250611eb36001611ea587610ded565b611ac690919063ffffffff16565b9150600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515611f0157fe5b906000526020600020900154905060006002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481101515611faf57fe5b9060005260206000209001819055506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561200c57fe5b906000526020600020900181905550600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361206d919061227f565b50600060056000868152602001908152602001600020819055508260056000838152602001908152602001600020819055506120b460018054611ac690919063ffffffff16565b6001819055505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561213057600080fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061218b83610ded565b9050600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060010182816121de9190612253565b91600052602060002090016000849091909150555080600560008481526020019081526020016000208190555061222060018054611d3390919063ffffffff16565b600181905550505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b81548183558181151161227a5781836000526020600020918201910161227991906122ab565b5b505050565b8154818355818115116122a6578183600052602060002091820191016122a591906122ab565b5b505050565b6122cd91905b808211156122c95760008160009055506001016122b1565b5090565b905600a165627a7a7230582079153c95be2a735f5463d3c01cc00f21070fee797235e10c16e2d0340deabb910029

Swarm Source

bzzr://79153c95be2a735f5463d3c01cc00f21070fee797235e10c16e2d0340deabb91
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.