ETH Price: $3,582.10 (-0.99%)

Token

ERC-20: CryptoCountries.io Cities (CC2)
 

Overview

Max Total Supply

67 CC2

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
0 CC2

Value
$0.00
0x72de76b7493915eaa185fc76acff387422f9d7b5
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:
CityToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

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

pragma solidity ^0.4.24;
/* CryptoCountries.io Cities */

library SafeMath {
  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;
  }

  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;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

contract Managed {
  event DeclareEmergency (string _reason);
  event ResolveEmergency ();

  address private addressOfOwner;
  address[] private addressesOfAdmins;
  bool private isInEmergency;

  constructor () public {
    addressOfOwner = msg.sender;
    isInEmergency = false;
  }

  /* Modifiers */
  modifier onlyOwner () {
    require(addressOfOwner == msg.sender);
    _;
  }

  modifier onlyAdmins () {
    require(isAdmin(msg.sender));
    _;
  }

  modifier notEmergency () {
    require(!isInEmergency);
    _;
  }

  /* Admin */
  function transferOwnership (address _owner) onlyOwner() public {
    clearAdmins();
    addressOfOwner = _owner;
  }

  function addAdmin (address _admin) onlyOwner() public {
    addressesOfAdmins.push(_admin);
  }

  function removeAdmin (address _admin) onlyOwner() public {
    require(isAdmin(_admin));

    uint256 length = addressesOfAdmins.length;
    address swap = addressesOfAdmins[length - 1];
    uint256 index = 0;

    for (uint256 i = 0; i < length; i++) {
      if (addressesOfAdmins[i] == _admin) {
        index = i;
      }
    }

    addressesOfAdmins[index] = swap;
    delete addressesOfAdmins[length - 1];
    addressesOfAdmins.length--;
  }

  function clearAdmins () onlyOwner() public {
    require(addressesOfAdmins.length > 0);
    addressesOfAdmins.length = 0;
  }

  /* Emergency protocol */
  function declareEmergency (string _reason) onlyOwner() public {
    require(!isInEmergency);
    isInEmergency = true;
    emit DeclareEmergency(_reason);
  }

  function resolveEmergency () onlyOwner() public {
    require(isInEmergency);
    isInEmergency = false;
    emit ResolveEmergency();
  }

  /* Read */
  function owner () public view returns (address _owner) {
    return addressOfOwner;
  }

  function admins () public view returns (address[] _admins) {
    return addressesOfAdmins;
  }

  function emergency () public view returns (bool _emergency) {
    return isInEmergency;
  }

  function isAdmin (address _admin) public view returns (bool _isAdmin) {
    if (_admin == addressOfOwner) {
      return true;
    }

    for (uint256 i = 0; i < addressesOfAdmins.length; i++) {
      if (addressesOfAdmins[i] == _admin) {
        return true;
      }
    }

    return false;
  }
}

interface ICountryToken {
  function ownerOf (uint256) external view returns (address);
  function priceOf (uint256) external view returns (uint256);
}

contract CityToken is Managed {
  using SafeMath for uint256;

  event List (uint256 indexed _itemId, address indexed _owner, uint256 _price);
  event Bought (uint256 indexed _itemId, address indexed _owner, uint256 _price);
  event Sold (uint256 indexed _itemId, address indexed _owner, uint256 _price);
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

  ICountryToken private countryToken;
  bool private erc721Enabled = false;

  uint256[] private listedItems;
  mapping (uint256 => address) private ownerOfItem;
  mapping (uint256 => uint256) private priceOfItem;
  mapping (uint256 => uint256) private countryOfItem;
  mapping (uint256 => uint256[]) private itemsOfCountry;
  mapping (uint256 => address) private approvedOfItem;

  /* Constructor */
  constructor () public {
  }

  /* Modifiers */
  modifier hasCountryToken () {
    require(countryToken != address(0));
    _;
  }

  modifier onlyERC721() {
    require(erc721Enabled);
    _;
  }

  /* Initilization */
  function setCountryToken (address _countryToken) onlyOwner() public {
    countryToken = ICountryToken(_countryToken);
  }

  /* Withdraw */
  /*
    NOTICE: These functions withdraw the developer's cut which is left
    in the contract by `buy`. User funds are immediately sent to the old
    owner in `buy`, no user funds are left in the contract.
  */
  function withdrawAll () onlyOwner() public {
    owner().transfer(address(this).balance);
  }

  function withdrawAmount (uint256 _amount) onlyOwner() public {
    owner().transfer(_amount);
  }

  // Unlocks ERC721 behaviour, allowing for trading on third party platforms.
  function enableERC721 () onlyOwner() public {
    erc721Enabled = true;
  }

  /* Listing */
  function listMultipleItems (uint256[] _itemIds, uint256[] _countryIds, uint256 _price, address _owner) onlyAdmins() notEmergency() hasCountryToken() external {
    require(_itemIds.length == _countryIds.length);

    for (uint256 i = 0; i < _itemIds.length; i++) {
      listItem(_itemIds[i], _countryIds[i], _price, _owner);
    }
  }

  function listItem (uint256 _itemId, uint256 _countryId, uint256 _price, address _owner) onlyAdmins() notEmergency() hasCountryToken() public {
    require(countryToken != address(0));
    require(_price > 0);
    require(priceOf(_itemId) == 0);
    require(ownerOf(_itemId) == address(0));
    require(countryToken.ownerOf(_countryId) != address(0));
    require(countryToken.priceOf(_countryId) > 0);

    ownerOfItem[_itemId] = _owner;
    priceOfItem[_itemId] = _price;
    countryOfItem[_itemId] = _countryId;

    listedItems.push(_itemId);
    itemsOfCountry[_countryId].push(_itemId);

    emit List(_itemId, _owner, _price);
  }

  /* Market */
  function calculateNextPrice (uint256 _price) public pure returns (uint256 _nextPrice) {
    return _price.mul(120).div(94);
  }

  function calculateDevCut (uint256 _price) public pure returns (uint256 _devCut) {
    return _price.mul(3).div(100); // 3%
  }

  function calculateCountryCut (uint256 _price) public pure returns (uint256 _countryCut) {
    return _price.mul(3).div(100); // 3%
  }

  function buy (uint256 _itemId) notEmergency() hasCountryToken() payable public {
    require(priceOf(_itemId) > 0);
    require(ownerOf(_itemId) != address(0));
    require(msg.value >= priceOf(_itemId));
    require(ownerOf(_itemId) != msg.sender);
    require(msg.sender != address(0));
    require(countryToken.ownerOf(countryOf(_itemId)) != address(0));

    address oldOwner = ownerOf(_itemId);
    address newOwner = msg.sender;
    address countryOwner = countryToken.ownerOf(countryOf(_itemId));
    uint256 price = priceOf(_itemId);
    uint256 excess = msg.value.sub(price);

    _transfer(oldOwner, newOwner, _itemId);
    priceOfItem[_itemId] = nextPriceOf(_itemId);

    emit Bought(_itemId, newOwner, price);
    emit Sold(_itemId, oldOwner, price);

    uint256 devCut = calculateDevCut(price);
    uint256 countryCut = calculateCountryCut(price);
    uint256 totalCut = devCut + countryCut;

    countryOwner.transfer(countryCut);
    oldOwner.transfer(price.sub(totalCut));

    if (excess > 0) {
      newOwner.transfer(excess);
    }
  }

  /* Read */
  function tokenExists (uint256 _itemId) public view returns (bool _exists) {
    return priceOf(_itemId) > 0;
  }

  function countrySupply (uint256 _countryId) public view returns (uint256 _countrySupply) {
    return itemsOfCountry[_countryId].length;
  }

  function priceOf (uint256 _itemId) public view returns (uint256 _price) {
    return priceOfItem[_itemId];
  }

  function nextPriceOf (uint256 _itemId) public view returns (uint256 _nextPrice) {
    return calculateNextPrice(priceOf(_itemId));
  }

  function countryOf (uint256 _itemId) public view returns (uint256 _countryId) {
    return countryOfItem[_itemId];
  }

  function allOf (uint256 _itemId) external view returns (address _owner, uint256 _price, uint256 _nextPrice, uint256 _countryId) {
    return (ownerOf(_itemId), priceOf(_itemId), nextPriceOf(_itemId), countryOf(_itemId));
  }

  function allItems (uint256 _from, uint256 _take) public view returns (uint256[] _items) {
    if (totalSupply() == 0) {
      return new uint256[](0);
    }

    uint256[] memory items = new uint256[](_take);

    for (uint256 i = 0; i < _take; i++) {
      items[i] = listedItems[_from + i];
    }

    return items;
  }

  function countryItems (uint256 _countryId, uint256 _from, uint256 _take) public view returns (uint256[] _items) {
    if (countrySupply(_countryId) == 0) {
      return new uint256[](0);
    }

    uint256[] memory items = new uint256[](_take);

    for (uint256 i = 0; i < _take; i++) {
      items[i] = itemsOfCountry[_countryId][_from + i];
    }

    return items;
  }

  function tokensOf (address _owner) public view returns (uint256[] _tokenIds) {
    uint256[] memory items = new uint256[](balanceOf(_owner));

    uint256 itemCounter = 0;
    for (uint256 i = 0; i < listedItems.length; i++) {
      if (ownerOf(listedItems[i]) == _owner) {
        items[itemCounter] = listedItems[i];
        itemCounter += 1;
      }
    }

    return items;
  }

  /* ERC721 */
  function implementsERC721 () public view returns (bool _implements) {
    return erc721Enabled;
  }

  function balanceOf (address _owner) public view returns (uint256 _balance) {
    uint256 counter = 0;

    for (uint256 i = 0; i < listedItems.length; i++) {
      if (ownerOf(listedItems[i]) == _owner) {
        counter++;
      }
    }

    return counter;
  }

  function ownerOf (uint256 _itemId) public view returns (address _owner) {
    return ownerOfItem[_itemId];
  }

  function transfer(address _to, uint256 _itemId) onlyERC721() public {
    require(msg.sender == ownerOf(_itemId));
    _transfer(msg.sender, _to, _itemId);
  }

  function transferFrom(address _from, address _to, uint256 _itemId) onlyERC721() public {
    require(getApproved(_itemId) == msg.sender);
    _transfer(_from, _to, _itemId);
  }

  function approve(address _to, uint256 _itemId) onlyERC721() public {
    require(msg.sender != _to);
    require(tokenExists(_itemId));
    require(ownerOf(_itemId) == msg.sender);

    if (_to == 0) {
      if (approvedOfItem[_itemId] != 0) {
        delete approvedOfItem[_itemId];
        emit Approval(msg.sender, 0, _itemId);
      }
    } else {
      approvedOfItem[_itemId] = _to;
      emit Approval(msg.sender, _to, _itemId);
    }
  }

  function getApproved (uint256 _itemId) public view returns (address _approved) {
    require(tokenExists(_itemId));
    return approvedOfItem[_itemId];
  }

  function name () public pure returns (string _name) {
    return "CryptoCountries.io Cities";
  }

  function symbol () public pure returns (string _symbol) {
    return "CC2";
  }

  function tokenURI (uint256 _itemId) public pure returns (string) {
    return _concat("https://cryptocountries.io/api/metadata/city/", _uintToString(_itemId));
  }

  function totalSupply () public view returns (uint256 _totalSupply) {
    return listedItems.length;
  }

  function tokenByIndex (uint256 _index) public view returns (uint256 _itemId) {
    require(_index < totalSupply());
    return listedItems[_index];
  }

  function tokenOfOwnerByIndex (address _owner, uint256 _index) public view returns (uint256 _itemId) {
    require(_index < balanceOf(_owner));

    uint count = 0;
    for (uint i = 0; i < listedItems.length; i++) {
      uint itemId = listedItems[i];
      if (ownerOf(itemId) == _owner) {
        if (count == _index) { return itemId; }
        count += 1;
      }
    }

    assert(false);
  }

  /* Internal */
  function _transfer(address _from, address _to, uint256 _itemId) internal {
    require(tokenExists(_itemId));
    require(ownerOf(_itemId) == _from);
    require(_to != address(0));
    require(_to != address(this));

    ownerOfItem[_itemId] = _to;
    approvedOfItem[_itemId] = 0;

    emit Transfer(_from, _to, _itemId);
  }

  function _uintToString (uint i) internal pure returns (string) {
		if (i == 0) return "0";

		uint j = i;
		uint len;
		while (j != 0){
			len++;
			j /= 10;
		}

		bytes memory bstr = new bytes(len);

		uint k = len - 1;
		while (i != 0) {
			bstr[k--] = byte(48 + i % 10);
			i /= 10;
		}

		return string(bstr);
  }

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

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"tokenExists","outputs":[{"name":"_exists","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdrawAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"_approved","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"_implements","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"clearAdmins","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"resolveEmergency","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_admin","type":"address"}],"name":"isAdmin","outputs":[{"name":"_isAdmin","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"allOf","outputs":[{"name":"_owner","type":"address"},{"name":"_price","type":"uint256"},{"name":"_nextPrice","type":"uint256"},{"name":"_countryId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"_itemId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_countryToken","type":"address"}],"name":"setCountryToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateCountryCut","outputs":[{"name":"_countryCut","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"_itemId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_countryId","type":"uint256"},{"name":"_from","type":"uint256"},{"name":"_take","type":"uint256"}],"name":"countryItems","outputs":[{"name":"_items","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOf","outputs":[{"name":"_tokenIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"nextPriceOf","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateDevCut","outputs":[{"name":"_devCut","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_countryId","type":"uint256"}],"name":"countrySupply","outputs":[{"name":"_countrySupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_admin","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableERC721","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemId","type":"uint256"},{"name":"_countryId","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"}],"name":"listItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_reason","type":"string"}],"name":"declareEmergency","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admins","outputs":[{"name":"_admins","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"_price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"emergency","outputs":[{"name":"_emergency","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"uint256"},{"name":"_take","type":"uint256"}],"name":"allItems","outputs":[{"name":"_items","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateNextPrice","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemIds","type":"uint256[]"},{"name":"_countryIds","type":"uint256[]"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"}],"name":"listMultipleItems","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"countryOf","outputs":[{"name":"_countryId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"List","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"Sold","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":false,"name":"_reason","type":"string"}],"name":"DeclareEmergency","type":"event"},{"anonymous":false,"inputs":[],"name":"ResolveEmergency","type":"event"}]

60806040526002805460a860020a60ff021916905534801561002057600080fd5b5060008054600160a060020a031916331790556002805460ff19169055611f388061004c6000396000f3006080604052600436106101e95763ffffffff60e060020a600035041662923f9e81146101ee5780630562b9f71461021a57806306fdde0314610234578063081812fc146102be578063095ea7b3146102f25780631051db34146103165780631114fce51461032b57806315c73afd146103405780631785f53c1461035557806318160ddd1461037657806323b872dd1461039d57806324d7806c146103c75780632e4f43bf146103e85780632f745c5914610430578063320e028d1461045457806349f73d3d146104755780634f6ccce71461048d57806354b8dd66146104a55780635a3f2672146105135780635ba9e48e146105345780636352211e1461054c57806365121205146104755780636d2c51a714610564578063704802751461057c57806370a082311461059d57806371dc761e146105be57806383d8bae3146105d3578063853828b6146105fd5780638da5cb5b1461061257806395d89b4114610627578063a55231f41461063c578063a5de361914610695578063a9059cbb146106aa578063b9186d7d146106ce578063c87b56dd146106e6578063caa6fea4146106fe578063d96a094a14610713578063de21cd781461071e578063e08503ec14610739578063f2fde38b14610751578063f567a72a14610772578063fce48558146107ad575b600080fd5b3480156101fa57600080fd5b506102066004356107c5565b604080519115158252519081900360200190f35b34801561022657600080fd5b506102326004356107d8565b005b34801561024057600080fd5b50610249610833565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028357818101518382015260200161026b565b50505050905090810190601f1680156102b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ca57600080fd5b506102d660043561086b565b60408051600160a060020a039092168252519081900360200190f35b3480156102fe57600080fd5b50610232600160a060020a036004351660243561089d565b34801561032257600080fd5b506102066109e5565b34801561033757600080fd5b506102326109f5565b34801561034c57600080fd5b50610232610a2b565b34801561036157600080fd5b50610232600160a060020a0360043516610a88565b34801561038257600080fd5b5061038b610bb1565b60408051918252519081900360200190f35b3480156103a957600080fd5b50610232600160a060020a0360043581169060243516604435610bb7565b3480156103d357600080fd5b50610206600160a060020a0360043516610bfc565b3480156103f457600080fd5b50610400600435610c7c565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b34801561043c57600080fd5b5061038b600160a060020a0360043516602435610cb5565b34801561046057600080fd5b50610232600160a060020a0360043516610d4c565b34801561048157600080fd5b5061038b600435610d98565b34801561049957600080fd5b5061038b600435610dc2565b3480156104b157600080fd5b506104c3600435602435604435610df7565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104ff5781810151838201526020016104e7565b505050509050019250505060405180910390f35b34801561051f57600080fd5b506104c3600160a060020a0360043516610eaf565b34801561054057600080fd5b5061038b600435610f82565b34801561055857600080fd5b506102d6600435610f95565b34801561057057600080fd5b5061038b600435610fb0565b34801561058857600080fd5b50610232600160a060020a0360043516610fc2565b3480156105a957600080fd5b5061038b600160a060020a036004351661102a565b3480156105ca57600080fd5b5061023261107a565b3480156105df57600080fd5b50610232600435602435604435600160a060020a03606435166110b8565b34801561060957600080fd5b50610232611364565b34801561061e57600080fd5b506102d66113bb565b34801561063357600080fd5b506102496113ca565b34801561064857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102329436949293602493928401919081908401838280828437509497506114019650505050505050565b3480156106a157600080fd5b506104c36114d0565b3480156106b657600080fd5b50610232600160a060020a0360043516602435611532565b3480156106da57600080fd5b5061038b600435611572565b3480156106f257600080fd5b50610249600435611584565b34801561070a57600080fd5b506102066115f4565b6102326004356115fd565b34801561072a57600080fd5b506104c360043560243561198c565b34801561074557600080fd5b5061038b600435611a36565b34801561075d57600080fd5b50610232600160a060020a0360043516611a4e565b34801561077e57600080fd5b506102326024600480358281019290820135918135918201910135604435600160a060020a0360643516611a8f565b3480156107b957600080fd5b5061038b600435611b2c565b6000806107d183611572565b1192915050565b600054600160a060020a031633146107ef57600080fd5b6107f76113bb565b600160a060020a03166108fc829081150290604051600060405180830381858888f1935050505015801561082f573d6000803e3d6000fd5b5050565b60408051808201909152601981527f43727970746f436f756e74726965732e696f204369746965730000000000000060208201525b90565b6000610876826107c5565b151561088157600080fd5b50600090815260086020526040902054600160a060020a031690565b60025460a860020a900460ff1615156108b557600080fd5b33600160a060020a03831614156108cb57600080fd5b6108d4816107c5565b15156108df57600080fd5b336108e982610f95565b600160a060020a0316146108fc57600080fd5b600160a060020a038216151561097f57600081815260086020526040902054600160a060020a03161561097a5760008181526008602090815260408083208054600160a060020a03191690558051848152905133927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b61082f565b6000818152600860209081526040918290208054600160a060020a031916600160a060020a03861690811790915582518481529251909233927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a35050565b60025460a860020a900460ff1690565b600054600160a060020a03163314610a0c57600080fd5b600154600010610a1b57600080fd5b6000610a28600182611ecf565b50565b600054600160a060020a03163314610a4257600080fd5b60025460ff161515610a5357600080fd5b6002805460ff191690556040517fcd1edd3018973cd5506b3cbfbd904dac48d81ad72345b4f4e0b08b198e787e2f90600090a1565b60008054819081908190600160a060020a03163314610aa657600080fd5b610aaf85610bfc565b1515610aba57600080fd5b6001805494506000198501858110610ace57fe5b6000918252602082200154600160a060020a0316935091508190505b83811015610b325784600160a060020a0316600182815481101515610b0b57fe5b600091825260209091200154600160a060020a03161415610b2a578091505b600101610aea565b82600183815481101515610b4257fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600180546000198601908110610b7d57fe5b60009182526020909120018054600160a060020a03191690556001805490610ba9906000198301611ecf565b505050505050565b60035490565b60025460a860020a900460ff161515610bcf57600080fd5b33610bd98261086b565b600160a060020a031614610bec57600080fd5b610bf7838383611b3e565b505050565b600080548190600160a060020a0384811691161415610c1e5760019150610c76565b5060005b600154811015610c715782600160a060020a0316600182815481101515610c4557fe5b600091825260209091200154600160a060020a03161415610c695760019150610c76565b600101610c22565b600091505b50919050565b600080600080610c8b85610f95565b610c9486611572565b610c9d87610f82565b610ca688611b2c565b93509350935093509193509193565b600080600080610cc48661102a565b8510610ccf57600080fd5b60009250600091505b600354821015610d41576003805483908110610cf057fe5b9060005260206000200154905085600160a060020a0316610d1082610f95565b600160a060020a03161415610d365784831415610d2f57809350610d43565b6001830192505b600190910190610cd8565bfe5b50505092915050565b600054600160a060020a03163314610d6357600080fd5b60028054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000610dbc6064610db084600363ffffffff611c1a16565b9063ffffffff611c4c16565b92915050565b6000610dcc610bb1565b8210610dd757600080fd5b6003805483908110610de557fe5b90600052602060002001549050919050565b6060806000610e0586610fb0565b1515610e21576040805160008152602081019091529250610ea6565b83604051908082528060200260200182016040528015610e4b578160200160208202803883390190505b509150600090505b83811015610ea25760008681526007602052604090208054868301908110610e7757fe5b90600052602060002001548282815181101515610e9057fe5b60209081029091010152600101610e53565b8192505b50509392505050565b606080600080610ebe8561102a565b604051908082528060200260200182016040528015610ee7578160200160208202803883390190505b50925060009150600090505b600354811015610f795784600160a060020a0316610f29600383815481101515610f1957fe5b9060005260206000200154610f95565b600160a060020a03161415610f71576003805482908110610f4657fe5b90600052602060002001548383815181101515610f5f57fe5b60209081029091010152600191909101905b600101610ef3565b50909392505050565b6000610dbc610f9083611572565b611a36565b600090815260046020526040902054600160a060020a031690565b60009081526007602052604090205490565b600054600160a060020a03163314610fd957600080fd5b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6018054600160a060020a031916600160a060020a0392909216919091179055565b600080805b6003548110156110735783600160a060020a0316611055600383815481101515610f1957fe5b600160a060020a0316141561106b576001909101905b60010161102f565b5092915050565b600054600160a060020a0316331461109157600080fd5b6002805475ff000000000000000000000000000000000000000000191660a860020a179055565b6110c133610bfc565b15156110cc57600080fd5b60025460ff16156110dc57600080fd5b6002546101009004600160a060020a031615156110f857600080fd5b6002546101009004600160a060020a0316151561111457600080fd5b6000821161112157600080fd5b61112a84611572565b1561113457600080fd5b600061113f85610f95565b600160a060020a03161461115257600080fd5b600254604080517f6352211e0000000000000000000000000000000000000000000000000000000081526004810186905290516000926101009004600160a060020a031691636352211e91602480830192602092919082900301818787803b1580156111bd57600080fd5b505af11580156111d1573d6000803e3d6000fd5b505050506040513d60208110156111e757600080fd5b5051600160a060020a031614156111fd57600080fd5b600254604080517fb9186d7d0000000000000000000000000000000000000000000000000000000081526004810186905290516000926101009004600160a060020a03169163b9186d7d91602480830192602092919082900301818787803b15801561126857600080fd5b505af115801561127c573d6000803e3d6000fd5b505050506040513d602081101561129257600080fd5b50511161129e57600080fd5b60008481526004602090815260408083208054600160a060020a031916600160a060020a03861690811790915560058352818420869055600683528184208790556003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0189905587855260078452828520805491820181558552938390209093018790558051858152905187927f656fea2aeb2af9841f5b2d9a77be15564d1a00f76fff68c5435aec927eb4d5d6928290030190a350505050565b600054600160a060020a0316331461137b57600080fd5b6113836113bb565b604051600160a060020a039190911690303180156108fc02916000818181858888f19350505050158015610a28573d6000803e3d6000fd5b600054600160a060020a031690565b60408051808201909152600381527f4343320000000000000000000000000000000000000000000000000000000000602082015290565b600054600160a060020a0316331461141857600080fd5b60025460ff161561142857600080fd5b6002805460ff1916600117905560408051602080825283518183015283517f8892ac824b5e54f09f85ea6b8f828f57615a4a95070a702c56ac74d15d4f10e4938593928392918301919085019080838360005b8381101561149357818101518382015260200161147b565b50505050905090810190601f1680156114c05780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b6060600180548060200260200160405190810160405280929190818152602001828054801561152857602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161150a575b5050505050905090565b60025460a860020a900460ff16151561154a57600080fd5b61155381610f95565b600160a060020a0316331461156757600080fd5b61082f338383611b3e565b60009081526005602052604090205490565b6060610dbc606060405190810160405280602d81526020017f68747470733a2f2f63727970746f636f756e74726965732e696f2f6170692f6d81526020017f657461646174612f636974792f000000000000000000000000000000000000008152506115ef84611c63565b611d6e565b60025460ff1690565b600254600090819081908190819081908190819060ff161561161e57600080fd5b6002546101009004600160a060020a0316151561163a57600080fd5b60006116458a611572565b1161164f57600080fd5b600061165a8a610f95565b600160a060020a0316141561166e57600080fd5b61167789611572565b34101561168357600080fd5b3361168d8a610f95565b600160a060020a031614156116a157600080fd5b3315156116ad57600080fd5b6002546000906101009004600160a060020a0316636352211e6116cf8c611b2c565b6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561170857600080fd5b505af115801561171c573d6000803e3d6000fd5b505050506040513d602081101561173257600080fd5b5051600160a060020a0316141561174857600080fd5b61175189610f95565b6002549098503397506101009004600160a060020a0316636352211e6117768b611b2c565b6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b505050506040513d60208110156117d957600080fd5b505195506117e689611572565b94506117f8348663ffffffff611ebd16565b935061180588888b611b3e565b61180e89610f82565b600560008b81526020019081526020016000208190555086600160a060020a0316897fd2728f908c7e0feb83c6278798370fcb86b62f236c9dbf1a3f541096c2159040876040518082815260200191505060405180910390a3604080518681529051600160a060020a038a16918b917f66f5cd880edf48cdde6c966e5da0784fcc4c5e85572b8b3b62c4357798d447d79181900360200190a36118b085610d98565b92506118bb85610d98565b6040519092508383019150600160a060020a0387169083156108fc029084906000818181858888f193505050501580156118f9573d6000803e3d6000fd5b50600160a060020a0388166108fc611917878463ffffffff611ebd16565b6040518115909202916000818181858888f1935050505015801561193f573d6000803e3d6000fd5b50600084111561198157604051600160a060020a0388169085156108fc029086906000818181858888f1935050505015801561197f573d6000803e3d6000fd5b505b505050505050505050565b6060806000611999610bb1565b15156119b5576040805160008152602081019091529250611a2e565b836040519080825280602002602001820160405280156119df578160200160208202803883390190505b509150600090505b83811015611a2a57600380548683019081106119ff57fe5b90600052602060002001548282815181101515611a1857fe5b602090810290910101526001016119e7565b8192505b505092915050565b6000610dbc605e610db084607863ffffffff611c1a16565b600054600160a060020a03163314611a6557600080fd5b611a6d6109f5565b60008054600160a060020a031916600160a060020a0392909216919091179055565b6000611a9a33610bfc565b1515611aa557600080fd5b60025460ff1615611ab557600080fd5b6002546101009004600160a060020a03161515611ad157600080fd5b858414611add57600080fd5b5060005b85811015611b2357611b1b878783818110611af857fe5b905060200201358686848181101515611b0d57fe5b9050602002013585856110b8565b600101611ae1565b50505050505050565b60009081526006602052604090205490565b611b47816107c5565b1515611b5257600080fd5b82600160a060020a0316611b6582610f95565b600160a060020a031614611b7857600080fd5b600160a060020a0382161515611b8d57600080fd5b600160a060020a038216301415611ba357600080fd5b60008181526004602090815260408083208054600160a060020a03808816600160a060020a031992831681179093556008855294839020805490911690558151858152915190938716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a3505050565b600080831515611c2d5760009150611073565b50828202828482811515611c3d57fe5b0414611c4557fe5b9392505050565b6000808284811515611c5a57fe5b04949350505050565b60606000808281851515611cac5760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450611d65565b8593505b8315611cc757600190920191600a84049350611cb0565b826040519080825280601f01601f191660200182016040528015611cf5578160200160208202803883390190505b5091505060001982015b8515611d6157815160001982019160f860020a6030600a8a060102918491908110611d2657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86049550611cff565b8194505b50505050919050565b606080606080606060008088955087945084518651016040519080825280601f01601f191660200182016040528015611db1578160200160208202803883390190505b50935083925060009150600090505b8551811015611e36578581815181101515611dd757fe5b90602001015160f860020a900460f860020a028383806001019450815181101515611dfe57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611dc0565b5060005b8451811015611eb0578481815181101515611e5157fe5b90602001015160f860020a900460f860020a028383806001019450815181101515611e7857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611e3a565b5090979650505050505050565b600082821115611ec957fe5b50900390565b815481835581811115610bf757600083815260209020610bf791810190830161086891905b80821115611f085760008155600101611ef4565b50905600a165627a7a72305820dbb7c5f77cafc38fe8a52b4fdedc19d1906b2e63ac88af071819189f778d35a30029

Deployed Bytecode

0x6080604052600436106101e95763ffffffff60e060020a600035041662923f9e81146101ee5780630562b9f71461021a57806306fdde0314610234578063081812fc146102be578063095ea7b3146102f25780631051db34146103165780631114fce51461032b57806315c73afd146103405780631785f53c1461035557806318160ddd1461037657806323b872dd1461039d57806324d7806c146103c75780632e4f43bf146103e85780632f745c5914610430578063320e028d1461045457806349f73d3d146104755780634f6ccce71461048d57806354b8dd66146104a55780635a3f2672146105135780635ba9e48e146105345780636352211e1461054c57806365121205146104755780636d2c51a714610564578063704802751461057c57806370a082311461059d57806371dc761e146105be57806383d8bae3146105d3578063853828b6146105fd5780638da5cb5b1461061257806395d89b4114610627578063a55231f41461063c578063a5de361914610695578063a9059cbb146106aa578063b9186d7d146106ce578063c87b56dd146106e6578063caa6fea4146106fe578063d96a094a14610713578063de21cd781461071e578063e08503ec14610739578063f2fde38b14610751578063f567a72a14610772578063fce48558146107ad575b600080fd5b3480156101fa57600080fd5b506102066004356107c5565b604080519115158252519081900360200190f35b34801561022657600080fd5b506102326004356107d8565b005b34801561024057600080fd5b50610249610833565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561028357818101518382015260200161026b565b50505050905090810190601f1680156102b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ca57600080fd5b506102d660043561086b565b60408051600160a060020a039092168252519081900360200190f35b3480156102fe57600080fd5b50610232600160a060020a036004351660243561089d565b34801561032257600080fd5b506102066109e5565b34801561033757600080fd5b506102326109f5565b34801561034c57600080fd5b50610232610a2b565b34801561036157600080fd5b50610232600160a060020a0360043516610a88565b34801561038257600080fd5b5061038b610bb1565b60408051918252519081900360200190f35b3480156103a957600080fd5b50610232600160a060020a0360043581169060243516604435610bb7565b3480156103d357600080fd5b50610206600160a060020a0360043516610bfc565b3480156103f457600080fd5b50610400600435610c7c565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b34801561043c57600080fd5b5061038b600160a060020a0360043516602435610cb5565b34801561046057600080fd5b50610232600160a060020a0360043516610d4c565b34801561048157600080fd5b5061038b600435610d98565b34801561049957600080fd5b5061038b600435610dc2565b3480156104b157600080fd5b506104c3600435602435604435610df7565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104ff5781810151838201526020016104e7565b505050509050019250505060405180910390f35b34801561051f57600080fd5b506104c3600160a060020a0360043516610eaf565b34801561054057600080fd5b5061038b600435610f82565b34801561055857600080fd5b506102d6600435610f95565b34801561057057600080fd5b5061038b600435610fb0565b34801561058857600080fd5b50610232600160a060020a0360043516610fc2565b3480156105a957600080fd5b5061038b600160a060020a036004351661102a565b3480156105ca57600080fd5b5061023261107a565b3480156105df57600080fd5b50610232600435602435604435600160a060020a03606435166110b8565b34801561060957600080fd5b50610232611364565b34801561061e57600080fd5b506102d66113bb565b34801561063357600080fd5b506102496113ca565b34801561064857600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102329436949293602493928401919081908401838280828437509497506114019650505050505050565b3480156106a157600080fd5b506104c36114d0565b3480156106b657600080fd5b50610232600160a060020a0360043516602435611532565b3480156106da57600080fd5b5061038b600435611572565b3480156106f257600080fd5b50610249600435611584565b34801561070a57600080fd5b506102066115f4565b6102326004356115fd565b34801561072a57600080fd5b506104c360043560243561198c565b34801561074557600080fd5b5061038b600435611a36565b34801561075d57600080fd5b50610232600160a060020a0360043516611a4e565b34801561077e57600080fd5b506102326024600480358281019290820135918135918201910135604435600160a060020a0360643516611a8f565b3480156107b957600080fd5b5061038b600435611b2c565b6000806107d183611572565b1192915050565b600054600160a060020a031633146107ef57600080fd5b6107f76113bb565b600160a060020a03166108fc829081150290604051600060405180830381858888f1935050505015801561082f573d6000803e3d6000fd5b5050565b60408051808201909152601981527f43727970746f436f756e74726965732e696f204369746965730000000000000060208201525b90565b6000610876826107c5565b151561088157600080fd5b50600090815260086020526040902054600160a060020a031690565b60025460a860020a900460ff1615156108b557600080fd5b33600160a060020a03831614156108cb57600080fd5b6108d4816107c5565b15156108df57600080fd5b336108e982610f95565b600160a060020a0316146108fc57600080fd5b600160a060020a038216151561097f57600081815260086020526040902054600160a060020a03161561097a5760008181526008602090815260408083208054600160a060020a03191690558051848152905133927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35b61082f565b6000818152600860209081526040918290208054600160a060020a031916600160a060020a03861690811790915582518481529251909233927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a35050565b60025460a860020a900460ff1690565b600054600160a060020a03163314610a0c57600080fd5b600154600010610a1b57600080fd5b6000610a28600182611ecf565b50565b600054600160a060020a03163314610a4257600080fd5b60025460ff161515610a5357600080fd5b6002805460ff191690556040517fcd1edd3018973cd5506b3cbfbd904dac48d81ad72345b4f4e0b08b198e787e2f90600090a1565b60008054819081908190600160a060020a03163314610aa657600080fd5b610aaf85610bfc565b1515610aba57600080fd5b6001805494506000198501858110610ace57fe5b6000918252602082200154600160a060020a0316935091508190505b83811015610b325784600160a060020a0316600182815481101515610b0b57fe5b600091825260209091200154600160a060020a03161415610b2a578091505b600101610aea565b82600183815481101515610b4257fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600180546000198601908110610b7d57fe5b60009182526020909120018054600160a060020a03191690556001805490610ba9906000198301611ecf565b505050505050565b60035490565b60025460a860020a900460ff161515610bcf57600080fd5b33610bd98261086b565b600160a060020a031614610bec57600080fd5b610bf7838383611b3e565b505050565b600080548190600160a060020a0384811691161415610c1e5760019150610c76565b5060005b600154811015610c715782600160a060020a0316600182815481101515610c4557fe5b600091825260209091200154600160a060020a03161415610c695760019150610c76565b600101610c22565b600091505b50919050565b600080600080610c8b85610f95565b610c9486611572565b610c9d87610f82565b610ca688611b2c565b93509350935093509193509193565b600080600080610cc48661102a565b8510610ccf57600080fd5b60009250600091505b600354821015610d41576003805483908110610cf057fe5b9060005260206000200154905085600160a060020a0316610d1082610f95565b600160a060020a03161415610d365784831415610d2f57809350610d43565b6001830192505b600190910190610cd8565bfe5b50505092915050565b600054600160a060020a03163314610d6357600080fd5b60028054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000610dbc6064610db084600363ffffffff611c1a16565b9063ffffffff611c4c16565b92915050565b6000610dcc610bb1565b8210610dd757600080fd5b6003805483908110610de557fe5b90600052602060002001549050919050565b6060806000610e0586610fb0565b1515610e21576040805160008152602081019091529250610ea6565b83604051908082528060200260200182016040528015610e4b578160200160208202803883390190505b509150600090505b83811015610ea25760008681526007602052604090208054868301908110610e7757fe5b90600052602060002001548282815181101515610e9057fe5b60209081029091010152600101610e53565b8192505b50509392505050565b606080600080610ebe8561102a565b604051908082528060200260200182016040528015610ee7578160200160208202803883390190505b50925060009150600090505b600354811015610f795784600160a060020a0316610f29600383815481101515610f1957fe5b9060005260206000200154610f95565b600160a060020a03161415610f71576003805482908110610f4657fe5b90600052602060002001548383815181101515610f5f57fe5b60209081029091010152600191909101905b600101610ef3565b50909392505050565b6000610dbc610f9083611572565b611a36565b600090815260046020526040902054600160a060020a031690565b60009081526007602052604090205490565b600054600160a060020a03163314610fd957600080fd5b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6018054600160a060020a031916600160a060020a0392909216919091179055565b600080805b6003548110156110735783600160a060020a0316611055600383815481101515610f1957fe5b600160a060020a0316141561106b576001909101905b60010161102f565b5092915050565b600054600160a060020a0316331461109157600080fd5b6002805475ff000000000000000000000000000000000000000000191660a860020a179055565b6110c133610bfc565b15156110cc57600080fd5b60025460ff16156110dc57600080fd5b6002546101009004600160a060020a031615156110f857600080fd5b6002546101009004600160a060020a0316151561111457600080fd5b6000821161112157600080fd5b61112a84611572565b1561113457600080fd5b600061113f85610f95565b600160a060020a03161461115257600080fd5b600254604080517f6352211e0000000000000000000000000000000000000000000000000000000081526004810186905290516000926101009004600160a060020a031691636352211e91602480830192602092919082900301818787803b1580156111bd57600080fd5b505af11580156111d1573d6000803e3d6000fd5b505050506040513d60208110156111e757600080fd5b5051600160a060020a031614156111fd57600080fd5b600254604080517fb9186d7d0000000000000000000000000000000000000000000000000000000081526004810186905290516000926101009004600160a060020a03169163b9186d7d91602480830192602092919082900301818787803b15801561126857600080fd5b505af115801561127c573d6000803e3d6000fd5b505050506040513d602081101561129257600080fd5b50511161129e57600080fd5b60008481526004602090815260408083208054600160a060020a031916600160a060020a03861690811790915560058352818420869055600683528184208790556003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0189905587855260078452828520805491820181558552938390209093018790558051858152905187927f656fea2aeb2af9841f5b2d9a77be15564d1a00f76fff68c5435aec927eb4d5d6928290030190a350505050565b600054600160a060020a0316331461137b57600080fd5b6113836113bb565b604051600160a060020a039190911690303180156108fc02916000818181858888f19350505050158015610a28573d6000803e3d6000fd5b600054600160a060020a031690565b60408051808201909152600381527f4343320000000000000000000000000000000000000000000000000000000000602082015290565b600054600160a060020a0316331461141857600080fd5b60025460ff161561142857600080fd5b6002805460ff1916600117905560408051602080825283518183015283517f8892ac824b5e54f09f85ea6b8f828f57615a4a95070a702c56ac74d15d4f10e4938593928392918301919085019080838360005b8381101561149357818101518382015260200161147b565b50505050905090810190601f1680156114c05780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b6060600180548060200260200160405190810160405280929190818152602001828054801561152857602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161150a575b5050505050905090565b60025460a860020a900460ff16151561154a57600080fd5b61155381610f95565b600160a060020a0316331461156757600080fd5b61082f338383611b3e565b60009081526005602052604090205490565b6060610dbc606060405190810160405280602d81526020017f68747470733a2f2f63727970746f636f756e74726965732e696f2f6170692f6d81526020017f657461646174612f636974792f000000000000000000000000000000000000008152506115ef84611c63565b611d6e565b60025460ff1690565b600254600090819081908190819081908190819060ff161561161e57600080fd5b6002546101009004600160a060020a0316151561163a57600080fd5b60006116458a611572565b1161164f57600080fd5b600061165a8a610f95565b600160a060020a0316141561166e57600080fd5b61167789611572565b34101561168357600080fd5b3361168d8a610f95565b600160a060020a031614156116a157600080fd5b3315156116ad57600080fd5b6002546000906101009004600160a060020a0316636352211e6116cf8c611b2c565b6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b15801561170857600080fd5b505af115801561171c573d6000803e3d6000fd5b505050506040513d602081101561173257600080fd5b5051600160a060020a0316141561174857600080fd5b61175189610f95565b6002549098503397506101009004600160a060020a0316636352211e6117768b611b2c565b6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156117af57600080fd5b505af11580156117c3573d6000803e3d6000fd5b505050506040513d60208110156117d957600080fd5b505195506117e689611572565b94506117f8348663ffffffff611ebd16565b935061180588888b611b3e565b61180e89610f82565b600560008b81526020019081526020016000208190555086600160a060020a0316897fd2728f908c7e0feb83c6278798370fcb86b62f236c9dbf1a3f541096c2159040876040518082815260200191505060405180910390a3604080518681529051600160a060020a038a16918b917f66f5cd880edf48cdde6c966e5da0784fcc4c5e85572b8b3b62c4357798d447d79181900360200190a36118b085610d98565b92506118bb85610d98565b6040519092508383019150600160a060020a0387169083156108fc029084906000818181858888f193505050501580156118f9573d6000803e3d6000fd5b50600160a060020a0388166108fc611917878463ffffffff611ebd16565b6040518115909202916000818181858888f1935050505015801561193f573d6000803e3d6000fd5b50600084111561198157604051600160a060020a0388169085156108fc029086906000818181858888f1935050505015801561197f573d6000803e3d6000fd5b505b505050505050505050565b6060806000611999610bb1565b15156119b5576040805160008152602081019091529250611a2e565b836040519080825280602002602001820160405280156119df578160200160208202803883390190505b509150600090505b83811015611a2a57600380548683019081106119ff57fe5b90600052602060002001548282815181101515611a1857fe5b602090810290910101526001016119e7565b8192505b505092915050565b6000610dbc605e610db084607863ffffffff611c1a16565b600054600160a060020a03163314611a6557600080fd5b611a6d6109f5565b60008054600160a060020a031916600160a060020a0392909216919091179055565b6000611a9a33610bfc565b1515611aa557600080fd5b60025460ff1615611ab557600080fd5b6002546101009004600160a060020a03161515611ad157600080fd5b858414611add57600080fd5b5060005b85811015611b2357611b1b878783818110611af857fe5b905060200201358686848181101515611b0d57fe5b9050602002013585856110b8565b600101611ae1565b50505050505050565b60009081526006602052604090205490565b611b47816107c5565b1515611b5257600080fd5b82600160a060020a0316611b6582610f95565b600160a060020a031614611b7857600080fd5b600160a060020a0382161515611b8d57600080fd5b600160a060020a038216301415611ba357600080fd5b60008181526004602090815260408083208054600160a060020a03808816600160a060020a031992831681179093556008855294839020805490911690558151858152915190938716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a3505050565b600080831515611c2d5760009150611073565b50828202828482811515611c3d57fe5b0414611c4557fe5b9392505050565b6000808284811515611c5a57fe5b04949350505050565b60606000808281851515611cac5760408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201529450611d65565b8593505b8315611cc757600190920191600a84049350611cb0565b826040519080825280601f01601f191660200182016040528015611cf5578160200160208202803883390190505b5091505060001982015b8515611d6157815160001982019160f860020a6030600a8a060102918491908110611d2657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86049550611cff565b8194505b50505050919050565b606080606080606060008088955087945084518651016040519080825280601f01601f191660200182016040528015611db1578160200160208202803883390190505b50935083925060009150600090505b8551811015611e36578581815181101515611dd757fe5b90602001015160f860020a900460f860020a028383806001019450815181101515611dfe57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611dc0565b5060005b8451811015611eb0578481815181101515611e5157fe5b90602001015160f860020a900460f860020a028383806001019450815181101515611e7857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611e3a565b5090979650505050505050565b600082821115611ec957fe5b50900390565b815481835581811115610bf757600083815260209020610bf791810190830161086891905b80821115611f085760008155600101611ef4565b50905600a165627a7a72305820dbb7c5f77cafc38fe8a52b4fdedc19d1906b2e63ac88af071819189f778d35a30029

Swarm Source

bzzr://dbb7c5f77cafc38fe8a52b4fdedc19d1906b2e63ac88af071819189f778d35a3
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.